public void OnRequest(SipRequestLine requestLine) { if (_logger.IsDebugEnabled) _logger.Debug("OnRequest called. Method:'{0}', Uri:'{1}'", requestLine.Method, requestLine.Uri.FormatToString()); _message = _messageFactory.CreateRequest(requestLine); }
public SipParser2(SipMessageFactory messageFactory, SipHeaderFactory headerFactory) { _logger.Trace("Constructor called."); _messageFactory = messageFactory; _headerFactory = headerFactory; _message = null; }
public void OnResponse(SipStatusLine statusLine) { if (_logger.IsDebugEnabled) _logger.Debug("OnResponse called. StatusCode:'{0}', ReasonPhrase:'{1}'", statusLine.StatusCode, statusLine.ReasonPhrase); _message = _messageFactory.CreateResponse(statusLine); }
private void OnFirstLine(string firstLine) { if (_logger.IsDebugEnabled) _logger.Debug("OnFirstLine called. firstLine:'{0}'", firstLine); if (firstLine.EndsWith(SipConstants.SipTwoZeroString)) { if (_logger.IsDebugEnabled) _logger.Debug("Firstline is expected to be a SipRequestLine. Try parsing..."); var requestLine = new SipRequestLineParser().Parse(firstLine); _message = _messageFactory.CreateRequest(requestLine); if (_logger.IsDebugEnabled) _logger.Debug("RequestLine parsed. Continuing SipRequest parsing..."); } else if (firstLine.StartsWith(SipConstants.SipTwoZeroString)) { if (_logger.IsDebugEnabled) _logger.Debug("Firstline is expected to be a SipStatusLine. Try parsing..."); var statusLine = new SipStatusLineParser().Parse(firstLine); _message = _messageFactory.CreateResponse(statusLine); if (_logger.IsDebugEnabled) _logger.Debug("SipStatusLine parsed. Continuing SipResponse parsing.."); } else { if (_logger.IsDebugEnabled) _logger.Debug("Firstline format could not be recognized."); throw new ParseException(ExceptionMessage.InvalidFirstLineFormat); } }
public void OnRequest(SipRequestLine requestLine) { if (_logger.IsDebugEnabled) { _logger.Debug("OnRequest called. Method:'{0}', Uri:'{1}'", requestLine.Method, requestLine.Uri.FormatToString()); } _message = _messageFactory.CreateRequest(requestLine); }
public void OnResponse(SipStatusLine statusLine) { if (_logger.IsDebugEnabled) { _logger.Debug("OnResponse called. StatusCode:'{0}', ReasonPhrase:'{1}'", statusLine.StatusCode, statusLine.ReasonPhrase); } _message = _messageFactory.CreateResponse(statusLine); }
internal static string GetDialogId(SipMessage message, bool isServer) { Check.Require(message, "message"); string localTag = isServer ? message.To.Tag : message.From.Tag; string remoteTag = isServer ? message.From.Tag : message.To.Tag; return(message.CallId.Value + ":" + localTag + ":" + remoteTag); }
private string FindFirstMissingRequiredHeader(SipMessage sipMessage) { if (sipMessage.CallId == null) return SipHeaderNames.CallId; if (sipMessage.CSeq == null) return SipHeaderNames.CSeq; if (sipMessage.MaxForwards == null) return SipHeaderNames.MaxForwards; if (sipMessage.To == null) return SipHeaderNames.To; if (sipMessage.From == null) return SipHeaderNames.From; if (sipMessage.Vias == null || sipMessage.Vias.Count == 0) return SipHeaderNames.Via; return null; }
private SipContext CreateSipContext(SipMessage message, Datagram datagram) { var request = message as SipRequest; var response = message as SipResponse; var c = new SipContext(); c.Request = request; c.Response = response; c.RemoteEndPoint = datagram.RemoteEndPoint; c.LocalEndPoint = datagram.LocalEndPoint; return c; }
private static void FormatHeaders(SipMessage message, StringBuilder b) { foreach (var header in message.GetHeaders()) { if (header.IsList) { b.Append(FormatHeader((IEnumerable <SipHeader>)header)); } else { b.Append(FormatHeader((SipHeader)header)); } } }
private void OnFirstLine(string firstLine) { if (_logger.IsDebugEnabled) { _logger.Debug("OnFirstLine called. firstLine:'{0}'", firstLine); } if (firstLine.EndsWith(SipConstants.SipTwoZeroString)) { if (_logger.IsDebugEnabled) { _logger.Debug("Firstline is expected to be a SipRequestLine. Try parsing..."); } var requestLine = new SipRequestLineParser().Parse(firstLine); _message = _messageFactory.CreateRequest(requestLine); if (_logger.IsDebugEnabled) { _logger.Debug("RequestLine parsed. Continuing SipRequest parsing..."); } } else if (firstLine.StartsWith(SipConstants.SipTwoZeroString)) { if (_logger.IsDebugEnabled) { _logger.Debug("Firstline is expected to be a SipStatusLine. Try parsing..."); } var statusLine = new SipStatusLineParser().Parse(firstLine); _message = _messageFactory.CreateResponse(statusLine); if (_logger.IsDebugEnabled) { _logger.Debug("SipStatusLine parsed. Continuing SipResponse parsing.."); } } else { if (_logger.IsDebugEnabled) { _logger.Debug("Firstline format could not be recognized."); } throw new ParseException(ExceptionMessage.InvalidFirstLineFormat); } }
public static byte[] FormatMessage(SipMessage message) { var envelope = FormatMessageEnvelope(message, true); var msg = SipUtil.ToUtf8Bytes(envelope); if (message.Body == null) { return(msg); } var bytes = new List <byte>(msg); bytes.AddRange(message.Body); return(bytes.ToArray()); }
public static string FormatMessageEnvelope(SipMessage message, bool isNewlineTerminated = false) { var b = new StringBuilder(); if (message is SipRequest) { b.AppendLine(((SipRequest)message).RequestLine.FormatToString()); } else { b.AppendLine(((SipResponse)message).StatusLine.FormatToString()); } FormatHeaders(message, b); if (isNewlineTerminated) { b.AppendLine(string.Empty); } return(b.ToString()); }
public ValidateMessageResult ValidateMessage(SipMessage message) { //testing commit if(message is SipRequest) { var request = message as SipRequest; var result = new ValidateRequestResult(); result.MissingRequiredHeader = FindFirstMissingRequiredHeader(message); result.HasUnSupportedSipVersion = !ValidateSipVersion(request.RequestLine.Version); if (result.HasRequiredHeadersMissing) return result; result.HasInvalidSCeqMethod = !ValidateCSeqMethod(request); result.InviteHasNoContactHeader = !ValidateContactHeader(request); return result; } else { var response = message as SipResponse; var result = new ValidateMessageResult(); result.MissingRequiredHeader = FindFirstMissingRequiredHeader(message); result.HasUnSupportedSipVersion = !ValidateSipVersion(response.StatusLine.Version); return result; } }
internal static string GetClientTransactionId(SipMessage message) { /*concatenate branch and command. Branch only does not suffice bc CANCEL request have the same branch as the request they need to cancel. To cover id-uniqueness * also for CANCEL requests, we add the Cseq Command.*/ return message.Vias.GetTopMost().Branch + "-" + message.CSeq.Command; }
internal static string GetClientTransactionId(SipMessage message) { /*concatenate branch and command. Branch only does not suffice bc CANCEL request have the same branch as the request they need to cancel. To cover id-uniqueness * also for CANCEL requests, we add the Cseq Command.*/ return(message.Vias.GetTopMost().Branch + "-" + message.CSeq.Command); }
internal static string GetDialogId(SipMessage message, bool isServer) { Check.Require(message, "message"); string localTag = isServer ? message.To.Tag : message.From.Tag; string remoteTag = isServer ? message.From.Tag : message.To.Tag; return message.CallId.Value + ":" + localTag + ":" + remoteTag; }
private SipContext CreateSipContext(SipMessage message, Datagram datagram) { var request = message as SipRequest; var response = message as SipResponse; if (request != null) { _logger.Debug("Request Received '" + request.RequestLine.Method + " " + request.RequestLine.Uri.FormatToString() + "' from " + datagram.RemoteEndPoint); } else { _logger.Debug("Response Received '" + response.StatusLine.StatusCode + " " + response.StatusLine.ReasonPhrase + "' from " + datagram.RemoteEndPoint); } var c = new SipContext(); _logger.Trace("Parse on parser context completed."); c.Request = request; c.Response = response; c.RemoteEndPoint = datagram.RemoteEndPoint; c.LocalEndPoint = datagram.LocalEndPoint; return c; }