]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/capab.cpp
Replace irc::stringjoiner with a generic stdalgo::string::join.
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / capab.cpp
index a2e68aa6116135e3829ffc16df9c25da03d04d19..97b4a90af6bcb8eaf5271680f16547c13996b49d 100644 (file)
@@ -45,7 +45,7 @@ std::string TreeSocket::MyModules(int filter)
        for (ModuleManager::ModuleMap::const_iterator i = modlist.begin(); i != modlist.end(); ++i)
        {
                Module* const mod = i->second;
-               // 2.2 advertises its settings for the benefit of services
+               // 3.0 advertises its settings for the benefit of services
                // 2.0 would bork on this
                if (proto_version < 1205 && i->second->ModuleSourceFile == "m_kicknorejoin.so")
                        continue;
@@ -98,7 +98,7 @@ static std::string BuildModeList(ModeType type)
                modes.push_back(mdesc);
        }
        std::sort(modes.begin(), modes.end());
-       return irc::stringjoiner(modes);
+       return stdalgo::string::join(modes);
 }
 
 void TreeSocket::SendCapabilities(int phase)
@@ -182,6 +182,7 @@ void TreeSocket::SendCapabilities(int phase)
                        " PREFIX="+ServerInstance->Modes->BuildPrefixes()+
                        " CHANMODES="+ServerInstance->Modes->GiveModeList(MODETYPE_CHANNEL)+
                        " USERMODES="+ServerInstance->Modes->GiveModeList(MODETYPE_USER)+
+                       " CASEMAPPING="+ServerInstance->Config->CaseMapping+
                        // XXX: Advertise the presence or absence of m_globops in CAPAB CAPABILITIES.
                        // Services want to know about it, and since m_globops was not marked as VF_(OPT)COMMON
                        // in 2.0, we advertise it here to not break linking to previous versions.
@@ -220,7 +221,7 @@ void TreeSocket::ListDifference(const std::string &one, const std::string &two,
        }
 }
 
-bool TreeSocket::Capab(const parameterlist &params)
+bool TreeSocket::Capab(const CommandBase::Params& params)
 {
        if (params.size() < 1)
        {
@@ -343,6 +344,24 @@ bool TreeSocket::Capab(const parameterlist &params)
                        if (this->capab->CapKeys.find("USERMODES")->second != ServerInstance->Modes->GiveModeList(MODETYPE_USER))
                                reason = "One or more of the user modes on the remote server are invalid on this server.";
                }
+               else
+               {
+                       // We default to rfc1459 here because if this key is not sent then
+                       // the remote server is running the 2.0 protocol which uses rfc1459
+                       // by default.
+                       std::string casemapping = "rfc1459";
+                       std::map<std::string, std::string>::iterator citer = this->capab->CapKeys.find("CASEMAPPING");
+                       if (citer != this->capab->CapKeys.end())
+                               casemapping = citer->second;
+
+                       if (casemapping != ServerInstance->Config->CaseMapping)
+                       {
+                               reason = "The casemapping of the remote server differs to that of the local server."
+                                       " Local casemapping: " + ServerInstance->Config->CaseMapping +
+                                       " Remote casemapping: " + casemapping;
+                       }
+
+               }
 
                /* Challenge response, store their challenge for our password */
                std::map<std::string,std::string>::iterator n = this->capab->CapKeys.find("CHALLENGE");