예제 #1
0
        /// <summary>
        /// Builds the REFER request to transfer an established call.
        /// </summary>
        /// <param name="sipDialogue">A SIP dialogue object representing the established call.</param>
        /// <param name="referToUri">The SIP URI to transfer the call to.</param>
        /// <returns>A SIP REFER request.</returns>
        private static SIPRequest GetReferRequest(SIPClientUserAgent uac, SIPURI referToUri)
        {
            SIPDialogue sipDialogue = uac.SIPDialogue;

            SIPRequest referRequest = new SIPRequest(SIPMethodsEnum.REFER, sipDialogue.RemoteTarget);

            referRequest.SetSendFromHints(uac.ServerTransaction.TransactionRequest.LocalSIPEndPoint);

            SIPFromHeader referFromHeader = SIPFromHeader.ParseFromHeader(sipDialogue.LocalUserField.ToString());
            SIPToHeader   referToHeader   = SIPToHeader.ParseToHeader(sipDialogue.RemoteUserField.ToString());
            int           cseq            = sipDialogue.CSeq + 1;

            sipDialogue.CSeq++;

            SIPHeader referHeader = new SIPHeader(referFromHeader, referToHeader, cseq, sipDialogue.CallId);

            referHeader.CSeqMethod            = SIPMethodsEnum.REFER;
            referRequest.Header               = referHeader;
            referRequest.Header.Routes        = sipDialogue.RouteSet;
            referRequest.Header.ProxySendFrom = sipDialogue.ProxySendFrom;
            referRequest.Header.Vias.PushViaHeader(SIPViaHeader.GetDefaultSIPViaHeader());
            referRequest.Header.ReferTo = referToUri.ToString();
            referRequest.Header.Contact = new List <SIPContactHeader>()
            {
                SIPContactHeader.GetDefaultSIPContactHeader()
            };

            return(referRequest);
        }
예제 #2
0
파일: SIPFlow.cs 프로젝트: xycui/sipsorcery
        public SIPRequest GetSIPRequest(SIPMethodsEnum sipMethod, string requestURIStr, string fromURIStr, int cseq, string callId, string contentType, string body)
        {
            SIPURI requestURI = (requestURIStr.StartsWith("sip:")) ? SIPURI.ParseSIPURI(requestURIStr) : SIPURI.ParseSIPURI("sip:" + requestURIStr);
            SIPURI fromURI    = (fromURIStr.StartsWith("sip:")) ? SIPURI.ParseSIPURI(fromURIStr) : SIPURI.ParseSIPURI("sip:" + fromURIStr);

            SIPFromHeader fromHeader = new SIPFromHeader(null, fromURI, CallProperties.CreateNewTag());
            SIPToHeader   toHeader   = new SIPToHeader(null, requestURI, null);

            SIPRequest sipRequest = new SIPRequest(sipMethod, requestURI);

            IPEndPoint localSIPEndPoint = m_sipTransport.GetIPEndPointsList()[0];
            SIPHeader  sipHeader        = new SIPHeader(fromHeader, toHeader, cseq, callId);

            sipHeader.Contact    = SIPContactHeader.ParseContactHeader("sip:" + localSIPEndPoint.ToString());
            sipHeader.CSeqMethod = sipMethod;
            sipRequest.Header    = sipHeader;

            SIPViaHeader viaHeader = new SIPViaHeader(localSIPEndPoint.Address.ToString(), localSIPEndPoint.Port, CallProperties.CreateBranchId());

            sipRequest.Header.Via.PushViaHeader(viaHeader);

            if (body != null && body.Trim().Length > 0)
            {
                sipRequest.Body = body;
                //sipRequest.Body = "Signal=5\r\nDuration=250";
                //sipRequest.Body = "<rtcp>blah blah blah</rtcp>";
                sipRequest.Header.ContentLength = sipRequest.Body.Length;
                sipRequest.Header.ContentType   = contentType;
            }

            return(sipRequest);
        }
예제 #3
0
        /// <summary>
        ///  Invite请求消息
        /// </summary>
        /// <param name="localEP"></param>
        /// <param name="remoteEP"></param>
        /// <param name="request"></param>
        private void InviteHandle(SIPEndPoint localEP, SIPEndPoint remoteEP, SIPRequest request)
        {
            _byeRemoteEP = remoteEP;
            int[] port   = SetMediaPort();
            var   trying = GetResponse(localEP, remoteEP, SIPResponseStatusCodesEnum.Trying, "", request);

            _transport.SendResponse(trying);
            //Thread.Sleep(200);
            SIPResponse audioOK = GetResponse(localEP, remoteEP, SIPResponseStatusCodesEnum.Ok, "", request);

            audioOK.Header.ContentType = "application/sdp";
            SIPURI           localUri = new SIPURI(LocalSIPId, LocalEP.ToHost(), "");
            SIPContactHeader contact  = new SIPContactHeader(null, localUri);

            audioOK.Header.Contact = new List <SIPContactHeader>
            {
                contact
            };
            //SDP
            audioOK.Body   = SetMediaAudio(localEP.Address.ToString(), port[0], request.URI.User);
            _audioResponse = audioOK;
            _transport.SendResponse(audioOK);
            int    recvPort = GetReceivePort(request.Body, SDPMediaTypesEnum.audio);
            string ip       = GetReceiveIP(request.Body);

            _audioRemoteEP = new IPEndPoint(IPAddress.Parse(ip), recvPort);
            if (_audioChannel == null)
            {
                _audioChannel = new UDPChannel(TcpConnectMode.active, IPAddress.Any, port, ProtocolType.Udp, false, recvPort);
            }
            _audioChannel.Start();
        }
예제 #4
0
        public SIPResponse GetOkResponse(string contentType, string messageBody)
        {
            SIPResponse okResponse = new SIPResponse(SIPResponseStatusCodesEnum.Ok, null);

            okResponse.SetSendFromHints(TransactionRequest.LocalSIPEndPoint);

            SIPHeader requestHeader = TransactionRequest.Header;

            okResponse.Header = new SIPHeader(
                SIPContactHeader.GetDefaultSIPContactHeader(TransactionRequest.URI.Scheme),
                requestHeader.From, requestHeader.To,
                requestHeader.CSeq,
                requestHeader.CallId);
            okResponse.Header.To.ToTag     = m_localTag;
            okResponse.Header.CSeqMethod   = requestHeader.CSeqMethod;
            okResponse.Header.Vias         = requestHeader.Vias;
            okResponse.Header.Server       = SIPConstants.SipUserAgentVersionString;
            okResponse.Header.MaxForwards  = Int32.MinValue;
            okResponse.Header.RecordRoutes = requestHeader.RecordRoutes;
            okResponse.Header.Supported    = SIPExtensionHeaders.REPLACES + ", " + SIPExtensionHeaders.NO_REFER_SUB
                                             + ((PrackSupported == true) ? ", " + SIPExtensionHeaders.PRACK : "");

            okResponse.Body = messageBody;
            okResponse.Header.ContentType   = contentType;
            okResponse.Header.ContentLength = (messageBody != null) ? messageBody.Length : 0;

            return(okResponse);
        }
예제 #5
0
        public SIPResponse GetOkResponse(string contentType, string messageBody)
        {
            try
            {
                SIPResponse okResponse = new SIPResponse(SIPResponseStatusCodesEnum.Ok, null);
                okResponse.SetSendFromHints(TransactionRequest.LocalSIPEndPoint);

                SIPHeader requestHeader = TransactionRequest.Header;
                okResponse.Header              = new SIPHeader(SIPContactHeader.GetDefaultSIPContactHeader(), requestHeader.From, requestHeader.To, requestHeader.CSeq, requestHeader.CallId);
                okResponse.Header.To.ToTag     = m_localTag;
                okResponse.Header.CSeqMethod   = requestHeader.CSeqMethod;
                okResponse.Header.Vias         = requestHeader.Vias;
                okResponse.Header.Server       = m_sipServerAgent;
                okResponse.Header.MaxForwards  = Int32.MinValue;
                okResponse.Header.RecordRoutes = requestHeader.RecordRoutes;
                okResponse.Header.Supported    = (PrackSupported == true) ? SIPExtensionHeaders.PRACK : null;

                okResponse.Body = messageBody;
                okResponse.Header.ContentType   = contentType;
                okResponse.Header.ContentLength = (messageBody != null) ? messageBody.Length : 0;

                return(okResponse);
            }
            catch (Exception excp)
            {
                logger.LogError("Exception GetOkResponse. " + excp.Message);
                throw excp;
            }
        }
예제 #6
0
        public void Redirect(SIPResponseStatusCodesEnum redirectCode, SIPURI redirectURI, string[] customHeaders)
        {
            try
            {
                if (m_uasTransaction.TransactionFinalResponse == null)
                {
                    SIPResponse redirectResponse = SIPResponse.GetResponse(m_uasTransaction.TransactionRequest, redirectCode, null);
                    redirectResponse.Header.Contact = SIPContactHeader.CreateSIPContactList(redirectURI);

                    if (customHeaders != null && customHeaders.Length > 0)
                    {
                        foreach (string header in customHeaders)
                        {
                            redirectResponse.Header.UnknownHeaders.Add(header);
                        }
                    }

                    m_uasTransaction.SendFinalResponse(redirectResponse);
                }
            }
            catch (Exception excp)
            {
                logger.LogError("Exception SIPServerUserAgent Redirect. " + excp.Message);
            }
        }
        private SIPRequest GetDummyINVITERequest(SIPURI dummyURI)
        {
            string     dummyFrom     = "<sip:[email protected]>";
            SIPRequest inviteRequest = new SIPRequest(SIPMethodsEnum.INVITE, dummyURI);

            SIPHeader inviteHeader = new SIPHeader(SIPFromHeader.ParseFromHeader(dummyFrom), new SIPToHeader(null, dummyURI, null), 1, CallProperties.CreateNewCallId());

            inviteHeader.From.FromTag = CallProperties.CreateNewTag();
            inviteHeader.Contact      = new List <SIPContactHeader> {
                SIPContactHeader.GetDefaultSIPContactHeader(inviteRequest.URI.Scheme)
            };
            inviteHeader.CSeqMethod = SIPMethodsEnum.INVITE;
            inviteHeader.UserAgent  = "unittest";
            inviteRequest.Header    = inviteHeader;

            SIPViaHeader viaHeader = SIPViaHeader.GetDefaultSIPViaHeader();

            inviteRequest.Header.Vias.PushViaHeader(viaHeader);

            inviteRequest.Body = "dummy";
            inviteRequest.Header.ContentLength = inviteRequest.Body.Length;
            inviteRequest.Header.ContentType   = "application/sdp";

            return(inviteRequest);
        }
예제 #8
0
        /// <summary>
        /// Builds the REFER request to initiate an attended transfer on an established call.
        /// </summary>
        /// <param name="target">A target dialogue representing the Transferee.</param>
        /// <returns>A SIP REFER request.</returns>
        private SIPRequest GetReferRequest(SIPDialogue target)
        {
            SIPRequest referRequest = Dialogue.GetInDialogRequest(SIPMethodsEnum.REFER);
            SIPURI     targetUri    = target.RemoteTarget.CopyOf();

            referRequest.Header.Contact = new List <SIPContactHeader> {
                SIPContactHeader.GetDefaultSIPContactHeader()
            };

            SIPParameters replacesHeaders = new SIPParameters();

            if (target.Direction == SIPCallDirection.Out)
            {
                replacesHeaders.Set("Replaces", SIPEscape.SIPURIParameterEscape($"{target.CallId};to-tag={target.RemoteTag};from-tag={target.LocalTag}"));
                var from = new SIPUserField(target.LocalUserField.Name, target.LocalUserField.URI.CopyOf(), null);
                referRequest.Header.ReferredBy = from.ToString();
            }
            else
            {
                replacesHeaders.Set("Replaces", SIPEscape.SIPURIParameterEscape($"{target.CallId};to-tag={target.RemoteTag};from-tag={target.LocalTag}"));
                var from = new SIPUserField(target.RemoteUserField.Name, target.RemoteUserField.URI.CopyOf(), null);
                referRequest.Header.ReferredBy = from.ToString();
            }

            targetUri.Headers = replacesHeaders;
            var referTo = new SIPUserField(null, targetUri, null);

            referRequest.Header.ReferTo = referTo.ToString();

            return(referRequest);
        }
예제 #9
0
        /// <summary>
        /// 恢复录像播放
        /// </summary>
        /// <param name="localIp">本地ip</param>
        /// <param name="mediaPort">端口号</param>
        /// <param name="fromTag">from tag</param>
        /// <param name="cSeq">序号</param>
        /// <param name="callId">呼叫编号</param>
        /// <returns></returns>
        public SIPRequest BackVideoContinuePlayingControlReq(string localIp, int[] mediaPort, string fromTag, int cSeq, string callId)
        {
            SIPURI           remoteUri     = new SIPURI(_deviceId, _msgCore.RemoteEndPoint.ToHost(), "");
            SIPURI           localUri      = new SIPURI(_msgCore.LocalSIPId, _msgCore.LocalEndPoint.ToHost(), "");
            SIPFromHeader    from          = new SIPFromHeader(null, localUri, fromTag);
            SIPToHeader      to            = new SIPToHeader(null, remoteUri, null);
            SIPRequest       backReq       = _msgCore.Transport.GetRequest(SIPMethodsEnum.INFO, remoteUri);
            SIPContactHeader contactHeader = new SIPContactHeader(null, localUri);

            backReq.Header.Contact.Clear();
            backReq.Header.Contact.Add(contactHeader);

            backReq.Header.Allow       = null;
            backReq.Header.From        = from;
            backReq.Header.To          = to;
            backReq.Header.UserAgent   = _msgCore.UserAgent;
            backReq.Header.CSeq        = cSeq;
            backReq.Header.CallId      = callId;
            backReq.Header.Subject     = SetSubject();
            backReq.Header.ContentType = "application/mansrtsp";

            backReq.Body    = SetMediaPauseReq();
            _realReqSession = backReq;
            return(backReq);
        }
예제 #10
0
        /// <summary>
        /// 录像点播请求
        /// </summary>
        /// <param name="localIp">本地ip</param>
        /// <param name="mediaPort">端口号</param>
        /// <param name="startTime">开始时间</param>
        /// <param name="stopTime">结束时间</param>
        /// <param name="fromTag">from tag</param>
        /// <param name="cSeq">序号</param>
        /// <param name="callId">呼叫编号</param>
        /// <returns></returns>
        private SIPRequest BackVideoReq(int[] mediaPort, uint startTime, uint stopTime)
        {
            string localIp = _msgCore.LocalEndPoint.Address.ToString();
            string fromTag = CallProperties.CreateNewTag();
            int    cSeq    = CallProperties.CreateNewCSeq();
            string callId  = CallProperties.CreateNewCallId();

            SIPURI           remoteUri     = new SIPURI(_deviceId, _remoteEndPoint.ToHost(), "");
            SIPURI           localUri      = new SIPURI(_msgCore.LocalSIPId, _msgCore.LocalEndPoint.ToHost(), "");
            SIPFromHeader    from          = new SIPFromHeader(null, localUri, fromTag);
            SIPToHeader      to            = new SIPToHeader(null, remoteUri, null);
            SIPRequest       backReq       = _msgCore.Transport.GetRequest(SIPMethodsEnum.INVITE, remoteUri);
            SIPContactHeader contactHeader = new SIPContactHeader(null, localUri);

            backReq.Header.Contact.Clear();
            backReq.Header.Contact.Add(contactHeader);

            backReq.Header.Allow       = null;
            backReq.Header.From        = from;
            backReq.Header.To          = to;
            backReq.Header.UserAgent   = _msgCore.UserAgent;
            backReq.Header.CSeq        = cSeq;
            backReq.Header.CallId      = callId;
            backReq.Header.Subject     = SetSubject();
            backReq.Header.ContentType = "application/sdp";

            backReq.Body    = SetMediaReq(localIp, mediaPort, startTime, stopTime);
            _realReqSession = backReq;
            return(backReq);
        }
예제 #11
0
        /// <summary>
        /// 确认接收视频请求
        /// </summary>
        /// <param name="response">响应消息</param>
        /// <returns></returns>
        public void AckRequest(SIPResponse response)
        {
            _rtpChannel = new RTPChannel(_remoteEndPoint.GetIPEndPoint(), _mediaPort[0], _mediaPort[1], FrameTypesEnum.H264);
            _rtpChannel.OnFrameReady += _rtpChannel_OnFrameReady;
            _rtpChannel.Start();

            SIPURI           localUri      = new SIPURI(_msgCore.LocalSIPId, _msgCore.LocalEndPoint.ToHost(), "");
            SIPURI           remoteUri     = new SIPURI(_deviceId, _remoteEndPoint.ToHost(), "");
            SIPRequest       ackReq        = _msgCore.Transport.GetRequest(SIPMethodsEnum.ACK, remoteUri);
            SIPFromHeader    from          = new SIPFromHeader(null, response.Header.From.FromURI, response.Header.From.FromTag);
            SIPToHeader      to            = new SIPToHeader(null, remoteUri, response.Header.To.ToTag);
            SIPContactHeader contactHeader = new SIPContactHeader(null, localUri);
            SIPHeader        header        = new SIPHeader(from, to, response.Header.CSeq, response.Header.CallId);

            header.CSeqMethod = SIPMethodsEnum.ACK;
            header.Contact    = response.Header.Contact;
            header.Contact.Clear();
            header.Contact.Add(contactHeader);
            header.Vias          = response.Header.Vias;
            header.MaxForwards   = response.Header.MaxForwards;
            header.ContentLength = response.Header.ContentLength;
            header.UserAgent     = _msgCore.UserAgent;
            header.Allow         = null;
            ackReq.Header        = header;
            _okTag   = response.Header.To.ToTag;
            _contact = header.Contact.FirstOrDefault();
            _via     = header.Vias;
            _msgCore.Transport.SendRequest(_remoteEndPoint, ackReq);
        }
예제 #12
0
파일: SIPFlow.cs 프로젝트: xycui/sipsorcery
        public SIPRequest GetRegisterRequest(string server, string toURIStr, string contactStr)
        {
            try
            {
                IPEndPoint localSIPEndPoint = m_sipTransport.GetDefaultTransportContact(SIPProtocolsEnum.UDP);

                SIPRequest registerRequest = new SIPRequest(SIPMethodsEnum.REGISTER, "sip:" + server);
                SIPHeader  registerHeader  = new SIPHeader(SIPFromHeader.ParseFromHeader(toURIStr), SIPToHeader.ParseToHeader(toURIStr), 1, CallProperties.CreateNewCallId());
                registerHeader.From.FromTag = CallProperties.CreateNewTag();
                registerHeader.Contact      = SIPContactHeader.ParseContactHeader(contactStr);
                SIPViaHeader viaHeader = new SIPViaHeader(localSIPEndPoint.Address.ToString(), localSIPEndPoint.Port, CallProperties.CreateBranchId());
                registerHeader.Via.PushViaHeader(viaHeader);
                registerHeader.CSeqMethod = SIPMethodsEnum.REGISTER;
                registerHeader.Expires    = SIPConstants.DEFAULT_REGISTEREXPIRY_SECONDS;

                registerRequest.Header = registerHeader;

                return(registerRequest);
            }
            catch (Exception excp)
            {
                logger.Error("Exception GetRegisterRequest. " + excp.Message);
                throw new ApplicationException("GetRegisterRequest " + excp.GetType().ToString() + ".  " + excp.Message);
            }
        }
예제 #13
0
            private SIPRequest GetDummyINVITERequest(SIPURI dummyURI)
            {
                string     dummyFrom     = "<sip:[email protected]>";
                string     dummyContact  = "sip:127.0.0.1:1234";
                SIPRequest inviteRequest = new SIPRequest(SIPMethodsEnum.INVITE, dummyURI);

                SIPHeader inviteHeader =
                    new SIPHeader(SIPFromHeader.ParseFromHeader(dummyFrom), new SIPToHeader(null, dummyURI, null), 1, CallProperties.CreateNewCallId());

                inviteHeader.From.FromTag = CallProperties.CreateNewTag();
                inviteHeader.Contact      = SIPContactHeader.ParseContactHeader(dummyContact);
                inviteHeader.CSeqMethod   = SIPMethodsEnum.INVITE;
                inviteHeader.UserAgent    = "unittest";
                inviteRequest.Header      = inviteHeader;

                SIPViaHeader viaHeader =
                    new SIPViaHeader("127.0.0.1", 1234, CallProperties.CreateBranchId(), SIPProtocolsEnum.udp);

                inviteRequest.Header.Vias.PushViaHeader(viaHeader);

                inviteRequest.Body = "dummy";
                inviteRequest.Header.ContentLength = inviteRequest.Body.Length;
                inviteRequest.Header.ContentType   = "application/sdp";

                return(inviteRequest);
            }
예제 #14
0
        public void ParseBadAastraContactHeaderUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string testContactHeader = "<sip:[email protected]:5060\n";

            Assert.Throws <SIPValidationException>(() => SIPContactHeader.ParseContactHeader(testContactHeader));
        }
예제 #15
0
        public void WithDifferentNamesAreEqualUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            SIPContactHeader contactHeader1 = new SIPContactHeader(SIPUserField.ParseSIPUserField("\"Joe Bloggs\" <sip:[email protected]:5060> ;expires=0; param1=value1"));
            SIPContactHeader contactHeader2 = new SIPContactHeader(SIPUserField.ParseSIPUserField("\"Jane Doe\" <sip:[email protected]:5060>;expires=50;param1=value1"));

            Assert.IsTrue(SIPContactHeader.AreEqual(contactHeader1, contactHeader2), "The Contact headers were not correctly identified as equal.");
        }
예제 #16
0
        public void SimpleNotEqualUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            SIPContactHeader contactHeader1 = new SIPContactHeader(null, SIPURI.ParseSIPURI("sip:[email protected]:5060"));
            SIPContactHeader contactHeader2 = new SIPContactHeader(null, SIPURI.ParseSIPURI("sip:[email protected]:5060"));

            Assert.IsFalse(SIPContactHeader.AreEqual(contactHeader1, contactHeader2), "The Contact headers were not correctly identified as equal.");
        }
예제 #17
0
        public void ParseBadAastraContactHeaderUserTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            string testContactHeader = "<sip:[email protected]:5060\n";

            Assert.Throws <SIPValidationException>(() => SIPContactHeader.ParseContactHeader(testContactHeader));
        }
예제 #18
0
        public void WithExpiresParametersAreEqualUserTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            SIPContactHeader contactHeader1 = new SIPContactHeader(SIPUserField.ParseSIPUserField("<sip:[email protected]:5060> ;expires=0; param1=value1"));
            SIPContactHeader contactHeader2 = new SIPContactHeader(SIPUserField.ParseSIPUserField("<sip:[email protected]:5060>;expires=50;param1=value1"));

            Assert.True(SIPContactHeader.AreEqual(contactHeader1, contactHeader2), "The Contact headers were not correctly identified as equal.");
        }
예제 #19
0
        public void SimpleAreEqualUserTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            SIPContactHeader contactHeader1 = new SIPContactHeader(null, SIPURI.ParseSIPURI("sip:[email protected]:5060"));
            SIPContactHeader contactHeader2 = new SIPContactHeader(null, SIPURI.ParseSIPURI("sip:[email protected]:5060"));

            Assert.True(SIPContactHeader.AreEqual(contactHeader1, contactHeader2), "The Contact headers were not correctly identified as equal.");
        }
예제 #20
0
        public void ParseNoLineBreakContactHeaderUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string testContactHeader = "<sip:[email protected]:5060\nAllow: OPTIONS";

            Console.WriteLine("Contact Header = " + testContactHeader + ".");

            Assert.Throws <SIPValidationException>(() => SIPContactHeader.ParseContactHeader(testContactHeader));
        }
예제 #21
0
        public void ParseContactHeaderDomainForUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string testContactHeader = "<sip:[email protected]>";

            List <SIPContactHeader> sipContactHeaderList = SIPContactHeader.ParseContactHeader(testContactHeader);

            Assert.IsTrue(sipContactHeaderList[0].ContactName == null, "The Contact header name was not parsed correctly.");
            Assert.IsTrue(sipContactHeaderList[0].ContactURI.ToString() == "sip:[email protected]", "The Contact header URI was not parsed correctly.");
        }
예제 #22
0
        /// <summary>
        /// Builds the REFER request to initiate a blind transfer on an established call.
        /// </summary>
        /// <param name="referToUri">The SIP URI to transfer the call to.</param>
        /// <returns>A SIP REFER request.</returns>
        private SIPRequest GetReferRequest(SIPURI referToUri)
        {
            SIPRequest referRequest = Dialogue.GetInDialogRequest(SIPMethodsEnum.REFER);

            referRequest.Header.ReferTo   = referToUri.ToString();
            referRequest.Header.Supported = SIPExtensionHeaders.NO_REFER_SUB;
            referRequest.Header.Contact   = new List <SIPContactHeader> {
                SIPContactHeader.GetDefaultSIPContactHeader()
            };
            return(referRequest);
        }
예제 #23
0
        public void ParseNoAngleQuotesContactHeaderUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string testContactHeader = "sip:[email protected]:5060";

            List <SIPContactHeader> sipContactHeaderList = SIPContactHeader.ParseContactHeader(testContactHeader);

            Console.WriteLine("Contact Header ContactURI = " + sipContactHeaderList[0].ContactURI);

            Assert.IsTrue(sipContactHeaderList[0].ContactName == null, "The Contact header name was not parsed correctly.");
            Assert.IsTrue(sipContactHeaderList[0].ContactURI.ToString() == "sip:[email protected]:5060", "The Contact header URI was not parsed correctly.");
        }
예제 #24
0
        public void ParseContactWithParamHeaderUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string testContactHeader = "<sip:[email protected]:5060;ftag=1233>";

            List <SIPContactHeader> sipContactHeaderList = SIPContactHeader.ParseContactHeader(testContactHeader);

            Console.WriteLine("Contact Header ContactURI = " + sipContactHeaderList[0].ContactURI.ToString());
            Console.WriteLine("Contact Header ContactParams = " + sipContactHeaderList[0].ContactParameters.ToString());

            Assert.IsTrue(sipContactHeaderList[0].ContactName == null, "The Contact header name was not parsed correctly.");
            Assert.IsTrue(sipContactHeaderList[0].ContactURI.ToString() == "sip:[email protected]:5060;ftag=1233", "The Contact header URI was not parsed correctly, parsed valued = " + sipContactHeaderList[0].ContactURI.ToString() + ".");
            Assert.IsTrue(sipContactHeaderList[0].ContactURI.Parameters.Get("ftag") == "1233", "The Contact header ftag URI parameter was not parsed correctly.");
        }
예제 #25
0
        public void ParseCiscoContactHeaderUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string testContactHeader = "<sip:[email protected]:5060;user=phone;transport=udp>;+sip.instance=\"<urn:uuid:00000000-0000-0000-0000-0006d74b0e72>\";+u.sip!model.ccm.cisco.com=\"7\"";

            List <SIPContactHeader> sipContactHeaderList = SIPContactHeader.ParseContactHeader(testContactHeader);

            Console.WriteLine("Contact Header ContactURI = " + sipContactHeaderList[0].ContactURI.ToString());
            Console.WriteLine("Contact Header ContactParams = " + sipContactHeaderList[0].ContactParameters.ToString());

            Assert.IsTrue(sipContactHeaderList[0].ContactName == null, "The Contact header name was not parsed correctly.");
            Assert.IsTrue(sipContactHeaderList[0].ContactURI.ToString() == "sip:[email protected]:5060;user=phone;transport=udp", "The Contact header URI was not parsed correctly, parsed valued = " + sipContactHeaderList[0].ContactURI.ToString() + ".");
            Assert.IsTrue(sipContactHeaderList[0].ContactParameters.ToString() == ";+sip.instance=\"<urn:uuid:00000000-0000-0000-0000-0006d74b0e72>\";+u.sip!model.ccm.cisco.com=\"7\"", "The Contact header Parameters were not parsed correctly.");
        }
예제 #26
0
파일: SIPFlow.cs 프로젝트: xycui/sipsorcery
        public SIPRequest GetInviteRequest(string inviteURIStr, string fromURIStr, string body, int rtpPort)
        {
            SIPURI        inviteURI  = (inviteURIStr.StartsWith("sip:")) ? SIPURI.ParseSIPURI(inviteURIStr) : SIPURI.ParseSIPURI("sip:" + inviteURIStr);
            SIPFromHeader fromHeader = SIPFromHeader.ParseFromHeader(fromURIStr); // (fromURIStr.StartsWith("sip:")) ? SIPFromHeader.ParseFromHeader(fromURIStr) : SIPFromHeader.ParseFromHeader("sip:" + fromURIStr);
            SIPToHeader   toHeader   = new SIPToHeader(null, inviteURI, null);

            SIPRequest inviteRequest = new SIPRequest(SIPMethodsEnum.INVITE, inviteURI);

            IPEndPoint localSIPEndPoint = m_sipTransport.GetIPEndPointsList()[0];
            SIPHeader  inviteHeader     = new SIPHeader(fromHeader, toHeader, 1, CallProperties.CreateNewCallId());

            inviteHeader.From.FromTag = CallProperties.CreateNewTag();
            inviteHeader.Contact      = SIPContactHeader.ParseContactHeader("sip:" + localSIPEndPoint.ToString());
            inviteHeader.CSeqMethod   = SIPMethodsEnum.INVITE;
            //inviteHeader.UnknownHeaders.Add("BlueFace-Test: 12324");
            inviteRequest.Header = inviteHeader;

            SIPViaHeader viaHeader = new SIPViaHeader(localSIPEndPoint.Address.ToString(), localSIPEndPoint.Port, CallProperties.CreateBranchId());

            inviteRequest.Header.Via.PushViaHeader(viaHeader);

            rtpPort = (rtpPort != 0) ? rtpPort : Crypto.GetRandomInt(10000, 20000);
            string sessionId = Crypto.GetRandomInt(1000, 5000).ToString();

            if (body != null && body.Trim().Length > 0)
            {
                inviteRequest.Body = body;
            }
            else
            {
                inviteRequest.Body =
                    "v=0" + CRLF +
                    "o=- " + sessionId + " " + sessionId + " IN IP4 " + localSIPEndPoint.Address.ToString() + CRLF +
                    "s=session" + CRLF +
                    "c=IN IP4 " + localSIPEndPoint.Address.ToString() + CRLF +
                    "t=0 0" + CRLF +
                    "m=audio " + rtpPort + " RTP/AVP 0 101" + CRLF +
                    "a=rtpmap:0 PCMU/8000" + CRLF +
                    "a=rtpmap:101 telephone-event/8000" + CRLF +
                    "a=fmtp:101 0-16" + CRLF +
                    "a=sendrecv";
            }

            inviteRequest.Header.ContentLength = inviteRequest.Body.Length;
            inviteRequest.Header.ContentType   = "application/sdp";

            return(inviteRequest);
        }
예제 #27
0
 public void Redirect(SIPResponseStatusCodesEnum redirectCode, SIPURI redirectURI)
 {
     try
     {
         if (m_uasTransaction.TransactionFinalResponse == null)
         {
             SIPResponse redirectResponse = SIPTransport.GetResponse(m_uasTransaction.TransactionRequest, redirectCode, null);
             redirectResponse.Header.Contact = SIPContactHeader.CreateSIPContactList(redirectURI);
             m_uasTransaction.SendFinalResponse(redirectResponse);
         }
     }
     catch (Exception excp)
     {
         logger.Error("Exception SIPServerUserAgent Redirect. " + excp.Message);
     }
 }
예제 #28
0
        public void ParseZeroExpiresContactHeaderUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string testContactHeader = "<sip:[email protected]:5060>; expires=0";

            List <SIPContactHeader> sipContactHeaderList = SIPContactHeader.ParseContactHeader(testContactHeader);

            Console.WriteLine("Contact Header ContactURI = " + sipContactHeaderList[0].ContactURI.ToString());
            Console.WriteLine("Contact Header ContactParams = " + sipContactHeaderList[0].ContactParameters.ToString());
            Console.WriteLine("Contact = " + sipContactHeaderList[0].ToString());

            Assert.IsTrue(sipContactHeaderList[0].ContactName == null, "The Contact header name was not parsed correctly.");
            Assert.IsTrue(sipContactHeaderList[0].ContactURI.ToString() == "sip:[email protected]:5060", "The Contact header URI was not parsed correctly, parsed valued = " + sipContactHeaderList[0].ContactURI.ToString() + ".");
            Assert.IsTrue(sipContactHeaderList[0].Expires == 0, "The Contact header Expires parameter was not parsed correctly.");
        }
예제 #29
0
        public void MultipleContactsHeaderUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            string testContactHeader = "\"Mr. Watson\" <sip:[email protected]>;q=0.7; expires=3600, \"Mr. Watson\" <sip:[email protected]> ;q=0.1";

            List <SIPContactHeader> sipContactHeaderList = SIPContactHeader.ParseContactHeader(testContactHeader);

            Console.WriteLine("Contact Header Count=" + sipContactHeaderList.Count + ".");
            Console.WriteLine("Contact Header ContactURI = " + sipContactHeaderList[0].ContactURI.ToString());
            Console.WriteLine("Contact Header ContactParams = " + sipContactHeaderList[0].ContactParameters.ToString());

            Assert.IsTrue(sipContactHeaderList[0].ContactName == "Mr. Watson", "The Contact header name was not parsed correctly.");
            Assert.IsTrue(sipContactHeaderList[0].ContactURI.ToString() == "sip:[email protected]", "The Contact header URI was not parsed correctly, parsed valued = " + sipContactHeaderList[0].ContactURI.ToString() + ".");
            Assert.IsTrue(sipContactHeaderList[0].Expires == 3600, "The Contact header Expires parameter was not parsed correctly.");
            Assert.IsTrue(sipContactHeaderList[0].Q == "0.7", "The Contact header Q parameter was not parsed correctly.");
        }
예제 #30
0
        public void CallWithAdjustedInviteHeaderTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            SIPTransport   transport = new SIPTransport();
            MockSIPChannel channel   = new MockSIPChannel(new System.Net.IPEndPoint(IPAddress.Any, 0));

            transport.AddSIPChannel(channel);
            SIPClientUserAgent userAgent = new SIPClientUserAgent(
                transport,
                new SIPEndPoint(new IPEndPoint(new IPAddress(new byte[] { 192, 168, 11, 50 }), 5060)),
                "owner",
                "admin",
                null);
            SIPContactHeader testHeader = new SIPContactHeader("Contact Name", new SIPURI("User", "Host", "Param=Value"));

            userAgent.AdjustInvite = invite =>
            {
                invite.Header.Contact = new List <SIPContactHeader>
                {
                    testHeader
                };
                return(invite);
            };

            var desc = new SIPCallDescriptor(
                "user",
                "pass",
                "sip:user@host",
                "sip:user@host",
                "sip:destination@destinationhost",
                null,
                new List <string>(),
                "user",
                SIPCallDirection.Out,
                null,
                null,
                null);

            userAgent.Call(desc);

            channel.SIPMessageSent.WaitOne(5000);
            Assert.Contains(testHeader.ToString(), channel.LastSIPMessageSent);
        }
        public void WithDifferentNamesAreEqualUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            SIPContactHeader contactHeader1 = new SIPContactHeader(SIPUserField.ParseSIPUserField("\"Joe Bloggs\" <sip:[email protected]:5060> ;expires=0; param1=value1"));
            SIPContactHeader contactHeader2 = new SIPContactHeader(SIPUserField.ParseSIPUserField("\"Jane Doe\" <sip:[email protected]:5060>;expires=50;param1=value1"));

            Assert.IsTrue(SIPContactHeader.AreEqual(contactHeader1, contactHeader2), "The Contact headers were not correctly identified as equal.");
        }
        public void SimpleNotEqualUserTest()
        {
            Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);

            SIPContactHeader contactHeader1 = new SIPContactHeader(null, SIPURI.ParseSIPURI("sip:[email protected]:5060"));
            SIPContactHeader contactHeader2 = new SIPContactHeader(null, SIPURI.ParseSIPURI("sip:[email protected]:5060"));

            Assert.IsFalse(SIPContactHeader.AreEqual(contactHeader1, contactHeader2), "The Contact headers were not correctly identified as equal.");
        }