1526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/**************************************************************************** 2526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** ui.h extension file, included from the uic-generated form implementation. 3526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** 4526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** If you want to add, delete, or rename functions or slots, use 5526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** Qt Designer to update this file, preserving your code. 6526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** 7526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** You should not define a constructor or destructor in this file. 8526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** Instead, write your code in functions called init() and destroy(). 9526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** These will automatically be called by the form's constructor and 10526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt** destructor. 11526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt*****************************************************************************/ 12526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 13526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 14526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef __MINGW32__ 15526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* Need to get getopt() */ 16526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include <unistd.h> 17526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif 18526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 19526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include <stdlib.h> 20526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 21526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::init() 22526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 23526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eh = NULL; 24526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt scanres = NULL; 25526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt udr = NULL; 26526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface = NULL; 27526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_conn = NULL; 28526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt monitor_conn = NULL; 29526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt msgNotifier = NULL; 30526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface_dir = strdup("/var/run/wpa_supplicant"); 31526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 32526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt parse_argv(); 33526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 34526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textStatus->setText("connecting to wpa_supplicant"); 35526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt timer = new QTimer(this); 36526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt connect(timer, SIGNAL(timeout()), SLOT(ping())); 37526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt timer->start(1000, FALSE); 38526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 39526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (openCtrlConnection(ctrl_iface) < 0) { 40526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Failed to open control connection to wpa_supplicant.\n"); 41526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 42526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 43526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt updateStatus(); 44526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt networkMayHaveChanged = true; 45526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt updateNetworks(); 46526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 47526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 48526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 49526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::destroy() 50526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 51526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete msgNotifier; 52526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 53526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (monitor_conn) { 54526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_ctrl_detach(monitor_conn); 55526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_ctrl_close(monitor_conn); 56526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt monitor_conn = NULL; 57526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 58526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ctrl_conn) { 59526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_ctrl_close(ctrl_conn); 60526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_conn = NULL; 61526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 62526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 63526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (eh) { 64526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eh->close(); 65526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete eh; 66526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eh = NULL; 67526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 68526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 69526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (scanres) { 70526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt scanres->close(); 71526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete scanres; 72526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt scanres = NULL; 73526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 74526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 75526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (udr) { 76526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt udr->close(); 77526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete udr; 78526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt udr = NULL; 79526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 80526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 81526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(ctrl_iface); 82526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface = NULL; 83526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 84526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(ctrl_iface_dir); 85526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface_dir = NULL; 86526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 87526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 88526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 89526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::parse_argv() 90526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 91526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int c; 92526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt for (;;) { 93526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt c = getopt(qApp->argc(), qApp->argv(), "i:p:"); 94526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (c < 0) 95526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 96526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt switch (c) { 97526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case 'i': 98526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(ctrl_iface); 99526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface = strdup(optarg); 100526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 101526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt case 'p': 102526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(ctrl_iface_dir); 103526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface_dir = strdup(optarg); 104526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 105526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 106526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 107526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 108526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 109526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 110526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint WpaGui::openCtrlConnection(const char *ifname) 111526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 112526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char *cfile; 113526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int flen; 114526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char buf[2048], *pos, *pos2; 115526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t len; 116526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 117526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ifname) { 118526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ifname != ctrl_iface) { 119526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(ctrl_iface); 120526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface = strdup(ifname); 121526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 122526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else { 123526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef CONFIG_CTRL_IFACE_UDP 124526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(ctrl_iface); 125526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface = strdup("udp"); 126526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* CONFIG_CTRL_IFACE_UDP */ 127526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef CONFIG_CTRL_IFACE_UNIX 128526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct dirent *dent; 129526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt DIR *dir = opendir(ctrl_iface_dir); 130526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(ctrl_iface); 131526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface = NULL; 132526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (dir) { 133526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while ((dent = readdir(dir))) { 134526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef _DIRENT_HAVE_D_TYPE 135526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* Skip the file if it is not a socket. 136526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Also accept DT_UNKNOWN (0) in case 137526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * the C library or underlying file 138526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * system does not support d_type. */ 139526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (dent->d_type != DT_SOCK && 140526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt dent->d_type != DT_UNKNOWN) 141526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt continue; 142526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* _DIRENT_HAVE_D_TYPE */ 143526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 144526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strcmp(dent->d_name, ".") == 0 || 145526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt strcmp(dent->d_name, "..") == 0) 146526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt continue; 147526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Selected interface '%s'\n", dent->d_name); 148526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface = strdup(dent->d_name); 149526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 150526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 151526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt closedir(dir); 152526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 153526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* CONFIG_CTRL_IFACE_UNIX */ 154526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE 155526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct wpa_ctrl *ctrl; 156526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int ret; 157526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 158526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(ctrl_iface); 159526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface = NULL; 160526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 161526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl = wpa_ctrl_open(NULL); 162526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ctrl) { 163526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt len = sizeof(buf) - 1; 164526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = wpa_ctrl_request(ctrl, "INTERFACES", 10, buf, &len, NULL); 165526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret >= 0) { 166526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt buf[len] = '\0'; 167526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = strchr(buf, '\n'); 168526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos) 169526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *pos = '\0'; 170526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_iface = strdup(buf); 171526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 172526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_ctrl_close(ctrl); 173526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 174526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ 175526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 176526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 177526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ctrl_iface == NULL) 178526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -1; 179526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 180526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef CONFIG_CTRL_IFACE_UNIX 181526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt flen = strlen(ctrl_iface_dir) + strlen(ctrl_iface) + 2; 182526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt cfile = (char *) malloc(flen); 183526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (cfile == NULL) 184526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -1; 185526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cfile, flen, "%s/%s", ctrl_iface_dir, ctrl_iface); 186526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#else /* CONFIG_CTRL_IFACE_UNIX */ 187526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt flen = strlen(ctrl_iface) + 1; 188526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt cfile = (char *) malloc(flen); 189526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (cfile == NULL) 190526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -1; 191526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt snprintf(cfile, flen, "%s", ctrl_iface); 192526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* CONFIG_CTRL_IFACE_UNIX */ 193526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 194526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ctrl_conn) { 195526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_ctrl_close(ctrl_conn); 196526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_conn = NULL; 197526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 198526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 199526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (monitor_conn) { 200526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete msgNotifier; 201526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt msgNotifier = NULL; 202526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_ctrl_detach(monitor_conn); 203526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_ctrl_close(monitor_conn); 204526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt monitor_conn = NULL; 205526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 206526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 207526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Trying to connect to '%s'\n", cfile); 208526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_conn = wpa_ctrl_open(cfile); 209526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ctrl_conn == NULL) { 210526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(cfile); 211526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -1; 212526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 213526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt monitor_conn = wpa_ctrl_open(cfile); 214526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(cfile); 215526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (monitor_conn == NULL) { 216526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_ctrl_close(ctrl_conn); 217526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -1; 218526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 219526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpa_ctrl_attach(monitor_conn)) { 220526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Failed to attach to wpa_supplicant\n"); 221526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_ctrl_close(monitor_conn); 222526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt monitor_conn = NULL; 223526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_ctrl_close(ctrl_conn); 224526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrl_conn = NULL; 225526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -1; 226526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 227526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 228526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#if defined(CONFIG_CTRL_IFACE_UNIX) || defined(CONFIG_CTRL_IFACE_UDP) 229526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt msgNotifier = new QSocketNotifier(wpa_ctrl_get_fd(monitor_conn), 230526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QSocketNotifier::Read, this); 231526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt connect(msgNotifier, SIGNAL(activated(int)), SLOT(receiveMsgs())); 232526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif 233526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 234526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt adapterSelect->clear(); 235526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt adapterSelect->insertItem(ctrl_iface); 236526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt adapterSelect->setCurrentItem(0); 237526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 238526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt len = sizeof(buf) - 1; 239526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpa_ctrl_request(ctrl_conn, "INTERFACES", 10, buf, &len, NULL) >= 0) { 240526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt buf[len] = '\0'; 241526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = buf; 242526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while (*pos) { 243526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos2 = strchr(pos, '\n'); 244526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos2) 245526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *pos2 = '\0'; 246526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strcmp(pos, ctrl_iface) != 0) 247526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt adapterSelect->insertItem(pos); 248526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos2) 249526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = pos2 + 1; 250526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else 251526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 252526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 253526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 254526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 255526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return 0; 256526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 257526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 258526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 259526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic void wpa_gui_msg_cb(char *msg, size_t) 260526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 261526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* This should not happen anymore since two control connections are used. */ 262526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("missed message: %s\n", msg); 263526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 264526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 265526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 266526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint WpaGui::ctrlRequest(const char *cmd, char *buf, size_t *buflen) 267526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 268526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int ret; 269526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 270526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ctrl_conn == NULL) 271526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -3; 272526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ret = wpa_ctrl_request(ctrl_conn, cmd, strlen(cmd), buf, buflen, 273526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt wpa_gui_msg_cb); 274526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ret == -2) { 275526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("'%s' command timed out.\n", cmd); 276526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (ret < 0) { 277526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("'%s' command failed.\n", cmd); 278526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 279526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 280526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return ret; 281526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 282526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 283526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 284526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::updateStatus() 285526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 286526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char buf[2048], *start, *end, *pos; 287526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t len; 288526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 289526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pingsToStatusUpdate = 10; 290526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 291526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt len = sizeof(buf) - 1; 292526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ctrl_conn == NULL || ctrlRequest("STATUS", buf, &len) < 0) { 293526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textStatus->setText("Could not get status from wpa_supplicant"); 294526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textAuthentication->clear(); 295526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textEncryption->clear(); 296526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textSsid->clear(); 297526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textBssid->clear(); 298526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textIpAddress->clear(); 299526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 300526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 301526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 302526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt buf[len] = '\0'; 303526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 304526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt bool auth_updated = false, ssid_updated = false; 305526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt bool bssid_updated = false, ipaddr_updated = false; 306526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt bool status_updated = false; 307526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char *pairwise_cipher = NULL, *group_cipher = NULL; 308526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 309526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt start = buf; 310526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while (*start) { 311526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt bool last = false; 312526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt end = strchr(start, '\n'); 313526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (end == NULL) { 314526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt last = true; 315526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt end = start; 316526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while (end[0] && end[1]) 317526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt end++; 318526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 319526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *end = '\0'; 320526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 321526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = strchr(start, '='); 322526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos) { 323526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *pos++ = '\0'; 324526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strcmp(start, "bssid") == 0) { 325526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt bssid_updated = true; 326526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textBssid->setText(pos); 327526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (strcmp(start, "ssid") == 0) { 328526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ssid_updated = true; 329526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textSsid->setText(pos); 330526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (strcmp(start, "ip_address") == 0) { 331526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ipaddr_updated = true; 332526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textIpAddress->setText(pos); 333526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (strcmp(start, "wpa_state") == 0) { 334526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt status_updated = true; 335526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textStatus->setText(pos); 336526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (strcmp(start, "key_mgmt") == 0) { 337526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt auth_updated = true; 338526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textAuthentication->setText(pos); 339526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* TODO: could add EAP status to this */ 340526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (strcmp(start, "pairwise_cipher") == 0) { 341526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pairwise_cipher = pos; 342526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (strcmp(start, "group_cipher") == 0) { 343526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt group_cipher = pos; 344526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 345526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 346526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 347526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (last) 348526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 349526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt start = end + 1; 350526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 351526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 352526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pairwise_cipher || group_cipher) { 353526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QString encr; 354526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pairwise_cipher && group_cipher && 355526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt strcmp(pairwise_cipher, group_cipher) != 0) { 356526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr.append(pairwise_cipher); 357526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr.append(" + "); 358526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr.append(group_cipher); 359526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (pairwise_cipher) { 360526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr.append(pairwise_cipher); 361526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else { 362526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr.append(group_cipher); 363526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt encr.append(" [group key only]"); 364526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 365526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textEncryption->setText(encr); 366526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else 367526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textEncryption->clear(); 368526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 369526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (!status_updated) 370526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textStatus->clear(); 371526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (!auth_updated) 372526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textAuthentication->clear(); 373526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (!ssid_updated) 374526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textSsid->clear(); 375526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (!bssid_updated) 376526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textBssid->clear(); 377526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (!ipaddr_updated) 378526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textIpAddress->clear(); 379526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 380526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 381526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 382526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::updateNetworks() 383526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 384526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char buf[2048], *start, *end, *id, *ssid, *bssid, *flags; 385526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t len; 386526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int first_active = -1; 387526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt bool selected = false; 388526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 389526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (!networkMayHaveChanged) 390526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 391526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 392526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt networkSelect->clear(); 393526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 394526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ctrl_conn == NULL) 395526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 396526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 397526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt len = sizeof(buf) - 1; 398526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ctrlRequest("LIST_NETWORKS", buf, &len) < 0) 399526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 400526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 401526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt buf[len] = '\0'; 402526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt start = strchr(buf, '\n'); 403526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (start == NULL) 404526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 405526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt start++; 406526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 407526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while (*start) { 408526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt bool last = false; 409526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt end = strchr(start, '\n'); 410526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (end == NULL) { 411526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt last = true; 412526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt end = start; 413526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while (end[0] && end[1]) 414526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt end++; 415526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 416526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *end = '\0'; 417526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 418526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt id = start; 419526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ssid = strchr(id, '\t'); 420526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ssid == NULL) 421526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 422526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *ssid++ = '\0'; 423526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt bssid = strchr(ssid, '\t'); 424526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (bssid == NULL) 425526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 426526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *bssid++ = '\0'; 427526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt flags = strchr(bssid, '\t'); 428526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (flags == NULL) 429526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 430526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *flags++ = '\0'; 431526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 432526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QString network(id); 433526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt network.append(": "); 434526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt network.append(ssid); 435526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt networkSelect->insertItem(network); 436526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 437526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strstr(flags, "[CURRENT]")) { 438526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt networkSelect->setCurrentItem(networkSelect->count() - 1); 439526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt selected = true; 440526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else if (first_active < 0 && strstr(flags, "[DISABLED]") == NULL) 441526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt first_active = networkSelect->count() - 1; 442526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 443526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (last) 444526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt break; 445526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt start = end + 1; 446526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 447526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 448526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (!selected && first_active >= 0) 449526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt networkSelect->setCurrentItem(first_active); 450526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 451526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt networkMayHaveChanged = false; 452526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 453526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 454526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 455526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::helpIndex() 456526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 457526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("helpIndex\n"); 458526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 459526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 460526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 461526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::helpContents() 462526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 463526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("helpContents\n"); 464526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 465526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 466526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 467526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::helpAbout() 468526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 469526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QMessageBox::about(this, "wpa_gui for wpa_supplicant", 470526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "Copyright (c) 2003-2008,\n" 471526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "Jouni Malinen <j@w1.fi>\n" 472526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "and contributors.\n" 473526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "\n" 474526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "This program is free software. You can\n" 475526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "distribute it and/or modify it under the terms of\n" 476526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "the GNU General Public License version 2.\n" 477526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "\n" 478526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "Alternatively, this software may be distributed\n" 479526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "under the terms of the BSD license.\n" 480526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "\n" 481526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "This product includes software developed\n" 482526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "by the OpenSSL Project for use in the\n" 483526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt "OpenSSL Toolkit (http://www.openssl.org/)\n"); 484526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 485526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 486526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 487526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::disconnect() 488526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 489526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char reply[10]; 490526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t reply_len = sizeof(reply); 491526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrlRequest("DISCONNECT", reply, &reply_len); 492526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 493526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 494526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 495526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::scan() 496526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 497526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (scanres) { 498526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt scanres->close(); 499526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete scanres; 500526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 501526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 502526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt scanres = new ScanResults(); 503526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (scanres == NULL) 504526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 505526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt scanres->setWpaGui(this); 506526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt scanres->show(); 507526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt scanres->exec(); 508526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 509526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 510526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 511526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::eventHistory() 512526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 513526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (eh) { 514526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eh->close(); 515526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete eh; 516526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 517526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 518526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eh = new EventHistory(); 519526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (eh == NULL) 520526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 521526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eh->addEvents(msgs); 522526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eh->show(); 523526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eh->exec(); 524526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 525526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 526526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 527526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::ping() 528526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 529526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char buf[10]; 530526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t len; 531526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 532526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE 533526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* 534526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * QSocketNotifier cannot be used with Windows named pipes, so use a timer 535526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * to check for received messages for now. This could be optimized be doing 536526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * something specific to named pipes or Windows events, but it is not clear 537526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * what would be the best way of doing that in Qt. 538526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 539526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt receiveMsgs(); 540526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ 541526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 542526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (scanres && !scanres->isVisible()) { 543526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete scanres; 544526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt scanres = NULL; 545526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 546526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 547526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (eh && !eh->isVisible()) { 548526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete eh; 549526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eh = NULL; 550526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 551526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 552526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (udr && !udr->isVisible()) { 553526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete udr; 554526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt udr = NULL; 555526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 556526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 557526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt len = sizeof(buf) - 1; 558526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (ctrlRequest("PING", buf, &len) < 0) { 559526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("PING failed - trying to reconnect\n"); 560526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (openCtrlConnection(ctrl_iface) >= 0) { 561526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Reconnected successfully\n"); 562526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pingsToStatusUpdate = 0; 563526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 564526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 565526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 566526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pingsToStatusUpdate--; 567526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pingsToStatusUpdate <= 0) { 568526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt updateStatus(); 569526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt updateNetworks(); 570526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 571526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 572526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 573526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 574526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic int str_match(const char *a, const char *b) 575526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 576526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return strncmp(a, b, strlen(b)) == 0; 577526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 578526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 579526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 580526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::processMsg(char *msg) 581526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 582526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char *pos = msg, *pos2; 583526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int priority = 2; 584526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 585526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (*pos == '<') { 586526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* skip priority */ 587526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos++; 588526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt priority = atoi(pos); 589526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = strchr(pos, '>'); 590526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos) 591526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos++; 592526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else 593526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos = msg; 594526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 595526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 596526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt WpaMsg wm(pos, priority); 597526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (eh) 598526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt eh->addEvent(wm); 599526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt msgs.append(wm); 600526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while (msgs.count() > 100) 601526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt msgs.pop_front(); 602526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 603526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /* Update last message with truncated version of the event */ 604526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (strncmp(pos, "CTRL-", 5) == 0) { 605526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos2 = strchr(pos, str_match(pos, WPA_CTRL_REQ) ? ':' : ' '); 606526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos2) 607526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos2++; 608526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt else 609526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos2 = pos; 610526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } else 611526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pos2 = pos; 612526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QString lastmsg = pos2; 613526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt lastmsg.truncate(40); 614526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt textLastMessage->setText(lastmsg); 615526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 616526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt pingsToStatusUpdate = 0; 617526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt networkMayHaveChanged = true; 618526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 619526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (str_match(pos, WPA_CTRL_REQ)) 620526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt processCtrlReq(pos + strlen(WPA_CTRL_REQ)); 621526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 622526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 623526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 624526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::processCtrlReq(const char *req) 625526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 626526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (udr) { 627526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt udr->close(); 628526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete udr; 629526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 630526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt udr = new UserDataRequest(); 631526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (udr == NULL) 632526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 633526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (udr->setParams(this, req) < 0) { 634526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt delete udr; 635526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt udr = NULL; 636526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 637526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 638526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt udr->show(); 639526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt udr->exec(); 640526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 641526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 642526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 643526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::receiveMsgs() 644526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 645526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char buf[256]; 646526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t len; 647526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 648526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt while (monitor_conn && wpa_ctrl_pending(monitor_conn) > 0) { 649526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt len = sizeof(buf) - 1; 650526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (wpa_ctrl_recv(monitor_conn, buf, &len) == 0) { 651526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt buf[len] = '\0'; 652526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt processMsg(buf); 653526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 654526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 655526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 656526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 657526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 658526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::connectB() 659526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 660526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char reply[10]; 661526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t reply_len = sizeof(reply); 662526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrlRequest("REASSOCIATE", reply, &reply_len); 663526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 664526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 665526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 666526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::selectNetwork( const QString &sel ) 667526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 668526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QString cmd(sel); 669526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt char reply[10]; 670526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t reply_len = sizeof(reply); 671526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 672526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int pos = cmd.find(':'); 673526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos < 0) { 674526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Invalid selectNetwork '%s'\n", cmd.ascii()); 675526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 676526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 677526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt cmd.truncate(pos); 678526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt cmd.prepend("SELECT_NETWORK "); 679526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt ctrlRequest(cmd.ascii(), reply, &reply_len); 680526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 681526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 682526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 683526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::editNetwork() 684526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 685526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt QString sel(networkSelect->currentText()); 686526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int pos = sel.find(':'); 687526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (pos < 0) { 688526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Invalid selectNetwork '%s'\n", sel.ascii()); 689526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 690526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt } 691526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt sel.truncate(pos); 692526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 693526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt NetworkConfig *nc = new NetworkConfig(); 694526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (nc == NULL) 695526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 696526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt nc->setWpaGui(this); 697526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 698526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt nc->paramsFromConfig(sel.toInt()); 699526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt nc->show(); 700526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt nc->exec(); 701526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 702526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 703526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 704526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::triggerUpdate() 705526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 706526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt updateStatus(); 707526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt networkMayHaveChanged = true; 708526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt updateNetworks(); 709526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 710526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 711526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 712526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::addNetwork() 713526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 714526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt NetworkConfig *nc = new NetworkConfig(); 715526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (nc == NULL) 716526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return; 717526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt nc->setWpaGui(this); 718526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt nc->newNetwork(); 719526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt nc->show(); 720526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt nc->exec(); 721526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 722526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 723526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 724526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid WpaGui::selectAdapter( const QString & sel ) 725526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 726526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt if (openCtrlConnection(sel.ascii()) < 0) 727526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt printf("Failed to open control connection to wpa_supplicant.\n"); 728526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt updateStatus(); 729526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt updateNetworks(); 730526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 731