18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_gui - AddInterface class 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2008, 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 "common/wpa_ctrl.h" 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <QMessageBox> 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "wpagui.h" 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "addinterface.h" 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_NATIVE_WINDOWS 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <windows.h> 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef WPA_KEY_ROOT 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_KEY_ROOT HKEY_LOCAL_MACHINE 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef WPA_KEY_PREFIX 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_KEY_PREFIX TEXT("SOFTWARE\\wpa_supplicant") 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_NATIVE_WINDOWS */ 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtAddInterface::AddInterface(WpaGui *_wpagui, QWidget *parent) 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt : QDialog(parent), wpagui(_wpagui) 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt setWindowTitle(tr("Select network interface to add")); 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt resize(400, 200); 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt vboxLayout = new QVBoxLayout(this); 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget = new QTreeWidget(this); 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->setUniformRowHeights(true); 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->setSortingEnabled(true); 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->setColumnCount(3); 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->headerItem()->setText(0, tr("driver")); 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->headerItem()->setText(1, tr("interface")); 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->headerItem()->setText(2, tr("description")); 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->setItemsExpandable(FALSE); 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->setRootIsDecorated(FALSE); 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt vboxLayout->addWidget(interfaceWidget); 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt connect(interfaceWidget, 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt SIGNAL(itemActivated(QTreeWidgetItem *, int)), this, 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt SLOT(interfaceSelected(QTreeWidgetItem *))); 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt addInterfaces(); 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid AddInterface::addInterfaces() 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ctrl *ctrl; 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ret; 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char buf[2048]; 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t len; 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ctrl = wpa_ctrl_open(NULL); 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (ctrl == NULL) 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt len = sizeof(buf) - 1; 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ret = wpa_ctrl_request(ctrl, "INTERFACE_LIST", 14, buf, &len, NULL); 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (ret < 0) { 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_ctrl_close(ctrl); 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt buf[len] = '\0'; 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_ctrl_close(ctrl); 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QString ifaces(buf); 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QStringList lines = ifaces.split(QRegExp("\\n")); 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt for (QStringList::Iterator it = lines.begin(); 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt it != lines.end(); it++) { 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QStringList arg = (*it).split(QChar('\t')); 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (arg.size() < 3) 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt continue; 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QTreeWidgetItem *item = new QTreeWidgetItem(interfaceWidget); 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!item) 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt item->setText(0, arg[0]); 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt item->setText(1, arg[1]); 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt item->setText(2, arg[2]); 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->resizeColumnToContents(0); 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->resizeColumnToContents(1); 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt interfaceWidget->resizeColumnToContents(2); 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_NATIVE_WINDOWS 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtbool AddInterface::addRegistryInterface(const QString &ifname) 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HKEY hk, ihk; 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt LONG ret; 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int id, tmp; 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt TCHAR name[10]; 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DWORD val, i; 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ret = RegOpenKeyEx(WPA_KEY_ROOT, WPA_KEY_PREFIX TEXT("\\interfaces"), 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0, KEY_ENUMERATE_SUB_KEYS | KEY_CREATE_SUB_KEY, 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt &hk); 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (ret != ERROR_SUCCESS) 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return false; 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt id = -1; 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt for (i = 0; ; i++) { 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt TCHAR name[255]; 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DWORD namelen; 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt namelen = 255; 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ret = RegEnumKeyEx(hk, i, name, &namelen, NULL, NULL, NULL, 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt NULL); 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (ret == ERROR_NO_MORE_ITEMS) 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (ret != ERROR_SUCCESS) 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (namelen >= 255) 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt namelen = 255 - 1; 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt name[namelen] = '\0'; 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef UNICODE 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QString s((QChar *) name, namelen); 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* UNICODE */ 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QString s(name); 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* UNICODE */ 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tmp = s.toInt(); 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (tmp > id) 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt id = tmp; 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt id += 1; 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef UNICODE 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wsprintf(name, L"%04d", id); 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* UNICODE */ 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt os_snprintf(name, sizeof(name), "%04d", id); 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* UNICODE */ 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ret = RegCreateKeyEx(hk, name, 0, NULL, 0, KEY_WRITE, NULL, &ihk, 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt NULL); 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt RegCloseKey(hk); 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (ret != ERROR_SUCCESS) 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return false; 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef UNICODE 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt RegSetValueEx(ihk, TEXT("adapter"), 0, REG_SZ, 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (LPBYTE) ifname.unicode(), 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (ifname.length() + 1) * sizeof(TCHAR)); 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* UNICODE */ 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt RegSetValueEx(ihk, TEXT("adapter"), 0, REG_SZ, 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (LPBYTE) ifname.toLocal8Bit(), ifname.length() + 1); 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* UNICODE */ 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt RegSetValueEx(ihk, TEXT("config"), 0, REG_SZ, 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (LPBYTE) TEXT("default"), 8 * sizeof(TCHAR)); 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt RegSetValueEx(ihk, TEXT("ctrl_interface"), 0, REG_SZ, 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt (LPBYTE) TEXT(""), 1 * sizeof(TCHAR)); 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt val = 1; 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt RegSetValueEx(ihk, TEXT("skip_on_error"), 0, REG_DWORD, (LPBYTE) &val, 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sizeof(val)); 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt RegCloseKey(ihk); 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return true; 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_NATIVE_WINDOWS */ 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid AddInterface::interfaceSelected(QTreeWidgetItem *sel) 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!sel) 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ctrl *ctrl; 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ret; 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char buf[20], cmd[256]; 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t len; 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * INTERFACE_ADD <ifname>TAB<confname>TAB<driver>TAB<ctrl_interface>TAB 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * <driver_param>TAB<bridge_name> 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt snprintf(cmd, sizeof(cmd), 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "INTERFACE_ADD %s\t%s\t%s\t%s\t%s\t%s", 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sel->text(1).toAscii().constData(), 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "default", 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sel->text(0).toAscii().constData(), 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "yes", "", ""); 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt cmd[sizeof(cmd) - 1] = '\0'; 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ctrl = wpa_ctrl_open(NULL); 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (ctrl == NULL) 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt len = sizeof(buf) - 1; 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ret = wpa_ctrl_request(ctrl, cmd, strlen(cmd), buf, &len, NULL); 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_ctrl_close(ctrl); 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (ret < 0) { 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QMessageBox::warning(this, "wpa_gui", 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("Add interface command could not be " 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "completed.")); 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt buf[len] = '\0'; 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (buf[0] != 'O' || buf[1] != 'K') { 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QMessageBox::warning(this, "wpa_gui", 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("Failed to add the interface.")); 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return; 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_NATIVE_WINDOWS 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!addRegistryInterface(sel->text(1))) { 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt QMessageBox::information(this, "wpa_gui", 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt tr("Failed to add the interface into " 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "registry.")); 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_NATIVE_WINDOWS */ 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpagui->selectAdapter(sel->text(1)); 2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt close(); 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 240