summaryrefslogtreecommitdiff
authorar <ar>2004-05-15 22:36:18 (UTC)
committer ar <ar>2004-05-15 22:36:18 (UTC)
commit736a153edfac343d0794ecafc5dc2f2c405260a7 (patch) (unidiff)
treeebb41331403fa78769df2a344bfe12bbd1df6c46
parentd4a82558ff3ae6ed7bbc5dbc9857461057eb3da3 (diff)
downloadopie-736a153edfac343d0794ecafc5dc2f2c405260a7.zip
opie-736a153edfac343d0794ecafc5dc2f2c405260a7.tar.gz
opie-736a153edfac343d0794ecafc5dc2f2c405260a7.tar.bz2
- convert qDebug to odebug
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
@@ -1,89 +1,90 @@
1/* 1/*
2                This file is part of the OPIE Project 2                This file is part of the OPIE Project
3 Copyright (c) 2002 Trolltech AS <info@trolltech.com> 3 Copyright (c) 2002 Trolltech AS <info@trolltech.com>
4 =. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> 4 =. Copyright (c) 2002 Dan Williams <williamsdr@acm.org>
5             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> 5             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org>
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This file is free software; you can 7 _;:,     .>    :=|. This file is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU General Public 9:`=1 )Y*s>-.--   : the terms of the GNU General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This file is distributed in the hope that 14    .i_,=:_.      -<s. This file is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
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
66#include <qstylefactory.h> 67#include <qstylefactory.h>
67#endif 68#endif
68#include <qtoolbutton.h> 69#include <qtoolbutton.h>
69#include <qwindowsstyle.h> 70#include <qwindowsstyle.h>
70#include <qlistview.h> 71#include <qlistview.h>
71#include <qheader.h> 72#include <qheader.h>
72#include <qvbox.h> 73#include <qvbox.h>
73#include <qwhatsthis.h> 74#include <qwhatsthis.h>
74 75
75using namespace Opie; 76using namespace Opie;
76using namespace Opie::Ui; 77using namespace Opie::Ui;
77using namespace Opie::Core; 78using namespace Opie::Core;
78 79
79class DefaultWindowDecoration : public WindowDecorationInterface 80class DefaultWindowDecoration : public WindowDecorationInterface
80{ 81{
81public: 82public:
82 DefaultWindowDecoration() : ref(0) {} 83 DefaultWindowDecoration() : ref(0) {}
83 QString name() const 84 QString name() const
84 { 85 {
85 return "Default"; 86 return "Default";
86 } 87 }
87 QPixmap icon() const 88 QPixmap icon() const
88 { 89 {
89 return QPixmap(); 90 return QPixmap();
@@ -787,97 +788,98 @@ void Appearance::addExcept ( )
787 ExceptListItem *it = new ExceptListItem ( m_except, 0, tr( "<new>" ), true, true, true ); 788 ExceptListItem *it = new ExceptListItem ( m_except, 0, tr( "<new>" ), true, true, true );
788 m_except-> ensureItemVisible ( it ); 789 m_except-> ensureItemVisible ( it );
789 m_except-> setSelected ( it, true ); 790 m_except-> setSelected ( it, true );
790} 791}
791 792
792void Appearance::delExcept ( ) 793void Appearance::delExcept ( )
793{ 794{
794 if ( m_except-> selectedItem ( )) 795 if ( m_except-> selectedItem ( ))
795 { 796 {
796 m_except-> setFocus ( ); 797 m_except-> setFocus ( );
797 delete m_except-> selectedItem ( ); 798 delete m_except-> selectedItem ( );
798 } 799 }
799} 800}
800 801
801void Appearance::upExcept ( ) 802void Appearance::upExcept ( )
802{ 803{
803 ExceptListItem *it = (ExceptListItem *) m_except-> selectedItem ( ); 804 ExceptListItem *it = (ExceptListItem *) m_except-> selectedItem ( );
804 805
805 if ( it && it-> itemAbove ( )) 806 if ( it && it-> itemAbove ( ))
806 it-> itemAbove ( )-> moveItem ( it ); 807 it-> itemAbove ( )-> moveItem ( it );
807} 808}
808 809
809void Appearance::downExcept ( ) 810void Appearance::downExcept ( )
810{ 811{
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;
860 it-> listView ( )-> setFocus ( ); 862 it-> listView ( )-> setFocus ( );
861 } 863 }
862 else 864 else
863 QLineEdit::keyPressEvent ( e ); 865 QLineEdit::keyPressEvent ( e );
864 } 866 }
865 867
866private: 868private:
867 ExceptListItem *it; 869 ExceptListItem *it;
868 bool m_out; 870 bool m_out;
869}; 871};
870 872
871void Appearance::clickedExcept ( QListViewItem *item, const QPoint &, int c ) 873void Appearance::clickedExcept ( QListViewItem *item, const QPoint &, int c )
872{ 874{
873 if ( !item || c < 0 || c > 3 ) 875 if ( !item || c < 0 || c > 3 )
874 return; 876 return;
875 877
876 ExceptListItem *it = (ExceptListItem *) item; 878 ExceptListItem *it = (ExceptListItem *) item;
877 879
878 if ( c == 0 ) 880 if ( c == 0 )
879 it-> setNoStyle ( !it-> noStyle ( )); 881 it-> setNoStyle ( !it-> noStyle ( ));
880 else if ( c == 1 ) 882 else if ( c == 1 )
881 it-> setNoFont ( !it-> noFont ( )); 883 it-> setNoFont ( !it-> noFont ( ));
882 else if ( c == 2 ) 884 else if ( c == 2 )
883 it-> setNoDeco ( !it-> noDeco ( )); 885 it-> setNoDeco ( !it-> noDeco ( ));
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
@@ -125,97 +125,97 @@ speed_t Modem::modemspeed() {
125 return B2400; 125 return B2400;
126 break; 126 break;
127 case 96: 127 case 96:
128 return B9600; 128 return B9600;
129 break; 129 break;
130 case 192: 130 case 192:
131 return B19200; 131 return B19200;
132 break; 132 break;
133 case 384: 133 case 384:
134 return B38400; 134 return B38400;
135 break; 135 break;
136#ifdef B57600 136#ifdef B57600
137 case 576: 137 case 576:
138 return B57600; 138 return B57600;
139 break; 139 break;
140#endif 140#endif
141 141
142#ifdef B115200 142#ifdef B115200
143 case 1152: 143 case 1152:
144 return B115200; 144 return B115200;
145 break; 145 break;
146#endif 146#endif
147 147
148#ifdef B230400 148#ifdef B230400
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);
198 tcflush (modemfd, TCIOFLUSH); 198 tcflush (modemfd, TCIOFLUSH);
199 199
200 if(tcgetattr(modemfd, &tty) < 0){ 200 if(tcgetattr(modemfd, &tty) < 0){
201 // this helps in some cases 201 // this helps in some cases
202 tcsendbreak(modemfd, 0); 202 tcsendbreak(modemfd, 0);
203 sleep(1); 203 sleep(1);
204 if(tcgetattr(modemfd, &tty) < 0){ 204 if(tcgetattr(modemfd, &tty) < 0){
205 errmsg = QObject::tr("The modem is busy."); 205 errmsg = QObject::tr("The modem is busy.");
206 ::close(modemfd); 206 ::close(modemfd);
207 modemfd = -1; 207 modemfd = -1;
208 return false; 208 return false;
209 } 209 }
210 } 210 }
211 211
212 memset(&initial_tty,'\0',sizeof(initial_tty)); 212 memset(&initial_tty,'\0',sizeof(initial_tty));
213 213
214 initial_tty = tty; 214 initial_tty = tty;
215 215
216 tty.c_cc[VMIN] = 0; // nonblocking 216 tty.c_cc[VMIN] = 0; // nonblocking
217 tty.c_cc[VTIME] = 0; 217 tty.c_cc[VTIME] = 0;
218 tty.c_oflag = 0; 218 tty.c_oflag = 0;
219 tty.c_lflag = 0; 219 tty.c_lflag = 0;
220 220
221 tty.c_cflag &= ~(CSIZE | CSTOPB | PARENB); 221 tty.c_cflag &= ~(CSIZE | CSTOPB | PARENB);
@@ -266,156 +266,156 @@ bool Modem::closetty() {
266 266
267 if(tcsetattr(modemfd, TCSANOW, &initial_tty) < 0){ 267 if(tcsetattr(modemfd, TCSANOW, &initial_tty) < 0){
268 errmsg = QObject::tr("Can't restore tty settings: tcsetattr()\n"); 268 errmsg = QObject::tr("Can't restore tty settings: tcsetattr()\n");
269 ::close(modemfd); 269 ::close(modemfd);
270 modemfd = -1; 270 modemfd = -1;
271 return false; 271 return false;
272 } 272 }
273 ::close(modemfd); 273 ::close(modemfd);
274 modemfd = -1; 274 modemfd = -1;
275 } 275 }
276 276
277 return true; 277 return true;
278} 278}
279 279
280 280
281void Modem::readtty(int) { 281void Modem::readtty(int) {
282 char buffer[200]; 282 char buffer[200];
283 unsigned char c; 283 unsigned char c;
284 int len; 284 int len;
285 285
286 // read data in chunks of up to 200 bytes 286 // read data in chunks of up to 200 bytes
287 if((len = ::read(modemfd, buffer, 200)) > 0) { 287 if((len = ::read(modemfd, buffer, 200)) > 0) {
288 // split buffer into single characters for further processing 288 // split buffer into single characters for further processing
289 for(int i = 0; i < len; i++) { 289 for(int i = 0; i < len; i++) {
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
398 // Then hangup command 398 // Then hangup command
399 writeLine(_pppdata->modemHangupStr().local8Bit()); 399 writeLine(_pppdata->modemHangupStr().local8Bit());
400 400
401 usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 sec 401 usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 sec
402 402
403#ifndef DEBUG_WO_DIALING 403#ifndef DEBUG_WO_DIALING
404 if (sigsetjmp(jmp_buffer, 1) == 0) { 404 if (sigsetjmp(jmp_buffer, 1) == 0) {
405 // set alarm in case tcsendbreak() hangs 405 // set alarm in case tcsendbreak() hangs
406 signal(SIGALRM, alarm_handler); 406 signal(SIGALRM, alarm_handler);
407 alarm(2); 407 alarm(2);
408 408
409 tcsendbreak(modemfd, 0); 409 tcsendbreak(modemfd, 0);
410 410
411 alarm(0); 411 alarm(0);
412 signal(SIGALRM, SIG_IGN); 412 signal(SIGALRM, SIG_IGN);
413 } else { 413 } else {
414 // we reach this point if the alarm handler got called 414 // we reach this point if the alarm handler got called
415 closetty(); 415 closetty();
416 close(modemfd); 416 close(modemfd);
417 modemfd = -1; 417 modemfd = -1;
418 errmsg = QObject::tr("The modem does not respond."); 418 errmsg = QObject::tr("The modem does not respond.");
419 return false; 419 return false;
420 } 420 }
421 421
@@ -434,289 +434,289 @@ bool Modem::hangup() {
434 ioctl(modemfd, TIOCMSET, &modemstat); 434 ioctl(modemfd, TIOCMSET, &modemstat);
435#endif 435#endif
436 436
437 usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 secs 437 usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 secs
438 438
439 cfsetospeed(&temptty, modemspeed()); 439 cfsetospeed(&temptty, modemspeed());
440 cfsetispeed(&temptty, modemspeed()); 440 cfsetispeed(&temptty, modemspeed());
441 tcsetattr(modemfd, TCSAFLUSH, &temptty); 441 tcsetattr(modemfd, TCSAFLUSH, &temptty);
442#endif 442#endif
443 return true; 443 return true;
444 } else 444 } else
445 return false; 445 return false;
446} 446}
447 447
448 448
449void Modem::escape_to_command_mode() { 449void Modem::escape_to_command_mode() {
450 // Send Properly bracketed escape code to put the modem back into command state. 450 // Send Properly bracketed escape code to put the modem back into command state.
451 // A modem will accept AT commands only when it is in command state. 451 // A modem will accept AT commands only when it is in command state.
452 // When a modem sends the host the CONNECT string, that signals 452 // When a modem sends the host the CONNECT string, that signals
453 // that the modem is now in the connect state (no long accepts AT commands.) 453 // that the modem is now in the connect state (no long accepts AT commands.)
454 // Need to send properly timed escape sequence to put modem in command state. 454 // Need to send properly timed escape sequence to put modem in command state.
455 // Escape codes and guard times are controlled by S2 and S12 values. 455 // Escape codes and guard times are controlled by S2 and S12 values.
456 // 456 //
457 tcflush(modemfd, TCIOFLUSH); 457 tcflush(modemfd, TCIOFLUSH);
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
507 // 507 //
508 // rrx[i] has been matched, idx contains the start of the match 508 // rrx[i] has been matched, idx contains the start of the match
509 // and len contains how long the match is. Extract the match. 509 // and len contains how long the match is. Extract the match.
510 // 510 //
511 QString sub = s.mid(idx, len); 511 QString sub = s.mid(idx, len);
512 512
513 // 513 //
514 // Now extract the digits only from the match, which will 514 // Now extract the digits only from the match, which will
515 // then be converted to an int. 515 // then be converted to an int.
516 // 516 //
517 if ((idx = rrx[RXMAX-1].match( sub,0,&len )) > -1) { 517 if ((idx = rrx[RXMAX-1].match( sub,0,&len )) > -1) {
518// if ((idx = rrx[RXMAX-1].search( sub )) > -1) { 518// if ((idx = rrx[RXMAX-1].search( sub )) > -1) {
519// len = rrx[RXMAX-1].matchedLength(); 519// len = rrx[RXMAX-1].matchedLength();
520 sub = sub.mid(idx, len); 520 sub = sub.mid(idx, len);
521 result = sub.toInt(); 521 result = sub.toInt();
522 if(result > 0) { 522 if(result > 0) {
523 rx = result; 523 rx = result;
524 break; 524 break;
525 } 525 }
526 } 526 }
527 } 527 }
528 } 528 }
529 529
530 for(i = 0; i < TXMAX; i++) { 530 for(i = 0; i < TXMAX; i++) {
531 int len, idx, result; 531 int len, idx, result;
532 if((idx = trx[i].match(s,0,&len)) > -1) { 532 if((idx = trx[i].match(s,0,&len)) > -1) {
533// if((idx = trx[i].search(s)) > -1) { 533// if((idx = trx[i].search(s)) > -1) {
534// len = trx[i].matchedLength(); 534// len = trx[i].matchedLength();
535 535
536 // 536 //
537 // trx[i] has been matched, idx contains the start of the match 537 // trx[i] has been matched, idx contains the start of the match
538 // and len contains how long the match is. Extract the match. 538 // and len contains how long the match is. Extract the match.
539 // 539 //
540 QString sub = s.mid(idx, len); 540 QString sub = s.mid(idx, len);
541 541
542 // 542 //
543 // Now extract the digits only from the match, which will then 543 // Now extract the digits only from the match, which will then
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";
699 break; 699 break;
700 case PAP|Old: 700 case PAP|Old:
701 return PAP_AUTH_FILE".old"; 701 return PAP_AUTH_FILE".old";
702 break; 702 break;
703 case CHAP|Original: 703 case CHAP|Original:
704 return CHAP_AUTH_FILE; 704 return CHAP_AUTH_FILE;
705 break; 705 break;
706 case CHAP|New: 706 case CHAP|New:
707 return CHAP_AUTH_FILE".new"; 707 return CHAP_AUTH_FILE".new";
708 break; 708 break;
709 case CHAP|Old: 709 case CHAP|Old:
710 return CHAP_AUTH_FILE".old"; 710 return CHAP_AUTH_FILE".old";
711 break; 711 break;
712 default: 712 default:
713 return 0L; 713 return 0L;
714 } 714 }
715} 715}
716 716
717 717
718bool Modem::createAuthFile(Auth method, const char *username, const char *password) { 718bool Modem::createAuthFile(Auth method, const char *username, const char *password) {
719 const char *authfile, *oldName, *newName; 719 const char *authfile, *oldName, *newName;
720 char line[100]; 720 char line[100];
721 char regexp[2*MaxStrLen+30]; 721 char regexp[2*MaxStrLen+30];
722 regex_t preg; 722 regex_t preg;
@@ -887,199 +887,199 @@ bool Modem::execpppd(const char *arguments) {
887 fprintf(stderr,"In parent: fork() failed\n"); 887 fprintf(stderr,"In parent: fork() failed\n");
888 ::close( m_pppdLOG[0] ); 888 ::close( m_pppdLOG[0] );
889 ::close( m_pppdLOG[1] ); 889 ::close( m_pppdLOG[1] );
890 return false; 890 return false;
891 break; 891 break;
892 892
893 case 0: 893 case 0:
894 // let's parse the arguments the user supplied into UNIX suitable form 894 // let's parse the arguments the user supplied into UNIX suitable form
895 // that is a list of pointers each pointing to exactly one word 895 // that is a list of pointers each pointing to exactly one word
896 strlcpy(buf, arguments); 896 strlcpy(buf, arguments);
897 parseargs(buf, args); 897 parseargs(buf, args);
898 // become a session leader and let /dev/ttySx 898 // become a session leader and let /dev/ttySx
899 // be the controlling terminal. 899 // be the controlling terminal.
900 pgrpid = setsid(); 900 pgrpid = setsid();
901#ifdef TIOCSCTTY 901#ifdef TIOCSCTTY
902 if(ioctl(modemfd, TIOCSCTTY, 0)<0) 902 if(ioctl(modemfd, TIOCSCTTY, 0)<0)
903 fprintf(stderr, "ioctl() failed.\n"); 903 fprintf(stderr, "ioctl() failed.\n");
904#elif defined (TIOCSPGRP) 904#elif defined (TIOCSPGRP)
905 if(ioctl(modemfd, TIOCSPGRP, &pgrpid)<0) 905 if(ioctl(modemfd, TIOCSPGRP, &pgrpid)<0)
906 fprintf(stderr, "ioctl() failed.\n"); 906 fprintf(stderr, "ioctl() failed.\n");
907#endif 907#endif
908 if(tcsetpgrp(modemfd, pgrpid)<0) 908 if(tcsetpgrp(modemfd, pgrpid)<0)
909 fprintf(stderr, "tcsetpgrp() failed.\n"); 909 fprintf(stderr, "tcsetpgrp() failed.\n");
910 910
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
@@ -9,97 +9,97 @@
9 9
10/* OPIE */ 10/* OPIE */
11#include <opie2/odebug.h> 11#include <opie2/odebug.h>
12#include <opie2/oprocess.h> 12#include <opie2/oprocess.h>
13#include <opie2/onetwork.h> 13#include <opie2/onetwork.h>
14#include <opie2/opcap.h> 14#include <opie2/opcap.h>
15#include <qpe/resource.h> 15#include <qpe/resource.h>
16using namespace Opie::Core; 16using namespace Opie::Core;
17using namespace Opie::Net; 17using namespace Opie::Net;
18 18
19/* QT */ 19/* QT */
20#include <qapplication.h> 20#include <qapplication.h>
21#include <qfile.h> 21#include <qfile.h>
22#include <qdir.h> 22#include <qdir.h>
23#include <qdialog.h> 23#include <qdialog.h>
24#include <qtextstream.h> 24#include <qtextstream.h>
25#include <qmessagebox.h> 25#include <qmessagebox.h>
26#include <qlineedit.h> 26#include <qlineedit.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qspinbox.h> 28#include <qspinbox.h>
29#include <qradiobutton.h> 29#include <qradiobutton.h>
30#include <qpushbutton.h> 30#include <qpushbutton.h>
31#include <qcheckbox.h> 31#include <qcheckbox.h>
32#include <qtabwidget.h> 32#include <qtabwidget.h>
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;
82 QString opt; 82 QString opt;
83 83
84 if (! interfaces->isInterfaceSet()) 84 if (! interfaces->isInterfaceSet())
85 return; 85 return;
86 86
87 87
88 opt = interfaces->getInterfaceOption("wireless_essid", error); 88 opt = interfaces->getInterfaceOption("wireless_essid", error);
89 if(opt == "any" || opt == "off" || opt.isNull()){ 89 if(opt == "any" || opt == "off" || opt.isNull()){
90 essid->setEditText("any"); 90 essid->setEditText("any");
91 } else { 91 } else {
92 essid->setEditText(opt); 92 essid->setEditText(opt);
93 } 93 }
94 94
95 opt = interfaces->getInterfaceOption("wireless_mode", error).simplifyWhiteSpace(); 95 opt = interfaces->getInterfaceOption("wireless_mode", error).simplifyWhiteSpace();
96 96
97 for ( int i = 0; i < mode->count(); i++) 97 for ( int i = 0; i < mode->count(); i++)
98 if ( mode->text( i ) == opt ) mode->setCurrentItem( i ); 98 if ( mode->text( i ) == opt ) mode->setCurrentItem( i );
99 99
100 opt = interfaces->getInterfaceOption("wireless_ap", error).simplifyWhiteSpace(); 100 opt = interfaces->getInterfaceOption("wireless_ap", error).simplifyWhiteSpace();
101 if (! opt.isNull()) { 101 if (! opt.isNull()) {
102 specifyAp->setChecked(true); 102 specifyAp->setChecked(true);
103 macEdit->setText(opt); 103 macEdit->setText(opt);
104 } 104 }
105 105
@@ -190,305 +190,304 @@ void WLANImp::parseKeyStr(QString keystr) {
190 } 190 }
191 if (enc == 1) { 191 if (enc == 1) {
192 wepEnabled->setChecked(true); 192 wepEnabled->setChecked(true);
193 } else { 193 } else {
194 wepEnabled->setChecked(false); 194 wepEnabled->setChecked(false);
195 } 195 }
196} 196}
197 197
198/** 198/**
199 * Check to see if the current config is valid 199 * Check to see if the current config is valid
200 * Save interfaces 200 * Save interfaces
201 */ 201 */
202void WLANImp::accept() { 202void WLANImp::accept() {
203 if (wepEnabled->isChecked()) { 203 if (wepEnabled->isChecked()) {
204 if ((keyRadio0->isChecked() && keyLineEdit0->text().isEmpty()) || 204 if ((keyRadio0->isChecked() && keyLineEdit0->text().isEmpty()) ||
205 (keyRadio1->isChecked() && keyLineEdit1->text().isEmpty()) || 205 (keyRadio1->isChecked() && keyLineEdit1->text().isEmpty()) ||
206 (keyRadio2->isChecked() && keyLineEdit2->text().isEmpty()) || 206 (keyRadio2->isChecked() && keyLineEdit2->text().isEmpty()) ||
207 (keyRadio3->isChecked() && keyLineEdit3->text().isEmpty())) { 207 (keyRadio3->isChecked() && keyLineEdit3->text().isEmpty())) {
208 QMessageBox::information(this, "Error", "Please enter a WEP key.", QMessageBox::Ok); 208 QMessageBox::information(this, "Error", "Please enter a WEP key.", QMessageBox::Ok);
209 return; 209 return;
210 } 210 }
211 } 211 }
212 212
213 if (essid->currentText().isEmpty()) { 213 if (essid->currentText().isEmpty()) {
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]";
263 } //else 263 } //else
264 if (! keyLineEdit1->text().isNull()) { 264 if (! keyLineEdit1->text().isNull()) {
265 keyList += keyLineEdit1->text(); 265 keyList += keyLineEdit1->text();
266 keyList += "[2]"; 266 keyList += "[2]";
267 } //else 267 } //else
268 if (! keyLineEdit2->text().isNull()) { 268 if (! keyLineEdit2->text().isNull()) {
269 keyList += keyLineEdit2->text(); 269 keyList += keyLineEdit2->text();
270 keyList += "[3]"; 270 keyList += "[3]";
271 } //else 271 } //else
272 if (! keyLineEdit3->text().isNull()) { 272 if (! keyLineEdit3->text().isNull()) {
273 keyList += keyLineEdit3->text(); 273 keyList += keyLineEdit3->text();
274 keyList += "[4]"; 274 keyList += "[4]";
275 } 275 }
276 if (acceptNonEnc->isChecked()) { 276 if (acceptNonEnc->isChecked()) {
277 keyList += "open"; 277 keyList += "open";
278 } else { 278 } else {
279 keyList += "restricted"; 279 keyList += "restricted";
280 } 280 }
281 281
282 keyList += "key"; 282 keyList += "key";
283 if (keyRadio0->isChecked()) { 283 if (keyRadio0->isChecked()) {
284 keyList += "[1]"; 284 keyList += "[1]";
285 } else if (keyRadio1->isChecked()) { 285 } else if (keyRadio1->isChecked()) {
286 keyList += "[2]"; 286 keyList += "[2]";
287 } else if (keyRadio2->isChecked()) { 287 } else if (keyRadio2->isChecked()) {
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 ) );
488 essid->setEditText( item->text( col_ssid ) ); 487 essid->setEditText( item->text( col_ssid ) );
489 if ( item->text( col_mode ) == "A" ) 488 if ( item->text( col_mode ) == "A" )
490 mode->setCurrentItem( 3 ); 489 mode->setCurrentItem( 3 );
491 else 490 else
492 mode->setCurrentItem( 2 ); 491 mode->setCurrentItem( 2 );
493 } 492 }
494} 493}