From d4c299049ee9d7c3c263d478cae9cb91c1639bdf Mon Sep 17 00:00:00 2001 From: Daniel Barnes Date: Mon, 21 Dec 2015 11:52:22 -0700 Subject: [PATCH] modules/sasl, modules/route_replies: interpret messages as intended even if they have prefix tags --- modules/route_replies.cpp | 14 +++++++------- modules/sasl.cpp | 23 ++++++++++++++--------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/modules/route_replies.cpp b/modules/route_replies.cpp index 3482297f..d1b0febc 100644 --- a/modules/route_replies.cpp +++ b/modules/route_replies.cpp @@ -258,8 +258,8 @@ class CRouteRepliesMod : public CModule { SendRequest(); } - EModRet OnRaw(CString& sLine) override { - CString sCmd = sLine.Token(1).AsUpper(); + EModRet OnRawMessage(CMessage& msg) override { + CString sCmd = msg.GetCommand().AsUpper(); size_t i = 0; if (!m_pReplies) return CONTINUE; @@ -267,18 +267,18 @@ class CRouteRepliesMod : public CModule { // Is this a "not enough arguments" error? if (sCmd == "461") { // :server 461 nick WHO :Not enough parameters - CString sOrigCmd = sLine.Token(3); + CString sOrigCmd = msg.GetParam(1); if (m_sLastRequest.Token(0).Equals(sOrigCmd)) { // This is the reply to the last request - if (RouteReply(sLine, true)) return HALTCORE; + if (RouteReply(msg, true)) return HALTCORE; return CONTINUE; } } while (m_pReplies[i].szReply != nullptr) { if (m_pReplies[i].szReply == sCmd) { - if (RouteReply(sLine, m_pReplies[i].bLastResponse)) + if (RouteReply(msg, m_pReplies[i].bLastResponse)) return HALTCORE; return CONTINUE; } @@ -370,11 +370,11 @@ class CRouteRepliesMod : public CModule { } private: - bool RouteReply(const CString& sLine, bool bFinished = false) { + bool RouteReply(const CMessage& msg, bool bFinished = false) { if (!m_pDoing) return false; // TODO: RouteReply(const CMessage& Message, bool bFinished = false) - m_pDoing->PutClient(CMessage(sLine)); + m_pDoing->PutClient(msg); if (bFinished) { // Stop the timeout diff --git a/modules/sasl.cpp b/modules/sasl.cpp index a714c134..07821978 100644 --- a/modules/sasl.cpp +++ b/modules/sasl.cpp @@ -212,17 +212,23 @@ class CSASLMod : public CModule { } } - EModRet OnRaw(CString& sLine) override { - if (sLine.Token(0).Equals("AUTHENTICATE")) { - Authenticate(sLine.Token(1, true)); - } else if (sLine.Token(1).Equals("903")) { + EModRet OnRawMessage(CMessage& msg) override { + if (msg.GetCommand().Equals("AUTHENTICATE")) { + Authenticate(msg.GetParam(0)); + return HALT; + } + return CONTINUE; + } + + EModRet OnNumericMessage(CNumericMessage& msg) override { + if (msg.GetCode() == 903) { /* SASL success! */ GetNetwork()->GetIRCSock()->ResumeCap(); m_bAuthenticated = true; DEBUG("sasl: Authenticated with mechanism [" << m_Mechanisms.GetCurrent() << "]"); - } else if (sLine.Token(1).Equals("904") || - sLine.Token(1).Equals("905")) { + } else if (msg.GetCode() == 904 || + msg.GetCode() == 905) { DEBUG("sasl: Mechanism [" << m_Mechanisms.GetCurrent() << "] failed."); PutModule(m_Mechanisms.GetCurrent() + " mechanism failed."); @@ -234,18 +240,17 @@ class CSASLMod : public CModule { CheckRequireAuth(); GetNetwork()->GetIRCSock()->ResumeCap(); } - } else if (sLine.Token(1).Equals("906")) { + } else if (msg.GetCode() == 906) { /* CAP wasn't paused? */ DEBUG("sasl: Reached 906."); CheckRequireAuth(); - } else if (sLine.Token(1).Equals("907")) { + } else if (msg.GetCode() == 907) { m_bAuthenticated = true; GetNetwork()->GetIRCSock()->ResumeCap(); DEBUG("sasl: Received 907 -- We are already registered"); } else { return CONTINUE; } - return HALT; }