18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_gui - NetworkConfig class 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <cstdio> 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <QMessageBox> 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "networkconfig.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "wpagui.h" 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum { 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt AUTH_NONE_OPEN, 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt AUTH_NONE_WEP, 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt AUTH_NONE_WEP_SHARED, 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt AUTH_IEEE8021X, 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt AUTH_WPA_PSK, 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt AUTH_WPA_EAP, 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt AUTH_WPA2_PSK, 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt AUTH_WPA2_EAP 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_GUI_KEY_DATA "[key is configured]" 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 297a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry ShmidtNetworkConfig::NetworkConfig(QWidget *parent, const char *, bool, 307a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt Qt::WindowFlags) 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt : QDialog(parent) 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setupUi(this); 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->setEnabled(false); 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt connect(authSelect, SIGNAL(activated(int)), this, 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt SLOT(authChanged(int))); 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt connect(cancelButton, SIGNAL(clicked()), this, SLOT(close())); 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt connect(addButton, SIGNAL(clicked()), this, SLOT(addNetwork())); 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt connect(encrSelect, SIGNAL(activated(const QString &)), this, 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt SLOT(encrChanged(const QString &))); 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt connect(removeButton, SIGNAL(clicked()), this, SLOT(removeNetwork())); 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt connect(eapSelect, SIGNAL(activated(int)), this, 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt SLOT(eapChanged(int))); 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt connect(useWpsButton, SIGNAL(clicked()), this, SLOT(useWps())); 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui = NULL; 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt new_network = false; 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtNetworkConfig::~NetworkConfig() 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::languageChange() 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt retranslateUi(this); 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::paramsFromScanResults(QTreeWidgetItem *sel) 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt new_network = true; 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* SSID BSSID frequency signal flags */ 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setWindowTitle(sel->text(0)); 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ssidEdit->setText(sel->text(0)); 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QString flags = sel->text(4); 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int auth, encr = 0; 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (flags.indexOf("[WPA2-EAP") >= 0) 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = AUTH_WPA2_EAP; 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (flags.indexOf("[WPA-EAP") >= 0) 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = AUTH_WPA_EAP; 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (flags.indexOf("[WPA2-PSK") >= 0) 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = AUTH_WPA2_PSK; 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (flags.indexOf("[WPA-PSK") >= 0) 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = AUTH_WPA_PSK; 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = AUTH_NONE_OPEN; 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (flags.indexOf("-CCMP") >= 0) 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 1; 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (flags.indexOf("-TKIP") >= 0) 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 0; 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (flags.indexOf("WEP") >= 0) { 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 1; 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (auth == AUTH_NONE_OPEN) 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = AUTH_NONE_WEP; 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 0; 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt authSelect->setCurrentIndex(auth); 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt authChanged(auth); 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->setCurrentIndex(encr); 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wepEnabled(auth == AUTH_NONE_WEP); 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt getEapCapa(); 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (flags.indexOf("[WPS") >= 0) 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt useWpsButton->setEnabled(true); 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt bssid = sel->text(1); 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::authChanged(int sel) 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->setEnabled(sel != AUTH_NONE_OPEN && sel != AUTH_NONE_WEP && 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sel != AUTH_NONE_WEP_SHARED); 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pskEdit->setEnabled(sel == AUTH_WPA_PSK || sel == AUTH_WPA2_PSK); 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt bool eap = sel == AUTH_IEEE8021X || sel == AUTH_WPA_EAP || 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sel == AUTH_WPA2_EAP; 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt eapSelect->setEnabled(eap); 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt identityEdit->setEnabled(eap); 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt passwordEdit->setEnabled(eap); 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt cacertEdit->setEnabled(eap); 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->setEnabled(eap); 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (eap) 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt eapChanged(eapSelect->currentIndex()); 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt while (encrSelect->count()) 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->removeItem(0); 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (sel == AUTH_NONE_OPEN || sel == AUTH_NONE_WEP || 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sel == AUTH_NONE_WEP_SHARED || sel == AUTH_IEEE8021X) { 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->addItem("None"); 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->addItem("WEP"); 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->setCurrentIndex(sel == AUTH_NONE_OPEN ? 0 : 1); 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else { 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->addItem("TKIP"); 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->addItem("CCMP"); 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->setCurrentIndex((sel == AUTH_WPA2_PSK || 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sel == AUTH_WPA2_EAP) ? 1 : 0); 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wepEnabled(sel == AUTH_NONE_WEP || sel == AUTH_NONE_WEP_SHARED); 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::eapChanged(int sel) 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QString prev_val = phase2Select->currentText(); 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt while (phase2Select->count()) 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->removeItem(0); 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QStringList inner; 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt inner << "PEAP" << "TTLS" << "FAST"; 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!inner.contains(eapSelect->itemText(sel))) 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->addItem("[ any ]"); 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Add special cases based on outer method */ 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (eapSelect->currentText().compare("TTLS") == 0) { 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->addItem("PAP"); 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->addItem("CHAP"); 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->addItem("MSCHAP"); 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->addItem("MSCHAPv2"); 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else if (eapSelect->currentText().compare("FAST") == 0) 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->addItem("GTC(auth) + MSCHAPv2(prov)"); 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Add all enabled EAP methods that can be used in the tunnel */ 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int i; 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QStringList allowed; 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt allowed << "MSCHAPV2" << "MD5" << "GTC" << "TLS" << "OTP" << "SIM" 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt << "AKA"; 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt for (i = 0; i < eapSelect->count(); i++) { 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (allowed.contains(eapSelect->itemText(i))) { 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->addItem("EAP-" + eapSelect->itemText(i)); 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt for (i = 0; i < phase2Select->count(); i++) { 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (phase2Select->itemText(i).compare(prev_val) == 0) { 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->setCurrentIndex(i); 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::addNetwork() 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char reply[10], cmd[256]; 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t reply_len; 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int id; 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int psklen = pskEdit->text().length(); 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int auth = authSelect->currentIndex(); 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (auth == AUTH_WPA_PSK || auth == AUTH_WPA2_PSK) { 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (psklen < 8 || psklen > 64) { 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QMessageBox::warning( 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt this, 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("WPA Pre-Shared Key Error"), 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("WPA-PSK requires a passphrase of 8 to 63 " 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "characters\n" 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "or 64 hex digit PSK")); 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pskEdit->setFocus(); 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (idstrEdit->isEnabled() && !idstrEdit->text().isEmpty()) { 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QRegExp rx("^(\\w|-)+$"); 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (rx.indexIn(idstrEdit->text()) < 0) { 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QMessageBox::warning( 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt this, tr("Network ID Error"), 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("Network ID String contains non-word " 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "characters.\n" 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "It must be a simple string, " 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "without spaces, containing\n" 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "only characters in this range: " 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "[A-Za-z0-9_-]\n")); 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt idstrEdit->setFocus(); 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui == NULL) 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt memset(reply, 0, sizeof(reply)); 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (new_network) { 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->ctrlRequest("ADD_NETWORK", reply, &reply_len); 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (reply[0] == 'F') { 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QMessageBox::warning(this, "wpa_gui", 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("Failed to add " 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "network to wpa_supplicant\n" 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "configuration.")); 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt id = atoi(reply); 2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt id = edit_network_id; 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2417a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt setNetworkParam(id, "ssid", ssidEdit->text().toLocal8Bit().constData(), 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt true); 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *key_mgmt = NULL, *proto = NULL, *pairwise = NULL; 2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt switch (auth) { 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case AUTH_NONE_OPEN: 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case AUTH_NONE_WEP: 2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case AUTH_NONE_WEP_SHARED: 2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt key_mgmt = "NONE"; 2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case AUTH_IEEE8021X: 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt key_mgmt = "IEEE8021X"; 2538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case AUTH_WPA_PSK: 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt key_mgmt = "WPA-PSK"; 2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt proto = "WPA"; 2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case AUTH_WPA_EAP: 2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt key_mgmt = "WPA-EAP"; 2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt proto = "WPA"; 2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case AUTH_WPA2_PSK: 2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt key_mgmt = "WPA-PSK"; 2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt proto = "WPA2"; 2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case AUTH_WPA2_EAP: 2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt key_mgmt = "WPA-EAP"; 2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt proto = "WPA2"; 2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (auth == AUTH_NONE_WEP_SHARED) 2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "auth_alg", "SHARED", false); 2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else 2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "auth_alg", "OPEN", false); 2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (auth == AUTH_WPA_PSK || auth == AUTH_WPA_EAP || 2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth == AUTH_WPA2_PSK || auth == AUTH_WPA2_EAP) { 2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int encr = encrSelect->currentIndex(); 2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (encr == 0) 2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pairwise = "TKIP"; 2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else 2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pairwise = "CCMP"; 2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (proto) 2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "proto", proto, false); 2888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (key_mgmt) 2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "key_mgmt", key_mgmt, false); 2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (pairwise) { 2918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "pairwise", pairwise, false); 2928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "group", "TKIP CCMP WEP104 WEP40", false); 2938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (pskEdit->isEnabled() && 2957a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt strcmp(pskEdit->text().toLocal8Bit().constData(), 2968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_GUI_KEY_DATA) != 0) 2978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "psk", 2987a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt pskEdit->text().toLocal8Bit().constData(), 2998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt psklen != 64); 3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (eapSelect->isEnabled()) { 3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *eap = 3027a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt eapSelect->currentText().toLocal8Bit().constData(); 3038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "eap", eap, false); 3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strcmp(eap, "SIM") == 0 || strcmp(eap, "AKA") == 0) 3058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "pcsc", "", true); 3068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else 3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "pcsc", "NULL", false); 3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (phase2Select->isEnabled()) { 3108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QString eap = eapSelect->currentText(); 3118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QString inner = phase2Select->currentText(); 3128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char phase2[32]; 3138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2[0] = '\0'; 3148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (eap.compare("PEAP") == 0) { 3158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (inner.startsWith("EAP-")) 3168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(phase2, sizeof(phase2), "auth=%s", 3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt inner.right(inner.size() - 4). 3187a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt toLocal8Bit().constData()); 3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else if (eap.compare("TTLS") == 0) { 3208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (inner.startsWith("EAP-")) 3218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(phase2, sizeof(phase2), "autheap=%s", 3228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt inner.right(inner.size() - 4). 3237a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt toLocal8Bit().constData()); 3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else 3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(phase2, sizeof(phase2), "auth=%s", 3267a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt inner.toLocal8Bit().constData()); 3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else if (eap.compare("FAST") == 0) { 3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *provisioning = NULL; 3298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (inner.startsWith("EAP-")) { 3308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(phase2, sizeof(phase2), "auth=%s", 3318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt inner.right(inner.size() - 4). 3327a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt toLocal8Bit().constData()); 3338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt provisioning = "fast_provisioning=2"; 3348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else if (inner.compare("GTC(auth) + MSCHAPv2(prov)") 3358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt == 0) { 3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(phase2, sizeof(phase2), 3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "auth=GTC auth=MSCHAPV2"); 3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt provisioning = "fast_provisioning=1"; 3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else 3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt provisioning = "fast_provisioning=3"; 3418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (provisioning) { 3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char blob[32]; 3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "phase1", provisioning, 3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt true); 3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(blob, sizeof(blob), 3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "blob://fast-pac-%d", id); 3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "pac_file", blob, true); 3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 3498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 3508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (phase2[0]) 3518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "phase2", phase2, true); 3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else 3538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "phase2", "NULL", false); 3548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else 3558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "phase2", "NULL", false); 3568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (identityEdit->isEnabled() && identityEdit->text().length() > 0) 3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "identity", 3587a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt identityEdit->text().toLocal8Bit().constData(), 3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt true); 3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else 3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "identity", "NULL", false); 3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (passwordEdit->isEnabled() && passwordEdit->text().length() > 0 && 3637a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt strcmp(passwordEdit->text().toLocal8Bit().constData(), 3648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_GUI_KEY_DATA) != 0) 3658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "password", 3667a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt passwordEdit->text().toLocal8Bit().constData(), 3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt true); 3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (passwordEdit->text().length() == 0) 3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "password", "NULL", false); 3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (cacertEdit->isEnabled() && cacertEdit->text().length() > 0) 3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "ca_cert", 3727a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt cacertEdit->text().toLocal8Bit().constData(), 3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt true); 3748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else 3758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "ca_cert", "NULL", false); 3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt writeWepKey(id, wep0Edit, 0); 3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt writeWepKey(id, wep1Edit, 1); 3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt writeWepKey(id, wep2Edit, 2); 3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt writeWepKey(id, wep3Edit, 3); 3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wep0Radio->isEnabled() && wep0Radio->isChecked()) 3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "wep_tx_keyidx", "0", false); 3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (wep1Radio->isEnabled() && wep1Radio->isChecked()) 3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "wep_tx_keyidx", "1", false); 3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (wep2Radio->isEnabled() && wep2Radio->isChecked()) 3868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "wep_tx_keyidx", "2", false); 3878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (wep3Radio->isEnabled() && wep3Radio->isChecked()) 3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "wep_tx_keyidx", "3", false); 3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (idstrEdit->isEnabled() && idstrEdit->text().length() > 0) 3918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "id_str", 3927a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt idstrEdit->text().toLocal8Bit().constData(), 3938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt true); 3948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else 3958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(id, "id_str", "NULL", false); 3968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (prioritySpinBox->isEnabled()) { 3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QString prio; 3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt prio = prio.setNum(prioritySpinBox->value()); 4007a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt setNetworkParam(id, "priority", prio.toLocal8Bit().constData(), 4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt false); 4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "ENABLE_NETWORK %d", id); 4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply); 4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->ctrlRequest(cmd, reply, &reply_len); 4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strncmp(reply, "OK", 2) != 0) { 4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QMessageBox::warning(this, "wpa_gui", 4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("Failed to enable " 4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "network in wpa_supplicant\n" 4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "configuration.")); 4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Network was added, so continue anyway */ 4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->triggerUpdate(); 4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->ctrlRequest("SAVE_CONFIG", reply, &reply_len); 4168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt close(); 4188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::setWpaGui(WpaGui *_wpagui) 4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui = _wpagui; 4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint NetworkConfig::setNetworkParam(int id, const char *field, 4288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *value, bool quote) 4298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char reply[10], cmd[256]; 4318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t reply_len; 4328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "SET_NETWORK %d %s %s%s%s", 4338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt id, field, quote ? "\"" : "", value, quote ? "\"" : ""); 4348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply); 4358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->ctrlRequest(cmd, reply, &reply_len); 4368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return strncmp(reply, "OK", 2) == 0 ? 0 : -1; 4378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::encrChanged(const QString &) 4418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::wepEnabled(bool enabled) 4468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep0Edit->setEnabled(enabled); 4488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep1Edit->setEnabled(enabled); 4498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep2Edit->setEnabled(enabled); 4508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep3Edit->setEnabled(enabled); 4518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep0Radio->setEnabled(enabled); 4528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep1Radio->setEnabled(enabled); 4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep2Radio->setEnabled(enabled); 4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep3Radio->setEnabled(enabled); 4558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::writeWepKey(int network_id, QLineEdit *edit, int id) 4598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char buf[10]; 4618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt bool hex; 4628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *txt, *pos; 4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t len; 4648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!edit->isEnabled() || edit->text().isEmpty()) 4668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 4678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* 4698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Assume hex key if only hex characters are present and length matches 4708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * with 40, 104, or 128-bit key 4718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4727a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt txt = edit->text().toLocal8Bit().constData(); 4738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strcmp(txt, WPA_GUI_KEY_DATA) == 0) 4748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 4758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt len = strlen(txt); 4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (len == 0) 4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 4788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos = txt; 4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt hex = true; 4808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt while (*pos) { 4818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!((*pos >= '0' && *pos <= '9') || 4828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (*pos >= 'a' && *pos <= 'f') || 4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (*pos >= 'A' && *pos <= 'F'))) { 4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt hex = false; 4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos++; 4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (hex && len != 10 && len != 26 && len != 32) 4908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt hex = false; 4918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(buf, sizeof(buf), "wep_key%d", id); 4928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setNetworkParam(network_id, buf, txt, !hex); 4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic int key_value_isset(const char *reply, size_t reply_len) 4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return reply_len > 0 && (reply_len < 4 || memcmp(reply, "FAIL", 4) != 0); 4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::paramsFromConfig(int network_id) 5038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int i, res; 5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt edit_network_id = network_id; 5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt getEapCapa(); 5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char reply[1024], cmd[256], *pos; 5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t reply_len; 5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d ssid", network_id); 5138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 5148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && 5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len >= 2 && reply[0] == '"') { 5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 5178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos = strchr(reply + 1, '"'); 5188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (pos) 5198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *pos = '\0'; 5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ssidEdit->setText(reply + 1); 5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d proto", network_id); 5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int wpa = 0; 5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { 5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strstr(reply, "RSN") || strstr(reply, "WPA2")) 5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa = 2; 5308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (strstr(reply, "WPA")) 5318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa = 1; 5328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int auth = AUTH_NONE_OPEN, encr = 0; 5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d key_mgmt", network_id); 5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { 5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strstr(reply, "WPA-EAP")) 5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = wpa & 2 ? AUTH_WPA2_EAP : AUTH_WPA_EAP; 5418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (strstr(reply, "WPA-PSK")) 5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = wpa & 2 ? AUTH_WPA2_PSK : AUTH_WPA_PSK; 5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (strstr(reply, "IEEE8021X")) { 5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = AUTH_IEEE8021X; 5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 1; 5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d pairwise", network_id); 5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { 5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strstr(reply, "CCMP") && auth != AUTH_NONE_OPEN && 5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth != AUTH_NONE_WEP && auth != AUTH_NONE_WEP_SHARED) 5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 1; 5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (strstr(reply, "TKIP")) 5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 0; 5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (strstr(reply, "WEP")) 5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 1; 5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else 5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 0; 5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d psk", network_id); 5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt res = wpagui->ctrlRequest(cmd, reply, &reply_len); 5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (res >= 0 && reply_len >= 2 && reply[0] == '"') { 5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos = strchr(reply + 1, '"'); 5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (pos) 5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *pos = '\0'; 5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pskEdit->setText(reply + 1); 5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else if (res >= 0 && key_value_isset(reply, reply_len)) { 5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pskEdit->setText(WPA_GUI_KEY_DATA); 5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d identity", network_id); 5788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 5798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && 5808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len >= 2 && reply[0] == '"') { 5818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 5828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos = strchr(reply + 1, '"'); 5838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (pos) 5848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *pos = '\0'; 5858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt identityEdit->setText(reply + 1); 5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d password", network_id); 5898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 5908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt res = wpagui->ctrlRequest(cmd, reply, &reply_len); 5918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (res >= 0 && reply_len >= 2 && reply[0] == '"') { 5928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 5938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos = strchr(reply + 1, '"'); 5948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (pos) 5958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *pos = '\0'; 5968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt passwordEdit->setText(reply + 1); 5978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else if (res >= 0 && key_value_isset(reply, reply_len)) { 5988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt passwordEdit->setText(WPA_GUI_KEY_DATA); 5998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d ca_cert", network_id); 6028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 6038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && 6048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len >= 2 && reply[0] == '"') { 6058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 6068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos = strchr(reply + 1, '"'); 6078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (pos) 6088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *pos = '\0'; 6098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt cacertEdit->setText(reply + 1); 6108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { NO_INNER, PEAP_INNER, TTLS_INNER, FAST_INNER } eap = NO_INNER; 6138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d eap", network_id); 6148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 6158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && 6168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len >= 1) { 6178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 6188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt for (i = 0; i < eapSelect->count(); i++) { 6198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (eapSelect->itemText(i).compare(reply) == 0) { 6208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt eapSelect->setCurrentIndex(i); 6218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strcmp(reply, "PEAP") == 0) 6228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt eap = PEAP_INNER; 6238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (strcmp(reply, "TTLS") == 0) 6248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt eap = TTLS_INNER; 6258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else if (strcmp(reply, "FAST") == 0) 6268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt eap = FAST_INNER; 6278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (eap != NO_INNER) { 6338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d phase2", 6348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt network_id); 6358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 6368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && 6378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len >= 1) { 6388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 6398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt eapChanged(eapSelect->currentIndex()); 6408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else 6418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt eap = NO_INNER; 6428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *val; 6458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt val = reply + 1; 6468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt while (*(val + 1)) 6478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt val++; 6488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (*val == '"') 6498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *val = '\0'; 6508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt switch (eap) { 6528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case PEAP_INNER: 6538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strncmp(reply, "\"auth=", 6)) 6548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt val = reply + 2; 6568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt memcpy(val, "EAP-", 4); 6578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case TTLS_INNER: 6598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strncmp(reply, "\"autheap=", 9) == 0) { 6608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt val = reply + 5; 6618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt memcpy(val, "EAP-", 4); 6628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else if (strncmp(reply, "\"auth=", 6) == 0) 6638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt val = reply + 6; 6648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case FAST_INNER: 6668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strncmp(reply, "\"auth=", 6)) 6678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strcmp(reply + 6, "GTC auth=MSCHAPV2") == 0) { 6698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt val = (char *) "GTC(auth) + MSCHAPv2(prov)"; 6708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt val = reply + 2; 6738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt memcpy(val, "EAP-", 4); 6748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case NO_INNER: 6768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt for (i = 0; i < phase2Select->count(); i++) { 6808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (phase2Select->itemText(i).compare(val) == 0) { 6818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt phase2Select->setCurrentIndex(i); 6828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt for (i = 0; i < 4; i++) { 6878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QLineEdit *wepEdit; 6888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt switch (i) { 6898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt default: 6908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case 0: 6918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wepEdit = wep0Edit; 6928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case 1: 6948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wepEdit = wep1Edit; 6958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case 2: 6978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wepEdit = wep2Edit; 6988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 6998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case 3: 7008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wepEdit = wep3Edit; 7018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 7028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d wep_key%d", 7048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt network_id, i); 7058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 7068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt res = wpagui->ctrlRequest(cmd, reply, &reply_len); 7078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (res >= 0 && reply_len >= 2 && reply[0] == '"') { 7088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 7098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos = strchr(reply + 1, '"'); 7108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (pos) 7118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *pos = '\0'; 7128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (auth == AUTH_NONE_OPEN || auth == AUTH_IEEE8021X) { 7138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (auth == AUTH_NONE_OPEN) 7148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = AUTH_NONE_WEP; 7158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 1; 7168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wepEdit->setText(reply + 1); 7198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else if (res >= 0 && key_value_isset(reply, reply_len)) { 7208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (auth == AUTH_NONE_OPEN || auth == AUTH_IEEE8021X) { 7218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (auth == AUTH_NONE_OPEN) 7228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = AUTH_NONE_WEP; 7238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encr = 1; 7248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wepEdit->setText(WPA_GUI_KEY_DATA); 7268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (auth == AUTH_NONE_WEP) { 7308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d auth_alg", 7318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt network_id); 7328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 7338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { 7348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 7358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strcmp(reply, "SHARED") == 0) 7368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt auth = AUTH_NONE_WEP_SHARED; 7378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d wep_tx_keyidx", network_id); 7418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 7428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 1) 7438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt { 7448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 7458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt switch (atoi(reply)) { 7468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case 0: 7478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep0Radio->setChecked(true); 7488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 7498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case 1: 7508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep1Radio->setChecked(true); 7518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 7528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case 2: 7538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep2Radio->setChecked(true); 7548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 7558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case 3: 7568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wep3Radio->setChecked(true); 7578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 7588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d id_str", network_id); 7628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 7638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && 7648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len >= 2 && reply[0] == '"') { 7658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 7668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos = strchr(reply + 1, '"'); 7678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (pos) 7688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *pos = '\0'; 7698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt idstrEdit->setText(reply + 1); 7708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "GET_NETWORK %d priority", network_id); 7738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 7748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 1) 7758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt { 7768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 7778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt prioritySpinBox->setValue(atoi(reply)); 7788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 7798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt authSelect->setCurrentIndex(auth); 7818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt authChanged(auth); 7828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt encrSelect->setCurrentIndex(encr); 7838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wepEnabled(auth == AUTH_NONE_WEP || auth == AUTH_NONE_WEP_SHARED); 7848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt removeButton->setEnabled(true); 7868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt addButton->setText("Save"); 7878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 7888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::removeNetwork() 7918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 7928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char reply[10], cmd[256]; 7938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t reply_len; 7948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (QMessageBox::information( 7968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt this, "wpa_gui", 7978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("This will permanently remove the network\n" 7988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "from the configuration. Do you really want\n" 7998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "to remove this network?"), 8008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("Yes"), tr("No")) != 0) 8018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 8028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), "REMOVE_NETWORK %d", edit_network_id); 8048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply); 8058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->ctrlRequest(cmd, reply, &reply_len); 8068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (strncmp(reply, "OK", 2) != 0) { 8078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QMessageBox::warning(this, "wpa_gui", 8088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("Failed to remove network from " 8098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "wpa_supplicant\n" 8108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "configuration.")); 8118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else { 8128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->triggerUpdate(); 8138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->ctrlRequest("SAVE_CONFIG", reply, &reply_len); 8148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 8158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt close(); 8178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::newNetwork() 8218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt new_network = true; 8238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt getEapCapa(); 8248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::getEapCapa() 8288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char reply[256]; 8308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t reply_len; 8318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui == NULL) 8338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 8348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply_len = sizeof(reply) - 1; 8368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui->ctrlRequest("GET_CAPABILITY eap", reply, &reply_len) < 0) 8378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 8388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reply[reply_len] = '\0'; 8398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QString res(reply); 8418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QStringList types = res.split(QChar(' ')); 8428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt eapSelect->insertItems(-1, types); 8438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid NetworkConfig::useWps() 8478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpagui == NULL) 8498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 8508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->setBssFromScan(bssid); 8518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->wpsDialog(); 8528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt close(); 8538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 854