📄 testparsercategories.cxx
字号:
} { TR _tr( "URI parse, parameters, correct termination check"); Data uriString = "sips:bob;param=gargle:password@foo.com notHost"; ParseBuffer pb(uriString.data(), uriString.size()); NameAddr to; to.parse(pb); Uri& uri = to.uri(); assert(uri.scheme() == "sips"); assert(uri.user() == "bob;param=gargle"); assert(uri.password() == "password"); cerr << "Uri:" << uri.host() << endl; assert(uri.host() == "foo.com"); } { TR _tr( "URI parse, transport parameter"); Data uriString = "sip:bob@biloxi.com;transport=udp"; ParseBuffer pb(uriString.data(), uriString.size()); NameAddr to; to.parse(pb); Uri& uri = to.uri(); assert(uri.param(p_transport) == "udp"); } cerr << "URI comparison tests" << endl; { Data uriStringA("sip:carol@chicago.com"); Data uriStringB("sip:carol@chicago.com;newparam=5"); Data uriStringC("sip:carol@chicago.com;security=on"); ParseBuffer pa(uriStringA.data(), uriStringA.size()); ParseBuffer pb(uriStringB.data(), uriStringB.size()); ParseBuffer pc(uriStringC.data(), uriStringC.size()); NameAddr nA, nB, nC; nA.parse(pa); nB.parse(pb); nC.parse(pc); Uri& uA = nA.uri(); Uri& uB = nB.uri(); Uri& uC = nC.uri(); assert(uA == uB); assert(uB == uC); assert(uA == uC); } { Data uriStringA = "sip:biloxi.com;transport=tcp;method=REGISTER"; Data uriStringB = "sip:biloxi.com;method=REGISTER;transport=tcp"; ParseBuffer pa(uriStringA.data(), uriStringA.size()); ParseBuffer pb(uriStringB.data(), uriStringB.size()); NameAddr nA, nB; nA.parse(pa); nB.parse(pb); Uri& uA = nA.uri(); Uri& uB = nB.uri(); assert(uA == uB); } { Data uriStringA = "sip:alice@atlanta.com"; Data uriStringB = "sip:alice@atlanta.com"; ParseBuffer pa(uriStringA.data(), uriStringA.size()); ParseBuffer pb(uriStringB.data(), uriStringB.size()); NameAddr nA, nB; nA.parse(pa); nB.parse(pb); Uri& uA = nA.uri(); Uri& uB = nB.uri(); assert(uA == uB); } { Data uriStringA = "sip:alice@AtLanTa.CoM;Transport=UDP"; Data uriStringB = "SIP:ALICE@AtLanTa.CoM;Transport=udp"; ParseBuffer pa(uriStringA.data(), uriStringA.size()); ParseBuffer pb(uriStringB.data(), uriStringB.size()); NameAddr nA, nB; nA.parse(pa); nB.parse(pb); Uri& uA = nA.uri(); Uri& uB = nB.uri(); assert(uA != uB); } { Data uriStringA = "sip:bob@192.0.2.4"; Data uriStringB = "sip:bob@phone21.boxesbybob.com"; ParseBuffer pa(uriStringA.data(), uriStringA.size()); ParseBuffer pb(uriStringB.data(), uriStringB.size()); NameAddr nA, nB; nA.parse(pa); nB.parse(pb); Uri& uA = nA.uri(); Uri& uB = nB.uri(); assert(uA != uB); } { Data uriStringA = "sip:bob@biloxi.com:6000;transport=tcp"; Data uriStringB = "sip:bob@biloxi.com"; ParseBuffer pa(uriStringA.data(), uriStringA.size()); ParseBuffer pb(uriStringB.data(), uriStringB.size()); NameAddr nA, nB; nA.parse(pa); nB.parse(pb); Uri& uA = nA.uri(); Uri& uB = nB.uri(); assert(uA != uB); } { Data uriStringA = "sip:bob@biloxi.com;transport=udp"; Data uriStringB = "sip:bob@biloxi.com"; ParseBuffer pa(uriStringA.data(), uriStringA.size()); ParseBuffer pb(uriStringB.data(), uriStringB.size()); NameAddr nA, nB; nA.parse(pa); nB.parse(pb); Uri& uA = nA.uri(); Uri& uB = nB.uri(); cerr << "A: " << uA << endl; cerr << "B: " << uB << endl; cerr << "A:exists(transport) " << uA.exists(p_transport) << endl; assert(uA != uB); } { //embedded header comparison, not supported yet// char *uriStringA = "sip:carol@chicago.com?Subject=next%20meeting";// char *uriStringB = "sip:carol@chicago.com";// ParseBuffer pa(uriStringA, strlen(uriStringA));// ParseBuffer pb(uriStringB, strlen(uriStringB));// Uri uA, uB;// uA.parse(uriStringA);// uB.parse(uriStringB);// assert(uA != uB); } { TR _tr( "Request Line parse"); Data requestLineString("INVITE sips:bob@foo.com SIP/2.0"); HeaderFieldValue hfv(requestLineString.data(), requestLineString.size()); RequestLine requestLine(&hfv, Headers::UNKNOWN); assert(requestLine.uri().scheme() == "sips"); assert(requestLine.uri().user() == "bob"); cerr << requestLine.uri().host() << endl; assert(requestLine.uri().host() == "foo.com"); assert(requestLine.getMethod() == INVITE); assert(requestLine.getSipVersion() == "SIP/2.0"); } { TR _tr( "Request Line parse tel"); Data requestLineString("INVITE tel:4153331212 SIP/2.0"); HeaderFieldValue hfv(requestLineString.data(), requestLineString.size()); RequestLine requestLine(&hfv, Headers::UNKNOWN); assert(requestLine.uri().scheme() == "tel"); assert(requestLine.uri().user() == "4153331212"); assert(requestLine.getMethod() == INVITE); assert(requestLine.getSipVersion() == "SIP/2.0"); } { TR _tr( "Request Line parse, parameters"); Data requestLineString("INVITE sips:bob@foo.com;maddr=1.2.3.4 SIP/2.0"); HeaderFieldValue hfv(requestLineString.data(), requestLineString.size()); RequestLine requestLine(&hfv, Headers::UNKNOWN); assert(requestLine.uri().scheme() == "sips"); assert(requestLine.uri().user() == "bob"); cerr << requestLine.uri().host() << endl; assert(requestLine.uri().host() == "foo.com"); assert(requestLine.getMethod() == INVITE); assert(requestLine.uri().param(p_maddr) == "1.2.3.4"); cerr << requestLine.getSipVersion() << endl; assert(requestLine.getSipVersion() == "SIP/2.0"); } { TR _tr( "NameAddr parse"); Data nameAddrString("sips:bob@foo.com"); HeaderFieldValue hfv(nameAddrString.data(), nameAddrString.size()); NameAddr nameAddr(&hfv, Headers::UNKNOWN); assert(nameAddr.uri().scheme() == "sips"); assert(nameAddr.uri().user() == "bob"); assert(nameAddr.uri().host() == "foo.com"); } { TR _tr( "NameAddr parse, displayName"); Data nameAddrString("Bob<sips:bob@foo.com>"); HeaderFieldValue hfv(nameAddrString.data(), nameAddrString.size()); NameAddr nameAddr(&hfv, Headers::UNKNOWN); assert(nameAddr.displayName() == "Bob"); assert(nameAddr.uri().scheme() == "sips"); assert(nameAddr.uri().user() == "bob"); assert(nameAddr.uri().host() == "foo.com"); } { TR _tr( "NameAddr parse, quoted displayname"); Data nameAddrString = "\"Bob\"<sips:bob@foo.com>"; HeaderFieldValue hfv(nameAddrString.data(), nameAddrString.size()); NameAddr nameAddr(&hfv, Headers::UNKNOWN); assert(nameAddr.displayName() == "Bob"); assert(nameAddr.uri().scheme() == "sips"); assert(nameAddr.uri().user() == "bob"); assert(nameAddr.uri().host() == "foo.com"); } { TR _tr( "NameAddr parse, quoted displayname, embedded quotes"); Data nameAddrString("\"Bob \\\" asd \"<sips:bob@foo.com>"); HeaderFieldValue hfv(nameAddrString.data(), nameAddrString.size()); NameAddr nameAddr(&hfv, Headers::UNKNOWN); assert(nameAddr.displayName() == "Bob \\\" asd "); assert(nameAddr.uri().scheme() == "sips"); assert(nameAddr.uri().user() == "bob"); assert(nameAddr.uri().host() == "foo.com"); } { TR _tr( "NameAddr parse, unquoted displayname, paramterMove"); Data nameAddrString("Bob<sips:bob@foo.com>;tag=456248;mobility=\"hobble\""); HeaderFieldValue hfv(nameAddrString.data(), nameAddrString.size()); NameAddr nameAddr(&hfv, Headers::UNKNOWN); assert(nameAddr.displayName() == "Bob"); assert(nameAddr.uri().scheme() == "sips"); assert(nameAddr.uri().user() == "bob"); assert(nameAddr.uri().host() == "foo.com"); cerr << "Uri params: "; nameAddr.uri().encodeParameters(cerr) << endl; cerr << "Header params: "; nameAddr.encodeParameters(cerr) << endl; assert(nameAddr.param(p_tag) == "456248"); assert(nameAddr.param(p_mobility) == "hobble"); assert(nameAddr.uri().exists(p_tag) == false); assert(nameAddr.uri().exists(p_mobility) == false); } { TR _tr( "NameAddr parse, quoted displayname, parameterMove"); Data nameAddrString("\"Bob\"<sips:bob@foo.com>;tag=456248;mobility=\"hobble\""); HeaderFieldValue hfv(nameAddrString.data(), nameAddrString.size()); NameAddr nameAddr(&hfv, Headers::UNKNOWN); assert(nameAddr.displayName() == "Bob"); assert(nameAddr.uri().scheme() == "sips"); assert(nameAddr.uri().user() == "bob"); assert(nameAddr.uri().host() == "foo.com"); cerr << "Uri params: "; nameAddr.uri().encodeParameters(cerr) << endl; cerr << "Header params: "; nameAddr.encodeParameters(cerr) << endl; assert(nameAddr.param(p_tag) == "456248"); assert(nameAddr.param(p_mobility) == "hobble"); assert(nameAddr.uri().exists(p_tag) == false); assert(nameAddr.uri().exists(p_mobility) == false); } { TR _tr( "NameAddr parse, unquoted displayname, paramterMove"); Data nameAddrString("Bob<sips:bob@foo.com;tag=456248;mobility=\"hobble\">"); HeaderFieldValue hfv(nameAddrString.data(), nameAddrString.size()); NameAddr nameAddr(&hfv, Headers::UNKNOWN); assert(nameAddr.displayName() == "Bob"); assert(nameAddr.uri().scheme() == "sips"); assert(nameAddr.uri().user() == "bob"); assert(nameAddr.uri().host() == "foo.com"); cerr << "Uri params: "; nameAddr.uri().encodeParameters(cerr) << endl; cerr << "Header params: "; nameAddr.encodeParameters(cerr) << endl; assert(nameAddr.uri().param(p_tag) == "456248"); assert(nameAddr.uri().param(p_mobility) == "hobble"); assert(nameAddr.exists(p_tag) == false); assert(nameAddr.exists(p_mobility) == false); } { TR _tr( "NameAddr parse, unquoted displayname, paramterMove"); Data nameAddrString("Bob<sips:bob@foo.com;mobility=\"hobb;le\";tag=\"true;false\">"); HeaderFieldValue hfv(nameAddrString.data(), nameAddrString.size()); NameAddr nameAddr(&hfv, Headers::UNKNOWN); assert(nameAddr.displayName() == "Bob"); assert(nameAddr.uri().scheme() == "sips"); assert(nameAddr.uri().user() == "bob"); assert(nameAddr.uri().host() == "foo.com"); cerr << "Uri params: "; nameAddr.uri().encodeParameters(cerr) << endl; cerr << "Header params: "; nameAddr.encodeParameters(cerr) << endl; assert(nameAddr.uri().param(p_mobility) == "hobb;le"); assert(nameAddr.uri().param(p_tag) == "true;false"); // assert("true;false" == nameAddr.uri().param(Data("useless"))); assert(nameAddr.exists(p_mobility) == false); } { TR _tr( "NameAddr parse"); Data nameAddrString("sip:101@localhost:5080;transport=UDP"); HeaderFieldValue hfv(nameAddrString.data(), nameAddrString.size()); NameAddr nameAddr(&hfv, Headers::UNKNOWN); assert(nameAddr.displayName() == ""); assert(nameAddr.uri().scheme() == "sip"); assert(nameAddr.uri().user() == "101"); } { TR _tr( "NameAddr parse, no user in uri"); Data nameAddrString("sip:localhost:5070"); HeaderFieldValue hfv(nameAddrString.data(), nameAddrString.size()); NameAddr nameAddr(&hfv, Headers::UNKNOWN); assert(nameAddr.displayName() == ""); assert(nameAddr.uri().scheme() == "sip"); assert(nameAddr.uri().host() == "localhost"); assert(nameAddr.uri().user() == ""); assert(nameAddr.uri().port() == 5070); } { TR _tr( "StatusLine, no reason code"); Data statusLineString("SIP/2.0 100 "); HeaderFieldValue hfv(statusLineString.data(), statusLineString.size()); StatusLine statusLine(&hfv, Headers::UNKNOWN); assert(statusLine.responseCode() == 100); assert(statusLine.reason() == ""); assert(statusLine.getSipVersion() == "SIP/2.0"); } { TR _tr( "StatusLine, no reason code"); Data statusLineString("SIP/2.0 100"); HeaderFieldValue hfv(statusLineString.data(), statusLineString.size()); StatusLine statusLine(&hfv, Headers::UNKNOWN); assert(statusLine.responseCode() == 100); assert(statusLine.reason() == ""); assert(statusLine.getSipVersion() == "SIP/2.0"); } { TR _tr("Auth Schemes"); char* authorizationString = "Digest realm=\"66.100.107.120\", username=\"1234\", nonce=\"1011235448\" , uri=\"sip:66.100.107.120\" , algorithm=MD5, response=\"8a5165b024fda362ed9c1e29a7af0ef2\""; HeaderFieldValue hfv(authorizationString, strlen(authorizationString)); Auth auth(&hfv, Headers::UNKNOWN); cerr << "Auth scheme: " << auth.scheme() << endl; assert(auth.scheme() == "Digest"); cerr << " realm: " << auth.param(p_realm) << endl; assert(auth.param(p_realm) == "66.100.107.120"); assert(auth.param(p_username) == "1234"); assert(auth.param(p_nonce) == "1011235448"); assert(auth.param(p_uri) == "sip:66.100.107.120"); assert(auth.param(p_algorithm) == "MD5"); assert(auth.param(p_response) == "8a5165b024fda362ed9c1e29a7af0ef2"); stringstream s; auth.encode(s); cerr << s.str() << endl; assert(s.str() == "Digest realm=\"66.100.107.120\",username=\"1234\",nonce=\"1011235448\",uri=\"sip:66.100.107.120\",algorithm=MD5,response=\"8a5165b024fda362ed9c1e29a7af0ef2\""); } { TR _tr("More Auth"); char* authorizationString = "realm=\"66.100.107.120\", username=\"1234\", nonce=\"1011235448\" , uri=\"sip:66.100.107.120\" , algorithm=MD5, response=\"8a5165b024fda362ed9c1e29a7af0ef2\""; HeaderFieldValue hfv(authorizationString, strlen(authorizationString)); Auth auth(&hfv, Headers::UNKNOWN); cerr << "Auth scheme: " << auth.scheme() << endl; assert(auth.scheme() == ""); cerr << " realm: " << auth.param(p_realm) << endl; assert(auth.param(p_realm) == "66.100.107.120"); assert(auth.param(p_username) == "1234"); assert(auth.param(p_nonce) == "1011235448"); assert(auth.param(p_uri) == "sip:66.100.107.120"); assert(auth.param(p_algorithm) == "MD5"); assert(auth.param(p_response) == "8a5165b024fda362ed9c1e29a7af0ef2"); stringstream s; auth.encode(s); cerr << s.str() << endl; assert(s.str() == "realm=\"66.100.107.120\",username=\"1234\",nonce=\"1011235448\",uri=\"sip:66.100.107.120\",algorithm=MD5,response=\"8a5165b024fda362ed9c1e29a7af0ef2\""); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -