Bitmasks were wrong

This commit is contained in:
Manevolent
2018-08-10 23:37:45 -04:00
parent 798f84689f
commit 7f6f6c79d2
8 changed files with 70 additions and 46 deletions
@@ -27,7 +27,7 @@ public class PacketBody5Pong extends PacketBody {
@Override @Override
public void read(ByteBuffer buffer) { public void read(ByteBuffer buffer) {
packetId = buffer.getShort() & 0x000000FFFFF; packetId = (buffer.getShort() & 0xFFFF);
} }
@Override @Override
@@ -27,12 +27,12 @@ public class PacketBody6Ack extends PacketBody {
@Override @Override
public void read(ByteBuffer buffer) { public void read(ByteBuffer buffer) {
packetId = buffer.getShort() & 0x0000FFFF; packetId = buffer.getShort() & 0xFFFF;
} }
@Override @Override
public void write(ByteBuffer buffer) { public void write(ByteBuffer buffer) {
buffer.putShort((short) (getPacketId() & 0xFFFFFF)); buffer.putShort((short) (getPacketId() & 0xFFFF));
} }
@Override @Override
@@ -27,12 +27,12 @@ public class PacketBody7AckLow extends PacketBody {
@Override @Override
public void read(ByteBuffer buffer) { public void read(ByteBuffer buffer) {
packetId = buffer.getShort() & 0x0000FFFF; packetId = buffer.getShort() & 0xFFFF;
} }
@Override @Override
public void write(ByteBuffer buffer) { public void write(ByteBuffer buffer) {
buffer.putShort((short) (getPacketId() & 0xFFFFFF)); buffer.putShort((short) (getPacketId() & 0xFFFF));
} }
@Override @Override
@@ -39,7 +39,7 @@ public class LocalClientHandlerConnecting extends LocalClientHandler {
randomBytes = new byte[4]; randomBytes = new byte[4];
random.nextBytes(randomBytes); random.nextBytes(randomBytes);
step.setRandom(randomBytes); step.setRandom(randomBytes);
step.setTimestamp((int) ((System.currentTimeMillis() / 1000L) & 0x000000FFFFFF)); step.setTimestamp((int) ((System.currentTimeMillis() / 1000L) & 0xFFFF));
packet.setStep(step); packet.setStep(step);
sendInit1(packet); sendInit1(packet);
@@ -3,12 +3,14 @@ package com.github.manevolent.ts3j.protocol.packet.statistics;
import com.github.manevolent.ts3j.protocol.Packet; import com.github.manevolent.ts3j.protocol.Packet;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
public class PacketStatistics { public class PacketStatistics {
private final List<DataPoint> sentPacketList = new LinkedList<>(); private final List<DataPoint> sentPacketList = Collections.synchronizedList(new ArrayList<>());
private final List<DataPoint> receivedPacketList = new LinkedList<>(); private final List<DataPoint> receivedPacketList = Collections.synchronizedList(new ArrayList<>());
private int sentBytes; private int sentBytes;
private int sentPackets; private int sentPackets;
@@ -51,18 +53,22 @@ public class PacketStatistics {
public int getSentPacketsLastSecond() { public int getSentPacketsLastSecond() {
long now = System.nanoTime() - 1_000_000_000L; long now = System.nanoTime() - 1_000_000_000L;
synchronized (sentPacketList) {
return (int) sentPacketList.stream() return (int) sentPacketList.stream()
.filter(x -> x.getTime() >= now) .filter(x -> x.getTime() >= now)
.count(); .count();
} }
}
public int getSentPacketsLastMinute() { public int getSentPacketsLastMinute() {
long now = System.nanoTime() - 1_000_000_000L; long now = System.nanoTime() - 1_000_000_000L;
synchronized (sentPacketList) {
return (int) sentPacketList.stream() return (int) sentPacketList.stream()
.filter(x -> x.getTime() >= now) .filter(x -> x.getTime() >= now)
.count(); .count();
} }
}
public int getReceivedPackets() { public int getReceivedPackets() {
return receivedPackets; return receivedPackets;
@@ -71,18 +77,22 @@ public class PacketStatistics {
public int getReceivedPacketsLastSecond() { public int getReceivedPacketsLastSecond() {
long now = System.nanoTime() - 1_000_000_000L; long now = System.nanoTime() - 1_000_000_000L;
synchronized (receivedPacketList) {
return (int) receivedPacketList.stream() return (int) receivedPacketList.stream()
.filter(x -> x.getTime() >= now) .filter(x -> x.getTime() >= now)
.count(); .count();
} }
}
public int getReceivedPacketsLastMinute() { public int getReceivedPacketsLastMinute() {
long now = System.nanoTime() - 60_000_000_000L; long now = System.nanoTime() - 60_000_000_000L;
synchronized (receivedPacketList) {
return (int) receivedPacketList.stream() return (int) receivedPacketList.stream()
.filter(x -> x.getTime() >= now) .filter(x -> x.getTime() >= now)
.count(); .count();
} }
}
public int getReceivedBytes() { public int getReceivedBytes() {
@@ -92,42 +102,51 @@ public class PacketStatistics {
public int getSentBytesLastMinute() { public int getSentBytesLastMinute() {
long now = System.nanoTime() - 60_000_000_000L; long now = System.nanoTime() - 60_000_000_000L;
synchronized (sentPacketList) {
return sentPacketList.stream() return sentPacketList.stream()
.filter(x -> x.getTime() >= now) .filter(x -> x.getTime() >= now)
.map(DataPoint::getSize) .map(DataPoint::getSize)
.reduce((a, b) -> a + b) .reduce((a, b) -> a + b)
.orElse(0); .orElse(0);
} }
}
public int getSentBytesLastSecond() { public int getSentBytesLastSecond() {
long now = System.nanoTime() - 1_000_000_000L; long now = System.nanoTime() - 1_000_000_000L;
synchronized (sentPacketList) {
return sentPacketList.stream() return sentPacketList.stream()
.filter(x -> x.getTime() >= now) .filter(x -> x.getTime() >= now)
.map(DataPoint::getSize) .map(DataPoint::getSize)
.reduce((a, b) -> a + b) .reduce((a, b) -> a + b)
.orElse(0); .orElse(0);
} }
}
public int getReceivedBytesLastMinute() { public int getReceivedBytesLastMinute() {
long now = System.nanoTime() - 60_000_000_000L; long now = System.nanoTime() - 60_000_000_000L;
synchronized (receivedPacketList) {
return receivedPacketList.stream() return receivedPacketList.stream()
.filter(x -> x.getTime() >= now) .filter(x -> x.getTime() >= now)
.map(DataPoint::getSize) .map(DataPoint::getSize)
.reduce((a, b) -> a + b) .reduce((a, b) -> a + b)
.orElse(0); .orElse(0);
} }
}
public int getReceivedBytesLastSecond() { public int getReceivedBytesLastSecond() {
long now = System.nanoTime() - 1_000_000_000L; long now = System.nanoTime() - 1_000_000_000L;
synchronized (receivedPacketList) {
return receivedPacketList.stream() return receivedPacketList.stream()
.filter(x -> x.getTime() >= now) .filter(x -> x.getTime() >= now)
.map(DataPoint::getSize) .map(DataPoint::getSize)
.reduce((a, b) -> a + b) .reduce((a, b) -> a + b)
.orElse(0); .orElse(0);
} }
}
private final class DataPoint { private final class DataPoint {
private final long time; private final long time;
@@ -39,7 +39,7 @@ public class PacketTransformation {
temporaryByteBuffer.put((byte) (header.getRole() == ProtocolRole.SERVER ? 0x30 : 0x31)); temporaryByteBuffer.put((byte) (header.getRole() == ProtocolRole.SERVER ? 0x30 : 0x31));
temporaryByteBuffer.put((byte) (header.getType().getIndex() & 0xFF)); temporaryByteBuffer.put((byte) (header.getType().getIndex() & 0xFF));
temporaryByteBuffer.putInt(header.getGeneration() & 0x000000FFFFFF); temporaryByteBuffer.putInt(header.getGeneration());
temporaryByteBuffer.put(ivStruct); temporaryByteBuffer.put(ivStruct);
@@ -269,9 +269,12 @@ public abstract class AbstractTeamspeakClientSocket
) )
); );
break; break;
/*case PING: case PING:
counter = localSendCounter.get(PacketBodyType.PING).current(); for (int i = 0 ; i < 8000; i ++)
break;*/ counter = localSendCounter.get(PacketBodyType.PING).next();
counter = localSendCounter.get(PacketBodyType.PING).next();
break;
case INIT1: case INIT1:
counter = new Pair<>(101, 0); counter = new Pair<>(101, 0);
break; break;
@@ -674,7 +677,7 @@ public abstract class AbstractTeamspeakClientSocket
lastResponse = System.currentTimeMillis(); lastResponse = System.currentTimeMillis();
response = pingQueue.get(((PacketBody5Pong)packet.getBody()).getPacketId()); response = pingQueue.get(((PacketBody5Pong)packet.getBody()).getPacketId());
if (response == null) { if (response == null) {
Ts3Debugging.debug("Unrecognized PONG: " + ((PacketBody6Ack) packet.getBody()).getPacketId()); Ts3Debugging.debug("Unrecognized PONG: " + ((PacketBody5Pong) packet.getBody()).getPacketId());
} else { } else {
lastResponse = System.currentTimeMillis(); lastResponse = System.currentTimeMillis();
} }
@@ -15,6 +15,8 @@ import java.net.InetSocketAddress;
import java.util.Base64; import java.util.Base64;
import java.util.Random; import java.util.Random;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@@ -151,7 +153,7 @@ public class ServerConnectionTest {
client.subscribeAll(); client.subscribeAll();
client.waitForState(ClientConnectionState.DISCONNECTED, 100000000L); Thread.sleep(1000000L);
} catch (Throwable ex) { } catch (Throwable ex) {
ex.printStackTrace(); ex.printStackTrace();
} }