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

📄 testparsercategories.cxx

📁 一个著名的SIP协议栈
💻 CXX
📖 第 1 页 / 共 5 页
字号:
      ParseBuffer pb(txt.data(), txt.size());

      BranchParameter bpcc(ParameterTypes::branch, pb, ";");
      assert(bpcc.hasMagicCookie());
      assert(bpcc.getTransactionId() == "3e565-ef7w-17.1.2.3");

      Data o;
      {
         DataStream s(o);
         bpcc.encode(s);
      }
      cerr << "!! " << o << endl;
      assert(o == "branch=z9hG4bK" RESIP_COOKIE "3e565-ef7w-17.1.2.3-14--" RESIP_COOKIE "");
   }

   {
      TR _tr("Branch parameter 5 externally spiralled branch returns");
      Data txt("=z9hG4bK" RESIP_COOKIE "" RESIP_COOKIE "3e565-ef7w-17.1.2.3-14" RESIP_COOKIE "foobie-1--" RESIP_COOKIE "");
      ParseBuffer pb(txt.data(), txt.size());

      BranchParameter bpcc(ParameterTypes::branch, pb, ";");
      assert(bpcc.hasMagicCookie());
      assert(bpcc.getTransactionId() == "" RESIP_COOKIE "3e565-ef7w-17.1.2.3-14" RESIP_COOKIE "foobie");

      Data o;
      {
         DataStream s(o);
         bpcc.encode(s);
      }
      cerr << "!! " << o << endl;
      assert(o == "branch=z9hG4bK" RESIP_COOKIE "" RESIP_COOKIE "3e565-ef7w-17.1.2.3-14" RESIP_COOKIE "foobie-1--" RESIP_COOKIE "");
   }
   
   {
      TR _tr("Branch parameter 6 not one of ours");
      Data txt("=z9hG4bK" RESIP_COOKIE "");
      ParseBuffer pb(txt.data(), txt.size());

      BranchParameter bpcc(ParameterTypes::branch, pb, ";");
      assert(bpcc.hasMagicCookie());
      assert(bpcc.getTransactionId() == "" RESIP_COOKIE "");

      Data o;
      {
         DataStream s(o);
         bpcc.encode(s);
      }
      cerr << "!! " << o << endl;
      assert(o == "branch=z9hG4bK" RESIP_COOKIE "");
   }

   {
      TR _tr("Branch parameter 7 empty ours");
      Data txt("=z9hG4bK" RESIP_COOKIE "-1--" RESIP_COOKIE "");
      ParseBuffer pb(txt.data(), txt.size());

      BranchParameter bpcc(ParameterTypes::branch, pb, ";");
      assert(bpcc.hasMagicCookie());
      assert(bpcc.getTransactionId() == "");

      Data o;
      {
         DataStream s(o);
         bpcc.encode(s);
      }
      cerr << "!! " << o << endl;
      assert(o == "branch=z9hG4bK" RESIP_COOKIE "-1--" RESIP_COOKIE "");
   }

   {
      TR _tr("Branch parameter 8 badly formed ours");
      Data txt("=z9hG4bK" RESIP_COOKIE "------" RESIP_COOKIE "");
      ParseBuffer pb(txt.data(), txt.size());

      try
      {
         BranchParameter bpcc(ParameterTypes::branch, pb, ";");
         assert(bpcc.hasMagicCookie());
         bpcc.getTransactionId();
         assert(false);
      }
      catch (ParseBuffer::Exception &e)
      {
      }
   }

   {
      TR _tr("Branch parameter 9");

      Data txt("=z9hG4bK" RESIP_COOKIE "5b42cb698e8c6827790212ac5bdade1a-1-UEEzMjc2OA..-" RESIP_COOKIE ";rport;received=64.124.66.32");
      ParseBuffer pb(txt.data(), txt.size());
      BranchParameter bp(ParameterTypes::branch, pb, ";");
      assert(bp.hasMagicCookie());
      assert(bp.getTransactionId() == "5b42cb698e8c6827790212ac5bdade1a");
      cerr << "!! " << bp.clientData() << endl;
      assert(bp.clientData() == "PA32768");
      
      bp.encode(cerr); cerr << endl;
   }

   {
      TR _tr("Branch parameter 10; magic cookie case mismatch");

      Data txt("=z9hG4bk15775865934415"); //little k
      ParseBuffer pb(txt.data(), txt.size());
      BranchParameter bp(ParameterTypes::branch, pb, ";");
      assert(bp.hasMagicCookie());
      
      assert(bp.getTransactionId() == "15775865934415");
      Data enc;
      {
         DataStream ds(enc);
         bp.encode(ds);
      }
      cout << "!! " << enc << endl;

      assert(enc == "branch=z9hG4bk15775865934415");

      BranchParameter bpCopyCons(bp);
      Data encCopyCons;
      {
         DataStream ds(encCopyCons);
         bpCopyCons.encode(ds);
      }
      cout << "!! " << encCopyCons << endl;
      assert(bp == bpCopyCons);      
      assert(encCopyCons == "branch=z9hG4bk15775865934415");

      Data txt2("=z9hG4bk1577234fhg8df");
      ParseBuffer pb2(txt2.data(), txt2.size());

      BranchParameter bpAssignOp(ParameterTypes::branch, pb2, ";");      
      bpAssignOp = bp;
      
      Data encAssignOp;
      {
         DataStream ds(encAssignOp);
         bpAssignOp.encode(ds);
      }
      cout << "!! " << encAssignOp << endl;
      assert(bp == bpAssignOp);      
      assert(encAssignOp == "branch=z9hG4bk15775865934415");
   }

   {
      TR _tr("Branch testing 1");
      char* viaString = "SIP/2.0/UDP ;branch=z9hG4bKwkl3lkjsdfjklsdjklfdsjlkdklj ;ttl=70";
      HeaderFieldValue hfv(viaString, strlen(viaString));
      Via via(&hfv, Headers::UNKNOWN);
      
      assert (via.param(p_branch).hasMagicCookie());
      assert (via.param(p_branch).getTransactionId() == "wkl3lkjsdfjklsdjklfdsjlkdklj");
      assert (via.param(p_ttl) == 70);
      assert (!via.exists(p_rport));
      
      via.param(p_rport);
      assert (via.exists(p_rport));      
      assert (via.exists(p_rport));      
      assert (!via.param(p_rport).hasValue());
   }

   {
      TR _tr("Branch testing 2");
      char* viaString = "SIP/2.0/UDP ;branch=z9hG4bKwkl3lkjsdfjklsdjklfdsjlkdklj ;ttl=70;rport";
      HeaderFieldValue hfv(viaString, strlen(viaString));
      Via via(&hfv, Headers::UNKNOWN);
      
      assert (via.param(p_branch).hasMagicCookie());
      assert (via.param(p_branch).getTransactionId() == "wkl3lkjsdfjklsdjklfdsjlkdklj");
      assert (via.param(p_ttl) == 70);
      assert (via.exists(p_rport));
      assert (!via.param(p_rport).hasValue());
   }

   {
      TR _tr("Branch testing 3");
      char* viaString = "SIP/2.0/UDP ;branch=z9hG4bKwkl3lkjsdfjklsdjklfdsjlkdklj ;ttl=70;rport=100";
      HeaderFieldValue hfv(viaString, strlen(viaString));
      Via via(&hfv, Headers::UNKNOWN);
      
      assert (via.param(p_branch).hasMagicCookie());
      assert (via.param(p_branch).getTransactionId() == "wkl3lkjsdfjklsdjklfdsjlkdklj");
      assert (via.param(p_ttl) == 70);
      assert (via.exists(p_rport));
      assert (via.param(p_rport).hasValue());
      assert (via.param(p_rport).port() == 100);
   }

   {
      TR _tr("Branch testing 4 with clientData");
      Data txt("=z9hG4bK" RESIP_COOKIE "T-i-D-314-Q2xpZW50RGF0YQ..-" RESIP_COOKIE "");

      ParseBuffer pb(txt.data(), txt.size());

      BranchParameter bpcc(ParameterTypes::branch, pb, ";");
      assert (bpcc.getTransactionId() == "T-i-D");
      assert (bpcc.clientData() == "ClientData");

      Data o;
      {
         DataStream s(o);
         bpcc.encode(s);
      }
      // cerr << "!! " << o << endl;
      assert(o == "branch=z9hG4bK" RESIP_COOKIE "T-i-D-314-Q2xpZW50RGF0YQ..-" RESIP_COOKIE "");
   }

   {
      TR _tr("Branch testing 5 with sigcomp ID");
      Data txt("=z9hG4bK" RESIP_COOKIE "T-i-D-314--PHVybjp1dWlkOmZhMzNjNzJkLTEyMWYtNDdlOC00MmUyLTFlYjZlMjRhYmE2ND4." RESIP_COOKIE "");

      ParseBuffer pb(txt.data(), txt.size());

      BranchParameter bpcc(ParameterTypes::branch, pb, ";");
      assert (bpcc.getTransactionId() == "T-i-D");
      assert (bpcc.clientData() == "");
      assert (bpcc.getSigcompCompartment() == "<urn:uuid:fa33c72d-121f-47e8-42e2-1eb6e24aba64>");

      bpcc.setSigcompCompartment("<urn:uuid:fa33c72d-121f-47e8-42e2-1eb6e24aba64>");

      Data o;
      {
         DataStream s(o);
         bpcc.encode(s);
      }
//      cerr << "!! " << o << endl;
      assert(o == "branch=z9hG4bK" RESIP_COOKIE "T-i-D-314--PHVybjp1dWlkOmZhMzNjNzJkLTEyMWYtNDdlOC00MmUyLTFlYjZlMjRhYmE2ND4." RESIP_COOKIE "");
   }

   {
      TR _tr("Branch testing 6 with sigcomp ID and Client Data");
      Data txt("=z9hG4bK" RESIP_COOKIE "T-i-D-314-Q2xpZW50RGF0YQ..-PHVybjp1dWlkOmZhMzNjNzJkLTEyMWYtNDdlOC00MmUyLTFlYjZlMjRhYmE2ND4." RESIP_COOKIE "");

      ParseBuffer pb(txt.data(), txt.size());

      BranchParameter bpcc(ParameterTypes::branch, pb, ";");
      assert (bpcc.getTransactionId() == "T-i-D");
      assert (bpcc.clientData() == "ClientData");
      assert (bpcc.getSigcompCompartment() == "<urn:uuid:fa33c72d-121f-47e8-42e2-1eb6e24aba64>");

      bpcc.setSigcompCompartment("<urn:uuid:fa33c72d-121f-47e8-42e2-1eb6e24aba64>");

      Data o;
      {
         DataStream s(o);
         bpcc.encode(s);
      }
      // cerr << "!! " << o << endl;
      assert(o == "branch=z9hG4bK" RESIP_COOKIE "T-i-D-314-Q2xpZW50RGF0YQ..-PHVybjp1dWlkOmZhMzNjNzJkLTEyMWYtNDdlOC00MmUyLTFlYjZlMjRhYmE2ND4." RESIP_COOKIE "");
   }

   //3329 tests
   {
      TR _tr( "Token + parameters parse test 3329 ");
      char *org = "digest;d-alg=md5";
      
      HeaderFieldValue hfv(org, strlen(org));
      Token tok(&hfv, Headers::UNKNOWN);
      assert(tok.value() == "digest");
      assert(tok.param(p_dAlg) == "md5");
   }

   {
      TR _tr( "Token + parameters parse test");
      char *org = "digest;d-qop=verify";
      
      HeaderFieldValue hfv(org, strlen(org));
      Token tok(&hfv, Headers::UNKNOWN);
      assert(tok.value() == "digest");
      assert(tok.param(p_dQop) == "verify");
   }

   {
      TR _tr( "Token + parameters parse test");
      char *org = "digest;d-ver=\"0000000000000000000000000000abcd\"";
      
      HeaderFieldValue hfv(org, strlen(org));
      Token tok(&hfv, Headers::UNKNOWN);
      assert(tok.value() == "digest");
      assert(tok.param(p_dVer) == "0000000000000000000000000000abcd");
   }

   {
      TR _tr( "Test CSeqCategory 1");
      Data cseqString("1 INVITE");
      HeaderFieldValue hfv(cseqString.data(), cseqString.size());
      
      CSeqCategory str(&hfv, Headers::UNKNOWN);
      assert(str.sequence() == 1);
      assert(str.method() == INVITE);
      assert(Data::from(str) == cseqString);
   }

   {
      TR _tr( "Test CSeqCategory 2");
      Data cseqString("4294967295 INVITE");
      HeaderFieldValue hfv(cseqString.data(), cseqString.size());
      
      CSeqCategory str(&hfv, Headers::UNKNOWN);
      assert(str.sequence() == 4294967295);
      assert(str.method() == INVITE);
      assert(Data::from(str) == cseqString);
   }

   {
      TR _tr( "Test RAckCategory 1");
      Data rackString("1 2 INVITE");
      HeaderFieldValue hfv(rackString.data(), rackString.size());
      
      RAckCategory str(&hfv, Headers::UNKNOWN);
      assert(str.rSequence() == 1);
      assert(str.cSequence() == 2);
      assert(str.method() == INVITE);
      assert(Data::from(str) == rackString);
   }

   {
      TR _tr( "Test RAckCategory 2");
      Data rackString("4294967294 4294967295 INVITE");
      HeaderFieldValue hfv(rackString.data(), rackString.size());
      
      RAckCategory str(&hfv, Headers::UNKNOWN);
      assert(str.rSequence() == 4294967294);
      assert(str.cSequence() == 4294967295);
      assert(str.method() == INVITE);
      assert(Data::from(str) == rackString);
   }

   cerr << "\nTEST OK" << endl;

   return 0;
}

/* ====================================================================
 * The Vovida Software License, Version 1.0 
 * 
 * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 
 * 3. The names "VOCAL", "Vovida Open Communication Application Library",
 *    and "Vovida Open Communication Application Library (VOCAL)" must
 *    not be used to endorse or promote products derived from this
 *    software without prior written permission. For written
 *    permission, please contact vocal@vovida.org.
 *
 * 4. Products derived from this software may not be called "VOCAL", nor
 *    may "VOCAL" appear in their name, without prior written
 *    permission of Vovida Networks, Inc.
 * 
 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
 * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
 * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
 * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
 * DAMAGE.
 * 
 * ====================================================================
 * 
 * This software consists of voluntary contributions made by Vovida
 * Networks, Inc. and many individuals on behalf of Vovida Networks,
 * Inc.  For more information on Vovida Networks, Inc., please see
 * <http://www.vovida.org/>.
 *
 */

/* Local Variables: */
/* c-file-style: "ellemtel" */
/* End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -