int statsAccept = 0, statsRefused = 0, statsUnknown = 0, statsCollisions = 0, statsDns = 0, statsDnsGood = 0, statsDnsBad = 0, statsConnects = 0, statsSent= 0, statsRecv = 0;
-serverrec* me[32];
+
FILE *log_file;
char MyExecutable[1024];
int boundPortCount = 0;
int portCount = 0, SERVERportCount = 0, ports[MAXSOCKS];
-int defaultRoute = 0;
+
char ModPath[MAXBUF];
/* prototypes */
bool IsDenied(userrec *user);
void AddWhoWas(userrec* u);
-std::vector<long> auth_cookies;
std::stringstream config_f(stringstream::in | stringstream::out);
std::vector<userrec*> all_opers;
void handle_version(char **parameters, int pcnt, userrec *user)
{
- if (!pcnt)
- {
- WriteServ(user->fd,"351 %s :%s",user->nick,GetVersionString().c_str());
- }
- else
- {
- if (!strcmp(parameters[0],"*"))
- {
- for (int j = 0; j < 32; j++)
- {
- if (me[j] != NULL)
- {
- for (unsigned int x = 0; x < me[j]->connectors.size(); x++)
- {
- WriteServ(user->fd,"351 %s :Server %d:%d (%s): %s",user->nick,j,x,me[j]->connectors[x].GetServerName().c_str(),me[j]->connectors[x].GetVersionString().c_str());
- }
- }
- }
- return;
- }
- if (match(ServerName,parameters[0]))
- {
- WriteServ(user->fd,"351 %s :%s",user->nick,GetVersionString().c_str());
- return;
- }
- bool displayed = false, found = false;
- for (int j = 0; j < 32; j++)
- {
- if (me[j] != NULL)
- {
- for (unsigned int x = 0; x < me[j]->connectors.size(); x++)
- {
- if (match(me[j]->connectors[x].GetServerName().c_str(),parameters[0]))
- {
- found = true;
- if ((me[j]->connectors[x].GetVersionString() != "") && (!displayed))
- {
- displayed = true;
- WriteServ(user->fd,"351 %s :%s",user->nick,me[j]->connectors[x].GetVersionString().c_str());
- }
- }
- }
- }
- }
- if ((!displayed) && (found))
- {
- WriteServ(user->fd,"402 %s %s :Server %s has no version information",user->nick,parameters[0],parameters[0]);
- return;
- }
- if (!found)
- {
- WriteServ(user->fd,"402 %s %s :No such server",user->nick,parameters[0]);
- }
- }
- return;
+ WriteServ(user->fd,"351 %s :%s",user->nick,GetVersionString().c_str());
}
}
-bool GotServer(std::string name)
-{
- for (int j = 0; j < 32; j++)
- {
- if (me[j] != NULL)
- {
- for (unsigned int k = 0; k < me[j]->connectors.size(); k++)
- {
- if (name == me[j]->connectors[k].GetServerName())
- {
- return true;
- }
- }
- }
- }
- return false;
-}
-
-
int InspIRCd(char** argv, int argc)
{
struct sockaddr_in client,server;
dns_poll();
+ unsigned int numsockets = module_sockets.size();
for (std::vector<InspSocket*>::iterator a = module_sockets.begin(); a < module_sockets.end(); a++)
{
InspSocket* s = (InspSocket*)*a;
- if (!s->Poll())
+ if ((s) && (!s->Poll()))
{
- delete s;
+ log(DEBUG,"Socket poll returned false, close and bail");
+ s->Close();
module_sockets.erase(a);
+ delete s;
break;
}
+ // we gained a socket, sarper
+ if (module_sockets.size() != numsockets) break;
}
// *FIX* Instead of closing sockets in kill_link when they receive the ERROR :blah line, we should queue