fix read/write String
This commit is contained in:
@@ -17,6 +17,7 @@ public abstract class NetStream {
|
||||
public abstract void readBytes(byte[] buffer);
|
||||
public abstract int readUnsignedByte();
|
||||
public abstract int readUnsignedShort();
|
||||
public abstract short readShort();
|
||||
public abstract int readInt();
|
||||
public abstract float readFloat();
|
||||
public abstract double readDouble();
|
||||
|
||||
@@ -39,6 +39,11 @@ public class ByteArrayOutputNetStream extends NetStream_p125 {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public short readShort() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInt() {
|
||||
throw new UnsupportedOperationException();
|
||||
|
||||
@@ -13,7 +13,12 @@ import java.nio.charset.StandardCharsets;
|
||||
public abstract class NetStream_p125 extends NetStream {
|
||||
@Override
|
||||
public String readString() {
|
||||
int size = readUnsignedByte() * 2;
|
||||
int size = readShort() * 2;
|
||||
if (size == 0) {
|
||||
log.warn("String zero length??");
|
||||
return "";
|
||||
}
|
||||
|
||||
byte[] bytes = new byte[size];
|
||||
readBytes(bytes);
|
||||
return new String(bytes, StandardCharsets.UTF_16BE);
|
||||
@@ -21,14 +26,14 @@ public abstract class NetStream_p125 extends NetStream {
|
||||
|
||||
@Override
|
||||
public void writeString(String value) {
|
||||
if (value.length() > 240) {
|
||||
if (value.length() > Short.MAX_VALUE) {
|
||||
log.warn("String \"{}\" too long!", value);
|
||||
byte[] buf = value.substring(0, 240).getBytes(StandardCharsets.UTF_16BE);
|
||||
writeByte(240);
|
||||
byte[] buf = value.substring(0, Short.MAX_VALUE).getBytes(StandardCharsets.UTF_16BE);
|
||||
writeShort(Short.MAX_VALUE);
|
||||
writeBytes(buf);
|
||||
} else {
|
||||
byte[] buf = value.getBytes(StandardCharsets.UTF_16BE);
|
||||
writeByte(value.length());
|
||||
writeShort(value.length());
|
||||
writeBytes(buf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,11 @@ public class WrapperNetStream extends NetStream_p125 {
|
||||
return byteBuf.readUnsignedShort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public short readShort() {
|
||||
return byteBuf.readShort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInt() {
|
||||
return byteBuf.readInt();
|
||||
|
||||
@@ -20,7 +20,6 @@ public class HandshakePacket implements CSPacket, SCPacket {
|
||||
|
||||
@Override
|
||||
public void readSelf(NetStream netStream) {
|
||||
netStream.skipBytes(1);
|
||||
String[] str = netStream.readString().split(";");
|
||||
|
||||
playerName = str[0];
|
||||
@@ -37,7 +36,6 @@ public class HandshakePacket implements CSPacket, SCPacket {
|
||||
@Override
|
||||
public byte[] toByteArray() {
|
||||
ByteArrayOutputNetStream netStream = new ByteArrayOutputNetStream();
|
||||
netStream.writeByte(0);
|
||||
netStream.writeString("-");
|
||||
return netStream.toByteArray();
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ public class KickPacket implements SCPacket {
|
||||
@Override
|
||||
public byte[] toByteArray() {
|
||||
ByteArrayOutputNetStream netStream = new ByteArrayOutputNetStream();
|
||||
netStream.writeByte(0);
|
||||
netStream.writeString(reason);
|
||||
return netStream.toByteArray();
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ public class LoginPacket implements CSPacket, SCPacket {
|
||||
@Override
|
||||
public void readSelf(NetStream netStream) {
|
||||
protocol = netStream.readInt();
|
||||
netStream.skipBytes(1);
|
||||
playerName = netStream.readString();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user