Ejemplo n.º 1
0
        //public void SaveToJSON(List<WifiNetworkDto> wifiNetworks)
        //{
        //    JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };
        //    string str = JsonConvert.SerializeObject(wifiNetworks, settings);
        //    var filePathJSON = string.Format(filePathTemplateJSON, DateTime.Now.ToString("yyyyMMdd-HHmm"));
        //    System.IO.File.WriteAllText(filePathJSON, str);
        //}

        public async Task <WifiConnectionInfo> ConnectAsync(WifiNetworkDto network)
        {
            WifiConnectionInfo info2 = null;

            info2 = TryConnectViaMethod(network);
            if (info2 != null)
            {
                var coords = await GetCoordsAsync();

                if (coords != null)
                {
                    info2.FirstCoordLat    = coords.Item1;
                    info2.FirstCoordLong   = coords.Item2;
                    info2.FirstCoordAlt    = coords.Item3;
                    info2.FirstConnectWhen = DateTime.Now;
                }
                info2.RouterWebUIIP = "http://" + info2.RouterWebUIIP;
            }
            return(info2);
        }
Ejemplo n.º 2
0
        public void TryUpdateFirstConnectionInfo(WifiConnectionInfo info2)
        {
            // write data about first connection only if it has not been written yet
            if (FirstConnectWhen == null)
            {
                FirstConnectWhen = info2.FirstConnectWhen;
            }
            if (string.IsNullOrEmpty(FirstConnectMac))
            {
                FirstConnectMac = info2.FirstConnectMac;
            }
            if (string.IsNullOrEmpty(FirstConnectPublicIP))
            {
            }

            if (!FirstCoordLat.HasValue)
            {
                FirstCoordLat  = info2.FirstCoordLat;
                FirstCoordLong = info2.FirstCoordLong;
                FirstCoordAlt  = info2.FirstCoordAlt;
            }
            // always actualize info about Web UI
            RouterWebUIIP = info2.RouterWebUIIP;
        }
Ejemplo n.º 3
0
        WifiConnectionInfo TryConnectViaMethod(WifiNetworkDto dto)
        {
            string             bssid             = dto.BssID;
            string             ssid              = dto.Name;
            string             password          = dto.Password;
            var                formattedSsid     = $"\"{ssid}\"";
            var                formattedPassword = $"\"{password}\"";
            WifiConnectionInfo info2             = null;


            var wifiConfig = new WifiConfiguration
            {
                Bssid    = bssid,
                Ssid     = formattedSsid,
                Priority = Constants.WIFI_CONFIG_PRIORITY
            };

            if (dto.NetworkType.Contains("[WEP]"))
            {
                // for WEP
                wifiConfig.WepKeys[0] = formattedPassword;

                wifiConfig.WepTxKeyIndex = 0;
                wifiConfig.AllowedKeyManagement.Set((int)KeyManagementType.None);

                wifiConfig.AllowedProtocols.Set((int)Android.Net.Wifi.ProtocolType.Rsn);
                wifiConfig.AllowedGroupCiphers.Set((int)Android.Net.Wifi.GroupCipherType.Wep40);
                wifiConfig.AllowedProtocols.Set((int)Android.Net.Wifi.ProtocolType.Wpa);

                wifiConfig.AllowedGroupCiphers.Set((int)Android.Net.Wifi.GroupCipherType.Wep104);
            }
            else
            if (dto.NetworkType.Contains("[WPA"))
            {
                //wifiConfig.AllowKeyManagement.Set((int)KeyManagementType.WpaPsk);
                wifiConfig.PreSharedKey = formattedPassword;
            }
            else
            {
                // open networks
                wifiConfig.AllowedProtocols.Set((int)Android.Net.Wifi.ProtocolType.Rsn);
                wifiConfig.AllowedKeyManagement.Set((int)KeyManagementType.None);
            }


            var wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Android.Content.Context.WifiService);
            var connManager = (ConnectivityManager)Android.App.Application.Context.GetSystemService(Android.Content.Context.ConnectivityService);
            var ni1         = connManager.ActiveNetworkInfo;

            if (ni1 != null && ni1.IsConnected && ni1.Type == ConnectivityType.Wifi)
            {
                //WifiConnectionInfo info = new WifiConnectionInfo
                //{
                //    FirstConnectMac = wifiManager.ConnectionInfo.MacAddress,

                //};
                return(null);
            }
            else
            {
                wifiManager.SetWifiEnabled(true);
                var addNetworkIdx = wifiManager.AddNetwork(wifiConfig);
                var bd            = wifiManager.Disconnect();
                var enableNetwork = wifiManager.EnableNetwork(addNetworkIdx, true);
                var brc           = wifiManager.Reconnect();

                DhcpInfo dhcpInfo = wifiManager.DhcpInfo;
                //byte[] ipAddress = BitConverter.GetBytes(dhcpInfo.Gateway);
                int gwip = wifiManager.DhcpInfo.Gateway;
                Task.Delay(500);
                gwip = wifiManager.DhcpInfo.Gateway;

                var gwAddr = (gwip & 0xFF) + "." +
                             ((gwip >> 8) & 0xFF) + "." +
                             ((gwip >> 16) & 0xFF) + "." +
                             ((gwip >> 24) & 0xFF);
                info2 = new WifiConnectionInfo
                {
                    FirstConnectMac = wifiManager.ConnectionInfo.MacAddress,
                    // https://theconfuzedsourcecode.wordpress.com/2015/05/16/how-to-easily-get-device-ip-address-in-xamarin-forms-using-dependencyservice/
                    RouterWebUIIP = gwAddr //DependencyService.Get<IIPAddressManager>().GetIPAddress(),
                };
            }

            var isConnectedToAP = wifiManager.ConnectionInfo.BSSID != "00:00:00:00:00:00" &&
                                  info2.RouterWebUIIP != "127.0.0.1" &&
                                  info2.RouterWebUIIP != "0.0.0.0";

            return(isConnectedToAP ? info2 : null);
        }