The new TS3 server version broke TS3j, it is now 218092286 decimal.
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
+29
-21
@@ -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",
|
||||||
|
|||||||
+2
-6
@@ -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
|
||||||
if (networkPacket.getHeader().getType().isSplittable()) {
|
|
||||||
Ts3Debugging.debug("[PROTOCOL] READ " + networkPacket.getHeader().getType().name());
|
Ts3Debugging.debug("[PROTOCOL] READ " + networkPacket.getHeader().getType().name());
|
||||||
|
if (networkPacket.getHeader().getType().isSplittable()) {
|
||||||
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()));
|
||||||
|
|||||||
Reference in New Issue
Block a user