⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 siptorturetests.cxx

📁 一个著名的SIP协议栈
💻 CXX
📖 第 1 页 / 共 3 页
字号:
#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 + -