summaryrefslogtreecommitdiffstats
path: root/contrib/wpa_supplicant/wpa_gui
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2007-07-11 15:48:36 +0000
committersam <sam@FreeBSD.org>2007-07-11 15:48:36 +0000
commit35aef052ff21baa52c4cec68b512986c21f70a48 (patch)
treec3da7f33886a852f7dceb74373fbdeec49a48f77 /contrib/wpa_supplicant/wpa_gui
parent840099f34d8de1ca769f02fae379c4d8e5d6688a (diff)
downloadFreeBSD-src-35aef052ff21baa52c4cec68b512986c21f70a48.zip
FreeBSD-src-35aef052ff21baa52c4cec68b512986c21f70a48.tar.gz
Import of WPA supplicant 0.5.8
Diffstat (limited to 'contrib/wpa_supplicant/wpa_gui')
-rw-r--r--contrib/wpa_supplicant/wpa_gui/eventhistory.ui.h4
-rw-r--r--contrib/wpa_supplicant/wpa_gui/networkconfig.ui.h92
-rw-r--r--contrib/wpa_supplicant/wpa_gui/scanresults.ui.h6
-rwxr-xr-xcontrib/wpa_supplicant/wpa_gui/setup-mingw-cross-compiling11
-rw-r--r--contrib/wpa_supplicant/wpa_gui/wpa_gui.pro28
-rw-r--r--contrib/wpa_supplicant/wpa_gui/wpagui.ui7
-rw-r--r--contrib/wpa_supplicant/wpa_gui/wpagui.ui.h88
-rw-r--r--contrib/wpa_supplicant/wpa_gui/wpamsg.h11
8 files changed, 196 insertions, 51 deletions
diff --git a/contrib/wpa_supplicant/wpa_gui/eventhistory.ui.h b/contrib/wpa_supplicant/wpa_gui/eventhistory.ui.h
index 8d8fa48..cb2caab 100644
--- a/contrib/wpa_supplicant/wpa_gui/eventhistory.ui.h
+++ b/contrib/wpa_supplicant/wpa_gui/eventhistory.ui.h
@@ -31,8 +31,8 @@ void EventHistory::addEvents(WpaMsgList msgs)
void EventHistory::addEvent(WpaMsg msg)
{
- QListViewItem *item;
- item = new QListViewItem(eventListView,
+ Q3ListViewItem *item;
+ item = new Q3ListViewItem(eventListView,
msg.getTimestamp().toString("yyyy-MM-dd hh:mm:ss.zzz"),
msg.getMsg());
if (item == NULL)
diff --git a/contrib/wpa_supplicant/wpa_gui/networkconfig.ui.h b/contrib/wpa_supplicant/wpa_gui/networkconfig.ui.h
index c03260b..49bc722 100644
--- a/contrib/wpa_supplicant/wpa_gui/networkconfig.ui.h
+++ b/contrib/wpa_supplicant/wpa_gui/networkconfig.ui.h
@@ -20,13 +20,15 @@ enum {
AUTH_WPA2_EAP = 5
};
+#define WPA_GUI_KEY_DATA "[key is configured]"
+
void NetworkConfig::init()
{
wpagui = NULL;
new_network = false;
}
-void NetworkConfig::paramsFromScanResults(QListViewItem *sel)
+void NetworkConfig::paramsFromScanResults(Q3ListViewItem *sel)
{
new_network = true;
@@ -172,13 +174,15 @@ void NetworkConfig::addNetwork()
setNetworkParam(id, "pairwise", pairwise, false);
setNetworkParam(id, "group", "TKIP CCMP WEP104 WEP40", false);
}
- if (pskEdit->isEnabled())
+ if (pskEdit->isEnabled() &&
+ strcmp(passwordEdit->text().ascii(), WPA_GUI_KEY_DATA) != 0)
setNetworkParam(id, "psk", pskEdit->text().ascii(), psklen != 64);
if (eapSelect->isEnabled())
setNetworkParam(id, "eap", eapSelect->currentText().ascii(), false);
if (identityEdit->isEnabled())
setNetworkParam(id, "identity", identityEdit->text().ascii(), true);
- if (passwordEdit->isEnabled())
+ if (passwordEdit->isEnabled() &&
+ strcmp(passwordEdit->text().ascii(), WPA_GUI_KEY_DATA) != 0)
setNetworkParam(id, "password", passwordEdit->text().ascii(), true);
if (cacertEdit->isEnabled())
setNetworkParam(id, "ca_cert", cacertEdit->text().ascii(), true);
@@ -263,6 +267,8 @@ void NetworkConfig::writeWepKey( int network_id, QLineEdit *edit, int id )
* with 40, 104, or 128-bit key
*/
txt = edit->text().ascii();
+ if (strcmp(txt, WPA_GUI_KEY_DATA) == 0)
+ return;
len = strlen(txt);
if (len == 0)
return;
@@ -283,9 +289,15 @@ void NetworkConfig::writeWepKey( int network_id, QLineEdit *edit, int id )
}
+static int key_value_isset(const char *reply, size_t reply_len)
+{
+ return reply_len > 0 && (reply_len < 4 || memcmp(reply, "FAIL", 4) != 0);
+}
+
+
void NetworkConfig::paramsFromConfig( int network_id )
{
- int i;
+ int i, res;
edit_network_id = network_id;
getEapCapa();
@@ -294,7 +306,7 @@ void NetworkConfig::paramsFromConfig( int network_id )
size_t reply_len;
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d ssid", network_id);
- reply_len = sizeof(reply);
+ reply_len = sizeof(reply) - 1;
if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 2 &&
reply[0] == '"') {
reply[reply_len] = '\0';
@@ -305,7 +317,7 @@ void NetworkConfig::paramsFromConfig( int network_id )
}
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d proto", network_id);
- reply_len = sizeof(reply);
+ reply_len = sizeof(reply) - 1;
int wpa = 0;
if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) {
reply[reply_len] = '\0';
@@ -317,7 +329,7 @@ void NetworkConfig::paramsFromConfig( int network_id )
int auth = AUTH_NONE, encr = 0;
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d key_mgmt", network_id);
- reply_len = sizeof(reply);
+ reply_len = sizeof(reply) - 1;
if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) {
reply[reply_len] = '\0';
if (strstr(reply, "WPA-EAP"))
@@ -331,7 +343,7 @@ void NetworkConfig::paramsFromConfig( int network_id )
}
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d pairwise", network_id);
- reply_len = sizeof(reply);
+ reply_len = sizeof(reply) - 1;
if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) {
reply[reply_len] = '\0';
if (strstr(reply, "CCMP"))
@@ -345,18 +357,20 @@ void NetworkConfig::paramsFromConfig( int network_id )
}
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d psk", network_id);
- reply_len = sizeof(reply);
- if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 2 &&
- reply[0] == '"') {
+ reply_len = sizeof(reply) - 1;
+ res = wpagui->ctrlRequest(cmd, reply, &reply_len);
+ if (res >= 0 && reply_len >= 2 && reply[0] == '"') {
reply[reply_len] = '\0';
pos = strchr(reply + 1, '"');
if (pos)
*pos = '\0';
pskEdit->setText(reply + 1);
+ } else if (res >= 0 && key_value_isset(reply, reply_len)) {
+ pskEdit->setText(WPA_GUI_KEY_DATA);
}
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d identity", network_id);
- reply_len = sizeof(reply);
+ reply_len = sizeof(reply) - 1;
if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 2 &&
reply[0] == '"') {
reply[reply_len] = '\0';
@@ -367,18 +381,21 @@ void NetworkConfig::paramsFromConfig( int network_id )
}
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d password", network_id);
- reply_len = sizeof(reply);
- if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 2 &&
+ reply_len = sizeof(reply) - 1;
+ res = wpagui->ctrlRequest(cmd, reply, &reply_len);
+ if (res >= 0 && reply_len >= 2 &&
reply[0] == '"') {
reply[reply_len] = '\0';
pos = strchr(reply + 1, '"');
if (pos)
*pos = '\0';
passwordEdit->setText(reply + 1);
+ } else if (res >= 0 && key_value_isset(reply, reply_len)) {
+ passwordEdit->setText(WPA_GUI_KEY_DATA);
}
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d ca_cert", network_id);
- reply_len = sizeof(reply);
+ reply_len = sizeof(reply) - 1;
if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 2 &&
reply[0] == '"') {
reply[reply_len] = '\0';
@@ -389,7 +406,7 @@ void NetworkConfig::paramsFromConfig( int network_id )
}
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d eap", network_id);
- reply_len = sizeof(reply);
+ reply_len = sizeof(reply) - 1;
if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 1) {
reply[reply_len] = '\0';
for (i = 0; i < eapSelect->count(); i++) {
@@ -401,10 +418,26 @@ void NetworkConfig::paramsFromConfig( int network_id )
}
for (i = 0; i < 4; i++) {
+ QLineEdit *wepEdit;
+ switch (i) {
+ default:
+ case 0:
+ wepEdit = wep0Edit;
+ break;
+ case 1:
+ wepEdit = wep1Edit;
+ break;
+ case 2:
+ wepEdit = wep2Edit;
+ break;
+ case 3:
+ wepEdit = wep3Edit;
+ break;
+ }
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d wep_key%d", network_id, i);
- reply_len = sizeof(reply);
- if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 2 &&
- reply[0] == '"') {
+ reply_len = sizeof(reply) - 1;
+ res = wpagui->ctrlRequest(cmd, reply, &reply_len);
+ if (res >= 0 && reply_len >= 2 && reply[0] == '"') {
reply[reply_len] = '\0';
pos = strchr(reply + 1, '"');
if (pos)
@@ -412,25 +445,16 @@ void NetworkConfig::paramsFromConfig( int network_id )
if (auth == AUTH_NONE || auth == AUTH_IEEE8021X)
encr = 1;
- switch (i) {
- case 0:
- wep0Edit->setText(reply + 1);
- break;
- case 1:
- wep1Edit->setText(reply + 1);
- break;
- case 2:
- wep2Edit->setText(reply + 1);
- break;
- case 3:
- wep3Edit->setText(reply + 1);
- break;
- }
+ wepEdit->setText(reply + 1);
+ } else if (res >= 0 && key_value_isset(reply, reply_len)) {
+ if (auth == AUTH_NONE || auth == AUTH_IEEE8021X)
+ encr = 1;
+ wepEdit->setText(WPA_GUI_KEY_DATA);
}
}
snprintf(cmd, sizeof(cmd), "GET_NETWORK %d wep_tx_keyidx", network_id);
- reply_len = sizeof(reply);
+ reply_len = sizeof(reply) - 1;
if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 1) {
reply[reply_len] = '\0';
switch (atoi(reply)) {
diff --git a/contrib/wpa_supplicant/wpa_gui/scanresults.ui.h b/contrib/wpa_supplicant/wpa_gui/scanresults.ui.h
index 61555b5..530d2e6 100644
--- a/contrib/wpa_supplicant/wpa_gui/scanresults.ui.h
+++ b/contrib/wpa_supplicant/wpa_gui/scanresults.ui.h
@@ -64,7 +64,7 @@ void ScanResults::updateResults()
signal = cols.count() > 2 ? cols[2] : "";
flags = cols.count() > 3 ? cols[3] : "";
ssid = cols.count() > 4 ? cols[4] : "";
- new QListViewItem(scanResultsView, ssid, bssid, freq, signal, flags);
+ new Q3ListViewItem(scanResultsView, ssid, bssid, freq, signal, flags);
}
}
@@ -89,7 +89,7 @@ void ScanResults::getResults()
-void ScanResults::bssSelected( QListViewItem * sel )
+void ScanResults::bssSelected( Q3ListViewItem * sel )
{
NetworkConfig *nc = new NetworkConfig();
if (nc == NULL)
@@ -98,4 +98,4 @@ void ScanResults::bssSelected( QListViewItem * sel )
nc->paramsFromScanResults(sel);
nc->show();
nc->exec();
- }
+}
diff --git a/contrib/wpa_supplicant/wpa_gui/setup-mingw-cross-compiling b/contrib/wpa_supplicant/wpa_gui/setup-mingw-cross-compiling
new file mode 100755
index 0000000..e173b00
--- /dev/null
+++ b/contrib/wpa_supplicant/wpa_gui/setup-mingw-cross-compiling
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# qmake seems to be forcing include and lib paths from the original build
+# and I have no idea how to change these. For now, just override the
+# directories in the Makefile.Release file after qmake run.
+
+qmake -spec /q/jm/qt4-win/4.0.0/mkspecs/win32-g++ wpa_gui.pro -o Makefile
+cat Makefile.Release |
+ sed s%qt4/lib%qt4-win/4.0.0/lib%g |
+ sed s%qt4/include%qt4-win/4.0.0/include%g > tmp.Makefile.Release &&
+mv -f tmp.Makefile.Release Makefile.Release
diff --git a/contrib/wpa_supplicant/wpa_gui/wpa_gui.pro b/contrib/wpa_supplicant/wpa_gui/wpa_gui.pro
index 7134c7d..07829ba 100644
--- a/contrib/wpa_supplicant/wpa_gui/wpa_gui.pro
+++ b/contrib/wpa_supplicant/wpa_gui/wpa_gui.pro
@@ -3,11 +3,20 @@ LANGUAGE = C++
CONFIG += qt warn_on release
-# For Windows build:
-#LIBS += -lws2_32 -static
-#DEFINES += CONFIG_NATIVE_WINDOWS CONFIG_CTRL_IFACE_UDP
+DEFINES += CONFIG_CTRL_IFACE
+
+win32 {
+ LIBS += -lws2_32 -static
+ DEFINES += CONFIG_NATIVE_WINDOWS CONFIG_CTRL_IFACE_NAMED_PIPE
+} else:win32-g++ {
+ # cross compilation to win32
+ LIBS += -lws2_32 -static
+ DEFINES += CONFIG_NATIVE_WINDOWS CONFIG_CTRL_IFACE_NAMED_PIPE
+} else {
+ DEFINES += CONFIG_CTRL_IFACE_UNIX
+}
-INCLUDEPATH += ..
+INCLUDEPATH += . .. ../../hostapd
HEADERS += wpamsg.h
@@ -27,5 +36,12 @@ unix {
OBJECTS_DIR = .obj
}
-
-
+qtver = $$[QT_VERSION]
+isEmpty( qtver ) {
+ message(Compiling for Qt 3.x)
+ DEFINES += Q3ListViewItem=QListViewItem
+} else {
+ message(Compiling for Qt $$qtver)
+ QT += qt3support
+ CONFIG += uic3
+}
diff --git a/contrib/wpa_supplicant/wpa_gui/wpagui.ui b/contrib/wpa_supplicant/wpa_gui/wpagui.ui
index 7097bfa..01666a3 100644
--- a/contrib/wpa_supplicant/wpa_gui/wpagui.ui
+++ b/contrib/wpa_supplicant/wpa_gui/wpagui.ui
@@ -401,6 +401,12 @@
<receiver>WpaGui</receiver>
<slot>addNetwork()</slot>
</connection>
+ <connection>
+ <sender>adapterSelect</sender>
+ <signal>activated(const QString&amp;)</signal>
+ <receiver>WpaGui</receiver>
+ <slot>selectAdapter(const QString&amp;)</slot>
+ </connection>
</connections>
<includes>
<include location="global" impldecl="in declaration">qtimer.h</include>
@@ -451,6 +457,7 @@
<slot>selectNetwork( const QString &amp; sel )</slot>
<slot>editNetwork()</slot>
<slot>addNetwork()</slot>
+ <slot>selectAdapter( const QString &amp; sel )</slot>
</slots>
<functions>
<function access="private" specifier="non virtual">init()</function>
diff --git a/contrib/wpa_supplicant/wpa_gui/wpagui.ui.h b/contrib/wpa_supplicant/wpa_gui/wpagui.ui.h
index 58760e7..04e438d 100644
--- a/contrib/wpa_supplicant/wpa_gui/wpagui.ui.h
+++ b/contrib/wpa_supplicant/wpa_gui/wpagui.ui.h
@@ -110,6 +110,8 @@ int WpaGui::openCtrlConnection(const char *ifname)
{
char *cfile;
int flen;
+ char buf[2048], *pos, *pos2;
+ size_t len;
if (ifname) {
if (ifname != ctrl_iface) {
@@ -120,13 +122,24 @@ int WpaGui::openCtrlConnection(const char *ifname)
#ifdef CONFIG_CTRL_IFACE_UDP
free(ctrl_iface);
ctrl_iface = strdup("udp");
-#else /* CONFIG_CTRL_IFACE_UDP */
+#endif /* CONFIG_CTRL_IFACE_UDP */
+#ifdef CONFIG_CTRL_IFACE_UNIX
struct dirent *dent;
DIR *dir = opendir(ctrl_iface_dir);
free(ctrl_iface);
ctrl_iface = NULL;
if (dir) {
while ((dent = readdir(dir))) {
+#ifdef _DIRENT_HAVE_D_TYPE
+ /* Skip the file if it is not a socket.
+ * Also accept DT_UNKNOWN (0) in case
+ * the C library or underlying file
+ * system does not support d_type. */
+ if (dent->d_type != DT_SOCK &&
+ dent->d_type != DT_UNKNOWN)
+ continue;
+#endif /* _DIRENT_HAVE_D_TYPE */
+
if (strcmp(dent->d_name, ".") == 0 ||
strcmp(dent->d_name, "..") == 0)
continue;
@@ -136,17 +149,46 @@ int WpaGui::openCtrlConnection(const char *ifname)
}
closedir(dir);
}
-#endif /* CONFIG_CTRL_IFACE_UDP */
+#endif /* CONFIG_CTRL_IFACE_UNIX */
+#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE
+ struct wpa_ctrl *ctrl;
+ int ret;
+
+ free(ctrl_iface);
+ ctrl_iface = NULL;
+
+ ctrl = wpa_ctrl_open(NULL);
+ if (ctrl) {
+ len = sizeof(buf) - 1;
+ ret = wpa_ctrl_request(ctrl, "INTERFACES", 10, buf, &len, NULL);
+ if (ret >= 0) {
+ buf[len] = '\0';
+ pos = strchr(buf, '\n');
+ if (pos)
+ *pos = '\0';
+ ctrl_iface = strdup(buf);
+ }
+ wpa_ctrl_close(ctrl);
+ }
+#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */
}
if (ctrl_iface == NULL)
return -1;
+#ifdef CONFIG_CTRL_IFACE_UNIX
flen = strlen(ctrl_iface_dir) + strlen(ctrl_iface) + 2;
cfile = (char *) malloc(flen);
if (cfile == NULL)
return -1;
snprintf(cfile, flen, "%s/%s", ctrl_iface_dir, ctrl_iface);
+#else /* CONFIG_CTRL_IFACE_UNIX */
+ flen = strlen(ctrl_iface) + 1;
+ cfile = (char *) malloc(flen);
+ if (cfile == NULL)
+ return -1;
+ snprintf(cfile, flen, "%s", ctrl_iface);
+#endif /* CONFIG_CTRL_IFACE_UNIX */
if (ctrl_conn) {
wpa_ctrl_close(ctrl_conn);
@@ -182,14 +224,33 @@ int WpaGui::openCtrlConnection(const char *ifname)
return -1;
}
+#if defined(CONFIG_CTRL_IFACE_UNIX) || defined(CONFIG_CTRL_IFACE_UDP)
msgNotifier = new QSocketNotifier(wpa_ctrl_get_fd(monitor_conn),
QSocketNotifier::Read, this);
connect(msgNotifier, SIGNAL(activated(int)), SLOT(receiveMsgs()));
+#endif
adapterSelect->clear();
adapterSelect->insertItem(ctrl_iface);
adapterSelect->setCurrentItem(0);
+ len = sizeof(buf) - 1;
+ if (wpa_ctrl_request(ctrl_conn, "INTERFACES", 10, buf, &len, NULL) >= 0) {
+ buf[len] = '\0';
+ pos = buf;
+ while (*pos) {
+ pos2 = strchr(pos, '\n');
+ if (pos2)
+ *pos2 = '\0';
+ if (strcmp(pos, ctrl_iface) != 0)
+ adapterSelect->insertItem(pos);
+ if (pos2)
+ pos = pos2 + 1;
+ else
+ break;
+ }
+ }
+
return 0;
}
@@ -408,7 +469,7 @@ void WpaGui::helpAbout()
{
QMessageBox::about(this, "wpa_gui for wpa_supplicant",
"Copyright (c) 2003-2005,\n"
- "Jouni Malinen <jkmaline@cc.hut.fi>\n"
+ "Jouni Malinen <j@w1.fi>\n"
"and contributors.\n"
"\n"
"This program is free software. You can\n"
@@ -469,6 +530,16 @@ void WpaGui::ping()
char buf[10];
size_t len;
+#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE
+ /*
+ * QSocketNotifier cannot be used with Windows named pipes, so use a timer
+ * to check for received messages for now. This could be optimized be doing
+ * something specific to named pipes or Windows events, but it is not clear
+ * what would be the best way of doing that in Qt.
+ */
+ receiveMsgs();
+#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */
+
if (scanres && !scanres->isVisible()) {
delete scanres;
scanres = NULL;
@@ -575,7 +646,7 @@ void WpaGui::receiveMsgs()
char buf[256];
size_t len;
- while (wpa_ctrl_pending(monitor_conn)) {
+ while (monitor_conn && wpa_ctrl_pending(monitor_conn) > 0) {
len = sizeof(buf) - 1;
if (wpa_ctrl_recv(monitor_conn, buf, &len) == 0) {
buf[len] = '\0';
@@ -649,3 +720,12 @@ void WpaGui::addNetwork()
nc->show();
nc->exec();
}
+
+
+void WpaGui::selectAdapter( const QString & sel )
+{
+ if (openCtrlConnection(sel.ascii()) < 0)
+ printf("Failed to open control connection to wpa_supplicant.\n");
+ updateStatus();
+ updateNetworks();
+}
diff --git a/contrib/wpa_supplicant/wpa_gui/wpamsg.h b/contrib/wpa_supplicant/wpa_gui/wpamsg.h
index 2984017..f3fce06 100644
--- a/contrib/wpa_supplicant/wpa_gui/wpamsg.h
+++ b/contrib/wpa_supplicant/wpa_gui/wpamsg.h
@@ -1,7 +1,16 @@
#ifndef WPAMSG_H
#define WPAMSG_H
+class WpaMsg;
+
+#if QT_VERSION >= 0x040000
+#include <QDateTime>
+#include <QLinkedList>
+typedef QLinkedList<WpaMsg> WpaMsgList;
+#else
#include <qdatetime.h>
+typedef QValueList<WpaMsg> WpaMsgList;
+#endif
class WpaMsg {
public:
@@ -22,6 +31,4 @@ private:
QDateTime timestamp;
};
-typedef QValueList<WpaMsg> WpaMsgList;
-
#endif /* WPAMSG_H */
OpenPOWER on IntegriCloud