Esempio n. 1
0
 /// <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 = "";
     }
 }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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;
            }
        }