aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--configure.in4
-rw-r--r--peer.c13
-rw-r--r--protocol.c17
3 files changed, 24 insertions, 10 deletions
diff --git a/configure.in b/configure.in
index 81b8610..178a623 100644
--- a/configure.in
+++ b/configure.in
@@ -1,5 +1,5 @@
-AC_INIT(libenet, 10-11-2007)
-AM_INIT_AUTOMAKE(libenet.a, 10-11-2007)
+AC_INIT(libenet, 10-12-2007)
+AM_INIT_AUTOMAKE(libenet.a, 10-12-2007)
AC_PROG_CC
AC_PROG_RANLIB
diff --git a/peer.c b/peer.c
index 3bd3ba6..25f2a27 100644
--- a/peer.c
+++ b/peer.c
@@ -473,6 +473,19 @@ enet_peer_queue_acknowledgement (ENetPeer * peer, const ENetProtocol * command,
{
ENetAcknowledgement * acknowledgement;
+ if (command -> header.channelID < peer -> channelCount)
+ {
+ ENetChannel * channel = & peer -> channels [command -> header.channelID];
+ enet_uint16 reliableWindow = command -> header.reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE,
+ currentWindow = channel -> incomingReliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE;
+
+ if (reliableWindow < currentWindow)
+ reliableWindow += ENET_PEER_RELIABLE_WINDOWS;
+
+ if (reliableWindow < currentWindow || reliableWindow >= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS)
+ return NULL;
+ }
+
peer -> outgoingDataTotal += sizeof (ENetProtocolAcknowledge);
acknowledgement = (ENetAcknowledgement *) enet_malloc (sizeof (ENetAcknowledgement));
diff --git a/protocol.c b/protocol.c
index e426243..3173fe0 100644
--- a/protocol.c
+++ b/protocol.c
@@ -163,8 +163,6 @@ enet_protocol_remove_sent_reliable_command (ENetPeer * peer, enet_uint16 reliabl
ENetOutgoingCommand * outgoingCommand;
ENetListIterator currentCommand;
ENetProtocolCommand commandNumber;
- ENetChannel * channel;
- enet_uint16 reliableWindow;
for (currentCommand = enet_list_begin (& peer -> sentReliableCommands);
currentCommand != enet_list_end (& peer -> sentReliableCommands);
@@ -180,13 +178,16 @@ enet_protocol_remove_sent_reliable_command (ENetPeer * peer, enet_uint16 reliabl
if (currentCommand == enet_list_end (& peer -> sentReliableCommands))
return ENET_PROTOCOL_COMMAND_NONE;
- reliableWindow = reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE;
- channel = & peer -> channels [channelID];
- if (channel -> reliableWindows [reliableWindow] > 0)
+ if (channelID < peer -> channelCount)
{
- -- channel -> reliableWindows [reliableWindow];
- if (! channel -> reliableWindows [reliableWindow])
- channel -> usedReliableWindows &= ~ (1 << reliableWindow);
+ ENetChannel * channel = & peer -> channels [channelID];
+ enet_uint16 reliableWindow = reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE;
+ if (channel -> reliableWindows [reliableWindow] > 0)
+ {
+ -- channel -> reliableWindows [reliableWindow];
+ if (! channel -> reliableWindows [reliableWindow])
+ channel -> usedReliableWindows &= ~ (1 << reliableWindow);
+ }
}
commandNumber = outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK;