📄 siptorturetests.cxx
字号:
#include <iostream>#include <memory>#include "TestSupport.hxx"#include "resip/stack/Contents.hxx"#include "resip/stack/SdpContents.hxx"#include "resip/stack/SipMessage.hxx"#include "resip/stack/ExtensionHeader.hxx"#include "resip/stack/Uri.hxx"#include "rutil/Logger.hxx"#include "tassert.h"using namespace resip;using namespace std;#define RESIPROCATE_SUBSYSTEM Subsystem::TEST#define BUGTRAILINGSPACE " "void test1(){ CritLog(<< "2.1 INVITE Parser Torture Test Message" ); const char *txt = ("INVITE sip:called@called-company.com SIP/2.0\r\n" "TO :\r\n" " sip:called@called-company.com ; tag = 1918181833n\r\n" "From : \"Caller Name \\\\\\\"\" <sip:caller@caller-company.com>\r\n" " ;\r\n" " tag = 98asjd8\r\n" "Max-Forwards: 8\r\n" "Call-ID: 0ha0isndaksdj@10.0.0.1\r\n" "Date: Mon, 02 Jun 1982 08:21:11 GMT\r\n" "CSeq: 8\r\n" " INVITE\r\n" "Via : SIP / 2.0\r\n" " /UDP\r\n" " 135.180.130.133;branch=z9hG4bKkdjuw\r\n" "Subject : \r\n" "NewFangledHeader: newfangled value\r\n" " more newfangled value \r\n" "Content-Type: application/sdp \r\n" "v: SIP / 2.0 / TCP 1192.168.156.222 ;\r\n" " branch = 9ikj8 , \r\n" " SIP / 2.0 / UDP 192.168.255.111 ; hidden\r\n" "m:\"Quoted string\\\"\\\"\"<sip:caller@caller-company.com>; newparam =\r\n" " newvalue ;\r\n" " secondparam = secondvalue ; q = 0.33,\r\n" " tel:4443322 \r\n" "\r\n" "v=0\r\n" "o=mhandley 29739 7272939 IN IP4 126.5.4.3 \r\n" "s=-\r\n" "c=IN IP4 135.180.130.88 \r\n" "t=0 0 \r\n" "m=audio 492170 RTP/AVP 0 12 \r\n" "m=video 3227 RTP/AVP 31 \r\n" "a=rtpmap:31 LPC \r\n\r\n"); SipMessage* msg = TestSupport::makeMessage(txt); tassert_reset(); tassert(msg); auto_ptr<SipMessage> message(msg); tassert(message->isRequest()); tassert(message->isResponse() == false); tassert(message->exists(h_To)); tassert(message->header(h_To).uri().user() == "called"); tassert(message->header(h_To).uri().host() == "called-company.com"); tassert(message->header(h_To).param(p_tag) == "1918181833n"); tassert(message->exists(h_From)); tassert(message->header(h_From).uri().user() == "caller"); tassert(message->header(h_From).uri().host() == "caller-company.com"); tassert(message->header(h_From).param(p_tag) == "98asjd8"); tassert(message->exists(h_MaxForwards)); tassert(message->header(h_MaxForwards).value() == 8); tassert(message->header(h_MaxForwards).exists(p_tag) == false); // !ah! compact headers not working. // skip if ''not present'' -- actually check by unknown hdr... :-) if (message->exists(h_Contacts)) { tassert(message->exists(h_Contacts) == true); tassert(message->header(h_Contacts).empty() == false); tassert(message->header(h_Contacts).front().uri().user() == "caller"); tassert(message->header(h_Contacts).front().uri().host() == "caller-company.com"); tassert(message->header(h_Contacts).front().uri().port() == 0); } else { CritLog(<<"TODO: Compact headers .. doing by unknown interface!!"); tassert(message->exists(h_Contacts) == false); tassert(message->exists(ExtensionHeader("m")) == true); tassert(message->header(ExtensionHeader("m")).empty() == false); //!ah! temporary until compact headers fixed. tassert(message->header(ExtensionHeader("m")).front().value() == "\"Quoted string\\\"\\\"\"<sip:caller@caller-company.com>;" " newparam = newvalue ; secondparam = secondvalue ; q" " = 0.33, tel:4443322 "); } tassert(message->exists(h_CallId)); tassert(message->header(h_CallId).value() == "0ha0isndaksdj@10.0.0.1"); tassert(message->exists(h_CSeq)); tassert(message->header(h_CSeq).sequence() == 8); tassert(message->header(h_CSeq).method() == INVITE); tassert(message->exists(h_Vias)); tassert(message->header(h_Vias).empty() == false); tassert(message->header(h_Vias).front().protocolName() == "SIP"); tassert(message->header(h_Vias).front().protocolVersion() == "2.0"); tassert(message->header(h_Vias).front().transport() == "UDP"); tassert(message->header(h_Vias).front().sentHost() == "135.180.130.133"); tassert(message->header(h_Vias).front().sentPort() == 0); tassert(message->header(h_Vias).front().exists(p_branch)); tassert(message->header(h_Vias).front().param(p_branch).hasMagicCookie()); tassert(message->header(h_Vias).front().param(p_branch).getTransactionId() == "kdjuw"); tassert(message->exists(h_Subject)); tassert(message->header(h_Subject).value().empty()); tassert(message->exists(ExtensionHeader("NewFangledHeader"))); tassert(message->header(ExtensionHeader("NewFangledHeader")).front().value() == "newfangled value more newfangled value"BUGTRAILINGSPACE); //TODO: Need to check the ContentType header value tassert(message->exists(h_ContentType)); CritLog(<<"TODO:Check content type"); // << *message); tassert_verify(1); } void test2() { CritLog( << "2.2 INVITE with Proxy-Require and Require"); const char *txt = ("INVITE sip:called@called-company.com SIP/2.0\r\n" "To: sip:called@called-company.com\r\n" "From: sip:caller@caller-company.com;tag=242etr\r\n" "Max-Forwards: 6\r\n" "Call-ID: 0ha0isndaksdj@10.0.0.1\r\n" "Require: newfeature1, newfeature2\r\n" "Proxy-Require: newfeature3, newfeature4\r\n" "CSeq: 8 INVITE\r\n" "Via: SIP/2.0/UDP 135.180.130.133;branch=z9hG4bKkdjuw\r\n\r\n"); auto_ptr<SipMessage> message(TestSupport::makeMessage(txt)); tassert_reset(); tassert(message->isRequest()); tassert(message->isResponse() == false); tassert(message->exists(h_To)); tassert(message->header(h_To).uri().user() == "called"); tassert(message->header(h_To).uri().host() == "called-company.com"); tassert(!message->header(h_To).exists(p_tag)); tassert(message->exists(h_From)); tassert(message->header(h_From).uri().user() == "caller"); tassert(message->header(h_From).uri().host() == "caller-company.com"); tassert(message->header(h_From).exists(p_tag)); tassert(message->header(h_From).param(p_tag) == "242etr"); tassert(message->exists(h_MaxForwards)); tassert(message->header(h_MaxForwards).value() == 6); tassert(message->header(h_MaxForwards).exists(p_tag) == false); tassert(message->exists(h_Contacts) == false); tassert(message->exists(h_CallId)); tassert(message->header(h_CallId).value() == "0ha0isndaksdj@10.0.0.1"); //TODO: Check Values CritLog(<<"TODO: Check values h_Requires"); tassert(message->exists(h_Requires)); //TODO: Check values CritLog(<<"TODO: Check values h_ProxyRequires"); tassert(message->exists(h_ProxyRequires)); tassert(message->exists(h_CSeq)); tassert(message->header(h_CSeq).sequence() == 8); tassert(message->header(h_CSeq).method() == INVITE); tassert(message->exists(h_Vias)); tassert(message->header(h_Vias).empty() == false); tassert(message->header(h_Vias).front().protocolName() == "SIP"); tassert(message->header(h_Vias).front().protocolVersion() == "2.0"); tassert(message->header(h_Vias).front().transport() == "UDP"); tassert(message->header(h_Vias).front().sentHost() == "135.180.130.133"); tassert(message->header(h_Vias).front().sentPort() == 0); tassert(message->header(h_Vias).front().exists(p_branch)); // !ah! -- transaction id DOES NOT include the magic cookie // (removed z9hG4bK) tassert(message->header(h_Vias).front().param(p_branch).getTransactionId() == "kdjuw"); tassert_verify(2); }void test3(){ CritLog( << "2.3 INVITE with Unknown Schemes in URIs"); const char *txt = ("INVITE name:John_Smith SIP/2.0\r\n" "To: isbn:2983792873\r\n" "From: <sip:www.cs.columbia.edu>;tag=3234233\r\n" // was http// "Call-ID: 0ha0isndaksdj@10.0.0.1\r\n" "CSeq: 8 INVITE\r\n" "Max-Forwards: 7\r\n" "Via: SIP/2.0/UDP 135.180.130.133;branch=z9hG4bKkdjuw\r\n" "Content-Type: application/sdp\r\n" "\r\n" "v=0\r\n" "o=mhandley 29739 7272939 IN IP4 126.5.4.3 \r\n" "s=- \r\n" "c=IN IP4 135.180.130.88 \r\n" "t=0 0\r\n" "m=audio 492170 RTP/AVP 0 12 \r\n" "m=video 3227 RTP/AVP 31 \r\n" "a=rtpmap:31 LPC \r\n\r\n"); auto_ptr<SipMessage> message(TestSupport::makeMessage(txt)); tassert(message->isRequest()); tassert(message->isResponse() == false); // !ah! this will assert(0) in Uri.cxx -- so let's skip this for now CritLog(<<"TODO: fix generic Uri handling."); tassert_push(); tassert(message->header(h_RequestLine).getSipVersion() == "SIP/2.0"); tassert_pop(); tassert(message->exists(h_To)); tassert(!message->header(h_To).exists(p_tag)); tassert(message->exists(h_From)); tassert(message->header(h_From).param(p_tag) == "3234233"); tassert(message->exists(h_CallId)); tassert(message->header(h_CallId).value() == "0ha0isndaksdj@10.0.0.1"); tassert(message->exists(h_CSeq)); tassert(message->header(h_CSeq).sequence() == 8); tassert(message->header(h_CSeq).method() == INVITE); tassert(message->exists(h_MaxForwards)); tassert(message->header(h_MaxForwards).value() == 7); tassert(message->header(h_MaxForwards).exists(p_tag) == false); tassert(message->exists(h_Contacts) == false); tassert(message->exists(h_Vias)); tassert(message->header(h_Vias).empty() == false); tassert(message->header(h_Vias).front().protocolName() == "SIP"); tassert(message->header(h_Vias).front().protocolVersion() == "2.0"); tassert(message->header(h_Vias).front().transport() == "UDP"); tassert(message->header(h_Vias).front().sentHost() == "135.180.130.133"); tassert(message->header(h_Vias).front().sentPort() == 0); tassert(message->header(h_Vias).front().exists(p_branch)); tassert(message->header(h_Vias).front().param(p_branch).getTransactionId() == "kdjuw"); //TODO: Check value CritLog(<<"TODO: Check value of ContentType"); tassert(message->exists(h_ContentType)); tassert_verify(3); }void test4(){ CritLog( << "2.4 REGISTER with Y2038 Test (This tests for Absolute Time in Expires)"); const char *txt = ("REGISTER sip:company.com SIP/2.0\r\n" "To: sip:user@company.com\r\n" "From: sip:user@company.com;tag=3411345\r\n" "Max-Forwards: 8\r\n" "Contact: sip:user@host.company.com\r\n" "Call-ID: 0ha0isndaksdj@10.0.0.1\r\n" "CSeq: 8 REGISTER\r\n" "Via: SIP/2.0/UDP 135.180.130.133;branch=z9hG4bKkdjuw\r\n" "Expires: Sat, 01 Dec 2040 16:00:00 GMT\r\n\r\n"); auto_ptr<SipMessage> message(TestSupport::makeMessage(txt)); tassert_reset(); tassert(message->isRequest()); tassert(message->isResponse() == false); tassert(message->header(h_RequestLine).getSipVersion() == "SIP/2.0"); tassert(message->exists(h_To)); tassert(message->header(h_To).uri().user() == "user"); tassert(message->header(h_To).uri().host() == "company.com"); tassert(!message->header(h_To).exists(p_tag)); tassert(message->exists(h_From)); tassert(message->header(h_From).uri().user() == "user"); tassert(message->header(h_From).uri().host() == "company.com"); tassert(message->header(h_From).exists(p_tag)); tassert(message->header(h_From).param(p_tag) == "3411345"); tassert(message->exists(h_MaxForwards)); tassert(message->header(h_MaxForwards).value() == 8); tassert(message->header(h_MaxForwards).exists(p_tag) == false); tassert(message->exists(h_Contacts)); tassert(message->header(h_Contacts).empty() == false); tassert(message->header(h_Contacts).front().uri().user() == "user"); tassert(message->header(h_Contacts).front().uri().host() == "host.company.com"); tassert(message->header(h_Contacts).front().uri().port() == 0); tassert(message->exists(h_CallId)); tassert(message->header(h_CallId).value() == "0ha0isndaksdj@10.0.0.1"); tassert(message->exists(h_CSeq)); tassert(message->header(h_CSeq).sequence() == 8);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -