diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody5Pong.java b/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody5Pong.java index 1f80f38..ba13056 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody5Pong.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody5Pong.java @@ -27,7 +27,7 @@ public class PacketBody5Pong extends PacketBody { @Override public void read(ByteBuffer buffer) { - packetId = buffer.getShort() & 0x000000FFFFF; + packetId = (buffer.getShort() & 0xFFFF); } @Override diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody6Ack.java b/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody6Ack.java index d0ded14..4d45caa 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody6Ack.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody6Ack.java @@ -27,12 +27,12 @@ public class PacketBody6Ack extends PacketBody { @Override public void read(ByteBuffer buffer) { - packetId = buffer.getShort() & 0x0000FFFF; + packetId = buffer.getShort() & 0xFFFF; } @Override public void write(ByteBuffer buffer) { - buffer.putShort((short) (getPacketId() & 0xFFFFFF)); + buffer.putShort((short) (getPacketId() & 0xFFFF)); } @Override diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody7AckLow.java b/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody7AckLow.java index bca994c..3eb7442 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody7AckLow.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/packet/PacketBody7AckLow.java @@ -27,12 +27,12 @@ public class PacketBody7AckLow extends PacketBody { @Override public void read(ByteBuffer buffer) { - packetId = buffer.getShort() & 0x0000FFFF; + packetId = buffer.getShort() & 0xFFFF; } @Override public void write(ByteBuffer buffer) { - buffer.putShort((short) (getPacketId() & 0xFFFFFF)); + buffer.putShort((short) (getPacketId() & 0xFFFF)); } @Override 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 af5c2ca..f4f5215 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 @@ -39,7 +39,7 @@ public class LocalClientHandlerConnecting extends LocalClientHandler { randomBytes = new byte[4]; random.nextBytes(randomBytes); step.setRandom(randomBytes); - step.setTimestamp((int) ((System.currentTimeMillis() / 1000L) & 0x000000FFFFFF)); + step.setTimestamp((int) ((System.currentTimeMillis() / 1000L) & 0xFFFF)); packet.setStep(step); sendInit1(packet); diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/packet/statistics/PacketStatistics.java b/src/main/java/com/github/manevolent/ts3j/protocol/packet/statistics/PacketStatistics.java index f2607ec..7ef5291 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/packet/statistics/PacketStatistics.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/packet/statistics/PacketStatistics.java @@ -3,12 +3,14 @@ package com.github.manevolent.ts3j.protocol.packet.statistics; import com.github.manevolent.ts3j.protocol.Packet; +import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedList; import java.util.List; public class PacketStatistics { - private final List sentPacketList = new LinkedList<>(); - private final List receivedPacketList = new LinkedList<>(); + private final List sentPacketList = Collections.synchronizedList(new ArrayList<>()); + private final List receivedPacketList = Collections.synchronizedList(new ArrayList<>()); private int sentBytes; private int sentPackets; @@ -51,17 +53,21 @@ public class PacketStatistics { public int getSentPacketsLastSecond() { long now = System.nanoTime() - 1_000_000_000L; - return (int) sentPacketList.stream() - .filter(x -> x.getTime() >= now) - .count(); + synchronized (sentPacketList) { + return (int) sentPacketList.stream() + .filter(x -> x.getTime() >= now) + .count(); + } } public int getSentPacketsLastMinute() { long now = System.nanoTime() - 1_000_000_000L; - return (int) sentPacketList.stream() - .filter(x -> x.getTime() >= now) - .count(); + synchronized (sentPacketList) { + return (int) sentPacketList.stream() + .filter(x -> x.getTime() >= now) + .count(); + } } public int getReceivedPackets() { @@ -71,17 +77,21 @@ public class PacketStatistics { public int getReceivedPacketsLastSecond() { long now = System.nanoTime() - 1_000_000_000L; - return (int) receivedPacketList.stream() - .filter(x -> x.getTime() >= now) - .count(); + synchronized (receivedPacketList) { + return (int) receivedPacketList.stream() + .filter(x -> x.getTime() >= now) + .count(); + } } public int getReceivedPacketsLastMinute() { long now = System.nanoTime() - 60_000_000_000L; - return (int) receivedPacketList.stream() - .filter(x -> x.getTime() >= now) - .count(); + synchronized (receivedPacketList) { + return (int) receivedPacketList.stream() + .filter(x -> x.getTime() >= now) + .count(); + } } @@ -92,41 +102,50 @@ public class PacketStatistics { public int getSentBytesLastMinute() { long now = System.nanoTime() - 60_000_000_000L; - return sentPacketList.stream() - .filter(x -> x.getTime() >= now) - .map(DataPoint::getSize) - .reduce((a, b) -> a + b) - .orElse(0); + + synchronized (sentPacketList) { + return sentPacketList.stream() + .filter(x -> x.getTime() >= now) + .map(DataPoint::getSize) + .reduce((a, b) -> a + b) + .orElse(0); + } } public int getSentBytesLastSecond() { long now = System.nanoTime() - 1_000_000_000L; - return sentPacketList.stream() - .filter(x -> x.getTime() >= now) - .map(DataPoint::getSize) - .reduce((a, b) -> a + b) - .orElse(0); + synchronized (sentPacketList) { + return sentPacketList.stream() + .filter(x -> x.getTime() >= now) + .map(DataPoint::getSize) + .reduce((a, b) -> a + b) + .orElse(0); + } } public int getReceivedBytesLastMinute() { long now = System.nanoTime() - 60_000_000_000L; - return receivedPacketList.stream() - .filter(x -> x.getTime() >= now) - .map(DataPoint::getSize) - .reduce((a, b) -> a + b) - .orElse(0); + synchronized (receivedPacketList) { + return receivedPacketList.stream() + .filter(x -> x.getTime() >= now) + .map(DataPoint::getSize) + .reduce((a, b) -> a + b) + .orElse(0); + } } public int getReceivedBytesLastSecond() { long now = System.nanoTime() - 1_000_000_000L; - return receivedPacketList.stream() - .filter(x -> x.getTime() >= now) - .map(DataPoint::getSize) - .reduce((a, b) -> a + b) - .orElse(0); + synchronized (receivedPacketList) { + return receivedPacketList.stream() + .filter(x -> x.getTime() >= now) + .map(DataPoint::getSize) + .reduce((a, b) -> a + b) + .orElse(0); + } } private final class DataPoint { diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/packet/transformation/PacketTransformation.java b/src/main/java/com/github/manevolent/ts3j/protocol/packet/transformation/PacketTransformation.java index b9cead1..0a6a3bb 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/packet/transformation/PacketTransformation.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/packet/transformation/PacketTransformation.java @@ -39,7 +39,7 @@ public class PacketTransformation { temporaryByteBuffer.put((byte) (header.getRole() == ProtocolRole.SERVER ? 0x30 : 0x31)); temporaryByteBuffer.put((byte) (header.getType().getIndex() & 0xFF)); - temporaryByteBuffer.putInt(header.getGeneration() & 0x000000FFFFFF); + temporaryByteBuffer.putInt(header.getGeneration()); temporaryByteBuffer.put(ivStruct); 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 196f544..c237ac0 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 @@ -269,9 +269,12 @@ public abstract class AbstractTeamspeakClientSocket ) ); break; - /*case PING: - counter = localSendCounter.get(PacketBodyType.PING).current(); - break;*/ + case PING: + for (int i = 0 ; i < 8000; i ++) + counter = localSendCounter.get(PacketBodyType.PING).next(); + + counter = localSendCounter.get(PacketBodyType.PING).next(); + break; case INIT1: counter = new Pair<>(101, 0); break; @@ -674,7 +677,7 @@ public abstract class AbstractTeamspeakClientSocket lastResponse = System.currentTimeMillis(); response = pingQueue.get(((PacketBody5Pong)packet.getBody()).getPacketId()); if (response == null) { - Ts3Debugging.debug("Unrecognized PONG: " + ((PacketBody6Ack) packet.getBody()).getPacketId()); + Ts3Debugging.debug("Unrecognized PONG: " + ((PacketBody5Pong) packet.getBody()).getPacketId()); } else { lastResponse = System.currentTimeMillis(); } diff --git a/src/test/java/com/github/manevolent/ts3j/ServerConnectionTest.java b/src/test/java/com/github/manevolent/ts3j/ServerConnectionTest.java index dd5d5ac..5067f63 100644 --- a/src/test/java/com/github/manevolent/ts3j/ServerConnectionTest.java +++ b/src/test/java/com/github/manevolent/ts3j/ServerConnectionTest.java @@ -15,6 +15,8 @@ import java.net.InetSocketAddress; import java.util.Base64; import java.util.Random; import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.TimeoutException; import static org.junit.Assert.assertEquals; @@ -151,7 +153,7 @@ public class ServerConnectionTest { client.subscribeAll(); - client.waitForState(ClientConnectionState.DISCONNECTED, 100000000L); + Thread.sleep(1000000L); } catch (Throwable ex) { ex.printStackTrace(); }