forked from 2009Scape/Server
Added initial version
This commit is contained in:
commit
b1dccb3fed
14153 changed files with 1285206 additions and 0 deletions
519
Client/src/main/java/org/runite/client/DataBuffer.java
Normal file
519
Client/src/main/java/org/runite/client/DataBuffer.java
Normal file
|
|
@ -0,0 +1,519 @@
|
|||
package org.runite.client;
|
||||
|
||||
import kotlin.text.Charsets;
|
||||
import org.rs09.client.Linkable;
|
||||
import org.rs09.client.config.GameConfig;
|
||||
import org.rs09.client.util.ByteArrayPool;
|
||||
import org.rs09.client.util.CRC;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.Objects;
|
||||
|
||||
public class DataBuffer extends Linkable {
|
||||
|
||||
public DataBuffer(int capacity) {
|
||||
this.buffer = ByteArrayPool.INSTANCE.getByteArray(capacity);
|
||||
this.index = 0;
|
||||
}
|
||||
|
||||
public DataBuffer(byte[] buffer) {
|
||||
this.index = 0;
|
||||
this.buffer = buffer;
|
||||
}
|
||||
|
||||
public byte[] buffer;
|
||||
public int index;
|
||||
|
||||
public final int readUnsignedShort() {
|
||||
this.index += 2;
|
||||
return (this.buffer[-2 + this.index] << 8 & 0xff00) + (this.buffer[-1 + this.index] & 255);
|
||||
}
|
||||
|
||||
public final void writeInt(int value) {
|
||||
this.buffer[this.index++] = (byte) (value >> 24);
|
||||
this.buffer[this.index++] = (byte) (value >> 16);
|
||||
this.buffer[this.index++] = (byte) (value >> 8);
|
||||
this.buffer[this.index++] = (byte) value;
|
||||
}
|
||||
|
||||
final void writeLong(long value) {
|
||||
this.buffer[this.index++] = (byte) ((int) (value >> 56));
|
||||
this.buffer[this.index++] = (byte) ((int) (value >> 48));
|
||||
this.buffer[this.index++] = (byte) ((int) (value >> 40));
|
||||
this.buffer[this.index++] = (byte) ((int) (value >> 32));
|
||||
this.buffer[this.index++] = (byte) ((int) (value >> 24));
|
||||
this.buffer[this.index++] = (byte) ((int) (value >> 16));
|
||||
this.buffer[this.index++] = (byte) ((int) (value >> 8));
|
||||
this.buffer[this.index++] = (byte) ((int) value);
|
||||
}
|
||||
|
||||
// TODO Rename / refactor
|
||||
final void method739(int var2, long var3) {
|
||||
--var2;
|
||||
if (var2 >= 0 && var2 <= 7) {
|
||||
for (int var5 = var2 * 8; 0 <= var5; var5 -= 8) {
|
||||
this.buffer[this.index++] = (byte) ((int) (var3 >> var5));
|
||||
}
|
||||
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Rename / refactor
|
||||
final int method741() {
|
||||
byte var2 = this.buffer[this.index++];
|
||||
|
||||
int var3;
|
||||
for (var3 = 0; 0 > var2; var2 = this.buffer[this.index++]) {
|
||||
var3 = (127 & var2 | var3) << 7;
|
||||
}
|
||||
|
||||
return var2 | var3;
|
||||
}
|
||||
|
||||
// TODO Rename / refactor
|
||||
final void method742(int var2) {
|
||||
this.buffer[this.index + -var2 - 4] = (byte) (var2 >> 24);
|
||||
this.buffer[this.index + -var2 - 3] = (byte) (var2 >> 16);
|
||||
this.buffer[this.index + -var2 - 2] = (byte) (var2 >> 8);
|
||||
this.buffer[this.index + -var2 - 1] = (byte) var2;
|
||||
}
|
||||
|
||||
final void write128Byte(int value) {
|
||||
this.buffer[this.index++] = (byte) (128 - value);
|
||||
}
|
||||
|
||||
// TODO Rename / refactor
|
||||
public final void writeString(RSString var2) {
|
||||
this.index += var2.method1580(this.buffer, this.index, var2.length());
|
||||
this.buffer[this.index++] = 0;
|
||||
}
|
||||
|
||||
public final void writeString(String string) {
|
||||
byte[] bytes = string.getBytes(Charsets.ISO_8859_1);
|
||||
System.arraycopy(bytes, 0, buffer, index, bytes.length);
|
||||
index += bytes.length;
|
||||
buffer[index++] = 0;
|
||||
}
|
||||
|
||||
final int readSignedShort128() {
|
||||
this.index += 2;
|
||||
int value = ((this.buffer[this.index - 2] & 0xff) << 8) +
|
||||
(this.buffer[this.index - 1] - 128 & 0xff);
|
||||
|
||||
if (value > 32767) {
|
||||
value -= 65536;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
public final int readInt() {
|
||||
this.index += 4;
|
||||
return ((this.buffer[this.index - 4] & 0xff) << 24) +
|
||||
((this.buffer[this.index - 3] & 0xff) << 16) +
|
||||
((this.buffer[this.index - 2] & 0xff) << 8) +
|
||||
(this.buffer[this.index - 1] & 255);
|
||||
}
|
||||
|
||||
final byte readSigned128Byte() {
|
||||
return (byte) (128 - this.buffer[this.index++]);
|
||||
}
|
||||
|
||||
// TODO Refactor / rename method
|
||||
final RSString method750() {
|
||||
if (this.buffer[this.index] == 0) {
|
||||
this.index++;
|
||||
return null;
|
||||
} else {
|
||||
return this.readString();
|
||||
}
|
||||
}
|
||||
|
||||
final int readUnsignedByte128() {
|
||||
return this.buffer[this.index++] - 128 & 0xff;
|
||||
}
|
||||
|
||||
final void writeByte(int value) {
|
||||
this.buffer[this.index++] = (byte) value;
|
||||
}
|
||||
|
||||
final void putBytes(byte[] bytes, int length) {
|
||||
int i = 0;
|
||||
while (length > i) {
|
||||
this.buffer[this.index++] = bytes[i];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
final int readUnsigned128Byte() {
|
||||
return 128 - this.buffer[this.index++] & 255;
|
||||
}
|
||||
|
||||
// TODO
|
||||
final int getTriByte2() {
|
||||
try {
|
||||
this.index += 3;
|
||||
return ((this.buffer[this.index + -2] & 255) << 8) + ((this.buffer[-1 + this.index] & 255) << 16) + (this.buffer[-3 + this.index] & 255);
|
||||
} catch (RuntimeException var3) {
|
||||
throw ClientErrorException.clientError(var3, "wa.BA(" + (byte) -118 + ')');
|
||||
}
|
||||
}
|
||||
|
||||
final long readLong() {
|
||||
long msb = (long) this.readInt() & 0xFFFFFFFFL;
|
||||
long lsb = (long) this.readInt() & 0xFFFFFFFFL;
|
||||
return lsb + (msb << 32);
|
||||
}
|
||||
|
||||
final void writeIntLE(int value) {
|
||||
this.buffer[this.index++] = (byte) value;
|
||||
this.buffer[this.index++] = (byte) (value >> 8);
|
||||
this.buffer[this.index++] = (byte) (value >> 16);
|
||||
this.buffer[this.index++] = (byte) (value >> 24);
|
||||
}
|
||||
|
||||
final int readUnsignedShort128() {
|
||||
this.index += 2;
|
||||
return (this.buffer[this.index - 1] - 128 & 0xff)
|
||||
+ ('\uff00' & this.buffer[this.index - 2] << 8);
|
||||
}
|
||||
|
||||
final void writeIntV2(int value) {
|
||||
this.buffer[this.index++] = (byte) (value >> 16);
|
||||
this.buffer[this.index++] = (byte) (value >> 24);
|
||||
this.buffer[this.index++] = (byte) value;
|
||||
this.buffer[this.index++] = (byte) (value >> 8);
|
||||
}
|
||||
|
||||
final byte readSignedByte() {
|
||||
return this.buffer[this.index++];
|
||||
}
|
||||
|
||||
// TODO
|
||||
final RSString getGJString2(int var1) {
|
||||
try {
|
||||
byte var2 = this.buffer[this.index++];
|
||||
if (var1 < 50) {
|
||||
this.buffer = (byte[]) null;
|
||||
}
|
||||
|
||||
if (0 == var2) {
|
||||
int var3 = this.index;
|
||||
|
||||
while (Objects.requireNonNull(this.buffer)[this.index++] != 0) {
|
||||
}
|
||||
|
||||
return Class3_Sub13_Sub3.method178(this.buffer, this.index - (var3 - -1), var3);
|
||||
} else {
|
||||
throw new IllegalStateException("Bad version number in gjstr2");
|
||||
}
|
||||
} catch (RuntimeException var4) {
|
||||
throw ClientErrorException.clientError(var4, "wa.DA(" + var1 + ')');
|
||||
}
|
||||
}
|
||||
|
||||
final void writeFloatLE(float value) {
|
||||
int bits = Float.floatToRawIntBits(value);
|
||||
|
||||
this.buffer[this.index++] = (byte) bits;
|
||||
this.buffer[this.index++] = (byte) (bits >> 8);
|
||||
this.buffer[this.index++] = (byte) (bits >> 16);
|
||||
this.buffer[this.index++] = (byte) (bits >> 24);
|
||||
}
|
||||
|
||||
final byte readSignedNegativeByte() {
|
||||
return (byte) -this.buffer[this.index++];
|
||||
}
|
||||
|
||||
final void readBytes(byte[] out, int length) {
|
||||
for (int i = 0; length > i; ++i) {
|
||||
out[i] = this.buffer[this.index++];
|
||||
}
|
||||
}
|
||||
|
||||
final void writeShort128LE(int value) {
|
||||
this.buffer[this.index++] = (byte) (value + 128);
|
||||
this.buffer[this.index++] = (byte) (value >> 8);
|
||||
}
|
||||
|
||||
final int readUnsignedShortLE() {
|
||||
this.index += 2;
|
||||
return (255 & this.buffer[this.index - 2])
|
||||
+ ('\uff00' & this.buffer[this.index - 1] << 8);
|
||||
}
|
||||
|
||||
// TODO Some smart
|
||||
final void method768(int var2) {
|
||||
if (0 <= var2 && var2 < 128) {
|
||||
this.writeByte(var2);
|
||||
} else if (0 <= var2 && var2 < 32768) {
|
||||
this.writeShort('\u8000' + var2);
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
// TODO finish varbyte length?
|
||||
final void method769(int value) {
|
||||
this.buffer[-1 + -value + this.index] = (byte) value;
|
||||
}
|
||||
|
||||
public final void finishVarshortPacket(int value) {
|
||||
this.buffer[this.index + -value - 2] = (byte) (value >> 8);
|
||||
this.buffer[this.index + -value - 1] = (byte) value;
|
||||
}
|
||||
|
||||
// TODO XTEA crypt?
|
||||
final void method770(int[] var1, int var4) {
|
||||
int var5 = this.index;
|
||||
this.index = 5;
|
||||
int var6 = (-5 + var4) / 8;
|
||||
|
||||
for (int var7 = 0; var6 > var7; ++var7) {
|
||||
int var10 = -957401312;
|
||||
int var8 = this.readInt();
|
||||
int var9 = this.readInt();
|
||||
int var12 = 32;
|
||||
|
||||
for (int var11 = -1640531527; var12-- > 0; var8 -= (var9 >>> 5 ^ var9 << 4) + var9 ^ var1[var10 & 3] + var10) {
|
||||
var9 -= var1[(6754 & var10) >>> 11] + var10 ^ var8 + (var8 >>> 5 ^ var8 << 4);
|
||||
var10 -= var11;
|
||||
}
|
||||
|
||||
this.index -= 8;
|
||||
this.writeInt(var8);
|
||||
this.writeInt(var9);
|
||||
}
|
||||
|
||||
this.index = var5;
|
||||
}
|
||||
|
||||
// TODO
|
||||
final void method771(int var2) {
|
||||
if ((-128 & var2) != 0) {
|
||||
if ((-16384 & var2) != 0) {
|
||||
if ((var2 & -2097152) != 0) {
|
||||
if (0 != (-268435456 & var2)) {
|
||||
this.writeByte(var2 >>> 28 | 128);
|
||||
}
|
||||
|
||||
this.writeByte(128 | var2 >>> 21);
|
||||
}
|
||||
|
||||
this.writeByte(128 | var2 >>> 14);
|
||||
}
|
||||
|
||||
this.writeByte(var2 >>> 7 | 128);
|
||||
}
|
||||
|
||||
this.writeByte(var2 & 127);
|
||||
}
|
||||
|
||||
// TODO
|
||||
final long method772(int var1) {
|
||||
--var1;
|
||||
if (0 <= var1 && var1 <= 7) {
|
||||
long var4 = 0L;
|
||||
|
||||
for (int var3 = var1 * 8; var3 >= 0; var3 -= 8) {
|
||||
var4 |= ((long) this.buffer[this.index++] & 255L) << var3;
|
||||
}
|
||||
|
||||
return var4;
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
// TODO
|
||||
final int method773() {
|
||||
int var3 = this.getSmart();
|
||||
|
||||
int var2;
|
||||
for (var2 = 0; 32767 == var3; var2 += 32767) {
|
||||
var3 = this.getSmart();
|
||||
}
|
||||
|
||||
var2 += var3;
|
||||
return var2;
|
||||
}
|
||||
|
||||
final void readBytesReverse(int length, byte[] out) {
|
||||
for (int i = -(-length - -1); i >= 0; --i) {
|
||||
out[i] = this.buffer[this.index++];
|
||||
}
|
||||
}
|
||||
|
||||
final void writeIntV1(int value) {
|
||||
this.buffer[this.index++] = (byte) (value >> 8);
|
||||
this.buffer[this.index++] = (byte) value;
|
||||
this.buffer[this.index++] = (byte) (value >> 24);
|
||||
this.buffer[this.index++] = (byte) (value >> 16);
|
||||
}
|
||||
|
||||
public final RSString readString() {
|
||||
int startIndex = this.index;
|
||||
|
||||
while (this.buffer[this.index++] != 0) ;
|
||||
|
||||
return Class3_Sub13_Sub3.method178(this.buffer, (this.index - 1) - startIndex, startIndex);
|
||||
}
|
||||
|
||||
final int getSmart() {
|
||||
int var2 = this.buffer[this.index] & 255;
|
||||
return 128 <= var2 ? -32768 + this.readUnsignedShort() : this.readUnsignedByte();
|
||||
}
|
||||
|
||||
final void writeMedium(int value) {
|
||||
this.buffer[this.index++] = (byte) (value >> 16);
|
||||
this.buffer[this.index++] = (byte) (value >> 8);
|
||||
this.buffer[this.index++] = (byte) value;
|
||||
}
|
||||
|
||||
final int readIntV1() {
|
||||
this.index += 4;
|
||||
return ((this.buffer[this.index - 2] & 255) << 24) +
|
||||
((this.buffer[this.index - 1] & 255) << 16) +
|
||||
('\uff00' & this.buffer[this.index - 4] << 8) +
|
||||
(this.buffer[this.index + -3] & 255);
|
||||
}
|
||||
|
||||
final int readUnsignedShortLE128() {
|
||||
this.index += 2;
|
||||
return (this.buffer[this.index - 1] << 8 & '\uff00') +
|
||||
(255 & this.buffer[this.index - 2] - 128);
|
||||
}
|
||||
|
||||
final int readIntLE() {
|
||||
this.index += 4;
|
||||
return (255 & this.buffer[-4 + this.index]) +
|
||||
(16711680 & this.buffer[this.index - 2] << 16) +
|
||||
((255 & this.buffer[this.index + -1]) << 24) +
|
||||
((this.buffer[-3 + this.index] & 255) << 8);
|
||||
}
|
||||
|
||||
final void putShortA(int var1) {
|
||||
this.buffer[this.index++] = (byte) (var1 >> 8);
|
||||
this.buffer[this.index++] = (byte) (128 + var1);
|
||||
}
|
||||
|
||||
// TODO What is the difference between this and WriteIntLE?
|
||||
final void writeIntLE2(int value) {
|
||||
this.buffer[this.index++] = (byte) value;
|
||||
this.buffer[this.index++] = (byte) (value >> 8);
|
||||
this.buffer[this.index++] = (byte) (value >> 16);
|
||||
this.buffer[this.index++] = (byte) (value >> 24);
|
||||
}
|
||||
|
||||
final int readUnsignedNegativeByte() {
|
||||
return -this.buffer[this.index++] & 0xff;
|
||||
}
|
||||
|
||||
final int readSignedShort() {
|
||||
this.index += 2;
|
||||
int value = (this.buffer[-1 + this.index] & 255) + ((255 & this.buffer[this.index + -2]) << 8);
|
||||
if (value > 32767) {
|
||||
value -= 65536;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
final int readSignedShortLE128() {
|
||||
this.index += 2;
|
||||
int var2 = ((this.buffer[this.index - 1] & 255) << 8) + (this.buffer[-2 + this.index] - 128 & 255);
|
||||
|
||||
if (32767 < var2) {
|
||||
var2 -= 65536;
|
||||
}
|
||||
|
||||
return var2;
|
||||
}
|
||||
|
||||
final byte readSignedByte128() {
|
||||
return (byte) (this.buffer[this.index++] - 128);
|
||||
}
|
||||
|
||||
final void writeByte128(int value) {
|
||||
this.buffer[this.index++] = (byte) (128 + value);
|
||||
}
|
||||
|
||||
final int readSignedShortLE() {
|
||||
this.index += 2;
|
||||
|
||||
int value = (this.buffer[-2 + this.index] & 255) + ('\uff00' & this.buffer[this.index + -1] << 8);
|
||||
if (value > 32767) {
|
||||
value -= 65536;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
final void writeCRC(int startOffset) {
|
||||
int crc = CRC.INSTANCE.crc32(this.buffer, startOffset, this.index);
|
||||
this.writeInt(crc);
|
||||
}
|
||||
|
||||
public final int readMedium() {
|
||||
this.index += 3;
|
||||
return (16711680 & this.buffer[this.index + -3] << 16) +
|
||||
(('\uff00' & this.buffer[-2 + this.index] << 8) +
|
||||
(this.buffer[this.index + -1] & 255));
|
||||
}
|
||||
|
||||
final void writeShortLE(int value) {
|
||||
this.buffer[this.index++] = (byte) value;
|
||||
this.buffer[this.index++] = (byte) (value >> 8);
|
||||
}
|
||||
|
||||
// TODO
|
||||
final int getSmart(int var1) {
|
||||
int var2 = this.buffer[this.index] & 255;
|
||||
return var2 < 128 ? -64 + this.readUnsignedByte() : this.readUnsignedShort() - '\uc000';
|
||||
}
|
||||
|
||||
final int readIntV2() {
|
||||
this.index += 4;
|
||||
return ((this.buffer[this.index + -3] & 255) << 24) +
|
||||
(16711680 & this.buffer[this.index + -4] << 16) +
|
||||
((this.buffer[this.index + -1] & 255) << 8) +
|
||||
(255 & this.buffer[this.index + -2]);
|
||||
}
|
||||
|
||||
final void rsaEncrypt(BigInteger var1, BigInteger var2) {
|
||||
int var4 = this.index;
|
||||
this.index = 0;
|
||||
byte[] var5 = new byte[var4];
|
||||
this.readBytes(var5, var4);
|
||||
BigInteger var6 = new BigInteger(var5);
|
||||
BigInteger var7;
|
||||
if (GameConfig.RSA)
|
||||
var7 = var6.modPow(var1, var2);
|
||||
else
|
||||
var7 = var6;
|
||||
byte[] var8 = var7.toByteArray();
|
||||
this.index = 0;
|
||||
this.writeByte(var8.length);
|
||||
this.putBytes(var8, var8.length);
|
||||
}
|
||||
|
||||
final void writeFloat(float value) {
|
||||
int bits = Float.floatToRawIntBits(value);
|
||||
|
||||
this.buffer[this.index++] = (byte) (bits >> 24);
|
||||
this.buffer[this.index++] = (byte) (bits >> 16);
|
||||
this.buffer[this.index++] = (byte) (bits >> 8);
|
||||
this.buffer[this.index++] = (byte) bits;
|
||||
}
|
||||
|
||||
public final int readUnsignedByte() {
|
||||
return this.buffer[this.index++] & 255;
|
||||
}
|
||||
|
||||
public final void writeShort(int value) {
|
||||
this.buffer[this.index++] = (byte) (value >> 8);
|
||||
this.buffer[this.index++] = (byte) value;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue