wpa_gui: Add WPS config methods and device password ID into peer data
[mech_eap.git] / wpa_supplicant / wpa_gui-qt4 / networkconfig.cpp
index 8d5d23b..0d02911 100644 (file)
 #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]"
@@ -35,6 +37,7 @@ NetworkConfig::NetworkConfig(QWidget *parent, const char *, bool, Qt::WFlags)
 {
        setupUi(this);
 
+       encrSelect->setEnabled(false);
        connect(authSelect, SIGNAL(activated(int)), this,
                SLOT(authChanged(int)));
        connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));
@@ -81,22 +84,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 +113,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 +129,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 +141,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);
 }
 
 
@@ -236,7 +244,9 @@ void NetworkConfig::addNetwork()
 
        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 +270,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();
@@ -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);
 }
 
 
@@ -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");