Пример #1
0
        public void SendRequest(SipRequest request)
        {
            Check.Require(request, "request");

            if (_logger.IsTraceEnabled)
            {
                _logger.Trace("Sending request...");
            }

            var result = new SipValidator().ValidateRequest(request);

            if (!result.IsValid)
            {
                ThrowSipException(result);
            }

            var via = request.Vias.GetTopMost();

            if (string.IsNullOrEmpty(via.Branch))
            {
                via.Branch = SipUtil.CreateBranch();
            }

            var bytes = SipFormatter.FormatMessage(request);

            SipUri sipUri = GetDestinationUri(request);

            IPEndPoint ipEndPoint = GetDestinationEndPoint(sipUri);

            SendBytes(bytes, ipEndPoint);

            if (_logger.IsDebugEnabled)
            {
                _logger.Debug("Send request '{0}' --> {1}. # bytes:{2}.", request.RequestLine.Method, ipEndPoint, bytes.Length);
            }

            if (_requestSentObserver != null)
            {
                _requestSentObserver.OnNext(request);
            }
        }
Пример #2
0
        public SipRequest CreateRequest(SipUri requestUri, string method, SipCallIdHeader callId, SipCSeqHeader cSeq, SipFromHeader from, SipToHeader to, SipViaHeader viaHeader, SipMaxForwardsHeader maxForwards)
        {
            Check.Require(requestUri, "requestUri");
            Check.Require(method, "method");
            Check.Require(callId, "callId");
            Check.Require(cSeq, "cseq");
            Check.Require(from, "from");
            Check.Require(to, "to");
            Check.Require(viaHeader, "viaHeader");
            Check.Require(maxForwards, "maxforwards");

            var message = new SipRequest();

            message.RequestLine.Method  = method;
            message.RequestLine.Uri     = requestUri;
            message.RequestLine.Version = SipConstants.SipTwoZeroString;
            message.CallId = callId;
            message.To     = to;
            message.From   = from;
            message.CSeq   = cSeq;
            message.Vias.SetTopMost(viaHeader);
            message.MaxForwards = maxForwards;
            return(message);
        }