diff options
author | sam <sam@FreeBSD.org> | 2007-07-11 15:48:36 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2007-07-11 15:48:36 +0000 |
commit | 35aef052ff21baa52c4cec68b512986c21f70a48 (patch) | |
tree | c3da7f33886a852f7dceb74373fbdeec49a48f77 /contrib/wpa_supplicant/wpa_gui | |
parent | 840099f34d8de1ca769f02fae379c4d8e5d6688a (diff) | |
download | FreeBSD-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.h | 4 | ||||
-rw-r--r-- | contrib/wpa_supplicant/wpa_gui/networkconfig.ui.h | 92 | ||||
-rw-r--r-- | contrib/wpa_supplicant/wpa_gui/scanresults.ui.h | 6 | ||||
-rwxr-xr-x | contrib/wpa_supplicant/wpa_gui/setup-mingw-cross-compiling | 11 | ||||
-rw-r--r-- | contrib/wpa_supplicant/wpa_gui/wpa_gui.pro | 28 | ||||
-rw-r--r-- | contrib/wpa_supplicant/wpa_gui/wpagui.ui | 7 | ||||
-rw-r--r-- | contrib/wpa_supplicant/wpa_gui/wpagui.ui.h | 88 | ||||
-rw-r--r-- | contrib/wpa_supplicant/wpa_gui/wpamsg.h | 11 |
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&)</signal> + <receiver>WpaGui</receiver> + <slot>selectAdapter(const QString&)</slot> + </connection> </connections> <includes> <include location="global" impldecl="in declaration">qtimer.h</include> @@ -451,6 +457,7 @@ <slot>selectNetwork( const QString & sel )</slot> <slot>editNetwork()</slot> <slot>addNetwork()</slot> + <slot>selectAdapter( const QString & 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 */ |