diff --git a/source/enet/ChangeLog b/source/enet/ChangeLog index e604a332..553c03d7 100644 --- a/source/enet/ChangeLog +++ b/source/enet/ChangeLog @@ -1,4 +1,4 @@ -ENet CVS (December 23, 2010): +ENet CVS (January 31, 2011): * reliable data window size now scales with the throttle * fixed bug in fragment length calculation when checksums are used diff --git a/source/enet/LICENSE b/source/enet/LICENSE index df0f91e9..357a4e5c 100755 --- a/source/enet/LICENSE +++ b/source/enet/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2002-2010 Lee Salzman +Copyright (c) 2002-2011 Lee Salzman Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/source/enet/protocol.c b/source/enet/protocol.c index f9b2b099..3c4347da 100755 --- a/source/enet/protocol.c +++ b/source/enet/protocol.c @@ -1262,6 +1262,7 @@ enet_protocol_send_reliable_outgoing_commands (ENetHost * host, ENetPeer * peer) ENetChannel *channel; enet_uint16 reliableWindow; size_t commandSize; + int windowExceeded = 0; currentCommand = enet_list_begin (& peer -> outgoingReliableCommands); @@ -1278,7 +1279,14 @@ enet_protocol_send_reliable_outgoing_commands (ENetHost * host, ENetPeer * peer) channel -> usedReliableWindows & ((((1 << ENET_PEER_FREE_RELIABLE_WINDOWS) - 1) << reliableWindow) | (((1 << ENET_PEER_FREE_RELIABLE_WINDOWS) - 1) >> (ENET_PEER_RELIABLE_WINDOW_SIZE - reliableWindow))))) break; - + + if (windowExceeded && outgoingCommand -> packet != NULL) + { + currentCommand = enet_list_next (currentCommand); + + continue; + } + commandSize = commandSizes [outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK]; if (command >= & host -> commands [sizeof (host -> commands) / sizeof (ENetProtocol)] || buffer + 1 >= & host -> buffers [sizeof (host -> buffers) / sizeof (ENetBuffer)] || @@ -1294,7 +1302,12 @@ enet_protocol_send_reliable_outgoing_commands (ENetHost * host, ENetPeer * peer) enet_uint32 windowSize = (peer -> packetThrottle * peer -> windowSize) / ENET_PEER_PACKET_THROTTLE_SCALE; if (peer -> reliableDataInTransit + outgoingCommand -> fragmentLength > ENET_MAX (windowSize, peer -> mtu)) - break; + { + windowExceeded = 1; + currentCommand = enet_list_next (currentCommand); + + continue; + } if ((enet_uint16) (peer -> mtu - host -> packetSize) < (enet_uint16) (commandSize + outgoingCommand -> fragmentLength)) { diff --git a/source/lib/enet.lib b/source/lib/enet.lib index 319a0b1b..36af4f97 100644 Binary files a/source/lib/enet.lib and b/source/lib/enet.lib differ