diff options
author | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-10-17 02:40:16 +0000 |
---|---|---|
committer | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-10-17 02:40:16 +0000 |
commit | 548eacee47a757beb90226f3f8a36ba94619bee6 (patch) | |
tree | 77a5b6b028e1bc68f01f2b5db69938ae10477bbf /src/modules/m_conn_umodes.cpp | |
parent | bf6724c049ba0f156544c49aab2008d6280e5ffa (diff) |
Hold reference to the associated ConfigTag inside ConnectClass
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11880 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_conn_umodes.cpp')
-rw-r--r-- | src/modules/m_conn_umodes.cpp | 61 |
1 files changed, 20 insertions, 41 deletions
diff --git a/src/modules/m_conn_umodes.cpp b/src/modules/m_conn_umodes.cpp index 2ad8ab876..0fcd73fe9 100644 --- a/src/modules/m_conn_umodes.cpp +++ b/src/modules/m_conn_umodes.cpp @@ -17,14 +17,8 @@ class ModuleModesOnConnect : public Module { - private: - - ConfigReader *Conf; - public: ModuleModesOnConnect() { - - Conf = new ConfigReader; Implementation eventlist[] = { I_OnUserConnect, I_OnRehash }; ServerInstance->Modules->Attach(eventlist, this, 2); // for things like +x on connect, important, otherwise we have to resort to config order (bleh) -- w00t @@ -32,15 +26,8 @@ class ModuleModesOnConnect : public Module } - virtual void OnRehash(User* user) - { - delete Conf; - Conf = new ConfigReader; - } - virtual ~ModuleModesOnConnect() { - delete Conf; } virtual Version GetVersion() @@ -59,41 +46,33 @@ class ModuleModesOnConnect : public Module sizeof(ServerInstance->Config->DisabledUModes)); memset(ServerInstance->Config->DisabledUModes, 0, 64); - for (int j = 0; j < Conf->Enumerate("connect"); j++) + ConfigTag* tag = user->MyClass->config; + std::string ThisModes = tag->getString("modes"); + if (!ThisModes.empty()) { - std::string hostn = Conf->ReadValue("connect","allow",j); - /* XXX: Fixme: does not respect port, limit, etc */ - if ((InspIRCd::MatchCIDR(user->GetIPString(),hostn, ascii_case_insensitive_map)) || (InspIRCd::Match(user->host,hostn, ascii_case_insensitive_map))) - { - std::string ThisModes = Conf->ReadValue("connect","modes",j); - if (!ThisModes.empty()) - { - std::string buf; - std::stringstream ss(ThisModes); - - std::vector<std::string> tokens; + std::string buf; + std::stringstream ss(ThisModes); - // split ThisUserModes into modes and mode params - while (ss >> buf) - tokens.push_back(buf); + std::vector<std::string> tokens; - std::vector<std::string> modes; - modes.push_back(user->nick); - modes.push_back(tokens[0]); + // split ThisUserModes into modes and mode params + while (ss >> buf) + tokens.push_back(buf); - if (tokens.size() > 1) - { - // process mode params - for (unsigned int k = 1; k < tokens.size(); k++) - { - modes.push_back(tokens[k]); - } - } + std::vector<std::string> modes; + modes.push_back(user->nick); + modes.push_back(tokens[0]); - ServerInstance->Parser->CallHandler("MODE", modes, user); + if (tokens.size() > 1) + { + // process mode params + for (unsigned int k = 1; k < tokens.size(); k++) + { + modes.push_back(tokens[k]); } - break; } + + ServerInstance->Parser->CallHandler("MODE", modes, user); } memcpy(ServerInstance->Config->DisabledUModes, save, 64); |