void WpaGui::disconnect() { char reply[10]; size_t reply_len = sizeof(reply); ctrlRequest("DISCONNECT", reply, &reply_len); stopWpsRun(false); }
void WpaGui::ping() { char buf[10];printf("This is WpaGui::ping Function.\n"); size_t len; if (scanres && !scanres->isVisible()) { delete scanres; scanres = NULL; } // if (eh && !eh->isVisible()) { // delete eh; // eh = NULL; // } // if (udr && !udr->isVisible()) { // delete udr; // udr = NULL; // } len = sizeof(buf) - 1; if (ctrlRequest("PING", buf, &len) < 0) { printf("PING failed - trying to reconnect\n"); if (openCtrlConnection(ctrl_iface) >= 0) { printf("Reconnected successfully\n"); pingsToStatusUpdate = 0; } } pingsToStatusUpdate--; if (pingsToStatusUpdate <= 0) { updateStatus(); updateNetworks(); } }
void WpaGui::connectB() { char reply[10];printf("This is WpaGui::connectB Function.\n"); size_t reply_len = sizeof(reply); ctrlRequest("REASSOCIATE", reply, &reply_len); get_IPAddress(); }
void WpaGui::ping() { char buf[10]; size_t len; #ifdef CONFIG_CTRL_IFACE_NAMED_PIPE /* * QSocketNotifier cannot be used with Windows named pipes, so use a * timer to check for received messages for now. This could be * optimized be doing something specific to named pipes or Windows * events, but it is not clear what would be the best way of doing that * in Qt. */ receiveMsgs(); #endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ if (scanres && !scanres->isVisible()) { delete scanres; scanres = NULL; } if (eh && !eh->isVisible()) { delete eh; eh = NULL; } if (udr && !udr->isVisible()) { delete udr; udr = NULL; } len = sizeof(buf) - 1; if (ctrlRequest("PING", buf, &len) < 0) { printf("PING failed - trying to reconnect\n"); if (openCtrlConnection(ctrl_iface) >= 0) { printf("Reconnected successfully\n"); pingsToStatusUpdate = 0; } } pingsToStatusUpdate--; if (pingsToStatusUpdate <= 0) { updateStatus(); updateNetworks(); } #ifndef CONFIG_CTRL_IFACE_NAMED_PIPE /* Use less frequent pings and status updates when the main window is * hidden (running in taskbar). */ int interval = isHidden() ? 5000 : 1000; if (timer->interval() != interval) timer->setInterval(interval); #endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ }
void WpaGui::wpsApPin() { char reply[20]; size_t reply_len = sizeof(reply); QString cmd("WPS_REG " + bssFromScan + " " + wpsApPinEdit->text()); if (ctrlRequest(cmd.toAscii().constData(), reply, &reply_len) < 0) return; wpsStatusText->setText(tr("Waiting for AP/Enrollee")); wpsRunning = true; }
void WpaGui::selectNetwork( const QString &sel ) { QString cmd(sel); char reply[10]; size_t reply_len = sizeof(reply); int pos = cmd.find(':'); if (pos < 0) { printf("Invalid selectNetwork '%s'\n", cmd.ascii()); return; } cmd.truncate(pos); cmd.prepend("SELECT_NETWORK "); ctrlRequest(cmd.ascii(), reply, &reply_len); }
void WpaGui::selectNetwork( const QString &sel ) { QString cmd(sel); char reply[10]; size_t reply_len = sizeof(reply); if (cmd.contains(QRegExp("^\\d+:"))) cmd.truncate(cmd.indexOf(':')); else cmd = "any"; cmd.prepend("SELECT_NETWORK "); ctrlRequest(cmd.toAscii().constData(), reply, &reply_len); triggerUpdate(); stopWpsRun(false); }
void WpaGui::enableNetwork(const QString &sel) { QString cmd(sel); char reply[10]; size_t reply_len = sizeof(reply); if (cmd.contains(QRegExp("^\\d+:"))) cmd.truncate(cmd.indexOf(':')); else if (!cmd.startsWith("all")) { printf("Invalid editNetwork '%s'\n", cmd.toAscii().constData()); return; } cmd.prepend("ENABLE_NETWORK "); ctrlRequest(cmd.toAscii().constData(), reply, &reply_len); triggerUpdate(); }
void WpaGui::wpsGeneratePin() { char reply[20]; size_t reply_len = sizeof(reply) - 1; if (ctrlRequest("WPS_PIN any", reply, &reply_len) < 0) return; reply[reply_len] = '\0'; wpsPinEdit->setText(reply); wpsPinEdit->setEnabled(true); wpsInstructions->setText(tr("Enter the generated PIN into the Registrar " "(either the internal one in the AP or an " "external one).")); wpsStatusText->setText(tr("Waiting for Registrar")); wpsRunning = true; }
void WpaGui::showTrayStatus() { char buf[2048]; size_t len; len = sizeof(buf) - 1; if (ctrlRequest("STATUS", buf, &len) < 0) return; buf[len] = '\0'; QString msg, status(buf); QStringList lines = status.split(QRegExp("\\n")); for (QStringList::Iterator it = lines.begin(); it != lines.end(); it++) { int pos = (*it).indexOf('=') + 1; if (pos < 1) continue; if ((*it).startsWith("bssid=")) msg.append("BSSID:\t" + (*it).mid(pos) + "\n"); else if ((*it).startsWith("ssid=")) msg.append("SSID: \t" + (*it).mid(pos) + "\n"); else if ((*it).startsWith("pairwise_cipher=")) msg.append("PAIR: \t" + (*it).mid(pos) + "\n"); else if ((*it).startsWith("group_cipher=")) msg.append("GROUP:\t" + (*it).mid(pos) + "\n"); else if ((*it).startsWith("key_mgmt=")) msg.append("AUTH: \t" + (*it).mid(pos) + "\n"); else if ((*it).startsWith("wpa_state=")) msg.append("STATE:\t" + (*it).mid(pos) + "\n"); else if ((*it).startsWith("ip_address=")) msg.append("IP: \t" + (*it).mid(pos) + "\n"); else if ((*it).startsWith("Supplicant PAE state=")) msg.append("PAE: \t" + (*it).mid(pos) + "\n"); else if ((*it).startsWith("EAP state=")) msg.append("EAP: \t" + (*it).mid(pos) + "\n"); } if (!msg.isEmpty()) showTrayMessage(QSystemTrayIcon::Information, 10, msg); }
void WpaGui::wpsPbc() { char reply[20]; size_t reply_len = sizeof(reply); if (ctrlRequest("WPS_PBC", reply, &reply_len) < 0) return; wpsPinEdit->setEnabled(false); if (wpsStatusText->text().compare(tr("WPS AP in active PBC mode found"))) { wpsInstructions->setText(tr("Press the push button on the AP to " "start the PBC mode.")); } else { wpsInstructions->setText(tr("If you have not yet done so, press " "the push button on the AP to start " "the PBC mode.")); } wpsStatusText->setText(tr("Waiting for Registrar")); wpsRunning = true; }
int WpaGui::getNetworkDisabled(const QString &sel) { QString cmd(sel); char reply[10]; size_t reply_len = sizeof(reply) - 1; int pos = cmd.indexOf(':'); if (pos < 0) { printf("Invalid getNetworkDisabled '%s'\n", cmd.toAscii().constData()); return -1; } cmd.truncate(pos); cmd.prepend("GET_NETWORK "); cmd.append(" disabled"); if (ctrlRequest(cmd.toAscii().constData(), reply, &reply_len) >= 0 && reply_len >= 1) { reply[reply_len] = '\0'; if (!str_match(reply, "FAIL")) return atoi(reply); } return -1; }
void WpaGui::saveConfig() { char buf[10]; size_t len; len = sizeof(buf) - 1; ctrlRequest("SAVE_CONFIG", buf, &len); buf[len] = '\0'; if (str_match(buf, "FAIL")) QMessageBox::warning( this, tr("Failed to save configuration"), tr("The configuration could not be saved.\n" "\n" "The update_config=1 configuration option\n" "must be used for configuration saving to\n" "be permitted.\n")); else QMessageBox::information( this, tr("Saved configuration"), tr("The current configuration was saved." "\n")); }
void WpaGui::connectB() { char reply[10]; size_t reply_len = sizeof(reply); ctrlRequest("REASSOCIATE", reply, &reply_len); }
void WpaGui::updateNetworks() { char buf[2048], *start, *end, *id, *ssid, *bssid, *flags; size_t len; int first_active = -1; bool selected = false; if (!networkMayHaveChanged) return; networkSelect->clear(); if (ctrl_conn == NULL) return; len = sizeof(buf) - 1; if (ctrlRequest("LIST_NETWORKS", buf, &len) < 0) return; buf[len] = '\0'; start = strchr(buf, '\n'); if (start == NULL) return; start++; while (*start) { bool last = false; end = strchr(start, '\n'); if (end == NULL) { last = true; end = start; while (end[0] && end[1]) end++; } *end = '\0'; id = start; ssid = strchr(id, '\t'); if (ssid == NULL) break; *ssid++ = '\0'; bssid = strchr(ssid, '\t'); if (bssid == NULL) break; *bssid++ = '\0'; flags = strchr(bssid, '\t'); if (flags == NULL) break; *flags++ = '\0'; QString network(id); network.append(": "); network.append(ssid); networkSelect->insertItem(network); if (strstr(flags, "[CURRENT]")) { networkSelect->setCurrentItem(networkSelect->count() - 1); selected = true; } else if (first_active < 0 && strstr(flags, "[DISABLED]") == NULL) first_active = networkSelect->count() - 1; if (last) break; start = end + 1; } if (!selected && first_active >= 0) networkSelect->setCurrentItem(first_active); networkMayHaveChanged = false; }
void WpaGui::updateStatus() { char buf[2048], *start, *end, *pos; size_t len; pingsToStatusUpdate = 10; len = sizeof(buf) - 1; if (ctrl_conn == NULL || ctrlRequest("STATUS", buf, &len) < 0) { textStatus->setText("Could not get status from " "wpa_supplicant"); textAuthentication->clear(); textEncryption->clear(); textSsid->clear(); textBssid->clear(); textIpAddress->clear(); return; } buf[len] = '\0'; bool auth_updated = false, ssid_updated = false; bool bssid_updated = false, ipaddr_updated = false; bool status_updated = false; char *pairwise_cipher = NULL, *group_cipher = NULL; start = buf; while (*start) { bool last = false; end = strchr(start, '\n'); if (end == NULL) { last = true; end = start; while (end[0] && end[1]) end++; } *end = '\0'; pos = strchr(start, '='); if (pos) { *pos++ = '\0'; if (strcmp(start, "bssid") == 0) { bssid_updated = true; textBssid->setText(pos); } else if (strcmp(start, "ssid") == 0) { ssid_updated = true; textSsid->setText(pos); } else if (strcmp(start, "ip_address") == 0) { ipaddr_updated = true; textIpAddress->setText(pos); } else if (strcmp(start, "wpa_state") == 0) { status_updated = true; textStatus->setText(pos); } else if (strcmp(start, "key_mgmt") == 0) { auth_updated = true; textAuthentication->setText(pos); /* TODO: could add EAP status to this */ } else if (strcmp(start, "pairwise_cipher") == 0) { pairwise_cipher = pos; } else if (strcmp(start, "group_cipher") == 0) { group_cipher = pos; } } if (last) break; start = end + 1; } if (pairwise_cipher || group_cipher) { QString encr; if (pairwise_cipher && group_cipher && strcmp(pairwise_cipher, group_cipher) != 0) { encr.append(pairwise_cipher); encr.append(" + "); encr.append(group_cipher); } else if (pairwise_cipher) { encr.append(pairwise_cipher); } else if (group_cipher) { encr.append(group_cipher); encr.append(" [group key only]"); } else { encr.append("?"); } textEncryption->setText(encr); } else textEncryption->clear(); if (!status_updated) textStatus->clear(); if (!auth_updated) textAuthentication->clear(); if (!ssid_updated) textSsid->clear(); if (!bssid_updated) textBssid->clear(); if (!ipaddr_updated) textIpAddress->clear(); }
void WpaGui::updateNetworks() { char buf[2048], *start, *end, *id, *ssid, *bssid, *flags; size_t len; int first_active = -1; int was_selected = -1; bool current = false; if (!networkMayHaveChanged) return; if (networkList->currentRow() >= 0) was_selected = networkList->currentRow(); networkSelect->clear(); networkList->clear(); if (ctrl_conn == NULL) return; len = sizeof(buf) - 1; if (ctrlRequest("LIST_NETWORKS", buf, &len) < 0) return; buf[len] = '\0'; start = strchr(buf, '\n'); if (start == NULL) return; start++; while (*start) { bool last = false; end = strchr(start, '\n'); if (end == NULL) { last = true; end = start; while (end[0] && end[1]) end++; } *end = '\0'; id = start; ssid = strchr(id, '\t'); if (ssid == NULL) break; *ssid++ = '\0'; bssid = strchr(ssid, '\t'); if (bssid == NULL) break; *bssid++ = '\0'; flags = strchr(bssid, '\t'); if (flags == NULL) break; *flags++ = '\0'; if (strstr(flags, "[DISABLED][P2P-PERSISTENT]")) { if (last) break; start = end + 1; continue; } QString network(id); network.append(": "); network.append(ssid); networkSelect->addItem(network); networkList->addItem(network); if (strstr(flags, "[CURRENT]")) { networkSelect->setCurrentIndex(networkSelect->count() - 1); current = true; } else if (first_active < 0 && strstr(flags, "[DISABLED]") == NULL) first_active = networkSelect->count() - 1; if (last) break; start = end + 1; } if (networkSelect->count() > 1) networkSelect->addItem(tr("Select any network")); if (!current && first_active >= 0) networkSelect->setCurrentIndex(first_active); if (was_selected >= 0 && networkList->count() > 0) { if (was_selected < networkList->count()) networkList->setCurrentRow(was_selected); else networkList->setCurrentRow(networkList->count() - 1); } else networkList->setCurrentRow(networkSelect->currentIndex()); networkMayHaveChanged = false; }
void WpaGui::updateStatus() { char buf[2048], *start, *end, *pos; size_t len; pingsToStatusUpdate = 10; len = sizeof(buf) - 1; if (ctrl_conn == NULL || ctrlRequest("STATUS", buf, &len) < 0) { textStatus->setText(tr("Could not get status from " "wpa_supplicant")); textAuthentication->clear(); textEncryption->clear(); textSsid->clear(); textBssid->clear(); textIpAddress->clear(); #ifdef CONFIG_NATIVE_WINDOWS static bool first = true; if (first && connectedToService && (ctrl_iface == NULL || *ctrl_iface == '\0')) { first = false; if (QMessageBox::information( this, qAppName(), tr("No network interfaces in use.\n" "Would you like to add one?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) addInterface(); } #endif /* CONFIG_NATIVE_WINDOWS */ return; } buf[len] = '\0'; bool auth_updated = false, ssid_updated = false; bool bssid_updated = false, ipaddr_updated = false; bool status_updated = false; char *pairwise_cipher = NULL, *group_cipher = NULL; char *mode = NULL; start = buf; while (*start) { bool last = false; end = strchr(start, '\n'); if (end == NULL) { last = true; end = start; while (end[0] && end[1]) end++; } *end = '\0'; pos = strchr(start, '='); if (pos) { *pos++ = '\0'; if (strcmp(start, "bssid") == 0) { bssid_updated = true; textBssid->setText(pos); } else if (strcmp(start, "ssid") == 0) { ssid_updated = true; textSsid->setText(pos); } else if (strcmp(start, "ip_address") == 0) { ipaddr_updated = true; textIpAddress->setText(pos); } else if (strcmp(start, "wpa_state") == 0) { status_updated = true; textStatus->setText(wpaStateTranslate(pos)); } else if (strcmp(start, "key_mgmt") == 0) { auth_updated = true; textAuthentication->setText(pos); /* TODO: could add EAP status to this */ } else if (strcmp(start, "pairwise_cipher") == 0) { pairwise_cipher = pos; } else if (strcmp(start, "group_cipher") == 0) { group_cipher = pos; } else if (strcmp(start, "mode") == 0) { mode = pos; } } if (last) break; start = end + 1; } if (status_updated && mode) textStatus->setText(textStatus->text() + " (" + mode + ")"); if (pairwise_cipher || group_cipher) { QString encr; if (pairwise_cipher && group_cipher && strcmp(pairwise_cipher, group_cipher) != 0) { encr.append(pairwise_cipher); encr.append(" + "); encr.append(group_cipher); } else if (pairwise_cipher) { encr.append(pairwise_cipher); } else { encr.append(group_cipher); encr.append(" [group key only]"); } textEncryption->setText(encr); } else textEncryption->clear(); if (!status_updated) textStatus->clear(); if (!auth_updated) textAuthentication->clear(); if (!ssid_updated) textSsid->clear(); if (!bssid_updated) textBssid->clear(); if (!ipaddr_updated) textIpAddress->clear(); }