Fix support for /msg @#chan :hi

005 STATUSMSG defines list of characters prependable to channel name,
but we used simple modes instead.

See
https://tools.ietf.org/html/draft-brocklesby-irc-isupport-03#section-3.16

Fix #272

Thanks to grawity for the link to 005 docs draft, and to carrot for
testing the patch.
This commit is contained in:
Alexey Sokolov
2013-08-29 22:31:25 +04:00
parent 7454331ea3
commit d5e03cb736
3 changed files with 12 additions and 1 deletions
+1
View File
@@ -102,6 +102,7 @@ public:
bool IsAuthed() const { return m_bAuthed; }
bool IsCapAccepted(const CString& sCap) { return 1 == m_ssAcceptedCaps.count(sCap); }
const MCString& GetISupport() const { return m_mISupport; }
CString GetISupport(const CString& sKey, const CString& sDefault = "") const;
// !Getters
// This handles NAMESX and UHNAMES in a raw 353 reply
+2 -1
View File
@@ -624,7 +624,8 @@ const vector<CChan*>& CIRCNetwork::GetChans() const { return m_vChans; }
CChan* CIRCNetwork::FindChan(CString sName) const {
if (GetIRCSock()) {
sName.TrimLeft(GetIRCSock()->GetPerms());
// See https://tools.ietf.org/html/draft-brocklesby-irc-isupport-03#section-3.16
sName.TrimLeft(GetIRCSock()->GetISupport("STATUSMSG", ""));
}
for (unsigned int a = 0; a < m_vChans.size(); a++) {
+9
View File
@@ -1211,6 +1211,15 @@ void CIRCSock::ParseISupport(const CString& sLine) {
}
}
CString CIRCSock::GetISupport(const CString& sKey, const CString& sDefault) const {
MCString::const_iterator i = m_mISupport.find(sKey.AsUpper());
if (i == m_mISupport.end()) {
return sDefault;
} else {
return i->second;
}
}
void CIRCSock::ForwardRaw353(const CString& sLine) const {
vector<CClient*>& vClients = m_pNetwork->GetClients();
vector<CClient*>::iterator it;