From fa894a86b0fabcd92d9551c3b768df33c92c3c7e Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sat, 5 Sep 2015 01:03:58 +0200 Subject: [PATCH] Add CNumericMessage --- include/znc/Message.h | 5 +++++ src/IRCSock.cpp | 3 ++- test/MessageTest.cpp | 9 +++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/znc/Message.h b/include/znc/Message.h index 2270c9a9..5df61dbe 100644 --- a/include/znc/Message.h +++ b/include/znc/Message.h @@ -126,6 +126,11 @@ public: void SetText(const CString& sText) { SetParam(1, sText); } }; +class CNumericMessage : public CMessage { +public: + unsigned int GetCode() const { return GetCommand().ToUInt(); } +}; + class CKickMessage : public CTargetMessage { public: CString GetKickedNick() const { return GetParam(1); } diff --git a/src/IRCSock.cpp b/src/IRCSock.cpp index 17ebd545..548ca7de 100644 --- a/src/IRCSock.cpp +++ b/src/IRCSock.cpp @@ -182,8 +182,9 @@ void CIRCSock::ReadLine(const CString& sData) { } if ((sCmd.length() == 3) && (isdigit(sCmd[0])) && (isdigit(sCmd[1])) && (isdigit(sCmd[2]))) { + CNumericMessage& NumericMsg = static_cast(Message); CString sServer = Message.GetNick().GetHostMask(); - unsigned int uRaw = sCmd.ToUInt(); + unsigned int uRaw = NumericMsg.GetCode(); CString sNick = Message.GetParam(0); CString sRest = Message.GetParams(1); CString sTmp; diff --git a/test/MessageTest.cpp b/test/MessageTest.cpp index 994b760e..ed0c7086 100644 --- a/test/MessageTest.cpp +++ b/test/MessageTest.cpp @@ -189,6 +189,15 @@ TEST(MessageTest, Nick) { EXPECT_EQ(":nick NICK test", msg.ToString()); } +TEST(MessageTest, Numeric) { + CNumericMessage msg; + msg.Parse(":server 123 user :foo bar"); + EXPECT_EQ("server", msg.GetNick().GetNick()); + EXPECT_EQ("123", msg.GetCommand()); + EXPECT_EQ(123u, msg.GetCode()); + EXPECT_EQ(CMessage::Type::Numeric, msg.GetType()); +} + TEST(MessageTest, Part) { CPartMessage msg; msg.Parse(":nick PART #chan :reason");