Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ public UdpResponse send(UdpRequest request) throws IOException {
ByteArrayOutputStream blocks = new ByteArrayOutputStream();
int expectedBlocks = 0;
boolean compressed = false;
boolean ackSent = false;

while (true) {
byte[] buf = new byte[4096];
Expand All @@ -93,11 +92,9 @@ public UdpResponse send(UdpRequest request) throws IOException {

boolean thisCompressed = data[22] == 1;


if (!ackSent && (msgType == MSG_LEAD || msgType == MSG_BLOCK
|| msgType == HaywardMessageType.MSP_TELEMETRY_UPDATE.getMsgInt())) {
if (msgType == MSG_LEAD || msgType == MSG_BLOCK
|| msgType == HaywardMessageType.MSP_TELEMETRY_UPDATE.getMsgInt()) {
sendAck(socket, msgId);
ackSent = true;
}

if (msgType == MSG_LEAD) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.zip.DeflaterOutputStream;
import java.lang.reflect.Field;

Expand Down Expand Up @@ -131,6 +132,8 @@ public void sendShouldHandleUncompressedMultiBlockResponse() throws Exception {
int mid = xmlBytes.length / 2;
byte[] part1 = Arrays.copyOfRange(xmlBytes, 0, mid);
byte[] part2 = Arrays.copyOfRange(xmlBytes, mid, xmlBytes.length);
final AtomicInteger block1Acks = new AtomicInteger();
final AtomicInteger block2Acks = new AtomicInteger();

Thread serverThread = new Thread(() -> {
try {
Expand All @@ -142,10 +145,33 @@ public void sendShouldHandleUncompressedMultiBlockResponse() throws Exception {
int clientPort = requestPacket.getPort();
byte[] lead = createLeadPacket(msgId, 2, false);
server.send(new DatagramPacket(lead, lead.length, clientAddress, clientPort));
// consume ACKs for lead
for (int i = 0; i < 2; i++) {
server.setSoTimeout(2000);
server.receive(new DatagramPacket(new byte[4096], 4096));
}
byte[] block1 = createBlockPacket(msgId, part1, false);
server.send(new DatagramPacket(block1, block1.length, clientAddress, clientPort));
for (int i = 0; i < 2; i++) {
DatagramPacket ack = new DatagramPacket(new byte[4096], 4096);
server.setSoTimeout(2000);
server.receive(ack);
if (ByteBuffer.wrap(ack.getData(), 0, ack.getLength()).getInt(16) ==
HaywardMessageType.ACK.getMsgInt()) {
block1Acks.incrementAndGet();
}
}
byte[] block2 = createBlockPacket(msgId, part2, false);
server.send(new DatagramPacket(block2, block2.length, clientAddress, clientPort));
for (int i = 0; i < 2; i++) {
DatagramPacket ack = new DatagramPacket(new byte[4096], 4096);
server.setSoTimeout(2000);
server.receive(ack);
if (ByteBuffer.wrap(ack.getData(), 0, ack.getLength()).getInt(16) ==
HaywardMessageType.ACK.getMsgInt()) {
block2Acks.incrementAndGet();
}
}
} catch (Exception e) {
// ignore for test
}
Expand All @@ -160,6 +186,8 @@ public void sendShouldHandleUncompressedMultiBlockResponse() throws Exception {
server.close();

assertEquals(responseXml, response.getXml());
assertEquals(2, block1Acks.get());
assertEquals(2, block2Acks.get());
}

@Test
Expand Down