mirror of
https://github.com/ioquake/ioq3.git
synced 2024-11-10 07:11:46 +00:00
Fix legacy protocol with new packet queueing
This commit is contained in:
parent
242c938d7f
commit
8a831d34ab
2 changed files with 15 additions and 4 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue