1526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/**************************************************************************** 2526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** ui.h extension file, included from the uic-generated form implementation. 3526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** 4526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** If you want to add, delete, or rename functions or slots, use 5526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** Qt Designer to update this file, preserving your code. 6526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** 7526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** You should not define a constructor or destructor in this file. 8526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** Instead, write your code in functions called init() and destroy(). 9526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** These will automatically be called by the form's constructor and 10526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** destructor. 11526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt*****************************************************************************/ 12526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 13526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include <stdlib.h> 14526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 15526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtenum { 16526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt AUTH_NONE = 0, 17526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt AUTH_IEEE8021X = 1, 18526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt AUTH_WPA_PSK = 2, 19526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt AUTH_WPA_EAP = 3, 20526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt AUTH_WPA2_PSK = 4, 21526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt AUTH_WPA2_EAP = 5 22526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 23526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 24526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPA_GUI_KEY_DATA "[key is configured]" 25526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 26526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::init() 27526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 28526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpagui = NULL; 29526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt new_network = false; 30526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 31526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 32526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::paramsFromScanResults(Q3ListViewItem *sel) 33526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 34526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt new_network = true; 35526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 36526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* SSID BSSID frequency signal flags */ 37526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setCaption(sel->text(0)); 38526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ssidEdit->setText(sel->text(0)); 39526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 40526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QString flags = sel->text(4); 41526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int auth, encr = 0; 42526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (flags.find("[WPA2-EAP") >= 0) 43526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt auth = AUTH_WPA2_EAP; 44526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (flags.find("[WPA-EAP") >= 0) 45526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt auth = AUTH_WPA_EAP; 46526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (flags.find("[WPA2-PSK") >= 0) 47526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt auth = AUTH_WPA2_PSK; 48526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (flags.find("[WPA-PSK") >= 0) 49526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt auth = AUTH_WPA_PSK; 50526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else 51526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt auth = AUTH_NONE; 52526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 53526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (flags.find("-CCMP") >= 0) 54526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 1; 55526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (flags.find("-TKIP") >= 0) 56526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 0; 57526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (flags.find("WEP") >= 0) 58526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 1; 59526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else 60526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 0; 61526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 62526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt authSelect->setCurrentItem(auth); 63526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt authChanged(auth); 64526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encrSelect->setCurrentItem(encr); 65526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 66526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt getEapCapa(); 67526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 68526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 69526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 70526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::authChanged(int sel) 71526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 72526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pskEdit->setEnabled(sel == AUTH_WPA_PSK || sel == AUTH_WPA2_PSK); 73526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt bool eap = sel == AUTH_IEEE8021X || sel == AUTH_WPA_EAP || 74526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt sel == AUTH_WPA2_EAP; 75526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eapSelect->setEnabled(eap); 76526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt identityEdit->setEnabled(eap); 77526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt passwordEdit->setEnabled(eap); 78526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt cacertEdit->setEnabled(eap); 79526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 80526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while (encrSelect->count()) 81526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encrSelect->removeItem(0); 82526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 83526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (sel == AUTH_NONE || sel == AUTH_IEEE8021X) { 84526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encrSelect->insertItem("None"); 85526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encrSelect->insertItem("WEP"); 86526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encrSelect->setCurrentItem(sel == AUTH_NONE ? 0 : 1); 87526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else { 88526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encrSelect->insertItem("TKIP"); 89526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encrSelect->insertItem("CCMP"); 90526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encrSelect->setCurrentItem((sel == AUTH_WPA2_PSK || 91526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt sel == AUTH_WPA2_EAP) ? 1 : 0); 92526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 93526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 94526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wepEnabled(sel == AUTH_IEEE8021X); 95526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 96526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 97526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 98526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::addNetwork() 99526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 100526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char reply[10], cmd[256]; 101526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t reply_len; 102526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int id; 103526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int psklen = pskEdit->text().length(); 104526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int auth = authSelect->currentItem(); 105526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 106526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (auth == AUTH_WPA_PSK || auth == AUTH_WPA2_PSK) { 107526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (psklen < 8 || psklen > 64) { 108526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QMessageBox::warning(this, "wpa_gui", "WPA-PSK requires a passphrase " 109526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "of 8 to 63 characters\n" 110526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "or 64 hex digit PSK"); 111526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 112526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 113526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 114526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 115526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui == NULL) 116526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 117526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 118526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt memset(reply, 0, sizeof(reply)); 119526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 120526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 121526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (new_network) { 122526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpagui->ctrlRequest("ADD_NETWORK", reply, &reply_len); 123526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (reply[0] == 'F') { 124526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QMessageBox::warning(this, "wpa_gui", "Failed to add network to wpa_supplicant\n" 125526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "configuration."); 126526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 127526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 128526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt id = atoi(reply); 129526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else { 130526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt id = edit_network_id; 131526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 132526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 133526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "ssid", ssidEdit->text().ascii(), true); 134526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 135526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (idstrEdit->isEnabled()) 136526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "id_str", idstrEdit->text().ascii(), true); 137526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 138526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const char *key_mgmt = NULL, *proto = NULL, *pairwise = NULL; 139526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt switch (auth) { 140526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case AUTH_NONE: 141526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt key_mgmt = "NONE"; 142526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 143526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case AUTH_IEEE8021X: 144526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt key_mgmt = "IEEE8021X"; 145526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 146526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case AUTH_WPA_PSK: 147526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt key_mgmt = "WPA-PSK"; 148526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt proto = "WPA"; 149526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 150526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case AUTH_WPA_EAP: 151526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt key_mgmt = "WPA-EAP"; 152526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt proto = "WPA"; 153526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 154526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case AUTH_WPA2_PSK: 155526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt key_mgmt = "WPA-PSK"; 156526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt proto = "WPA2"; 157526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 158526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case AUTH_WPA2_EAP: 159526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt key_mgmt = "WPA-EAP"; 160526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt proto = "WPA2"; 161526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 162526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 163526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 164526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (auth == AUTH_WPA_PSK || auth == AUTH_WPA_EAP || 165526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt auth == AUTH_WPA2_PSK || auth == AUTH_WPA2_EAP) { 166526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int encr = encrSelect->currentItem(); 167526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (encr == 0) 168526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pairwise = "TKIP"; 169526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else 170526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pairwise = "CCMP"; 171526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 172526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 173526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (proto) 174526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "proto", proto, false); 175526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (key_mgmt) 176526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "key_mgmt", key_mgmt, false); 177526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pairwise) { 178526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "pairwise", pairwise, false); 179526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "group", "TKIP CCMP WEP104 WEP40", false); 180526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 181526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pskEdit->isEnabled() && 182526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt strcmp(pskEdit->text().ascii(), WPA_GUI_KEY_DATA) != 0) 183526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "psk", pskEdit->text().ascii(), psklen != 64); 184526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (eapSelect->isEnabled()) 185526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "eap", eapSelect->currentText().ascii(), false); 186526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (identityEdit->isEnabled()) 187526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "identity", identityEdit->text().ascii(), true); 188526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (passwordEdit->isEnabled() && 189526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt strcmp(passwordEdit->text().ascii(), WPA_GUI_KEY_DATA) != 0) 190526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "password", passwordEdit->text().ascii(), true); 191526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (cacertEdit->isEnabled()) 192526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "ca_cert", cacertEdit->text().ascii(), true); 193526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt writeWepKey(id, wep0Edit, 0); 194526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt writeWepKey(id, wep1Edit, 1); 195526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt writeWepKey(id, wep2Edit, 2); 196526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt writeWepKey(id, wep3Edit, 3); 197526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 198526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wep0Radio->isEnabled() && wep0Radio->isChecked()) 199526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "wep_tx_keyidx", "0", false); 200526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (wep1Radio->isEnabled() && wep1Radio->isChecked()) 201526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "wep_tx_keyidx", "1", false); 202526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (wep2Radio->isEnabled() && wep2Radio->isChecked()) 203526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "wep_tx_keyidx", "2", false); 204526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (wep3Radio->isEnabled() && wep3Radio->isChecked()) 205526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(id, "wep_tx_keyidx", "3", false); 206526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 207526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "ENABLE_NETWORK %d", id); 208526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply); 209526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpagui->ctrlRequest(cmd, reply, &reply_len); 210526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strncmp(reply, "OK", 2) != 0) { 211526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QMessageBox::warning(this, "wpa_gui", "Failed to enable network in wpa_supplicant\n" 212526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "configuration."); 213526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* Network was added, so continue anyway */ 214526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 215526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpagui->triggerUpdate(); 216526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpagui->ctrlRequest("SAVE_CONFIG", reply, &reply_len); 217526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 218526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt close(); 219526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 220526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 221526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 222526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::setWpaGui( WpaGui *_wpagui ) 223526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 224526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpagui = _wpagui; 225526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 226526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 227526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 228526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint NetworkConfig::setNetworkParam(int id, const char *field, const char *value, bool quote) 229526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 230526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char reply[10], cmd[256]; 231526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t reply_len; 232526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "SET_NETWORK %d %s %s%s%s", 233526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt id, field, quote ? "\"" : "", value, quote ? "\"" : ""); 234526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply); 235526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpagui->ctrlRequest(cmd, reply, &reply_len); 236526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return strncmp(reply, "OK", 2) == 0 ? 0 : -1; 237526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 238526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 239526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 240526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::encrChanged( const QString &sel ) 241526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 242526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wepEnabled(sel.find("WEP") == 0); 243526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 244526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 245526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 246526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::wepEnabled( bool enabled ) 247526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 248526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep0Edit->setEnabled(enabled); 249526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep1Edit->setEnabled(enabled); 250526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep2Edit->setEnabled(enabled); 251526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep3Edit->setEnabled(enabled); 252526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep0Radio->setEnabled(enabled); 253526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep1Radio->setEnabled(enabled); 254526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep2Radio->setEnabled(enabled); 255526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep3Radio->setEnabled(enabled); 256526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 257526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 258526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 259526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::writeWepKey( int network_id, QLineEdit *edit, int id ) 260526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 261526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char buf[10]; 262526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt bool hex; 263526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const char *txt, *pos; 264526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t len; 265526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 266526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (!edit->isEnabled() || edit->text().isEmpty()) 267526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 268526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 269526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* 270526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Assume hex key if only hex characters are present and length matches 271526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * with 40, 104, or 128-bit key 272526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 273526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt txt = edit->text().ascii(); 274526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strcmp(txt, WPA_GUI_KEY_DATA) == 0) 275526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 276526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt len = strlen(txt); 277526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (len == 0) 278526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 279526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = txt; 280526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt hex = true; 281526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while (*pos) { 282526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (!((*pos >= '0' && *pos <= '9') || (*pos >= 'a' && *pos <= 'f') || 283526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt (*pos >= 'A' && *pos <= 'F'))) { 284526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt hex = false; 285526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 286526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 287526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos++; 288526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 289526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (hex && len != 10 && len != 26 && len != 32) 290526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt hex = false; 291526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(buf, sizeof(buf), "wep_key%d", id); 292526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt setNetworkParam(network_id, buf, txt, !hex); 293526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 294526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 295526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 296526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic int key_value_isset(const char *reply, size_t reply_len) 297526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 298526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return reply_len > 0 && (reply_len < 4 || memcmp(reply, "FAIL", 4) != 0); 299526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 300526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 301526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 302526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::paramsFromConfig( int network_id ) 303526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 304526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int i, res; 305526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 306526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt edit_network_id = network_id; 307526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt getEapCapa(); 308526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 309526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char reply[1024], cmd[256], *pos; 310526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t reply_len; 311526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 312526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d ssid", network_id); 313526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 314526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 2 && 315526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[0] == '"') { 316526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 317526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = strchr(reply + 1, '"'); 318526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos) 319526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *pos = '\0'; 320526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ssidEdit->setText(reply + 1); 321526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 322526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 323526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d id_str", network_id); 324526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 325526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 2 && 326526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[0] == '"') { 327526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 328526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = strchr(reply + 1, '"'); 329526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos) 330526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *pos = '\0'; 331526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt idstrEdit->setText(reply + 1); 332526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 333526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 334526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d proto", network_id); 335526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 336526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int wpa = 0; 337526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { 338526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 339526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strstr(reply, "RSN") || strstr(reply, "WPA2")) 340526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa = 2; 341526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (strstr(reply, "WPA")) 342526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa = 1; 343526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 344526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 345526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int auth = AUTH_NONE, encr = 0; 346526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d key_mgmt", network_id); 347526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 348526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { 349526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 350526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strstr(reply, "WPA-EAP")) 351526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt auth = wpa & 2 ? AUTH_WPA2_EAP : AUTH_WPA_EAP; 352526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (strstr(reply, "WPA-PSK")) 353526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt auth = wpa & 2 ? AUTH_WPA2_PSK : AUTH_WPA_PSK; 354526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (strstr(reply, "IEEE8021X")) { 355526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt auth = AUTH_IEEE8021X; 356526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 1; 357526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 358526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 359526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 360526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d pairwise", network_id); 361526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 362526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { 363526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 364526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strstr(reply, "CCMP") && auth != AUTH_NONE) 365526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 1; 366526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (strstr(reply, "TKIP")) 367526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 0; 368526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else if (strstr(reply, "WEP")) 369526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 1; 370526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else 371526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 0; 372526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 373526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 374526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d psk", network_id); 375526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 376526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt res = wpagui->ctrlRequest(cmd, reply, &reply_len); 377526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (res >= 0 && reply_len >= 2 && reply[0] == '"') { 378526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 379526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = strchr(reply + 1, '"'); 380526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos) 381526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *pos = '\0'; 382526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pskEdit->setText(reply + 1); 383526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (res >= 0 && key_value_isset(reply, reply_len)) { 384526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pskEdit->setText(WPA_GUI_KEY_DATA); 385526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 386526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 387526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d identity", network_id); 388526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 389526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 2 && 390526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[0] == '"') { 391526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 392526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = strchr(reply + 1, '"'); 393526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos) 394526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *pos = '\0'; 395526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt identityEdit->setText(reply + 1); 396526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 397526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 398526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d password", network_id); 399526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 400526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt res = wpagui->ctrlRequest(cmd, reply, &reply_len); 401526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (res >= 0 && reply_len >= 2 && 402526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[0] == '"') { 403526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 404526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = strchr(reply + 1, '"'); 405526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos) 406526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *pos = '\0'; 407526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt passwordEdit->setText(reply + 1); 408526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (res >= 0 && key_value_isset(reply, reply_len)) { 409526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt passwordEdit->setText(WPA_GUI_KEY_DATA); 410526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 411526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 412526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d ca_cert", network_id); 413526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 414526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 2 && 415526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[0] == '"') { 416526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 417526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = strchr(reply + 1, '"'); 418526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos) 419526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *pos = '\0'; 420526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt cacertEdit->setText(reply + 1); 421526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 422526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 423526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d eap", network_id); 424526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 425526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 1) { 426526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 427526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt for (i = 0; i < eapSelect->count(); i++) { 428526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (eapSelect->text(i).compare(reply) == 0) { 429526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eapSelect->setCurrentItem(i); 430526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 431526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 432526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 433526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 434526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 435526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt for (i = 0; i < 4; i++) { 436526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QLineEdit *wepEdit; 437526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt switch (i) { 438526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt default: 439526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case 0: 440526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wepEdit = wep0Edit; 441526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 442526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case 1: 443526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wepEdit = wep1Edit; 444526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 445526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case 2: 446526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wepEdit = wep2Edit; 447526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 448526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case 3: 449526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wepEdit = wep3Edit; 450526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 451526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 452526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d wep_key%d", network_id, i); 453526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 454526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt res = wpagui->ctrlRequest(cmd, reply, &reply_len); 455526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (res >= 0 && reply_len >= 2 && reply[0] == '"') { 456526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 457526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = strchr(reply + 1, '"'); 458526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos) 459526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *pos = '\0'; 460526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (auth == AUTH_NONE || auth == AUTH_IEEE8021X) 461526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 1; 462526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 463526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wepEdit->setText(reply + 1); 464526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (res >= 0 && key_value_isset(reply, reply_len)) { 465526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (auth == AUTH_NONE || auth == AUTH_IEEE8021X) 466526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr = 1; 467526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wepEdit->setText(WPA_GUI_KEY_DATA); 468526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 469526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 470526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 471526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d wep_tx_keyidx", network_id); 472526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 473526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 1) { 474526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 475526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt switch (atoi(reply)) { 476526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case 0: 477526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep0Radio->setChecked(true); 478526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 479526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case 1: 480526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep1Radio->setChecked(true); 481526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 482526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case 2: 483526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep2Radio->setChecked(true); 484526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 485526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case 3: 486526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wep3Radio->setChecked(true); 487526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 488526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 489526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 490526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 491526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt authSelect->setCurrentItem(auth); 492526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt authChanged(auth); 493526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encrSelect->setCurrentItem(encr); 494526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (auth == AUTH_NONE || auth == AUTH_IEEE8021X) 495526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wepEnabled(encr == 1); 496526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 497526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt removeButton->setEnabled(true); 498526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt addButton->setText("Save"); 499526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 500526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 501526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 502526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::removeNetwork() 503526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 504526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char reply[10], cmd[256]; 505526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t reply_len; 506526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 507526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (QMessageBox::information(this, "wpa_gui", 508526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "This will permanently remove the network\n" 509526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "from the configuration. Do you really want\n" 510526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "to remove this network?", "Yes", "No") != 0) 511526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 512526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 513526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cmd, sizeof(cmd), "REMOVE_NETWORK %d", edit_network_id); 514526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply); 515526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpagui->ctrlRequest(cmd, reply, &reply_len); 516526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strncmp(reply, "OK", 2) != 0) { 517526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QMessageBox::warning(this, "wpa_gui", 518526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "Failed to remove network from wpa_supplicant\n" 519526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "configuration."); 520526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else { 521526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpagui->triggerUpdate(); 522526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpagui->ctrlRequest("SAVE_CONFIG", reply, &reply_len); 523526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 524526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 525526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt close(); 526526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 527526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 528526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 529526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::newNetwork() 530526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 531526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt new_network = true; 532526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt getEapCapa(); 533526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 534526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 535526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 536526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid NetworkConfig::getEapCapa() 537526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 538526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char reply[256]; 539526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t reply_len; 540526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 541526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui == NULL) 542526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 543526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 544526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply_len = sizeof(reply) - 1; 545526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpagui->ctrlRequest("GET_CAPABILITY eap", reply, &reply_len) < 0) 546526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 547526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt reply[reply_len] = '\0'; 548526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 549526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QString res(reply); 550526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QStringList types = QStringList::split(QChar(' '), res); 551526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eapSelect->insertStringList(types); 552526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 553