summaryrefslogtreecommitdiff
path: root/noncore/net/networksetup/wlan/wlanmodule.cpp
authorbenmeyer <benmeyer>2002-10-18 17:36:19 (UTC)
committer benmeyer <benmeyer>2002-10-18 17:36:19 (UTC)
commitaddfc9900cbf3da2cdbfa54ea849bc7f7fb1b296 (patch) (unidiff)
tree76b57ebf419e13f23e36d62978386072080c1927 /noncore/net/networksetup/wlan/wlanmodule.cpp
parent0f230c7120d49a1718fe3e442e1559968a21f00d (diff)
downloadopie-addfc9900cbf3da2cdbfa54ea849bc7f7fb1b296.zip
opie-addfc9900cbf3da2cdbfa54ea849bc7f7fb1b296.tar.gz
opie-addfc9900cbf3da2cdbfa54ea849bc7f7fb1b296.tar.bz2
added wlan info, very basic, needs to be cleaned
Diffstat (limited to 'noncore/net/networksetup/wlan/wlanmodule.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/networksetup/wlan/wlanmodule.cpp139
1 files changed, 135 insertions, 4 deletions
diff --git a/noncore/net/networksetup/wlan/wlanmodule.cpp b/noncore/net/networksetup/wlan/wlanmodule.cpp
index 53b5857..8d25d99 100644
--- a/noncore/net/networksetup/wlan/wlanmodule.cpp
+++ b/noncore/net/networksetup/wlan/wlanmodule.cpp
@@ -1,6 +1,25 @@
1#include "wlanmodule.h" 1#include "wlanmodule.h"
2#include <qpe/config.h> 2#include <qpe/config.h>
3#include "wlanimp.h" 3#include "wlanimp.h"
4#include "info.h"
5
6
7#include <arpa/inet.h>
8#include <sys/socket.h>
9#include <linux/if_ether.h>
10#include <netinet/ip.h>
11#include <sys/ioctl.h>
12#include <linux/wireless.h>
13
14#include <unistd.h>
15#include <math.h>
16#include <errno.h>
17#include <string.h>
18#include <stdio.h>
19
20#include <stdlib.h>
21
22#include <qlabel.h>
4 23
5/** 24/**
6 * Constructor, find all of the possible interfaces 25 * Constructor, find all of the possible interfaces
@@ -43,8 +62,8 @@ bool WLANModule::isOwner(Interface *i){
43 * @param tabWidget a pointer to the tab widget that this configure has. 62 * @param tabWidget a pointer to the tab widget that this configure has.
44 * @return QWidget* pointer to the tab widget in this modules configure. 63 * @return QWidget* pointer to the tab widget in this modules configure.
45 */ 64 */
46QWidget *WLANModule::configure(QTabWidget **tabWidget){ 65QWidget *WLANModule::configure(Interface *i, QTabWidget **tabWidget){
47 Config *cfg = new Config("wireless"); 66 Config *cfg = new Config("wireless config");
48 WLANImp *wlanconfig = new WLANImp(*cfg); 67 WLANImp *wlanconfig = new WLANImp(*cfg);
49 (*tabWidget) = wlanconfig->tabWidget; 68 (*tabWidget) = wlanconfig->tabWidget;
50 return wlanconfig; 69 return wlanconfig;
@@ -55,8 +74,120 @@ QWidget *WLANModule::configure(QTabWidget **tabWidget){
55 * @param tabWidget a pointer to the tab widget that this information has. 74 * @param tabWidget a pointer to the tab widget that this information has.
56 * @return QWidget* pointer to the tab widget in this modules info. 75 * @return QWidget* pointer to the tab widget in this modules info.
57 */ 76 */
58QWidget *WLANModule::information(QTabWidget **tabWidget){ 77QWidget *WLANModule::information(Interface *i, QTabWidget **tabWidget){
59 return NULL; 78 WlanInfo *info = new WlanInfo(0, "wireless info");
79 (*tabWidget) = info->tabWidget;
80
81 struct ifreq ifr;
82 struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr;
83 int fd = socket( AF_INET, SOCK_DGRAM, 0 );
84
85 const char* buffer[200];
86 struct iwreq iwr;
87 memset( &iwr, 0, sizeof( iwr ) );
88 iwr.u.essid.pointer = (caddr_t) buffer;
89 iwr.u.essid.length = IW_ESSID_MAX_SIZE;
90 iwr.u.essid.flags = 0;
91
92 // check if it is an IEEE 802.11 standard conform
93 // wireless device by sending SIOCGIWESSID
94 // which also gives back the Extended Service Set ID
95 // (see IEEE 802.11 for more information)
96
97 QString n = (i->getInterfaceName());
98 const char* iname = n.latin1();
99 strcpy( iwr.ifr_ifrn.ifrn_name, (const char *)iname );
100 int result = ioctl( fd, SIOCGIWESSID, &iwr );
101 if ( result == 0 ){
102 //hasWirelessExtensions = true;
103 iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length-1] = '\0';
104 info->essidLabel->setText(QString(iwr.u.essid.pointer));
105 }
106 else
107 return info;
108 //info->essidLabel->setText("*** Unknown ***");
109
110 // Address of associated access-point
111 result = ioctl( fd, SIOCGIWAP, &iwr );
112 if ( result == 0 ){
113 QString foo = foo.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
114 iwr.u.ap_addr.sa_data[0]&0xff,
115 iwr.u.ap_addr.sa_data[1]&0xff,
116 iwr.u.ap_addr.sa_data[2]&0xff,
117 iwr.u.ap_addr.sa_data[3]&0xff,
118 iwr.u.ap_addr.sa_data[4]&0xff,
119 iwr.u.ap_addr.sa_data[5]&0xff );
120 info->apLabel->setText(foo);
121 }
122 else info->apLabel->setText("*** Unknown ***");
123
124 iwr.u.data.pointer = (caddr_t) buffer;
125 iwr.u.data.length = IW_ESSID_MAX_SIZE;
126 iwr.u.data.flags = 0;
127 result = ioctl( fd, SIOCGIWNICKN, &iwr );
128 if ( result == 0 ){
129 iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0';
130 info->stationLabel->setText(iwr.u.data.pointer);
131 }
132 else info->stationLabel->setText("*** Unknown ***");
133
134 result = ioctl( fd, SIOCGIWMODE, &iwr );
135 if ( result == 0 )
136 info->modeLabel->setText( QString("%1").arg(iwr.u.mode == IW_MODE_ADHOC ? "Ad-Hoc" : "Managed"));
137 else
138 info->modeLabel->setText("*** Unknown ***");
139
140 result = ioctl( fd, SIOCGIWFREQ, &iwr );
141 if ( result == 0 )
142 info->freqLabel->setText(QString("%1").arg((double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000)));
143 else
144 info->freqLabel->setText("0");
145
146 /*
147 // gather link quality from /proc/net/wireless
148
149 char c;
150 QString status;
151 QString name;
152 QFile wfile( PROCNETWIRELESS );
153 bool hasFile = wfile.open( IO_ReadOnly );
154 QTextStream wstream( &wfile );
155 if ( hasFile )
156 {
157 wstream.readLine(); // skip the first two lines
158 wstream.readLine(); // because they only contain headers
159 }
160 if ( ( !hasFile ) || ( wstream.atEnd() ) )
161 {
162#ifdef MDEBUG
163 qDebug( "WIFIAPPLET: D'oh! Someone removed the card..." );
164#endif
165 quality = -1;
166 signal = IW_LOWER;
167 noise = IW_LOWER;
168 return false;
169 }
170
171 wstream >> name >> status >> quality >> c >> signal >> c >> noise;
172
173 if ( quality > 92 )
174#ifdef MDEBUG
175 qDebug( "WIFIAPPLET: D'oh! Quality %d > estimated max!\n", quality );
176#endif
177 if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) )
178#ifdef MDEBUG
179 qDebug( "WIFIAPPLET: Doh! Strength %d > estimated max!\n", signal );
180#endif
181 if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) )
182#ifdef MDEBUG
183 qDebug( "WIFIAPPLET: Doh! Noise %d > estimated max!\n", noise );
184#endif
185
186 return true;
187
188}
189*/
190 return info;
60} 191}
61 192
62/** 193/**