Home | History | Annotate | Download | only in wpa_gui-qt4
      1 /*
      2  * wpa_gui - ScanResults class
      3  * Copyright (c) 2005-2006, Jouni Malinen <j (at) 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 <cstdio>
     16 
     17 #include "scanresults.h"
     18 #include "wpagui.h"
     19 #include "networkconfig.h"
     20 
     21 
     22 ScanResults::ScanResults(QWidget *parent, const char *, bool, Qt::WFlags)
     23 	: QDialog(parent)
     24 {
     25 	setupUi(this);
     26 
     27 	connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
     28 	connect(scanButton, SIGNAL(clicked()), this, SLOT(scanRequest()));
     29 	connect(scanResultsWidget,
     30 		SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this,
     31 		SLOT(bssSelected(QTreeWidgetItem *)));
     32 
     33 	wpagui = NULL;
     34 	scanResultsWidget->setItemsExpandable(FALSE);
     35 	scanResultsWidget->setRootIsDecorated(FALSE);
     36 }
     37 
     38 
     39 ScanResults::~ScanResults()
     40 {
     41 }
     42 
     43 
     44 void ScanResults::languageChange()
     45 {
     46 	retranslateUi(this);
     47 }
     48 
     49 
     50 void ScanResults::setWpaGui(WpaGui *_wpagui)
     51 {
     52 	wpagui = _wpagui;
     53 	updateResults();
     54 }
     55 
     56 
     57 void ScanResults::updateResults()
     58 {
     59 	char reply[2048];
     60 	size_t reply_len;
     61 	int index;
     62 	char cmd[20];
     63 
     64 	scanResultsWidget->clear();
     65 
     66 	index = 0;
     67 	while (wpagui) {
     68 		snprintf(cmd, sizeof(cmd), "BSS %d", index++);
     69 		if (index > 1000)
     70 			break;
     71 
     72 		reply_len = sizeof(reply) - 1;
     73 		if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0)
     74 			break;
     75 		reply[reply_len] = '\0';
     76 
     77 		QString bss(reply);
     78 		if (bss.isEmpty() || bss.startsWith("FAIL"))
     79 			break;
     80 
     81 		QString ssid, bssid, freq, signal, flags;
     82 
     83 		QStringList lines = bss.split(QRegExp("\\n"));
     84 		for (QStringList::Iterator it = lines.begin();
     85 		     it != lines.end(); it++) {
     86 			int pos = (*it).indexOf('=') + 1;
     87 			if (pos < 1)
     88 				continue;
     89 
     90 			if ((*it).startsWith("bssid="))
     91 				bssid = (*it).mid(pos);
     92 			else if ((*it).startsWith("freq="))
     93 				freq = (*it).mid(pos);
     94 			else if ((*it).startsWith("qual="))
     95 				signal = (*it).mid(pos);
     96 			else if ((*it).startsWith("flags="))
     97 				flags = (*it).mid(pos);
     98 			else if ((*it).startsWith("ssid="))
     99 				ssid = (*it).mid(pos);
    100 		}
    101 
    102 		QTreeWidgetItem *item = new QTreeWidgetItem(scanResultsWidget);
    103 		if (item) {
    104 			item->setText(0, ssid);
    105 			item->setText(1, bssid);
    106 			item->setText(2, freq);
    107 			item->setText(3, signal);
    108 			item->setText(4, flags);
    109 		}
    110 
    111 		if (bssid.isEmpty())
    112 			break;
    113 	}
    114 }
    115 
    116 
    117 void ScanResults::scanRequest()
    118 {
    119 	char reply[10];
    120 	size_t reply_len = sizeof(reply);
    121 
    122 	if (wpagui == NULL)
    123 		return;
    124 
    125 	wpagui->ctrlRequest("SCAN", reply, &reply_len);
    126 }
    127 
    128 
    129 void ScanResults::getResults()
    130 {
    131 	updateResults();
    132 }
    133 
    134 
    135 void ScanResults::bssSelected(QTreeWidgetItem *sel)
    136 {
    137 	NetworkConfig *nc = new NetworkConfig();
    138 	if (nc == NULL)
    139 		return;
    140 	nc->setWpaGui(wpagui);
    141 	nc->paramsFromScanResults(sel);
    142 	nc->show();
    143 	nc->exec();
    144 }
    145