SIPSorcery.SIP.SIPRequest.ParseSIPRequest C# (CSharp) Method

ParseSIPRequest() public static method

public static ParseSIPRequest ( SIPMessage sipMessage ) : SIPRequest
sipMessage SIPMessage
return SIPRequest
        public static SIPRequest ParseSIPRequest(SIPMessage sipMessage)
        {
            string uriStr = null;

            try
            {
                SIPRequest sipRequest = new SIPRequest();
                sipRequest.LocalSIPEndPoint = sipMessage.LocalSIPEndPoint;
                sipRequest.RemoteSIPEndPoint = sipMessage.RemoteSIPEndPoint;

                string statusLine = sipMessage.FirstLine;

                int firstSpacePosn = statusLine.IndexOf(" ");

                string method = statusLine.Substring(0, firstSpacePosn).Trim();
                sipRequest.Method = SIPMethods.GetMethod(method);
                if (sipRequest.Method == SIPMethodsEnum.UNKNOWN)
                {
                    sipRequest.UnknownMethod = method;
                    logger.Warn("Unknown SIP method received " + sipRequest.UnknownMethod + ".");
                }

                statusLine = statusLine.Substring(firstSpacePosn).Trim();
                int secondSpacePosn = statusLine.IndexOf(" ");

                if (secondSpacePosn != -1)
                {
                    uriStr = statusLine.Substring(0, secondSpacePosn);

                    sipRequest.URI = SIPURI.ParseSIPURI(uriStr);
                    sipRequest.SIPVersion = statusLine.Substring(secondSpacePosn, statusLine.Length - secondSpacePosn).Trim();
                    sipRequest.Header = SIPHeader.ParseSIPHeaders(sipMessage.SIPHeaders);
                    sipRequest.Body = sipMessage.Body;

                    return sipRequest;
                }
                else
                {
                    throw new SIPValidationException(SIPValidationFieldsEnum.Request, "URI was missing on Request.");
                }
            }
            catch (SIPValidationException)
            {
                throw;
            }
            catch (Exception excp)
            {
                logger.Error("Exception parsing SIP Request. " + excp.Message);
                logger.Error(sipMessage.RawMessage);
                throw new SIPValidationException(SIPValidationFieldsEnum.Request, "Unknown error parsing SIP Request");
            }
        }

Same methods

SIPRequest::ParseSIPRequest ( string sipMessageStr ) : SIPRequest

Usage Example

Example #1
0
            public void CreateTransactionUnitTest()
            {
                Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name);

                string sipRequestStr =
                    "INVITE sip:[email protected];switchtag=902888 SIP/2.0" + m_CRLF +
                    "Record-Route: <sip:2.3.4.5;ftag=9307C640-33C;lr=on>" + m_CRLF +
                    "Via: SIP/2.0/UDP  5.6.7.2:5060" + m_CRLF +
                    "Via: SIP/2.0/UDP 1.2.3.4;branch=z9hG4bKa7ac.2bfad091.0" + m_CRLF +
                    "From: \"unknown\" <sip:00.000.00.0>;tag=9307C640-33C" + m_CRLF +
                    "To: <sip:[email protected]>" + m_CRLF +
                    "Date: Thu, 21 Feb 2008 01:46:30 GMT" + m_CRLF +
                    "Call-ID: A8706191-DF5511DC-B886ED7B-395C3F7E" + m_CRLF +
                    "Supported: timer,100rel" + m_CRLF +
                    "Min-SE:  1800" + m_CRLF +
                    "Cisco-Guid: 2825897321-3746894300-3095653755-962346878" + m_CRLF +
                    "User-Agent: Cisco-SIPGateway/IOS-12.x" + m_CRLF +
                    "Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, COMET, REFER, SUBSCRIBE, NOTIFY, INFO" + m_CRLF +
                    "CSeq: 101 INVITE" + m_CRLF +
                    "Max-Forwards: 5" + m_CRLF +
                    "Timestamp: 1203558390" + m_CRLF +
                    "Contact: <sip:1.2.3.4:5060>" + m_CRLF +
                    "Expires: 180" + m_CRLF +
                    "Allow-Events: telephone-event" + m_CRLF +
                    "Content-Type: application/sdp" + m_CRLF +
                    "Content-Length: 370" + m_CRLF +
                    m_CRLF +
                    "v=0" + m_CRLF +
                    "o=CiscoSystemsSIP-GW-UserAgent 9312 7567 IN IP4 00.00.00.0" + m_CRLF +
                    "s=SIP Call" + m_CRLF +
                    "c=IN IP4 00.000.00.0" + m_CRLF +
                    "t=0 0" + m_CRLF +
                    "m=audio 16434 RTP/AVP 8 0 4 18 3 101" + m_CRLF +
                    "c=IN IP4 00.000.00.0" + m_CRLF +
                    "a=rtpmap:8 PCMA/8000" + m_CRLF +
                    "a=rtpmap:0 PCMU/8000" + m_CRLF +
                    "a=rtpmap:4 G723/8000" + m_CRLF +
                    "a=fmtp:4 annexa=no" + m_CRLF +
                    "a=rtpmap:18 G729/8000" + m_CRLF +
                    "a=fmtp:18 annexb=no" + m_CRLF +
                    "a=rtpmap:3 GSM/8000" + m_CRLF +
                    "a=rtpmap:101 telepho";

                SIPRequest           request           = SIPRequest.ParseSIPRequest(sipRequestStr);
                SIPTransactionEngine transactionEngine = new SIPTransactionEngine();
                SIPTransport         sipTransport      = new SIPTransport(MockSIPDNSManager.Resolve, transactionEngine);
                SIPEndPoint          dummySIPEndPoint  = new SIPEndPoint(new IPEndPoint(IPAddress.Loopback, 1234));
                SIPTransaction       transaction       = sipTransport.CreateUACTransaction(request, dummySIPEndPoint, dummySIPEndPoint, null);

                Assert.IsTrue(transaction.TransactionRequest.URI.ToString() == "sip:[email protected];switchtag=902888", "Transaction request URI was incorrect.");
            }
All Usage Examples Of SIPSorcery.SIP.SIPRequest::ParseSIPRequest