From 8a831d34abd7941fd4baa3b55c2687c186983255 Mon Sep 17 00:00:00 2001 From: Thilo Schulz Date: Sun, 17 Jul 2011 23:43:33 +0000 Subject: [PATCH] Fix legacy protocol with new packet queueing --- code/server/server.h | 3 +++ code/server/sv_net_chan.c | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/code/server/server.h b/code/server/server.h index b8f1ac3d..257a1589 100644 --- a/code/server/server.h +++ b/code/server/server.h @@ -124,6 +124,9 @@ typedef enum { typedef struct netchan_buffer_s { msg_t msg; byte msgBuffer[MAX_MSGLEN]; +#ifdef LEGACY_PROTOCOL + char clientCommandString[MAX_STRING_CHARS]; // valid command string for SV_Netchan_Encode +#endif struct netchan_buffer_s *next; } netchan_buffer_t; diff --git a/code/server/sv_net_chan.c b/code/server/sv_net_chan.c index a37f9ceb..66832630 100644 --- a/code/server/sv_net_chan.c +++ b/code/server/sv_net_chan.c @@ -34,7 +34,8 @@ SV_Netchan_Encode ============== */ -static void SV_Netchan_Encode( client_t *client, msg_t *msg ) { +static void SV_Netchan_Encode(client_t *client, msg_t *msg, const char *clientCommandString) +{ long i, index; byte key, *string; int srdc, sbit; @@ -58,7 +59,7 @@ static void SV_Netchan_Encode( client_t *client, msg_t *msg ) { msg->bit = sbit; msg->readcount = srdc; - string = (byte *)client->lastClientCommandString; + string = (byte *) clientCommandString; index = 0; // xor the client challenge with the netchan sequence number key = client->challenge ^ client->netchan.outgoingSequence; @@ -165,7 +166,7 @@ void SV_Netchan_TransmitNextInQueue(client_t *client) #ifdef LEGACY_PROTOCOL if(client->compat) - SV_Netchan_Encode(client, &netbuf->msg); + SV_Netchan_Encode(client, &netbuf->msg, netbuf->clientCommandString); #endif Netchan_Transmit(&client->netchan, netbuf->msg.cursize, netbuf->msg.data); @@ -231,6 +232,13 @@ void SV_Netchan_Transmit( client_t *client, msg_t *msg) netbuf = (netchan_buffer_t *) Z_Malloc(sizeof(netchan_buffer_t)); // store the msg, we can't store it encoded, as the encoding depends on stuff we still have to finish sending MSG_Copy(&netbuf->msg, netbuf->msgBuffer, sizeof( netbuf->msgBuffer ), msg); +#ifdef LEGACY_PROTOCOL + if(client->compat) + { + Q_strncpyz(netbuf->clientCommandString, client->lastClientCommandString, + sizeof(netbuf->clientCommandString)); + } +#endif netbuf->next = NULL; // insert it in the queue, the message will be encoded and sent later *client->netchan_end_queue = netbuf; @@ -240,7 +248,7 @@ void SV_Netchan_Transmit( client_t *client, msg_t *msg) { #ifdef LEGACY_PROTOCOL if(client->compat) - SV_Netchan_Encode(client, msg); + SV_Netchan_Encode(client, msg, client->lastClientCommandString); #endif Netchan_Transmit( &client->netchan, msg->cursize, msg->data ); }