|
reSIProcate/stack
9694
|
#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"
Go to the source code of this file.
Defines | |
| #define | RESIPROCATE_SUBSYSTEM Subsystem::TEST |
| #define | BUGTRAILINGSPACE " " |
Functions | |
| void | test1 () |
| void | test2 () |
| void | test3 () |
| void | test4 () |
| void | test5 () |
| void | test6 () |
| void | test7 () |
| void | test8 () |
| void | test9 () |
| void | test10 () |
| void | test11 () |
| void | test12 () |
| void | test13 () |
| void | test14 () |
| void | test15 () |
| int | main (int argc, const char *argv[]) |
| #define BUGTRAILINGSPACE " " |
Definition at line 18 of file SipTortureTests.cxx.
Referenced by test1().
| #define RESIPROCATE_SUBSYSTEM Subsystem::TEST |
Definition at line 16 of file SipTortureTests.cxx.
| int main | ( | int | argc, |
| const char * | argv[] | ||
| ) |
Definition at line 919 of file SipTortureTests.cxx.
References resip::Log::Cout, resip::Log::Crit, CritLog, resip::Log::Debug, resip::Log::Info, resip::Log::initialize(), resip::Log::Stack, test1(), test10(), test11(), test12(), test13(), test14(), test2(), test3(), test4(), test5(), test6(), test7(), test8(), and test9().
{
Log::Level l = Log::Debug;
if (argc > 1)
{
switch(*argv[1])
{
case 'd': l = Log::Debug;
break;
case 'i': l = Log::Info;
break;
case 's': l = Log::Stack;
break;
case 'c': l = Log::Crit;
break;
}
}
Log::initialize(Log::Cout, l, argv[0]);
CritLog(<<"Test Driver Starting");
tassert_init(14);
test1();
test2();
test3();
test4();
test5();
test6();
test7();
test8();
test9();
test10();//this should fail as written
test11();
test12();
test13();
test14();
tassert_report();
CritLog(<<"Test Driver Done");
}

| void test1 | ( | ) |
ah! temporary until compact headers fixed.
Definition at line 21 of file SipTortureTests.cxx.
References BUGTRAILINGSPACE, CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
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);
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 test10 | ( | ) |
Definition at line 641 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
CritLog( << "2.10 Multiple SIP Request in a Single Message");
const char* txt = ("REGISTER sip:company.com SIP/2.0\r\n"
"To: sip:j.user@company.com\r\n"
"From: sip:j.user@company.com;tag=43251j3j324\r\n"
"Max-Forwards: 8\r\n"
"Call-ID: 0ha0isndaksdj@10.0.2.2\r\n"
"Contact: sip:j.user@host.company.com\r\n"
"CSeq: 8 REGISTER\r\n"
"Via: SIP/2.0/UDP 135.180.130.133;branch=z9hG4bKkdjuw\r\n"
"Content-Length: 0\r\n\r\n"
"INVITE sip:joe@company.com SIP/2.0\r\n"
"To: sip:joe@company.com\r\n"
"From: sip:caller@university.edu;tag=141334\r\n"
"Max-Forwards: 8\r\n"
"Call-ID: 0ha0isnda977644900765@10.0.0.1\r\n"
"CSeq: 8 INVITE\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");
tassert_reset();
try
{
auto_ptr<SipMessage> message(TestSupport::makeMessage(txt));
tassert(0);
}
catch (ParseException& e)
{
}
tassert_verify(10);
}

| void test11 | ( | ) |
Definition at line 685 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
CritLog( << "2.11 INVITE missing Required Headers");
const char* txt = ("INVITE sip:user@company.com SIP/2.0\r\n"
"CSeq: 0 INVITE\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_reset();
tassert(message->isRequest());
tassert(!message->isResponse());
tassert(!message->exists(h_CallId));
tassert(!message->exists(h_From));
tassert(!message->exists(h_To));
tassert_verify(11);
}

| void test12 | ( | ) |
Definition at line 714 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
CritLog( << "2.12 INVITE with Duplicate Required Headers");
//with duplicate headers that are not multi, the first header is kept
const char* txt = ("INVITE sip:user@company.com SIP/2.0\r\n"
"Via: SIP/2.0/UDP 135.180.130.133;branch=z9hG4bKkdjuw\r\n"
"Max-Forwards: 70\r\n"
"CSeq: 0 INVITE\r\n"
"Call-ID: 98asdh@10.1.1.1\r\n"
"Call-ID: 98asdh@10.1.1.2\r\n"
"From: sip:caller@university.edu;tag=3413415\r\n"
"From: sip:caller@organization.org\r\n"
"To: sip:user@company.com\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");
tassert_reset();
try
{
auto_ptr<SipMessage> message(TestSupport::makeMessage(txt));
}
catch (ParseException& e)
{
tassert(0);
}
tassert_verify(12);
}

| void test13 | ( | ) |
Definition at line 753 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
CritLog( << "2.13 INVITE with lots of header types");
//with duplicate headers that are not multi, the first header is kept
const char* txt = ("INVITE sip:user@company.com SIP/2.0\r\n"
"User-Agent: Lame Agent\r\n"
"Via: SIP/2.0/UDP 135.180.130.133;branch=z9hG4bKkdjuw\r\n"
"Max-Forwards: 70\r\n"
"CSeq: 0 INVITE\r\n"
"Call-ID: 98asdh@10.1.1.2\r\n"
"From: sip:caller@university.edu;tag=3413415\r\n"
"From: sip:caller@organization.org\r\n"
"To: sip:user@company.com\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");
tassert_reset();
try
{
auto_ptr<SipMessage> message(TestSupport::makeMessage(txt));
tassert(message->header(h_UserAgent).value() == "Lame Agent");
message->header(h_UserAgent).value() = "Foo";
tassert(message->header(h_UserAgent).value() == "Foo");
}
catch (ParseException& e)
{
tassert(0);
}
tassert_verify(13);
}

| void test14 | ( | ) |
Definition at line 796 of file SipTortureTests.cxx.
References CritLog, DebugLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
CritLog( << "2.14 Response with lots of headers");
const char* txt = ("SIP/2.0 200 OK\r\n"
"To: <sip:fluffy@example.org>;tag=fb86ad2694115d75c77dce61523c9f07.ca6e\r\n"
"From: <sip:fluffy@example.org>;tag=a1fd\r\n"
"Via: SIP/2.0/UDP cj14:5002;branch=z9hG4bK-c87542-472987176-1;received=1.2.3.4\r\n"
"Call-ID: 048cec32\r\n"
"CSeq: 2 REGISTER\r\n"
"Contact: <sip:fluffy@1.2.3.4:5002>;q=1.00;expires=1951\r\n"
"Contact: <sip:fluffy@example.com:5002>;q=0.50;expires=10\r\n"
"Contact: <sip:floppy@example.com:5002>;q=0.00;expires=100\r\n"
"Server: The Server\r\n"
"Content-Length: 0\r\n"
"Warning: junk junk junk \r\n"
"\r\n");
tassert_reset();
try
{
auto_ptr<SipMessage> msg(TestSupport::makeMessage(txt));
tassert( msg->header(h_Contacts).size() == 3 );
resip::ParserContainer<resip::NameAddr>::iterator i = msg->header(h_Contacts).begin();
while ( i != msg->header(h_Contacts).end() )
{
DebugLog(<< "i=" << *i );
i++;
}
}
catch (ParseException& e)
{
}
tassert_verify(14);
}

| void test15 | ( | ) |
Definition at line 835 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
{
CritLog( << "2.15 Interesting bodies");
const char* txt = (
"NOTIFY sip:fluffy@212.157.205.40 SIP/2.0\r\n"
"Via: SIP/2.0/TCP 212.157.205.198:5060;branch=z9hG4bK2367411811584019109\r\n"
"To: sip:fluffy@212.157.205.40\r\n"
"From: sip:ntt2@h1.ntt2.sipit.net;tag=727823805122397238\r\n"
"Max-Forwards: 70\r\n"
"CSeq: 1 NOTIFY\r\n"
"Call-ID: 28067261571992032320\r\n"
"Contact: sip:ntt2@212.157.205.198:5060\r\n"
"Content-Length: 1929\r\n"
"Content-Type: multipart/signed;\r\n"
" protocol=\"application/pkcs7-signature\";\r\n"
" micalg=sha1; boundary=\"----YvhIjyjTU8lfNqGe8Fyvxcmb4mleF6quxsMFpT2hOhrDfS3LLs1MyYBdLNgBLsSC\"\r\n"
"\r\n"
"------YvhIjyjTU8lfNqGe8Fyvxcmb4mleF6quxsMFpT2hOhrDfS3LLs1MyYBdLNgBLsSC\r\n"
"Content-Type: multipart/mixed;boundary=\"----lRIGMC8E2Px6I2IODfk2rISgfWIirrOJwS3tY52HuxDP3pdTiFjsghJJWhvyRCEY\"\r\n"
"Content-Length: 870\r\n"
"Content-Disposition: attachment;handling=required\r\n"
"\r\n"
"------lRIGMC8E2Px6I2IODfk2rISgfWIirrOJwS3tY52HuxDP3pdTiFjsghJJWhvyRCEY\r\n"
"Content-Type: application/sipfrag\r\n"
"Content-Length: 320\r\n"
"\r\n"
"To: sip:fluffy@212.157.205.40\r\n"
"From: sip:ntt2@h1.ntt2.sipit.net;tag=727823805122397238\r\n"
"CSeq: 1 NOTIFY\r\n"
"Call-ID: 28067261571992032320\r\n"
"Contact: sip:ntt2@212.157.205.198:5060\r\n"
"Event: presence\r\n"
"Content-Length: 210\r\n"
"Content-Type: application/xpidf+xml\r\n"
"Subscription-State: active\r\n"
"User-Agent: NTT SecureSession User-Agent\r\n"
"\r\n"
"------lRIGMC8E2Px6I2IODfk2rISgfWIirrOJwS3tY52HuxDP3pdTiFjsghJJWhvyRCEY\r\n"
"Content-Type: application/xpidf+xml\r\n"
"Content-Length: 210\r\n"
"\r\n"
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
"<presence xmlns:impp=\"urn:ietf:params:xml:ns:pidf\" entity=\"pres:someone@example.com\">\r\n"
"<tuple id=\"765\">\r\n"
"<status>\r\n"
"<basic>open</basic>\r\n"
"</status>\r\n"
"</tuple>\r\n"
"</presence>\r\n"
"\r\n"
"------lRIGMC8E2Px6I2IODfk2rISgfWIirrOJwS3tY52HuxDP3pdTiFjsghJJWhvyRCEY--\r\n"
"\r\n"
"------YvhIjyjTU8lfNqGe8Fyvxcmb4mleF6quxsMFpT2hOhrDfS3LLs1MyYBdLNgBLsSC\r\n"
"Content-Type: application/pkcs7-signature; name=\"smime.p7s\"\r\n"
"Content-Transfer-Encoding: base64\r\n"
"Content-Disposition: attachment; filename=\"smime.p7s\"; handling=required\r\n"
"\r\n"
"MIIBVgYJKoZIhvcNAQcCoIIBRzCCAUMCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3\r\n"
"DQEHATGCASIwggEeAgEBMHwwcDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlm\r\n"
"b3JuaWExETAPBgNVBAcTCFNhbiBKb3NlMQ4wDAYDVQQKEwVzaXBpdDEpMCcGA1UE\r\n"
"CxMgU2lwaXQgVGVzdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkCCAIWABUCBgIVMAkG\r\n"
"BSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEgYAer8TPSMtA3ZqweGnXLUYKR51bp52N\r\n"
"oGBEqHZz7xR0Nhs6DsAOXiSFv19vTR//33u6Se3zpNNHP/zj7NRr+olimI2PeBNB\r\n"
"tczNdqexoN0pjRW7l7mHZ0e39pqZmI5bhFl+z9CJJu5xW0aSarw84CZxbh5RQaYr\r\n"
"zhSvTYdki20aiQ==\r\n"
"\r\n"
"------YvhIjyjTU8lfNqGe8Fyvxcmb4mleF6quxsMFpT2hOhrDfS3LLs1MyYBdLNgBLsSC--\r\n"
);
tassert_reset();
try
{
auto_ptr<SipMessage> msg(TestSupport::makeMessage(txt));
}
catch (ParseException& e)
{
}
tassert_verify(15);
}

| void test2 | ( | ) |
Definition at line 142 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
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 | ( | ) |
Definition at line 213 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
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 | ( | ) |
Definition at line 289 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
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);
tassert(message->header(h_CSeq).method() == REGISTER);
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");
tassert(message->exists(h_Expires));
/*
* Quoted from RFC 3261
* The "expires" parameter of a Contact header field value indicates how
* long the URI is valid. The value of the parameter is a number
* indicating seconds. If this parameter is not provided, the value of
* the Expires header field determines how long the URI is valid.
* Malformed values SHOULD be treated as equivalent to 3600.
* This provides a modest level of backwards compatibility with RFC
* 2543, which allowed absolute times in this header field. If an
* absolute time is received, it will be treated as malformed, and
* then default to 3600.
*/
tassert(message->header(h_Expires).value() == 3600);
// Asking for something when it doesnt exist
tassert(message->exists(h_ContentLength) == false);
message->header(h_ContentLength).value();
tassert_verify(4);
}

| void test5 | ( | ) |
Definition at line 374 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
CritLog( << "2.5 INVITE with inconsistent Accept and message body");
const char *txt = ("INVITE sip:user@company.com SIP/2.0 \r\n"
"To: sip:j_user@company.com \r\n"
"From: sip:caller@university.edu;tag=234 \r\n"
"Max-Forwards: 5 \r\n"
"Call-ID: 0ha0isndaksdj@10.0.0.1 \r\n"
"Accept: text/newformat \r\n"
"CSeq: 8 INVITE \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"
"c=IN IP4 135.180.130.88 \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");
auto_ptr<SipMessage> message(TestSupport::makeMessage(txt));
tassert_reset();
tassert(message->isRequest());
tassert(!message->isResponse());
tassert(message->header(h_RequestLine).getMethod() == INVITE);
tassert(message->header(h_RequestLine).getSipVersion() == "SIP/2.0");
tassert(message->header(h_RequestLine).uri().host() == "company.com");
tassert(message->header(h_RequestLine).uri().user() == "user");
tassert(message->header(h_RequestLine).uri().scheme() == "sip");
tassert(message->header(h_RequestLine).uri().port() == 0);
tassert(message->header(h_RequestLine).uri().password() == "");
tassert(message->header(h_To).uri().host() == "company.com");
tassert(message->header(h_To).uri().user() == "j_user");
tassert(message->header(h_To).uri().scheme() == "sip");
tassert(message->header(h_To).uri().port() == 0);
tassert(message->header(h_To).uri().password() == "");
tassert(message->header(h_From).uri().host() == "university.edu");
tassert(message->header(h_From).uri().user() == "caller");
tassert(message->header(h_From).uri().scheme() == "sip");
tassert(message->header(h_From).uri().port() == 0);
tassert(message->header(h_From).uri().password() == "");
// The tag is a tag on From: not the uri...
tassert(message->header(h_From).param(p_tag) == "234");
tassert(message->header(h_MaxForwards).value() == 5);
tassert(message->header(h_CallId).value() == "0ha0isndaksdj@10.0.0.1");
tassert(message->header(h_Accepts).size() == 1);
tassert(message->header(h_Accepts).front().type() == "text");
tassert(message->header(h_Accepts).front().subType() == "newformat");
tassert(message->header(h_CSeq).sequence() == 8);
tassert(message->header(h_CSeq).method() == INVITE);
tassert(message->header(h_Vias).size() == 1);
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().param(p_branch).hasMagicCookie());
// !ah! this should go away when parser fixed.
tassert(message->header(h_Vias).front().param(p_branch).getTransactionId() == "kdjuw");
tassert(message->header(h_ContentType).type() == "application");
tassert(message->header(h_ContentType).subType() == "sdp");
tassert_verify(5);
// .dlb. someday the body will gack on parse
}

| void test6 | ( | ) |
Definition at line 453 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
CritLog( << "2.6 INVITE with non-SDP message body ");
const char *txt = ("INVITE sip:user@company.com SIP/2.0\r\n"
"To: sip:j.user@company.com\r\n"
"From: sip:caller@university.edu;tag=8\r\n"
"Max-Forwards: 70 \r\n"
"Call-ID: 0ha0isndaksdj@10.0.0.1 \r\n"
"CSeq: 8 INVITE \r\n"
"Via: SIP/2.0/UDP 135.180.130.133;branch=z9hG4bKkdjuw \r\n"
"Content-Type: application/newformat \r\n"
"\r\n"
"<audio> <pcmu port=\"443\"/> </audio> \r\n"
"\r\n");
auto_ptr<SipMessage> message(TestSupport::makeMessage(txt));
tassert_reset();
tassert(message->isRequest());
tassert(!message->isResponse());
tassert(message->header(h_RequestLine).getMethod() == INVITE);
tassert(message->header(h_RequestLine).getSipVersion() == "SIP/2.0");
tassert(message->header(h_RequestLine).uri().host() == "company.com");
tassert(message->header(h_RequestLine).uri().user() == "user");
tassert(message->header(h_RequestLine).uri().scheme() == "sip");
tassert(message->header(h_RequestLine).uri().port() == 0);
tassert(message->header(h_RequestLine).uri().password() == "");
tassert(message->header(h_To).uri().host() == "company.com");
tassert(message->header(h_To).uri().user() == "j.user");
tassert(message->header(h_To).uri().scheme() == "sip");
tassert(message->header(h_To).uri().port() == 0);
tassert(message->header(h_From).uri().host() == "university.edu");
tassert(message->header(h_From).uri().user() == "caller");
tassert(message->header(h_From).uri().scheme() == "sip");
tassert(message->header(h_From).uri().port() == 0);
tassert(message->header(h_ContentType).type() == "application");
tassert(message->header(h_ContentType).subType() == "newformat");
// !jf! should send this to a UAS and it should be rejected (don't
// understand why) - says because it is not SDP
tassert_verify(6);
}

| void test7 | ( | ) |
Definition at line 505 of file SipTortureTests.cxx.
References CritLog, DebugLog, resip::Contents::getContents(), resip::ContentsFactoryBase::getFactoryMap(), resip::Contents::getType(), resip::TestSupport::makeMessage(), and resip::SdpContents::session().
Referenced by main().
{
CritLog( << "2.7 Unknown Method Message");
const char *txt = ("NEWMETHOD sip:user@company.com SIP/2.0 \r\n"
"To: sip:j.user@company.com \r\n"
"From: sip:caller@university.edu;tag=34525 \r\n"
"Max-Forwards: 6 \r\n"
"Call-ID: 0ha0isndaksdj@10.0.0.1 \r\n"
"CSeq: 8 NEWMETHOD \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"
"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_reset();
tassert(message->isRequest());
tassert(!message->isResponse());
tassert(message->header(h_RequestLine).getMethod() == UNKNOWN);
tassert(message->header(h_RequestLine).unknownMethodName() == "NEWMETHOD");
tassert(message->header(h_RequestLine).getSipVersion() == "SIP/2.0");
tassert(message->header(h_RequestLine).uri().host() == "company.com");
tassert(message->header(h_RequestLine).uri().user() == "user");
tassert(message->header(h_RequestLine).uri().scheme() == "sip");
tassert(message->header(h_RequestLine).uri().port() == 0);
tassert(message->header(h_RequestLine).uri().password() == "");
tassert(message->header(h_To).uri().host() == "company.com");
tassert(message->header(h_To).uri().user() == "j.user");
tassert(message->header(h_To).uri().scheme() == "sip");
tassert(message->header(h_To).uri().port() == 0);
tassert(message->header(h_From).uri().host() == "university.edu");
tassert(message->header(h_From).uri().user() == "caller");
tassert(message->header(h_From).uri().scheme() == "sip");
tassert(message->header(h_From).uri().port() == 0);
tassert(message->header(h_ContentType).type() == "application");
tassert(message->header(h_ContentType).subType() == "sdp");
DebugLog( << "start map dump" );
HashMap<Mime, ContentsFactoryBase*>& m = ContentsFactoryBase::getFactoryMap();
HashMap<Mime, ContentsFactoryBase*>::iterator i;
i = m.begin();
while ( i != m.end() )
{
DebugLog( << "first=" << i->first );
i++;
}
DebugLog( << "done map dump" );
Contents* c = message->getContents();
SdpContents* sdp = dynamic_cast<SdpContents*>(c);
sdp->session();
DebugLog( << "got contents of type" << c->getType() );
// A proxy should forward this using the same retransmission rules as
// BYE. A UAS should reject it with an error, and list the available
// methods in the response.
tassert_verify(7);
}

| void test8 | ( | ) |
Definition at line 584 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
CritLog( << "2.8 Unknown Method with CSeq Error ");
const char *txt = ("NEWMETHOD sip:user@comapny.com SIP/2.0\r\n"
"To: sip:j.user@company.com\r\n"
"From: sip:caller@university.edu;tag=23411413\r\n"
"Max-Forwards: 3\r\n"
"Call-ID: 0ha0isndaksdj@10.0.1.1\r\n"
"CSeq: 8 INVITE\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");
auto_ptr<SipMessage> message(TestSupport::makeMessage(txt));
tassert_reset();
tassert(message->isRequest());
tassert(!message->isResponse());
tassert(message->header(h_RequestLine).getMethod() == UNKNOWN);
tassert(message->header(h_RequestLine).unknownMethodName() == "NEWMETHOD");
tassert(message->header(h_CSeq).method() == INVITE);
tassert(message->header(h_CSeq).method() != message->header(h_RequestLine).getMethod());
tassert_verify(8);
}

| void test9 | ( | ) |
Definition at line 618 of file SipTortureTests.cxx.
References CritLog, and resip::TestSupport::makeMessage().
Referenced by main().
{
CritLog( << "2.9 REGISTER with Unknown Authorization Scheme" );
const char* txt = ("REGISTER sip:company.com SIP/2.0\r\n"
"To: sip:j.user@company.com\r\n"
"From: sip:j.user@company.com;tag=87321hj23128\r\n"
"Max-Forwards: 8\r\n"
"Call-ID: 0ha0isndaksdj@10.0.1.1\r\n"
"CSeq: 8 REGISTER\r\n"
"Via: SIP/2.0/UDP 135.180.130.133;branch=z9hG4bKkdjuw\r\n"
"Authorization: Super-PGP foo=ajsohdaosdh0asyhdaind08yasdknasd09asidhas0d8\r\n\r\n");
auto_ptr<SipMessage> message(TestSupport::makeMessage(txt));
tassert_reset();
tassert(message->isRequest());
tassert(!message->isResponse());
tassert(message->header(h_RequestLine).getMethod() == REGISTER);
tassert(message->header(h_Authorizations).front().scheme() == "Super-PGP");
tassert_verify(9);
}

1.7.5.1