diff options
Diffstat (limited to 'src/transport/gnunet-service-tng.c')
-rw-r--r-- | src/transport/gnunet-service-tng.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/transport/gnunet-service-tng.c b/src/transport/gnunet-service-tng.c index ed4be7e88..c30d2dd19 100644 --- a/src/transport/gnunet-service-tng.c +++ b/src/transport/gnunet-service-tng.c @@ -9332,6 +9332,7 @@ fragment_message (struct Queue *queue, struct PendingAcknowledgement *pa; struct PendingMessage *ff; uint16_t mtu; + uint16_t msize; mtu = (UINT16_MAX == queue->mtu) ? UINT16_MAX - sizeof(struct GNUNET_TRANSPORT_SendMessageTo) @@ -9359,13 +9360,16 @@ fragment_message (struct Queue *queue, enough */ ff = pm; + msize = ff->bytes_msg; + while (((ff->bytes_msg > mtu) || (pm == ff)) && - (ff->frag_off == ff->bytes_msg) && (NULL != ff->head_frag)) + (ff->frag_off == msize) && (NULL != ff->head_frag)) { ff = ff->head_frag; /* descent into fragmented fragments */ + msize = ff->bytes_msg - sizeof(struct TransportFragmentBoxMessage); } - if (((ff->bytes_msg > mtu) || (pm == ff)) && (ff->frag_off < ff->bytes_msg)) + if (((ff->bytes_msg > mtu) || (pm == ff)) && (ff->frag_off < msize)) { /* Did not yet calculate all fragments, calculate next fragment */ struct PendingMessage *frag; |