modules/sasl, modules/route_replies: interpret messages as intended even if they have prefix tags

This commit is contained in:
Daniel Barnes
2015-12-21 11:52:22 -07:00
parent e210ade2ef
commit d4c299049e
2 changed files with 21 additions and 16 deletions
+7 -7
View File
@@ -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
+14 -9
View File
@@ -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;
}