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.LogWarning("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.LogError("Exception parsing SIP Request. " + excp.Message); logger.LogError(sipMessage.RawMessage); throw new SIPValidationException(SIPValidationFieldsEnum.Request, "Unknown error parsing SIP Request"); } }