mirror of
https://github.com/sirjonasxx/G-Earth.git
synced 2024-11-23 08:50:52 +01:00
Fix packet string encoding when using expressions
This commit is contained in:
parent
6cb98be64c
commit
c6064b05ad
@ -87,7 +87,7 @@ public abstract class ShockPacket extends HPacket {
|
||||
|
||||
@Override
|
||||
public HPacket appendString(String s) {
|
||||
throw new ShockPacketUnsupported();
|
||||
return appendString(s, StandardCharsets.ISO_8859_1);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -202,7 +202,7 @@ public abstract class ShockPacket extends HPacket {
|
||||
|
||||
@Override
|
||||
public String readString() {
|
||||
throw new ShockPacketUnsupported();
|
||||
return this.readString(StandardCharsets.ISO_8859_1);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -53,11 +53,6 @@ public class ShockPacketIncoming extends ShockPacket {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendString(String value) {
|
||||
return appendString(value, StandardCharsets.ISO_8859_1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendString(String value, Charset charset) {
|
||||
isEdited = true;
|
||||
@ -93,11 +88,6 @@ public class ShockPacketIncoming extends ShockPacket {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString() {
|
||||
return this.readString(StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString(Charset charset) {
|
||||
String result;
|
||||
|
@ -50,11 +50,6 @@ public class ShockPacketOutgoing extends ShockPacket {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendString(String value) {
|
||||
return appendString(value, StandardCharsets.ISO_8859_1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HPacket appendString(String value, Charset charset) {
|
||||
isEdited = true;
|
||||
|
@ -161,7 +161,7 @@ public class PacketStringUtils {
|
||||
}
|
||||
actualString.append(match);
|
||||
|
||||
String latin = new String(actualString.toString().getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
|
||||
String latin = new String(actualString.toString().getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.ISO_8859_1);
|
||||
HPacket temp = format.createPacket(0);
|
||||
|
||||
int sizeBefore = temp.getBytesLength();
|
||||
|
51
G-Earth/src/test/java/TestPacketStringEncoding.java
Normal file
51
G-Earth/src/test/java/TestPacketStringEncoding.java
Normal file
@ -0,0 +1,51 @@
|
||||
import gearth.protocol.HPacket;
|
||||
import gearth.protocol.HPacketFormat;
|
||||
import gearth.services.packet_representation.PacketStringUtils;
|
||||
import org.bouncycastle.util.encoders.Hex;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class TestPacketStringEncoding {
|
||||
|
||||
private static final int OUT_CHAT = 52;
|
||||
|
||||
@Test
|
||||
public void testWrite() throws Exception {
|
||||
// {h:OUT_CHAT}{s:"ç"} 40 40 45 40 74 40 41 e7
|
||||
checkExpression(HPacketFormat.WEDGIE_OUTGOING, "@t@Aç", "40744041e7");
|
||||
checkExpression(HPacketFormat.WEDGIE_OUTGOING, "@t@A[231]", "40744041e7");
|
||||
checkExpression(HPacketFormat.WEDGIE_OUTGOING, String.format("{h:%d}{s:\"ç\"}", OUT_CHAT), "40744041e7");
|
||||
// {h:OUT_CHAT}{s:"ççç"} 40 40 47 40 74 40 43 e7 e7 e7
|
||||
checkExpression(HPacketFormat.WEDGIE_OUTGOING, "@t@Aççç", "40744041e7e7e7");
|
||||
checkExpression(HPacketFormat.WEDGIE_OUTGOING, "@t@A[231][231][231]", "40744041e7e7e7");
|
||||
checkExpression(HPacketFormat.WEDGIE_OUTGOING, String.format("{h:%d}{s:\"ççç\"}", OUT_CHAT), "40744043e7e7e7");
|
||||
// {h:OUT_CHAT}{s:"çãâéèä"} 40 40 47 40 74 40 46 e7 e3 e2 e9 e8 e4
|
||||
checkExpression(HPacketFormat.WEDGIE_OUTGOING, String.format("{h:%d}{s:\"çãâéèä\"}", OUT_CHAT), "40744046e7e3e2e9e8e4");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRead() throws Exception {
|
||||
final String expectedString = "çãâéèä";
|
||||
|
||||
final String packetData = "40585045e7e3e2e9e8e40201";
|
||||
final HPacket packet = HPacketFormat.WEDGIE_INCOMING.createPacket(Hex.decode(packetData));
|
||||
|
||||
assertEquals(24, packet.headerId());
|
||||
assertEquals(20, packet.readInteger());
|
||||
assertEquals(expectedString, packet.readString());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param format Packet format.
|
||||
* @param expression Handwritten expression.
|
||||
* @param expectedHex Captured packets from the real client, or server.
|
||||
*/
|
||||
private void checkExpression(HPacketFormat format, String expression, String expectedHex) throws Exception {
|
||||
final HPacket packet = PacketStringUtils.fromString(expression, format);
|
||||
final String packetData = Hex.toHexString(packet.toBytes());
|
||||
|
||||
assertEquals(expectedHex, packetData);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user