/// <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); }
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); }
/// <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(); }
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); }
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; } }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); } }
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); }
public void ParseBadAastraContactHeaderUserTest() { Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name); string testContactHeader = "<sip:[email protected]:5060\n"; Assert.Throws <SIPValidationException>(() => SIPContactHeader.ParseContactHeader(testContactHeader)); }
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."); }
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)); }
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."); }
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."); }
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)); }
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."); }
/// <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); }
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."); }
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."); }
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."); }
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); }
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); } }
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."); }
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."); }
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); }