SIPSorcery.SIP.SIPMessage.ParseSIPMessage C# (CSharp) Method

ParseSIPMessage() public static method

public static ParseSIPMessage ( byte buffer, SIPEndPoint localSIPEndPoint, SIPEndPoint remoteSIPEndPoint ) : SIPMessage
buffer byte
localSIPEndPoint SIPEndPoint
remoteSIPEndPoint SIPEndPoint
return SIPMessage
        public static SIPMessage ParseSIPMessage(byte[] buffer, SIPEndPoint localSIPEndPoint, SIPEndPoint remoteSIPEndPoint)
        {
            string message = null;

            try
            {
                if(buffer == null || buffer.Length < m_minFirstLineLength)
                {
                    // Ignore.
                    return null;
                }
                else if (buffer.Length > SIPConstants.SIP_MAXIMUM_RECEIVE_LENGTH)
                {
                    throw new ApplicationException("SIP message received that exceeded the maximum allowed message length, ignoring.");
                }
                else if(!ByteBufferInfo.HasString(buffer, 0, buffer.Length, SIP_MESSAGE_IDENTIFIER, m_CRLF))
                {
                    // Message does not contain "SIP" anywhere on the first line, ignore.
                    return null;
                }
                else
                {
                    message = Encoding.UTF8.GetString(buffer, 0, buffer.Length);
                    SIPMessage sipMessage = ParseSIPMessage(message, localSIPEndPoint, remoteSIPEndPoint);

                    if (sipMessage != null)
                    {
                        sipMessage.RawBuffer = buffer;
                        return sipMessage;
                    }
                    else
                    {
                        return null;
                    }
                }
            }
            catch(Exception excp)
            {
                message = message.Replace("\n", "LF");
                message = message.Replace("\r", "CR");
                logger.Error("Exception ParseSIPMessage. " + excp.Message + "\nSIP Message=" + message + ".");
                return null;
            }
        }

Same methods

SIPMessage::ParseSIPMessage ( string message, SIPEndPoint localSIPEndPoint, SIPEndPoint remoteSIPEndPoint ) : SIPMessage

Usage Example

Example #1
0
            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("-----------------------------------------");
            }
All Usage Examples Of SIPSorcery.SIP.SIPMessage::ParseSIPMessage