public void ParseAsteriskOKUnitTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string sipMsg =
                "SIP/2.0 200 OK" + m_CRLF +
                "Via: SIP/2.0/UDP 213.168.225.135:5060;branch=z9hG4bKT36BdhXPlT5cqPFQQr81yMmZ37U=" + m_CRLF +
                "Via: SIP/2.0/UDP 192.168.1.2:5065;received=220.240.255.198:64216;branch=z9hG4bK7D8B6549580844AEA104BD4A837049DD" + m_CRLF +
                "From: bluesipd <sip:bluesipd@bluesipd:5065>;tag=630217013" + m_CRLF +
                "To: <sip:303@bluesipd>;tag=as46f418e9" + m_CRLF +
                "Call-ID: [email protected]" + m_CRLF +
                "CSeq: 27481 INVITE" + m_CRLF +
                "User-Agent: asterisk" + m_CRLF +
                "Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY" + m_CRLF +
                "Contact: <sip:[email protected]>" + m_CRLF +
                "Content-Type: application/sdp" + m_CRLF +
                "Content-Length: 352" + m_CRLF +
                m_CRLF +
                "v=0" + m_CRLF +
                "o=root 24710 24712 IN IP4 213.168.225.133" + m_CRLF +
                "s=session" + m_CRLF +
                "c=IN IP4 213.168.225.133" + m_CRLF +
                "t=0 0" + m_CRLF +
                "m=audio 18656 RTP/AVP 0 8 18 3 97 111 101" + m_CRLF +
                "a=rtpmap:0 PCMU/8000" + m_CRLF +
                "a=rtpmap:8 PCMA/8000" + m_CRLF +
                "a=rtpmap:18 G729/8000" + m_CRLF +
                "a=rtpmap:3 GSM/8000" + m_CRLF +
                "a=rtpmap:97 iLBC/8000" + m_CRLF +
                "a=rtpmap:111 G726-32/8000" + m_CRLF +
                "a=rtpmap:101 telephone-event/8000" + m_CRLF +
                "a=fmtp:101 0-16" + m_CRLF +
                "a=silenceSupp:off - - - -" + m_CRLF;

            SIPMessage  sipMessage = SIPMessage.ParseSIPMessage(Encoding.UTF8.GetBytes(sipMsg), null, null);
            SIPResponse okResp     = SIPResponse.ParseSIPResponse(sipMessage);

            Assert.IsTrue(okResp.Status == SIPResponseStatusCodesEnum.Ok, "The SIP response status was not parsed correctly.");
            Assert.IsTrue(okResp.Body.Length == 352, "The SIP response body length was not correct.");

            Console.WriteLine("-----------------------------------------");
        }
        public void ParseMultiLineViaResponse()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string sipMsg =
                "SIP/2.0 200 OK" + m_CRLF +
                "Via: SIP/2.0/UDP 194.213.29.100:5060;branch=z9hG4bK5feb18267ce40fb05969b4ba843681dbfc9ffcff, SIP/2.0/UDP 194.213.29.54:5061;branch=z9hG4bK52b6a8b7" + m_CRLF +
                "Record-Route: <sip:194.213.29.100:5060;lr>" + m_CRLF +
                "From: Unknown <sip:[email protected]:5061>;tag=as58cbdbd1" + m_CRLF +
                "To: <sip:[email protected]:5060>;tag=1144090013" + m_CRLF +
                "Call-ID: [email protected]" + m_CRLF +
                "CSeq: 102 INVITE" + m_CRLF +
                "Contact: <sip:[email protected]:5060>" + m_CRLF +
                "Server: Patton SN4634 3BIS 00A0BA04469B R5.3 2009-01-15 H323 SIP BRI M5T SIP Stack/4.0.28.28" + m_CRLF +
                "Supported: replaces" + m_CRLF +
                "Content-Type: application/sdp" + m_CRLF +
                "Content-Length: 298" + m_CRLF +
                m_CRLF +
                "v=0" + m_CRLF +
                "o=MxSIP 0 56 IN IP4 10.10.10.155" + m_CRLF +
                "s=SIP Call" + m_CRLF +
                "c=IN IP4 10.10.10.155" + m_CRLF +
                "t=0 0" + m_CRLF +
                "m=audio 4974 RTP/AVP 0 18 8 101" + m_CRLF +
                "a=rtpmap:0 PCMU/8000" + m_CRLF +
                "a=rtpmap:18 G729/8000" + m_CRLF +
                "a=rtpmap:8 PCMA/8000" + m_CRLF +
                "a=rtpmap:101 telephone-event/8000" + m_CRLF +
                "a=fmtp:18 annexb=no" + m_CRLF +
                "a=fmtp:101 0-16" + m_CRLF +
                "a=sendrecv" + m_CRLF +
                "m=video 0 RTP/AVP 31 34 103 99";

            SIPMessage  sipMessage = SIPMessage.ParseSIPMessage(Encoding.UTF8.GetBytes(sipMsg), null, null);
            SIPResponse okResp     = SIPResponse.ParseSIPResponse(sipMessage);

            Assert.IsTrue(okResp.Header.Vias.Length == 2, "The wrong number of Record-Route headers were present in the parsed response.");
            Assert.IsTrue(okResp.Header.Vias.TopViaHeader.ContactAddress == "194.213.29.100:5060", "The top via contact address was not ocrrectly parsed.");

            Console.WriteLine("-----------------------------------------");
        }
        public void ParseMSCOkResponse()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string sipMsg =
                "SIP/2.0 200 OK" + m_CRLF +
                "From: Blue Face<sip:[email protected]>;tag=as5fd53de7" + m_CRLF +
                "To: sip:[email protected];tag=MTHf2-ol1Yn0" + m_CRLF +
                "Call-ID: [email protected]:5061" + m_CRLF +
                "CSeq: 102 INVITE" + m_CRLF +
                "Via: SIP/2.0/UDP 213.168.225.133:5060;branch=z9hG4bKG+WGOVwLyT6vOW9s" + m_CRLF +
                "Via: SIP/2.0/UDP 213.168.225.133:5061;branch=z9hG4bK09db9c73" + m_CRLF +
                "Contact: +3535xxx<sip:[email protected]:5061>" + m_CRLF +
                "User-Agent: MSC/VC510  Build-Date Nov  7 2005" + m_CRLF +
                "Allow: INVITE,BYE,CANCEL,OPTIONS,PRACK,NOTIFY,UPDATE,REFER" + m_CRLF +
                "Supported: timer,replaces" + m_CRLF +
                "Record-Route: <sip:213.168.225.133:5060;lr>,<sip:213.168.225.133:5061;lr>" + m_CRLF +
                "Content-Type: application/sdp" + m_CRLF +
                "Content-Length: 182" + m_CRLF +
                m_CRLF +
                "v=0" + m_CRLF +
                "o=xxxxxxxxx 75160 1 IN IP4 127.127.127.30" + m_CRLF +
                "s=-" + m_CRLF +
                "c=IN IP4 127.127.127.30" + m_CRLF +
                "t=0 0" + m_CRLF +
                "m=audio 8002 RTP/AVP 0 101" + m_CRLF +
                "a=rtpmap:0 PCMU/8000" + m_CRLF +
                "a=rtpmap:101 telephone-event/8000" + m_CRLF +
                "a=ptime:20";

            SIPMessage  sipMessage = SIPMessage.ParseSIPMessage(Encoding.UTF8.GetBytes(sipMsg), null, null);
            SIPResponse okResp     = SIPResponse.ParseSIPResponse(sipMessage);

            Console.WriteLine("To: " + okResp.Header.To.ToString());

            Assert.AreEqual(SIPResponseStatusCodesEnum.Ok, okResp.Status, "Response should have been ok.");
            Assert.AreEqual("127.0.0.1", okResp.Header.To.ToURI.Host, "To URI host was not parsed correctly.");

            Console.WriteLine("-----------------------------------------");
        }
        public void ParseForbiddenResponse()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string sipMsg = "SIP/2.0 403 Forbidden" + m_CRLF +
                            "Via: SIP/2.0/UDP 192.168.1.1;branch=z9hG4bKbcb78f72d221beec" + m_CRLF +
                            "From: <sip:sip.blueface.ie>;tag=9a4c86234adcc297" + m_CRLF +
                            "To: <sip:sip.blueface.ie>;tag=as6900b876" + m_CRLF +
                            "Call-ID: [email protected]" + m_CRLF +
                            "CSeq: 100 REGISTER" + m_CRLF +
                            "User-Agent: asterisk" + m_CRLF +
                            "Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY" + m_CRLF +
                            "Contact: <sip:[email protected]>" + m_CRLF +
                            "Content-Length: 0" + m_CRLF + m_CRLF;

            SIPMessage  sipMessage    = SIPMessage.ParseSIPMessage(Encoding.UTF8.GetBytes(sipMsg), null, null);
            SIPResponse forbiddenResp = SIPResponse.ParseSIPResponse(sipMessage);

            Assert.IsTrue(forbiddenResp.Status == SIPResponseStatusCodesEnum.Forbidden, "The SIP response status was not parsed correctly.");

            Console.WriteLine("-----------------------------------------");
        }
        public void ParseResponseNoEndDoubleCRLFUnitTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string sipMsg =
                "SIP/2.0 100 Trying" + CRLF +
                "Via: SIP/2.0/UDP 213.168.225.135:5060;branch=z9hG4bKD+ta2mJ+C+VV/L50aPO1lFJnrag=" + CRLF +
                "Via: SIP/2.0/UDP 192.168.1.2:5065;received=220.240.255.198:64193;branch=z9hG4bKB86FC8D2431F49E9862D1EE439C78AD8" + CRLF +
                "From: bluesipd <sip:bluesipd@bluesipd:5065>;tag=3272744142" + CRLF +
                "To: <sip:303@bluesipd>" + CRLF +
                "Call-ID: [email protected]" + CRLF +
                "CSeq: 45560 INVITE" + CRLF +
                "User-Agent: asterisk" + CRLF +
                "Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY" + CRLF +
                "Contact: <sip:[email protected]>" + CRLF +
                "Content-Length: 0" + CRLF;

            SIPMessage sipMessage = SIPMessage.ParseSIPMessage(Encoding.UTF8.GetBytes(sipMsg), null, null);

            Assert.IsTrue(sipMessage != null, "The SIP message not parsed correctly.");

            Console.WriteLine("-----------------------------------------");
        }
        public void ParseCiscoOptionsResponseUnitTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string sipMsg =
                "SIP/2.0 200 OK" + CRLF +
                "Via: SIP/2.0/UDP 213.168.225.133:5060;branch=z9hG4bK7ae332e73550dbdf2f159061651e7ed5bb88ac52, SIP/2.0/UDP 194.213.29.52:5064;branch=z9hG4bK1121681627" + CRLF +
                "From: <sip:[email protected]:5064>;tag=8341482660" + CRLF +
                "To: <sip:[email protected]:5060>;tag=000e38e46c60ef28651381fe-201e6ab1" + CRLF +
                "Call-ID: [email protected]" + CRLF +
                "Date: Wed, 29 Nov 2006 22:31:58 GMT" + CRLF +
                "CSeq: 148 OPTIONS" + CRLF +
                "Server: CSCO/7" + CRLF +
                "Content-Type: application/sdp" + CRLF +
                "Allow: OPTIONS,INVITE,BYE,CANCEL,REGISTER,ACK,NOTIFY,REFER" + CRLF +
                "Content-Length: 193" + CRLF +
                CRLF +
                "v=0" + CRLF +
                "o=Cisco-SIPUA (null) (null) IN IP4 87.198.196.121" + CRLF +
                "s=SIP Call" + CRLF +
                "c=IN IP4 87.198.196.121" + CRLF +
                "t=0 0" + CRLF +
                "m=audio 1 RTP/AVP 18 0 8" + CRLF +
                "a=rtpmap:18 G729/8000" + CRLF +
                "a=rtpmap:0 PCMU/8000" + CRLF +
                "a=rtpmap:8 PCMA/8000" + CRLF +
                CRLF;

            SIPMessage  sipMessage  = SIPMessage.ParseSIPMessage(Encoding.UTF8.GetBytes(sipMsg), null, null);
            SIPResponse sipResponse = SIPResponse.ParseSIPResponse(sipMessage);

            Assert.IsTrue(sipMessage != null, "The SIP message not parsed correctly.");
            Assert.IsTrue(sipResponse.Header.Vias.Length == 2, "The SIP reponse did not end up with the right number of Via headers.");

            Console.WriteLine("-----------------------------------------");
        }
        public void ParseOptionsResponse()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string sipMsg =
                "SIP/2.0 200 OK" + m_CRLF +
                "Via: SIP/2.0/UDP 194.213.29.11:5060;branch=z9hG4bK330f55c874" + m_CRLF +
                "From: Anonymous <sip:194.213.29.11:5060>;tag=6859154930" + m_CRLF +
                "To: <sip:[email protected]:10062>;tag=0013c339acec0fe007b80bbf-30071da3" + m_CRLF +
                "Call-ID: [email protected]" + m_CRLF +
                "Date: Mon, 01 May 2006 13:47:24 GMT" + m_CRLF +
                "CSeq: 915 OPTIONS" + m_CRLF +
                "Server: CSCO/7" + m_CRLF +
                "Content-Type: application/sdp" + m_CRLF +
                "Content-Length: 247" + m_CRLF +
                "Allow: OPTIONS,INVITE,BYE,CANCEL,REGISTER,ACK,NOTIFY,REFER" + m_CRLF +
                m_CRLF +
                "v=0" + m_CRLF +
                "o=Cisco-SIPUA (null) (null) IN IP4 192.168.1.100" + m_CRLF +
                "s=SIP Call" + m_CRLF +
                "c=IN IP4 192.168.1.100" + m_CRLF +
                "t=0 0" + m_CRLF +
                "m=audio 1 RTP/AVP 0 8 18 101" + m_CRLF +
                "a=rtpmap:0 PCMU/8000" + m_CRLF +
                "a=rtpmap:8 PCMA/8000" + m_CRLF +
                "a=rtpmap:18 G729/8000" + m_CRLF +
                "a=rtpmap:101 telephone-event/8000" + m_CRLF +
                "a=fmtp:101 0-15" + m_CRLF + m_CRLF;

            SIPMessage  sipMessage  = SIPMessage.ParseSIPMessage(Encoding.UTF8.GetBytes(sipMsg), null, null);
            SIPResponse optionsResp = SIPResponse.ParseSIPResponse(sipMessage);

            Assert.IsTrue(optionsResp.Status == SIPResponseStatusCodesEnum.Ok, "The SIP response status was not parsed correctly.");

            Console.WriteLine("-----------------------------------------");
        }