Don't add the same server twice

This commit is contained in:
smallmodel 2025-02-22 22:24:19 +01:00
parent 56d61bdef3
commit 83aa818c00
No known key found for this signature in database
GPG key ID: 9F2D623CEDF08512

View file

@ -91,9 +91,13 @@ struct GServerListImplementation
GQueryType querytype;
HashTable keylist;
// Added in 2.0
int numservers;
// Added in 2.0
GCryptInfo cryptinfo;
// Added in OPM
int encryptdata;
GParseInfoState pistate;
};
@ -133,7 +137,11 @@ GServerList ServerListNew(const char *gamename, const char *enginename, const ch
assert(CallBackFn != NULL);
list->instance = instance;
list->sortkey = "";
// Added in 2.0
list->numservers = 0;
// Added in OPM
list->encryptdata = 1;
SocketStartUp();
return list;
}
@ -374,6 +382,8 @@ GError ServerListUpdate2(GServerList serverlist, gbool async, char *filter, GQue
serverlist->nextupdate = 0;
serverlist->abortupdate = 0;
// Added in 2.0
serverlist->numservers = ServerListCount(serverlist);
// Added in 2.0
serverlist->cryptinfo.offset = -1;
if (!async)
DoSyncLoop(serverlist);
@ -436,12 +446,12 @@ static void ServerListInsertServer(GServerList serverlist, unsigned long ip, uns
}
//find the server in the list, returns -1 if it does not exist
static int ServerListFindServer(GServerList serverlist, unsigned int ip, int port)
static int ServerListFindServerMax(GServerList serverlist, unsigned int ip, int port, int count)
{
int i;
GServer server;
for (i = 0; i < ArrayLength(serverlist->servers) ; i++)
for (i = 0; i < count ; i++)
{
server = *(GServer *)ArrayNth(serverlist->servers,i);
if (port == ServerGetQueryPort(server) && ServerGetInetAddress(server)==ip)
@ -452,6 +462,12 @@ static int ServerListFindServer(GServerList serverlist, unsigned int ip, int por
return -1;
}
//find the server in the list, returns -1 if it does not exist
static int ServerListFindServer(GServerList serverlist, unsigned int ip, int port)
{
return ServerListFindServerMax(serverlist, ip, port, ArrayLength(serverlist->servers));
}
//finds the server in the list of servers currently being queried
// returns -1 if it does not exist
static int ServerListFindServerInUpdateList(GServerList serverlist, GServer server)
@ -766,7 +782,11 @@ static GError ServerListReadList(GServerList serverlist)
p += 4;
memcpy(&port, p, 2);
p += 2;
ServerListAddServer(serverlist, ip, ntohs(port), serverlist->querytype);
// Added in 2.0
// Skip adding the server if already exists
if (ServerListFindServerMax(serverlist, ip, ntohs(port), serverlist->numservers) == -1) {
ServerListAddServer(serverlist, ip, ntohs(port), serverlist->querytype);
}
}
}
}