summaryrefslogtreecommitdiffstats
path: root/wifi/kcmwifi/wificonfig.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'wifi/kcmwifi/wificonfig.cpp')
-rw-r--r--wifi/kcmwifi/wificonfig.cpp369
1 files changed, 369 insertions, 0 deletions
diff --git a/wifi/kcmwifi/wificonfig.cpp b/wifi/kcmwifi/wificonfig.cpp
new file mode 100644
index 00000000..c5bafba3
--- /dev/null
+++ b/wifi/kcmwifi/wificonfig.cpp
@@ -0,0 +1,369 @@
+/*
+ Copyright (C) 2004 Nadeem Hasan <[email protected]>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this library; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <qfile.h>
+
+#include <ksimpleconfig.h>
+#include <kglobal.h>
+#include <kdebug.h>
+#include <kprocio.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+
+#include "wificonfig.h"
+
+static QStringList speedList;
+static QStringList wifiModeList;
+static QStringList cryptoModeList;
+static QStringList powerModeList;
+
+Key::Key()
+{
+}
+
+Key::Key( const QString &key )
+{
+ setKey( key );
+}
+
+QString Key::rawKey() const
+{
+ QString s = m_key;
+
+ if ( isValid( m_key ) >= STRING_64 )
+ s = "s:" + s;
+
+ return s;
+}
+
+void Key::setKey( const QString &key )
+{
+ m_key = key;
+}
+
+KeyStates Key::isValid ( QString keyCandidate )
+{
+ if (keyCandidate.isEmpty()) {
+ kdDebug() << "Ignoring key: empty.\n";
+ return EMPTY;
+ }
+
+ if (keyCandidate.length() == 5)
+ return STRING_64;
+
+ if (keyCandidate.length() == 10)
+ return HEX_64;
+
+ if (keyCandidate.length() == 13)
+ return STRING_128;
+
+ if (keyCandidate.length() == 26)
+ return HEX_128;
+
+ if (keyCandidate.length() == 32)
+ return STRING_256;
+
+ if (keyCandidate.length() == 64)
+ return HEX_256;
+
+ return INVALID;
+}
+
+IfConfig::IfConfig()
+{
+
+ // initialise all config items...
+
+ m_networkName = "";
+ m_interface = "";
+ m_wifiMode = Managed;
+ m_speed = AUTO;
+ m_runScript = false;
+ m_connectScript = "";
+
+ m_useCrypto = false;
+ m_cryptoMode = Open;
+ m_activeKey = 1;
+ for (int i=0; i<4; i++)
+ m_keys[ i ].setKey( "" );
+
+ m_pmEnabled = false;
+ m_pmMode = AllPackets;
+ m_sleepTimeout = 1;
+ m_wakeupPeriod = 1;
+
+ speedList << "Auto" << "1M" << "2M" << "5.5M" << "6M" << "9M" << "11M" << "12M" << "18M" << "24M" << "36M" << "48M" << "54M";
+ wifiModeList << "Ad-Hoc" << "Managed" << "Repeater"
+ << "Master" << "Secondary";
+ cryptoModeList << "Open" << "Restricted";
+ powerModeList << "All" << "UnicastOnly" << "MulticastOnly";
+}
+
+void IfConfig::load( KConfig *config, int i )
+{
+ QString entry;
+
+ QString group = QString( "Configuration %1" ).arg( i+1 );
+ config->setGroup( group );
+
+ m_networkName = config->readEntry( "NetworkName" );
+ m_interface = config->readEntry( "InterfaceName" );
+
+ entry = config->readEntry( "WifiMode", "Managed" );
+ wifimodeFromString( entry );
+ entry = config->readEntry( "Speed", "Auto" );
+ speedFromString( entry );
+ m_runScript = config->readBoolEntry( "RunScript", false );
+ m_connectScript = config->readEntry( "ScriptName" );
+
+ m_useCrypto = config->readBoolEntry( "UseCrypto", false );
+ entry = config->readEntry( "CryptoMode", "Open" );
+ cryptomodeFromString( entry );
+ m_activeKey = config->readNumEntry( "ActiveKey", 1 );
+ m_keys[ 0 ].setKey( config->readEntry( "Key1" ) );
+ m_keys[ 1 ].setKey( config->readEntry( "Key2" ) );
+ m_keys[ 2 ].setKey( config->readEntry( "Key3" ) );
+ m_keys[ 3 ].setKey( config->readEntry( "Key4" ) );
+
+ m_pmEnabled = config->readBoolEntry( "PMEnabled", false );
+ entry = config->readEntry( "PMMode", "All" );
+ powermodeFromString( entry );
+ m_sleepTimeout = config->readNumEntry( "SleepTimeout", 30 );
+ m_wakeupPeriod = config->readNumEntry( "WakeupPeriod", 20 );
+}
+
+void IfConfig::save( KConfig *config, int i )
+{
+ QString group = QString( "Configuration %1" ).arg( i+1 );
+ config->setGroup( group );
+
+ config->writeEntry( "NetworkName", m_networkName );
+ config->writeEntry( "InterfaceName", m_interface );
+ config->writeEntry( "WifiMode", wifimodeAsString() );
+ config->writeEntry( "Speed", speedAsString() );
+ config->writeEntry( "RunScript", m_runScript );
+ config->writeEntry( "ScriptName", m_connectScript );
+
+ config->writeEntry( "UseCrypto", m_useCrypto );
+ config->writeEntry( "CryptoMode", cryptomodeAsString() );
+ config->writeEntry( "ActiveKey", m_activeKey );
+ config->writeEntry( "Key1", m_keys[ 0 ].key() );
+ config->writeEntry( "Key2", m_keys[ 1 ].key() );
+ config->writeEntry( "Key3", m_keys[ 2 ].key() );
+ config->writeEntry( "Key4", m_keys[ 3 ].key() );
+
+ config->writeEntry( "PMEnabled", m_pmEnabled );
+ config->writeEntry( "PMMode", powermodeAsString() );
+ config->writeEntry( "SleepTimeout", m_sleepTimeout );
+ config->writeEntry( "WakeupPeriod", m_wakeupPeriod );
+}
+
+WifiConfig *WifiConfig::m_instance = 0;
+
+WifiConfig *WifiConfig::instance()
+{
+ if ( m_instance == 0 )
+ m_instance = new WifiConfig();
+
+ return m_instance;
+}
+
+WifiConfig::WifiConfig()
+{
+ //m_config = KGlobal::config();
+ m_config = new KSimpleConfig( "kcmwifirc" );
+
+ load();
+}
+
+WifiConfig::~WifiConfig()
+{
+ delete m_config;
+}
+
+void WifiConfig::load()
+{
+ m_config->setGroup( "General" );
+
+ m_usePreset = m_config->readBoolEntry( "UsePreset", false );
+ m_presetConfig = m_config->readNumEntry( "PresetConfig", 1 )-1;
+ m_numConfigs = m_config->readNumEntry( "NumberConfigs", 4 );
+
+ for ( int i=0; i<m_numConfigs; ++i )
+ {
+ m_ifConfig[ i ].load( m_config, i );
+ }
+}
+
+void WifiConfig::save()
+{
+ m_config->setGroup( "General" );
+
+ m_config->writeEntry( "UsePreset", m_usePreset );
+ m_config->writeEntry( "PresetConfig", m_presetConfig+1 );
+ m_config->writeEntry( "NumberConfigs", m_numConfigs );
+
+ for ( int i=0; i<m_numConfigs; ++i )
+ {
+ m_ifConfig[ i ].save( m_config, i );
+ }
+
+ m_config->sync();
+}
+
+QString WifiConfig::autoDetectInterface()
+{
+ m_detectedInterface.truncate( 0 );
+
+ QFile procFile ( "/proc/net/dev" );
+
+ if ( !procFile.open( IO_ReadOnly ) )
+ {
+ KMessageBox::sorry( 0,
+ i18n( "Unable to autodetect wireless interface." ) );
+ return m_detectedInterface;
+ }
+
+ QStringList list;
+ QString line;
+
+ while ( !procFile.atEnd() )
+ {
+ procFile.readLine( line, 9999 );
+ if ( line.find( ":" ) > 0 )
+ {
+ line.truncate ( line.find( ":" ) );
+ list.append( line.stripWhiteSpace() );
+ }
+ }
+
+ procFile.close();
+
+ if ( list.empty() )
+ {
+ KMessageBox::sorry( 0,
+ i18n( "Unable to autodetect wireless interface." ) );
+ return m_detectedInterface;
+ }
+
+ for ( QStringList::Iterator it = list.begin (); it != list.end (); ++it )
+ {
+ if ( ((*it).contains("wifi"))==0 ) { // if the name is wifiX, ignore
+ KProcIO test;
+ test << "iwconfig";
+ test << *it;
+ connect( &test, SIGNAL( readReady( KProcIO * ) ),
+ this, SLOT( slotTestInterface( KProcIO * ) ) );
+ test.start ( KProcess::Block );
+ }
+ }
+
+ if ( m_detectedInterface.isEmpty() )
+ {
+ KMessageBox::sorry( 0,
+ i18n( "Unable to autodetect wireless interface." ) );
+ return m_detectedInterface;
+ }
+
+ return m_detectedInterface;
+}
+
+void WifiConfig::slotTestInterface( KProcIO *proc )
+{
+ QString output;
+ proc->readln( output );
+ if ( output.find ( "no wireless extensions" ) == -1 )
+ {
+ output.truncate( output.find ( " " ) );
+ m_detectedInterface = output.stripWhiteSpace();
+ }
+}
+
+QString IfConfig::speedAsString()
+{
+ return speedList[ m_speed ];
+}
+
+QString IfConfig::wifimodeAsString()
+{
+ return wifiModeList[ m_wifiMode ];
+}
+
+QString IfConfig::cryptomodeAsString()
+{
+ return cryptoModeList[ m_cryptoMode ];
+}
+
+QString IfConfig::powermodeAsString()
+{
+ return powerModeList[ m_pmMode ];
+}
+
+int IfConfig::activeKeyId()
+{
+ return m_activeKey;
+}
+
+Key IfConfig::activeKey()
+{
+ return m_keys[ m_activeKey-1 ];
+}
+
+IfConfig::Speed IfConfig::convertToSpeedFromString( const QString &s )
+{
+ return ( IfConfig::Speed )speedList.findIndex( s );
+}
+
+void IfConfig::speedFromString( const QString &s )
+{
+ m_speed = convertToSpeedFromString( s );
+}
+
+IfConfig::WifiMode IfConfig::convertToWifiModeFromString( const QString &s )
+{
+ return ( IfConfig::WifiMode )wifiModeList.findIndex( s );
+}
+
+void IfConfig::wifimodeFromString( const QString &s )
+{
+ m_wifiMode = convertToWifiModeFromString( s );
+}
+
+IfConfig::CryptoMode IfConfig::convertToCryptoModeFromString( const QString &s )
+{
+ return ( IfConfig::CryptoMode )cryptoModeList.findIndex( s );
+}
+
+void IfConfig::cryptomodeFromString( const QString &s )
+{
+ m_cryptoMode = convertToCryptoModeFromString( s );
+}
+
+IfConfig::PowerMode IfConfig::convertToPowerModeFromString( const QString &s )
+{
+ return ( IfConfig::PowerMode )powerModeList.findIndex( s );
+}
+
+void IfConfig::powermodeFromString( const QString &s )
+{
+ m_pmMode = convertToPowerModeFromString( s );
+}
+
+#include "wificonfig.moc"
+