TDLS: Declare tdls_testing as extern in a header file
[mech_eap.git] / wpa_supplicant / wpa_gui-qt4 / networkconfig.cpp
index a176d05..2727318 100644 (file)
@@ -2,14 +2,8 @@
  * wpa_gui - NetworkConfig class
  * Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Alternatively, this software may be distributed under the terms of BSD
- * license.
- *
- * See README and COPYING for more details.
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
  */
 
 #include <cstdio>
 #include "wpagui.h"
 
 enum {
-    AUTH_NONE = 0,
-    AUTH_IEEE8021X = 1,
-    AUTH_WPA_PSK = 2,
-    AUTH_WPA_EAP = 3,
-    AUTH_WPA2_PSK = 4,
-    AUTH_WPA2_EAP = 5
+       AUTH_NONE_OPEN,
+       AUTH_NONE_WEP,
+       AUTH_NONE_WEP_SHARED,
+       AUTH_IEEE8021X,
+       AUTH_WPA_PSK,
+       AUTH_WPA_EAP,
+       AUTH_WPA2_PSK,
+       AUTH_WPA2_EAP
 };
 
 #define WPA_GUI_KEY_DATA "[key is configured]"
 
 
-NetworkConfig::NetworkConfig(QWidget *parent, const char *, bool, Qt::WFlags)
+NetworkConfig::NetworkConfig(QWidget *parent, const char *, bool,
+                            Qt::WindowFlags)
        : QDialog(parent)
 {
        setupUi(this);
 
+       encrSelect->setEnabled(false);
        connect(authSelect, SIGNAL(activated(int)), this,
                SLOT(authChanged(int)));
        connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));
@@ -81,22 +79,24 @@ void NetworkConfig::paramsFromScanResults(QTreeWidgetItem *sel)
        else if (flags.indexOf("[WPA-PSK") >= 0)
                auth = AUTH_WPA_PSK;
        else
-               auth = AUTH_NONE;
+               auth = AUTH_NONE_OPEN;
 
        if (flags.indexOf("-CCMP") >= 0)
                encr = 1;
        else if (flags.indexOf("-TKIP") >= 0)
                encr = 0;
-       else if (flags.indexOf("WEP") >= 0)
+       else if (flags.indexOf("WEP") >= 0) {
                encr = 1;
-       else
+               if (auth == AUTH_NONE_OPEN)
+                       auth = AUTH_NONE_WEP;
+       } else
                encr = 0;
 
        authSelect->setCurrentIndex(auth);
        authChanged(auth);
        encrSelect->setCurrentIndex(encr);
 
-       wepEnabled(auth == AUTH_NONE && encr == 1);
+       wepEnabled(auth == AUTH_NONE_WEP);
 
        getEapCapa();
 
@@ -108,6 +108,8 @@ void NetworkConfig::paramsFromScanResults(QTreeWidgetItem *sel)
 
 void NetworkConfig::authChanged(int sel)
 {
+       encrSelect->setEnabled(sel != AUTH_NONE_OPEN && sel != AUTH_NONE_WEP &&
+                              sel != AUTH_NONE_WEP_SHARED);
        pskEdit->setEnabled(sel == AUTH_WPA_PSK || sel == AUTH_WPA2_PSK);
        bool eap = sel == AUTH_IEEE8021X || sel == AUTH_WPA_EAP ||
                sel == AUTH_WPA2_EAP;
@@ -122,10 +124,11 @@ void NetworkConfig::authChanged(int sel)
        while (encrSelect->count())
                encrSelect->removeItem(0);
 
-       if (sel == AUTH_NONE || sel == AUTH_IEEE8021X) {
+       if (sel == AUTH_NONE_OPEN || sel == AUTH_NONE_WEP ||
+           sel == AUTH_NONE_WEP_SHARED || sel == AUTH_IEEE8021X) {
                encrSelect->addItem("None");
                encrSelect->addItem("WEP");
-               encrSelect->setCurrentIndex(sel == AUTH_NONE ? 0 : 1);
+               encrSelect->setCurrentIndex(sel == AUTH_NONE_OPEN ? 0 : 1);
        } else {
                encrSelect->addItem("TKIP");
                encrSelect->addItem("CCMP");
@@ -133,7 +136,7 @@ void NetworkConfig::authChanged(int sel)
                                             sel == AUTH_WPA2_EAP) ? 1 : 0);
        }
 
-       wepEnabled(sel == AUTH_IEEE8021X);
+       wepEnabled(sel == AUTH_NONE_WEP || sel == AUTH_NONE_WEP_SHARED);
 }
 
 
@@ -189,10 +192,12 @@ void NetworkConfig::addNetwork()
 
        if (auth == AUTH_WPA_PSK || auth == AUTH_WPA2_PSK) {
                if (psklen < 8 || psklen > 64) {
-                       QMessageBox::warning(this, "WPA Pre-Shared Key Error",
-                                            "WPA-PSK requires a passphrase "
-                                            "of 8 to 63 characters\n"
-                                            "or 64 hex digit PSK");
+                       QMessageBox::warning(
+                               this,
+                               tr("WPA Pre-Shared Key Error"),
+                               tr("WPA-PSK requires a passphrase of 8 to 63 "
+                                  "characters\n"
+                                  "or 64 hex digit PSK"));
                        pskEdit->setFocus();
                        return;
                }
@@ -201,13 +206,14 @@ void NetworkConfig::addNetwork()
        if (idstrEdit->isEnabled() && !idstrEdit->text().isEmpty()) {
                QRegExp rx("^(\\w|-)+$");
                if (rx.indexIn(idstrEdit->text()) < 0) {
-                       QMessageBox::warning(this, "Network ID Error",
-                                            "Network ID String contains "
-                                            "non-word characters.\n"
-                                            "It must be a simple string, "
-                                            "without spaces, containing\n"
-                                            "only characters in this range: "
-                                            "[A-Za-z0-9_-]\n");
+                       QMessageBox::warning(
+                               this, tr("Network ID Error"),
+                               tr("Network ID String contains non-word "
+                                  "characters.\n"
+                                  "It must be a simple string, "
+                                  "without spaces, containing\n"
+                                  "only characters in this range: "
+                                  "[A-Za-z0-9_-]\n"));
                        idstrEdit->setFocus();
                        return;
                }
@@ -222,21 +228,24 @@ void NetworkConfig::addNetwork()
        if (new_network) {
                wpagui->ctrlRequest("ADD_NETWORK", reply, &reply_len);
                if (reply[0] == 'F') {
-                       QMessageBox::warning(this, "wpa_gui", "Failed to add "
-                                            "network to wpa_supplicant\n"
-                                            "configuration.");
+                       QMessageBox::warning(this, "wpa_gui",
+                                            tr("Failed to add "
+                                               "network to wpa_supplicant\n"
+                                               "configuration."));
                        return;
                }
                id = atoi(reply);
        } else
                id = edit_network_id;
 
-       setNetworkParam(id, "ssid", ssidEdit->text().toAscii().constData(),
+       setNetworkParam(id, "ssid", ssidEdit->text().toLocal8Bit().constData(),
                        true);
 
        const char *key_mgmt = NULL, *proto = NULL, *pairwise = NULL;
        switch (auth) {
-       case AUTH_NONE:
+       case AUTH_NONE_OPEN:
+       case AUTH_NONE_WEP:
+       case AUTH_NONE_WEP_SHARED:
                key_mgmt = "NONE";
                break;
        case AUTH_IEEE8021X:
@@ -260,6 +269,11 @@ void NetworkConfig::addNetwork()
                break;
        }
 
+       if (auth == AUTH_NONE_WEP_SHARED)
+               setNetworkParam(id, "auth_alg", "SHARED", false);
+       else
+               setNetworkParam(id, "auth_alg", "OPEN", false);
+
        if (auth == AUTH_WPA_PSK || auth == AUTH_WPA_EAP ||
            auth == AUTH_WPA2_PSK || auth == AUTH_WPA2_EAP) {
                int encr = encrSelect->currentIndex();
@@ -278,14 +292,14 @@ void NetworkConfig::addNetwork()
                setNetworkParam(id, "group", "TKIP CCMP WEP104 WEP40", false);
        }
        if (pskEdit->isEnabled() &&
-           strcmp(passwordEdit->text().toAscii().constData(),
+           strcmp(pskEdit->text().toLocal8Bit().constData(),
                   WPA_GUI_KEY_DATA) != 0)
                setNetworkParam(id, "psk",
-                               pskEdit->text().toAscii().constData(),
+                               pskEdit->text().toLocal8Bit().constData(),
                                psklen != 64);
        if (eapSelect->isEnabled()) {
                const char *eap =
-                       eapSelect->currentText().toAscii().constData();
+                       eapSelect->currentText().toLocal8Bit().constData();
                setNetworkParam(id, "eap", eap, false);
                if (strcmp(eap, "SIM") == 0 || strcmp(eap, "AKA") == 0)
                        setNetworkParam(id, "pcsc", "", true);
@@ -301,21 +315,21 @@ void NetworkConfig::addNetwork()
                        if (inner.startsWith("EAP-"))
                                snprintf(phase2, sizeof(phase2), "auth=%s",
                                         inner.right(inner.size() - 4).
-                                        toAscii().constData());
+                                        toLocal8Bit().constData());
                } else if (eap.compare("TTLS") == 0) {
                        if (inner.startsWith("EAP-"))
                                snprintf(phase2, sizeof(phase2), "autheap=%s",
                                         inner.right(inner.size() - 4).
-                                        toAscii().constData());
+                                        toLocal8Bit().constData());
                        else
                                snprintf(phase2, sizeof(phase2), "auth=%s",
-                                        inner.toAscii().constData());
+                                        inner.toLocal8Bit().constData());
                } else if (eap.compare("FAST") == 0) {
                        const char *provisioning = NULL;
                        if (inner.startsWith("EAP-")) {
                                snprintf(phase2, sizeof(phase2), "auth=%s",
                                         inner.right(inner.size() - 4).
-                                        toAscii().constData());
+                                        toLocal8Bit().constData());
                                provisioning = "fast_provisioning=2";
                        } else if (inner.compare("GTC(auth) + MSCHAPv2(prov)")
                                   == 0) {
@@ -341,21 +355,21 @@ void NetworkConfig::addNetwork()
                setNetworkParam(id, "phase2", "NULL", false);
        if (identityEdit->isEnabled() && identityEdit->text().length() > 0)
                setNetworkParam(id, "identity",
-                               identityEdit->text().toAscii().constData(),
+                               identityEdit->text().toLocal8Bit().constData(),
                                true);
        else
                setNetworkParam(id, "identity", "NULL", false);
        if (passwordEdit->isEnabled() && passwordEdit->text().length() > 0 &&
-           strcmp(passwordEdit->text().toAscii().constData(),
+           strcmp(passwordEdit->text().toLocal8Bit().constData(),
                   WPA_GUI_KEY_DATA) != 0)
                setNetworkParam(id, "password",
-                               passwordEdit->text().toAscii().constData(),
+                               passwordEdit->text().toLocal8Bit().constData(),
                                true);
        else if (passwordEdit->text().length() == 0)
                setNetworkParam(id, "password", "NULL", false);
        if (cacertEdit->isEnabled() && cacertEdit->text().length() > 0)
                setNetworkParam(id, "ca_cert",
-                               cacertEdit->text().toAscii().constData(),
+                               cacertEdit->text().toLocal8Bit().constData(),
                                true);
        else
                setNetworkParam(id, "ca_cert", "NULL", false);
@@ -375,7 +389,7 @@ void NetworkConfig::addNetwork()
 
        if (idstrEdit->isEnabled() && idstrEdit->text().length() > 0)
                setNetworkParam(id, "id_str",
-                               idstrEdit->text().toAscii().constData(),
+                               idstrEdit->text().toLocal8Bit().constData(),
                                true);
        else
                setNetworkParam(id, "id_str", "NULL", false);
@@ -383,7 +397,7 @@ void NetworkConfig::addNetwork()
        if (prioritySpinBox->isEnabled()) {
                QString prio;
                prio = prio.setNum(prioritySpinBox->value());
-               setNetworkParam(id, "priority", prio.toAscii().constData(),
+               setNetworkParam(id, "priority", prio.toLocal8Bit().constData(),
                                false);
        }
 
@@ -391,9 +405,10 @@ void NetworkConfig::addNetwork()
        reply_len = sizeof(reply);
        wpagui->ctrlRequest(cmd, reply, &reply_len);
        if (strncmp(reply, "OK", 2) != 0) {
-               QMessageBox::warning(this, "wpa_gui", "Failed to enable "
-                                    "network in wpa_supplicant\n"
-                                    "configuration.");
+               QMessageBox::warning(this, "wpa_gui",
+                                    tr("Failed to enable "
+                                       "network in wpa_supplicant\n"
+                                       "configuration."));
                /* Network was added, so continue anyway */
        }
        wpagui->triggerUpdate();
@@ -422,9 +437,8 @@ int NetworkConfig::setNetworkParam(int id, const char *field,
 }
 
 
-void NetworkConfig::encrChanged(const QString &sel)
+void NetworkConfig::encrChanged(const QString &)
 {
-       wepEnabled(sel.indexOf("WEP") == 0);
 }
 
 
@@ -455,7 +469,7 @@ void NetworkConfig::writeWepKey(int network_id, QLineEdit *edit, int id)
         * Assume hex key if only hex characters are present and length matches
         * with 40, 104, or 128-bit key
         */
-       txt = edit->text().toAscii().constData();
+       txt = edit->text().toLocal8Bit().constData();
        if (strcmp(txt, WPA_GUI_KEY_DATA) == 0)
                return;
        len = strlen(txt);
@@ -517,7 +531,7 @@ void NetworkConfig::paramsFromConfig(int network_id)
                        wpa = 1;
        }
 
-       int auth = AUTH_NONE, encr = 0;
+       int auth = AUTH_NONE_OPEN, encr = 0;
        snprintf(cmd, sizeof(cmd), "GET_NETWORK %d key_mgmt", network_id);
        reply_len = sizeof(reply) - 1;
        if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) {
@@ -536,7 +550,8 @@ void NetworkConfig::paramsFromConfig(int network_id)
        reply_len = sizeof(reply) - 1;
        if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) {
                reply[reply_len] = '\0';
-               if (strstr(reply, "CCMP") && auth != AUTH_NONE)
+               if (strstr(reply, "CCMP") && auth != AUTH_NONE_OPEN &&
+                   auth != AUTH_NONE_WEP && auth != AUTH_NONE_WEP_SHARED)
                        encr = 1;
                else if (strstr(reply, "TKIP"))
                        encr = 0;
@@ -651,7 +666,7 @@ void NetworkConfig::paramsFromConfig(int network_id)
                if (strncmp(reply, "\"auth=", 6))
                        break;
                if (strcmp(reply + 6, "GTC auth=MSCHAPV2") == 0) {
-                       val = "GTC(auth) + MSCHAPv2(prov)";
+                       val = (char *) "GTC(auth) + MSCHAPv2(prov)";
                        break;
                }
                val = reply + 2;
@@ -694,17 +709,34 @@ void NetworkConfig::paramsFromConfig(int network_id)
                        pos = strchr(reply + 1, '"');
                        if (pos)
                                *pos = '\0';
-                       if (auth == AUTH_NONE || auth == AUTH_IEEE8021X)
+                       if (auth == AUTH_NONE_OPEN || auth == AUTH_IEEE8021X) {
+                               if (auth == AUTH_NONE_OPEN)
+                                       auth = AUTH_NONE_WEP;
                                encr = 1;
+                       }
 
                        wepEdit->setText(reply + 1);
                } else if (res >= 0 && key_value_isset(reply, reply_len)) {
-                       if (auth == AUTH_NONE || auth == AUTH_IEEE8021X)
+                       if (auth == AUTH_NONE_OPEN || auth == AUTH_IEEE8021X) {
+                               if (auth == AUTH_NONE_OPEN)
+                                       auth = AUTH_NONE_WEP;
                                encr = 1;
+                       }
                        wepEdit->setText(WPA_GUI_KEY_DATA);
                }
        }
 
+       if (auth == AUTH_NONE_WEP) {
+               snprintf(cmd, sizeof(cmd), "GET_NETWORK %d auth_alg",
+                        network_id);
+               reply_len = sizeof(reply) - 1;
+               if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) {
+                       reply[reply_len] = '\0';
+                       if (strcmp(reply, "SHARED") == 0)
+                               auth = AUTH_NONE_WEP_SHARED;
+               }
+       }
+
        snprintf(cmd, sizeof(cmd), "GET_NETWORK %d wep_tx_keyidx", network_id);
        reply_len = sizeof(reply) - 1;
        if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 1)
@@ -748,8 +780,7 @@ void NetworkConfig::paramsFromConfig(int network_id)
        authSelect->setCurrentIndex(auth);
        authChanged(auth);
        encrSelect->setCurrentIndex(encr);
-       if (auth == AUTH_NONE || auth == AUTH_IEEE8021X)
-               wepEnabled(encr == 1);
+       wepEnabled(auth == AUTH_NONE_WEP || auth == AUTH_NONE_WEP_SHARED);
 
        removeButton->setEnabled(true);
        addButton->setText("Save");
@@ -761,13 +792,12 @@ void NetworkConfig::removeNetwork()
        char reply[10], cmd[256];
        size_t reply_len;
 
-       if (QMessageBox::information(this, "wpa_gui",
-                                    "This will permanently remove the "
-                                    "network\n"
-                                    "from the configuration. Do you really "
-                                    "want\n"
-                                    "to remove this network?", "Yes", "No")
-           != 0)
+       if (QMessageBox::information(
+                   this, "wpa_gui",
+                   tr("This will permanently remove the network\n"
+                      "from the configuration. Do you really want\n"
+                      "to remove this network?"),
+                   tr("Yes"), tr("No")) != 0)
                return;
 
        snprintf(cmd, sizeof(cmd), "REMOVE_NETWORK %d", edit_network_id);
@@ -775,9 +805,9 @@ void NetworkConfig::removeNetwork()
        wpagui->ctrlRequest(cmd, reply, &reply_len);
        if (strncmp(reply, "OK", 2) != 0) {
                QMessageBox::warning(this, "wpa_gui",
-                                    "Failed to remove network from "
-                                    "wpa_supplicant\n"
-                                    "configuration.");
+                                    tr("Failed to remove network from "
+                                       "wpa_supplicant\n"
+                                       "configuration."));
        } else {
                wpagui->triggerUpdate();
                wpagui->ctrlRequest("SAVE_CONFIG", reply, &reply_len);