/// <summary>
        /// Verifica la conexión de la red ad-hoc
        /// </summary>
        internal void checkWLanConnection()
        {
            try
            {
                //Revisa si hay un adaptador seleccionado en la configuración
                if (netData.NetworkAdapter == null)
                {
                    throw new Exception("no hay un adaptador de red seleccionado");
                }

                INetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
                foreach (INetworkInterface networkInterface in networkInterfaces)
                {
                    if (netData.NetworkAdapter.Name.Equals(networkInterface.Name))
                    {
                        WirelessZeroConfigNetworkInterface adapter = (WirelessZeroConfigNetworkInterface)networkInterface;
                        String ssid = adapter.AssociatedAccessPoint;
                        if (ssid == null)
                        {
                            connectionState = WifiConnectionState.DISCONNECTED;
                            wifiInformation("disconnected");
                        }
                        else if (netData.AdhocNetworkName.Equals(ssid) && adapter.OperationalStatus == OperationalStatus.Up && SystemHandler.getIpState(netData.NetworkAdapter, netData.IpTcpListener) != IpState.NOTFOUND)
                        {
                            connectionState = WifiConnectionState.CONNECTED;
                            wifiInformation("connected");
                        }
                        else if (netData.AdhocNetworkName.Equals(ssid) && adapter.OperationalStatus != OperationalStatus.Up)
                        {
                            connectionState = WifiConnectionState.WAINTING;
                            wifiInformation("waiting");
                        }
                        else
                        {
                            connectionState = WifiConnectionState.DISCONNECTED;
                            wifiInformation("disconnected");
                        }
                        break;
                    }
                }
            }
            catch (ThreadAbortException e)
            {
                throw e;
            }
            catch (Exception e)
            {
                wifiInformation("error " + e.Message);
            }
        }
        /// <summary>
        /// Verifica que no exista Ip duplicada en el sistema operativo, si gatilla resetIpDelegate, asegura que el Thread se detendrá
        /// </summary>
        private void checkIp()
        {
            while (true)
            {
                System.Threading.Thread.Sleep(netData.WaitTimeStart);
                //Chequea Strong DAD
                if (state.Equals(IphandlerState.STARTEDSTRONG))
                {
                    int ipState = SystemHandler.getIpState(netData.NetworkAdapter, netData.IpTcpListener);
                    switch (ipState)
                    {
                    case IpState.DUPLICATE:
                    {
                        resetIpDelegate();
                        return;
                    }

                    case IpState.NOTFOUND:
                    {
                        resetIpDelegate();
                        return;
                    }
                    }
                }
                else if (state.Equals(IphandlerState.STARTEDWEAK))
                {
                    //Chequea Weak DAD
                    lock (queueLock)
                    {
                        while (queue.Count > 0)
                        {
                            IPAddress outterIp = queue.Dequeue();
                            if (outterIp.Equals(netData.IpTcpListener))
                            {
                                resetIpDelegate();
                                return;
                            }
                        }
                    }
                    //chequea Strong DAD
                    int ipState = SystemHandler.getIpState(netData.NetworkAdapter, netData.IpTcpListener);
                    switch (ipState)
                    {
                    case IpState.DUPLICATE:
                    {
                        resetIpDelegate();
                        return;
                    }

                    case IpState.INVALID:
                    {
                        resetIpDelegate();
                        return;
                    }

                    case IpState.NOTFOUND:
                    {
                        resetIpDelegate();
                        return;
                    }
                    }
                    //Chequea loneliness
                    if (netData.OpSystem == OpSystemType.WIN7)
                    {
                        Int64 nBytes = SystemHandler.getAliveValue(netData.NetworkAdapter);
                        if (nBytes == lastAliveValue)
                        {
                            lolinessTimeOut++;
                            if (lolinessTimeOut >= netData.LolinessTimeOut)
                            {
                                resetIpDelegate();
                                return;
                            }
                        }
                        else
                        {
                            lolinessTimeOut = 0;
                        }
                        lastAliveValue = nBytes;
                    }

                    //Chequea operatividad del adaptador
                    if (netData.OpSystem == OpSystemType.WIN7)
                    {
                        if (!SystemHandler.isOperative(netData.NetworkAdapter))
                        {
                            resetIpDelegate();
                            return;
                        }
                    }
                }
                //Detiene o duerme segun corresponda
                lock (stopLock)
                {
                    if (state.Equals(IphandlerState.STOPPED))
                    {
                        return;
                    }
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Verifica que no exista Ip duplicada en el sistema operativo, si gatilla resetIpDelegate, asegura que el Thread se detendrá
        /// </summary>
        private void checkIp()
        {
            while (true)
            {
                System.Threading.Thread.Sleep(netData.WaitTimeStart);
                //Chequea Strong DAD
                if (state.Equals(IphandlerState.STARTEDSTRONG))
                {
                    try
                    {
                        int ipState = SystemHandler.getIpState(netData.NetworkAdapter, netData.IpTcpListener);
                        switch (ipState)
                        {
                        case IpState.DUPLICATE:
                        {
                            resetIpDelegate();
                            return;
                        }

                        case IpState.NOTFOUND:
                        {
                            resetIpDelegate();
                            return;
                        }
                        }
                    }
                    catch (ThreadAbortException e)
                    {
                        throw e;
                    }
                    catch (Exception)
                    {
                    }
                }
                else if (state.Equals(IphandlerState.STARTEDWEAK))
                {
                    //Chequea Weak DAD
                    lock (queueLock)
                    {
                        while (queue.Count > 0)
                        {
                            IPAddress outterIp = queue.Dequeue();
                            if (outterIp.Equals(netData.IpTcpListener))
                            {
                                resetIpDelegate();
                                return;
                            }
                        }
                    }
                    //chequea Strong DAD
                    try
                    {
                        int ipState = SystemHandler.getIpState(netData.NetworkAdapter, netData.IpTcpListener);
                        switch (ipState)
                        {
                        case IpState.DUPLICATE:
                        {
                            resetIpDelegate();
                            return;
                        }

                        case IpState.INVALID:
                        {
                            resetIpDelegate();
                            return;
                        }

                        case IpState.NOTFOUND:
                        {
                            resetIpDelegate();
                            return;
                        }
                        }
                    }
                    catch (ThreadAbortException e)
                    {
                        throw e;
                    }
                    catch (Exception)
                    {
                    }
                    //Chequea loneliness
                    if (aliveValue > preAliveValue)
                    {
                        lolinessTimeOut = 0;
                    }
                    else
                    {
                        lolinessTimeOut++;
                        if (lolinessTimeOut >= netData.LolinessTimeOut)
                        {
                            resetIpDelegate();
                            return;
                        }
                    }
                    preAliveValue = aliveValue;
                }
                //Detiene o duerme segun corresponda
                lock (stopLock)
                {
                    if (state.Equals(IphandlerState.STOPPED))
                    {
                        return;
                    }
                }
            }
        }