summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/helperfuncs.cpp4
-rw-r--r--src/inspircd.cpp20
-rw-r--r--src/server.cpp31
3 files changed, 30 insertions, 25 deletions
diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp
index 3ff94e4f6..ce962fea6 100644
--- a/src/helperfuncs.cpp
+++ b/src/helperfuncs.cpp
@@ -182,7 +182,7 @@ bool InspIRCd::IsValidMask(const std::string &mask)
}
/* true for valid channel name, false else */
-bool InspIRCd::IsChannel(const char *chname)
+bool IsChannelHandler::Call(const char *chname)
{
char *c;
@@ -268,7 +268,7 @@ bool IsIdentHandler::Call(const char* n)
return true;
}
-bool InspIRCd::IsSID(const std::string &str)
+bool IsSIDHandler::Call(const std::string &str)
{
/* Returns true if the string given is exactly 3 characters long,
* starts with a digit, and the other two characters are A-Z or digits
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 5f50e900c..228b9a089 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -277,15 +277,29 @@ void InspIRCd::WritePID(const std::string &filename)
InspIRCd::InspIRCd(int argc, char** argv)
: GlobalCulls(this),
- /* Functor initialisation. Note that the ordering here is very important. */
+ /* Functor initialisation. Note that the ordering here is very important.
+ *
+ * THIS MUST MATCH ORDER OF DECLARATION OF THE HandleWhateverFunc classes
+ * within class InspIRCd.
+ */
HandleProcessUser(this),
HandleIsNick(this),
HandleIsIdent(this),
HandleFindDescriptor(this),
HandleFloodQuitUser(this),
-
- /* Functor pointer initialisation. Must match the order of the list above */
+ HandleIsChannel(this),
+ HandleIsSID(this),
+ HandleRehash(this),
+
+ /* Functor pointer initialisation. Must match the order of the list above
+ *
+ * THIS MUST MATCH THE ORDER OF DECLARATION OF THE FUNCTORS, e.g. the methods
+ * themselves within the class.
+ */
ProcessUser(&HandleProcessUser),
+ IsChannel(&HandleIsChannel),
+ IsSID(&HandleIsSID),
+ Rehash(&HandleRehash),
IsNick(&HandleIsNick),
IsIdent(&HandleIsIdent),
FindDescriptor(&HandleFindDescriptor),
diff --git a/src/server.cpp b/src/server.cpp
index a24a1092f..c713a028f 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -23,7 +23,7 @@ void InspIRCd::SignalHandler(int signal)
switch (signal)
{
case SIGHUP:
- Rehash();
+ Rehash("due to SIGHUP");
break;
case SIGTERM:
Exit(signal);
@@ -44,33 +44,24 @@ void InspIRCd::Exit(int status)
exit (status);
}
-void InspIRCd::Rehash()
+void RehashHandler::Call(const std::string &reason)
{
- this->SNO->WriteToSnoMask('A', "Rehashing config file %s due to SIGHUP",ServerConfig::CleanFilename(this->ConfigFileName));
- this->RehashUsersAndChans();
- FOREACH_MOD_I(this, I_OnGarbageCollect, OnGarbageCollect());
- if (!this->ConfigThread)
+ Server->SNO->WriteToSnoMask('A', "Rehashing config file %s %s",ServerConfig::CleanFilename(Server->ConfigFileName), reason.c_str());
+ Server->RehashUsersAndChans();
+ FOREACH_MOD_I(Server, I_OnGarbageCollect, OnGarbageCollect());
+ if (!Server->ConfigThread)
{
- Config->RehashUser = NULL;
- Config->RehashParameter = "";
+ Server->Config->RehashUser = NULL;
+ Server->Config->RehashParameter = "";
- ConfigThread = new ConfigReaderThread(this, false, NULL);
- Threads->Create(ConfigThread);
+ Server->ConfigThread = new ConfigReaderThread(Server, false, NULL);
+ Server->Threads->Create(Server->ConfigThread);
}
}
void InspIRCd::RehashServer()
{
- this->SNO->WriteToSnoMask('A', "Rehashing config file");
- this->RehashUsersAndChans();
- if (!this->ConfigThread)
- {
- Config->RehashUser = NULL;
- Config->RehashParameter = "";
-
- ConfigThread = new ConfigReaderThread(this, false, NULL);
- Threads->Create(ConfigThread);
- }
+ this->Rehash("");
}
std::string InspIRCd::GetVersionString()