case 'F':
WriteOpers("Server %s has completed netburst. (%d secs)",udp_host,time(NULL)-nb_start);
handle_F(token,params,source,reply,udp_host);
+ break;
+ case 'X':
WriteOpers("Sending my netburst to %s",udp_host);
DoSync(source,udp_host);
WriteOpers("Send of netburst to %s completed",udp_host);
+
break;
// anything else
default:
// we have a matching link line -
// send a 'diminutive' server message back...
snprintf(response,10240,"s %s %s :%s",ServerName,Link_SendPass,ServerDesc);
- serv->SendPacket(response,udp_host);
- WriteOpers("Internal error connecting to %s, failed to create server record!",servername);
+ serv->SendPacket(response,servername);
return;
}
- else {
- log(DEBUG,"Server names '%s' and '%s' don't match",Link_ServerName,servername);
- }
}
- serv->SendPacket("E :Access is denied (no matching link block)",udp_host);
+ char buffer[MAXBUF];
+ sprintf(buffer,"E :Access is denied (no matching link block)");
+ serv->SendPacket(buffer,udp_host);
WriteOpers("CONNECT from %s denied, no matching link block",servername);
return;
}
LinkPort = atoi(Link_Port);
if (!strcasecmp(Link_ServerName,servername))
{
- if (!strcasecmp(Link_IPAddr,udp_host))
- {
- // matching link at this end too, we're all done!
- // at this point we must begin key exchange and insert this
- // server into our 'active' table.
- for (int j = 0; j < 255; j++) {
- if (servers[j] != NULL) {
- if (!strcasecmp(servers[j]->name,udp_host)) {
- strcpy(servers[j]->description,serverdesc);
- WriteOpers("Server %s authenticated, exchanging server keys...",servername);
- DoSync(serv,udp_host);
- return;
- }
+ // matching link at this end too, we're all done!
+ // at this point we must begin key exchange and insert this
+ // server into our 'active' table.
+ for (int j = 0; j < 255; j++)
+ {
+ if (servers[j] != NULL)
+ {
+ if (!strcasecmp(servers[j]->name,udp_host))
+ {
+ strcpy(servers[j]->description,serverdesc);
+ DoSync(serv,udp_host);
+ char buffer[MAXBUF];
+ sprintf(buffer,"X 0");
+ serv->SendPacket(buffer,udp_host);
+ return;
}
- WriteOpers("\2WARNING!\2 %s sent us an authentication packet but we are not authenticating with this server right noe! Possible intrusion attempt!",udp_host);
- return;
-
}
- }
- else {
- log(DEBUG,"IP Addresses '%s' and '%s' don't match",Link_IPAddr,udp_host);
+ WriteOpers("\2WARNING!\2 %s sent us an authentication packet but we are not authenticating with this server right noe! Possible intrusion attempt!",udp_host);
+ return;
}
}
else {
log(DEBUG,"Server names '%s' and '%s' don't match",Link_ServerName,servername);
}
}
- serv->SendPacket("E :Access is denied (no matching link block)",udp_host);
+ char buffer[MAXBUF];
+ sprintf(buffer,"E :Access is denied (no matching link block)");
+ serv->SendPacket(buffer,udp_host);
WriteOpers("CONNECT from %s denied, no matching link block",servername);
return;
}
serverrec* source_server = NULL;
- for (int j = 0; j < 255; j++) {
- if (servers[j] != NULL) {
- if (!strcasecmp(servers[j]->name,udp_host)) {
- if (servers[j]->haspassed) {
- // found a valid key for this server, can process restricted stuff here
- process_restricted_commands(token,params,servers[j],serv,udp_host);
+ log(DEBUG,"Begin checking");
+
+ for (int j = 0; j < 255; j++)
+ {
+ log(DEBUG,"Loop %d",j);
+ if (servers[j] != NULL)
+ {
+ log(DEBUG,"Server %d not null",j);
+ for (int x = 0; x < servers[j]->connectors.size(); x++)
+ {
+ log(DEBUG,"Servers are: '%s' '%s'",udp_host,servers[j]->connectors[x].GetServerName().c_str());
+ if (!strcasecmp(servers[j]->connectors[x].GetServerName().c_str(),udp_host))
+ {
+ log(DEBUG,"match! process restricted stuff here");
+ // found a valid ircd_connector.
+ // TODO: Fix this so it only lets servers in that are in the
+ // STATE_CONNECTED state!!!
+ process_restricted_commands(token,params,servers[j],serv,udp_host);
return;
}
}
for (int x = 0; x != UDPportCount; x++)
{
- long theirkey = 0;
- if (me[x]->RecvPacket(udp_msg, udp_host))
+ std::deque<std::string> msgs;
+ msgs.clear();
+ if (me[x]->RecvPacket(msgs, udp_host))
{
- if (strlen(udp_msg)<1) {
- log(DEBUG,"Invalid string from %s [route%d]",udp_host,x);
- }
- else
- {
- FOREACH_MOD OnPacketReceive(udp_msg);
- handle_link_packet(udp_msg, udp_host, me[x]);
+ for (int ctr = 0; ctr < msgs.size(); ctr++)
+ {
+ char udp_msg[MAXBUF];
+ strncpy(udp_msg,msgs[ctr].c_str(),MAXBUF);
+ if (strlen(udp_msg)<1)
+ {
+ log(DEBUG,"Invalid string from %s [route%d]",udp_host,x);
+ break;
+ }
+ FOREACH_MOD OnPacketReceive(udp_msg);
+ handle_link_packet(udp_msg, udp_host, me[x]);
+ }
goto label;
}
}
- }
while (count2 != clientlist.end())