author | mickeyl <mickeyl> | 2002-08-14 23:55:37 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2002-08-14 23:55:37 (UTC) |
commit | f4fb50020242275a11f4b185ff843517e0862f9b (patch) (side-by-side diff) | |
tree | 92a0fb73206a86faea9604edcc7666b968512389 | |
parent | 8951b45cfd2c0063e66d947346535f1af319d2a9 (diff) | |
download | opie-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)
-rw-r--r-- | noncore/applets/wirelessapplet/networkinfo.cpp | 24 |
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 ); } |