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