static Kvrlib.Status doScanNetwork(Kvrlib.ConfigHnd handle) { Kvrlib.Status status; Kvrlib.Status stat; Int32 active = 0; //is a passive scan Kvrlib.Bss bss_type = Kvrlib.Bss.ANY; //infrastruction and adhoc Kvrlib.RegulatoryDomain domain = Kvrlib.RegulatoryDomain.WORLD; string ssid = ""; string securityString = ""; Int32 rssi = 0; Int32 channel = 0; Kvrlib.Address mac; Int32 capability; Int32 type_wpa; Kvrlib.CipherInfoElement wpa_info = new Kvrlib.CipherInfoElement(); Kvrlib.CipherInfoElement rsn_info = new Kvrlib.CipherInfoElement(); status = Kvrlib.WlanStartScan(handle, active, bss_type, domain); if (!status.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not start scan " + Convert.ToInt32(status)); return status; } do { status = Kvrlib.WlanGetScanResults(handle, ref rssi, ref channel, out mac, out bss_type, out ssid, out capability, out type_wpa, out wpa_info, out rsn_info); if(status.Equals(Kvrlib.Status.OK)) { String tmp_address; Console.WriteLine("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); Console.WriteLine("SSID: " + ssid); Console.WriteLine("RSSI: " + rssi +" dBm"); Console.WriteLine("WLAN Channel: " + channel); status = Kvrlib.StringFromAddress(out tmp_address, mac); if (!status.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could convert string from address (" + status + ")"); return status; } Console.WriteLine("MAC address: " + tmp_address); Console.WriteLine("BSS type: " + bss_type); Console.WriteLine("Capabilities: {0:X}", capability); stat = Kvrlib.WlanGetSecurityText(out securityString, capability, type_wpa, wpa_info, rsn_info); Console.Write("Security"); if (stat.Equals(Kvrlib.Status.PARAMETER)) { Console.Write("(Truncated)"); } Console.WriteLine(": " + securityString); } } while(status.Equals(Kvrlib.Status.OK) || status.Equals(Kvrlib.Status.NO_ANSWER)); // Kvrlib.Status.BLANK => no more networks => OK return (status.Equals(Kvrlib.Status.BLANK) ? Kvrlib.Status.OK : status); }
static int Main(string[] args) { String password = ""; string xml_config = ""; Kvrlib.Status kvrstat; Kvrlib.ConfigHnd configHandle = new Kvrlib.ConfigHnd(); Kvrlib.Address address = new Kvrlib.Address(); Kvrlib.CipherInfoElement cipherInfoElement = new Kvrlib.CipherInfoElement(); Int32 i; Int32 cur_profile; Int32 canlib_channel; Int32 no_profiles; object serial; object ean; Canlib.canStatus stat = new Canlib.canStatus(); Canlib.canInitializeLibrary(); Kvrlib.InitializeLibrary(); switch (args.Length) { case 0: listDevices(); return 0; case 1: canlib_channel = args[0][0] - '0'; break; default: listDevices(); return -1; } stat = Canlib.canGetChannelData(canlib_channel, Canlib.canCHANNELDATA_CARD_UPC_NO,out ean); stat = Canlib.canGetChannelData(canlib_channel, Canlib.canCHANNELDATA_CARD_SERIAL_NO, out serial); if (isAvailibleForConfig(canlib_channel, password)) { Console.WriteLine("Channel " + canlib_channel + " is availible for configuration"); } else { Console.WriteLine("Channel " + canlib_channel + " can not be opend for configuration"); Canlib.canUnloadLibrary(); return -1; } Canlib.canUnloadLibrary(); //---------------------------------------------------------------------------- // List number of profiles kvrstat = Kvrlib.ConfigNoProfilesGet(canlib_channel, out no_profiles); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Device does not support profiles " + kvrstat); return Convert.ToInt32(kvrstat); } Console.WriteLine("Device supports " + no_profiles + " profiles."); Kvrlib.ConfigActiveProfileGet(canlib_channel, out cur_profile); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not get active profile number " + kvrstat); return Convert.ToInt32(kvrstat); } Console.WriteLine("Active profile is: " + cur_profile); // Show profiles for (i = 0; i < no_profiles; i++) { kvrstat = Kvrlib.ConfigInfoGet(canlib_channel, i, out xml_config); if (kvrstat.Equals(Kvrlib.Status.BLANK)) { Console.WriteLine("Profile " + i + " is blank."); } else if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not read profile " + i); return Convert.ToInt32(kvrstat); } else { Console.WriteLine("Profile " + i + ":\n" + xml_config); } } //---------------------------------------------------------------------------- // Start configuration - read only kvrstat = Kvrlib.ConfigOpenEx(canlib_channel, Kvrlib.ConfigMode.R, password, out configHandle, cur_profile); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not start config " + kvrstat); return Convert.ToInt32(kvrstat); } // List available networks. This information could be // helpful when creating the XML configuration. kvrstat = doScanNetwork(configHandle); Kvrlib.ConfigClose(configHandle); //---------------------------------------------------------------------------- // Start configuration - read/write kvrstat = Kvrlib.ConfigOpen(canlib_channel, Kvrlib.ConfigMode.RW, password, out configHandle); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not start config " + kvrstat); return Convert.ToInt32(kvrstat); } kvrstat = doConfigure(configHandle); // Done! Kvrlib.ConfigClose(configHandle); // Wait for reboot if (waitForDevice(ean, serial, 10000) != 0) { //10s timeout Console.WriteLine("waitForDevice() failed."); return -1; } //---------------------------------------------------------------------------- // Start configuration - read only kvrstat = Kvrlib.ConfigOpen(canlib_channel, Kvrlib.ConfigMode.R, password, out configHandle); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not start config " + kvrstat); return Convert.ToInt32(kvrstat); } kvrstat = doTryConfigure(configHandle, 5, ean, serial); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("doTryConfiguration failed (" + kvrstat + ")"); return Convert.ToInt32(kvrstat); } Kvrlib.ConfigClose(configHandle); Console.WriteLine("\nDone!"); Console.WriteLine("Clear the last profile"); kvrstat = Kvrlib.ConfigActiveProfileSet(canlib_channel, no_profiles - 1); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Set profile " + (no_profiles - 1) + " failed (" + kvrstat + ")"); return Convert.ToInt32(kvrstat); } // Wait for reboot if (waitForDevice(ean, serial, 10000) != 0) { //10s timeout Console.WriteLine("waitForDevice() failed."); return -1; } eraseConfiguration(canlib_channel, password); // Wait for reboot if (waitForDevice(ean, serial, 10000) != 0) { //10s timeout Console.WriteLine("waitForDevice() failed."); return -1; } Console.WriteLine("Set profile 0 as active"); kvrstat = Kvrlib.ConfigActiveProfileSet(canlib_channel, 0); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Set profile " + 0 + " failed (" + kvrstat + ")"); return Convert.ToInt32(kvrstat); } Kvrlib.UnloadLibrary(); return 0; }