示例#1
0
        public override bool CanHandleOutputCall(uint prefix, string dst, string number, string lit = null, bool unknownResource = false)
        {
            if ((_State == TlfState.In) || (_State == TlfState.InPrio) ||
                (_State == TlfState.RemoteIn) || (_State == TlfState.Hold))
            {
                return(base.CanHandleOutputCall(prefix, dst, number, lit, unknownResource));
            }

            if (_SipCall == null)
            {
                CfgEnlaceInterno link = new CfgEnlaceInterno();

                CfgRecursoEnlaceInterno rs;
                string literal;
                TlfManager.EncapsuleIaInfo(prefix, dst, out literal, out rs);
                _UnknownResource = unknownResource;
                if (_UnknownResource)
                {
                    rs.NumeroAbonado = number;
                }
                link.Literal = lit; // literal;
                link.ListaRecursos.Add(rs);
                link.Prioridad = Top.Cfg.Priority;
                link.OrigenR2  = Top.Cfg.GetNumeroAbonado(Top.Cfg.MainId, Cd40Cfg.ATS_DST) ?? Top.Cfg.MainId;
                Reset(link);
                //Nuevo inicio de llamada saliente
                //Limpia el código recibido en la llamada anterior
                _LastCode         = 0;
                _NumberWithPrefix = number;
                return(true);
            }

            return(false);
        }
示例#2
0
        public override void Reset(CfgEnlaceInterno cfg)
        {
            foreach (SipChannel ch in _Channels)
            {
                ch.RsChanged -= OnRsChanged;
            }

            base.Reset(cfg);
        }
示例#3
0
        /// <summary>
        /// Fill de data structure for an AID Position
        /// Search for resource in configuration if exist or create from scratch
        /// </summary>
        /// <param name="info"></param>
        /// <param name="inInfo"></param>
        /// <returns></returns>
        public bool FillData(CORESIP_CallInfo info, CORESIP_CallInInfo inInfo)
        {
            CfgEnlaceInterno link    = new CfgEnlaceInterno();
            string           literal = null;

            CfgRecursoEnlaceInterno rs = Top.Cfg.GetResourceFromUri(inInfo.SrcId, inInfo.SrcIp, inInfo.SrcSubId, inInfo.SrcRs);

            if (rs != null)
            {
                _UnknownResource = false;
                //El literal, es el display name que procede del SIP o el numero en su defecto
                TlfManager.ExtractIaInfo(rs, out literal, out _NumberWithPrefix);
                _Logger.Debug("Incoming: {0} {1} {2} lit {3} numbPre {4}", rs.Prefijo, rs.NumeroAbonado, rs.NombreRecurso, literal, _NumberWithPrefix);
            }
            else      // para que funcionen llamadas entrantes no configuradas de transito de un SCV
            {
                rs = Top.Cfg.GetATSResourceFromUri(inInfo.SrcId);
                if (rs != null)
                {
                    _UnknownResource = true;
                    //El literal, es el display name que procede del SIP o el numero en su defecto
                    TlfManager.ExtractIaInfo(rs, out literal, out _NumberWithPrefix);
                }
            }
            if (rs == null)
            //No encuentro configurado el recurso
            {
                rs                = new CfgRecursoEnlaceInterno();
                rs.Prefijo        = Cd40Cfg.UNKNOWN_DST;
                rs.NombreRecurso  = inInfo.SrcId;
                rs.NumeroAbonado  = string.Format("sip:{0}@{1}", inInfo.SrcId, inInfo.SrcIp);
                _UnknownResource  = true;
                _NumberWithPrefix = string.Format("{0:D2}{1}", rs.Prefijo, inInfo.SrcId);
                literal           = inInfo.SrcId;
            }
            if (!PermisoRed((uint)rs.Prefijo, true))
            {
                return(false);
            }


            if (!String.IsNullOrEmpty(inInfo.DisplayName))
            {
                literal = inInfo.DisplayName;
            }

            link.Literal = literal;
            link.ListaRecursos.Add(rs);
            link.Prioridad = Top.Cfg.Priority;
            link.OrigenR2  = Top.Cfg.GetNumeroAbonado(Top.Cfg.MainId, Cd40Cfg.ATS_DST) ?? Top.Cfg.MainId;

            Reset(link);

            return(true);
        }
示例#4
0
        public TlfIaPosition(uint prefix, string dst)
            : base(1000)
        {
            CfgEnlaceInterno link = new CfgEnlaceInterno();

            CfgRecursoEnlaceInterno rs;
            string literal;

            TlfManager.EncapsuleIaInfo(prefix, dst, out literal, out rs);

            link.Literal = literal;
            link.ListaRecursos.Add(rs);
            link.Prioridad = Top.Cfg.Priority;
            link.OrigenR2  = Top.Cfg.MainId;

            base.Reset(link);
        }
示例#5
0
        public override void Reset(CfgEnlaceInterno cfg)
        {
            _Cfg      = cfg;
            _Literal  = cfg.Literal;
            _Priority = (CORESIP_Priority)cfg.Prioridad;
            _Channels.Clear();
            TlfFocusChannel ch = null;

            ch           = new TlfFocusChannel(cfg.OrigenR2, cfg.Literal);
            _ActiveState = true;
            _Member      = false;
            foreach (CfgRecursoEnlaceInterno dst in cfg.ListaRecursos)
            {
                if (Top.Cfg.GetMainUser(Top.HostId) == dst.NombreRecurso)
                {
                    //Soy miembro del grupo
                    _Member      = true;
                    _ActiveState = false;
                    ch.ImMember  = true;
                }
                else
                {
                    ch.AddFinalDestination(dst.NombreRecurso, dst.NumeroAbonado, dst.Prefijo);
                }
            }
            ch.RsChanged += OnRsChanged;
            _Channels.Add(ch);
            if ((_SipCall != null) && !_SipCall.IsValid(_Channels))
            {
                MakeHangUp(0);  // Cortamos llamadas y quitamos busy y congestion
            }

            if (_SipCall == null)
            {
                State = GetReachableState();
            }
        }
示例#6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cfg"></param>
        public void Reset(CfgEnlaceInterno cfg)
        {
            _Literal     = cfg.Literal;
            _LastChannel = 0;
            _Channels.Clear();

            foreach (CfgRecursoEnlaceInterno dst in cfg.ListaRecursos)
            {
                switch (dst.Prefijo)
                {
                case Cd40Cfg.INT_DST:
                    string hostId = Top.Cfg.GetUserHost(dst.NombreRecurso);

                    if (_Channels.Find(delegate(SipChannel channel)
                                       { return((channel.Prefix == dst.Prefijo) && (channel.Id == hostId)); }) == null)
                    {
                        SipChannel ch = new IntChannel(cfg.OrigenR2, hostId, dst.NombreRecurso, dst.Prefijo);
                        ch.RsChanged += OnRsChanged;

                        _Channels.Insert(0, ch);
                    }
                    break;

                case Cd40Cfg.PP_DST:
                    if (_Channels.Find(delegate(SipChannel channel)
                                       { return((channel.Prefix == dst.Prefijo) && (channel.Id == dst.NombreRecurso)); }) == null)
                    {
                        SipChannel ch = dst.Interface == TipoInterface.TI_LCEN ?
                                        (SipChannel) new LcChannel(cfg.OrigenR2, dst.NombreRecurso, dst.Prefijo) :
                                        (SipChannel) new TlfPPChannel(cfg.OrigenR2, dst.NumeroAbonado, dst.NombreRecurso, dst.Prefijo, dst.Interface);
                        ch.RsChanged += OnRsChanged;

                        _Channels.Add(ch);
                    }

                    if (cfg.Dependencia != string.Empty)
                    {
                        _Dependencia = cfg.Dependencia;
                        _Groups.Add(_Dependencia);
                    }
                    break;

                case Cd40Cfg.ATS_DST:
                    string[] userId = Top.Cfg.GetUserFromAddress(dst.Prefijo, dst.NumeroAbonado);
                    if (userId != null)
                    {
                        dst.NombreRecurso = userId[1];
                        dst.Prefijo       = Cd40Cfg.INT_DST;
                        goto case Cd40Cfg.INT_DST;
                    }

                    TlfNet net = Top.Cfg.GetIPNet(dst.Prefijo, dst.NumeroAbonado);

                    if (net != null)
                    {
                        SipChannel ch = _Channels.Find(delegate(SipChannel channel) { return((channel.Prefix == dst.Prefijo) && (channel.Id == net.Id)); });

                        if (ch == null)
                        {
                            // Para Linea caliente en destinos ATS_DST,
                            // solo se utilizan las lineas que vienen de un encaminamiento IP
                            List <SipLine> listLines = net.Lines.FindAll(line => line.centralIP == false);
                            foreach (SipLine line in listLines)
                            {
                                int index = net.Lines.IndexOf(line);
                                net.Lines.RemoveAt(index);
                                net.Routes.RemoveAt(index);
                                net.RsTypes.RemoveAt(index);
                            }
                            //Caso de destino ATS de central no IP: no tiene canal ATS (no lo añado), solo canal LC
                            if (net.Lines.Count > 0)
                            {
                                ch            = new TlfNetChannel(net, cfg.OrigenR2, dst.NumeroAbonado, null, dst.Prefijo);
                                ch.RsChanged += OnRsChanged;

                                _Channels.Add(ch);
                            }
                        }
                        else
                        {
                            ch.AddRemoteDestination(dst.NumeroAbonado, null);
                        }
                    }

                    break;
                }
            }

            if ((_SipCallRx != null) && !_SipCallRx.IsValid(_Channels))
            {
                MakeHangUpRx();
            }
            if ((_SipCallTx != null) && !_SipCallTx.IsValid(_Channels))
            {
                MakeHangUpTx();
            }

            LcRxState rxSt = _RxState;
            LcTxState txSt = _TxState;

            if ((_SipCallRx == null) || (_SipCallTx == null))
            {
                GetState(out rxSt, out txSt);
            }

            if (_SipCallRx != null)
            {
                rxSt = _RxState;
            }
            if (_SipCallTx != null)
            {
                txSt = _TxState;
            }

            SetState(rxSt, txSt);
        }
示例#7
0
        private static Cd40Cfg ConfiguracionGrupoUnMiembro(Cd40Cfg cfg)
        {
            //Usuario S2
            ConfiguracionUsuario userCfg = new ConfiguracionUsuario();
            //Tecla de grupo con 1 miembro
            CfgEnlaceInterno link = new CfgEnlaceInterno();
            link.Literal = "grupotest1";
            link.PosicionHMI = 45;
            link.TipoEnlaceInterno = "MD";
            link.Prioridad = 4;
            link.OrigenR2 = "218002";
            CfgRecursoEnlaceInterno rec = new CfgRecursoEnlaceInterno();
            rec.Prefijo = 0;
            rec.NombreRecurso = "218001";
            link.ListaRecursos.Add(rec);
            userCfg.TlfLinks.Add(link);

            //Tecla de AD normal
            CfgEnlaceInterno link2 = new CfgEnlaceInterno();
            link2.Literal = "S1_SCV2";
            link2.PosicionHMI = 44;
            link2.TipoEnlaceInterno = "DA";
            link2.Prioridad = 4;
            link2.OrigenR2 = "218002";
            userCfg.TlfLinks.Add(link2);

            cfg.ConfiguracionUsuarios.Add(userCfg);

            //Usuario S1
            ConfiguracionUsuario userCfg2 = new ConfiguracionUsuario();
            //Tecla de grupo con 1 miembro
            CfgEnlaceInterno link3 = new CfgEnlaceInterno();
            link3.Literal = "grupotest1";
            link3.PosicionHMI = 45;
            link3.TipoEnlaceInterno = "MD";
            link3.Prioridad = 4;
            link3.OrigenR2 = "218001";
            CfgRecursoEnlaceInterno rec2 = new CfgRecursoEnlaceInterno();
            rec2.Prefijo = 0;
            rec2.NombreRecurso = "218001";
            link3.ListaRecursos.Add(rec2);
            userCfg2.TlfLinks.Add(link3);

            //Tecla de AD normal
            CfgEnlaceInterno link4 = new CfgEnlaceInterno();
            link4.Literal = "S2_SCV2";
            link4.PosicionHMI = 44;
            link4.TipoEnlaceInterno = "DA";
            link4.Prioridad = 4;
            link4.OrigenR2 = "218001";
            userCfg2.TlfLinks.Add(link4);

            cfg.ConfiguracionUsuarios.Add(userCfg2);

            //Configuracion de sistema, numeracion de usuarios
            DireccionamientoSIP dirSIP = new DireccionamientoSIP();
            StrNumeroAbonado num = new StrNumeroAbonado();
            num.NumeroAbonado = "218001";
            num.Prefijo = 0;
            dirSIP.IdUsuario = "S1_SCV2";
            dirSIP.NumerosAbonadoQueAtiende.Add(num);
            cfg.ConfiguracionGeneral.PlanDireccionamientoSIP.Add(dirSIP);

            num = new StrNumeroAbonado();
            num.NumeroAbonado = "218002";
            num.Prefijo = 0;
            dirSIP = new DireccionamientoSIP();
            dirSIP.IdUsuario = "S2_SCV2";
            dirSIP.NumerosAbonadoQueAtiende.Add(num);
            cfg.ConfiguracionGeneral.PlanDireccionamientoSIP.Add(dirSIP);

            num = new StrNumeroAbonado();
            num.NumeroAbonado = "218003";
            num.Prefijo = 0;
            dirSIP = new DireccionamientoSIP();
            dirSIP.IdUsuario = "S2_SCV3";
            dirSIP.NumerosAbonadoQueAtiende.Add(num);
            cfg.ConfiguracionGeneral.PlanDireccionamientoSIP.Add(dirSIP);
            return cfg;
        }
        ///Tests para probar cuando se corta la llamada y pasa la tecla a reposo
        ///por una sectorización con cambios.
        ///La llamada no tiene canal
        public void ChangeConfig1()
        {
            //Initial configuration
            TlfPosition      tlfTest = new TlfPosition(12);
            CfgEnlaceInterno link    = new CfgEnlaceInterno();

            link.Literal           = "S1";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;
            link.OrigenR2          = "218001";
            CfgRecursoEnlaceInterno rec = new CfgRecursoEnlaceInterno();

            rec.Prefijo       = 2;
            rec.NombreRecurso = "S1";
            rec.Interface     = TipoInterface.TI_Radio;
            link.ListaRecursos.Add(rec);

            tlfTest.Reset(link);

            //Give it an incomplete call, , no channel
            tlfTest._SipCall = SipCallInfo.NewTlfCall(tlfTest.Channels, CORESIP_Priority.CORESIP_PR_NORMAL, null);
            Assert.IsNotNull(tlfTest._SipCall);

            //1.Cambio configuracion origen R2
            link                   = new CfgEnlaceInterno();
            link.Literal           = "S1";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;
            link.OrigenR2          = "218002"; // Cambio
            rec               = new CfgRecursoEnlaceInterno();
            rec.Prefijo       = 2;
            rec.NombreRecurso = "S1";
            rec.Interface     = TipoInterface.TI_Radio;
            link.ListaRecursos.Add(rec);
            tlfTest.Reset(link);
            //Se corta la llamada
            Assert.IsNull(tlfTest._SipCall);

            //Give it an incomplete call, no channel
            tlfTest._SipCall = SipCallInfo.NewTlfCall(tlfTest.Channels, CORESIP_Priority.CORESIP_PR_NORMAL, null);
            Assert.IsNotNull(tlfTest._SipCall);

            //2.Cambio configuracion Prioridad, literal
            link                   = new CfgEnlaceInterno();
            link.Literal           = "S1_"; //Cambio
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;     // Cambio
            link.OrigenR2          = "218002";
            rec               = new CfgRecursoEnlaceInterno();
            rec.Prefijo       = 2;
            rec.NombreRecurso = "S1";
            rec.Interface     = TipoInterface.TI_Radio;
            link.ListaRecursos.Add(rec);
            tlfTest.Reset(link);
            //No se corta la llamada
            Assert.IsNotNull(tlfTest._SipCall);

            //Give it an incomplete call, no channel
            tlfTest._SipCall = SipCallInfo.NewTlfCall(tlfTest.Channels, CORESIP_Priority.CORESIP_PR_NORMAL, null);
            Assert.IsNotNull(tlfTest._SipCall);

            //3.Cambio configuracion prefijo recurso, nombre rec
            link                   = new CfgEnlaceInterno();
            link.Literal           = "S1_";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;
            link.OrigenR2          = "218002";
            rec               = new CfgRecursoEnlaceInterno();
            rec.Prefijo       = 3;     // Cambio
            rec.NombreRecurso = "S1_"; //Cambio
            rec.Interface     = TipoInterface.TI_Radio;
            link.ListaRecursos.Add(rec);
            tlfTest.Reset(link);
            //No Se corta la llamada
            Assert.IsNotNull(tlfTest._SipCall);
        }
        ///Tests para probar cuando se corta la llamada y pasa la tecla a reposo
        ///por una sectorización con cambios.
        ///Hay una llamada con canal, pero sin callId
        public void ChangeConfig3()
        {
            //Initial configuration
            TlfPosition      tlfTest = new TlfPosition(12);
            CfgEnlaceInterno link    = new CfgEnlaceInterno();

            link.Literal           = "BL";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;
            link.OrigenR2          = "218001";
            CfgRecursoEnlaceInterno rec = new CfgRecursoEnlaceInterno();

            rec.Prefijo       = 2;
            rec.NombreRecurso = "prubl";
            rec.Interface     = TipoInterface.TI_BL;
            link.ListaRecursos.Add(rec);

            tlfTest.Reset(link);

            //Give it an incomplete call, no callID
            tlfTest._SipCall = SipCallInfo.NewTlfCall(tlfTest.Channels, CORESIP_Priority.CORESIP_PR_NORMAL, null);
            SipRemote remote = new SipRemote(rec.NombreRecurso);

            tlfTest._SipCall.Update(-1, link.OrigenR2, rec.NombreRecurso, tlfTest.Channels[0], remote, tlfTest.Channels[0].ListLines[0]);
            Assert.IsNotNull(tlfTest._SipCall);

            //1.Cambio configuracion origen R2
            link                   = new CfgEnlaceInterno();
            link.Literal           = "BL";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;
            link.OrigenR2          = "218002"; // Cambio
            rec               = new CfgRecursoEnlaceInterno();
            rec.Prefijo       = 2;
            rec.NombreRecurso = "prubl";
            rec.Interface     = TipoInterface.TI_BL;
            link.ListaRecursos.Add(rec);
            tlfTest.Reset(link);
            //Se corta la llamada
            Assert.IsNull(tlfTest._SipCall);

            //Give it an incomplete call, no callID
            tlfTest._SipCall = SipCallInfo.NewTlfCall(tlfTest.Channels, CORESIP_Priority.CORESIP_PR_NORMAL, null);
            remote           = new SipRemote(rec.NombreRecurso);
            tlfTest._SipCall.Update(-1, link.OrigenR2, rec.NombreRecurso, tlfTest.Channels[0], remote, tlfTest.Channels[0].ListLines[0]);
            tlfTest.State = TlfState.Busy;

            //2.Cambio configuracion Prioridad, literal
            link                   = new CfgEnlaceInterno();
            link.Literal           = "BL_"; //Cambio
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 3;     // Cambio
            link.OrigenR2          = "218002";
            rec               = new CfgRecursoEnlaceInterno();
            rec.Prefijo       = 2;
            rec.NombreRecurso = "prubl";
            rec.Interface     = TipoInterface.TI_BL;
            link.ListaRecursos.Add(rec);
            tlfTest.Reset(link);
            //Se corta la llamada porque no esta disponible la linea
            Assert.IsNull(tlfTest._SipCall);
            Assert.AreEqual(tlfTest.State, TlfState.Unavailable);

            //Give it an incomplete call, no channel
            tlfTest._SipCall = SipCallInfo.NewTlfCall(tlfTest.Channels, CORESIP_Priority.CORESIP_PR_NORMAL, null);
            remote           = new SipRemote(rec.NombreRecurso);
            tlfTest._SipCall.Update(-1, link.OrigenR2, rec.NombreRecurso, tlfTest.Channels[0], remote, tlfTest.Channels[0].ListLines[0]);
            tlfTest.State = TlfState.Busy;
            Assert.IsNotNull(tlfTest._SipCall);

            //3.Cambio configuracion prefijo recurso, nombre rec
            link                   = new CfgEnlaceInterno();
            link.Literal           = "BL_";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 3;
            link.OrigenR2          = "218002";
            rec               = new CfgRecursoEnlaceInterno();
            rec.Prefijo       = 0;         // Cambio
            rec.NombreRecurso = "S4_SCV2"; //Cambio
            rec.Interface     = TipoInterface.TI_Radio;
            link.ListaRecursos.Add(rec);
            tlfTest.Reset(link);
            //Se corta la llamada
            Assert.IsNull(tlfTest._SipCall);
        }
        ///Tests para probar que no se corta la llamada ni cambia de estado
        ///por una sectorización sin cambios
        public void ChangeConfig2()
        {
            //Initial configuration
            TlfPosition      tlfTest = new TlfPosition(12);
            CfgEnlaceInterno link    = new CfgEnlaceInterno();

            link.Literal           = "S1";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;
            link.OrigenR2          = "218001";
            CfgRecursoEnlaceInterno rec = new CfgRecursoEnlaceInterno();

            rec.Prefijo       = 2;
            rec.NombreRecurso = "S1";
            rec.Interface     = TipoInterface.TI_Radio;
            link.ListaRecursos.Add(rec);

            tlfTest.Reset(link);
            //Give it an incomplete call, estado unavailable
            tlfTest._SipCall = SipCallInfo.NewTlfCall(tlfTest.Channels, CORESIP_Priority.CORESIP_PR_NORMAL, null);
            Assert.IsNotNull(tlfTest._SipCall);
            Assert.AreEqual(tlfTest.State, TlfState.Unavailable);

            //1.sin cambios, en estado unavailable
            link                   = new CfgEnlaceInterno();
            link.Literal           = "S1";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;
            link.OrigenR2          = "218001";
            rec               = new CfgRecursoEnlaceInterno();
            rec.Prefijo       = 2;
            rec.NombreRecurso = "S1";
            rec.Interface     = TipoInterface.TI_Radio;
            link.ListaRecursos.Add(rec);
            tlfTest.Reset(link);
            //No se corta la llamada
            Assert.IsNotNull(tlfTest._SipCall);
            Assert.AreEqual(tlfTest.State, TlfState.Unavailable);

            //2. Tecla en congestion, no cambia
            tlfTest.State          = TlfState.Congestion;
            link                   = new CfgEnlaceInterno();
            link.Literal           = "S1";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;
            link.OrigenR2          = "218001";
            rec               = new CfgRecursoEnlaceInterno();
            rec.Prefijo       = 2;
            rec.NombreRecurso = "S1";
            rec.Interface     = TipoInterface.TI_Radio;
            link.ListaRecursos.Add(rec);
            tlfTest.Reset(link);
            //No se corta la llamada
            Assert.IsNotNull(tlfTest._SipCall);
            Assert.AreEqual(tlfTest.State, TlfState.Congestion);

            //3. Tecla en busy, no cambia
            tlfTest.State          = TlfState.Busy;
            link                   = new CfgEnlaceInterno();
            link.Literal           = "S1";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;
            link.OrigenR2          = "218001";
            rec               = new CfgRecursoEnlaceInterno();
            rec.Prefijo       = 2;
            rec.NombreRecurso = "S1";
            rec.Interface     = TipoInterface.TI_Radio;
            link.ListaRecursos.Add(rec);
            tlfTest.Reset(link);
            //No se corta la llamada
            Assert.IsNotNull(tlfTest._SipCall);
            Assert.AreEqual(tlfTest.State, TlfState.Busy);

            //3. Tecla en InProcess, no cambia
            tlfTest.State          = TlfState.InProcess;
            link                   = new CfgEnlaceInterno();
            link.Literal           = "S1";
            link.TipoEnlaceInterno = "DA";
            link.Prioridad         = 4;
            link.OrigenR2          = "218001";
            rec               = new CfgRecursoEnlaceInterno();
            rec.Prefijo       = 2;
            rec.NombreRecurso = "S1";
            rec.Interface     = TipoInterface.TI_Radio;
            link.ListaRecursos.Add(rec);
            tlfTest.Reset(link);
            //No se corta la llamada
            Assert.IsNotNull(tlfTest._SipCall);
            Assert.AreEqual(tlfTest.State, TlfState.InProcess);
        }