Пример #1
0
        public void To(uint prefix, string dst, string number)
        {
            if (_State == FunctionState.Idle)
            {
                FunctionState st = FunctionState.Error;

                if (prefix == Cd40Cfg.INT_DST)
                {
                    _To = new TlfIaPosition(prefix, dst);
                    _To.Listen();

                    if (_To.State == TlfState.Out)
                    {
                        _To.TlfPosStateChanged += OnToMonitoringCallStateChanged;
                        st = FunctionState.Executing;

                        Top.WorkingThread.Enqueue("SetSnmp", delegate()
                        {
                            string snmpString = Top.Cfg.PositionId + "_" + "LISTEN" + "_" + _To.Number;
                            General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString));
                        });
                    }
                }

                State = st;
            }
        }
Пример #2
0
        public void To(int id)
        {
            if (_State == FunctionState.Idle)
            {
                Debug.Assert(id < Tlf.NumDestinations);

                TlfPosition   to = Top.Tlf[id];
                FunctionState st = FunctionState.Error;

                if (to.IsTop)
                {
                    _To = new TlfIaPosition(to);
                    _To.Listen();

                    if (_To.State == TlfState.Out)
                    {
                        _To.TlfPosStateChanged += OnToMonitoringCallStateChanged;
                        st = FunctionState.Executing;

                        Top.WorkingThread.Enqueue("SetSnmp", delegate()
                        {
                            string snmpString = Top.Cfg.PositionId + "_" + "LISTEN" + "_" + _To.Literal;
                            General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString));
                        });
                    }
                }

                State = st;
            }
        }
Пример #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;
            }
        }
Пример #4
0
        private void OnFromMonitoringCallStateChanged(object sender)
        {
            TlfIaPosition from = (TlfIaPosition)sender;

            if (from.CallId == -1)
            {
                foreach (KeyValuePair <int, TlfIaPosition> p in _Froms)
                {
                    if (p.Value == from)
                    {
                        from.TlfPosStateChanged -= OnFromMonitoringCallStateChanged;
                        from.Dispose();

                        _Froms.Remove(p.Key);
                        General.SafeLaunchEvent(RemoteListenChanged, this, new ListenPickUpMsg(FunctionState.Idle, from.Literal, p.Key));

                        break;
                    }
                }
            }
        }
Пример #5
0
        private void OnIncomingMonitoringCall(object sender, int call, CORESIP_CallInfo info, CORESIP_CallInInfo inInfo, CORESIP_Answer answer)
        {
            Debug.Assert(!_Froms.ContainsKey(call));
            TlfIaPosition from = new TlfIaPosition(1000);

            int code = from.HandleIncomingCall(call, -1, info, inInfo);

            Debug.Assert(code == SipAgent.SIP_RINGING);

            if (!from.IsTop)
            {
                answer.Value = SipAgent.SIP_NOT_ACCEPTABLE_HERE;
                return;
            }

            answer.Value             = 0;
            from.TlfPosStateChanged += OnFromMonitoringCallStateChanged;
            _Froms[call]             = from;

            General.SafeLaunchEvent(RemoteListenChanged, this, new ListenPickUpMsg(FunctionState.Executing, from.Literal, call));
        }