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");
}
}