diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody8Init1.java b/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody8Init1.java index 5ee2e1b..584fb2a 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody8Init1.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody8Init1.java @@ -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); } diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/packet/handler/client/LocalClientHandlerConnecting.java b/src/main/java/com/github/manevolent/ts3j/protocol/packet/handler/client/LocalClientHandlerConnecting.java index 6451b0a..202d00b 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/packet/handler/client/LocalClientHandlerConnecting.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/packet/handler/client/LocalClientHandlerConnecting.java @@ -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", diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java index e5070c7..aa64383 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java @@ -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 + Ts3Debugging.debug("[PROTOCOL] READ " + networkPacket.getHeader().getType().name()); if (networkPacket.getHeader().getType().isSplittable()) { - Ts3Debugging.debug("[PROTOCOL] READ " + networkPacket.getHeader().getType().name()); - 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()));