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