/// <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); }
public void ParamsInUserPortionURITest() { Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name); var replaces = SIPReplacesParameter.Parse(SIPEscape.SIPURIParameterUnescape("a48484fb-ac6e00aa%4010.0.0.12%3Bfrom-tag%3D11e7a0c7ec2ab74eo0%3Bto-tag%3D1313732478")); Assert.Equal("[email protected]", replaces.CallID); Assert.Equal("1313732478", replaces.ToTag); Assert.Equal("11e7a0c7ec2ab74eo0", replaces.FromTag); Console.WriteLine("-----------------------------------------"); }