📄 testparsercategories.cxx
字号:
#include <assert.h>#include <iostream>#include <sstream>#include <string.h>#include <string>#include "resip/stack/HeaderFieldValue.hxx"#include "resip/stack/HeaderTypes.hxx"#include "resip/stack/Headers.hxx"#include "resip/stack/ParserCategories.hxx"#include "resip/stack/ExtensionHeader.hxx"#include "resip/stack/UnknownParameterType.hxx"#include "resip/stack/ApiCheckList.hxx"#include "resip/stack/Uri.hxx"#include "rutil/DataStream.hxx"#include "rutil/ParseBuffer.hxx"#include "rutil/Logger.hxx"using namespace std;using namespace resip;#define RESIPROCATE_SUBSYSTEM Subsystem::TEST#define RESIP_COOKIE "-d8754z-"class TR{ private: ostream& os; Data label; TR(const TR&); void show(const char * s) { os << s << ' ' << label << endl; } void start() { show("-->"); } void end() { show("<--"); } public: TR(Data s,ostream& o = cerr ):os(o),label(s) { start(); } TR(const char* l,ostream& o = cerr):os(o),label(l) { start(); } ~TR() { end();}};intmain(int arc, char** argv){ Log::initialize(Log::Cout, Log::Debug, argv[0]); { TR _tr("Test poorly formed NameAddr by construction"); try { NameAddr test("<jason_AT_example.com@10.0.0.1;transport=TCP>"); assert(false); } catch (ParseException& e) { cerr << e << endl; } } { TR _tr("Test copy transport param"); NameAddr test("<sip:jason_AT_example.com@10.0.0.1:5060;transport=TCP>"); cerr << test << endl; NameAddr copy = test; cerr << copy << endl; assert(test.uri().exists(p_transport)); assert(copy.uri().exists(p_transport)); assert(test.uri().param(p_transport) == copy.uri().param(p_transport)); } { TR _tr("Test iterator erase in ParserContainer"); NameAddrs nameAddrs; nameAddrs.push_back(NameAddr(Uri("sip:first@first.com"))); nameAddrs.push_back(NameAddr(Uri("sip:second@second.com"))); nameAddrs.push_back(NameAddr(Uri("sip:third@third.com"))); nameAddrs.push_back(NameAddr(Uri("sip:fourth@fourth.com"))); assert(nameAddrs.size() == 4); NameAddrs::iterator i = nameAddrs.begin(); ++i; nameAddrs.erase(i); assert(nameAddrs.size() == 3); nameAddrs.erase(nameAddrs.begin()); assert(nameAddrs.size() == 2); assert(nameAddrs.begin()->uri().user() == "third"); } { TR _tr("Test find in ParserContainer"); Tokens tokens; tokens.push_back(Token("Foo")); tokens.push_back(Token("Bar")); tokens.push_back(Token("Baz")); tokens.push_back(Token("Quux")); assert(tokens.find(Token("Foo"))); assert(tokens.find(Token("Bar"))); assert(tokens.find(Token("Baz"))); assert(tokens.find(Token("Quux"))); assert(!tokens.find(Token("Zab"))); } { TR _tr("Test remove parameters that appear multiple times"); Uri uri1("sip:a@b;xtype=1;maddr=local;xtype=2;maddr=remote;xtype=3;maddr=other"); Uri uri2(uri1); uri1.remove(p_maddr); Data res1; { DataStream str(res1); str << uri1; } assert(res1 == "sip:a@b;xtype=1;xtype=2;xtype=3"); UnknownParameterType p_xtype("xtype"); uri2.remove(p_xtype); Data res2; { DataStream str(res2); str << uri2; } assert(res2 == "sip:a@b;maddr=local;maddr=remote;maddr=other"); } { { TR _tr("Test remove parameters that appear multiple times"); Uri uri1("sips:bob@foo.com;transport=udp"); Uri aor = uri1.getAorAsUri(); Data res; { DataStream str(res); str << aor; } cerr << res << endl; assert(res == "sips:bob@foo.com"); } } { TR _tr("Test remove parameters that appear multiple times; mixed predefined and extensions"); Uri uri1("sip:a@b;xtype=1;maddr=local;foo=bar;ttl=17;xtype=2;maddr=remote;foo=baz;ttl=42;xtype=3;maddr=other;foo=foo;ttl=111"); Uri uri2(uri1); uri1.remove(p_maddr); Data res1; { DataStream str(res1); str << uri1; } assert(res1 == "sip:a@b;ttl=17;ttl=42;ttl=111;xtype=1;foo=bar;xtype=2;foo=baz;xtype=3;foo=foo"); UnknownParameterType p_xtype("xtype"); uri2.remove(p_xtype); Data res2; { DataStream str(res2); str << uri2; } assert(res2 == "sip:a@b;maddr=local;ttl=17;maddr=remote;ttl=42;maddr=other;ttl=111;foo=bar;foo=baz;foo=foo"); } { TR _tr("Test exists unknown parameter"); Uri uri1("sip:a@b;xaudio"); assert(uri1.exists(UnknownParameterType("xaudio"))); assert(uri1.param(UnknownParameterType("xaudio")) == Data::Empty); Uri uri2("sip:a@b;a=b;xaudio"); cerr << uri2.param(UnknownParameterType("a")) << endl; assert(uri2.exists(UnknownParameterType("xaudio"))); assert(uri2.param(UnknownParameterType("xaudio")) == Data::Empty); Uri uri3("sip:a@b;xaudio;a=b"); assert(uri3.exists(UnknownParameterType("xaudio"))); assert(uri3.param(UnknownParameterType("xaudio")) == Data::Empty); } { TR _tr("Test non-quoted tokens displayname in NameAddr (torture test: 2.39)"); Data data("A. Bell <sip:a.g.bell@bell-tel.com>;tag=459843"); NameAddr legal(data); assert(legal.uri().host() == "bell-tel.com"); cerr << "!!" << legal << endl; assert(legal.displayName() == "A. Bell"); } { TR _tr("Test quoted displayname in NameAddr (torture test: 2.39)"); Data data("\"A. Bell\" <sip:a.g.bell@bell-tel.com>;tag=459843"); NameAddr legal(data); assert(legal.uri().host() == "bell-tel.com"); cerr << "!!" << legal.displayName() << endl; assert(legal.displayName() == "A. Bell"); } { TR _tr("Test NameAddr parameter handling"); Data data("sip:foo@bar.com;user=phone"); NameAddr original(data); assert(original.uri().exists(p_user)); cerr << "!!" << original << endl; } { TR _tr("Test tel aor canonicalization"); Data data("tel:+14156268178;pOstd=pP2;isUb=1411"); Uri original(data); cerr << original.getAor() << endl; assert(original.getAor() == "+14156268178"); } { TR _tr("Test aor canonicalization"); Data data("sip:User@kElOwNa.GlOo.NeT:5666"); Data data1("sip:User@KeLoWnA.gLoO.nEt:5666"); Uri original(data); Uri original1(data1); cerr << "!! " << original.getAor() << " " << original1.getAor() << endl; assert(original.getAor() == original1.getAor()); } { TR _tr("Test tel NameAddr"); NameAddr n1("<tel:98267168>"); cerr << n1.uri().user() << endl; }#ifdef USE_IPV6 { TR _tr("Test cleverly malformed V6 addr in Uri"); char* buf="sip:foo@[:x]"; HeaderFieldValue hfv(buf, strlen(buf)); NameAddr nameaddr(&hfv, Headers::UNKNOWN); assert(!nameaddr.isWellFormed()); }#endif { TR _tr("Test empty NameAddr"); NameAddr n1; NameAddr n2; assert (!(n1 < n2)); assert (!(n2 < n1)); assert (n1.uri().getAor() == n2.uri().getAor()); } { TR _tr("Test NameAddr q value"); NameAddr w("<sip:wombat@192.168.2.221:5062;transport=Udp>;expires=63;q=1");#ifndef RESIP_FIXED_POINT assert(w.param(p_q) == 1.0);#endif assert(w.param(p_q) == 1000); w.param(p_q) = 843; assert(w.param(p_q) <= 843);#ifndef RESIP_FIXED_POINT assert(w.param(p_q) == 0.843); w.param(p_q) = 0.843; assert(w.param(p_q) == 843); assert(w.param(p_q) == 0.843); w.param(p_q) = 0.65; assert(w.param(p_q) == 650);#endif w.param(p_q) = 0; assert(w.param(p_q) == 0); } { TR _tr("Test NameAddr comparison"); NameAddr w1("<sip:wombat@192.168.2.221:5062;transport=Udp>;expires=63"); NameAddr w2("<sip:wombat@192.168.2.221:5063;transport=Udp>;expires=66"); assert(w1 < w2); assert (!(w2 < w1)); } { TR _tr("Test parameter with spaces"); Data txt("Digest username=\"Alice\", realm = \"atlanta.com\", nonce=\"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\", reponse=\"YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY\"\r\n"); HeaderFieldValue hfv(txt.data(), txt.size()); Auth auth(&hfv, Headers::Authorization); assert(auth.scheme() == "Digest"); assert(auth.exists(p_realm)); } { TR _tr("Test uri with no user"); Data data("sip:kelowna.gloo.net"); Uri original(data); cerr << original << endl; assert(Data::from(original) == data); } { TR _tr("Test assignment for NameAddr"); NameAddr original(Data("\"Original\"<sip:orig@example.com>;tag=original")); (void)original.exists(p_tag); // force parse NameAddr newna(Data("\"new\"<sip:new@example.com>;tag=new")); (void)newna.exists(p_tag); cout << "original NameAddr: ->" << original << "<-"<< endl; cout << "new NameAddr : ->" << newna << "<-" << endl; original = newna; cout << "original : ->" << original << "<-"<< endl; assert(Data::from(original) == Data::from(newna)); } { TR _tr("Test typeless parameter copy"); Token s = Token("jason"); s.value() = "value"; s.param(p_expires) = 17; s.param(p_lr); s.param(UnknownParameterType("foobie")) = "quux"; Token s1; s1.value() = "other"; s1.param(p_ttl) = 21; s.setParameter(s1.getParameterByEnum(ParameterTypes::ttl)); assert(s.value() == "value"); assert(s.param(p_ttl) == 21); assert(s.param(p_lr)); assert(s.param(UnknownParameterType("foobie")) == "quux"); } { TR a("Test typeless parameter overwrite" ); Token s; s.value() = "value"; s.param(p_expires) = 17; s.param(p_ttl) = 12; s.param(p_lr); s.param(UnknownParameterType("foobie")) = "quux"; Token s1; s1.value() = "other"; s1.param(p_ttl) = 21; s.setParameter(s1.getParameterByEnum(ParameterTypes::ttl)); assert(s.value() == "value"); assert(s.param(p_ttl) == 21); assert(s.param(p_lr)); assert(s.param(UnknownParameterType("foobie")) == "quux"); s.encode(cerr); cerr << endl; } { TR _tr( "Test StringCategory"); Data stringString("Lame Agent"); HeaderFieldValue hfv(stringString.data(), stringString.size()); StringCategory str(&hfv, Headers::UNKNOWN); assert(str.value() == stringString); Data buff; { DataStream s(buff); str.encode(s); } cerr << buff << endl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -