return MOD_RES_PASSTHRU;
}
+void ModuleSpanningTree::OnRequest(Request& request)
+{
+ if (!strcmp(request.id, "rehash"))
+ Utils->Rehash();
+}
+
void ModuleSpanningTree::ProtoSendMode(void* opaque, TargetTypeFlags target_type, void* target, const parameterlist &modeline, const std::vector<TranslateType> &translate)
{
TreeSocket* s = (TreeSocket*)opaque;
void OnLoadModule(Module* mod);
void OnUnloadModule(Module* mod);
ModResult OnAcceptConnection(int newsock, ListenSocket* from, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server);
+ void OnRequest(Request& request);
CullResult cull();
~ModuleSpanningTree();
Version GetVersion();
}
return NULL;
}
+
+void SpanningTreeUtilities::Rehash()
+{
+ server_hash temp;
+ for (server_hash::const_iterator i = serverlist.begin(); i != serverlist.end(); ++i)
+ temp.insert(std::make_pair(i->first, i->second));
+ serverlist.swap(temp);
+ temp.clear();
+
+ for (server_hash::const_iterator i = sidlist.begin(); i != sidlist.end(); ++i)
+ temp.insert(std::make_pair(i->first, i->second));
+ sidlist.swap(temp);
+}
/** Refresh the IP cache used for allowing inbound connections
*/
void RefreshIPCache();
+
+ /** Recreate serverlist and sidlist, this is needed because of m_nationalchars changing
+ * national_case_insensitive_map which is used by the hash function
+ */
+ void Rehash();
};
#endif