summaryrefslogtreecommitdiff
path: root/noncore
authormickeyl <mickeyl>2005-05-10 10:14:38 (UTC)
committer mickeyl <mickeyl>2005-05-10 10:14:38 (UTC)
commitff1d0ce627f64fb757df48d4c4998cb82a024dbc (patch) (unidiff)
tree332d07f028d216564ee287ddd2b642e0d314234e /noncore
parentce515e60ba66d4b1540879b17b2b31b5fac627d3 (diff)
downloadopie-ff1d0ce627f64fb757df48d4c4998cb82a024dbc.zip
opie-ff1d0ce627f64fb757df48d4c4998cb82a024dbc.tar.gz
opie-ff1d0ce627f64fb757df48d4c4998cb82a024dbc.tar.bz2
improve WEP key handling and add wlan-ng support. patch courtesy Dirk Opfer, thanks!
Diffstat (limited to 'noncore') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings/wlan/wextensions.cpp3
-rw-r--r--noncore/settings/networksettings/wlan/wlan.pro2
-rw-r--r--noncore/settings/networksettings/wlan/wlanimp2.cpp233
-rw-r--r--noncore/settings/networksettings/wlan/wlanimp2.h3
4 files changed, 189 insertions, 52 deletions
diff --git a/noncore/settings/networksettings/wlan/wextensions.cpp b/noncore/settings/networksettings/wlan/wextensions.cpp
index 8a9db66..64d8752 100644
--- a/noncore/settings/networksettings/wlan/wextensions.cpp
+++ b/noncore/settings/networksettings/wlan/wextensions.cpp
@@ -69,10 +69,13 @@ QString WExtensions::essid(){
69 if(!hasWirelessExtensions) 69 if(!hasWirelessExtensions)
70 return QString(); 70 return QString();
71 const char* buffer[200]; 71 const char* buffer[200];
72 memset(buffer,0x00,200);
72 iwr.u.data.pointer = (caddr_t) buffer; 73 iwr.u.data.pointer = (caddr_t) buffer;
73 iwr.u.data.length = IW_ESSID_MAX_SIZE; 74 iwr.u.data.length = IW_ESSID_MAX_SIZE;
74 iwr.u.data.flags = 0; 75 iwr.u.data.flags = 0;
75 if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr )){ 76 if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr )){
77 if (iwr.u.essid.length > IW_ESSID_MAX_SIZE)
78 iwr.u.essid.length = IW_ESSID_MAX_SIZE;
76 buffer[(unsigned int) iwr.u.essid.length] = '\0'; 79 buffer[(unsigned int) iwr.u.essid.length] = '\0';
77 return (const char*) buffer; 80 return (const char*) buffer;
78 } 81 }
diff --git a/noncore/settings/networksettings/wlan/wlan.pro b/noncore/settings/networksettings/wlan/wlan.pro
index eb9dd4f..3a064d3 100644
--- a/noncore/settings/networksettings/wlan/wlan.pro
+++ b/noncore/settings/networksettings/wlan/wlan.pro
@@ -8,7 +8,7 @@ DEPENDPATH += $(OPIEDIR)/include
8LIBS += -lqpe -L../interfaces/ -linterfaces -lopiecore2 -lopienet2 8LIBS += -lqpe -L../interfaces/ -linterfaces -lopiecore2 -lopienet2
9 INTERFACES= wlan.ui info.ui 9 INTERFACES= wlan.ui info.ui
10 TARGET = wlan 10 TARGET = wlan
11 VERSION = 1.0.1 11 VERSION = 1.0.2
12 12
13#CONFIG += wirelessopts 13#CONFIG += wirelessopts
14 14
diff --git a/noncore/settings/networksettings/wlan/wlanimp2.cpp b/noncore/settings/networksettings/wlan/wlanimp2.cpp
index 11dfe74..2fd97c3 100644
--- a/noncore/settings/networksettings/wlan/wlanimp2.cpp
+++ b/noncore/settings/networksettings/wlan/wlanimp2.cpp
@@ -79,12 +79,11 @@ void WLANImp::setProfile(const QString &profile){
79 79
80void WLANImp::parseOpts() { 80void WLANImp::parseOpts() {
81 bool error; 81 bool error;
82 QString opt; 82 QString opt,key;
83 83
84 if (! interfaces->isInterfaceSet()) 84 if (! interfaces->isInterfaceSet())
85 return; 85 return;
86 86
87
88 opt = interfaces->getInterfaceOption("wireless_essid", error); 87 opt = interfaces->getInterfaceOption("wireless_essid", error);
89 if(opt == "any" || opt == "off" || opt.isNull()){ 88 if(opt == "any" || opt == "off" || opt.isNull()){
90 essid->setEditText("any"); 89 essid->setEditText("any");
@@ -109,10 +108,65 @@ void WLANImp::parseOpts() {
109 networkChannel->setValue(opt.toInt()); 108 networkChannel->setValue(opt.toInt());
110 } 109 }
111 110
112 opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace(); 111 opt = interfaces->getInterfaceOption("wireless_type", error).simplifyWhiteSpace();
113 if (opt.isNull()) 112
113 if ( opt == "wlan-ng") {
114
115 //FIXME:Handle wlan_ng_priv_genstr
116
117 // get default key_id
118 opt = interfaces->getInterfaceOption("wlan_ng_default_key_id", error).simplifyWhiteSpace();
119
120 if (opt == "0")
121 keyRadio0->setChecked(true);
122 if (opt == "1")
123 keyRadio1->setChecked(true);
124 if (opt == "2")
125 keyRadio2->setChecked(true);
126 if (opt == "3")
127 keyRadio3->setChecked(true);
128
129 // get key0
130 key = interfaces->getInterfaceOption("wlan_ng_key0", error).simplifyWhiteSpace();
131 key.replace(QString(":"),QString(""));
132 keyLineEdit0->setText(key);
133
134 // get key1
135 key = interfaces->getInterfaceOption("wlan_ng_key1", error).simplifyWhiteSpace();
136 key.replace(QString(":"),QString(""));
137 keyLineEdit1->setText(key);
138
139 // get key2
140 key = interfaces->getInterfaceOption("wlan_ng_key2", error).simplifyWhiteSpace();
141 key.replace(QString(":"),QString(""));
142 keyLineEdit2->setText(key);
143
144 // get key3
145 key = interfaces->getInterfaceOption("wlan_ng_key3", error).simplifyWhiteSpace();
146 key.replace(QString(":"),QString(""));
147 keyLineEdit3->setText(key);
148
114 opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace(); 149 opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace();
115 parseKeyStr(opt); 150
151 // encryption on?
152 if(opt == "on"){
153 wepEnabled->setChecked(true);
154 } else {
155 wepEnabled->setChecked(false);
156 }
157
158 opt = interfaces->getInterfaceOption("wireless_keymode", error).simplifyWhiteSpace();
159
160 if(opt == "restricted"){
161 // restricted mode, only accept encrypted packets
162 rejectNonEnc->setChecked(true);
163 }
164 }
165 else {
166 opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace();
167
168 parseKeyStr(opt);
169 }
116} 170}
117 171
118void WLANImp::parseKeyStr(QString keystr) { 172void WLANImp::parseKeyStr(QString keystr) {
@@ -226,25 +280,45 @@ void WLANImp::accept() {
226// FIXME: QDialog::accept(); 280// FIXME: QDialog::accept();
227} 281}
228 282
283QString WLANImp::formatKey(QString input)
284{
285 int len,r=0;
286
287 len = input.length();
288
289 if (!len)
290 return input;
291
292 for(int i=1;i<len/2;i++)
293 {
294 input.insert(r+i*2,QString(":"));
295 r++;
296 }
297
298 return input;
299}
300
229void WLANImp::writeOpts() { 301void WLANImp::writeOpts() {
230 // eh can't really do anything about it other then return. :-D 302 QString para, devicetype;
231 if(!interfaces->isInterfaceSet()){
232 QMessageBox::warning(0,"Inface not set","should not happen!!!");
233 return;
234 }
235 bool error = false;
236 303
237 odebug << "setting wlan interface " << interfaces->getInterfaceName( error ).latin1() << "" << oendl; 304 // eh can't really do anything about it other then return. :-D
305 if(!interfaces->isInterfaceSet()){
306 QMessageBox::warning(0,"Inface not set","should not happen!!!");
307 return;
308 }
309 bool error = false;
238 310
239 if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!"); 311 odebug << "setting wlan interface " << interfaces->getInterfaceName( error ).latin1() << "" << oendl;
312
313 if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!");
240 314
241 interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText()); 315 interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText());
242 interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText()); 316 interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText());
243 317
244 if (specifyAp->isChecked()) { 318 if (specifyAp->isChecked()) {
245 interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text()); 319 interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text());
246 } else { 320 } else {
247 interfaces->removeInterfaceOption(QString("wireless_ap")); 321 interfaces->removeInterfaceOption(QString("wireless_ap"));
248 } 322 }
249 323
250 if (specifyChan->isChecked()) { 324 if (specifyChan->isChecked()) {
@@ -253,46 +327,105 @@ void WLANImp::writeOpts() {
253 interfaces->removeInterfaceOption(QString("wireless_channel")); 327 interfaces->removeInterfaceOption(QString("wireless_channel"));
254 } 328 }
255 329
256 if (wepEnabled->isChecked()) { 330 devicetype = interfaces->getInterfaceOption("wireless_type", error).simplifyWhiteSpace();
257 QStringList keyList; 331
258 332 if ( devicetype == "wlan-ng") {
259 if (! keyLineEdit0->text().isNull()) { 333
260 keyList += keyLineEdit0->text(); 334 // wlan-ng style
261 keyList += "[1]"; 335 interfaces->removeInterfaceOption(QString("wireless_key"));
262 } //else 336
263 if (! keyLineEdit1->text().isNull()) { 337 if (wepEnabled->isChecked()) {
264 keyList += keyLineEdit1->text(); 338
265 keyList += "[2]"; 339 interfaces->setInterfaceOption(QString("wireless_enc"),"on");
266 } //else 340
267 if (! keyLineEdit2->text().isNull()) { 341 if (! keyLineEdit0->text().isNull()) {
268 keyList += keyLineEdit2->text(); 342 interfaces->setInterfaceOption(QString("wlan_ng_key0"), formatKey(keyLineEdit0->text()));
269 keyList += "[3]"; 343 } else
270 } //else 344 interfaces->removeInterfaceOption(QString("wlan_ng_key0"));
271 if (! keyLineEdit3->text().isNull()) { 345 if (! keyLineEdit1->text().isNull()) {
272 keyList += keyLineEdit3->text(); 346 interfaces->setInterfaceOption(QString("wlan_ng_key1"), formatKey(keyLineEdit1->text()));
273 keyList += "[4]"; 347 } else
274 } 348 interfaces->removeInterfaceOption(QString("wlan_ng_key1"));
275 if (acceptNonEnc->isChecked()) { 349 if (! keyLineEdit2->text().isNull()) {
276 keyList += "open"; 350 interfaces->setInterfaceOption(QString("wlan_ng_key2"), formatKey(keyLineEdit2->text()));
351 } else
352 interfaces->removeInterfaceOption(QString("wlan_ng_key2"));
353 if (! keyLineEdit3->text().isNull()) {
354 interfaces->setInterfaceOption(QString("wlan_ng_key3"), formatKey(keyLineEdit3->text()));
355 } else
356 interfaces->removeInterfaceOption(QString("wlan_ng_key3"));
357
358 if (acceptNonEnc->isChecked())
359 interfaces->removeInterfaceOption(QString("wireless_keymode"));
360 else
361 interfaces->setInterfaceOption(QString("wireless_keymode"),"restricted");
362
363 para = "";
364 if (keyRadio0->isChecked()) {
365 para = "0";
366 } else if (keyRadio1->isChecked()) {
367 para = "1";
368 } else if (keyRadio2->isChecked()) {
369 para = "2";
370 } else if (keyRadio3->isChecked()) {
371 para = "3";
372 }
373
374 interfaces->setInterfaceOption(QString("wlan_ng_default_key_id"), para);
375
277 } else { 376 } else {
278 keyList += "restricted"; 377 // No wep, remove all previous keys
378 interfaces->removeInterfaceOption(QString("wireless_enc"));
379 interfaces->removeInterfaceOption(QString("wlan_ng_default_key_id"));
380 interfaces->removeInterfaceOption(QString("wlan_ng_key0"));
381 interfaces->removeInterfaceOption(QString("wlan_ng_key1"));
382 interfaces->removeInterfaceOption(QString("wlan_ng_key2"));
383 interfaces->removeInterfaceOption(QString("wlan_ng_key3"));
279 } 384 }
280 385
281 keyList += "key";
282 if (keyRadio0->isChecked()) {
283 keyList += "[1]";
284 } else if (keyRadio1->isChecked()) {
285 keyList += "[2]";
286 } else if (keyRadio2->isChecked()) {
287 keyList += "[3]";
288 } else if (keyRadio3->isChecked()) {
289 keyList += "[4]";
290 }
291 interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" ")));
292 } else { 386 } else {
293 interfaces->removeInterfaceOption(QString("wireless_key")); 387 // This is the old style
388 if (wepEnabled->isChecked()) {
389 QStringList keyList;
390
391 if (! keyLineEdit0->text().isNull()) {
392 keyList += keyLineEdit0->text();
393 keyList += "[1]";
394 } //else
395 if (! keyLineEdit1->text().isNull()) {
396 keyList += keyLineEdit1->text();
397 keyList += "[2]";
398 } //else
399 if (! keyLineEdit2->text().isNull()) {
400 keyList += keyLineEdit2->text();
401 keyList += "[3]";
402 } //else
403 if (! keyLineEdit3->text().isNull()) {
404 keyList += keyLineEdit3->text();
405 keyList += "[4]";
406 }
407 if (acceptNonEnc->isChecked()) {
408 keyList += "open";
409 } else {
410 keyList += "restricted";
411 }
412
413 keyList += "key";
414 if (keyRadio0->isChecked()) {
415 keyList += "[1]";
416 } else if (keyRadio1->isChecked()) {
417 keyList += "[2]";
418 } else if (keyRadio2->isChecked()) {
419 keyList += "[3]";
420 } else if (keyRadio3->isChecked()) {
421 keyList += "[4]";
422 }
423 interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" ")));
424 } else {
425 interfaces->removeInterfaceOption(QString("wireless_key"));
426 }
427 interfaces->removeInterfaceOption(QString("wireless_enc"));
294 } 428 }
295 interfaces->removeInterfaceOption(QString("wireless_enc"));
296 429
297 if(!interfaceSetup->saveChanges()) 430 if(!interfaceSetup->saveChanges())
298 return; 431 return;
diff --git a/noncore/settings/networksettings/wlan/wlanimp2.h b/noncore/settings/networksettings/wlan/wlanimp2.h
index c3d1eee..0e8d533 100644
--- a/noncore/settings/networksettings/wlan/wlanimp2.h
+++ b/noncore/settings/networksettings/wlan/wlanimp2.h
@@ -37,7 +37,8 @@ private:
37 void writeOpts(); 37 void writeOpts();
38 38
39 void parseKeyStr(QString keystr); 39 void parseKeyStr(QString keystr);
40 40 QString formatKey(QString input);
41
41 void handlePacket( Opie::Net::OPacket* ); 42 void handlePacket( Opie::Net::OPacket* );
42 void displayFoundNetwork( const QString& mode, int channel, const QString& ssid, const Opie::Net::OMacAddress& mac ); 43 void displayFoundNetwork( const QString& mode, int channel, const QString& ssid, const Opie::Net::OMacAddress& mac );
43 44