mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 21:57:57 +03:00
Don't add the same server twice
This commit is contained in:
parent
56d61bdef3
commit
83aa818c00
1 changed files with 23 additions and 3 deletions
|
@ -91,9 +91,13 @@ struct GServerListImplementation
|
||||||
GQueryType querytype;
|
GQueryType querytype;
|
||||||
HashTable keylist;
|
HashTable keylist;
|
||||||
|
|
||||||
|
// Added in 2.0
|
||||||
|
int numservers;
|
||||||
// Added in 2.0
|
// Added in 2.0
|
||||||
GCryptInfo cryptinfo;
|
GCryptInfo cryptinfo;
|
||||||
|
// Added in OPM
|
||||||
int encryptdata;
|
int encryptdata;
|
||||||
|
|
||||||
GParseInfoState pistate;
|
GParseInfoState pistate;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -133,7 +137,11 @@ GServerList ServerListNew(const char *gamename, const char *enginename, const ch
|
||||||
assert(CallBackFn != NULL);
|
assert(CallBackFn != NULL);
|
||||||
list->instance = instance;
|
list->instance = instance;
|
||||||
list->sortkey = "";
|
list->sortkey = "";
|
||||||
|
// Added in 2.0
|
||||||
|
list->numservers = 0;
|
||||||
|
// Added in OPM
|
||||||
list->encryptdata = 1;
|
list->encryptdata = 1;
|
||||||
|
|
||||||
SocketStartUp();
|
SocketStartUp();
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
@ -374,6 +382,8 @@ GError ServerListUpdate2(GServerList serverlist, gbool async, char *filter, GQue
|
||||||
serverlist->nextupdate = 0;
|
serverlist->nextupdate = 0;
|
||||||
serverlist->abortupdate = 0;
|
serverlist->abortupdate = 0;
|
||||||
// Added in 2.0
|
// Added in 2.0
|
||||||
|
serverlist->numservers = ServerListCount(serverlist);
|
||||||
|
// Added in 2.0
|
||||||
serverlist->cryptinfo.offset = -1;
|
serverlist->cryptinfo.offset = -1;
|
||||||
if (!async)
|
if (!async)
|
||||||
DoSyncLoop(serverlist);
|
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
|
//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;
|
int i;
|
||||||
GServer server;
|
GServer server;
|
||||||
|
|
||||||
for (i = 0; i < ArrayLength(serverlist->servers) ; i++)
|
for (i = 0; i < count ; i++)
|
||||||
{
|
{
|
||||||
server = *(GServer *)ArrayNth(serverlist->servers,i);
|
server = *(GServer *)ArrayNth(serverlist->servers,i);
|
||||||
if (port == ServerGetQueryPort(server) && ServerGetInetAddress(server)==ip)
|
if (port == ServerGetQueryPort(server) && ServerGetInetAddress(server)==ip)
|
||||||
|
@ -452,6 +462,12 @@ static int ServerListFindServer(GServerList serverlist, unsigned int ip, int por
|
||||||
return -1;
|
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
|
//finds the server in the list of servers currently being queried
|
||||||
// returns -1 if it does not exist
|
// returns -1 if it does not exist
|
||||||
static int ServerListFindServerInUpdateList(GServerList serverlist, GServer server)
|
static int ServerListFindServerInUpdateList(GServerList serverlist, GServer server)
|
||||||
|
@ -766,7 +782,11 @@ static GError ServerListReadList(GServerList serverlist)
|
||||||
p += 4;
|
p += 4;
|
||||||
memcpy(&port, p, 2);
|
memcpy(&port, p, 2);
|
||||||
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue