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