diff --git a/src/network/FragmentedHandler.java b/src/network/FragmentedHandler.java index 712b505c6..f164215bb 100644 --- a/src/network/FragmentedHandler.java +++ b/src/network/FragmentedHandler.java @@ -28,17 +28,18 @@ package network; import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.List; import network.packets.soe.Fragmented; -import resources.SortedLinkedList; public class FragmentedHandler { - private SortedLinkedList fragPackets; + private List fragPackets; private int fragSize; public FragmentedHandler() { - fragPackets = new SortedLinkedList(); + fragPackets = new ArrayList(); fragSize = 0; } @@ -52,8 +53,8 @@ public class FragmentedHandler { if (insertIfNew(f) && getBufferedSize() == fragSize) { byte [] data = new byte[fragSize]; int offset = 0; - while (fragPackets.size() > 0 && offset < fragSize) { - offset = spliceFragmentedIntoBuffer(fragPackets.removeFirst(), data, offset); + for (Fragmented frag : fragPackets) { + offset = spliceFragmentedIntoBuffer(frag, data, offset); } updateMetadata(); return data; @@ -85,14 +86,14 @@ public class FragmentedHandler { if (fragPackets.isEmpty()) fragSize = 0; else - fragSize = fragPackets.getFirst().encode().order(ByteOrder.BIG_ENDIAN).getInt(4); + fragSize = fragPackets.get(0).encode().order(ByteOrder.BIG_ENDIAN).getInt(4); } } private int getBufferedSize() { int curSize = 0; int i = 0; - short prevSeq = (short) (fragPackets.getFirst().getSequence()-1); + short prevSeq = (short) (fragPackets.get(0).getSequence()-1); for (Fragmented frag : fragPackets) { // Update previous sequence and verify all in-order if (prevSeq+1 != frag.getSequence()) diff --git a/src/network/InboundNetworkHandler.java b/src/network/InboundNetworkHandler.java index 72074d0f1..c8aa72618 100644 --- a/src/network/InboundNetworkHandler.java +++ b/src/network/InboundNetworkHandler.java @@ -64,6 +64,7 @@ public class InboundNetworkHandler { public synchronized void reset() { fragStream.reset(); + inboundQueue.clear(); recvSequence = -1; crc = 0; } diff --git a/src/network/NetworkProtocol.java b/src/network/NetworkProtocol.java index 7d2d88d75..680fed210 100644 --- a/src/network/NetworkProtocol.java +++ b/src/network/NetworkProtocol.java @@ -36,6 +36,7 @@ import java.util.List; import resources.control.Intent; import resources.network.ServerType; import resources.network.UDPServer.UDPPacket; +import resources.server_info.Log; import network.InboundNetworkHandler.InboundEventCallback; import network.packets.Packet; import network.packets.soe.Acknowledge; @@ -105,7 +106,7 @@ public class NetworkProtocol implements InboundEventCallback { private void process(List packets, Packet packet) { if (packet == null) - return; + throw new NullPointerException("Inbound packet cannot be null!"); packets.add(packet); if (packet instanceof Acknowledge) outbound.onAcknowledge(((Acknowledge) packet).getSequence()); @@ -117,15 +118,17 @@ public class NetworkProtocol implements InboundEventCallback { } public void sendPacket(Packet packet) { - if (address == null) + if (address == null) { + Log.w("NetworkProtocol", "Address is null! Cannot send packet"); return; + } outbound.assemble(packet); flushAssembled(); } private void send(byte [] data) { if (data == null) - return; + throw new NullPointerException("Outbound data cannot be null!"); UDPPacket packet = new UDPPacket(address, port, data); OutboundUdpPacketIntent intent = new OutboundUdpPacketIntent(serverType, packet); synchronized (prevOutboundIntentMutex) { diff --git a/src/services/network/NetworkClientManager.java b/src/services/network/NetworkClientManager.java index a35bc654b..d7252cf1a 100644 --- a/src/services/network/NetworkClientManager.java +++ b/src/services/network/NetworkClientManager.java @@ -250,6 +250,7 @@ public class NetworkClientManager extends Manager { } } } + client.resetNetwork(); } } return false;