Loading codec/c++/sip_codets.cpp +49 −0 Original line number Diff line number Diff line Loading @@ -291,4 +291,53 @@ void GenericParam::PreDecodeField (int id, Buffer& buffer) throw (DecodeError) } } class SipHeaderMap { public: static int Find (const std::string& header) { std::map <std::string, int>::const_iterator it = mInstance.mMap.find (header); if (it != mInstance.mMap.end()) { return it->second; } else { return MessageHeader::id_undefinedHeader_List; } } private: SipHeaderMap() { mMap["From"] = MessageHeader::id_fromField; mMap["f"] = MessageHeader::id_fromField; mMap["Via"] = MessageHeader::id_via; mMap["v"] = MessageHeader::id_via; } static SipHeaderMap mInstance; std::map <std::string, int> mMap; }; SipHeaderMap SipHeaderMap::mInstance; void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError) { static Regex reg_header_name ("([A-Za-z\\-]+):", REG_ICASE); if (reg_header_name.Match (buffer)) { int id = SipHeaderMap::Find(reg_header_name.GetMatchedString (1)); SetHypNextField (id); } } }} // namespaces codec/validation/Simple_Testcases.ttcn +24 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ module Simple_Testcases headers := omit } // testing SipUrl testcase TC_SIMPLE_0001() runs on SipTest system SipTest { // Preamble Loading @@ -37,4 +38,26 @@ module Simple_Testcases } } // testing MessageHeader testcase TC_SIMPLE_0002() runs on SipTest system SipTest { // Preamble connect (self:testPort, self:testPort); // Test Body testPort.send ("From: sip:bl@blah.ah Via: SIP/2.0/UDP grabu.com Via: SIP/2.0/UDP pouic-pouic.com Pouet: blah blah Via: SIP/2.0/UDP tutu.com "); alt { [] testPort.receive (MessageHeader: ?) { setverdict (inconc); } } } } codec/validation/TestExecution.ttcn +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ module TestExecution { control { execute(TC_SIMPLE_0001()); execute(TC_SIMPLE_0002()); execute(TC_SANITY_0001()); execute(TC_SANITY_0002()); Loading Loading
codec/c++/sip_codets.cpp +49 −0 Original line number Diff line number Diff line Loading @@ -291,4 +291,53 @@ void GenericParam::PreDecodeField (int id, Buffer& buffer) throw (DecodeError) } } class SipHeaderMap { public: static int Find (const std::string& header) { std::map <std::string, int>::const_iterator it = mInstance.mMap.find (header); if (it != mInstance.mMap.end()) { return it->second; } else { return MessageHeader::id_undefinedHeader_List; } } private: SipHeaderMap() { mMap["From"] = MessageHeader::id_fromField; mMap["f"] = MessageHeader::id_fromField; mMap["Via"] = MessageHeader::id_via; mMap["v"] = MessageHeader::id_via; } static SipHeaderMap mInstance; std::map <std::string, int> mMap; }; SipHeaderMap SipHeaderMap::mInstance; void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError) { static Regex reg_header_name ("([A-Za-z\\-]+):", REG_ICASE); if (reg_header_name.Match (buffer)) { int id = SipHeaderMap::Find(reg_header_name.GetMatchedString (1)); SetHypNextField (id); } } }} // namespaces
codec/validation/Simple_Testcases.ttcn +24 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ module Simple_Testcases headers := omit } // testing SipUrl testcase TC_SIMPLE_0001() runs on SipTest system SipTest { // Preamble Loading @@ -37,4 +38,26 @@ module Simple_Testcases } } // testing MessageHeader testcase TC_SIMPLE_0002() runs on SipTest system SipTest { // Preamble connect (self:testPort, self:testPort); // Test Body testPort.send ("From: sip:bl@blah.ah Via: SIP/2.0/UDP grabu.com Via: SIP/2.0/UDP pouic-pouic.com Pouet: blah blah Via: SIP/2.0/UDP tutu.com "); alt { [] testPort.receive (MessageHeader: ?) { setverdict (inconc); } } } }
codec/validation/TestExecution.ttcn +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ module TestExecution { control { execute(TC_SIMPLE_0001()); execute(TC_SIMPLE_0002()); execute(TC_SANITY_0001()); execute(TC_SANITY_0002()); Loading