The new TS3 server version broke TS3j, it is now ‭218092286‬ decimal.

This commit is contained in:
Manevolent
2019-11-14 01:19:36 -07:00
parent f72791637d
commit 9694a3f2c5
3 changed files with 34 additions and 30 deletions
@@ -212,8 +212,8 @@ public class PacketBody8Init1 extends PacketBody {
@Override
public void read(ByteBuffer byteBuffer) {
byteBuffer.get(serverStuff);
byteBuffer.get(a0reversed);
byteBuffer.get(serverStuff, 0, Math.min(byteBuffer.remaining(), serverStuff.length));
byteBuffer.get(a0reversed, 0, Math.min(byteBuffer.remaining(), a0reversed.length));
}
@Override
@@ -236,7 +236,6 @@ public class PacketBody8Init1 extends PacketBody {
super((byte) 2, ProtocolRole.CLIENT);
}
public byte[] getA0reversed() {
return a0reversed;
}
@@ -263,6 +262,7 @@ public class PacketBody8Init1 extends PacketBody {
@Override
public void write(ByteBuffer byteBuffer) {
byteBuffer.put(serverStuff);
byteBuffer.put(a0reversed);
}
@@ -24,7 +24,7 @@ import java.util.Random;
import java.util.concurrent.TimeoutException;
public class LocalClientHandlerConnecting extends LocalClientHandler {
private static final byte[] INIT1_VERSION = new byte[]{0x09, (byte) 0x83, (byte) 0x8C, (byte) 0xCF};
private static final byte[] INIT1_VERSION = new byte[]{0x0C, (byte)0xFF, (byte)0xD2, (byte)0xFE};
private byte[] randomBytes;
private byte[] alphaBytes;
@@ -48,6 +48,8 @@ public class LocalClientHandlerConnecting extends LocalClientHandler {
packet.setStep(step);
sendInit1(packet);
getClient().writePacket(new PacketBody2Command(ProtocolRole.CLIENT, createInitIv()));
}
private void sendInit1(PacketBody8Init1 packet) throws IOException, TimeoutException {
@@ -118,29 +120,15 @@ public class LocalClientHandlerConnecting extends LocalClientHandler {
step4.setY(y);
step4.setServerStuff(serverReplyStep3.getServerStuff());
alphaBytes = new byte[10];
new Random().nextBytes(alphaBytes);
SingleCommand initiv = new SingleCommand("clientinitiv", ProtocolRole.CLIENT);
initiv.add(new CommandSingleParameter("alpha", Base64.getEncoder().encodeToString(alphaBytes)));
initiv.add(new CommandSingleParameter("omega", getClient().getIdentity().getPublicKeyString()));
initiv.add(new CommandSingleParameter("ot", "1")); // constant, set to 1
initiv.add(
new CommandSingleParameter(
"ip",
getClient().getOption("client.hostname", String.class)
)
);
step4.setClientIVcommand(initiv.build().getBytes(Charset.forName("UTF8")));
step4.setClientIVcommand(createInitIv().build().getBytes(Charset.forName("UTF8")));
step = step4;
break;
case 127:
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
onAssigned();
return;
default:
@@ -223,6 +211,26 @@ public class LocalClientHandlerConnecting extends LocalClientHandler {
}
}
private SingleCommand createInitIv() {
alphaBytes = new byte[10];
new Random().nextBytes(alphaBytes);
SingleCommand initiv = new SingleCommand("clientinitiv", ProtocolRole.CLIENT);
initiv.add(new CommandSingleParameter("alpha", Base64.getEncoder().encodeToString(alphaBytes)));
initiv.add(new CommandSingleParameter("omega", getClient().getIdentity().getPublicKeyString()));
initiv.add(new CommandSingleParameter("ot", "1")); // constant, set to 1
Random r = new Random();
initiv.add(
new CommandSingleParameter(
"ip",
r.nextInt(255) + "." + r.nextInt(255) + "." + r.nextInt(255) + "." +r.nextInt(255)
)
);
return initiv;
}
private void sendClientInit() throws IOException, TimeoutException {
Command clientinit = new SingleCommand(
"clientinit",
@@ -31,8 +31,7 @@ import java.io.EOFException;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.SocketTimeoutException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.Consumer;
@@ -568,13 +567,10 @@ public abstract class AbstractTeamspeakClientSocket
}
// Fragment handling
if (networkPacket.getHeader().getType().isSplittable()) {
Ts3Debugging.debug("[PROTOCOL] READ " + networkPacket.getHeader().getType().name());
if (networkPacket.getHeader().getType().isSplittable()) {
packet.setBody(new PacketBodyFragment(networkPacket.getHeader().getType(), getRole().getIn()));
} else {
Ts3Debugging.debug("[PROTOCOL] READ " + networkPacket.getHeader().getType().name());
if (packet.getHeader().getPacketFlag(HeaderFlag.COMPRESSED) &&
packet.getHeader().getType().isCompressible())
packet.setBody(new PacketBodyCompressed(networkPacket.getHeader().getType(), getRole().getIn()));