mirror of
https://github.com/sirjonasxx/G-Earth.git
synced 2024-11-30 04:00:50 +01:00
Add Shockwave support to extensions
This commit is contained in:
parent
b66968435f
commit
deec521ab1
@ -35,7 +35,10 @@ public class VL64Encoding {
|
||||
}
|
||||
|
||||
public static int decode(byte[] bzData) {
|
||||
int pos = 0;
|
||||
return decode(bzData, 0);
|
||||
}
|
||||
|
||||
public static int decode(byte[] bzData, int pos) {
|
||||
int v = 0;
|
||||
|
||||
boolean negative = (bzData[pos] & 4) == 4;
|
||||
|
@ -1,6 +1,7 @@
|
||||
package gearth.extensions;
|
||||
|
||||
import gearth.misc.HostInfo;
|
||||
import gearth.protocol.HPacketFormat;
|
||||
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionMessage;
|
||||
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionMessage.Incoming;
|
||||
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionMessage.Outgoing;
|
||||
@ -174,12 +175,14 @@ public abstract class Extension extends ExtensionBase {
|
||||
}
|
||||
else if (packet.headerId() == Outgoing.PacketIntercept.HEADER_ID) {
|
||||
String stringifiedMessage = packet.readLongString();
|
||||
HMessage habboMessage = new HMessage(stringifiedMessage);
|
||||
HPacketFormat packetFormat = HPacketFormat.fromId(packet.readInteger());
|
||||
HMessage habboMessage = new HMessage(packetFormat, stringifiedMessage);
|
||||
|
||||
modifyMessage(habboMessage);
|
||||
|
||||
HPacket response = new HPacket(Incoming.ManipulatedPacket.MANIPULATED_PACKET);
|
||||
response.appendLongString(habboMessage.stringify());
|
||||
response.appendInt(habboMessage.getPacket().getFormat().getId());
|
||||
|
||||
writeToStream(response.toBytes());
|
||||
}
|
||||
@ -237,6 +240,7 @@ public abstract class Extension extends ExtensionBase {
|
||||
packet1.appendByte(direction == HMessage.Direction.TOCLIENT ? (byte)0 : (byte)1);
|
||||
packet1.appendInt(packet.getBytesLength());
|
||||
packet1.appendBytes(packet.toBytes());
|
||||
packet1.appendInt(packet.getFormat().getId());
|
||||
try {
|
||||
writeToStream(packet1.toBytes());
|
||||
return true;
|
||||
|
@ -15,7 +15,9 @@ public class HMessage implements StringifyAble {
|
||||
|
||||
private boolean isBlocked;
|
||||
|
||||
public HMessage(String fromString) {
|
||||
public HMessage(HPacketFormat format, String fromString) {
|
||||
// A little bit hacky to get the correct packet class inside constructFromString.
|
||||
this.hPacket = format.createPacket(0);
|
||||
constructFromString(fromString);
|
||||
}
|
||||
|
||||
@ -65,9 +67,8 @@ public class HMessage implements StringifyAble {
|
||||
this.isBlocked = parts[0].equals("1");
|
||||
this.index = Integer.parseInt(parts[1]);
|
||||
this.direction = parts[2].equals("TOCLIENT") ? Direction.TOCLIENT : Direction.TOSERVER;
|
||||
HPacket p = new HPacket(new byte[0]);
|
||||
p.constructFromString(parts[3]);
|
||||
this.hPacket = p;
|
||||
this.hPacket = hPacket.getFormat().createPacket(0);
|
||||
this.hPacket.constructFromString(parts[3]);
|
||||
}
|
||||
|
||||
public void constructFromHMessage(HMessage message) {
|
||||
|
@ -1,6 +1,5 @@
|
||||
package gearth.protocol;
|
||||
|
||||
import gearth.extensions.parsers.HDirection;
|
||||
import gearth.misc.StringifyAble;
|
||||
import gearth.services.packet_info.PacketInfo;
|
||||
import gearth.services.packet_info.PacketInfoManager;
|
||||
@ -17,6 +16,7 @@ import java.util.Optional;
|
||||
public class HPacket implements StringifyAble {
|
||||
|
||||
protected boolean isEdited = false;
|
||||
protected HPacketFormat packetFormat = HPacketFormat.EVA_WIRE;
|
||||
protected byte[] packetInBytes;
|
||||
protected int readIndex = 6;
|
||||
|
||||
@ -83,7 +83,9 @@ public class HPacket implements StringifyAble {
|
||||
isEdited = false;
|
||||
}
|
||||
|
||||
|
||||
public HPacketFormat getFormat() {
|
||||
return packetFormat;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return PacketStringUtils.toString(packetInBytes);
|
||||
|
@ -1,15 +1,39 @@
|
||||
package gearth.protocol;
|
||||
|
||||
import gearth.extensions.parsers.HDirection;
|
||||
import gearth.protocol.connection.HClient;
|
||||
import gearth.protocol.packethandler.shockwave.packets.ShockPacketIncoming;
|
||||
import gearth.protocol.packethandler.shockwave.packets.ShockPacketOutgoing;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum HPacketFormat {
|
||||
|
||||
EVA_WIRE,
|
||||
WEDGIE_INCOMING,
|
||||
WEDGIE_OUTGOING;
|
||||
EVA_WIRE(0),
|
||||
WEDGIE_INCOMING(1),
|
||||
WEDGIE_OUTGOING(2);
|
||||
|
||||
private static final Map<Integer, HPacketFormat> ID_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (HPacketFormat format : values()) {
|
||||
ID_MAP.put(format.id, format);
|
||||
}
|
||||
}
|
||||
|
||||
public static HPacketFormat fromId(int id) {
|
||||
return ID_MAP.get(id);
|
||||
}
|
||||
|
||||
private final int id;
|
||||
|
||||
HPacketFormat(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public static HPacketFormat getFormat(HClient client, HMessage.Direction direction) {
|
||||
if (client != HClient.SHOCKWAVE) {
|
||||
|
@ -3,6 +3,7 @@ package gearth.protocol.packethandler.shockwave.buffers;
|
||||
import gearth.protocol.HPacket;
|
||||
import gearth.protocol.packethandler.ByteArrayUtils;
|
||||
import gearth.protocol.packethandler.shockwave.packets.ShockPacket;
|
||||
import gearth.protocol.packethandler.shockwave.packets.ShockPacketIncoming;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@ -31,7 +32,7 @@ public class ShockwaveInBuffer implements ShockwaveBuffer {
|
||||
for (int i = 0; i < buffer.length; i++) {
|
||||
if (buffer[i] == 1) {
|
||||
byte[] packetData = Arrays.copyOfRange(buffer, curPos, i);
|
||||
packets.add(new ShockPacket(packetData));
|
||||
packets.add(new ShockPacketIncoming(packetData));
|
||||
curPos = i + 1;
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import gearth.encoding.Base64Encoding;
|
||||
import gearth.protocol.HPacket;
|
||||
import gearth.protocol.packethandler.ByteArrayUtils;
|
||||
import gearth.protocol.packethandler.shockwave.packets.ShockPacket;
|
||||
import gearth.protocol.packethandler.shockwave.packets.ShockPacketOutgoing;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@ -39,7 +40,7 @@ public class ShockwaveOutBuffer implements ShockwaveBuffer {
|
||||
int endPos = length + PACKET_LENGTH_SIZE;
|
||||
byte[] packet = Arrays.copyOfRange(buffer, PACKET_LENGTH_SIZE, endPos);
|
||||
|
||||
out.add(new ShockPacket(packet));
|
||||
out.add(new ShockPacketOutgoing(packet));
|
||||
|
||||
buffer = Arrays.copyOfRange(buffer, endPos, buffer.length);
|
||||
}
|
||||
|
@ -10,24 +10,28 @@ import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.InvalidParameterException;
|
||||
|
||||
public class ShockPacket extends HPacket {
|
||||
public ShockPacket(byte[] packet) {
|
||||
public abstract class ShockPacket extends HPacket {
|
||||
public ShockPacket(HPacketFormat format, byte[] packet) {
|
||||
super(packet);
|
||||
packetFormat = format;
|
||||
readIndex = 2;
|
||||
}
|
||||
|
||||
public ShockPacket(HPacket packet) {
|
||||
public ShockPacket(HPacketFormat format, HPacket packet) {
|
||||
super(packet);
|
||||
packetFormat = format;
|
||||
readIndex = 2;
|
||||
}
|
||||
|
||||
public ShockPacket(String packet, HPacketFormat format) {
|
||||
public ShockPacket(HPacketFormat format, String packet) {
|
||||
super(packet, format);
|
||||
packetFormat = format;
|
||||
readIndex = 2;
|
||||
}
|
||||
|
||||
public ShockPacket(int header) {
|
||||
public ShockPacket(HPacketFormat format, int header) {
|
||||
super(Base64Encoding.encode(header, 2));
|
||||
packetFormat = format;
|
||||
readIndex = 2;
|
||||
}
|
||||
|
||||
@ -106,6 +110,136 @@ public class ShockPacket extends HPacket {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte readByte() {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte readByte(int index) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public short readShort() {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public short readShort(int index) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readUshort() {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readUshort(int index) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInteger() {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInteger(int index) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double readDouble() {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double readDouble(int index) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float readFloat() {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float readFloat(int index) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] readBytes(int length) {
|
||||
return super.readBytes(length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] readBytes(int length, int index) {
|
||||
return super.readBytes(length, index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long readLong() {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long readLong(int index) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString(Charset charset) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString(int index, Charset charset) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString() {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString(int index) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readLongString(Charset charset) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readLongString(int index, Charset charset) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readLongString() {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readLongString(int index) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean readBoolean() {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean readBoolean(int index) {
|
||||
throw new ShockPacketUnsupported();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void replacePacketId(short headerId) {
|
||||
final byte[] header = Base64Encoding.encode(headerId, 2);
|
||||
@ -128,8 +262,8 @@ public class ShockPacket extends HPacket {
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket copy() {
|
||||
return new ShockPacket(this);
|
||||
public void resetReadIndex() {
|
||||
setReadIndex(2);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,42 +1,48 @@
|
||||
package gearth.protocol.packethandler.shockwave.packets;
|
||||
|
||||
import gearth.encoding.Base64Encoding;
|
||||
import gearth.encoding.VL64Encoding;
|
||||
import gearth.protocol.HPacket;
|
||||
import gearth.protocol.HPacketFormat;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Arrays;
|
||||
|
||||
// Server to Client
|
||||
public class ShockPacketIncoming extends ShockPacket {
|
||||
public ShockPacketIncoming(byte[] packet) {
|
||||
super(packet);
|
||||
super(HPacketFormat.WEDGIE_INCOMING, packet);
|
||||
}
|
||||
|
||||
public ShockPacketIncoming(HPacket packet) {
|
||||
super(packet);
|
||||
super(HPacketFormat.WEDGIE_INCOMING, packet);
|
||||
}
|
||||
|
||||
public ShockPacketIncoming(String packet) {
|
||||
super(packet, HPacketFormat.WEDGIE_INCOMING);
|
||||
super(HPacketFormat.WEDGIE_INCOMING, packet);
|
||||
}
|
||||
|
||||
public ShockPacketIncoming(int header) {
|
||||
super(header);
|
||||
super(HPacketFormat.WEDGIE_INCOMING, header);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendBoolean(boolean b) {
|
||||
public HPacket appendBoolean(boolean value) {
|
||||
isEdited = true;
|
||||
appendBytes(VL64Encoding.encode(b ? 1 : 0));
|
||||
appendBytes(VL64Encoding.encode(value ? 1 : 0));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendUShort(int ushort) {
|
||||
public HPacket appendShort(short value) {
|
||||
return appendUShort(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendUShort(int value) {
|
||||
isEdited = true;
|
||||
appendBytes(VL64Encoding.encode(ushort));
|
||||
appendBytes(VL64Encoding.encode(value));
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -48,17 +54,69 @@ public class ShockPacketIncoming extends ShockPacket {
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendString(String s) {
|
||||
return appendString(s, StandardCharsets.ISO_8859_1);
|
||||
public HPacket appendString(String value) {
|
||||
return appendString(value, StandardCharsets.ISO_8859_1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendString(String s, Charset charset) {
|
||||
public HPacket appendString(String value, Charset charset) {
|
||||
isEdited = true;
|
||||
|
||||
final byte[] data = s.getBytes(charset);
|
||||
final byte[] data = value.getBytes(charset);
|
||||
appendBytes(data);
|
||||
appendByte((byte) 2);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean readBoolean() {
|
||||
return readInteger() == 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public short readShort() {
|
||||
return (short) readInteger();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readUshort() {
|
||||
return this.readShort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInteger() {
|
||||
int length = packetInBytes[readIndex] >> 3 & 7;
|
||||
int value = VL64Encoding.decode(packetInBytes, readIndex);
|
||||
|
||||
readIndex += length;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString() {
|
||||
return this.readString(StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString(Charset charset) {
|
||||
String result;
|
||||
|
||||
int startPos = readIndex;
|
||||
int endPos = ArrayUtils.indexOf(packetInBytes, (byte) 2, startPos);
|
||||
if (endPos > 0) {
|
||||
result = new String(Arrays.copyOfRange(packetInBytes, startPos, endPos), charset);
|
||||
} else {
|
||||
result = "";
|
||||
}
|
||||
|
||||
readIndex = endPos + 1;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket copy() {
|
||||
return new ShockPacketIncoming(this);
|
||||
}
|
||||
}
|
||||
|
@ -11,30 +11,35 @@ import java.nio.charset.StandardCharsets;
|
||||
// Client to Server
|
||||
public class ShockPacketOutgoing extends ShockPacket {
|
||||
public ShockPacketOutgoing(byte[] packet) {
|
||||
super(packet);
|
||||
super(HPacketFormat.WEDGIE_OUTGOING, packet);
|
||||
}
|
||||
|
||||
public ShockPacketOutgoing(HPacket packet) {
|
||||
super(packet);
|
||||
super(HPacketFormat.WEDGIE_OUTGOING, packet);
|
||||
}
|
||||
|
||||
public ShockPacketOutgoing(String packet) {
|
||||
super(packet, HPacketFormat.WEDGIE_OUTGOING);
|
||||
super(HPacketFormat.WEDGIE_OUTGOING, packet);
|
||||
}
|
||||
|
||||
public ShockPacketOutgoing(int header) {
|
||||
super(header);
|
||||
super(HPacketFormat.WEDGIE_OUTGOING, header);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendBoolean(boolean b) {
|
||||
return appendInt(b ? 1 : 0);
|
||||
public HPacket appendBoolean(boolean value) {
|
||||
return appendInt(value ? 1 : 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendUShort(int ushort) {
|
||||
public HPacket appendShort(short value) {
|
||||
return appendUShort(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendUShort(int value) {
|
||||
isEdited = true;
|
||||
appendBytes(Base64Encoding.encode(ushort, 2));
|
||||
appendBytes(Base64Encoding.encode(value, 2));
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -46,17 +51,60 @@ public class ShockPacketOutgoing extends ShockPacket {
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendString(String s) {
|
||||
return appendString(s, StandardCharsets.ISO_8859_1);
|
||||
public HPacket appendString(String value) {
|
||||
return appendString(value, StandardCharsets.ISO_8859_1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendString(String s, Charset charset) {
|
||||
public HPacket appendString(String value, Charset charset) {
|
||||
isEdited = true;
|
||||
|
||||
final byte[] data = s.getBytes(charset);
|
||||
final byte[] data = value.getBytes(charset);
|
||||
appendUShort(data.length);
|
||||
appendBytes(data);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean readBoolean() {
|
||||
return readInteger() == 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public short readShort() {
|
||||
return (short) Base64Encoding.decode(readBytes(2));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readUshort() {
|
||||
return this.readShort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInteger() {
|
||||
int length = packetInBytes[readIndex] >> 3 & 7;
|
||||
int value = VL64Encoding.decode(packetInBytes, readIndex);
|
||||
|
||||
readIndex += length;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString() {
|
||||
return this.readString(StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString(Charset charset) {
|
||||
int length = readUshort();
|
||||
byte[] data = readBytes(length);
|
||||
|
||||
return new String(data, charset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket copy() {
|
||||
return new ShockPacketOutgoing(this);
|
||||
}
|
||||
}
|
||||
|
@ -6,18 +6,17 @@ import gearth.misc.listenerpattern.Observable;
|
||||
import gearth.protocol.HConnection;
|
||||
import gearth.protocol.HMessage;
|
||||
import gearth.protocol.HPacket;
|
||||
import gearth.protocol.HPacketFormat;
|
||||
import gearth.protocol.connection.HState;
|
||||
import gearth.services.extension_handler.extensions.ExtensionListener;
|
||||
import gearth.services.extension_handler.extensions.GEarthExtension;
|
||||
import gearth.services.extension_handler.extensions.extensionproducers.ExtensionProducer;
|
||||
import gearth.services.extension_handler.extensions.extensionproducers.ExtensionProducerFactory;
|
||||
import gearth.services.extension_handler.extensions.extensionproducers.ExtensionProducerObserver;
|
||||
import gearth.ui.themes.Theme;
|
||||
import javafx.util.Pair;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class ExtensionHandler {
|
||||
|
||||
@ -244,7 +243,7 @@ public class ExtensionHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void stringToPacketRequest(String string) {
|
||||
protected void stringToPacketRequest(String string, HPacketFormat format) {
|
||||
HPacket packet = new HPacket(string);
|
||||
if (!packet.isPacketComplete()) packet.completePacket(hConnection.getPacketInfoManager());
|
||||
extension.stringToPacketResponse(packet);
|
||||
|
@ -2,6 +2,7 @@ package gearth.services.extension_handler.extensions;
|
||||
|
||||
import gearth.protocol.HMessage;
|
||||
import gearth.protocol.HPacket;
|
||||
import gearth.protocol.HPacketFormat;
|
||||
|
||||
public abstract class ExtensionListener {
|
||||
|
||||
@ -13,6 +14,11 @@ public abstract class ExtensionListener {
|
||||
protected void hasClosed() {}
|
||||
|
||||
protected void packetToStringRequest(HPacket packet) {}
|
||||
protected void stringToPacketRequest(String string) {}
|
||||
@Deprecated
|
||||
protected void stringToPacketRequest(String string) {
|
||||
// Kept for backwards compatibility with old extensions
|
||||
stringToPacketRequest(string, HPacketFormat.EVA_WIRE);
|
||||
}
|
||||
protected void stringToPacketRequest(String string, HPacketFormat format) {}
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package gearth.services.extension_handler.extensions;
|
||||
import gearth.misc.HostInfo;
|
||||
import gearth.misc.listenerpattern.Observable;
|
||||
import gearth.misc.listenerpattern.SynchronizedObservable;
|
||||
import gearth.protocol.HPacketFormat;
|
||||
import gearth.services.packet_info.PacketInfoManager;
|
||||
import gearth.protocol.HMessage;
|
||||
import gearth.protocol.HPacket;
|
||||
@ -92,8 +93,8 @@ public abstract class GEarthExtension {
|
||||
});
|
||||
packet.setReadIndex(orgIndex);
|
||||
}
|
||||
protected void stringToPacketRequest(String string) {
|
||||
extensionObservable.fireEvent(l -> l.stringToPacketRequest(string));
|
||||
protected void stringToPacketRequest(String string, HPacketFormat format) {
|
||||
extensionObservable.fireEvent(l -> l.stringToPacketRequest(string, format));
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
@ -3,6 +3,7 @@ package gearth.services.extension_handler.extensions.implementations.network;
|
||||
import gearth.misc.HostInfo;
|
||||
import gearth.protocol.HMessage;
|
||||
import gearth.protocol.HPacket;
|
||||
import gearth.protocol.HPacketFormat;
|
||||
import gearth.protocol.connection.HClient;
|
||||
import gearth.services.extension_handler.extensions.ExtensionType;
|
||||
import gearth.services.extension_handler.extensions.GEarthExtension;
|
||||
@ -76,11 +77,13 @@ public final class NetworkExtensionClient extends GEarthExtension {
|
||||
} else if (incoming instanceof Incoming.ExtensionConsoleLog) {
|
||||
log(((Incoming.ExtensionConsoleLog) incoming).getContents());
|
||||
} else if (incoming instanceof Incoming.PacketToStringRequest) {
|
||||
final HPacket hPacket = new HPacket(new byte[0]);
|
||||
final Incoming.PacketToStringRequest incomingPacket = (Incoming.PacketToStringRequest) incoming;
|
||||
final HPacket hPacket = incomingPacket.getFormat().createPacket(0);
|
||||
hPacket.constructFromString(((Incoming.PacketToStringRequest) incoming).getString());
|
||||
packetToStringRequest(hPacket);
|
||||
} else if (incoming instanceof Incoming.StringToPacketRequest) {
|
||||
stringToPacketRequest(((Incoming.StringToPacketRequest) incoming).getString());
|
||||
final Incoming.StringToPacketRequest incomingPacket = (Incoming.StringToPacketRequest) incoming;
|
||||
stringToPacketRequest(incomingPacket.getString(), incomingPacket.getFormat());
|
||||
}
|
||||
} catch (Exception e){
|
||||
LOGGER.error("Failed to handle incoming message {} (channel={})", incoming, channel, e);
|
||||
@ -138,7 +141,9 @@ public final class NetworkExtensionClient extends GEarthExtension {
|
||||
@Override
|
||||
public void packetIntercept(HMessage hMessage) {
|
||||
final String messageAsString = hMessage.stringify();
|
||||
channel.writeAndFlush(new Outgoing.PacketIntercept(messageAsString));
|
||||
final HPacketFormat packetFormat = hMessage.getPacket().getFormat();
|
||||
|
||||
channel.writeAndFlush(new Outgoing.PacketIntercept(messageAsString, packetFormat));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -3,6 +3,7 @@ package gearth.services.extension_handler.extensions.implementations.network;
|
||||
import gearth.misc.HostInfo;
|
||||
import gearth.protocol.HMessage;
|
||||
import gearth.protocol.HPacket;
|
||||
import gearth.protocol.HPacketFormat;
|
||||
import gearth.protocol.connection.HClient;
|
||||
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionMessage.Outgoing;
|
||||
import gearth.services.extension_handler.extensions.implementations.network.NetworkExtensionMessage.Incoming;
|
||||
@ -141,10 +142,14 @@ public final class NetworkExtensionCodec {
|
||||
}));
|
||||
register(Incoming.ManipulatedPacket.MANIPULATED_PACKET,
|
||||
Incoming.ManipulatedPacket.class,
|
||||
(message, hPacket) -> hPacket.appendLongString(message.gethMessage().stringify()),
|
||||
(message, hPacket) -> {
|
||||
hPacket.appendLongString(message.gethMessage().stringify());
|
||||
hPacket.appendInt(message.gethMessage().getPacket().getFormat().getId());
|
||||
},
|
||||
(hPacket -> {
|
||||
final String packetString = hPacket.readLongString(6);
|
||||
final HMessage hMessage = new HMessage(packetString);
|
||||
final String packetString = hPacket.readLongString();
|
||||
final HPacketFormat packetFormat = hPacket.isEOF() == 0 ? HPacketFormat.fromId(hPacket.readInteger()) : HPacketFormat.EVA_WIRE;
|
||||
final HMessage hMessage = new HMessage(packetFormat, packetString);
|
||||
return new Incoming.ManipulatedPacket(hMessage);
|
||||
}));
|
||||
register(Incoming.SendMessage.HEADER_ID,
|
||||
@ -153,12 +158,14 @@ public final class NetworkExtensionCodec {
|
||||
hPacket.appendByte((byte) (message.getDirection() == TOCLIENT ? 0 : 1));
|
||||
hPacket.appendInt(message.getPacket().getBytesLength());
|
||||
hPacket.appendBytes(message.getPacket().toBytes());
|
||||
hPacket.appendInt(message.getPacket().getFormat().getId());
|
||||
}),
|
||||
(hPacket -> {
|
||||
final byte side = hPacket.readByte();
|
||||
final int length = hPacket.readInteger();
|
||||
final byte[] data = hPacket.readBytes(length);
|
||||
final HPacket packet = new HPacket(data);
|
||||
final HPacketFormat format = hPacket.isEOF() == 0 ? HPacketFormat.fromId(hPacket.readInteger()) : HPacketFormat.EVA_WIRE;
|
||||
final HPacket packet = format.createPacket(data);
|
||||
return new Incoming.SendMessage(packet, side == 0 ? TOCLIENT : TOSERVER);
|
||||
}));
|
||||
register(Incoming.RequestFlags.HEADER_ID,
|
||||
@ -172,12 +179,22 @@ public final class NetworkExtensionCodec {
|
||||
(hPacket -> new Incoming.ExtensionConsoleLog(hPacket.readString())));
|
||||
register(Incoming.PacketToStringRequest.HEADER_ID,
|
||||
Incoming.PacketToStringRequest.class,
|
||||
(message, hPacket) -> hPacket.appendLongString(message.getString()),
|
||||
(hPacket -> new Incoming.PacketToStringRequest(hPacket.readLongString())));
|
||||
(message, hPacket) -> {
|
||||
hPacket.appendLongString(message.getString());
|
||||
hPacket.appendInt(message.getFormat().getId());
|
||||
},
|
||||
(hPacket -> new Incoming.PacketToStringRequest(
|
||||
hPacket.readLongString(),
|
||||
hPacket.isEOF() == 0 ? HPacketFormat.fromId(hPacket.readInteger()) : HPacketFormat.EVA_WIRE)));
|
||||
register(Incoming.StringToPacketRequest.HEADER_ID,
|
||||
Incoming.StringToPacketRequest.class,
|
||||
(message, hPacket) -> hPacket.appendLongString(message.getString(), StandardCharsets.UTF_8),
|
||||
(hPacket -> new Incoming.StringToPacketRequest(hPacket.readLongString(StandardCharsets.UTF_8))));
|
||||
(message, hPacket) -> {
|
||||
hPacket.appendLongString(message.getString(), StandardCharsets.UTF_8);
|
||||
hPacket.appendInt(message.getFormat().getId());
|
||||
},
|
||||
(hPacket -> new Incoming.StringToPacketRequest(
|
||||
hPacket.readLongString(StandardCharsets.UTF_8),
|
||||
hPacket.isEOF() == 0 ? HPacketFormat.fromId(hPacket.readInteger()) : HPacketFormat.EVA_WIRE)));
|
||||
}
|
||||
|
||||
private static void registerOutgoingMessages() {
|
||||
@ -236,8 +253,13 @@ public final class NetworkExtensionCodec {
|
||||
(hPacket -> new Outgoing.OnDoubleClick()));
|
||||
register(Outgoing.PacketIntercept.HEADER_ID,
|
||||
Outgoing.PacketIntercept.class,
|
||||
(message, hPacket) -> hPacket.appendLongString(message.getPacketString()),
|
||||
(hPacket -> new Outgoing.PacketIntercept(hPacket.readLongString())));
|
||||
(message, hPacket) -> {
|
||||
hPacket.appendLongString(message.getPacketString());
|
||||
hPacket.appendInt(message.getPacketFormat().getId());
|
||||
},
|
||||
(hPacket -> new Outgoing.PacketIntercept(
|
||||
hPacket.readLongString(),
|
||||
hPacket.isEOF() == 0 ? HPacketFormat.fromId(hPacket.readInteger()) : HPacketFormat.EVA_WIRE)));
|
||||
register(Outgoing.UpdateHostInfo.HEADER_ID,
|
||||
Outgoing.UpdateHostInfo.class,
|
||||
(message, hPacket) -> message.getHostInfo().appendToPacket(hPacket),
|
||||
|
@ -3,6 +3,7 @@ package gearth.services.extension_handler.extensions.implementations.network;
|
||||
import gearth.misc.HostInfo;
|
||||
import gearth.protocol.HMessage;
|
||||
import gearth.protocol.HPacket;
|
||||
import gearth.protocol.HPacketFormat;
|
||||
import gearth.protocol.connection.HClient;
|
||||
import gearth.services.packet_info.PacketInfoManager;
|
||||
|
||||
@ -140,14 +141,20 @@ public class NetworkExtensionMessage {
|
||||
public static final int HEADER_ID = 20;
|
||||
|
||||
private final String string;
|
||||
private final HPacketFormat format;
|
||||
|
||||
public PacketToStringRequest(String string) {
|
||||
public PacketToStringRequest(String string, HPacketFormat format) {
|
||||
this.string = string;
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
public String getString() {
|
||||
return string;
|
||||
}
|
||||
|
||||
public HPacketFormat getFormat() {
|
||||
return format;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -160,14 +167,20 @@ public class NetworkExtensionMessage {
|
||||
public static final int HEADER_ID = 21;
|
||||
|
||||
private final String string;
|
||||
private final HPacketFormat format;
|
||||
|
||||
public StringToPacketRequest(String string) {
|
||||
public StringToPacketRequest(String string, HPacketFormat format) {
|
||||
this.string = string;
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
public String getString() {
|
||||
return string;
|
||||
}
|
||||
|
||||
public HPacketFormat getFormat() {
|
||||
return format;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -239,14 +252,20 @@ public class NetworkExtensionMessage {
|
||||
public static final int HEADER_ID = 3;
|
||||
|
||||
private final String packetString;
|
||||
private final HPacketFormat packetFormat;
|
||||
|
||||
public PacketIntercept(String packetString) {
|
||||
public PacketIntercept(String packetString, HPacketFormat packetFormat) {
|
||||
this.packetString = packetString;
|
||||
this.packetFormat = packetFormat;
|
||||
}
|
||||
|
||||
public String getPacketString() {
|
||||
return packetString;
|
||||
}
|
||||
|
||||
public HPacketFormat getPacketFormat() {
|
||||
return packetFormat;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user