/// <summary> /// Este metodo se mandara a llamar cada vez que se desee actualizar la información en pantalla /// de la interfaz seleccionada. /// Se debe garantizar que este seleccionado un item en el combobox antes de mandar a llarmarlo. /// </summary> /// <returns></returns> /// private int Actualizar_Despliegue_Interfaz() { ///Lo primero, es obtener la Interfaz seleccionada BoxInterfasesRedes bxInterfas = (BoxInterfasesRedes)box_lista_interfases.SelectedItem; ipv6_lb_addresses.BeginUpdate(); #region Limpiar_Componentes //Lo primero es limpiar los cuadros de texto, con el objetivo de que no se despliegue //informacion anterior y por lo mismo erronea(Particularmente importante cuando //el protocolo esta deshabilitado). ipv4_tb_address.Text = ""; ipv4_tb_gtw.Text = ""; ipv4_tb_mask.Text = ""; ipv6_tb_gtw.Text = ""; ipv6_lb_addresses.Items.Clear(); #endregion #region Detectar_EstadoInterfaz //Vemos como esta la itnerfaz, para motivos practicos, mostramos DOWN para cualquier //estatus distinto a una interfaz Levantada. // En caso de estar caida deshabilito los componentes y botones de esa hoja del tabulador. // Dejo el Try-Catch por trabajar con archivos fisicos (las imagenes ) try { if (bxInterfas.getIntStatus()) { //El boton de estatus de la interfaz picture_updown.Image = global::Manejador_de_Redes.Properties.Resources.UP; toolTip1.SetToolTip(picture_updown, Msg_EstatusInterfazUP); //ADemas del estado del a interfaz depende el protocolo habilitado. //Los componentes IPv4 if (bxInterfas.getisIPv4Enable()) { panel_ipv4.Enabled = true; bt_ipv4_form_avanzado.Enabled = true; ipv4_groupbox_tipodirre.Enabled = true; } else { panel_ipv4.Enabled = false; bt_ipv4_form_avanzado.Enabled = false; ipv4_groupbox_tipodirre.Enabled = false; } //Los componentes IPv6 if (bxInterfas.getisIPv6Enable()) { panel_ipv6.Enabled = true; bt_ipv6_form_avanzado.Enabled = true; ipv6_groupbox_tipodirre.Enabled = true; } else { panel_ipv6.Enabled = false; bt_ipv6_form_avanzado.Enabled = false; ipv6_groupbox_tipodirre.Enabled = false; } } else //TODO MUERE { //El boton de estatus de la interfaz picture_updown.Image = global::Manejador_de_Redes.Properties.Resources.Down; toolTip1.SetToolTip(picture_updown, Msg_EstatusInterfazDown); //Los componentes IPv4 panel_ipv4.Enabled = false; bt_ipv4_form_avanzado.Enabled = false; ipv4_groupbox_tipodirre.Enabled = false; //Los componentes IPv6 panel_ipv6.Enabled = false; bt_ipv6_form_avanzado.Enabled = false; ipv6_groupbox_tipodirre.Enabled = false; } } catch (SystemException error) { throw (error); // Rethrowing exception e }//Catch* #endregion #region Actualizar_datos //Con las ventanas preparadas llenaremos los campos de IPv4 e IPv6 con //datos obtenidos de la misma interfaz. ipv4_tb_address.Text = bxInterfas.getIpv4Address(); ipv4_tb_gtw.Text = bxInterfas.getFirstIpv4Gateway(); ipv4_tb_mask.Text = bxInterfas.getNetmask(); ipv6_tb_gtw.Text = bxInterfas.getFirstIpv6Gateway(); List <String> lAux; lAux = bxInterfas.getAllIpv6Address(); //Cada dirrecion debe ser incluida en el ListBox //Por defecto la primera dirrecion sera selecionada foreach (String sIPv6 in lAux) { ipv6_lb_addresses.Items.Add(sIPv6); } if (ipv6_lb_addresses.Items.Count > 0) { ipv6_lb_addresses.SelectedIndex = 0; } ipv6_lb_addresses.EndUpdate(); //Ahora viene detectar el modo de trabajo de IPv4 //Relativamente facil al solo tener un tipo de dirrecionamiento. if (bxInterfas.getisDHCPv4Enabled()) { ipv4_dinamica.Checked = true; } else { ipv4_estatica.Checked = true; } //IPv6 es otro boleto... al tener multiples dirreciones //Potencial Error en el disenio de la aplicacion: las multiples posibles //dirreciones por interfaz ¿permiten tener DHCP y Estaticas simultaneamente? //¿Permite tener stateless y stateful simultaneamente? (Ya que el link-state siempre // sera stateless es un hecho que pueden haber fe80:: con stateful) //Por el momento la aplicacion forzara a la persona a solo tener // DHCP | Estatica | plug&play //La solucion sera manejar IPv6 de forma distinta a IPv4. Se indicara el tipo //de dirrecion seleccionada del List Box ipv6_lb_addresses //Claro, esto si hay dirreciones posibles... if (ipv6_lb_addresses.Items.Count < 1) { return(1); } if ((bxInterfas.getOrigingIPv6Suffix(lAux[0], SuffixOrigin.LinkLayerAddress)) || (bxInterfas.getOrigingIPv6Suffix(lAux[0], SuffixOrigin.Random))) { rd_ipv6_plugplay.Checked = true; } else if (bxInterfas.getOrigingIPv6Suffix(lAux[0], SuffixOrigin.OriginDhcp)) { rd_ipv6_dhcp.Checked = true; } else { rd_ipv6_static.Checked = true; } #endregion return(1); }
/// <summary> /// Se encarga de poblar el listbox correspondiente al DNS /// </summary> /// <returns></returns> private int PoblarTabla_DNS() { IPAddressCollection ipDNS; if (bVersionIP == bWorking_IPv4) { ipDNS = nInterfaz.getDNSv4Address(); } else { ipDNS = nInterfaz.getDNSv6Address(); } list_dns.BeginUpdate(); list_dns.Items.Clear(); //SI, SOLO SI la lista no esta vacia! if (ipDNS == null) { list_dns.Items.Add("No hay informacion"); //Es peligroso si el usuario intenta anexar info //ya que estamos ante un potecial riesgo de daño panel_dns.Enabled = false; return(1); } else { for (int iC = 0; iC < ipDNS.Count; iC++) { //Este conjunto de dirreciones pueden estar mezcladas en distintos //protoclos L3 (IPv4 e IPv6) solo queremos un tipo y solo ese tipo if (nInterfaz.ConfirmarTipoIP(ipDNS[iC], bVersionIP)) { list_dns.Items.Add(ipDNS[iC].ToString()); } } } //Ahora, debemos decidir si el usuario puede o no editar esta informacion //regla basica: Si hay ip fija, el usuario puede editar if (bVersionIP == bWorking_IPv4) { if (!(nInterfaz.getisDHCPv4Enabled()) || bModificable_DHCP) { panel_dns.Enabled = true; } else { panel_dns.Enabled = false; } } else //IPv6 if (!(nInterfaz.getisDHCPv6Enabled()) || bModificable_DHCP) { panel_dns.Enabled = true; } else { panel_dns.Enabled = false; } list_dns.Update(); list_dns.ClearSelected(); list_dns.EndUpdate(); return(1); }