int serverlist_sortflags;
int serverlist_viewcount = 0;
-serverlist_entry_t *serverlist_viewlist[SERVERLIST_VIEWLISTSIZE];
+unsigned short serverlist_viewlist[SERVERLIST_VIEWLISTSIZE];
-int serverlist_cachecount;
-serverlist_entry_t serverlist_cache[SERVERLIST_TOTALSIZE];
+int serverlist_maxcachecount = 0;
+int serverlist_cachecount = 0;
+serverlist_entry_t *serverlist_cache = NULL;
qboolean serverlist_consoleoutput;
static int nFavorites = 0;
-static lhnetaddress_t favorites[256];
+static lhnetaddress_t favorites[MAX_FAVORITESERVERS];
void NetConn_UpdateFavorites(void)
{
for( ; i > index ; i-- )
serverlist_viewlist[ i ] = serverlist_viewlist[ i - 1 ];
- serverlist_viewlist[index] = entry;
+ serverlist_viewlist[index] = (int)(entry - serverlist_cache);
}
/// we suppose serverlist_viewcount to be valid, ie > 0
// two special cases
// check whether to insert it as new first item
- if( _ServerList_Entry_Compare( entry, serverlist_viewlist[0] ) ) {
+ if( _ServerList_Entry_Compare( entry, ServerList_GetViewEntry(0) ) ) {
_ServerList_ViewList_Helper_InsertBefore( 0, entry );
return;
} // check whether to insert it as new last item
- else if( !_ServerList_Entry_Compare( entry, serverlist_viewlist[serverlist_viewcount - 1] ) ) {
+ else if( !_ServerList_Entry_Compare( entry, ServerList_GetViewEntry(serverlist_viewcount - 1) ) ) {
_ServerList_ViewList_Helper_InsertBefore( serverlist_viewcount, entry );
return;
}
{
mid = (start + end) / 2;
// test the item that lies in the middle between start and end
- if( _ServerList_Entry_Compare( entry, serverlist_viewlist[mid] ) )
+ if( _ServerList_Entry_Compare( entry, ServerList_GetViewEntry(mid) ) )
// the item has to be in the upper half
end = mid;
else
int i;
for( i = 0; i < serverlist_viewcount; i++ )
{
- if (serverlist_viewlist[i] == entry)
+ if (ServerList_GetViewEntry(i) == entry)
{
_ServerList_ViewList_Helper_Remove(i);
break;
static void _ServerList_Test(void)
{
int i;
+ if (serverlist_maxcachecount <= 1024)
+ {
+ serverlist_maxcachecount = 1024;
+ serverlist_cache = (serverlist_entry_t *)Mem_Realloc(netconn_mempool, (void *)serverlist_cache, sizeof(serverlist_entry_t) * serverlist_maxcachecount);
+ }
for( i = 0 ; i < 1024 ; i++ ) {
memset( &serverlist_cache[serverlist_cachecount], 0, sizeof( serverlist_entry_t ) );
serverlist_cache[serverlist_cachecount].info.ping = 1000 + 1024 - i;
serverreplycount = 0;
serverlist_cachecount = 0;
serverlist_viewcount = 0;
+ serverlist_maxcachecount = 0;
+ serverlist_cache = (serverlist_entry_t *)Mem_Realloc(netconn_mempool, (void *)serverlist_cache, sizeof(serverlist_entry_t) * serverlist_maxcachecount);
} else {
// refresh all entries
int n;
int NetConn_SendUnreliableMessage(netconn_t *conn, sizebuf_t *data, protocolversion_t protocol, int rate, qboolean quakesignon_suppressreliables)
{
int totallen = 0;
- int temp;
// if this packet was supposedly choked, but we find ourselves sending one
// anyway, make sure the size counting starts at zero
sendreliable = true;
}
// outgoing unreliable packet number, and outgoing reliable packet number (0 or 1)
- temp = (unsigned int)conn->outgoing_unreliable_sequence | ((unsigned int)sendreliable<<31);
- *((int *)(sendbuffer + 0)) = LittleLong(temp);
+ StoreLittleLong(sendbuffer, (unsigned int)conn->outgoing_unreliable_sequence | ((unsigned int)sendreliable<<31));
// last received unreliable packet number, and last received reliable packet number (0 or 1)
- temp = (unsigned int)conn->qw.incoming_sequence | ((unsigned int)conn->qw.incoming_reliable_sequence<<31);
- *((int *)(sendbuffer + 4)) = LittleLong(temp);
+ StoreLittleLong(sendbuffer + 4, (unsigned int)conn->qw.incoming_sequence | ((unsigned int)conn->qw.incoming_reliable_sequence<<31));
packetLen = 8;
conn->outgoing_unreliable_sequence++;
// client sends qport in every packet
if (serverlist_cachecount == SERVERLIST_TOTALSIZE)
return -1;
+ if (serverlist_maxcachecount <= serverlist_cachecount)
+ {
+ serverlist_maxcachecount += 64;
+ serverlist_cache = (serverlist_entry_t *)Mem_Realloc(netconn_mempool, (void *)serverlist_cache, sizeof(serverlist_entry_t) * serverlist_maxcachecount);
+ }
entry = &serverlist_cache[n];
memset(entry, 0, sizeof(*entry));
if( !strcmp( ipstring, serverlist_cache[ n ].info.cname ) )
break;
- entry = &serverlist_cache[n];
-
if( n < serverlist_cachecount ) {
// the entry has already been queried once or
return true;
}
+ if (serverlist_maxcachecount <= n)
+ {
+ serverlist_maxcachecount += 64;
+ serverlist_cache = (serverlist_entry_t *)Mem_Realloc(netconn_mempool, (void *)serverlist_cache, sizeof(serverlist_entry_t) * serverlist_maxcachecount);
+ }
+
+ entry = &serverlist_cache[n];
+
memset(entry, 0, sizeof(entry));
entry->protocol = protocol;
// store the data the engine cares about (address and ping)
// darkplaces or quake3
char protocolnames[1400];
Protocol_Names(protocolnames, sizeof(protocolnames));
- Con_Printf("\"%s\" received, sending connect request back to %s\n", string, addressstring2);
+ Con_DPrintf("\"%s\" received, sending connect request back to %s\n", string, addressstring2);
M_Update_Return_Reason("Got challenge response");
// update the server IP in the userinfo (QW servers expect this, and it is used by the reconnect command)
InfoString_SetValue(cls.userinfo, sizeof(cls.userinfo), "*ip", addressstring2);