This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
#include "quakedef.h"
#include "net_dgrm.h"
+cvar_t cl_port = {CVAR_SAVE, "cl_port", "0"};
+
// these two macros are to make the code more readable
#define sfunc net_landrivers[sock->landriver]
#define dfunc net_landrivers[net_landriverlevel]
{
unsigned int length;
unsigned int sequence;
- byte data[MAX_DATAGRAM];
+ qbyte data[MAX_DATAGRAM];
} packetBuffer;
-extern int m_return_state;
-extern int m_state;
-extern qboolean m_return_onerror;
-extern char m_return_reason[32];
-
//#ifdef DEBUG
char *StrAddr (struct qsockaddr *addr)
{
static char buf[34];
- byte *p = (byte *)addr;
+ qbyte *p = (qbyte *)addr;
int n;
for (n = 0; n < 16; n++)
sock->canSend = false;
- if (sfunc.Write (sock->socket, (byte *)&packetBuffer, packetLen, &sock->addr) == -1)
+ if (sfunc.Write (sock->socket, (qbyte *)&packetBuffer, packetLen, &sock->addr) == -1)
return -1;
sock->lastSendTime = net_time;
sock->sendNext = false;
- if (sfunc.Write (sock->socket, (byte *)&packetBuffer, packetLen, &sock->addr) == -1)
+ if (sfunc.Write (sock->socket, (qbyte *)&packetBuffer, packetLen, &sock->addr) == -1)
return -1;
sock->lastSendTime = net_time;
sock->sendNext = false;
- if (sfunc.Write (sock->socket, (byte *)&packetBuffer, packetLen, &sock->addr) == -1)
+ if (sfunc.Write (sock->socket, (qbyte *)&packetBuffer, packetLen, &sock->addr) == -1)
return -1;
sock->lastSendTime = net_time;
packetBuffer.sequence = BigLong(sock->unreliableSendSequence++);
memcpy (packetBuffer.data, data->data, data->cursize);
- if (sfunc.Write (sock->socket, (byte *)&packetBuffer, packetLen, &sock->addr) == -1)
+ if (sfunc.Write (sock->socket, (qbyte *)&packetBuffer, packetLen, &sock->addr) == -1)
return -1;
packetsSent++;
ReSendMessage (sock);
while(1)
- {
- length = sfunc.Read (sock->socket, (byte *)&packetBuffer, NET_DATAGRAMSIZE, &readaddr);
-
-// if ((rand() & 255) > 220)
-// continue;
+ {
+ length = sfunc.Read (sock->socket, (qbyte *)&packetBuffer, NET_DATAGRAMSIZE, &readaddr);
if (length == 0)
break;
{
packetBuffer.length = BigLong(NET_HEADERSIZE | NETFLAG_ACK);
packetBuffer.sequence = BigLong(sequence);
- sfunc.Write (sock->socket, (byte *)&packetBuffer, NET_HEADERSIZE, &readaddr);
+ sfunc.Write (sock->socket, (qbyte *)&packetBuffer, NET_HEADERSIZE, &readaddr);
if (sequence != sock->receiveSequence)
{
{
for (s = net_activeSockets; s; s = s->next)
PrintStats(s);
- for (s = net_freeSockets; s; s = s->next)
- PrintStats(s);
}
else
{
for (s = net_activeSockets; s; s = s->next)
if (Q_strcasecmp(Cmd_Argv(1), s->address) == 0)
break;
- if (s == NULL)
- for (s = net_freeSockets; s; s = s->next)
- if (Q_strcasecmp(Cmd_Argv(1), s->address) == 0)
- break;
if (s == NULL)
return;
PrintStats(s);
int colors;
int frags;
int connectTime;
- byte playerNumber;
+ qbyte playerNumber;
+ int c;
net_landriverlevel = testDriver;
if ((control & NETFLAG_LENGTH_MASK) != len)
break;
- if (MSG_ReadByte() != CCREP_PLAYER_INFO)
+ c = MSG_ReadByte();
+ if (c != CCREP_PLAYER_INFO)
Sys_Error("Unexpected repsonse to Player Info request\n");
playerNumber = MSG_ReadByte();
struct qsockaddr clientaddr;
int control;
int len;
+ int c;
char name[256];
char value[256];
if ((control & NETFLAG_LENGTH_MASK) != len)
goto Error;
- if (MSG_ReadByte() != CCREP_RULE_INFO)
+ c = MSG_ReadByte();
+ if (c != CCREP_RULE_INFO)
goto Error;
strcpy(name, MSG_ReadString());
myDriverLevel = net_driverlevel;
Cmd_AddCommand ("net_stats", NET_Stats_f);
+ Cvar_RegisterVariable (&cl_port);
if (COM_CheckParm("-nolan"))
return -1;
int command;
int control;
int ret;
+ int c;
acceptsock = dfunc.CheckNewConnections();
if (acceptsock == -1)
int activeNumber;
int clientNumber;
client_t *client;
-
+
playerNumber = MSG_ReadByte();
activeNumber = -1;
for (clientNumber = 0, client = svs.clients; clientNumber < svs.maxclients; clientNumber++, client++)
// search for the next server cvar
while (var)
{
- if (var->server)
+ if (var->flags & CVAR_NOTIFY)
break;
var = var->next;
}
if (strcmp(MSG_ReadString(), "QUAKE") != 0)
return NULL;
- if (MSG_ReadByte() != NET_PROTOCOL_VERSION)
+ c = MSG_ReadByte();
+ if (c != NET_PROTOCOL_VERSION)
{
SZ_Clear(&net_message);
// save space for the header, filled in later
return NULL;
}
- // everything is allocated, just fill in the details
+ // everything is allocated, just fill in the details
sock->socket = newsock;
sock->landriver = net_landriverlevel;
sock->addr = clientaddr;
MSG_WriteByte(&net_message, CCREP_ACCEPT);
dfunc.GetSocketAddr(newsock, &newaddr);
MSG_WriteLong(&net_message, dfunc.GetSocketPort(&newaddr));
-// MSG_WriteString(&net_message, dfunc.AddrToString(&newaddr));
*((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK));
dfunc.Write (acceptsock, net_message.data, net_message.cursize, &clientaddr);
SZ_Clear(&net_message);
struct qsockaddr readaddr;
struct qsockaddr myaddr;
int control;
+ int c;
dfunc.GetSocketAddr (dfunc.controlSock, &myaddr);
if (xmit)
if ((control & NETFLAG_LENGTH_MASK) != ret)
continue;
- if (MSG_ReadByte() != CCREP_SERVER_INFO)
+ c = MSG_ReadByte();
+ if (c != CCREP_SERVER_INFO)
continue;
dfunc.GetAddrFromName(MSG_ReadString(), &readaddr);
strcpy(hostcache[n].map, MSG_ReadString());
hostcache[n].users = MSG_ReadByte();
hostcache[n].maxusers = MSG_ReadByte();
- if (MSG_ReadByte() != NET_PROTOCOL_VERSION)
+ c = MSG_ReadByte();
+ if (c != NET_PROTOCOL_VERSION)
{
strcpy(hostcache[n].cname, hostcache[n].name);
hostcache[n].cname[14] = 0;
if (dfunc.GetAddrFromName(host, &sendaddr) == -1)
return NULL;
- newsock = dfunc.OpenSocket (0);
+ newsock = dfunc.OpenSocket (cl_port.integer);
if (newsock == -1)
return NULL;
goto ErrorReturn;
// send the connection request
- Con_Printf("trying...\n"); SCR_UpdateScreen ();
+ Con_Printf("trying...\n");CL_UpdateScreen();CL_UpdateScreen();
start_time = net_time;
for (reps = 0; reps < 3; reps++)
// is it from the right place?
if (sfunc.AddrCompare(&readaddr, &sendaddr) != 0)
{
-//#ifdef DEBUG
Con_DPrintf("wrong reply address\n");
Con_DPrintf("Expected: %s\n", StrAddr (&sendaddr));
Con_DPrintf("Received: %s\n", StrAddr (&readaddr));
- SCR_UpdateScreen ();
-//#endif
+ CL_UpdateScreen ();
ret = 0;
continue;
}
while (ret == 0 && (SetNetTime() - start_time) < 2.5);
if (ret)
break;
- Con_Printf("still trying...\n"); SCR_UpdateScreen ();
+ Con_Printf("still trying...\n");CL_UpdateScreen();CL_UpdateScreen();
start_time = SetNetTime();
}
if (ret == CCREP_REJECT)
{
reason = MSG_ReadString();
- Con_Printf(reason);
+ Con_Printf("%s", reason);
strncpy(m_return_reason, reason, 31);
goto ErrorReturn;
}
dfunc.GetNameFromAddr (&sendaddr, sock->address);
- Con_Printf ("Connection accepted\n");
+ Con_Printf ("Connection accepted to %s\n", sock->address);
sock->lastMessageTime = SetNetTime();
// switch the connection to the specified address
break;
return ret;
}
+