summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2002-08-14 23:55:37 (UTC)
committer mickeyl <mickeyl>2002-08-14 23:55:37 (UTC)
commitf4fb50020242275a11f4b185ff843517e0862f9b (patch) (side-by-side diff)
tree92a0fb73206a86faea9604edcc7666b968512389
parent8951b45cfd2c0063e66d947346535f1af319d2a9 (diff)
downloadopie-f4fb50020242275a11f4b185ff843517e0862f9b.zip
opie-f4fb50020242275a11f4b185ff843517e0862f9b.tar.gz
opie-f4fb50020242275a11f4b185ff843517e0862f9b.tar.bz2
Fixed damn bug causing wirelessapplet to hang Opie if /proc/net/wireless is not found (i.e. SHARP ROM or Desktop PC)
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/applets/wirelessapplet/networkinfo.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/noncore/applets/wirelessapplet/networkinfo.cpp b/noncore/applets/wirelessapplet/networkinfo.cpp
index dc5c3be..22d7d83 100644
--- a/noncore/applets/wirelessapplet/networkinfo.cpp
+++ b/noncore/applets/wirelessapplet/networkinfo.cpp
@@ -79,189 +79,193 @@ void MNetworkInterface::updateStatistics()
MWirelessNetworkInterface::MWirelessNetworkInterface( const char* n )
:MNetworkInterface( n )
{
signal = 0;
noise = 0;
quality = 0;
}
MWirelessNetworkInterface::~MWirelessNetworkInterface()
{
}
int MWirelessNetworkInterface::qualityPercent()
{
return ( quality*100 ) / 92;
}
int MWirelessNetworkInterface::signalPercent()
{
return ( ( signal-IW_LOWER ) * 100 ) / IW_UPPER;
}
int MWirelessNetworkInterface::noisePercent()
{
return ( ( noise-IW_LOWER ) * 100 ) / IW_UPPER;
}
void MWirelessNetworkInterface::updateStatistics()
{
MNetworkInterface::updateStatistics();
const char* buffer[200];
struct iwreq iwr;
memset( &iwr, 0, sizeof( iwr ) );
iwr.u.essid.pointer = (caddr_t) buffer;
iwr.u.essid.length = IW_ESSID_MAX_SIZE;
iwr.u.essid.flags = 0;
// check if it is an IEEE 802.11 standard conform
// wireless device by sending SIOCGIWESSID
// which also gives back the Extended Service Set ID
// (see IEEE 802.11 for more information)
strcpy( iwr.ifr_ifrn.ifrn_name, (const char*) name );
int result = ioctl( fd, SIOCGIWESSID, &iwr );
if ( result == 0 )
{
hasWirelessExtensions = true;
iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length-1] = '\0';
essid = iwr.u.essid.pointer;
}
else essid = "*** Unknown ***";
// Address of associated access-point
result = ioctl( fd, SIOCGIWAP, &iwr );
if ( result == 0 )
{
APAddr.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
iwr.u.ap_addr.sa_data[0]&0xff,
iwr.u.ap_addr.sa_data[1]&0xff,
iwr.u.ap_addr.sa_data[2]&0xff,
iwr.u.ap_addr.sa_data[3]&0xff,
iwr.u.ap_addr.sa_data[4]&0xff,
iwr.u.ap_addr.sa_data[5]&0xff );
} else APAddr = "*** Unknown ***";
iwr.u.data.pointer = (caddr_t) buffer;
iwr.u.data.length = IW_ESSID_MAX_SIZE;
iwr.u.data.flags = 0;
result = ioctl( fd, SIOCGIWNICKN, &iwr );
if ( result == 0 )
{
iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0';
nick = iwr.u.data.pointer;
} else nick = "*** Unknown ***";
result = ioctl( fd, SIOCGIWMODE, &iwr );
if ( result == 0 )
mode = ( iwr.u.mode == IW_MODE_ADHOC ) ? "Ad-Hoc" : "Managed";
else mode = "*** Unknown ***";
result = ioctl( fd, SIOCGIWFREQ, &iwr );
if ( result == 0 )
freq = double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000;
else freq = 0;
// gather link quality from /proc/net/wireless
char c;
QString status;
QString name;
QFile wfile( PROCNETWIRELESS );
- wfile.open( IO_ReadOnly );
+ bool hasFile = wfile.open( IO_ReadOnly );
QTextStream wstream( &wfile );
+ if ( hasFile )
+ {
wstream.readLine(); // skip the first two lines
wstream.readLine(); // because they only contain headers
-
- if ( wstream.atEnd() )
+ }
+ if ( ( !hasFile ) || ( wstream.atEnd() ) )
{
qDebug( "WIFIAPPLET: D'oh! Someone removed the card..." );
quality = -1;
signal = IW_LOWER;
noise = IW_LOWER;
return;
}
wstream >> name >> status >> quality >> c >> signal >> c >> noise;
if ( quality > 92 )
qDebug( "WIFIAPPLET: D'oh! Quality %d > estimated max!\n", quality );
if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) )
qDebug( "WIFIAPPLET: Doh! Strength %d > estimated max!\n", signal );
if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) )
qDebug( "WIFIAPPLET: Doh! Noise %d > estimated max!\n", noise );
}
//---------------------------------------------------------------------------
// class Network
//
MNetwork::MNetwork()
{
- qDebug( "MNetwork::MNetwork()" );
- procfile = "/proc/net/dev";
+ //qDebug( "MNetwork::MNetwork()" );
+ procfile = PROCNETDEV;
}
MNetwork::~MNetwork()
{
- qDebug( "MNetwork::~MNetwork()" );
+ //qDebug( "MNetwork::~MNetwork()" );
}
//---------------------------------------------------------------------------
// class WirelessNetwork
//
MWirelessNetwork::MWirelessNetwork()
{
- qDebug( "MWirelessNetwork::MWirelessNetwork()" );
- procfile = "/proc/net/wireless";
+ //qDebug( "MWirelessNetwork::MWirelessNetwork()" );
+ procfile = PROCNETWIRELESS;
}
MWirelessNetwork::~MWirelessNetwork()
{
- qDebug( "MWirelessNetwork::~MWirelessNetwork()" );
+ //qDebug( "MWirelessNetwork::~MWirelessNetwork()" );
}
MNetworkInterface* MWirelessNetwork::createInterface( const char* n ) const
{
return new MWirelessNetworkInterface( n );
}
//---------------------------------------------------------------------------
// class NetworkInterface
//
MNetworkInterface* MNetwork::getFirstInterface()
{
enumerateInterfaces();
InterfaceMapIterator it( interfaces );
return ( it.count() > 0 ) ? it.toFirst() : 0;
}
void MNetwork::enumerateInterfaces()
{
interfaces.clear();
QString str;
QFile f( procfile );
- f.open( IO_ReadOnly );
+ bool hasFile = f.open( IO_ReadOnly );
+ if ( !hasFile )
+ return;
QTextStream s( &f );
s.readLine();
s.readLine();
while ( !s.atEnd() )
{
s >> str;
str.truncate( str.find( ':' ) );
qDebug( "WIFIAPPLET: found interface '%s'", (const char*) str );
interfaces.insert( str, createInterface( str ) );
s.readLine();
}
}
MNetworkInterface* MNetwork::createInterface( const char* n ) const
{
return new MNetworkInterface( n );
}