Added initial version

This commit is contained in:
Ceikry 2021-03-07 20:37:32 -06:00
commit b1dccb3fed
14153 changed files with 1285206 additions and 0 deletions

View 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;
}
}