summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/appearance2/appearance.cpp4
-rw-r--r--noncore/settings/networksettings/ppp/modem.cpp52
-rw-r--r--noncore/settings/networksettings/wlan/wlanimp2.cpp29
3 files changed, 43 insertions, 42 deletions
diff --git a/noncore/settings/appearance2/appearance.cpp b/noncore/settings/appearance2/appearance.cpp
index f918767..9638686 100644
--- a/noncore/settings/appearance2/appearance.cpp
+++ b/noncore/settings/appearance2/appearance.cpp
@@ -18,48 +18,49 @@
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
19..}^=.=       =       ; Public License for more details. 19..}^=.=       =       ; Public License for more details.
20++=   -.     .`     .: 20++=   -.     .`     .:
21 :     =  ...= . :.=- You should have received a copy of the GNU 21 :     =  ...= . :.=- You should have received a copy of the GNU
22 -.   .:....=;==+<; General Public License along with this file; 22 -.   .:....=;==+<; General Public License along with this file;
23  -_. . .   )=.  = see the file COPYING. If not, write to the 23  -_. . .   )=.  = see the file COPYING. If not, write to the
24    --        :-=` Free Software Foundation, Inc., 24    --        :-=` Free Software Foundation, Inc.,
25 59 Temple Place - Suite 330, 25 59 Temple Place - Suite 330,
26 Boston, MA 02111-1307, USA. 26 Boston, MA 02111-1307, USA.
27 27
28*/ 28*/
29 29
30#include "appearance.h" 30#include "appearance.h"
31#include "editScheme.h" 31#include "editScheme.h"
32#include "stylelistitem.h" 32#include "stylelistitem.h"
33#include "decolistitem.h" 33#include "decolistitem.h"
34#include "colorlistitem.h" 34#include "colorlistitem.h"
35#include "exceptlistitem.h" 35#include "exceptlistitem.h"
36#include "sample.h" 36#include "sample.h"
37 37
38/* OPIE */ 38/* OPIE */
39#include <opie2/odevice.h> 39#include <opie2/odevice.h>
40#include <opie2/ofiledialog.h> 40#include <opie2/ofiledialog.h>
41#include <opie2/otabwidget.h> 41#include <opie2/otabwidget.h>
42#include <opie2/odebug.h>
42 43
43#include <qpe/config.h> 44#include <qpe/config.h>
44#include <qpe/global.h> 45#include <qpe/global.h>
45#include <qpe/qpeapplication.h> 46#include <qpe/qpeapplication.h>
46#include <qpe/qpemessagebox.h> 47#include <qpe/qpemessagebox.h>
47#include <qpe/qcopenvelope_qws.h> 48#include <qpe/qcopenvelope_qws.h>
48#include <qpe/qpestyle.h> 49#include <qpe/qpestyle.h>
49#include <qpe/lightstyle.h> 50#include <qpe/lightstyle.h>
50#include <qpe/styleinterface.h> 51#include <qpe/styleinterface.h>
51 52
52/* QT */ 53/* QT */
53#include <qbuttongroup.h> 54#include <qbuttongroup.h>
54#include <qcheckbox.h> 55#include <qcheckbox.h>
55#include <qcombobox.h> 56#include <qcombobox.h>
56#include <qdialog.h> 57#include <qdialog.h>
57#include <qdir.h> 58#include <qdir.h>
58#include <qlabel.h> 59#include <qlabel.h>
59#include <qlayout.h> 60#include <qlayout.h>
60#include <qlineedit.h> 61#include <qlineedit.h>
61#include <qlistbox.h> 62#include <qlistbox.h>
62#include <qmessagebox.h> 63#include <qmessagebox.h>
63#include <qpushbutton.h> 64#include <qpushbutton.h>
64#include <qradiobutton.h> 65#include <qradiobutton.h>
65#if QT_VERSION >= 300 66#if QT_VERSION >= 300
@@ -811,49 +812,50 @@ void Appearance::downExcept ( )
811 ExceptListItem *it = (ExceptListItem *) m_except-> selectedItem ( ); 812 ExceptListItem *it = (ExceptListItem *) m_except-> selectedItem ( );
812 813
813 if ( it && it-> itemBelow ( )) 814 if ( it && it-> itemBelow ( ))
814 it-> moveItem ( it-> itemBelow ( )); 815 it-> moveItem ( it-> itemBelow ( ));
815} 816}
816 817
817class ExEdit : public QLineEdit 818class ExEdit : public QLineEdit
818{ 819{
819public: 820public:
820 ExEdit ( ExceptListItem *item ) 821 ExEdit ( ExceptListItem *item )
821 : QLineEdit ( item-> listView ( )-> viewport ( ), "exedit" ), it ( item ) 822 : QLineEdit ( item-> listView ( )-> viewport ( ), "exedit" ), it ( item )
822 { 823 {
823 setFrame ( false ); 824 setFrame ( false );
824 825
825 QRect r = it-> listView ( )-> itemRect ( it ); 826 QRect r = it-> listView ( )-> itemRect ( it );
826 827
827 int x = it-> listView ( )-> header ( )-> cellPos ( 3 ) - 1; 828 int x = it-> listView ( )-> header ( )-> cellPos ( 3 ) - 1;
828 int y = r. y ( ); 829 int y = r. y ( );
829 int w = it-> listView ( )-> viewport ( )-> width ( ) - x; 830 int w = it-> listView ( )-> viewport ( )-> width ( ) - x;
830 int h = r. height ( ); // + 2; 831 int h = r. height ( ); // + 2;
831 832
832 setText ( it-> pattern ( )); 833 setText ( it-> pattern ( ));
833 setGeometry ( x, y, w, h ); 834 setGeometry ( x, y, w, h );
834 835
835 qDebug ( "ExEdit: [%s] at %d,%d %d,%d", it->text(2).latin1(),x,y,w,h); 836 odebug << "ExEdit: [" << it->text(2).latin1() << "] at "
837 << x << "," << y << " " << w << "," << h << oendl;
836 838
837 m_out = true; 839 m_out = true;
838 840
839 show ( ); 841 show ( );
840 setFocus ( ); 842 setFocus ( );
841 selectAll ( ); 843 selectAll ( );
842 end ( true ); 844 end ( true );
843 } 845 }
844 846
845 virtual void focusOutEvent ( QFocusEvent * ) 847 virtual void focusOutEvent ( QFocusEvent * )
846 { 848 {
847 hide ( ); 849 hide ( );
848 if ( m_out ) 850 if ( m_out )
849 it-> setPattern ( text ( )); 851 it-> setPattern ( text ( ));
850 delete this; 852 delete this;
851 } 853 }
852 854
853 virtual void keyPressEvent ( QKeyEvent *e ) 855 virtual void keyPressEvent ( QKeyEvent *e )
854 { 856 {
855 if ( e-> key ( ) == Key_Return ) 857 if ( e-> key ( ) == Key_Return )
856 it-> listView ( )-> setFocus ( ); 858 it-> listView ( )-> setFocus ( );
857 else if ( e-> key ( ) == Key_Escape ) 859 else if ( e-> key ( ) == Key_Escape )
858 { 860 {
859 m_out = false; 861 m_out = false;
diff --git a/noncore/settings/networksettings/ppp/modem.cpp b/noncore/settings/networksettings/ppp/modem.cpp
index 5913a22..3bc7d43 100644
--- a/noncore/settings/networksettings/ppp/modem.cpp
+++ b/noncore/settings/networksettings/ppp/modem.cpp
@@ -149,49 +149,49 @@ speed_t Modem::modemspeed() {
149 case 2304: 149 case 2304:
150 return B230400; 150 return B230400;
151 break; 151 break;
152#endif 152#endif
153 153
154#ifdef B460800 154#ifdef B460800
155 case 4608: 155 case 4608:
156 return B460800; 156 return B460800;
157 break; 157 break;
158#endif 158#endif
159 159
160 default: 160 default:
161 return B38400; 161 return B38400;
162 break; 162 break;
163 } 163 }
164} 164}
165 165
166bool Modem::opentty() { 166bool Modem::opentty() {
167 // int flags; 167 // int flags;
168 168
169//begin if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) { 169//begin if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) {
170 close(modemfd); 170 close(modemfd);
171 device = _pppdata->modemDevice(); 171 device = _pppdata->modemDevice();
172 if ((modemfd = open(device, O_RDWR|O_NDELAY|O_NOCTTY)) == -1) { 172 if ((modemfd = open(device, O_RDWR|O_NDELAY|O_NOCTTY)) == -1) {
173 odebug << "error opening modem device !" << oendl; 173 odebug << "error opening modem device !" << oendl;
174 errmsg = QObject::tr("Unable to open modem."); 174 errmsg = QObject::tr("Unable to open modem.");
175 return false; 175 return false;
176 } 176 }
177//bend if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) { 177//bend if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) {
178//} 178//}
179 179
180#if 0 180#if 0
181 if(_pppdata->UseCDLine()) { 181 if(_pppdata->UseCDLine()) {
182 if(ioctl(modemfd, TIOCMGET, &flags) == -1) { 182 if(ioctl(modemfd, TIOCMGET, &flags) == -1) {
183 errmsg = QObject::tr("Unable to detect state of CD line."); 183 errmsg = QObject::tr("Unable to detect state of CD line.");
184 ::close(modemfd); 184 ::close(modemfd);
185 modemfd = -1; 185 modemfd = -1;
186 return false; 186 return false;
187 } 187 }
188 if ((flags&TIOCM_CD) == 0) { 188 if ((flags&TIOCM_CD) == 0) {
189 errmsg = QObject::tr("The modem is not ready."); 189 errmsg = QObject::tr("The modem is not ready.");
190 ::close(modemfd); 190 ::close(modemfd);
191 modemfd = -1; 191 modemfd = -1;
192 return false; 192 return false;
193 } 193 }
194 } 194 }
195#endif 195#endif
196 196
197 tcdrain (modemfd); 197 tcdrain (modemfd);
@@ -290,108 +290,108 @@ void Modem::readtty(int) {
290 c = buffer[i] & 0x7F; 290 c = buffer[i] & 0x7F;
291 emit charWaiting(c); 291 emit charWaiting(c);
292 } 292 }
293 } 293 }
294} 294}
295 295
296 296
297void Modem::notify(const QObject *receiver, const char *member) { 297void Modem::notify(const QObject *receiver, const char *member) {
298 connect(this, SIGNAL(charWaiting(unsigned char)), receiver, member); 298 connect(this, SIGNAL(charWaiting(unsigned char)), receiver, member);
299 startNotifier(); 299 startNotifier();
300} 300}
301 301
302 302
303void Modem::stop() { 303void Modem::stop() {
304 disconnect(SIGNAL(charWaiting(unsigned char))); 304 disconnect(SIGNAL(charWaiting(unsigned char)));
305 stopNotifier(); 305 stopNotifier();
306} 306}
307 307
308 308
309void Modem::startNotifier() { 309void Modem::startNotifier() {
310 if(modemfd >= 0) { 310 if(modemfd >= 0) {
311 if(sn == 0) { 311 if(sn == 0) {
312 sn = new QSocketNotifier(modemfd, QSocketNotifier::Read, this); 312 sn = new QSocketNotifier(modemfd, QSocketNotifier::Read, this);
313 connect(sn, SIGNAL(activated(int)), SLOT(readtty(int))); 313 connect(sn, SIGNAL(activated(int)), SLOT(readtty(int)));
314 odebug << "QSocketNotifier started!" << oendl; 314 odebug << "QSocketNotifier started!" << oendl;
315 } else { 315 } else {
316 odebug << "QSocketNotifier re-enabled!" << oendl; 316 odebug << "QSocketNotifier re-enabled!" << oendl;
317 sn->setEnabled(true); 317 sn->setEnabled(true);
318 } 318 }
319 } 319 }
320} 320}
321 321
322 322
323void Modem::stopNotifier() { 323void Modem::stopNotifier() {
324 if(sn != 0) { 324 if(sn != 0) {
325 sn->setEnabled(false); 325 sn->setEnabled(false);
326 disconnect(sn); 326 disconnect(sn);
327 delete sn; 327 delete sn;
328 sn = 0; 328 sn = 0;
329 odebug << "QSocketNotifier stopped!" << oendl; 329 odebug << "QSocketNotifier stopped!" << oendl;
330 } 330 }
331} 331}
332 332
333 333
334void Modem::flush() { 334void Modem::flush() {
335 char c; 335 char c;
336 while(read(modemfd, &c, 1) == 1); 336 while(read(modemfd, &c, 1) == 1);
337} 337}
338 338
339 339
340bool Modem::writeChar(unsigned char c) { 340bool Modem::writeChar(unsigned char c) {
341 int s; 341 int s;
342 do { 342 do {
343 s = write(modemfd, &c, 1); 343 s = write(modemfd, &c, 1);
344 if (s < 0) { 344 if (s < 0) {
345 oerr << "write() in Modem::writeChar failed" << oendl; 345 oerr << "write() in Modem::writeChar failed" << oendl;
346 return false; 346 return false;
347 } 347 }
348 } while(s == 0); 348 } while(s == 0);
349 349
350 return true; 350 return true;
351} 351}
352 352
353 353
354bool Modem::writeLine(const char *buf) { 354bool Modem::writeLine(const char *buf) {
355 int len = strlen(buf); 355 int len = strlen(buf);
356 char *b = new char[len+2]; 356 char *b = new char[len+2];
357 memcpy(b, buf, len); 357 memcpy(b, buf, len);
358 // different modems seem to need different line terminations 358 // different modems seem to need different line terminations
359 QString term = _pppdata->enter(); 359 QString term = _pppdata->enter();
360 if(term == "LF") 360 if(term == "LF")
361 b[len++]='\n'; 361 b[len++]='\n';
362 else if(term == "CR") 362 else if(term == "CR")
363 b[len++]='\r'; 363 b[len++]='\r';
364 else if(term == "CR/LF") { 364 else if(term == "CR/LF") {
365 b[len++]='\r'; 365 b[len++]='\r';
366 b[len++]='\n'; 366 b[len++]='\n';
367 } 367 }
368 int l = len; 368 int l = len;
369 while(l) { 369 while(l) {
370 int wr = write(modemfd, &b[len-l], l); 370 int wr = write(modemfd, &b[len-l], l);
371 if(wr < 0) { 371 if(wr < 0) {
372 // TODO do something meaningful with the error code (or ignore it 372 // TODO do something meaningful with the error code (or ignore it
373 oerr << "write() in Modem::writeLine failed" << oendl; 373 oerr << "write() in Modem::writeLine failed" << oendl;
374 delete[] b; 374 delete[] b;
375 return false; 375 return false;
376 } 376 }
377 l -= wr; 377 l -= wr;
378 } 378 }
379 delete[] b; 379 delete[] b;
380 return true; 380 return true;
381} 381}
382 382
383 383
384bool Modem::hangup() { 384bool Modem::hangup() {
385 // this should really get the modem to hang up and go into command mode 385 // this should really get the modem to hang up and go into command mode
386 // If anyone sees a fault in the following please let me know, since 386 // If anyone sees a fault in the following please let me know, since
387 // this is probably the most imporant snippet of code in the whole of 387 // this is probably the most imporant snippet of code in the whole of
388 // kppp. If people complain about kppp being stuck, this piece of code 388 // kppp. If people complain about kppp being stuck, this piece of code
389 // is most likely the reason. 389 // is most likely the reason.
390 struct termios temptty; 390 struct termios temptty;
391 391
392 if(modemfd >= 0) { 392 if(modemfd >= 0) {
393 393
394 // is this Escape & HangupStr stuff really necessary ? (Harri) 394 // is this Escape & HangupStr stuff really necessary ? (Harri)
395 395
396 if (data_mode) escape_to_command_mode(); 396 if (data_mode) escape_to_command_mode();
397 397
@@ -458,49 +458,49 @@ void Modem::escape_to_command_mode() {
458 458
459 // +3 because quiet time must be greater than guard time. 459 // +3 because quiet time must be greater than guard time.
460 usleep((_pppdata->modemEscapeGuardTime()+3)*20000); 460 usleep((_pppdata->modemEscapeGuardTime()+3)*20000);
461 QCString tmp = _pppdata->modemEscapeStr().local8Bit(); 461 QCString tmp = _pppdata->modemEscapeStr().local8Bit();
462 write(modemfd, tmp.data(), tmp.length()); 462 write(modemfd, tmp.data(), tmp.length());
463 tcflush(modemfd, TCIOFLUSH); 463 tcflush(modemfd, TCIOFLUSH);
464 usleep((_pppdata->modemEscapeGuardTime()+3)*20000); 464 usleep((_pppdata->modemEscapeGuardTime()+3)*20000);
465 465
466 data_mode = false; 466 data_mode = false;
467} 467}
468 468
469 469
470const QString Modem::modemMessage() { 470const QString Modem::modemMessage() {
471 return errmsg; 471 return errmsg;
472} 472}
473 473
474 474
475QString Modem::parseModemSpeed(const QString &s) { 475QString Modem::parseModemSpeed(const QString &s) {
476 // this is a small (and bad) parser for modem speeds 476 // this is a small (and bad) parser for modem speeds
477 int rx = -1; 477 int rx = -1;
478 int tx = -1; 478 int tx = -1;
479 int i; 479 int i;
480 QString result; 480 QString result;
481 481
482 odebug << "Modem reported result string: " << s.latin1() << "" << oendl; 482 odebug << "Modem reported result string: " << s.latin1() << "" << oendl;
483 483
484 const int RXMAX = 7; 484 const int RXMAX = 7;
485 const int TXMAX = 2; 485 const int TXMAX = 2;
486 QRegExp rrx[RXMAX] = { 486 QRegExp rrx[RXMAX] = {
487 QRegExp("[0-9]+[:/ ]RX", false), 487 QRegExp("[0-9]+[:/ ]RX", false),
488 QRegExp("[0-9]+RX", false), 488 QRegExp("[0-9]+RX", false),
489 QRegExp("[/: -][0-9]+[/: ]", false), 489 QRegExp("[/: -][0-9]+[/: ]", false),
490 QRegExp("[/: -][0-9]+$", false), 490 QRegExp("[/: -][0-9]+$", false),
491 QRegExp("CARRIER [^0-9]*[0-9]+", false), 491 QRegExp("CARRIER [^0-9]*[0-9]+", false),
492 QRegExp("CONNECT [^0-9]*[0-9]+", false), 492 QRegExp("CONNECT [^0-9]*[0-9]+", false),
493 QRegExp("[0-9]+") // panic mode 493 QRegExp("[0-9]+") // panic mode
494 }; 494 };
495 495
496 QRegExp trx[TXMAX] = { 496 QRegExp trx[TXMAX] = {
497 QRegExp("[0-9]+[:/ ]TX", false), 497 QRegExp("[0-9]+[:/ ]TX", false),
498 QRegExp("[0-9]+TX", false) 498 QRegExp("[0-9]+TX", false)
499 }; 499 };
500 500
501 for(i = 0; i < RXMAX; i++) { 501 for(i = 0; i < RXMAX; i++) {
502 int len, idx, result; 502 int len, idx, result;
503 if((idx = rrx[i].match(s,0,&len)) > -1) { 503 if((idx = rrx[i].match(s,0,&len)) > -1) {
504// if((idx = rrx[i].search(s)) > -1) { 504// if((idx = rrx[i].search(s)) > -1) {
505 // len = rrx[i].matchedLength(); 505 // len = rrx[i].matchedLength();
506 506
@@ -544,155 +544,155 @@ QString Modem::parseModemSpeed(const QString &s) {
544 // be converted to an int. 544 // be converted to an int.
545 // 545 //
546 if((idx = rrx[RXMAX-1].match(sub,0,&len)) > -1) { 546 if((idx = rrx[RXMAX-1].match(sub,0,&len)) > -1) {
547// if((idx = rrx[RXMAX-1].search(sub)) > -1) { 547// if((idx = rrx[RXMAX-1].search(sub)) > -1) {
548// len = rrx[RXMAX-1].matchedLength(); 548// len = rrx[RXMAX-1].matchedLength();
549 sub = sub.mid(idx, len); 549 sub = sub.mid(idx, len);
550 result = sub.toInt(); 550 result = sub.toInt();
551 if(result > 0) { 551 if(result > 0) {
552 tx = result; 552 tx = result;
553 break; 553 break;
554 } 554 }
555 } 555 }
556 } 556 }
557 } 557 }
558 558
559 if(rx == -1 && tx == -1) 559 if(rx == -1 && tx == -1)
560 result = QObject::tr("Unknown speed"); 560 result = QObject::tr("Unknown speed");
561 else if(tx == -1) 561 else if(tx == -1)
562 result.setNum(rx); 562 result.setNum(rx);
563 else if(rx == -1) // should not happen 563 else if(rx == -1) // should not happen
564 result.setNum(tx); 564 result.setNum(tx);
565 else 565 else
566 result.sprintf("%d/%d", rx, tx); 566 result.sprintf("%d/%d", rx, tx);
567 567
568 odebug << "The parsed result is: " << result.latin1() << "" << oendl; 568 odebug << "The parsed result is: " << result.latin1() << "" << oendl;
569 569
570 return result; 570 return result;
571} 571}
572 572
573 573
574// Lock modem device. Returns 0 on success 1 if the modem is locked and -1 if 574// Lock modem device. Returns 0 on success 1 if the modem is locked and -1 if
575// a lock file can't be created ( permission problem ) 575// a lock file can't be created ( permission problem )
576int Modem::lockdevice() { 576int Modem::lockdevice() {
577 int fd; 577 int fd;
578 char newlock[80]=""; // safe 578 char newlock[80]=""; // safe
579 579
580 if(!_pppdata->modemLockFile()) { 580 if(!_pppdata->modemLockFile()) {
581 odebug << "The user doesn't want a lockfile." << oendl; 581 odebug << "The user doesn't want a lockfile." << oendl;
582 return 0; 582 return 0;
583 } 583 }
584 584
585 if (modem_is_locked) 585 if (modem_is_locked)
586 return 1; 586 return 1;
587 587
588 QString lockfile = LOCK_DIR"/LCK.."; 588 QString lockfile = LOCK_DIR"/LCK..";
589 lockfile += _pppdata->modemDevice().mid(5); // append everything after /dev/ 589 lockfile += _pppdata->modemDevice().mid(5); // append everything after /dev/
590 590
591 if(access(QFile::encodeName(lockfile), F_OK) == 0) { 591 if(access(QFile::encodeName(lockfile), F_OK) == 0) {
592// if ((fd = Requester::rq-> 592// if ((fd = Requester::rq->
593if ((fd = openLockfile(QFile::encodeName(lockfile), O_RDONLY)) >= 0) { 593if ((fd = openLockfile(QFile::encodeName(lockfile), O_RDONLY)) >= 0) {
594 // Mario: it's not necessary to read more than lets say 32 bytes. If 594 // Mario: it's not necessary to read more than lets say 32 bytes. If
595 // file has more than 32 bytes, skip the rest 595 // file has more than 32 bytes, skip the rest
596 char oldlock[33]; // safe 596 char oldlock[33]; // safe
597 int sz = read(fd, &oldlock, 32); 597 int sz = read(fd, &oldlock, 32);
598 close (fd); 598 close (fd);
599 if (sz <= 0) 599 if (sz <= 0)
600 return 1; 600 return 1;
601 oldlock[sz] = '\0'; 601 oldlock[sz] = '\0';
602 602
603 odebug << "Device is locked by: " << oldlock << "" << oendl; 603 odebug << "Device is locked by: " << oldlock << "" << oendl;
604 604
605 int oldpid; 605 int oldpid;
606 int match = sscanf(oldlock, "%d", &oldpid); 606 int match = sscanf(oldlock, "%d", &oldpid);
607 607
608 // found a pid in lockfile ? 608 // found a pid in lockfile ?
609 if (match < 1 || oldpid <= 0) 609 if (match < 1 || oldpid <= 0)
610 return 1; 610 return 1;
611 611
612 // check if process exists 612 // check if process exists
613 if (kill((pid_t)oldpid, 0) == 0 || errno != ESRCH) 613 if (kill((pid_t)oldpid, 0) == 0 || errno != ESRCH)
614 return 1; 614 return 1;
615 615
616 odebug << "lockfile is stale" << oendl; 616 odebug << "lockfile is stale" << oendl;
617 } 617 }
618 } 618 }
619 619
620 fd = openLockfile(_pppdata->modemDevice(),O_WRONLY|O_TRUNC|O_CREAT); 620 fd = openLockfile(_pppdata->modemDevice(),O_WRONLY|O_TRUNC|O_CREAT);
621 if(fd >= 0) { 621 if(fd >= 0) {
622 sprintf(newlock,"%010d\n", getpid()); 622 sprintf(newlock,"%010d\n", getpid());
623 odebug << "Locking Device: " << newlock << "" << oendl; 623 odebug << "Locking Device: " << newlock << "" << oendl;
624 624
625 write(fd, newlock, strlen(newlock)); 625 write(fd, newlock, strlen(newlock));
626 close(fd); 626 close(fd);
627 modem_is_locked=true; 627 modem_is_locked=true;
628 628
629 return 0; 629 return 0;
630 } 630 }
631 631
632 return -1; 632 return -1;
633 633
634} 634}
635 635
636 636
637// UnLock modem device 637// UnLock modem device
638void Modem::unlockdevice() { 638void Modem::unlockdevice() {
639 if (modem_is_locked) { 639 if (modem_is_locked) {
640 odebug << "UnLocking Modem Device" << oendl; 640 odebug << "UnLocking Modem Device" << oendl;
641 close(modemfd); 641 close(modemfd);
642 modemfd = -1; 642 modemfd = -1;
643 unlink(lockfile); 643 unlink(lockfile);
644 lockfile[0] = '\0'; 644 lockfile[0] = '\0';
645 modem_is_locked=false; 645 modem_is_locked=false;
646 } 646 }
647} 647}
648 648
649int Modem::openLockfile( QString lockfile, int flags) 649int Modem::openLockfile( QString lockfile, int flags)
650{ 650{
651 int fd; 651 int fd;
652 int mode; 652 int mode;
653 flags = O_RDONLY; 653 flags = O_RDONLY;
654 if(flags == O_WRONLY|O_TRUNC|O_CREAT) 654 if(flags == O_WRONLY|O_TRUNC|O_CREAT)
655 mode = 0644; 655 mode = 0644;
656 else 656 else
657 mode = 0; 657 mode = 0;
658 658
659 lockfile = LOCK_DIR; 659 lockfile = LOCK_DIR;
660 lockfile += "/LCK.."; 660 lockfile += "/LCK..";
661 lockfile += device.right( device.length() - device.findRev("/") -1 ); 661 lockfile += device.right( device.length() - device.findRev("/") -1 );
662 odebug << "lockfile >" << lockfile.latin1() << "<" << oendl; 662 odebug << "lockfile >" << lockfile.latin1() << "<" << oendl;
663 // TODO: 663 // TODO:
664 // struct stat st; 664 // struct stat st;
665 // if(stat(lockfile.data(), &st) == -1) { 665 // if(stat(lockfile.data(), &st) == -1) {
666 // if(errno == EBADF) 666 // if(errno == EBADF)
667 // return -1; 667 // return -1;
668 // } else { 668 // } else {
669 // // make sure that this is a regular file 669 // // make sure that this is a regular file
670 // if(!S_ISREG(st.st_mode)) 670 // if(!S_ISREG(st.st_mode))
671 // return -1; 671 // return -1;
672 // } 672 // }
673 if ((fd = open(lockfile, flags, mode)) == -1) { 673 if ((fd = open(lockfile, flags, mode)) == -1) {
674 odebug << "error opening lockfile!" << oendl; 674 odebug << "error opening lockfile!" << oendl;
675 lockfile = QString::null; 675 lockfile = QString::null;
676 fd = open(DEVNULL, O_RDONLY); 676 fd = open(DEVNULL, O_RDONLY);
677 } else 677 } else
678 fchown(fd, 0, 0); 678 fchown(fd, 0, 0);
679 return fd; 679 return fd;
680} 680}
681 681
682 682
683 683
684void alarm_handler(int) { 684void alarm_handler(int) {
685 // fprintf(stderr, "alarm_handler(): Received SIGALRM\n"); 685 // fprintf(stderr, "alarm_handler(): Received SIGALRM\n");
686 686
687 // jump 687 // jump
688 siglongjmp(jmp_buffer, 1); 688 siglongjmp(jmp_buffer, 1);
689} 689}
690 690
691 691
692const char* Modem::authFile(Auth method, int version) { 692const char* Modem::authFile(Auth method, int version) {
693 switch(method|version) { 693 switch(method|version) {
694 case PAP|Original: 694 case PAP|Original:
695 return PAP_AUTH_FILE; 695 return PAP_AUTH_FILE;
696 break; 696 break;
697 case PAP|New: 697 case PAP|New:
698 return PAP_AUTH_FILE".new"; 698 return PAP_AUTH_FILE".new";
@@ -911,175 +911,175 @@ bool Modem::execpppd(const char *arguments) {
911 ::close( m_pppdLOG[0] ); 911 ::close( m_pppdLOG[0] );
912 ::setenv( "LANG", "C", 1 ); // overwrite 912 ::setenv( "LANG", "C", 1 ); // overwrite
913 dup2(m_pppdLOG[1], 11 ); // for logfd 11 913 dup2(m_pppdLOG[1], 11 ); // for logfd 11
914 dup2(modemfd, 0); 914 dup2(modemfd, 0);
915 dup2(modemfd, 1); 915 dup2(modemfd, 1);
916 916
917 917
918 switch (checkForInterface()) { 918 switch (checkForInterface()) {
919 case 1: 919 case 1:
920 fprintf(stderr, "Cannot determine if kernel supports ppp.\n"); 920 fprintf(stderr, "Cannot determine if kernel supports ppp.\n");
921 break; 921 break;
922 case -1: 922 case -1:
923 fprintf(stderr, "Kernel does not support ppp, oops.\n"); 923 fprintf(stderr, "Kernel does not support ppp, oops.\n");
924 break; 924 break;
925 case 0: 925 case 0:
926 fprintf(stderr, "Kernel supports ppp alright.\n"); 926 fprintf(stderr, "Kernel supports ppp alright.\n");
927 break; 927 break;
928 } 928 }
929 929
930 execve(pppdPath(), args, 0L); 930 execve(pppdPath(), args, 0L);
931 _exit(0); 931 _exit(0);
932 break; 932 break;
933 933
934 default: 934 default:
935 odebug << "In parent: pppd pid " << pppdPid << "\n" << oendl; 935 odebug << "In parent: pppd pid " << pppdPid << "\n" << oendl;
936 close(modemfd); 936 close(modemfd);
937 937
938 ::close( m_pppdLOG[1] ); 938 ::close( m_pppdLOG[1] );
939 // set it to nonblocking io 939 // set it to nonblocking io
940 int flag = ::fcntl( m_pppdLOG[0], F_GETFL ); 940 int flag = ::fcntl( m_pppdLOG[0], F_GETFL );
941 941
942 if ( !(flag & O_NONBLOCK) ) { 942 if ( !(flag & O_NONBLOCK) ) {
943 odebug << "Setting nonblocking io" << oendl; 943 odebug << "Setting nonblocking io" << oendl;
944 flag |= O_NONBLOCK; 944 flag |= O_NONBLOCK;
945 ::fcntl(m_pppdLOG[0], F_SETFL, flag ); 945 ::fcntl(m_pppdLOG[0], F_SETFL, flag );
946 } 946 }
947 947
948 delete m_modemDebug; 948 delete m_modemDebug;
949 m_modemDebug = new QSocketNotifier(m_pppdLOG[0], QSocketNotifier::Read, this ); 949 m_modemDebug = new QSocketNotifier(m_pppdLOG[0], QSocketNotifier::Read, this );
950 connect(m_modemDebug, SIGNAL(activated(int) ), 950 connect(m_modemDebug, SIGNAL(activated(int) ),
951 this, SLOT(slotModemDebug(int) ) ); 951 this, SLOT(slotModemDebug(int) ) );
952 952
953 modemfd = -1; 953 modemfd = -1;
954 m_pppdDev = QString::fromLatin1("ppp0"); 954 m_pppdDev = QString::fromLatin1("ppp0");
955 return true; 955 return true;
956 break; 956 break;
957 } 957 }
958} 958}
959 959
960 960
961bool Modem::killpppd() { 961bool Modem::killpppd() {
962 odebug << "In killpppd and pid is " << pppdPid << "" << oendl; 962 odebug << "In killpppd and pid is " << pppdPid << "" << oendl;
963 if(pppdPid > 0) { 963 if(pppdPid > 0) {
964 delete m_modemDebug; 964 delete m_modemDebug;
965 m_modemDebug = 0; 965 m_modemDebug = 0;
966 odebug << "In killpppd(): Sending SIGTERM to " << pppdPid << "\n" << oendl; 966 odebug << "In killpppd(): Sending SIGTERM to " << pppdPid << "\n" << oendl;
967 if(kill(pppdPid, SIGTERM) < 0) { 967 if(kill(pppdPid, SIGTERM) < 0) {
968 odebug << "Error terminating " << pppdPid << ". Sending SIGKILL\n" << oendl; 968 odebug << "Error terminating " << pppdPid << ". Sending SIGKILL\n" << oendl;
969 if(kill(pppdPid, SIGKILL) < 0) { 969 if(kill(pppdPid, SIGKILL) < 0) {
970 odebug << "Error killing " << pppdPid << "\n" << oendl; 970 odebug << "Error killing " << pppdPid << "\n" << oendl;
971 return false; 971 return false;
972 } 972 }
973 } 973 }
974 } 974 }
975 return true; 975 return true;
976} 976}
977 977
978 978
979void Modem::parseargs(char* buf, char** args) { 979void Modem::parseargs(char* buf, char** args) {
980 int nargs = 0; 980 int nargs = 0;
981 int quotes; 981 int quotes;
982 982
983 while(nargs < MaxArgs-1 && *buf != '\0') { 983 while(nargs < MaxArgs-1 && *buf != '\0') {
984 984
985 quotes = 0; 985 quotes = 0;
986 986
987 // Strip whitespace. Use nulls, so that the previous argument is 987 // Strip whitespace. Use nulls, so that the previous argument is
988 // terminated automatically. 988 // terminated automatically.
989 989
990 while ((*buf == ' ' ) || (*buf == '\t' ) || (*buf == '\n' ) ) 990 while ((*buf == ' ' ) || (*buf == '\t' ) || (*buf == '\n' ) )
991 *buf++ = '\0'; 991 *buf++ = '\0';
992 992
993 // detect begin of quoted argument 993 // detect begin of quoted argument
994 if (*buf == '"' || *buf == '\'') { 994 if (*buf == '"' || *buf == '\'') {
995 quotes = *buf; 995 quotes = *buf;
996 *buf++ = '\0'; 996 *buf++ = '\0';
997 } 997 }
998 998
999 // save the argument 999 // save the argument
1000 if(*buf != '\0') { 1000 if(*buf != '\0') {
1001 *args++ = buf; 1001 *args++ = buf;
1002 nargs++; 1002 nargs++;
1003 } 1003 }
1004 1004
1005 if (!quotes) 1005 if (!quotes)
1006 while ((*buf != '\0') && (*buf != '\n') && 1006 while ((*buf != '\0') && (*buf != '\n') &&
1007 (*buf != '\t') && (*buf != ' ')) 1007 (*buf != '\t') && (*buf != ' '))
1008 buf++; 1008 buf++;
1009 else { 1009 else {
1010 while ((*buf != '\0') && (*buf != quotes)) 1010 while ((*buf != '\0') && (*buf != quotes))
1011 buf++; 1011 buf++;
1012 *buf++ = '\0'; 1012 *buf++ = '\0';
1013 } 1013 }
1014 } 1014 }
1015 1015
1016 *args = 0L; 1016 *args = 0L;
1017} 1017}
1018 1018
1019bool Modem::execPPPDaemon(const QString & arguments) 1019bool Modem::execPPPDaemon(const QString & arguments)
1020{ 1020{
1021 if(execpppd(arguments)) { 1021 if(execpppd(arguments)) {
1022 _pppdata->setpppdRunning(true); 1022 _pppdata->setpppdRunning(true);
1023 return true; 1023 return true;
1024 } else 1024 } else
1025 return false; 1025 return false;
1026} 1026}
1027 1027
1028void Modem::killPPPDaemon() 1028void Modem::killPPPDaemon()
1029{ 1029{
1030 _pppdata->setpppdRunning(false); 1030 _pppdata->setpppdRunning(false);
1031 killpppd(); 1031 killpppd();
1032} 1032}
1033 1033
1034int Modem::pppdExitStatus() 1034int Modem::pppdExitStatus()
1035{ 1035{
1036 return _pppdExitStatus; 1036 return _pppdExitStatus;
1037} 1037}
1038 1038
1039int Modem::openResolv(int flags) 1039int Modem::openResolv(int flags)
1040{ 1040{
1041 int fd; 1041 int fd;
1042 if ((fd = open(_PATH_RESCONF, flags)) == -1) { 1042 if ((fd = open(_PATH_RESCONF, flags)) == -1) {
1043 odebug << "error opening resolv.conf!" << oendl; 1043 odebug << "error opening resolv.conf!" << oendl;
1044 fd = open(DEVNULL, O_RDONLY); 1044 fd = open(DEVNULL, O_RDONLY);
1045 } 1045 }
1046 return fd; 1046 return fd;
1047} 1047}
1048 1048
1049bool Modem::setHostname(const QString & name) 1049bool Modem::setHostname(const QString & name)
1050{ 1050{
1051 return sethostname(name, name.length()) == 0; 1051 return sethostname(name, name.length()) == 0;
1052} 1052}
1053 1053
1054QString Modem::pppDevice()const { 1054QString Modem::pppDevice()const {
1055 return m_pppdDev; 1055 return m_pppdDev;
1056} 1056}
1057void Modem::setPPPDevice( const QString& dev ) { 1057void Modem::setPPPDevice( const QString& dev ) {
1058 m_pppdDev = dev; 1058 m_pppdDev = dev;
1059} 1059}
1060pid_t Modem::pppPID()const { 1060pid_t Modem::pppPID()const {
1061 return pppdPid; 1061 return pppdPid;
1062} 1062}
1063void Modem::setPPPDPid( pid_t pid ) { 1063void Modem::setPPPDPid( pid_t pid ) {
1064 odebug << "Modem setting pid" << oendl; 1064 odebug << "Modem setting pid" << oendl;
1065 _pppdExitStatus = -1; 1065 _pppdExitStatus = -1;
1066 pppdPid = pid; 1066 pppdPid = pid;
1067 modemfd = -1; 1067 modemfd = -1;
1068} 1068}
1069void Modem::slotModemDebug(int fd) { 1069void Modem::slotModemDebug(int fd) {
1070 char buf[2049]; 1070 char buf[2049];
1071 int len; 1071 int len;
1072 1072
1073 // read in pppd data look for Using interface 1073 // read in pppd data look for Using interface
1074 // then read the interface 1074 // then read the interface
1075 // we limit to 10 device now 0-9 1075 // we limit to 10 device now 0-9
1076 if((len = ::read(fd, buf, 2048)) > 0) { 1076 if((len = ::read(fd, buf, 2048)) > 0) {
1077 buf[len+1] = '\0'; 1077 buf[len+1] = '\0';
1078 char *found; 1078 char *found;
1079 if ( (found = ::strstr(buf, "Using interface ") ) ) { 1079 if ( (found = ::strstr(buf, "Using interface ") ) ) {
1080 found += 16; 1080 found += 16;
1081 m_pppdDev = QString::fromLatin1(found, 5 ); 1081 m_pppdDev = QString::fromLatin1(found, 5 );
1082 m_pppdDev = m_pppdDev.simplifyWhiteSpace(); 1082 m_pppdDev = m_pppdDev.simplifyWhiteSpace();
1083 } 1083 }
1084 } 1084 }
1085} 1085}
diff --git a/noncore/settings/networksettings/wlan/wlanimp2.cpp b/noncore/settings/networksettings/wlan/wlanimp2.cpp
index 4294b12..d36a702 100644
--- a/noncore/settings/networksettings/wlan/wlanimp2.cpp
+++ b/noncore/settings/networksettings/wlan/wlanimp2.cpp
@@ -33,49 +33,49 @@ using namespace Opie::Net;
33#include <qcombobox.h> 33#include <qcombobox.h>
34#include <qlistview.h> 34#include <qlistview.h>
35#include <qvbox.h> 35#include <qvbox.h>
36#include <qprogressbar.h> 36#include <qprogressbar.h>
37 37
38/* STD */ 38/* STD */
39#include <assert.h> 39#include <assert.h>
40#include <errno.h> 40#include <errno.h>
41#include <string.h> 41#include <string.h>
42 42
43#define WIRELESS_OPTS "/etc/pcmcia/wireless.opts" 43#define WIRELESS_OPTS "/etc/pcmcia/wireless.opts"
44#define PREUP "/etc/network/if-pre-up.d/wireless-tools" 44#define PREUP "/etc/network/if-pre-up.d/wireless-tools"
45 45
46/** 46/**
47 * Constructor, read in the wireless.opts file for parsing later. 47 * Constructor, read in the wireless.opts file for parsing later.
48 */ 48 */
49WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : WLAN(parent, name, modal, fl), interface(i), currentProfile("*") { 49WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : WLAN(parent, name, modal, fl), interface(i), currentProfile("*") {
50 interfaces = new Interfaces(); 50 interfaces = new Interfaces();
51 interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, interfaces); 51 interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, interfaces);
52 tabWidget->insertTab(interfaceSetup, "TCP/IP"); 52 tabWidget->insertTab(interfaceSetup, "TCP/IP");
53 53
54 // Check sanity - the existance of the wireless-tools if-pre-up script 54 // Check sanity - the existance of the wireless-tools if-pre-up script
55 QFile file(QString(PREUP)); 55 QFile file(QString(PREUP));
56 if (file.exists()) { 56 if (file.exists()) {
57 owarn << QString("WLANImp: Unable to open /etc/network/if-pre-up.d/wireless-tools") << oendl; 57 owarn << QString("WLANImp: Unable to open /etc/network/if-pre-up.d/wireless-tools") << oendl;
58 } 58 }
59 59
60 connect( rescanButton, SIGNAL( clicked() ), this, SLOT( rescanNeighbourhood() ) ); 60 connect( rescanButton, SIGNAL( clicked() ), this, SLOT( rescanNeighbourhood() ) );
61 connect( netView, SIGNAL( clicked(QListViewItem*) ), this, SLOT( selectNetwork(QListViewItem*) ) ); 61 connect( netView, SIGNAL( clicked(QListViewItem*) ), this, SLOT( selectNetwork(QListViewItem*) ) );
62 netView->setColumnAlignment( col_chn, AlignCenter ); 62 netView->setColumnAlignment( col_chn, AlignCenter );
63 netView->setItemMargin( 3 ); 63 netView->setItemMargin( 3 );
64 netView->setAllColumnsShowFocus( true ); 64 netView->setAllColumnsShowFocus( true );
65 65
66} 66}
67 67
68WLANImp::~WLANImp() { 68WLANImp::~WLANImp() {
69//FIXME: delete interfaces; 69//FIXME: delete interfaces;
70} 70}
71 71
72/** 72/**
73 * Change the profile for both wireless settings and network settings. 73 * Change the profile for both wireless settings and network settings.
74 */ 74 */
75void WLANImp::setProfile(const QString &profile){ 75void WLANImp::setProfile(const QString &profile){
76 interfaceSetup->setProfile(profile); 76 interfaceSetup->setProfile(profile);
77 parseOpts(); 77 parseOpts();
78} 78}
79 79
80void WLANImp::parseOpts() { 80void WLANImp::parseOpts() {
81 bool error; 81 bool error;
@@ -214,49 +214,49 @@ void WLANImp::accept() {
214 QMessageBox::information(this, "Error", "Please select/enter an ESSID.", QMessageBox::Ok); 214 QMessageBox::information(this, "Error", "Please select/enter an ESSID.", QMessageBox::Ok);
215 return; 215 return;
216 } 216 }
217 217
218 if (specifyAp->isChecked() && macEdit->text().isEmpty()) { 218 if (specifyAp->isChecked() && macEdit->text().isEmpty()) {
219 QMessageBox::information(this, "Error", "Please enter the MAC address of the Access Point.", QMessageBox::Ok); 219 QMessageBox::information(this, "Error", "Please enter the MAC address of the Access Point.", QMessageBox::Ok);
220 return; 220 return;
221 } 221 }
222 222
223 // Try to save the interfaces settings. 223 // Try to save the interfaces settings.
224 writeOpts(); 224 writeOpts();
225 225
226 // Close out the dialog 226 // Close out the dialog
227// FIXME: QDialog::accept(); 227// FIXME: QDialog::accept();
228} 228}
229 229
230void WLANImp::writeOpts() { 230void WLANImp::writeOpts() {
231 // eh can't really do anything about it other then return. :-D 231 // eh can't really do anything about it other then return. :-D
232 if(!interfaces->isInterfaceSet()){ 232 if(!interfaces->isInterfaceSet()){
233 QMessageBox::warning(0,"Inface not set","should not happen!!!"); 233 QMessageBox::warning(0,"Inface not set","should not happen!!!");
234 return; 234 return;
235 } 235 }
236 bool error = false; 236 bool error = false;
237 237
238 odebug << "setting wlan interface " << interfaces->getInterfaceName( error ).latin1() << "" << oendl; 238 odebug << "setting wlan interface " << interfaces->getInterfaceName( error ).latin1() << "" << oendl;
239 239
240 if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!"); 240 if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!");
241 241
242 interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText()); 242 interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText());
243 interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText()); 243 interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText());
244 244
245 if (specifyAp->isChecked()) { 245 if (specifyAp->isChecked()) {
246 interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text()); 246 interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text());
247 } else { 247 } else {
248 interfaces->removeInterfaceOption(QString("wireless_ap")); 248 interfaces->removeInterfaceOption(QString("wireless_ap"));
249 } 249 }
250 250
251 if (specifyChan->isChecked()) { 251 if (specifyChan->isChecked()) {
252 interfaces->setInterfaceOption(QString("wireless_channel"), networkChannel->text()); 252 interfaces->setInterfaceOption(QString("wireless_channel"), networkChannel->text());
253 } else { 253 } else {
254 interfaces->removeInterfaceOption(QString("wireless_channel")); 254 interfaces->removeInterfaceOption(QString("wireless_channel"));
255 } 255 }
256 256
257 if (wepEnabled->isChecked()) { 257 if (wepEnabled->isChecked()) {
258 QStringList keyList; 258 QStringList keyList;
259 259
260 if (! keyLineEdit0->text().isNull()) { 260 if (! keyLineEdit0->text().isNull()) {
261 keyList += keyLineEdit0->text(); 261 keyList += keyLineEdit0->text();
262 keyList += "[1]"; 262 keyList += "[1]";
@@ -288,200 +288,199 @@ void WLANImp::writeOpts() {
288 keyList += "[3]"; 288 keyList += "[3]";
289 } else if (keyRadio3->isChecked()) { 289 } else if (keyRadio3->isChecked()) {
290 keyList += "[4]"; 290 keyList += "[4]";
291 } 291 }
292 interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" "))); 292 interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" ")));
293 } else { 293 } else {
294 interfaces->removeInterfaceOption(QString("wireless_key")); 294 interfaces->removeInterfaceOption(QString("wireless_key"));
295 } 295 }
296 interfaces->removeInterfaceOption(QString("wireless_enc")); 296 interfaces->removeInterfaceOption(QString("wireless_enc"));
297 297
298 if(!interfaceSetup->saveChanges()) 298 if(!interfaceSetup->saveChanges())
299 return; 299 return;
300 300
301 QDialog::accept(); 301 QDialog::accept();
302} 302}
303 303
304/* 304/*
305 * Scan for possible wireless networks around... 305 * Scan for possible wireless networks around...
306 * ... powered by Wellenreiter II technology (C) Michael 'Mickey' Lauer <mickeyl@handhelds.org> 306 * ... powered by Wellenreiter II technology (C) Michael 'Mickey' Lauer <mickeyl@handhelds.org>
307 */ 307 */
308 308
309void WLANImp::rescanNeighbourhood() 309void WLANImp::rescanNeighbourhood()
310{ 310{
311 QString name = interface->getInterfaceName(); 311 QString name = interface->getInterfaceName();
312 odebug << "rescanNeighbourhood via '" << name << "'" << oendl; 312 odebug << "rescanNeighbourhood via '" << name << "'" << oendl;
313 313
314 OWirelessNetworkInterface* wiface = static_cast<OWirelessNetworkInterface*>( ONetwork::instance()->interface( name ) ); 314 OWirelessNetworkInterface* wiface = static_cast<OWirelessNetworkInterface*>( ONetwork::instance()->interface( name ) );
315 assert( wiface ); 315 assert( wiface );
316 316
317 // try to guess device type 317 // try to guess device type
318 QString devicetype; 318 QString devicetype;
319 QFile m( "/proc/modules" ); 319 QFile m( "/proc/modules" );
320 if ( m.open( IO_ReadOnly ) ) 320 if ( m.open( IO_ReadOnly ) )
321 { 321 {
322 QString line; 322 QString line;
323 QTextStream modules( &m ); 323 QTextStream modules( &m );
324 while( !modules.atEnd() && !devicetype ) 324 while( !modules.atEnd() && !devicetype )
325 { 325 {
326 modules >> line; 326 modules >> line;
327 if ( line.contains( "cisco" ) ) devicetype = "cisco"; 327 if ( line.contains( "cisco" ) ) devicetype = "cisco";
328 else if ( line.contains( "hostap" ) ) devicetype = "hostap"; 328 else if ( line.contains( "hostap" ) ) devicetype = "hostap";
329 else if ( line.contains( "prism" ) ) devicetype = "wlan-ng"; /* puke */ 329 else if ( line.contains( "prism" ) ) devicetype = "wlan-ng"; /* puke */
330 else if ( line.contains( "orinoco" ) ) devicetype = "orinoco"; 330 else if ( line.contains( "orinoco" ) ) devicetype = "orinoco";
331 } 331 }
332 } 332 }
333 if ( devicetype.isEmpty() ) 333 if ( devicetype.isEmpty() )
334 { 334 {
335 owarn << "rescanNeighbourhood(): couldn't guess device type :(" << oendl; 335 owarn << "rescanNeighbourhood(): couldn't guess device type :(" << oendl;
336 return; 336 return;
337 } 337 }
338 else 338 else
339 { 339 {
340 odebug << "rescanNeighbourhood(): device type seems to be '" << devicetype << "'" << oendl; 340 odebug << "rescanNeighbourhood(): device type seems to be '" << devicetype << "'" << oendl;
341 } 341 }
342 342
343 // configure interface to receive 802.11 management frames 343 // configure interface to receive 802.11 management frames
344 344
345 wiface->setUp( true ); 345 wiface->setUp( true );
346 wiface->setPromiscuousMode( true ); 346 wiface->setPromiscuousMode( true );
347 347
348 if ( devicetype == "cisco" ) wiface->setMonitoring( new OCiscoMonitoringInterface( wiface, false ) ); 348 if ( devicetype == "cisco" ) wiface->setMonitoring( new OCiscoMonitoringInterface( wiface, false ) );
349 else if ( devicetype == "hostap" ) wiface->setMonitoring( new OHostAPMonitoringInterface( wiface, false ) ); 349 else if ( devicetype == "hostap" ) wiface->setMonitoring( new OHostAPMonitoringInterface( wiface, false ) );
350 else if ( devicetype == "wlan-ng" ) wiface->setMonitoring( new OWlanNGMonitoringInterface( wiface, false ) ); 350 else if ( devicetype == "wlan-ng" ) wiface->setMonitoring( new OWlanNGMonitoringInterface( wiface, false ) );
351 else if ( devicetype == "orinoco" ) wiface->setMonitoring( new OOrinocoMonitoringInterface( wiface, false ) ); 351 else if ( devicetype == "orinoco" ) wiface->setMonitoring( new OOrinocoMonitoringInterface( wiface, false ) );
352 else 352 else
353 { 353 {
354 odebug << "rescanNeighbourhood(): unsupported device type for monitoring :(" << oendl; 354 odebug << "rescanNeighbourhood(): unsupported device type for monitoring :(" << oendl;
355 return; 355 return;
356 } 356 }
357 357
358 wiface->setMode( "monitor" ); 358 wiface->setMode( "monitor" );
359 if ( wiface->mode() != "monitor" ) 359 if ( wiface->mode() != "monitor" )
360 { 360 {
361 owarn << "rescanNeighbourhood(): Unable to bring device into monitor mode (" << strerror( errno ) << ")." << oendl; 361 owarn << "rescanNeighbourhood(): Unable to bring device into monitor mode (" << strerror( errno ) << ")." << oendl;
362 return; 362 return;
363 } 363 }
364 364
365 // open a packet capturer 365 // open a packet capturer
366 OPacketCapturer* cap = new OPacketCapturer(); 366 OPacketCapturer* cap = new OPacketCapturer();
367 cap->open( name ); 367 cap->open( name );
368 if ( !cap->isOpen() ) 368 if ( !cap->isOpen() )
369 { 369 {
370 owarn << "rescanNeighbourhood(): Unable to open libpcap (" << strerror( errno ) << ")." << oendl; 370 owarn << "rescanNeighbourhood(): Unable to open libpcap (" << strerror( errno ) << ")." << oendl;
371 return; 371 return;
372 } 372 }
373 373
374 // display splash screen 374 // display splash screen
375 QFrame* splash = new QFrame( this, "splash", false, WStyle_StaysOnTop | WStyle_DialogBorder | WStyle_Customize ); 375 QFrame* splash = new QFrame( this, "splash", false, WStyle_StaysOnTop | WStyle_DialogBorder | WStyle_Customize );
376 splash->setLineWidth( 2 ); 376 splash->setLineWidth( 2 );
377 splash->setFrameStyle( QFrame::Panel | QFrame::Raised ); 377 splash->setFrameStyle( QFrame::Panel | QFrame::Raised );
378 QVBoxLayout* vbox = new QVBoxLayout( splash, 4, 4 ); 378 QVBoxLayout* vbox = new QVBoxLayout( splash, 4, 4 );
379 QLabel* lab = new QLabel( "<center><b>Scanning...</b><br>Please Wait...</center>", splash ); 379 QLabel* lab = new QLabel( "<center><b>Scanning...</b><br>Please Wait...</center>", splash );
380 QProgressBar* pb = new QProgressBar( wiface->channels(), splash ); 380 QProgressBar* pb = new QProgressBar( wiface->channels(), splash );
381 vbox->addWidget( lab ); 381 vbox->addWidget( lab );
382 vbox->addWidget( pb ); 382 vbox->addWidget( pb );
383 pb->setCenterIndicator( true ); 383 pb->setCenterIndicator( true );
384 pb->setFixedHeight( pb->sizeHint().height() ); 384 pb->setFixedHeight( pb->sizeHint().height() );
385 QWidget* widgetDesktop = qApp->desktop(); 385 QWidget* widgetDesktop = qApp->desktop();
386 int dw = widgetDesktop->width(); 386 int dw = widgetDesktop->width();
387 int dh = widgetDesktop->height(); 387 int dh = widgetDesktop->height();
388 int pw = vbox->sizeHint().width(); 388 int pw = vbox->sizeHint().width();
389 int ph = vbox->sizeHint().height(); 389 int ph = vbox->sizeHint().height();
390 splash->setGeometry((dw-pw)/2,(dh-ph)/2,pw,ph); 390 splash->setGeometry((dw-pw)/2,(dh-ph)/2,pw,ph);
391 splash->show(); 391 splash->show();
392 splash->raise(); 392 splash->raise();
393 qApp->processEvents(); 393 qApp->processEvents();
394 394
395 // set capturer to non-blocking mode 395 // set capturer to non-blocking mode
396 cap->setBlocking( false ); 396 cap->setBlocking( false );
397 397
398 for ( int i = 1; i <= wiface->channels(); ++i ) 398 for ( int i = 1; i <= wiface->channels(); ++i )
399 { 399 {
400 wiface->setChannel( i ); 400 wiface->setChannel( i );
401 pb->setProgress( i ); 401 pb->setProgress( i );
402 qApp->processEvents(); 402 qApp->processEvents();
403 odebug << "rescanNeighbourhood(): listening on channel " << i << "..." << oendl; 403 odebug << "rescanNeighbourhood(): listening on channel " << i << "..." << oendl;
404 OPacket* p = cap->next( 1000 ); 404 OPacket* p = cap->next( 1000 );
405 if ( !p ) 405 if ( !p )
406 { 406 {
407 odebug << "rescanNeighbourhood(): nothing received on channel " << i << "" << oendl; 407 odebug << "rescanNeighbourhood(): nothing received on channel " << i << "" << oendl;
408 } 408 }
409 else 409 else
410 { 410 {
411 odebug << "rescanNeighbourhood(): TADAA - something came in on channel " << i << "" << oendl; 411 odebug << "rescanNeighbourhood(): TADAA - something came in on channel " << i << "" << oendl;
412 handlePacket( p ); 412 handlePacket( p );
413 } 413 }
414 } 414 }
415 415
416 cap->close(); 416 cap->close();
417 wiface->setMode( "managed" ); // TODO: use previous mode 417 wiface->setMode( "managed" ); // TODO: use previous mode
418 wiface->setPromiscuousMode( false ); 418 wiface->setPromiscuousMode( false );
419 419
420 splash->hide(); 420 splash->hide();
421 delete splash; 421 delete splash;
422 422
423} 423}
424 424
425void WLANImp::handlePacket( OPacket* p ) 425void WLANImp::handlePacket( OPacket* p )
426{ 426{
427 427
428 // check if we received a beacon frame 428 // check if we received a beacon frame
429 OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) ); 429 OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) );
430 if ( beacon && beacon->managementType() == "Beacon" ) 430 if ( beacon && beacon->managementType() == "Beacon" )
431 { 431 {
432 432
433 QString type; 433 QString type;
434 if ( beacon->canIBSS() ) 434 if ( beacon->canIBSS() )
435 { 435 {
436 type = "adhoc"; 436 type = "adhoc";
437 } 437 }
438 else if ( beacon->canESS() ) 438 else if ( beacon->canESS() )
439 { 439 {
440 type = "managed"; 440 type = "managed";
441 } 441 }
442 else 442 else
443 { 443 {
444 owarn << "handlePacket(): invalid frame [possibly noise] detected!" << oendl; 444 owarn << "handlePacket(): invalid frame [possibly noise] detected!" << oendl;
445 return; 445 return;
446 } 446 }
447 447
448 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); 448 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) );
449 QString essid = ssid ? ssid->ID() : QString("<unknown>"); 449 QString essid = ssid ? ssid->ID() : QString("<unknown>");
450 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) ); 450 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) );
451 int channel = ds ? ds->channel() : -1; 451 int channel = ds ? ds->channel() : -1;
452 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); 452 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) );
453 displayFoundNetwork( type, channel, essid, header->macAddress2() ); 453 displayFoundNetwork( type, channel, essid, header->macAddress2() );
454 } 454 }
455} 455}
456 456
457 457
458void WLANImp::displayFoundNetwork( const QString& mode, int channel, const QString& ssid, const OMacAddress& mac ) 458void WLANImp::displayFoundNetwork( const QString& mode, int channel, const QString& ssid, const OMacAddress& mac )
459{ 459{
460 460
461 qDebug( "found network: <%s>, chn %d, ssid '%s', mac '%s'", (const char*) mode, channel, 461 odebug << "found network: <" << (const char*) mode << ">, chn " << channel
462 (const char*) ssid, 462 << ", ssid '" << (const char*) ssid << "', mac '" << (const char*) mac.toString() << "'" << oendl;
463 (const char*) mac.toString() );
464 463
465 QListViewItemIterator it( netView ); 464 QListViewItemIterator it( netView );
466 while ( it.current() && it.current()->text( col_ssid ) != ssid ) ++it; 465 while ( it.current() && it.current()->text( col_ssid ) != ssid ) ++it;
467 if ( !it.current() ) // ssid didn't show up yet 466 if ( !it.current() ) // ssid didn't show up yet
468 { 467 {
469 QListViewItem* item = new QListViewItem( netView, mode.left( 1 ).upper(), ssid, QString::number( channel ), mac.toString() ); 468 QListViewItem* item = new QListViewItem( netView, mode.left( 1 ).upper(), ssid, QString::number( channel ), mac.toString() );
470 QString name; 469 QString name;
471 name.sprintf( "networksettings/%s", (const char*) mode ); 470 name.sprintf( "networksettings/%s", (const char*) mode );
472 item->setPixmap( col_mode, Resource::loadPixmap( name ) ); 471 item->setPixmap( col_mode, Resource::loadPixmap( name ) );
473 qApp->processEvents(); 472 qApp->processEvents();
474 } 473 }
475 474
476} 475}
477 476
478 477
479void WLANImp::selectNetwork( QListViewItem* item ) 478void WLANImp::selectNetwork( QListViewItem* item )
480{ 479{
481 bool ok; 480 bool ok;
482 if ( item ) 481 if ( item )
483 { 482 {
484 specifyAp->setChecked(true); 483 specifyAp->setChecked(true);
485 macEdit->setText( item->text( col_mac ) ); 484 macEdit->setText( item->text( col_mac ) );
486 specifyChan->setChecked( item->text( col_mode ) == "A" ); 485 specifyChan->setChecked( item->text( col_mode ) == "A" );
487 networkChannel->setValue( item->text( col_chn ).toInt( &ok ) ); 486 networkChannel->setValue( item->text( col_chn ).toInt( &ok ) );