#include "xline.h"
#include "bancache.h"
#include "socketengine.h"
-#include "inspircd_se_config.h"
#include "socket.h"
#include "command_parse.h"
#include "exitcodes.h"
* chance to be unhooked by the modules using them, but then get
* a chance to be removed themsleves.
*
- * XXX there may be a better way to do this with 1.2
+ * XXX there may be a better way to do this
*/
for (int tries = 0; tries < 4; tries++)
{
/* Unload all modules, so they get a chance to clean up their listeners */
this->Modules->Unload(k->c_str());
}
+ GlobalCulls.Apply();
}
- /* Cleanup Server Names */
- for(servernamelist::iterator itr = servernames.begin(); itr != servernames.end(); ++itr)
- delete (*itr);
-
/* Delete objects dynamically allocated in constructor (destructor would be more appropriate, but we're likely exiting) */
/* Must be deleted before modes as it decrements modelines */
DeleteZero(this->FakeClient);
}
InspIRCd::InspIRCd(int argc, char** argv) :
- /* Functor initialisation. Note that the ordering here is very important.
- *
- * THIS MUST MATCH ORDER OF DECLARATION OF THE HandleWhateverFunc classes
- * within class InspIRCd.
- */
- HandleIsNick(this),
- HandleIsIdent(this),
- HandleFloodQuitUser(this),
- HandleIsChannel(this),
- HandleIsSID(this),
- HandleRehash(this),
ConfigFileName("inspircd.conf"),
- /* Functor pointer initialisation. Must match the order of the list above
+ /* Functor pointer initialisation.
*
* THIS MUST MATCH THE ORDER OF DECLARATION OF THE FUNCTORS, e.g. the methods
* themselves within the class.
this->TIME = time(NULL);
// This must be created first, so other parts of Insp can use it while starting up
- this->Logs = new LogManager(this);
+ this->Logs = new LogManager;
- SocketEngineFactory SEF;
- SE = SEF.Create();
+ SE = CreateSocketEngine();
- this->Threads = new ThreadEngine(this);
+ this->Threads = new ThreadEngine;
/* Default implementation does nothing */
- this->PI = new ProtocolInterface(this);
+ this->PI = new ProtocolInterface;
this->s_signal = 0;
// Create base manager classes early, so nothing breaks
- this->Users = new UserManager(this);
+ this->Users = new UserManager;
this->Users->unregistered_count = 0;
this->Users->uuidlist = new user_hash();
this->chanlist = new chan_hash();
- this->Config = new ServerConfig(this);
- this->SNO = new SnomaskManager(this);
- this->BanCache = new BanCacheManager(this);
+ this->Config = new ServerConfig;
+ this->SNO = new SnomaskManager;
+ this->BanCache = new BanCacheManager;
this->Modules = new ModuleManager();
this->stats = new serverstats();
- this->Timers = new TimerManager(this);
- this->Parser = new CommandParser(this);
- this->XLines = new XLineManager(this);
+ this->Timers = new TimerManager;
+ this->Parser = new CommandParser;
+ this->XLines = new XLineManager;
this->Config->argv = argv;
this->Config->argc = argc;
// Handle forking
if(!do_nofork)
{
- DWORD ExitCode = WindowsForkStart(this);
+ DWORD ExitCode = WindowsForkStart();
if(ExitCode)
exit(ExitCode);
}
// Set up winsock
WSADATA wsadata;
WSAStartup(MAKEWORD(2,0), &wsadata);
- ChangeWindowsSpecificPointers(this);
+ ChangeWindowsSpecificPointers();
#endif
Config->MyExecutable = argv[0];
printf_c("\t\033[1;32mpeavey, aquanight, psychon, dz, danieldg\033[0m\n\n");
printf_c("Others:\t\t\t\033[1;32mSee /INFO Output\033[0m\n");
- this->Modes = new ModeParser(this);
+ this->Modes = new ModeParser;
if (!do_root)
this->CheckRoot();
this->Config->Apply(NULL, "");
Logs->OpenFileLogs();
- this->Res = new DNS(this);
-
- this->AddServerName(Config->ServerName);
+ this->Res = new DNS;
/*
* Initialise SID/UID.
* For an explanation as to exactly how this works, and why it works this way, see GetUID().
* -- w00t
*/
- if (!*Config->sid)
+ if (Config->sid.empty())
{
// Generate one
size_t sid = 0;
- for (const char* x = Config->ServerName; *x; ++x)
+ for (const char* x = Config->ServerName.c_str(); *x; ++x)
sid = 5 * sid + *x;
- for (const char* y = Config->ServerDesc; *y; ++y)
+ for (const char* y = Config->ServerDesc.c_str(); *y; ++y)
sid = 5 * sid + *y;
sid = sid % 999;
- Config->sid[0] = (char)(sid / 100 + 48);
- Config->sid[1] = (char)(((sid / 10) % 10) + 48);
- Config->sid[2] = (char)(sid % 10 + 48);
- Config->sid[3] = '\0';
+ Config->sid = ConvToStr(sid);
}
/* set up fake client again this time with the correct uid */
- this->FakeClient = new FakeUser(this, "!");
+ this->FakeClient = new FakeUser("!");
this->FakeClient->SetFakeServer(Config->ServerName);
// Get XLine to do it's thing.
}
}
- printf("\nInspIRCd is now running as '%s'[%s] with %d max open sockets\n", Config->ServerName,Config->GetSID().c_str(), SE->GetMaxFds());
+ printf("\nInspIRCd is now running as '%s'[%s] with %d max open sockets\n",
+ Config->ServerName.c_str(),Config->GetSID().c_str(), SE->GetMaxFds());
#ifndef WINDOWS
if (!Config->nofork)
}
}
#else
- WindowsIPC = new IPC(this);
+ WindowsIPC = new IPC;
if(!Config->nofork)
{
- WindowsForkKillOwner(this);
+ WindowsForkKillOwner();
FreeConsole();
}
/* Set win32 service as running, if we are running as a service */
SetServiceRunning();
#endif
- Logs->Log("STARTUP", DEFAULT, "Startup complete as '%s'[%s], %d max open sockets", Config->ServerName,Config->GetSID().c_str(), SE->GetMaxFds());
+ Logs->Log("STARTUP", DEFAULT, "Startup complete as '%s'[%s], %d max open sockets", Config->ServerName.c_str(),Config->GetSID().c_str(), SE->GetMaxFds());
#ifndef WIN32
- if (*(this->Config->SetGroup))
+ if (!Config->SetGroup.empty())
{
int ret;
struct group *g;
errno = 0;
- g = getgrnam(this->Config->SetGroup);
+ g = getgrnam(this->Config->SetGroup.c_str());
if (!g)
{
}
}
- if (*(this->Config->SetUser))
+ if (!Config->SetUser.empty())
{
// setuid
struct passwd *u;
errno = 0;
- u = getpwnam(this->Config->SetUser);
+ u = getpwnam(this->Config->SetUser.c_str());
if (!u)
{
/* See if we're supposed to be running the test suite rather than entering the mainloop */
if (Config->TestSuite)
{
- TestSuite* ts = new TestSuite(this);
+ TestSuite* ts = new TestSuite;
delete ts;
Exit(0);
}
if ((TIME % 3600) == 0)
{
this->RehashUsersAndChans();
- FOREACH_MOD_I(this, I_OnGarbageCollect, OnGarbageCollect());
+ FOREACH_MOD(I_OnGarbageCollect, OnGarbageCollect());
}
Timers->TickTimers(TIME);
if ((TIME % 5) == 0)
{
- FOREACH_MOD_I(this,I_OnBackgroundTimer,OnBackgroundTimer(TIME));
+ FOREACH_MOD(I_OnBackgroundTimer,OnBackgroundTimer(TIME));
SNO->FlushSnotices();
}
#ifndef WIN32
bool InspIRCd::AllModulesReportReady(User* user)
{
ModResult res;
- FIRST_MOD_RESULT(this, OnCheckReady, res, (user));
+ FIRST_MOD_RESULT(OnCheckReady, res, (user));
return (res == MOD_RES_PASSTHRU);
}