[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r1793 - GNUnet/src/server
From: |
grothoff |
Subject: |
[GNUnet-SVN] r1793 - GNUnet/src/server |
Date: |
Sat, 20 Aug 2005 11:45:04 -0700 (PDT) |
Author: grothoff
Date: 2005-08-20 11:45:03 -0700 (Sat, 20 Aug 2005)
New Revision: 1793
Modified:
GNUnet/src/server/connection.c
Log:
fixing mantis 889
Modified: GNUnet/src/server/connection.c
===================================================================
--- GNUnet/src/server/connection.c 2005-08-20 18:18:27 UTC (rev 1792)
+++ GNUnet/src/server/connection.c 2005-08-20 18:45:03 UTC (rev 1793)
@@ -1222,6 +1222,8 @@
SendEntry * entry;
int i;
int ret;
+ int j;
+ int changed;
if (be->session.tsession == NULL) {
be->session.tsession
@@ -1233,31 +1235,39 @@
= transport->getMTU(be->session.tsession->ttype);
if (be->session.mtu > 0) {
/* MTU change may require new fragmentation! */
- entries = be->sendBuffer;
- i = 0;
- ret = be->sendBufferSize;
- /* assumes entries are sorted by priority! */
- while (i < ret) {
- entry = entries[i];
- if (entry->len > be->session.mtu - sizeof(P2P_PACKET_HEADER)) {
- entries[i] = entries[--ret];
- fragmentation->fragment(&be->session.sender,
- be->session.mtu - sizeof(P2P_PACKET_HEADER),
- entry->pri,
- entry->transmissionTime,
- entry->len,
- entry->callback,
- entry->closure);
- FREE(entry);
- }
- i++;
- }
- if (ret != be->sendBufferSize)
- GROW(be->sendBuffer,
- be->sendBufferSize,
- ret);
- }
- }
+ changed = YES;
+ while (changed) {
+ entries = be->sendBuffer;
+ i = 0;
+ ret = be->sendBufferSize;
+ while (i < ret) {
+ entry = entries[i];
+ if (entry->len > be->session.mtu - sizeof(P2P_PACKET_HEADER)) {
+ ret--;
+ for (j=i;j<ret;j++)
+ entries[j] = entries[j+1]; /* preserve ordering */
+ GROW(be->sendBuffer,
+ be->sendBufferSize,
+ ret);
+ /* calling fragment will change be->sendBuffer;
+ thus we need to restart from the beginning afterwards... */
+ fragmentation->fragment(&be->session.sender,
+ be->session.mtu - sizeof(P2P_PACKET_HEADER),
+ entry->pri,
+ entry->transmissionTime,
+ entry->len,
+ entry->callback,
+ entry->closure);
+ FREE(entry);
+ changed = YES;
+ break;
+ } else {
+ i++;
+ }
+ } /* for all i (until change) */
+ } /* while changed */
+ } /* if MTU changed */
+ } /* if need to reconnect */
return OK;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r1793 - GNUnet/src/server,
grothoff <=