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 @Override
public void read(ByteBuffer byteBuffer) { public void read(ByteBuffer byteBuffer) {
byteBuffer.get(serverStuff); byteBuffer.get(serverStuff, 0, Math.min(byteBuffer.remaining(), serverStuff.length));
byteBuffer.get(a0reversed); byteBuffer.get(a0reversed, 0, Math.min(byteBuffer.remaining(), a0reversed.length));
} }
@Override @Override
@@ -236,7 +236,6 @@ public class PacketBody8Init1 extends PacketBody {
super((byte) 2, ProtocolRole.CLIENT); super((byte) 2, ProtocolRole.CLIENT);
} }
public byte[] getA0reversed() { public byte[] getA0reversed() {
return a0reversed; return a0reversed;
} }
@@ -263,6 +262,7 @@ public class PacketBody8Init1 extends PacketBody {
@Override @Override
public void write(ByteBuffer byteBuffer) { public void write(ByteBuffer byteBuffer) {
byteBuffer.put(serverStuff); byteBuffer.put(serverStuff);
byteBuffer.put(a0reversed); byteBuffer.put(a0reversed);
} }
@@ -24,7 +24,7 @@ import java.util.Random;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
public class LocalClientHandlerConnecting extends LocalClientHandler { 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[] randomBytes;
private byte[] alphaBytes; private byte[] alphaBytes;
@@ -48,6 +48,8 @@ public class LocalClientHandlerConnecting extends LocalClientHandler {
packet.setStep(step); packet.setStep(step);
sendInit1(packet); sendInit1(packet);
getClient().writePacket(new PacketBody2Command(ProtocolRole.CLIENT, createInitIv()));
} }
private void sendInit1(PacketBody8Init1 packet) throws IOException, TimeoutException { private void sendInit1(PacketBody8Init1 packet) throws IOException, TimeoutException {
@@ -118,29 +120,15 @@ public class LocalClientHandlerConnecting extends LocalClientHandler {
step4.setY(y); step4.setY(y);
step4.setServerStuff(serverReplyStep3.getServerStuff()); step4.setServerStuff(serverReplyStep3.getServerStuff());
alphaBytes = new byte[10]; step4.setClientIVcommand(createInitIv().build().getBytes(Charset.forName("UTF8")));
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")));
step = step4; step = step4;
break; break;
case 127: case 127:
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
onAssigned(); onAssigned();
return; return;
default: 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 { private void sendClientInit() throws IOException, TimeoutException {
Command clientinit = new SingleCommand( Command clientinit = new SingleCommand(
"clientinit", "clientinit",
@@ -31,8 +31,7 @@ import java.io.EOFException;
import java.io.IOException; import java.io.IOException;
import java.net.DatagramPacket; import java.net.DatagramPacket;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
import java.nio.ByteBuffer; import java.nio.*;
import java.nio.ByteOrder;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -568,13 +567,10 @@ public abstract class AbstractTeamspeakClientSocket
} }
// Fragment handling // Fragment handling
Ts3Debugging.debug("[PROTOCOL] READ " + networkPacket.getHeader().getType().name());
if (networkPacket.getHeader().getType().isSplittable()) { if (networkPacket.getHeader().getType().isSplittable()) {
Ts3Debugging.debug("[PROTOCOL] READ " + networkPacket.getHeader().getType().name());
packet.setBody(new PacketBodyFragment(networkPacket.getHeader().getType(), getRole().getIn())); packet.setBody(new PacketBodyFragment(networkPacket.getHeader().getType(), getRole().getIn()));
} else { } else {
Ts3Debugging.debug("[PROTOCOL] READ " + networkPacket.getHeader().getType().name());
if (packet.getHeader().getPacketFlag(HeaderFlag.COMPRESSED) && if (packet.getHeader().getPacketFlag(HeaderFlag.COMPRESSED) &&
packet.getHeader().getType().isCompressible()) packet.getHeader().getType().isCompressible())
packet.setBody(new PacketBodyCompressed(networkPacket.getHeader().getType(), getRole().getIn())); packet.setBody(new PacketBodyCompressed(networkPacket.getHeader().getType(), getRole().getIn()));