1/* 2 * wpa_gui - ScanResults class 3 * Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation. 8 * 9 * Alternatively, this software may be distributed under the terms of BSD 10 * license. 11 * 12 * See README and COPYING for more details. 13 */ 14 15#include <QTimer> 16 17#include <cstdio> 18 19#include "scanresults.h" 20#include "wpagui.h" 21#include "networkconfig.h" 22 23 24ScanResults::ScanResults(QWidget *parent, const char *, bool, Qt::WFlags) 25 : QDialog(parent) 26{ 27 setupUi(this); 28 29 connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); 30 connect(scanButton, SIGNAL(clicked()), this, SLOT(scanRequest())); 31 connect(scanResultsView, SIGNAL(doubleClicked(Q3ListViewItem *)), this, 32 SLOT(bssSelected(Q3ListViewItem *))); 33 34 wpagui = NULL; 35} 36 37 38ScanResults::~ScanResults() 39{ 40 delete timer; 41} 42 43 44void ScanResults::languageChange() 45{ 46 retranslateUi(this); 47} 48 49 50void ScanResults::setWpaGui(WpaGui *_wpagui) 51{ 52 wpagui = _wpagui; 53 updateResults(); 54 55 timer = new QTimer(this); 56 connect(timer, SIGNAL(timeout()), SLOT(getResults())); 57 timer->start(10000, FALSE); 58} 59 60 61void ScanResults::updateResults() 62{ 63 char reply[8192]; 64 size_t reply_len; 65 66 if (wpagui == NULL) 67 return; 68 69 reply_len = sizeof(reply) - 1; 70 if (wpagui->ctrlRequest("SCAN_RESULTS", reply, &reply_len) < 0) 71 return; 72 reply[reply_len] = '\0'; 73 74 scanResultsView->clear(); 75 76 QString res(reply); 77 QStringList lines = QStringList::split(QChar('\n'), res); 78 bool first = true; 79 for (QStringList::Iterator it = lines.begin(); it != lines.end(); it++) 80 { 81 if (first) { 82 first = false; 83 continue; 84 } 85 86 QStringList cols = QStringList::split(QChar('\t'), *it, true); 87 QString ssid, bssid, freq, signal, flags; 88 bssid = cols.count() > 0 ? cols[0] : ""; 89 freq = cols.count() > 1 ? cols[1] : ""; 90 signal = cols.count() > 2 ? cols[2] : ""; 91 flags = cols.count() > 3 ? cols[3] : ""; 92 ssid = cols.count() > 4 ? cols[4] : ""; 93 new Q3ListViewItem(scanResultsView, ssid, bssid, freq, signal, 94 flags); 95 } 96} 97 98 99void ScanResults::scanRequest() 100{ 101 char reply[10]; 102 size_t reply_len = sizeof(reply); 103 104 if (wpagui == NULL) 105 return; 106 107 wpagui->ctrlRequest("SCAN", reply, &reply_len); 108} 109 110 111void ScanResults::getResults() 112{ 113 updateResults(); 114} 115 116 117void ScanResults::bssSelected( Q3ListViewItem * sel ) 118{ 119 NetworkConfig *nc = new NetworkConfig(); 120 if (nc == NULL) 121 return; 122 nc->setWpaGui(wpagui); 123 nc->paramsFromScanResults(sel); 124 nc->show(); 125 nc->exec(); 126} 127