#include <dlfcn.h>
#include <getopt.h>
+
using irc::sockets::NonBlocking;
using irc::sockets::Blocking;
using irc::sockets::insp_ntoa;
void InspIRCd::AddServerName(const std::string &servername)
{
- this->Log(DEBUG,"Adding server name: %s",servername.c_str());
-
if(find(servernames.begin(), servernames.end(), servername) == servernames.end())
servernames.push_back(servername); /* Wasn't already there. */
}
int MyModCount = this->GetModuleCount();
for (unsigned int i = 0; i < stats->BoundPortCount; i++)
+ {
/* This calls the constructor and closes the listening socket */
delete Config->openSockfd[i];
+ Config->openSockfd[i] = NULL;
+ }
+ stats->BoundPortCount = 0;
/* We do this more than once, so that any service providers get a
* chance to be unhooked by the modules using them, but then get
{
SI->WriteOpers("Rehashing config file %s due to SIGHUP",ServerConfig::CleanFilename(CONFIG_FILE));
SI->CloseLog();
- SI->OpenLog(this->Config->argv, this->Config->argc);
+ SI->OpenLog(SI->Config->argv, SI->Config->argc);
SI->RehashUsersAndChans();
FOREACH_MOD_I(SI, I_OnGarbageCollect, OnGarbageCollect());
SI->Config->Read(false,NULL);
- FOREACH_MOD_I(SI,I_OnRehash,OnRehash(""));
+ SI->ResetMaxBans();
+ SI->Res->Rehash();
+ FOREACH_MOD_I(SI,I_OnRehash,OnRehash(NULL,""));
}
+void InspIRCd::ResetMaxBans()
+{
+ for (chan_hash::const_iterator i = chanlist->begin(); i != chanlist->end(); i++)
+ i->second->ResetMaxBans();
+}
+
+
/** Because hash_map doesnt free its buckets when we delete items (this is a 'feature')
* we must occasionally rehash the hash (yes really).
* We do this by copying the entries from the old hash to a new hash, causing all
modules.resize(255);
factory.resize(255);
+ this->unregistered_count = 0;
+
this->clientlist = new user_hash();
this->chanlist = new chan_hash();
this->time_delta = 0;
this->next_call = this->TIME + 3;
srand(this->TIME);
- this->Log(DEBUG,"*** InspIRCd starting up!");
+
if (!ServerConfig::FileExists(CONFIG_FILE))
{
printf("ERROR: Cannot open config file: %s\nExiting...\n",CONFIG_FILE);
this->OpenLog(argv, argc);
this->stats = new serverstats();
- this->Parser = new CommandParser(this);
this->Timers = new TimerManager();
+ this->Parser = new CommandParser(this);
this->XLines = new XLineManager(this);
Config->ClearStack();
Config->Read(true, NULL);
/* Add the listening sockets used for client inbound connections
* to the socket engine
*/
- this->Log(DEBUG,"%d listeners",stats->BoundPortCount);
for (unsigned long count = 0; count < stats->BoundPortCount; count++)
{
- this->Log(DEBUG,"Add listener: %d",Config->openSockfd[count]->GetFd());
if (!SE->AddFd(Config->openSockfd[count]))
{
printf("\nEH? Could not add listener to socketengine. You screwed up, aborting.\n");
}
else
{
- snprintf(versiondata,MAXBUF,"%s %s :%s [FLAGS=%lu,%s,%s]",VERSION,Config->ServerName,SYSTEM,(unsigned long)OPTIMISATION,SE->GetName().c_str(),dnsengine);
+ snprintf(versiondata,MAXBUF,"%s %s :%s [FLAGS=%s,%s,%s]",VERSION,Config->ServerName,SYSTEM,REVISION,SE->GetName().c_str(),dnsengine);
}
return versiondata;
}
Config->implement_lists[slot][n] = x;
}
}
- else
- {
- this->Log(DEBUG,"Move of %s to slot failed!",modulename.c_str());
- }
}
void InspIRCd::MoveAfter(std::string modulename, std::string after)
snprintf(MODERR,MAXBUF,"Module %s is not within the modules directory.",modfile);
return false;
}
- this->Log(DEBUG,"Loading module: %s",modfile);
-
if (ServerConfig::FileExists(modfile))
{
WriteOpers("*** \002EH?!\002 -- Time is flowing BACKWARDS in this dimension! Clock drifted backwards %d secs.",abs(OLDTIME-TIME));
if ((TIME % 3600) == 0)
{
- irc::whowas::MaintainWhoWas(this, TIME);
this->RehashUsersAndChans();
FOREACH_MOD_I(this, I_OnGarbageCollect, OnGarbageCollect());
}