m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPServer.java
diff options
context:
space:
mode:
authorMagdalena Grodzińska <mag.grodzinska@gmail.com>2020-01-10 15:26:52 +0100
committerMagdalena Grodzińska <mag.grodzinska@gmail.com>2020-01-10 15:26:52 +0100
commit90d3d2e3e1e116bbb288d78e9c6c996a7f1e0270 (patch)
tree8ef924fd1525c6f03a354bea1957df98479f05bc /src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPServer.java
parent2d7fe232b7c1f2ef62e7bf2f3100adb51e9bc0d4 (diff)
Fix segmentation
Diffstat (limited to 'src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPServer.java')
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPServer.java21
1 files changed, 9 insertions, 12 deletions
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPServer.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPServer.java
index c7ceca2..b71a475 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPServer.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPServer.java
@@ -35,15 +35,12 @@ public class UDUPServer {
int packetNo = readPacketNo(packet.getData());
byte[] packetData = trimPacketBuffer(packet.getData());
- if (packetNo == 0) {
- if (packet.getLength() == this.bufSize) {
- this.addPartialMessageAndCheckSerialization(transmissionID, packetNo, packetData);
- } else {
- UDUPMessage msg = this.serializer.deserialize(packetData);
- System.out.println("UDP received message " + msg.getContent().getMessageId());
- sendMessageFurther(msg);
- }
+ if (packetNo == 1 && packet.getLength() < this.bufSize) {
+ UDUPMessage msg = this.serializer.deserialize(packetData);
+ System.out.println("UDP received message " + msg.getContent().getMessageId());
+ sendMessageFurther(msg);
} else {
+ System.out.println("UDP received partial message with transmission id " + transmissionID + " packet no " + packetNo);
this.addPartialMessageAndCheckSerialization(transmissionID, packetNo, packetData);
}
}
@@ -93,7 +90,7 @@ public class UDUPServer {
ArrayList<byte[]> previousPacketData = this.partialPackets.get(transmissionID);
byte[] fullData = new byte[0];
- previousPacketData.add(newPacketNo, newPacketData);
+ previousPacketData.add(newPacketNo - 1, newPacketData);
this.partialPackets.put(transmissionID, previousPacketData);
if (previousPacketData.contains(null)) {
@@ -112,15 +109,15 @@ public class UDUPServer {
try {
byte[] allPacketData = concatPacketData(transmissionID, newPacketNo, packetData);
UDUPMessage msg = this.serializer.deserialize(allPacketData);
- this.udp.sendMessage(msg.getContent());
this.partialPackets.remove(transmissionID);
- System.out.println("Kryo put together whole transmission");
+ System.out.println("Kryo put together whole transmission for msg " + msg.getContent().getMessageId());
+ this.udp.sendMessage(msg.getContent());
} catch (Error | Exception e) {
System.out.println("Kryo didn't deserialize partial message, waiting to receive the rest");
}
} else {
ArrayList<byte[]> newTransmission = new ArrayList<byte[]>();
- newTransmission.add(packetData);
+ newTransmission.add(newPacketNo-1, packetData);
this.partialPackets.put(transmissionID, newTransmission);
}
}