Exemplo n.º 1
0
        public async Task <WiFiConnectionStatus> ConnectToNetwork(WifiListViewItemPresenter network, bool autoConnect)
        {
            Log.Enter();
            await AvailableNetworksLock.WaitAsync();

            if (network == null)
            {
                return(WiFiConnectionStatus.UnspecifiedFailure);
            }

            try
            {
                var result = await network.Adapter.ConnectAsync(network.AvailableNetwork, autoConnect?WiFiReconnectionKind.Automatic : WiFiReconnectionKind.Manual);

                //Call redirect only for Open Wifi
                if (IsNetworkOpen(network))
                {
                    //Navigate to http://www.msftconnecttest.com/redirect
                    NavigationUtils.NavigateToScreen(typeof(WebBrowserPage), Common.GetResourceText("MicrosoftWifiConnect"));
                }

                Log.Leave($"LEAVE {result.ConnectionStatus}");
                return(result.ConnectionStatus);
            }
            catch (Exception)
            {
                return(WiFiConnectionStatus.UnspecifiedFailure);
            }
        }
        private async Task ConnectToWifiAsync(WifiListViewItemPresenter network, PasswordCredential credential, CoreDispatcher dispatcher)
        {
            await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                SwitchToItemState(network, WifiConnectingState, false);
            });

            Task <WiFiConnectionStatus> didConnect = null;

            if (network.IsEapAvailable)
            {
                didConnect = (credential == null) ?
                             App.NetworkPresenter.ConnectToNetwork(network, network.ConnectAutomatically) :
                             App.NetworkPresenter.ConnectToNetworkWithPassword(network, network.ConnectAutomatically, credential);
            }
            else
            {
                didConnect = (credential == null) ?
                             App.NetworkPresenter.ConnectToNetwork(network, network.ConnectAutomatically) :
                             App.NetworkPresenter.ConnectToNetworkWithPassword(network, network.ConnectAutomatically, credential);
            }

            WiFiConnectionStatus status = await didConnect;

            await OnConnected(network, status, dispatcher);
        }
        private async Task OnConnected(WifiListViewItemPresenter network, WiFiConnectionStatus status, CoreDispatcher dispatcher)
        {
            if (status == WiFiConnectionStatus.Success)
            {
                await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    var itemLocation = WifiListViewItems.IndexOf(network);

                    // don't move if index is -1 or 0
                    if (itemLocation > 0)
                    {
                        // make sure first network doesn't also show connected
                        SwitchToItemState(WifiListViewItems[0], WifiInitialState, true);

                        // Show current connected network at top of list in connected state
                        WifiListViewItems.Move(itemLocation, 0);
                    }

                    var item = SwitchToItemState(network, WifiConnectedState, true);
                    if (item != null)
                    {
                        item.IsSelected = true;
                    }
                });

                NetworkConnected?.Invoke(this, new EventArgs());
            }
            else
            {
                var resourceLoader = ResourceLoader.GetForCurrentView();
                network.Message          = resourceLoader.GetString(status.ToString() + "Text");
                network.IsMessageVisible = true;
                SwitchToItemState(network, WifiConnectState, true);
            }
        }
Exemplo n.º 4
0
        public async Task <WiFiConnectionStatus> ConnectToNetworkWithPassword(WifiListViewItemPresenter network, bool autoConnect, PasswordCredential password)
        {
            Log.Enter();
            try
            {
                var result = await network.Adapter.ConnectAsync(
                    network.AvailableNetwork,
                    autoConnect?WiFiReconnectionKind.Automatic : WiFiReconnectionKind.Manual,
                    password);

                Log.Leave($"LEAVE {result.ConnectionStatus}");
                return(result.ConnectionStatus);
            }
            catch (Exception)
            {
                return(WiFiConnectionStatus.UnspecifiedFailure);
            }
        }
Exemplo n.º 5
0
 public static bool IsNetworkOpen(WifiListViewItemPresenter network)
 {
     Log.Enter();
     return(network.AvailableNetwork.SecuritySettings.NetworkEncryptionType == NetworkEncryptionType.None);
 }
Exemplo n.º 6
0
 public void DisconnectNetwork(WifiListViewItemPresenter network)
 {
     Log.Enter();
     network.Adapter.Disconnect();
     Log.Leave();
 }
Exemplo n.º 7
0
        public async Task <bool> UpdateAvailableNetworksAsync(bool refreshIfNeeded)
        {
            Log.Enter($"refreshIfNeeded={refreshIfNeeded}");
            try
            {
                await AvailableNetworksLock.WaitAsync();

                if ((await TestAccess()) == false)
                {
                    return(false);
                }

                if (refreshIfNeeded && !IsRefreshNeeded())
                {
                    return(true);
                }

                LastRefresh = DateTime.Now;

                EnumAdaptersCompleted.WaitOne();
                List <WiFiAdapter> WiFiAdaptersList = new List <WiFiAdapter>(WiFiAdapters.Values);
                foreach (var adapter in WiFiAdaptersList)
                {
                    if (adapter == null)
                    {
                        return(false);
                    }

                    try
                    {
                        await adapter.ScanAsync();
                    }
                    catch (Exception)
                    {
                        // ScanAsync() can throw an exception if the scan timeouts.
                        continue;
                    }

                    if (adapter.NetworkReport == null)
                    {
                        continue;
                    }

                    DateTime reportTime = DateTime.Now;
                    foreach (var network in adapter.NetworkReport.AvailableNetworks)
                    {
                        if (!String.IsNullOrWhiteSpace(network.Ssid))
                        {
                            if (AvailableNetworks.ContainsKey(network.Ssid))
                            {
                                WifiListViewItemPresenter value;
                                AvailableNetworks.TryRemove(network.Ssid, out value);
                            }

                            var item = new WifiListViewItemPresenter(network, adapter, reportTime);
                            if (AvailableNetworks.TryAdd(network.Ssid, item))
                            {
                                await item.InitializeAsync();

                                Log.Trace($"Adding {network.Ssid}");
                            }
                        }
                    }

                    // remove some jitter from the list when refresh is repeatedly clicked
                    // by remembering networks from the last 5 minutes
                    DateTime expireTime = DateTime.Now - TimeSpan.FromMinutes(5);
                    foreach (var key in AvailableNetworks.Keys)
                    {
                        if (AvailableNetworks[key].LastSeen < expireTime)
                        {
                            WifiListViewItemPresenter value;
                            AvailableNetworks.TryRemove(key, out value);
                        }
                    }
                }

                Log.Leave();
                return(true);
            }
            finally
            {
                AvailableNetworksLock.Release();
            }
        }