From c5323a8d36dad82329aa9fa7aefdc588383a3256 Mon Sep 17 00:00:00 2001 From: zzz <zzz@i2pmail.org> Date: Mon, 20 Jun 2022 07:37:05 -0400 Subject: [PATCH] SSU2: Fix overhead calculation for followon fragments so as not to exceed MTU --- .../i2p/router/transport/udp/OutboundMessageFragments.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java b/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java index 81c976b98a..5cc606b037 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java @@ -457,6 +457,8 @@ class OutboundMessageFragments { if (_log.shouldDebug()) _log.debug("Building packet for " + next + " to " + peer); int curTotalDataSize = state.fragmentSize(next.num); + if (next.num > 0 && peer.getVersion() > 1) + curTotalDataSize += SSU2Util.DATA_FOLLOWON_EXTRA_SIZE; // now stuff in more fragments if they fit if (i +1 < toSend.size()) { int maxAvail; @@ -469,6 +471,8 @@ class OutboundMessageFragments { for (int j = i + 1; j < toSend.size(); j++) { next = toSend.get(j); int nextDataSize = next.state.fragmentSize(next.num); + if (next.num > 0 && peer.getVersion() > 1) + nextDataSize += SSU2Util.DATA_FOLLOWON_EXTRA_SIZE; //if (PacketBuilder.canFitAnotherFragment(peer, sendNext.size(), curTotalDataSize, nextDataSize)) { //if (_builder.canFitAnotherFragment(peer, sendNext.size(), curTotalDataSize, nextDataSize)) { if (nextDataSize <= maxAvail) { -- GitLab