Actions

Data Types: Difference between revisions

From RuneWiki

No edit summary
Line 1: Line 1:
== Nomenclature ==
=== Alt Packets ===
These buffer functions are used to obfuscate the network protocol - there are 3 alt types typically, but their obfuscation process can strip out unused methods so there is a chance not all of them are in a specific revision.


=== Endianness ===
You won't find these used in the cache.
(none) - big (DCBA)


i - "inverse" (little) (ABCD)
==== Get ====
<syntaxhighlight lang="java" line="1">
public final int g1_alt1() {
    return this.data[this.pos++] - 128 & 0xFF;
}


m - "middle" (CDAB) - not an authentic name, no clue on original
public final int g1_alt2() {
    return -this.data[this.pos++] & 0xFF;
}


im - "inverse-middle" (reverse) (BADC) - not an authentic name, jagex may call this "_alt3"
public final int g1_alt3() {
    return 128 - this.data[this.pos++] & 0xFF;
}


=== Operations ===
public final byte g1b_alt1() {
g - get
    return (byte) (this.data[this.pos++] - 128);
}


p - put
public final byte g1b_alt2() {
    return (byte) -this.data[this.pos++];
}


=== Types ===
public final byte g1b_alt3() {
number of bytes - fixed size
    return (byte) (128 - this.data[this.pos++]);
}


smart - 0 to 32768 (unsigned), -16384 to +16383 (signed)
public final int g2_alt2() {
    this.pos += 2;
    return ((this.data[this.pos - 2] & 0xFF) << 8) + (this.data[this.pos - 1] - 128 & 0xFF);
}


float - standard 32-bit floating point number
public final int g2_alt3() {
    this.pos += 2;
    return ((this.data[this.pos - 1] & 0xFF) << 8) + (this.data[this.pos - 2] - 128 & 0xFF);
}


jstr - NUL-terminated / Newline-terminated (depending on revision) string
public final int g3_alt1() {
    this.pos += 3;
    return ((this.data[this.pos - 3] & 0xFF) << 16) + ((this.data[this.pos - 1] & 0xFF) << 8) + (this.data[this.pos - 2] & 0xFF);
}


jstr2 - version-prefixed jstr (unused)
public final int g4_alt1() {
    this.pos += 4;
    return ((this.data[this.pos - 1] & 0xFF) << 24) + ((this.data[this.pos - 2] & 0xFF) << 16) + ((this.data[this.pos - 3] & 0xFF) << 8) + (this.data[this.pos - 4] & 0xFF);
}


data - raw data (size known ahead of time/elsewhere)
public final int g4_alt2() {
    this.pos += 4;
    return ((this.data[this.pos - 2] & 0xFF) << 24) + ((this.data[this.pos - 1] & 0xFF) << 16) + ((this.data[this.pos - 4] & 0xFF) << 8) + (this.data[this.pos - 3] & 0xFF);
}


VarSmart - variable-length smart
public final int g4_alt3() {
    this.pos += 4;
    return ((this.data[this.pos - 3] & 0xFF) << 24) + ((this.data[this.pos - 4] & 0xFF) << 16) + ((this.data[this.pos - 1] & 0xFF) << 8) + (this.data[this.pos - 2] & 0xFF);
}
</syntaxhighlight>


VarInt - variable-length int
==== Put ====
<syntaxhighlight lang="java" line="1">
public final void p1_alt1(int value) {
    this.data[this.pos++] = (byte) (value + 128);
}


VarLong - variable-length long
public final void p1_alt2(int value) {
    this.data[this.pos++] = (byte) -value;
}


=== Signedness ===
public final void p1_alt3(int value) {
(none) - unsigned, depending on exact circumstances with Java's int/long implementation
    this.data[this.pos++] = (byte) (128 - value);
}


signed - explicitly signed, allowed to overflow
public final void p2_alt1(int value) {
    this.data[this.pos++] = (byte) value;
    this.data[this.pos++] = (byte) (value >> 8);
}


=== Transformation ===
public final void p2_alt2(int value) {
(none) - no change
    this.data[this.pos++] = (byte) (value >> 8);
    this.data[this.pos++] = (byte) (value + 128);
}


add - add 128 to the lowest byte
public final void p2_alt3(int value) {
    this.data[this.pos++] = (byte) (value + 128);
    this.data[this.pos++] = (byte) (value >> 8);
}


sub - subtract lowest byte from 128
public final void p4_alt1(int value) {
    this.data[this.pos++] = (byte) value;
    this.data[this.pos++] = (byte) (value >> 8);
    this.data[this.pos++] = (byte) (value >> 16);
    this.data[this.pos++] = (byte) (value >> 24);
}


neg - negate, only used on byte types
public final void p4_alt2(int value) {
    this.data[this.pos++] = (byte) (value >> 8);
    this.data[this.pos++] = (byte) value;
    this.data[this.pos++] = (byte) (value >> 24);
    this.data[this.pos++] = (byte) (value >> 16);
}


== Operation Table ==
public final void p4_alt3(int value) {
{| class="wikitable"
    this.data[this.pos++] = (byte) (value >> 16);
!Operation
    this.data[this.pos++] = (byte) (value >> 24);
!Description
    this.data[this.pos++] = (byte) value;
|-
    this.data[this.pos++] = (byte) (value >> 8);
|p1
}
|Writes a single byte (8-bits).
</syntaxhighlight>
|-
|p2
|Writes a short (2 bytes / 16-bits).
|-
|p3
|Writes a medium (3 bytes / 24-bits).
|-
|p4
|Writes an int (4 bytes / 32-bits).
|-
|p8
|Writes a long (8 bytes / 64-bits).
|-
|pjstr
|Writes a string.
|-
|ip2
|Writes a little-endian short.
|-
|ip4
|Writes a little-endian int.
|-
|g2s
|Reads a signed short.
|-
|g2sadd
|Reads a signed short, and applies the "add" transformation.
|}

Revision as of 14:46, 11 February 2024

Alt Packets

These buffer functions are used to obfuscate the network protocol - there are 3 alt types typically, but their obfuscation process can strip out unused methods so there is a chance not all of them are in a specific revision.

You won't find these used in the cache.

Get

public final int g1_alt1() {
    return this.data[this.pos++] - 128 & 0xFF;
}

public final int g1_alt2() {
    return -this.data[this.pos++] & 0xFF;
}

public final int g1_alt3() {
    return 128 - this.data[this.pos++] & 0xFF;
}

public final byte g1b_alt1() {
    return (byte) (this.data[this.pos++] - 128);
}

public final byte g1b_alt2() {
    return (byte) -this.data[this.pos++];
}

public final byte g1b_alt3() {
    return (byte) (128 - this.data[this.pos++]);
}

public final int g2_alt2() {
    this.pos += 2;
    return ((this.data[this.pos - 2] & 0xFF) << 8) + (this.data[this.pos - 1] - 128 & 0xFF);
}

public final int g2_alt3() {
    this.pos += 2;
    return ((this.data[this.pos - 1] & 0xFF) << 8) + (this.data[this.pos - 2] - 128 & 0xFF);
}

public final int g3_alt1() {
    this.pos += 3;
    return ((this.data[this.pos - 3] & 0xFF) << 16) + ((this.data[this.pos - 1] & 0xFF) << 8) + (this.data[this.pos - 2] & 0xFF);
}

public final int g4_alt1() {
    this.pos += 4;
    return ((this.data[this.pos - 1] & 0xFF) << 24) + ((this.data[this.pos - 2] & 0xFF) << 16) + ((this.data[this.pos - 3] & 0xFF) << 8) + (this.data[this.pos - 4] & 0xFF);
}

public final int g4_alt2() {
    this.pos += 4;
    return ((this.data[this.pos - 2] & 0xFF) << 24) + ((this.data[this.pos - 1] & 0xFF) << 16) + ((this.data[this.pos - 4] & 0xFF) << 8) + (this.data[this.pos - 3] & 0xFF);
}

public final int g4_alt3() {
    this.pos += 4;
    return ((this.data[this.pos - 3] & 0xFF) << 24) + ((this.data[this.pos - 4] & 0xFF) << 16) + ((this.data[this.pos - 1] & 0xFF) << 8) + (this.data[this.pos - 2] & 0xFF);
}

Put

public final void p1_alt1(int value) {
    this.data[this.pos++] = (byte) (value + 128);
}

public final void p1_alt2(int value) {
    this.data[this.pos++] = (byte) -value;
}

public final void p1_alt3(int value) {
    this.data[this.pos++] = (byte) (128 - value);
}

public final void p2_alt1(int value) {
    this.data[this.pos++] = (byte) value;
    this.data[this.pos++] = (byte) (value >> 8);
}

public final void p2_alt2(int value) {
    this.data[this.pos++] = (byte) (value >> 8);
    this.data[this.pos++] = (byte) (value + 128);
}

public final void p2_alt3(int value) {
    this.data[this.pos++] = (byte) (value + 128);
    this.data[this.pos++] = (byte) (value >> 8);
}

public final void p4_alt1(int value) {
    this.data[this.pos++] = (byte) value;
    this.data[this.pos++] = (byte) (value >> 8);
    this.data[this.pos++] = (byte) (value >> 16);
    this.data[this.pos++] = (byte) (value >> 24);
}

public final void p4_alt2(int value) {
    this.data[this.pos++] = (byte) (value >> 8);
    this.data[this.pos++] = (byte) value;
    this.data[this.pos++] = (byte) (value >> 24);
    this.data[this.pos++] = (byte) (value >> 16);
}

public final void p4_alt3(int value) {
    this.data[this.pos++] = (byte) (value >> 16);
    this.data[this.pos++] = (byte) (value >> 24);
    this.data[this.pos++] = (byte) value;
    this.data[this.pos++] = (byte) (value >> 8);
}