コード例 #1
0
ファイル: Form_Principal.cs プロジェクト: Belsirk/Red_Manager
        /// <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);
        }