private async void ConnectToNetwork(WiFiAvailableNetwork network) { lock (_stateLock) { _state = OnboardingState.ConfiguredValidating; } WiFiConnectionResult connectionResult; if (network.SecuritySettings.NetworkAuthenticationType == NetworkAuthenticationType.Open80211) { connectionResult = await _wlanAdapter.ConnectAsync(network, WiFiReconnectionKind.Automatic); } else { connectionResult = await _wlanAdapter.ConnectAsync(network, WiFiReconnectionKind.Automatic, new PasswordCredential { Password = _personalApPassword }); } lock (_stateLock) { if (connectionResult.ConnectionStatus == WiFiConnectionStatus.Success) { _error = OnboardingError.Validated; _errorMessage = null; _state = OnboardingState.ConfiguredValidated; } else { _state = OnboardingState.ConfiguredError; _errorMessage = connectionResult.ConnectionStatus.ToString(); switch (connectionResult.ConnectionStatus) { case WiFiConnectionStatus.AccessRevoked: case WiFiConnectionStatus.InvalidCredential: { _error = OnboardingError.Unauthorized; break; } case WiFiConnectionStatus.UnsupportedAuthenticationProtocol: { _error = OnboardingError.UnsupportedProtocol; break; } case WiFiConnectionStatus.NetworkNotAvailable: case WiFiConnectionStatus.Timeout: case WiFiConnectionStatus.UnspecifiedFailure: default: { _error = OnboardingError.ErrorMessage; break; } } } } }
private async Task <WiFiConnectionStatus> ConnectToNetwork(WiFiAdapter adapter, WiFiAvailableNetwork network) { lock (_stateLock) { _state = OnboardingState.ConfiguredValidating; } string resultPassword = ""; WiFiConnectionResult connectionResult; // For all open networks (when no PSK was provided) connect without a password // Note, that in test, we have seen some WEP networks identify themselves as Open even though // they required a PSK, so use the PSK as a determining factor if ((network.SecuritySettings.NetworkAuthenticationType == NetworkAuthenticationType.Open80211) && string.IsNullOrEmpty(_personalApPassword)) { connectionResult = await adapter.ConnectAsync(network, WiFiReconnectionKind.Automatic); } // Otherwise for all WEP/WPA/WPA2 networks convert the PSK back from a hex-ized format back to a passphrase, if necessary, // and onboard this device to the requested network. else { PasswordCredential pwd = new PasswordCredential(); resultPassword = ConvertHexToPassPhrase(network.SecuritySettings.NetworkAuthenticationType, _personalApPassword); pwd.Password = resultPassword; connectionResult = await adapter.ConnectAsync(network, WiFiReconnectionKind.Automatic, pwd); } lock (_stateLock) { if (connectionResult.ConnectionStatus == WiFiConnectionStatus.Success) { _error = OnboardingError.Validated; _errorMessage = null; _state = OnboardingState.ConfiguredValidated; } else { _state = OnboardingState.ConfiguredError; _errorMessage = connectionResult.ConnectionStatus.ToString(); switch (connectionResult.ConnectionStatus) { case WiFiConnectionStatus.AccessRevoked: case WiFiConnectionStatus.InvalidCredential: { _error = OnboardingError.Unauthorized; break; } case WiFiConnectionStatus.UnsupportedAuthenticationProtocol: { _error = OnboardingError.UnsupportedProtocol; break; } case WiFiConnectionStatus.NetworkNotAvailable: case WiFiConnectionStatus.Timeout: case WiFiConnectionStatus.UnspecifiedFailure: default: { _error = OnboardingError.ErrorMessage; break; } } } } #if DEBUG var folder = Windows.Storage.ApplicationData.Current.LocalFolder; var file = await folder.CreateFileAsync("ConnectionResult.Txt", Windows.Storage.CreationCollisionOption.ReplaceExisting); string myout = "ConnectionResult= " + connectionResult.ConnectionStatus.ToString() + "\r\n"; myout += "Type=" + network.SecuritySettings.NetworkAuthenticationType.ToString() + "\r\n"; myout += "InputPassword= "******"\r\n"; myout += "ResultPassword= "******"\r\n"; await Windows.Storage.FileIO.WriteTextAsync(file, myout); #endif return(connectionResult.ConnectionStatus); }