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