/// <summary> /// Evento recibido con el resultado de la transferencia /// Si se recibe un codigo de error se intenta la transferencia con el otro participante /// </summary> /// <param name="newRtxGroup"></param> /// <returns></returns> private void OnTransferStatus(object sender, int callId, int code) { if ((code > 101) && (code < 300) && (code != SipAgent.SIP_ACCEPTED)) { if (_AssociateCall != null) { _AssociateCall.HangUp(0); } Top.Sip.TlfTransferStatus -= OnTransferStatus; State = FunctionState.Idle; _ToTransfer = null; _FromTransferDisplayName = ""; } else if ((code >= 300) && !_FirstTransferTryKO && (_ToTransfer != null)) { _FirstTransferTryKO = true; //Try transfer with other participant SipAgent.TransferCall(_ToTransfer.CallId, AssociateCall.CallId, null, _FromTransferDisplayName); AssociateCall = _ToTransfer; _ToTransfer = null; _FromTransferDisplayName = ""; } else if ((code >= 300) && _FirstTransferTryKO) { AssociateCall = null; Top.Sip.TlfTransferStatus -= OnTransferStatus; State = FunctionState.Error; _ToTransfer = null; _FromTransferDisplayName = ""; } }
public void To(int id) { _FirstTransferTryKO = false; _ToTransfer = null; _FromTransferDisplayName = ""; if (_State == FunctionState.Idle) { List <TlfPosition> activeCalls = Top.Tlf.ActiveCalls; FunctionState st = FunctionState.Error; if (activeCalls.Count == 1) { if ((activeCalls[0].State == TlfState.Set) || (activeCalls[0].State == TlfState.Conf)) { TlfPosition tlf = activeCalls[0]; TlfPosition to = Top.Tlf[id]; bool transferDone = false; if (Top.Tlf[id].State == TlfState.Idle) { string toUri = to.Uri; if (TlfManager.GetDisplayName(to.Uri) == null && to.Literal.Length > 0) { //Si to.Uri no tiene display name se añade el Literal como display name en la transferencia directa toUri = "\"" + to.Literal + "\" " + to.Uri; } SipAgent.TransferCall(tlf.CallId, -1, toUri, null); transferDone = true; } else if (Top.Tlf[id].State == TlfState.Hold) { SipAgent.HoldCall(activeCalls[0].CallId); System.Threading.Thread.Sleep(50); SipAgent.TransferCall(tlf.CallId, to.CallId, null, "\"" + to.Literal + "\""); transferDone = true; _ToTransfer = to; _FromTransferDisplayName = "\"" + tlf.Literal + "\""; } if (transferDone) { _Logger.Debug("Iniciando transferencia..."); Top.Sip.TlfTransferStatus += OnTransferStatus; AssociateCall = tlf; st = FunctionState.Executing; Top.WorkingThread.Enqueue("SetSnmp", delegate() { string snmpString = Top.Cfg.PositionId + "_" + "TRANSFER" + "_" + tlf.Literal; General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString)); }); } } } State = st; } }
public void To(uint prefix, string dst, string number) { _FirstTransferTryKO = false; _ToTransfer = null; _FromTransferDisplayName = ""; if (_State == FunctionState.Idle) { List <TlfPosition> activeCalls = Top.Tlf.ActiveCalls; FunctionState st = FunctionState.Error; if (activeCalls.Count == 1) { TlfPosition tlf = activeCalls[0]; if ((tlf.State == TlfState.Set) || (tlf.State == TlfState.Conf)) { using (TlfIaPosition to = new TlfIaPosition(prefix, dst)) { string toUri = to.Uri; if (TlfManager.GetDisplayName(to.Uri) == null && to.Literal.Length > 0) { //Si to.uri no tiene display name se añade el Literal como display name en la transferencia directa toUri = "\"" + to.Literal + "\" " + to.Uri; } SipAgent.TransferCall(tlf.CallId, -1, toUri, null); Top.Sip.TlfTransferStatus += OnTransferStatus; AssociateCall = tlf; st = FunctionState.Executing; Top.WorkingThread.Enqueue("SetSnmp", delegate() { string snmpString = Top.Cfg.PositionId + "_" + "TRANSFER" + "_" + tlf.Literal; General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString)); }); } } } State = st; } }