Exemple #1
0
        /// <summary>
        /// Dado un user name y la ip (procedentes de una URI por ejemplo)
        /// la busca entre los Tops.
        /// Si no lo encuentra, devuelve null.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        private CfgRecursoEnlaceInterno lookForResourceInTop(string id)
        {
            CfgRecursoEnlaceInterno recurso = new CfgRecursoEnlaceInterno();

            recurso.Prefijo = Cd40Cfg.INT_DST;

            foreach (DireccionamientoSIP sip in _SystemCfg.PlanDireccionamientoSIP)
            {
                //Lo busca por nombre
                if (string.Compare(sip.IdUsuario, id, true) == 0)
                {
                    recurso.NombreRecurso = sip.IdUsuario;
                    recurso.NumeroAbonado = id;
                    return(recurso);
                }
                //y si no, lo busca por nummero al que atiende
                foreach (StrNumeroAbonado number in sip.NumerosAbonadoQueAtiende)
                {
                    if (string.Compare(number.NumeroAbonado, id, true) == 0)
                    {
                        recurso.NombreRecurso = sip.IdUsuario;
                        recurso.NumeroAbonado = id;
                        return(recurso);
                    }
                }
            }
            return(null);
        }
        /// <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);
        }
Exemple #3
0
        public CfgRecursoEnlaceInterno GetATSResourceFromUri(string id)
        {
            CfgRecursoEnlaceInterno recurso = null;

            //Vemos si es un destino ATS externo que viene de tránsito por un SCV no IP
            if (ExistNet(Cd40Cfg.ATS_DST, id))
            {
                recurso               = new CfgRecursoEnlaceInterno();
                recurso.Prefijo       = Cd40Cfg.ATS_DST;
                recurso.NumeroAbonado = id;
            }
            return(recurso);
        }
 private static void ConfigExample1()
 {
     cfg.Version = "9.9";
     ConfiguracionUsuario confUsuario = new ConfiguracionUsuario();
     link.TipoEnlaceInterno = "MD";
     link.Literal = "grupoTest";
     link.PosicionHMI = 5;
     link.Prioridad = 4;
     link.OrigenR2 = "314453";
     CfgRecursoEnlaceInterno rec = new CfgRecursoEnlaceInterno();
     rec.Prefijo = 3;
     rec.NombreRecurso = "14R";
     rec.Interface = TipoInterface.TI_Radio;
     link.ListaRecursos.Add(rec);
 }
Exemple #5
0
        /// <summary>
        /// Fills _Operators struct with  config received
        /// </summary>
        private void CreateOperatorsData()
        {
            OperatorData        operatorTA    = null;
            List <OperatorData> operatorsCopy = new List <OperatorData>();

            foreach (DireccionamientoSIP dirSip in _SystemCfg.PlanDireccionamientoSIP)
            {
                SectorData sector = new SectorData();
                operatorTA = null;
                foreach (StrNumeroAbonado num in dirSip.NumerosAbonadoQueAtiende)
                {
                    if (operatorTA == null)
                    {
                        operatorTA = operatorsCopy.Find(x => x.idGroupName.Equals(num.IdAgrupacion));
                        if (operatorTA == null)
                        {
                            operatorTA             = new OperatorData();
                            operatorTA.idGroupName = num.IdAgrupacion;
                            foreach (AsignacionUsuariosTV tv in _SystemCfg.PlanAsignacionUsuarios)
                            {
                                if ((tv.IdUsuario != STR_SECTOR_FS) && (tv.IdUsuario != STR_PUESTO_FS))
                                {
                                    if (tv.IdUsuario.Equals(dirSip.IdUsuario))
                                    {
                                        operatorTA.idHost = tv.IdHost;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    CfgRecursoEnlaceInterno cfg = new CfgRecursoEnlaceInterno();
                    cfg.NombreRecurso = dirSip.IdUsuario;
                    cfg.NumeroAbonado = num.NumeroAbonado;
                    cfg.Prefijo       = num.Prefijo;
                    sector.numberData.Add(cfg);
                    sector.idUser = dirSip.IdUsuario;
                }
                operatorTA.sectorData.Add(sector);
                if (operatorsCopy.Contains(operatorTA) == false)
                {
                    operatorsCopy.Add(operatorTA);
                }
            }

            _Operators = operatorsCopy;
        }
Exemple #6
0
        /// <summary>
        /// Dado un user name y una ip, busca el recurso entre los SCV IP
        /// </summary>
        /// <param name="id"></param>
        /// <param name="host"></param>
        /// <returns></returns>
        private CfgRecursoEnlaceInterno lookForResourceInScv(string id, string ip)
        {
            string idEquipo;
            CfgRecursoEnlaceInterno recurso = null;
            ulong resultNumber = 0;

            if (_MiScv.GetProxyIp(out idEquipo) == ip)
            //Pertenece a mi SCV
            {
                //Es un TOP o un recurso de telefonía IP interno
                recurso               = new CfgRecursoEnlaceInterno();
                recurso.Prefijo       = Cd40Cfg.PP_DST;
                recurso.NombreRecurso = id;
                recurso.NumeroAbonado = id; //string.Format("{0}@{1}", id, host.IpRed1);
            }
            else
            {
                foreach (Scv scv in _OtrosScv.Values)
                {
                    string ipAddScv = scv.GetProxyIp(out idEquipo);
                    if ((scv.EsCentralIp) && (ipAddScv == ip))
                    //Pertenece a otro SCV IP
                    {
                        try
                        {
                            resultNumber = Convert.ToUInt64(id);
                            if (scv.IsInRangeScv(resultNumber))
                            {
                                recurso               = new CfgRecursoEnlaceInterno();
                                recurso.Prefijo       = Cd40Cfg.ATS_DST;
                                recurso.NumeroAbonado = id;
                                recurso.NombreRecurso = string.Format("{0}@{1}", id, ipAddScv);
                                break;
                            }
                        }
                        catch
                        {
                            return(null);
                        }
                    }
                }
            }
            return(recurso);
        }
Exemple #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="id">es el user_name de la uri</param>
        /// <param name="ip">dominio o ip de la uri</param>
        /// <param name="subId"></param>
        /// <param name="rsId">campo rs que viene en la uri</param>
        /// <returns>null si no ha encontrado el recurso configurado</returns>
        public CfgRecursoEnlaceInterno GetResourceFromUri(string id, string ip, string subId, string rsId)
        {
            CfgRecursoEnlaceInterno recurso = null;

            if (!string.IsNullOrEmpty(subId))
            {
                recurso               = new CfgRecursoEnlaceInterno();
                recurso.Prefijo       = Cd40Cfg.ATS_DST;
                recurso.NumeroAbonado = subId;
            }

            //recurso = lookForResourceInScv(id, ip);
            if (recurso == null)
            {
                foreach (DireccionamientoIP host in _SystemCfg.PlanDireccionamientoIP)
                {
                    if (recurso != null)
                    {
                        break;
                    }
                    if (host.TipoHost == Tipo_Elemento_HW.TEH_TOP)
                    {
                        recurso = lookForResourceInTop(id);
                    }
                    else if ((recurso == null) &&
                             (host.TipoHost == Tipo_Elemento_HW.TEH_EXTERNO_TELEFONIA))
                    {
                        recurso = lookForResourceExternal(id, ip, host);
                    }
                    else if ((recurso == null) && (host.TipoHost == Tipo_Elemento_HW.TEH_TIFX))
                    {
                        //recurso de pasarela
                        if (host.IpRed1 == ip)
                        {
                            recurso = lookForResourceGw(id, rsId, host);
                        }
                    }
                }
            }
            return(recurso);
        }
        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;
        }
Exemple #9
0
        private CfgRecursoEnlaceInterno lookForResourceGw(string id, string rsId, DireccionamientoIP host)
        {
            CfgRecursoEnlaceInterno recurso = null;
            string foundRsId = null;

            foreach (AsignacionRecursosGW gw in _SystemCfg.PlanAsignacionRecursos)
            {
                if (string.Compare(gw.IdHost, host.IdHost, true) == 0)
                {
                    if ((string.Compare(gw.IdRecurso, id, true) == 0) || (string.Compare(gw.IdRecurso, rsId, true) == 0))
                    {
                        foundRsId = gw.IdRecurso;
                        break;
                    }
                }
            }

            //if (string.Compare(id, rsId, true) != 0)
            // Si no entra a mirar si el recurso pertenece a una red, las llamadas entrantes
            // distintas de la red RTB no entran en el puesto.
            if (string.IsNullOrEmpty(foundRsId) == false)
            {
                foreach (ListaRedes red in _SystemCfg.PlanRedes)
                {
                    foreach (PlanRecursos recInPlan in red.ListaRecursos)
                    {
                        if (string.Compare(recInPlan.IdRecurso, foundRsId, true) == 0)
                        {
                            recurso               = new CfgRecursoEnlaceInterno();
                            recurso.Prefijo       = red.Prefijo;
                            recurso.NumeroAbonado = id;
                            break;
                        }
                    }
                }

                foreach (NumeracionATS centralAts in _SystemCfg.PlanNumeracionATS)
                {
                    foreach (PlanRutas ruta in centralAts.ListaRutas)
                    {
                        foreach (string trunk in ruta.ListaTroncales)
                        {
                            foreach (PlanRecursos recInPlan in _SystemCfg.GetTrunkResources(trunk))
                            {
                                if (string.Compare(recInPlan.IdRecurso, foundRsId, true) == 0)
                                {
                                    recurso               = new CfgRecursoEnlaceInterno();
                                    recurso.Prefijo       = Cd40Cfg.ATS_DST;
                                    recurso.NumeroAbonado = id;
                                    recurso.NombreRecurso = foundRsId;
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            if ((recurso == null) && (foundRsId != null))
            {
                recurso               = new CfgRecursoEnlaceInterno();
                recurso.Prefijo       = Cd40Cfg.PP_DST;
                recurso.NombreRecurso = foundRsId;
                recurso.NumeroAbonado = foundRsId;
                recurso.Interface     = TipoInterface.TI_AB;
            }
            return(recurso);
        }
Exemple #10
0
        /// <summary>
        /// Dado un user name y una ip, busca el recurso entre los equipos externos.
        /// Es el caso de los recursos ATS de encaminamientos IP
        /// Si no lo encuentra, devuelve null.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="host"></param>
        /// <returns></returns>
        private CfgRecursoEnlaceInterno lookForResourceExternal(string id, string ip, DireccionamientoIP host)
        {
            long resultNumber = 0;
            CfgRecursoEnlaceInterno recurso = null;

            if (host.Interno)
            {
                if (ip == host.IpRed1)
                //Pertenece a la centralita interna
                {
                    recurso               = new CfgRecursoEnlaceInterno();
                    recurso.Prefijo       = Cd40Cfg.PP_DST;
                    recurso.NombreRecurso = id;
                    recurso.NumeroAbonado = id; //string.Format("{0}@{1}", id, host.IpRed1);
                }
            }
            else
            {
                if (host.EsCentralIP)
                {
                    try
                    {
                        resultNumber = Convert.ToInt64(id);
                        if ((resultNumber >= host.Min) && (resultNumber <= host.Max))
                        {
                            recurso               = new CfgRecursoEnlaceInterno();
                            recurso.Prefijo       = Cd40Cfg.ATS_DST;
                            recurso.NumeroAbonado = id;
                            recurso.NombreRecurso = string.Format("{0}@{1}", id, host.IpRed1);
                        }
                    }
                    catch
                    {
                        return(null);
                    }
                }
                else if (ip == host.IpRed1)
                {
                    //Este es el caso de la telefonía de equipos externos a una PABX externa
                    string nombreRecurso = null;
                    foreach (AsignacionRecursosGW gw in _SystemCfg.PlanAsignacionRecursos)
                    {
                        if (string.Compare(gw.IdHost, host.IdHost, true) == 0)
                        {
                            nombreRecurso = gw.IdRecurso;
                        }
                    }
                    if (nombreRecurso != null)
                    {
                        foreach (ListaRedes red in _SystemCfg.PlanRedes)
                        {
                            foreach (PlanRecursos recInPlan in red.ListaRecursos)
                            {
                                if (string.Compare(recInPlan.IdRecurso, nombreRecurso, true) == 0)
                                {
                                    recurso               = new CfgRecursoEnlaceInterno();
                                    recurso.Prefijo       = red.Prefijo;
                                    recurso.NumeroAbonado = id;
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            return(recurso);
        }
        ///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);
        }