mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-11 19:49:02 -04:00
core_dns Allow usage of id 0
This commit is contained in:
parent
987dee3fde
commit
8950aeda9a
@ -473,32 +473,34 @@ class MyManager : public Manager, public Timer, public EventHandler
|
||||
|
||||
/* Create an id */
|
||||
unsigned int tries = 0;
|
||||
int id;
|
||||
do
|
||||
{
|
||||
req->id = ServerInstance->GenRandomInt(DNS::MAX_REQUEST_ID);
|
||||
id = ServerInstance->GenRandomInt(DNS::MAX_REQUEST_ID);
|
||||
|
||||
if (++tries == DNS::MAX_REQUEST_ID*5)
|
||||
{
|
||||
// If we couldn't find an empty slot this many times, do a sequential scan as a last
|
||||
// resort. If an empty slot is found that way, go on, otherwise throw an exception
|
||||
req->id = 0;
|
||||
for (int i = 1; i < DNS::MAX_REQUEST_ID; i++)
|
||||
id = -1;
|
||||
for (unsigned int i = 0; i < DNS::MAX_REQUEST_ID; i++)
|
||||
{
|
||||
if (!this->requests[i])
|
||||
{
|
||||
req->id = i;
|
||||
id = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (req->id == 0)
|
||||
if (id == -1)
|
||||
throw Exception("DNS: All ids are in use");
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (!req->id || this->requests[req->id]);
|
||||
while (this->requests[id]);
|
||||
|
||||
req->id = id;
|
||||
this->requests[req->id] = req;
|
||||
|
||||
Packet p;
|
||||
|
Loading…
x
Reference in New Issue
Block a user