summaryrefslogtreecommitdiff
path: root/noncore/net/networksetup/wlan/wlanimp.cpp
Unidiff
Diffstat (limited to 'noncore/net/networksetup/wlan/wlanimp.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/networksetup/wlan/wlanimp.cpp247
1 files changed, 0 insertions, 247 deletions
diff --git a/noncore/net/networksetup/wlan/wlanimp.cpp b/noncore/net/networksetup/wlan/wlanimp.cpp
deleted file mode 100644
index 1782c22..0000000
--- a/noncore/net/networksetup/wlan/wlanimp.cpp
+++ b/dev/null
@@ -1,247 +0,0 @@
1#include "wlanimp.h"
2#include "interfacesetupimp.h"
3
4#include <qfile.h>
5#include <qdir.h>
6#include <qtextstream.h>
7#include <qmessagebox.h>
8#include <qlineedit.h>
9#include <qlabel.h>
10#include <qspinbox.h>
11#include <qradiobutton.h>
12#include <qcheckbox.h>
13#include <qtabwidget.h>
14#include <qcombobox.h>
15
16/* system() */
17#include <stdlib.h>
18
19#define WIRELESS_OPTS "/etc/pcmcia/wireless.opts"
20
21/**
22 * Constructor, read in the wireless.opts file for parsing later.
23 */
24WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl):WLAN(parent, name, modal, fl), currentProfile("*") {
25 interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i);
26 tabWidget->insertTab(interfaceSetup, "TCP/IP");
27
28 // Read in the config file.
29 QString wlanFile = WIRELESS_OPTS;
30 QFile file(wlanFile);
31 if (file.open(IO_ReadOnly)){
32 QTextStream stream( &file );
33 QString line = "";
34 while ( !stream.eof() ) {
35 line += stream.readLine();
36 line += "\n";
37 }
38 file.close();
39 settingsFileText = QStringList::split("\n", line, true);
40 parseSettingFile();
41 }
42 else
43 qDebug(QString("WLANImp: Can't open file: %1 for reading.").arg(wlanFile).latin1());
44 connect(networkType, SIGNAL(activated(int)), this, SLOT(typeChanged(int)));
45}
46
47void WLANImp::typeChanged(int mod){
48 networkChannel->setEnabled(mod);
49 channelLabel->setEnabled(mod);
50}
51
52/**
53 * Change the profile for both wireless settings and network settings.
54 */
55void WLANImp::setProfile(const QString &profile){
56 interfaceSetup->setProfile(profile);
57 parseSettingFile();
58}
59
60/**
61 * Parses the settings file that was read in and gets any setting from it.
62 */
63void WLANImp::parseSettingFile(){
64 bool foundCase = false;
65 bool found = false;
66 for ( QStringList::Iterator it = settingsFileText.begin(); it != settingsFileText.end(); ++it ) {
67 QString line = (*it).simplifyWhiteSpace();
68 if(line.contains("case"))
69 foundCase = true;
70 // See if we found our scheme to write or the sceme couldn't be found
71 if((foundCase && line.contains("esac")) ||
72 (foundCase && line.left(currentProfile.length()+7) == currentProfile + ",*,*,*)" && line.at(0) != '#'))
73 found = true;
74
75 if(line.contains(";;"))
76 found = false;
77 if(found){
78 // write out scheme
79 if(line.contains("ESSID=")){
80 QString id = line.mid(line.find("ESSID=")+6, line.length());
81 if(id == "any"){
82 essAny->setChecked(false);
83 }else{
84 essAny->setChecked(true);
85 essSpecificLineEdit->setText(id);
86 }
87 }
88 if(line.contains("MODE=")){
89 QString mode = line.mid(line.find("MODE=")+5, line.length());
90 if(mode == "Managed"){
91 networkType->setCurrentItem(0);
92 channelLabel->setEnabled(false);
93 networkChannel->setEnabled(false);
94 }
95 else{
96 networkType->setCurrentItem(1);
97 networkChannel->setEnabled(true);
98 channelLabel->setEnabled(true);
99 }
100 }
101 if(line.contains("#KEY0="))
102 keyLineEdit0->setText(line.mid(6, line.length()));
103 if(line.contains("#KEY1="))
104 keyLineEdit1->setText(line.mid(6, line.length()));
105 if(line.contains("#KEY2="))
106 keyLineEdit2->setText(line.mid(6, line.length()));
107 if(line.contains("#KEY3="))
108 keyLineEdit3->setText(line.mid(6, line.length()));
109
110 if(line.contains("KEY=")){
111 wepEnabled->setChecked(true);
112 QString key;
113 if(line.right(5) == (" open")){
114 key = line.mid(4, line.length()-5);
115 authOpen->setChecked(true);
116 authShared->setChecked(false);
117 }
118 else{
119 authOpen->setChecked(false);
120 authShared->setChecked(true);
121 key = line.mid(4, line.length());
122 }
123 if(key == keyLineEdit0->text()) keyRadio0->setChecked(true);
124 if(key == keyLineEdit1->text()) keyRadio1->setChecked(true);
125 if(key == keyLineEdit2->text()) keyRadio2->setChecked(true);
126 if(key == keyLineEdit3->text()) keyRadio3->setChecked(true);
127 }
128 if(line.contains("CHANNEL=")){
129 networkChannel->setValue(line.mid(line.find("CHANNEL=")+8, line.length()).toInt());
130 }
131 }
132 }
133}
134
135/**
136 * Saves settings to the wireless.opts file using the current profile
137 */
138void WLANImp::changeAndSaveSettingFile(){
139 QString wlanFile = WIRELESS_OPTS;
140 QFile::remove(wlanFile);
141 QFile file(wlanFile);
142
143 if (!file.open(IO_ReadWrite)){
144 qDebug(QString("WLANImp::changeAndSaveSettingFile(): Can't open file: %1 for writing.").arg(wlanFile).latin1());
145 return;
146 }
147
148 QTextStream stream( &file );
149 bool foundCase = false;
150 bool found = false;
151 bool output = true;
152 for ( QStringList::Iterator it = settingsFileText.begin(); it != settingsFileText.end(); ++it ) {
153 QString line = (*it).simplifyWhiteSpace();
154 if(line.contains("case"))
155 foundCase = true;
156 // See if we found our scheme to write or the sceme couldn't be found
157 if((foundCase && line.contains("esac") && !found) ||
158 (foundCase && line.left(currentProfile.length()+7) == currentProfile + ",*,*,*)" && line.at(0) != '#')){
159 // write out scheme
160 found = true;
161 output = false;
162
163 if(!line.contains("esac"))
164 stream << line << "\n";
165 if(!essAny->isChecked() == true){
166 stream << "\tESSID=any\n";
167 stream << "\tMODE=Managed\n";
168 }
169 else{
170 stream << "\tESSID=" << essSpecificLineEdit->text() << '\n';
171 stream << "\tMODE=" << ( networkType->currentItem() == 0 ? "Managed" : "ad-hoc") << '\n';
172 stream << "\tCHANNEL=" << networkChannel->value() << "\n";
173 }
174
175 stream << "\t#KEY0=" << keyLineEdit0->text() << "\n";
176 stream << "\t#KEY1=" << keyLineEdit1->text() << "\n";
177 stream << "\t#KEY2=" << keyLineEdit2->text() << "\n";
178 stream << "\t#KEY3=" << keyLineEdit3->text() << "\n";
179
180 if(wepEnabled->isChecked()){
181 stream << "\tKEY=\"";
182 if(keyRadio0->isChecked()) stream << keyLineEdit0->text();
183 if(keyRadio1->isChecked()) stream << keyLineEdit1->text();
184 if(keyRadio2->isChecked()) stream << keyLineEdit2->text();
185 if(keyRadio3->isChecked()) stream << keyLineEdit3->text();
186 if(authOpen->isChecked())
187 stream << " open";
188 else
189 stream << " restricted";
190 stream << "\"\n";
191 }
192 stream << "\tRATE=auto\n";
193 if(line.contains("esac"))
194 stream << line << "\n";
195 }
196 if(line.contains(";;"))
197 output = true;
198 if(output && (*it).length() )
199 stream << (*it) << '\n';
200 }
201 file.close();
202}
203
204/**
205 * Check to see if the current config is valid
206 * Save wireless.opts, save interfaces
207 */
208void WLANImp::accept(){
209 if(wepEnabled->isChecked()){
210 if(keyLineEdit0->text().isEmpty() && keyLineEdit1->text().isEmpty() && keyLineEdit2->text().isEmpty() && keyLineEdit3->text().isEmpty() ){
211 QMessageBox::information(this, "Error", "Please enter a key for WEP.", QMessageBox::Ok);
212 return;
213 }
214 }
215
216 if(essAny->isChecked() && essSpecificLineEdit->text().isEmpty()){
217 QMessageBox::information(this, "Error", "Please enter a ESS-ID.", QMessageBox::Ok);
218 return;
219 }
220
221 // Ok settings are good here, save
222 changeAndSaveSettingFile();
223
224 // Try to save the interfaces settings.
225 if(!interfaceSetup->saveChanges())
226 return;
227
228 // Restart the device now that the settings have changed
229 QString initpath;
230 if( QDir("/etc/rc.d/init.d").exists() )
231 initpath = "/etc/rc.d/init.d";
232 else if( QDir("/etc/init.d").exists() )
233 initpath = "/etc/init.d";
234
235 // It would be kinda cool if we didn't have to do this and could just to ifup/down
236
237 if( initpath )
238 system(QString("%1/pcmcia stop").arg(initpath));
239 if( initpath )
240 system(QString("%1/pcmcia start").arg(initpath));
241
242 // Close out the dialog
243 QDialog::accept();
244}
245
246// wlanimp.cpp
247