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