📄 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 + -