From b8d6cf8848e68ab1089d7b94281fa205a13c766f Mon Sep 17 00:00:00 2001 From: benmeyer Date: Mon, 04 Nov 2002 16:50:27 +0000 Subject: Removed the Config class. Now parses wireless.opts file directly --- (limited to 'noncore/settings') diff --git a/noncore/settings/networksettings/wlan/wlan.ui b/noncore/settings/networksettings/wlan/wlan.ui index 9f33559..1b29a3e 100644 --- a/noncore/settings/networksettings/wlan/wlan.ui +++ b/noncore/settings/networksettings/wlan/wlan.ui @@ -11,7 +11,7 @@ 0 0 - 250 + 238 286 @@ -179,7 +179,7 @@ text - 802.11 Ad-Hoc + Ad-Hoc @@ -200,6 +200,10 @@ minValue 1 + + value + 6 + @@ -257,7 +261,7 @@ title Wep - + margin 11 @@ -266,7 +270,69 @@ spacing 6 - + + QCheckBox + + name + wepEnabled + + + text + Enable Wep + + + + QButtonGroup + + name + ButtonGroup43 + + + enabled + false + + + title + Authentication Type + + + + margin + 11 + + + spacing + 6 + + + QRadioButton + + name + authOpen + + + text + Open System + + + checked + true + + + + QRadioButton + + name + authShared + + + text + Shared Key + + + + + QButtonGroup name @@ -367,109 +433,7 @@ - - QButtonGroup - - name - ButtonGroup42 - - - enabled - false - - - title - Key Length - - - - margin - 11 - - - spacing - 6 - - - QRadioButton - - name - key40 - - - text - 40 Bits - - - checked - true - - - - QRadioButton - - name - key128 - - - text - 128 Bits - - - - - - QButtonGroup - - name - ButtonGroup43 - - - enabled - false - - - title - Authentication Type - - - - margin - 11 - - - spacing - 6 - - - QRadioButton - - name - authOpen - - - text - Open System - - - checked - true - - - - QRadioButton - - name - authShared - - - text - Shared Key - - - - - + name Spacer30 @@ -490,18 +454,7 @@ - - QCheckBox - - name - wepEnabled - - - text - Enable Wep - - - + @@ -534,12 +487,6 @@ wepEnabled toggled(bool) - ButtonGroup42 - setEnabled(bool) - - - wepEnabled - toggled(bool) ButtonGroup43 setEnabled(bool) @@ -556,8 +503,6 @@ essSpecificLineEdit networkInfrastructure networkChannel - key40 - key128 authOpen authShared keyRadio0 diff --git a/noncore/settings/networksettings/wlan/wlanimp.cpp b/noncore/settings/networksettings/wlan/wlanimp.cpp index 01d7e36..689eae2 100644 --- a/noncore/settings/networksettings/wlan/wlanimp.cpp +++ b/noncore/settings/networksettings/wlan/wlanimp.cpp @@ -1,11 +1,6 @@ #include "wlanimp.h" +#include "interfacesetupimp.h" -/* Config class */ -#include -/* Global namespace */ -#include -/* system() */ -#include #include #include #include @@ -14,234 +9,224 @@ #include #include #include -#include -#include #include -#include "interfacesetupimp.h" -WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl):WLAN(parent, name, modal, fl){ - config = new Config("wireless"); - interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i);//, Qt::WDestructiveClose); - //configure->setProfile(currentProfile); - tabWidget->insertTab(interfaceSetup, "TCP/IP"); +/* system() */ +#include - readConfig(); +#define WIRELESS_OPTS "/etc/pcmcia/wireless.opts" -} +/** + * Constructor, read in the wireless.opts file for parsing later. + */ +WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl):WLAN(parent, name, modal, fl), currentProfile("*") { + interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i); + tabWidget->insertTab(interfaceSetup, "TCP/IP"); -WLANImp::~WLANImp( ){ - delete config; + // Read in the config file. + QString wlanFile = WIRELESS_OPTS; + QFile file(wlanFile); + if (file.open(IO_ReadOnly)){ + QTextStream stream( &file ); + QString line = ""; + while ( !stream.eof() ) { + line += stream.readLine(); + line += "\n"; + } + file.close(); + settingsFileText = QStringList::split("\n", line, true); + parseSettingFile(); + } + else + qDebug(QString("WLANImp: Can't open file: %1 for reading.").arg(wlanFile).latin1()); } +/** + * Change the profile for both wireless settings and network settings. + */ void WLANImp::setProfile(QString &profile){ interfaceSetup->setProfile(profile); + parseSettingFile(); } -void WLANImp::readConfig() -{ - qWarning( "WLANImp::readConfig() called." ); - config->setGroup( "Properties" ); - QString ssid = config->readEntry( "SSID", "any" ); - if( ssid == "any" || ssid == "ANY" ){ - essNon->setChecked( true ); - } else { - essSpecific->setChecked( true ); - essSpecificLineEdit->setText( ssid ); - } - QString mode = config->readEntry( "Mode", "Managed" ); - if( mode == "adhoc" ) { - network802->setChecked( true ); - } else { - networkInfrastructure->setChecked( true ); - } - networkChannel->setValue( config->readNumEntry( "CHANNEL", 1 ) ); -// config->readEntry( "RATE", "auto" ); - config->readEntry( "dot11PrivacyInvoked" ) == "true" ? wepEnabled->setChecked( true ) : wepEnabled->setChecked( false ); - config->readEntry( "AuthType", "opensystem" ); - config->readEntry( "PRIV_KEY128", "false" ) == "false" ? key40->setChecked( true ) : key128->setChecked( true ); - int defaultkey = config->readNumEntry( "dot11WEPDefaultKeyID", 0 ); - switch( defaultkey ){ - case 0: - keyRadio0->setChecked( true ); - break; - case 1: - keyRadio1->setChecked( true ); - break; - case 2: - keyRadio2->setChecked( true ); - break; - case 3: - keyRadio3->setChecked( true ); - break; +/** + * Parses the settings file that was read in and gets any setting from it. + */ +void WLANImp::parseSettingFile(){ + bool foundCase = false; + bool found = false; + for ( QStringList::Iterator it = settingsFileText.begin(); it != settingsFileText.end(); ++it ) { + QString line = (*it).simplifyWhiteSpace(); + if(line.contains("case")) + foundCase = true; + // See if we found our scheme to write or the sceme couldn't be found + if((foundCase && line.contains("esac")) || + (foundCase && line.left(currentProfile.length()+7) == currentProfile + ",*,*,*)" && line.at(0) != '#')) + found = true; + + if(line.contains(";;")) + found = false; + if(found){ + // write out scheme + if(line.contains("ESSID=")){ + QString id = line.mid(line.find("ESSID=")+6, line.length()); + if(id == "any"){ + essNon->setChecked(true); + essSpecific->setChecked(false); + }else{ + essSpecific->setChecked(true); + essSpecificLineEdit->setText(id); + essNon->setChecked(false); + } + } + if(line.contains("MODE=")){ + QString mode = line.mid(line.find("MODE=")+5, line.length()); + if(mode == "Managed"){ + network802->setChecked( false ); + networkInfrastructure->setChecked( true ); + } + else{ + network802->setChecked( true ); + networkInfrastructure->setChecked( false ); + } + } + if(line.contains("KEY=")){ + line.at(0) != '#' ? wepEnabled->setChecked(true) : wepEnabled->setChecked(false); + int s = line.find("KEY="); + line = line.mid(s+4, line.length()); + // Find first Key + s = line.find("[1]"); + if(s != -1){ + keyLineEdit0->setText(line.mid(0, s)); + line = line.mid(s+3, line.length()); + } + s = line.find("[2]"); + if(s != -1){ + keyLineEdit1->setText(line.mid(0, s)); + line = line.mid(s+3, line.length()); + } + s = line.find("[3]"); + if(s != -1){ + keyLineEdit2->setText(line.mid(0, s)); + line = line.mid(s+3, line.length()); + } + s = line.find("[4]"); + if(s != -1){ + keyLineEdit3->setText(line.mid(0, s)); + line = line.mid(s+3, line.length()); + } + if(line.contains("key [1]")) keyRadio0->setChecked(true); + if(line.contains("key [2]")) keyRadio1->setChecked(true); + if(line.contains("key [3]")) keyRadio2->setChecked(true); + if(line.contains("key [4]")) keyRadio3->setChecked(true); + if(line.contains("open")){ + authOpen->setChecked(true); + authShared->setChecked(false); + } + else{ + authOpen->setChecked(false); + authShared->setChecked(true); + } + } + if(line.contains("CHANNEL=")){ + networkChannel->setValue(line.mid(line.find("CHANNEL=")+8, line.length()).toInt()); + } } - keyLineEdit0->setText(config->readEntry( "dot11WEPDefaultKey0" )); - keyLineEdit1->setText(config->readEntry( "dot11WEPDefaultKey1" )); - keyLineEdit2->setText(config->readEntry( "dot11WEPDefaultKey2" )); - keyLineEdit3->setText(config->readEntry( "dot11WEPDefaultKey3" )); - return; + } } -bool WLANImp::writeConfig() -{ - qWarning( "WLANImp::writeConfig() called." ); - config->setGroup( "Properties" ); - if( essNon->isChecked() ) { - config->writeEntry( "SSID", "any" ); - } else { - config->writeEntry( "SSID", essSpecificLineEdit->text() ); - } - if( networkInfrastructure->isChecked() ){ - config->writeEntry( "Mode", "Managed" ); - } else if( network802->isChecked() ){ - config->writeEntry( "Mode", "adhoc" ); - } - config->writeEntry( "CHANNEL", networkChannel->value() ); -// config->readEntry( "RATE", "auto" ); - wepEnabled->isChecked() ? config->writeEntry( "dot11PrivacyInvoked", "true" ) : config->writeEntry( "dot11PrivacyInvoked", "false" ); - authOpen->isChecked() ? config->writeEntry( "AuthType", "opensystem" ) : config->writeEntry( "AuthType", "sharedkey" ); - key40->isChecked() ? config->writeEntry( "PRIV_KEY128", "false" ) : config->writeEntry( "PRIV_KEY128", "true" ); - if( keyRadio0->isChecked() ){ - config->writeEntry( "dot11WEPDefaultKeyID", 0 ); - } else if( keyRadio1->isChecked() ){ - config->writeEntry( "dot11WEPDefaultKeyID", 1 ); - } else if( keyRadio2->isChecked() ){ - config->writeEntry( "dot11WEPDefaultKeyID", 2 ); - } else if( keyRadio3->isChecked() ){ - config->writeEntry( "dot11WEPDefaultKeyID", 3 ); +/** + * Saves settings to the wireless.opts file using the current profile + */ +void WLANImp::changeAndSaveSettingFile(){ + QString wlanFile = WIRELESS_OPTS; + QFile::remove(wlanFile); + QFile file(wlanFile); + + if (!file.open(IO_ReadWrite)){ + qDebug(QString("WLANImp::changeAndSaveSettingFile(): Can't open file: %1 for writing.").arg(wlanFile).latin1()); + return; + } + + QTextStream stream( &file ); + bool foundCase = false; + bool found = false; + bool output = true; + for ( QStringList::Iterator it = settingsFileText.begin(); it != settingsFileText.end(); ++it ) { + QString line = (*it).simplifyWhiteSpace(); + if(line.contains("case")) + foundCase = true; + // See if we found our scheme to write or the sceme couldn't be found + if((foundCase && line.contains("esac") && !found) || + (foundCase && line.left(currentProfile.length()+7) == currentProfile + ",*,*,*)" && line.at(0) != '#')){ + // write out scheme + found = true; + output = false; + + if(!line.contains("esac")) + stream << line << "\n"; + + stream << "\tESSID=" << (essNon->isChecked() == true ? QString("any") : essSpecificLineEdit->text()) << '\n'; + stream << "\tMODE=" << (networkInfrastructure->isChecked() == true ? "Managed" : "AdHoc") << '\n'; + if(!wepEnabled->isChecked()) + stream << "#"; + stream << "\tKEY="; + stream << keyLineEdit0->text() << " [1]"; + stream << keyLineEdit1->text() << " [2]"; + stream << keyLineEdit2->text() << " [3]"; + stream << keyLineEdit3->text() << " [4]"; + stream << " key ["; + if(keyRadio0->isChecked()) stream << "1]"; + if(keyRadio1->isChecked()) stream << "2]"; + if(keyRadio2->isChecked()) stream << "3]"; + if(keyRadio3->isChecked()) stream << "4]"; + if(authOpen->isChecked()) stream << " open"; + stream << "\n"; + stream << "\tCHANNEL=" << networkChannel->value() << "\n"; + stream << "\tRATE=auto\n"; + if(line.contains("esac")) + stream << line << "\n"; } - config->writeEntry( "dot11WEPDefaultKey0", keyLineEdit0->text() ); - config->writeEntry( "dot11WEPDefaultKey1", keyLineEdit1->text() ); - config->writeEntry( "dot11WEPDefaultKey2", keyLineEdit2->text() ); - config->writeEntry( "dot11WEPDefaultKey3", keyLineEdit3->text() ); - return writeWirelessOpts( ); + if(line.contains(";;")) + output = true; + if(output) + stream << (*it) << '\n'; + } + file.close(); } /** + * Check to see if the current config is valid + * Save wireless.opts, save interfaces */ -void WLANImp::accept() -{ - if ( writeConfig() ){ - if(interfaceSetup->saveChanges()) - QDialog::accept(); - } +void WLANImp::accept(){ + if(wepEnabled->isChecked()){ + if(keyLineEdit0->text().isEmpty() && keyLineEdit1->text().isEmpty() && keyLineEdit2->text().isEmpty() && keyLineEdit3->text().isEmpty() ) + QMessageBox::information(this, "", "Please enter a key for WEP.", QMessageBox::Ok); + return; + } + + // Ok settings are good here, save + changeAndSaveSettingFile(); + + // Try to save the interfaces settings. + if(!interfaceSetup->saveChanges()) + return; + + // Restart the device now that the settings have changed + QString initpath; + if( QDir("/etc/rc.d/init.d").exists() ) + initpath = "/etc/rc.d/init.d"; + else if( QDir("/etc/init.d").exists() ) + initpath = "/etc/init.d"; + if( initpath ) + system(QString("%1/pcmcia stop").arg(initpath)); + if( initpath ) + system(QString("%1/pcmcia start").arg(initpath)); + + // Close out the dialog + QDialog::accept(); } -bool WLANImp::writeWirelessOpts( QString scheme ) -{ - qWarning( "WLANImp::writeWirelessOpts entered." ); - QString prev = "/etc/pcmcia/wireless.opts"; - QFile prevFile(prev); - if ( !prevFile.open( IO_ReadOnly ) ) - return false; - - QString tmp = "/etc/pcmcia/wireless.opts-qpe-new"; - QFile tmpFile(tmp); - if ( !tmpFile.open( IO_WriteOnly ) ) - return false; - - bool retval = true; - - QTextStream in( &prevFile ); - QTextStream out( &tmpFile ); - - config->setGroup("Properties"); - - QString line; - bool found=false; - bool done=false; - while ( !in.atEnd() ) { - QString line = in.readLine(); - QString wline = line.simplifyWhiteSpace(); - if ( !done ) { - if ( found ) { - // skip existing entry for this scheme, and write our own. - if ( wline == ";;" ) { - found = false; - continue; - } else { - continue; - } - } else { - if ( wline.left(scheme.length()+7) == scheme + ",*,*,*)" ) { - found=true; - continue; // skip this line - } else if ( wline == "esac" || wline == "*,*,*,*)" ) { - // end - add new entry - // Not all fields have a GUI, but all are supported - // in the letwork configuration files. - static const char* txtfields[] = { - 0 - }; - QString readmode = config->readEntry( "Mode", "Managed" ); - QString mode; - if( readmode == "Managed" ){ - mode = readmode; - } else if( readmode == "adhoc" ){ - mode = "Ad-Hoc"; - } - QString key; - if( wepEnabled->isChecked() ){ - int defaultkey = config->readNumEntry( "dot11WEPDefaultKeyID", 0 ); - switch( defaultkey ){ - case 0: - key += keyLineEdit0->text(); - break; - case 1: - key += keyLineEdit1->text(); - break; - case 2: - key += keyLineEdit2->text(); - break; - case 3: - key += keyLineEdit3->text(); - break; - } - if( config->readEntry( "AuthType", "opensystem" ) == "opensystem") - key += " open"; - } - out << scheme << ",*,*,*)" << "\n" - << " ESSID=" << Global::shellQuote( config->readEntry( "SSID", "any" ) ) << "\n" - << " MODE=" << mode << "\n" - << " KEY=" << Global::shellQuote( key ) << "\n" - << " RATE=" << "auto" << "\n" - ; - if( mode != "Managed" ) - out << " CHANNEL=" << config->readNumEntry( "CHANNEL", 1 ) << "\n"; - const char** f = txtfields; - while (*f) { - out << " " << *f << "=" << config->readEntry(*f,"") << "\n"; - ++f; - } - out << " ;;\n"; - done = true; - } - } - } - out << line << "\n"; - } +// wlanimp.cpp - prevFile.close(); - tmpFile.close(); - QString initpath; - //system("cardctl suspend"); - if( QDir("/etc/rc.d/init.d").exists() ){ - initpath = "/etc/rc.d/init.d"; - } else if( QDir("/etc/init.d").exists() ){ - initpath = "/etc/init.d"; - } - if( initpath ) - system(QString("%1/pcmcia stop").arg(initpath)); - - if( system( "mv " + tmp + " " + prev ) ) - retval = false; -//#ifdef USE_SCHEMES -// if ( retval ) -// SchemeChanger::changeScheme(scheme); -//#endif - - //system("cardctl resume"); - if( initpath ) - system(QString("%1/pcmcia start").arg(initpath)); - - return retval; -} diff --git a/noncore/settings/networksettings/wlan/wlanimp.h b/noncore/settings/networksettings/wlan/wlanimp.h index faa1674..f88e550 100644 --- a/noncore/settings/networksettings/wlan/wlanimp.h +++ b/noncore/settings/networksettings/wlan/wlanimp.h @@ -2,6 +2,7 @@ #define WLANIMP_H #include "wlan.h" +#include class InterfaceSetupImp; class Interface; @@ -12,20 +13,18 @@ class WLANImp : public WLAN { public: WLANImp( QWidget* parent = 0, const char* name = 0, Interface *i=0, bool modal = FALSE, WFlags fl = 0 ); - ~WLANImp( ); void setProfile(QString &profile); protected: void accept(); private: - void readConfig(); - bool writeConfig(); - bool writeWirelessOpts( QString scheme = "*" ); - bool writeWlanngOpts( QString scheme = "*" ); - Config* config; + void parseSettingFile(); + void changeAndSaveSettingFile(); + InterfaceSetupImp *interfaceSetup; - + QStringList settingsFileText; + QString currentProfile; }; #endif -- cgit v0.9.0.2