author | mickeyl <mickeyl> | 2004-04-09 15:00:06 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2004-04-09 15:00:06 (UTC) |
commit | fb2f09533c7476a266a877c351007c2706b2da0d (patch) (unidiff) | |
tree | 9742d4cb8fd07fd5530c3c29b5f049dcecd46ef4 | |
parent | 39547839995c9f72ca9216ba5c2127246428ece8 (diff) | |
download | opie-fb2f09533c7476a266a877c351007c2706b2da0d.zip opie-fb2f09533c7476a266a877c351007c2706b2da0d.tar.gz opie-fb2f09533c7476a266a877c351007c2706b2da0d.tar.bz2 |
- eliminate cylic dependency
- complete using opie debugging framework
- sanitize #include order
21 files changed, 96 insertions, 55 deletions
diff --git a/noncore/settings/networksettings/interfaces/config.in b/noncore/settings/networksettings/interfaces/config.in index d84cd24..2175800 100644 --- a/noncore/settings/networksettings/interfaces/config.in +++ b/noncore/settings/networksettings/interfaces/config.in | |||
@@ -1,4 +1,4 @@ | |||
1 | config INTERFACES | 1 | config INTERFACES |
2 | boolean | 2 | boolean "Build interfaces for networksettings" |
3 | default "y" if NETWORKSETUP | 3 | default "y" |
4 | depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE | 4 | depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE |
diff --git a/noncore/settings/networksettings/networksettings.pro b/noncore/settings/networksettings/networksettings.pro index 55d2291..9ad9be4 100644 --- a/noncore/settings/networksettings/networksettings.pro +++ b/noncore/settings/networksettings/networksettings.pro | |||
@@ -1,12 +1,11 @@ | |||
1 | CONFIG = qt warn_on quick-app | 1 | CONFIG = qt warn_on quick-app |
2 | HEADERS = mainwindowimp.h addconnectionimp.h defaultmodule.h module.h | 2 | HEADERS = mainwindowimp.h addconnectionimp.h defaultmodule.h module.h |
3 | SOURCES = main.cpp mainwindowimp.cpp addconnectionimp.cpp | 3 | SOURCES = main.cpp mainwindowimp.cpp addconnectionimp.cpp |
4 | INCLUDEPATH += $(OPIEDIR)/include interfaces/ . | 4 | INCLUDEPATH += $(OPIEDIR)/include interfaces/ . |
5 | DEPENDPATH += $(OPIEDIR)/include interfaces/ wlan/ ppp/ | 5 | DEPENDPATH += $(OPIEDIR)/include interfaces/ wlan/ ppp/ |
6 | LIBS += -lqpe -L$(OPIEDIR)/plugins/networksettings -Linterfaces/ -linterfaces -lopiecore2 -lopieui2 | 6 | LIBS += -lqpe -L$(OPIEDIR)/plugins/networksettings -Linterfaces/ -linterfaces -lopiecore2 -lopieui2 |
7 | INTERFACES = mainwindow.ui addconnection.ui | 7 | INTERFACES = mainwindow.ui addconnection.ui |
8 | TARGET = networksettings | 8 | TARGET = networksettings |
9 | 9 | ||
10 | 10 | ||
11 | |||
12 | include ( $(OPIEDIR)/include.pro ) | 11 | include ( $(OPIEDIR)/include.pro ) |
diff --git a/noncore/settings/networksettings/ppp/accounts.cpp b/noncore/settings/networksettings/ppp/accounts.cpp index aedc0b9..f05e7ac 100644 --- a/noncore/settings/networksettings/ppp/accounts.cpp +++ b/noncore/settings/networksettings/ppp/accounts.cpp | |||
@@ -1,349 +1,351 @@ | |||
1 | /* | 1 | /* |
2 | * kPPP: A pppd front end for the KDE project | 2 | * kPPP: A pppd front end for the KDE project |
3 | * | 3 | * |
4 | * $Id$ | 4 | * $Id$ |
5 | * | 5 | * |
6 | * Copyright (C) 1997 Bernd Johannes Wuebben | 6 | * Copyright (C) 1997 Bernd Johannes Wuebben |
7 | * wuebben@math.cornell.edu | 7 | * wuebben@math.cornell.edu |
8 | * | 8 | * |
9 | * based on EzPPP: | 9 | * based on EzPPP: |
10 | * Copyright (C) 1997 Jay Painter | 10 | * Copyright (C) 1997 Jay Painter |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or | 12 | * This program is free software; you can redistribute it and/or |
13 | * modify it under the terms of the GNU Library General Public | 13 | * modify it under the terms of the GNU Library General Public |
14 | * License as published by the Free Software Foundation; either | 14 | * License as published by the Free Software Foundation; either |
15 | * version 2 of the License, or (at your option) any later version. | 15 | * version 2 of the License, or (at your option) any later version. |
16 | * | 16 | * |
17 | * This program is distributed in the hope that it will be useful, | 17 | * This program is distributed in the hope that it will be useful, |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
20 | * Library General Public License for more details. | 20 | * Library General Public License for more details. |
21 | * | 21 | * |
22 | * You should have received a copy of the GNU Library General Public | 22 | * You should have received a copy of the GNU Library General Public |
23 | * License along with this program; if not, write to the Free | 23 | * License along with this program; if not, write to the Free |
24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #include "accounts.h" | 27 | #include "accounts.h" |
28 | #include "authwidget.h" | 28 | #include "authwidget.h" |
29 | #include "pppdata.h" | 29 | #include "pppdata.h" |
30 | #include "edit.h" | 30 | #include "edit.h" |
31 | 31 | ||
32 | /* OPIE */ | 32 | /* OPIE */ |
33 | #include <opie2/odebug.h> | ||
33 | #include <qpe/qpeapplication.h> | 34 | #include <qpe/qpeapplication.h> |
35 | using namespace Opie::Core; | ||
34 | 36 | ||
35 | /* QT */ | 37 | /* QT */ |
36 | #include <qdir.h> | 38 | #include <qdir.h> |
37 | #include <qlayout.h> | 39 | #include <qlayout.h> |
38 | #include <qtabwidget.h> | 40 | #include <qtabwidget.h> |
39 | #include <qtabdialog.h> | 41 | #include <qtabdialog.h> |
40 | #include <qwhatsthis.h> | 42 | #include <qwhatsthis.h> |
41 | #include <qmessagebox.h> | 43 | #include <qmessagebox.h> |
42 | #include <qapplication.h> | 44 | #include <qapplication.h> |
43 | #include <qbuttongroup.h> | 45 | #include <qbuttongroup.h> |
44 | #include <qmessagebox.h> | 46 | #include <qmessagebox.h> |
45 | #include <qvgroupbox.h> | 47 | #include <qvgroupbox.h> |
46 | 48 | ||
47 | /* STD */ | 49 | /* STD */ |
48 | #include <stdlib.h> | 50 | #include <stdlib.h> |
49 | 51 | ||
50 | void parseargs(char* buf, char** args); | 52 | void parseargs(char* buf, char** args); |
51 | 53 | ||
52 | 54 | ||
53 | AccountWidget::AccountWidget( PPPData *pd, QWidget *parent, const char *name, WFlags f ) | 55 | AccountWidget::AccountWidget( PPPData *pd, QWidget *parent, const char *name, WFlags f ) |
54 | : ChooserWidget( pd, parent, name, f ) | 56 | : ChooserWidget( pd, parent, name, f ) |
55 | { | 57 | { |
56 | 58 | ||
57 | QWhatsThis::add(edit_b, tr("Allows you to modify the selected account")); | 59 | QWhatsThis::add(edit_b, tr("Allows you to modify the selected account")); |
58 | QWhatsThis::add(new_b, tr("Create a new dialup connection\n" | 60 | QWhatsThis::add(new_b, tr("Create a new dialup connection\n" |
59 | "to the Internet")); | 61 | "to the Internet")); |
60 | QWhatsThis::add(copy_b, | 62 | QWhatsThis::add(copy_b, |
61 | tr("Makes a copy of the selected account. All\n" | 63 | tr("Makes a copy of the selected account. All\n" |
62 | "settings of the selected account are copied\n" | 64 | "settings of the selected account are copied\n" |
63 | "to a new account, that you can modify to fit your\n" | 65 | "to a new account, that you can modify to fit your\n" |
64 | "needs")); | 66 | "needs")); |
65 | QWhatsThis::add(delete_b, | 67 | QWhatsThis::add(delete_b, |
66 | tr("<p>Deletes the selected account\n\n" | 68 | tr("<p>Deletes the selected account\n\n" |
67 | "<font color=\"red\"><b>Use with care!</b></font>")); | 69 | "<font color=\"red\"><b>Use with care!</b></font>")); |
68 | 70 | ||
69 | 71 | ||
70 | 72 | ||
71 | copy_b->setEnabled( false ); //FIXME | 73 | copy_b->setEnabled( false ); //FIXME |
72 | // delete_b->setEnabled( false ); //FIXME | 74 | // delete_b->setEnabled( false ); //FIXME |
73 | 75 | ||
74 | listListbox->insertStringList(_pppdata->getAccountList()); | 76 | listListbox->insertStringList(_pppdata->getAccountList()); |
75 | 77 | ||
76 | for (uint i = 0; i < listListbox->count(); i++) | 78 | for (uint i = 0; i < listListbox->count(); i++) |
77 | { | 79 | { |
78 | if ( listListbox->text(i) == _pppdata->accname() ) | 80 | if ( listListbox->text(i) == _pppdata->accname() ) |
79 | listListbox->setCurrentItem( i ); | 81 | listListbox->setCurrentItem( i ); |
80 | } | 82 | } |
81 | } | 83 | } |
82 | 84 | ||
83 | 85 | ||
84 | 86 | ||
85 | void AccountWidget::slotListBoxSelect(int idx) | 87 | void AccountWidget::slotListBoxSelect(int idx) |
86 | { | 88 | { |
87 | bool ok = _pppdata->setAccount( listListbox->text(idx) ); | 89 | bool ok = _pppdata->setAccount( listListbox->text(idx) ); |
88 | ok = (bool)(idx != -1); | 90 | ok = (bool)(idx != -1); |
89 | delete_b->setEnabled(ok); | 91 | delete_b->setEnabled(ok); |
90 | edit_b->setEnabled(ok); | 92 | edit_b->setEnabled(ok); |
91 | //FIXME copy_b->setEnabled(ok); | 93 | //FIXME copy_b->setEnabled(ok); |
92 | } | 94 | } |
93 | 95 | ||
94 | void AccountWidget::edit() | 96 | void AccountWidget::edit() |
95 | { | 97 | { |
96 | _pppdata->setAccount(listListbox->text(listListbox->currentItem())); | 98 | _pppdata->setAccount(listListbox->text(listListbox->currentItem())); |
97 | 99 | ||
98 | int result = doTab(); | 100 | int result = doTab(); |
99 | 101 | ||
100 | if(result == QDialog::Accepted) | 102 | if(result == QDialog::Accepted) |
101 | { | 103 | { |
102 | listListbox->changeItem(_pppdata->accname(),listListbox->currentItem()); | 104 | listListbox->changeItem(_pppdata->accname(),listListbox->currentItem()); |
103 | // emit resetaccounts(); | 105 | // emit resetaccounts(); |
104 | _pppdata->save(); | 106 | _pppdata->save(); |
105 | } | 107 | } |
106 | } | 108 | } |
107 | 109 | ||
108 | 110 | ||
109 | void AccountWidget::create() | 111 | void AccountWidget::create() |
110 | { | 112 | { |
111 | 113 | ||
112 | // if(listListbox->count() == MAX_ACCOUNTS) { | 114 | // if(listListbox->count() == MAX_ACCOUNTS) { |
113 | // QMessageBox::information(this, "sorry", | 115 | // QMessageBox::information(this, "sorry", |
114 | // tr("Maximum number of accounts reached.")); | 116 | // tr("Maximum number of accounts reached.")); |
115 | // return; | 117 | // return; |
116 | // } | 118 | // } |
117 | 119 | ||
118 | int result; | 120 | int result; |
119 | if (_pppdata->newaccount() == -1) | 121 | if (_pppdata->newaccount() == -1) |
120 | { | 122 | { |
121 | odebug << "_pppdata->newaccount() == -1" << oendl; | 123 | odebug << "_pppdata->newaccount() == -1" << oendl; |
122 | return; | 124 | return; |
123 | } | 125 | } |
124 | result = doTab(); | 126 | result = doTab(); |
125 | 127 | ||
126 | if(result == QDialog::Accepted) | 128 | if(result == QDialog::Accepted) |
127 | { | 129 | { |
128 | listListbox->insertItem(_pppdata->accname()); | 130 | listListbox->insertItem(_pppdata->accname()); |
129 | listListbox->setSelected(listListbox->findItem(_pppdata->accname()),true); | 131 | listListbox->setSelected(listListbox->findItem(_pppdata->accname()),true); |
130 | 132 | ||
131 | _pppdata->save(); | 133 | _pppdata->save(); |
132 | } | 134 | } |
133 | else | 135 | else |
134 | _pppdata->deleteAccount(); | 136 | _pppdata->deleteAccount(); |
135 | } | 137 | } |
136 | 138 | ||
137 | 139 | ||
138 | void AccountWidget::copy() | 140 | void AccountWidget::copy() |
139 | { | 141 | { |
140 | // if(listListbox->count() == MAX_ACCOUNTS) { | 142 | // if(listListbox->count() == MAX_ACCOUNTS) { |
141 | // QMessageBox::information(this, "sorry", tr("Maximum number of accounts reached.")); | 143 | // QMessageBox::information(this, "sorry", tr("Maximum number of accounts reached.")); |
142 | // return; | 144 | // return; |
143 | // } | 145 | // } |
144 | 146 | ||
145 | if(listListbox->currentItem()<0) | 147 | if(listListbox->currentItem()<0) |
146 | { | 148 | { |
147 | QMessageBox::information(this, "sorry", tr("No account selected.")); | 149 | QMessageBox::information(this, "sorry", tr("No account selected.")); |
148 | return; | 150 | return; |
149 | } | 151 | } |
150 | 152 | ||
151 | _pppdata->copyaccount(listListbox->currentText()); | 153 | _pppdata->copyaccount(listListbox->currentText()); |
152 | 154 | ||
153 | listListbox->insertItem(_pppdata->accname()); | 155 | listListbox->insertItem(_pppdata->accname()); |
154 | // emit resetaccounts(); | 156 | // emit resetaccounts(); |
155 | _pppdata->save(); | 157 | _pppdata->save(); |
156 | } | 158 | } |
157 | 159 | ||
158 | 160 | ||
159 | void AccountWidget::remove() | 161 | void AccountWidget::remove() |
160 | { | 162 | { |
161 | 163 | ||
162 | QString s = tr("Are you sure you want to delete\nthe account \"%1\"?") | 164 | QString s = tr("Are you sure you want to delete\nthe account \"%1\"?") |
163 | .arg(listListbox->text(listListbox->currentItem())); | 165 | .arg(listListbox->text(listListbox->currentItem())); |
164 | 166 | ||
165 | if(QMessageBox::warning(this,tr("Confirm"),s, | 167 | if(QMessageBox::warning(this,tr("Confirm"),s, |
166 | QMessageBox::Yes,QMessageBox::No | 168 | QMessageBox::Yes,QMessageBox::No |
167 | ) != QMessageBox::Yes) | 169 | ) != QMessageBox::Yes) |
168 | return; | 170 | return; |
169 | 171 | ||
170 | if(_pppdata->deleteAccount(listListbox->text(listListbox->currentItem()))) | 172 | if(_pppdata->deleteAccount(listListbox->text(listListbox->currentItem()))) |
171 | listListbox->removeItem(listListbox->currentItem()); | 173 | listListbox->removeItem(listListbox->currentItem()); |
172 | 174 | ||
173 | 175 | ||
174 | // emit resetaccounts(); | 176 | // emit resetaccounts(); |
175 | // _pppdata->save(); | 177 | // _pppdata->save(); |
176 | 178 | ||
177 | 179 | ||
178 | slotListBoxSelect(listListbox->currentItem()); | 180 | slotListBoxSelect(listListbox->currentItem()); |
179 | 181 | ||
180 | } | 182 | } |
181 | 183 | ||
182 | 184 | ||
183 | int AccountWidget::doTab() | 185 | int AccountWidget::doTab() |
184 | { | 186 | { |
185 | QDialog *dlg = new QDialog( 0, "newAccount", true, Qt::WStyle_ContextHelp ); | 187 | QDialog *dlg = new QDialog( 0, "newAccount", true, Qt::WStyle_ContextHelp ); |
186 | QVBoxLayout *layout = new QVBoxLayout( dlg ); | 188 | QVBoxLayout *layout = new QVBoxLayout( dlg ); |
187 | layout->setSpacing( 0 ); | 189 | layout->setSpacing( 0 ); |
188 | layout->setMargin( 1 ); | 190 | layout->setMargin( 1 ); |
189 | 191 | ||
190 | QTabWidget *tabWindow = new QTabWidget( dlg, "tabWindow" ); | 192 | QTabWidget *tabWindow = new QTabWidget( dlg, "tabWindow" ); |
191 | layout->addWidget( tabWindow ); | 193 | layout->addWidget( tabWindow ); |
192 | 194 | ||
193 | bool isnewaccount; | 195 | bool isnewaccount; |
194 | 196 | ||
195 | if(_pppdata->accname().isEmpty()) | 197 | if(_pppdata->accname().isEmpty()) |
196 | { | 198 | { |
197 | dlg->setCaption(tr("New Account")); | 199 | dlg->setCaption(tr("New Account")); |
198 | isnewaccount = true; | 200 | isnewaccount = true; |
199 | } | 201 | } |
200 | else | 202 | else |
201 | { | 203 | { |
202 | QString tit = tr("Edit Account: "); | 204 | QString tit = tr("Edit Account: "); |
203 | tit += _pppdata->accname(); | 205 | tit += _pppdata->accname(); |
204 | dlg->setCaption(tit); | 206 | dlg->setCaption(tit); |
205 | isnewaccount = false; | 207 | isnewaccount = false; |
206 | } | 208 | } |
207 | 209 | ||
208 | // // DIAL WIDGET | 210 | // // DIAL WIDGET |
209 | dial_w = new DialWidget( _pppdata, tabWindow, isnewaccount, "Dial Setup"); | 211 | dial_w = new DialWidget( _pppdata, tabWindow, isnewaccount, "Dial Setup"); |
210 | tabWindow->addTab( dial_w, tr("Dial") ); | 212 | tabWindow->addTab( dial_w, tr("Dial") ); |
211 | 213 | ||
212 | // // AUTH WIDGET | 214 | // // AUTH WIDGET |
213 | auth_w = new AuthWidget( _pppdata, tabWindow, isnewaccount, tr("Edit Login Script")); | 215 | auth_w = new AuthWidget( _pppdata, tabWindow, isnewaccount, tr("Edit Login Script")); |
214 | tabWindow->addTab( auth_w, tr("Authentication") ); | 216 | tabWindow->addTab( auth_w, tr("Authentication") ); |
215 | 217 | ||
216 | // // IP WIDGET | 218 | // // IP WIDGET |
217 | ip_w = new IPWidget( _pppdata, tabWindow, isnewaccount, tr("IP Setup")); | 219 | ip_w = new IPWidget( _pppdata, tabWindow, isnewaccount, tr("IP Setup")); |
218 | tabWindow->addTab( ip_w, tr("IP") ); | 220 | tabWindow->addTab( ip_w, tr("IP") ); |
219 | 221 | ||
220 | // // GATEWAY WIDGET | 222 | // // GATEWAY WIDGET |
221 | gateway_w = new GatewayWidget( _pppdata, tabWindow, isnewaccount, tr("Gateway Setup")); | 223 | gateway_w = new GatewayWidget( _pppdata, tabWindow, isnewaccount, tr("Gateway Setup")); |
222 | tabWindow->addTab( gateway_w, tr("Gateway") ); | 224 | tabWindow->addTab( gateway_w, tr("Gateway") ); |
223 | 225 | ||
224 | // // DNS WIDGET | 226 | // // DNS WIDGET |
225 | dns_w = new DNSWidget( _pppdata, tabWindow, isnewaccount, tr("DNS Servers") ); | 227 | dns_w = new DNSWidget( _pppdata, tabWindow, isnewaccount, tr("DNS Servers") ); |
226 | tabWindow->addTab( dns_w, tr("DNS") ); | 228 | tabWindow->addTab( dns_w, tr("DNS") ); |
227 | 229 | ||
228 | // // EXECUTE WIDGET | 230 | // // EXECUTE WIDGET |
229 | ExecWidget *exec_w = new ExecWidget( _pppdata, tabWindow, isnewaccount, tr("Execute Programs")); | 231 | ExecWidget *exec_w = new ExecWidget( _pppdata, tabWindow, isnewaccount, tr("Execute Programs")); |
230 | tabWindow->addTab( exec_w, tr("Execute") ); | 232 | tabWindow->addTab( exec_w, tr("Execute") ); |
231 | 233 | ||
232 | int result = 0; | 234 | int result = 0; |
233 | bool ok = false; | 235 | bool ok = false; |
234 | 236 | ||
235 | while (!ok) | 237 | while (!ok) |
236 | { | 238 | { |
237 | result = QPEApplication::execDialog( dlg ); | 239 | result = QPEApplication::execDialog( dlg ); |
238 | ok = true; | 240 | ok = true; |
239 | 241 | ||
240 | if(result == QDialog::Accepted) | 242 | if(result == QDialog::Accepted) |
241 | { | 243 | { |
242 | if (!auth_w->check()) | 244 | if (!auth_w->check()) |
243 | { | 245 | { |
244 | ok = false; | 246 | ok = false; |
245 | } | 247 | } |
246 | else if(!dial_w->save()) | 248 | else if(!dial_w->save()) |
247 | { | 249 | { |
248 | QMessageBox::critical(this, "error", tr( "You must enter a unique account name")); | 250 | QMessageBox::critical(this, "error", tr( "You must enter a unique account name")); |
249 | ok = false; | 251 | ok = false; |
250 | } | 252 | } |
251 | else | 253 | else |
252 | { | 254 | { |
253 | ip_w->save(); | 255 | ip_w->save(); |
254 | dns_w->save(); | 256 | dns_w->save(); |
255 | gateway_w->save(); | 257 | gateway_w->save(); |
256 | auth_w->save(); | 258 | auth_w->save(); |
257 | exec_w->save(); | 259 | exec_w->save(); |
258 | } | 260 | } |
259 | } | 261 | } |
260 | } | 262 | } |
261 | 263 | ||
262 | delete dlg; | 264 | delete dlg; |
263 | 265 | ||
264 | return result; | 266 | return result; |
265 | } | 267 | } |
266 | 268 | ||
267 | 269 | ||
268 | // QString AccountWidget::prettyPrintVolume(unsigned int n) { | 270 | // QString AccountWidget::prettyPrintVolume(unsigned int n) { |
269 | // int idx = 0; | 271 | // int idx = 0; |
270 | // const QString quant[] = {tr("Byte"), tr("KB"), | 272 | // const QString quant[] = {tr("Byte"), tr("KB"), |
271 | // tr("MB"), tr("GB"), QString::null}; | 273 | // tr("MB"), tr("GB"), QString::null}; |
272 | 274 | ||
273 | // float n1 = n; | 275 | // float n1 = n; |
274 | // while(n >= 1024 && quant[idx] != QString::null) { | 276 | // while(n >= 1024 && quant[idx] != QString::null) { |
275 | // idx++; | 277 | // idx++; |
276 | // n /= 1024; | 278 | // n /= 1024; |
277 | // } | 279 | // } |
278 | 280 | ||
279 | // int i = idx; | 281 | // int i = idx; |
280 | // while(i--) | 282 | // while(i--) |
281 | // n1 = n1 / 1024.0; | 283 | // n1 = n1 / 1024.0; |
282 | 284 | ||
283 | // QString s = QString::number( n1, 'f', idx==0 ? 0 : 1 ); | 285 | // QString s = QString::number( n1, 'f', idx==0 ? 0 : 1 ); |
284 | // s += " " + quant[idx]; | 286 | // s += " " + quant[idx]; |
285 | // return s; | 287 | // return s; |
286 | // } | 288 | // } |
287 | 289 | ||
288 | 290 | ||
289 | ///////////////////////////////////////////////////////////////////////////// | 291 | ///////////////////////////////////////////////////////////////////////////// |
290 | // | 292 | // |
291 | // Queries the user what to reset: costs, volume or both | 293 | // Queries the user what to reset: costs, volume or both |
292 | // | 294 | // |
293 | ///////////////////////////////////////////////////////////////////////////// | 295 | ///////////////////////////////////////////////////////////////////////////// |
294 | // QueryReset::QueryReset(QWidget *parent) : QDialog(parent, 0, true) { | 296 | // QueryReset::QueryReset(QWidget *parent) : QDialog(parent, 0, true) { |
295 | // // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon()); | 297 | // // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon()); |
296 | // setCaption(tr("Reset Accounting")); | 298 | // setCaption(tr("Reset Accounting")); |
297 | 299 | ||
298 | // QVBoxLayout *tl = new QVBoxLayout(this, 10, 10); | 300 | // QVBoxLayout *tl = new QVBoxLayout(this, 10, 10); |
299 | // QVGroupBox *f = new QVGroupBox(tr("What to Reset"), this); | 301 | // QVGroupBox *f = new QVGroupBox(tr("What to Reset"), this); |
300 | 302 | ||
301 | // QVBoxLayout *l1 = new QVBoxLayout(this, 10, 10); | 303 | // QVBoxLayout *l1 = new QVBoxLayout(this, 10, 10); |
302 | // // costs = new QCheckBox(tr("Reset the accumulated phone costs"), f); | 304 | // // costs = new QCheckBox(tr("Reset the accumulated phone costs"), f); |
303 | // // costs->setChecked(true); | 305 | // // costs->setChecked(true); |
304 | // // l1->addWidget(costs); | 306 | // // l1->addWidget(costs); |
305 | // // QWhatsThis::add(costs, tr("Check this to set the phone costs\n" | 307 | // // QWhatsThis::add(costs, tr("Check this to set the phone costs\n" |
306 | // // "to zero. Typically you'll want to\n" | 308 | // // "to zero. Typically you'll want to\n" |
307 | // // "do this once a month.")); | 309 | // // "do this once a month.")); |
308 | 310 | ||
309 | // // volume = new QCheckBox(tr("Reset volume accounting"), f); | 311 | // // volume = new QCheckBox(tr("Reset volume accounting"), f); |
310 | // // volume->setChecked(true); | 312 | // // volume->setChecked(true); |
311 | // // l1->addWidget(volume); | 313 | // // l1->addWidget(volume); |
312 | // // QWhatsThis::add(volume, tr("Check this to set the volume accounting\n" | 314 | // // QWhatsThis::add(volume, tr("Check this to set the volume accounting\n" |
313 | // // "to zero. Typically you'll want to do this\n" | 315 | // // "to zero. Typically you'll want to do this\n" |
314 | // // "once a month.")); | 316 | // // "once a month.")); |
315 | 317 | ||
316 | // l1->activate(); | 318 | // l1->activate(); |
317 | 319 | ||
318 | // // this activates the f-layout and sets minimumSize() | 320 | // // this activates the f-layout and sets minimumSize() |
319 | // f->show(); | 321 | // f->show(); |
320 | 322 | ||
321 | // tl->addWidget(f); | 323 | // tl->addWidget(f); |
322 | 324 | ||
323 | // QButtonGroup *bbox = new QButtonGroup(this); | 325 | // QButtonGroup *bbox = new QButtonGroup(this); |
324 | // // bbox->addStretch(1); | 326 | // // bbox->addStretch(1); |
325 | // QPushButton *ok = new QPushButton( bbox, tr("OK") ); | 327 | // QPushButton *ok = new QPushButton( bbox, tr("OK") ); |
326 | // bbox->insert(ok); | 328 | // bbox->insert(ok); |
327 | // ok->setDefault(true); | 329 | // ok->setDefault(true); |
328 | // QPushButton *cancel = new QPushButton( bbox, tr("Cancel") ); | 330 | // QPushButton *cancel = new QPushButton( bbox, tr("Cancel") ); |
329 | // bbox->insert(cancel); | 331 | // bbox->insert(cancel); |
330 | 332 | ||
331 | // connect(ok, SIGNAL(clicked()), | 333 | // connect(ok, SIGNAL(clicked()), |
332 | // this, SLOT(accepted())); | 334 | // this, SLOT(accepted())); |
333 | // connect(cancel, SIGNAL(clicked()), | 335 | // connect(cancel, SIGNAL(clicked()), |
334 | // this, SLOT(reject())); | 336 | // this, SLOT(reject())); |
335 | 337 | ||
336 | // bbox->layout(); | 338 | // bbox->layout(); |
337 | // tl->addWidget(bbox); | 339 | // tl->addWidget(bbox); |
338 | 340 | ||
339 | // } | 341 | // } |
340 | 342 | ||
341 | 343 | ||
342 | // void QueryReset::accepted() { | 344 | // void QueryReset::accepted() { |
343 | // int result = costs->isChecked() ? COSTS : 0; | 345 | // int result = costs->isChecked() ? COSTS : 0; |
344 | // result += volume->isChecked() ? VOLUME : 0; | 346 | // result += volume->isChecked() ? VOLUME : 0; |
345 | 347 | ||
346 | // done(result); | 348 | // done(result); |
347 | // } | 349 | // } |
348 | 350 | ||
349 | 351 | ||
diff --git a/noncore/settings/networksettings/ppp/authwidget.cpp b/noncore/settings/networksettings/ppp/authwidget.cpp index f3d842f..c94c3bc 100644 --- a/noncore/settings/networksettings/ppp/authwidget.cpp +++ b/noncore/settings/networksettings/ppp/authwidget.cpp | |||
@@ -1,197 +1,201 @@ | |||
1 | |||
2 | #include <qlayout.h> | ||
3 | #include <qmessagebox.h> | ||
4 | #include <qtoolbutton.h> | ||
5 | #include <qwhatsthis.h> | ||
6 | |||
7 | #include "auth.h" | 1 | #include "auth.h" |
8 | #include "authwidget.h" | 2 | #include "authwidget.h" |
9 | #include "edit.h" | 3 | #include "edit.h" |
10 | #include "pppdata.h" | 4 | #include "pppdata.h" |
11 | 5 | ||
6 | /* OPIE */ | ||
7 | #include <opie2/odebug.h> | ||
8 | using namespace Opie::Core; | ||
9 | |||
10 | /* QT */ | ||
11 | #include <qlayout.h> | ||
12 | #include <qmessagebox.h> | ||
13 | #include <qtoolbutton.h> | ||
14 | #include <qwhatsthis.h> | ||
12 | 15 | ||
16 | /* XPM */ | ||
13 | static const char* const image0_data[] = { | 17 | static const char* const image0_data[] = { |
14 | "16 16 2 1", | 18 | "16 16 2 1", |
15 | ". c None", | 19 | ". c None", |
16 | "# c #000000", | 20 | "# c #000000", |
17 | "................", | 21 | "................", |
18 | "...#...###...##.", | 22 | "...#...###...##.", |
19 | "..#.#..#..#.##..", | 23 | "..#.#..#..#.##..", |
20 | "..###..###.##...", | 24 | "..###..###.##...", |
21 | ".#...#.#..##....", | 25 | ".#...#.#..##....", |
22 | ".#...#.#.##.....", | 26 | ".#...#.#.##.....", |
23 | "........##.#..#.", | 27 | "........##.#..#.", |
24 | "..##...##...##..", | 28 | "..##...##...##..", |
25 | ".#..#.###...##..", | 29 | ".#..#.###...##..", |
26 | ".#...##..#.#..#.", | 30 | ".#...##..#.#..#.", |
27 | ".#..##..........", | 31 | ".#..##..........", |
28 | ".#.##.#..#.#..#.", | 32 | ".#.##.#..#.#..#.", |
29 | "..##...##...##..", | 33 | "..##...##...##..", |
30 | ".##....##...##..", | 34 | ".##....##...##..", |
31 | ".#....#..#.#..#.", | 35 | ".#....#..#.#..#.", |
32 | "................"}; | 36 | "................"}; |
33 | 37 | ||
34 | 38 | ||
35 | AuthWidget::AuthWidget(PPPData *pd, QWidget *parent, bool isnewaccount, const char *name ) | 39 | AuthWidget::AuthWidget(PPPData *pd, QWidget *parent, bool isnewaccount, const char *name ) |
36 | : QWidget( parent, name), | 40 | : QWidget( parent, name), |
37 | scriptWidget(0), | 41 | scriptWidget(0), |
38 | _pppdata(pd), | 42 | _pppdata(pd), |
39 | isNewAccount(isnewaccount) | 43 | isNewAccount(isnewaccount) |
40 | { | 44 | { |
41 | layout = new QGridLayout(this); | 45 | layout = new QGridLayout(this); |
42 | 46 | ||
43 | auth_l = new QLabel(tr("Authentication: "), this); | 47 | auth_l = new QLabel(tr("Authentication: "), this); |
44 | layout->addWidget(auth_l, 0, 0); | 48 | layout->addWidget(auth_l, 0, 0); |
45 | 49 | ||
46 | auth = new QComboBox(this); | 50 | auth = new QComboBox(this); |
47 | auth->insertItem(tr("Script-based")); | 51 | auth->insertItem(tr("Script-based")); |
48 | auth->insertItem(tr("PAP")); | 52 | auth->insertItem(tr("PAP")); |
49 | auth->insertItem(tr("Terminal-based")); | 53 | auth->insertItem(tr("Terminal-based")); |
50 | auth->insertItem(tr("CHAP")); | 54 | auth->insertItem(tr("CHAP")); |
51 | auth->insertItem(tr("PAP/CHAP")); | 55 | auth->insertItem(tr("PAP/CHAP")); |
52 | layout->addWidget(auth, 0, 1); | 56 | layout->addWidget(auth, 0, 1); |
53 | 57 | ||
54 | connect( auth, SIGNAL(activated(const QString&)), | 58 | connect( auth, SIGNAL(activated(const QString&)), |
55 | SLOT(authChanged(const QString&))); | 59 | SLOT(authChanged(const QString&))); |
56 | 60 | ||
57 | QString tmp = tr("<p>Specifies the method used to identify yourself to\n" | 61 | QString tmp = tr("<p>Specifies the method used to identify yourself to\n" |
58 | "the PPP server. Most universities still use\n" | 62 | "the PPP server. Most universities still use\n" |
59 | "<b>Terminal</b>- or <b>Script</b>-based authentication,\n" | 63 | "<b>Terminal</b>- or <b>Script</b>-based authentication,\n" |
60 | "while most ISP use <b>PAP</b> and/or <b>CHAP</b>. If\n" | 64 | "while most ISP use <b>PAP</b> and/or <b>CHAP</b>. If\n" |
61 | "unsure, contact your ISP.\n" | 65 | "unsure, contact your ISP.\n" |
62 | "\n" | 66 | "\n" |
63 | "If you can choose between PAP and CHAP,\n" | 67 | "If you can choose between PAP and CHAP,\n" |
64 | "choose CHAP, because it's much safer. If you don't know\n" | 68 | "choose CHAP, because it's much safer. If you don't know\n" |
65 | "whether PAP or CHAP is right, choose PAP/CHAP."); | 69 | "whether PAP or CHAP is right, choose PAP/CHAP."); |
66 | 70 | ||
67 | QWhatsThis::add(auth_l,tmp); | 71 | QWhatsThis::add(auth_l,tmp); |
68 | QWhatsThis::add(auth,tmp); | 72 | QWhatsThis::add(auth,tmp); |
69 | 73 | ||
70 | user_l = new QLabel( tr("Username: "), this); | 74 | user_l = new QLabel( tr("Username: "), this); |
71 | layout->addWidget( user_l, 1, 0 ); | 75 | layout->addWidget( user_l, 1, 0 ); |
72 | userName = new QLineEdit( this, "usernameEdit" ); | 76 | userName = new QLineEdit( this, "usernameEdit" ); |
73 | layout->addWidget( userName, 1, 1 ); | 77 | layout->addWidget( userName, 1, 1 ); |
74 | tmp = tr("Enter your username here..."); | 78 | tmp = tr("Enter your username here..."); |
75 | QWhatsThis::add( user_l, tmp ); | 79 | QWhatsThis::add( user_l, tmp ); |
76 | QWhatsThis::add( userName, tmp ); | 80 | QWhatsThis::add( userName, tmp ); |
77 | 81 | ||
78 | pw_l = new QLabel( tr("Password: "), this); | 82 | pw_l = new QLabel( tr("Password: "), this); |
79 | layout->addWidget( pw_l, 2, 0 ); | 83 | layout->addWidget( pw_l, 2, 0 ); |
80 | passWord = new QLineEdit( this, "pw" ); | 84 | passWord = new QLineEdit( this, "pw" ); |
81 | passWord->setAutoMask( true ); | 85 | passWord->setAutoMask( true ); |
82 | passWord->setEchoMode( QLineEdit::Password ); | 86 | passWord->setEchoMode( QLineEdit::Password ); |
83 | layout->addWidget( passWord, 2, 1 ); | 87 | layout->addWidget( passWord, 2, 1 ); |
84 | hidePw = new QToolButton( this ); | 88 | hidePw = new QToolButton( this ); |
85 | hidePw->setPixmap( QPixmap( ( const char** ) image0_data ) ); | 89 | hidePw->setPixmap( QPixmap( ( const char** ) image0_data ) ); |
86 | hidePw->setToggleButton( true ); | 90 | hidePw->setToggleButton( true ); |
87 | layout->addWidget( hidePw, 2, 2 ); | 91 | layout->addWidget( hidePw, 2, 2 ); |
88 | 92 | ||
89 | connect(hidePw, SIGNAL(toggled(bool)), SLOT(toggleEchoMode(bool))); | 93 | connect(hidePw, SIGNAL(toggled(bool)), SLOT(toggleEchoMode(bool))); |
90 | 94 | ||
91 | tmp = tr("Enter your password here"); | 95 | tmp = tr("Enter your password here"); |
92 | QWhatsThis::add( pw_l, tmp ); | 96 | QWhatsThis::add( pw_l, tmp ); |
93 | QWhatsThis::add( passWord, tmp ); | 97 | QWhatsThis::add( passWord, tmp ); |
94 | 98 | ||
95 | store_password = new QCheckBox(tr("Store password"), this); | 99 | store_password = new QCheckBox(tr("Store password"), this); |
96 | layout->addMultiCellWidget(store_password, 3, 3, 0, 1, AlignRight); | 100 | layout->addMultiCellWidget(store_password, 3, 3, 0, 1, AlignRight); |
97 | QWhatsThis::add(store_password, | 101 | QWhatsThis::add(store_password, |
98 | tr("<p>When this is turned on, your ISP password\n" | 102 | tr("<p>When this is turned on, your ISP password\n" |
99 | "will be saved in <i>kppp</i>'s config file, so\n" | 103 | "will be saved in <i>kppp</i>'s config file, so\n" |
100 | "you do not need to type it in every time.\n" | 104 | "you do not need to type it in every time.\n" |
101 | "\n" | 105 | "\n" |
102 | "<b><font color=\"red\">Warning:</font> your password will be stored as\n" | 106 | "<b><font color=\"red\">Warning:</font> your password will be stored as\n" |
103 | "plain text in the config file, which is\n" | 107 | "plain text in the config file, which is\n" |
104 | "readable only to you. Make sure nobody\n" | 108 | "readable only to you. Make sure nobody\n" |
105 | "gains access to this file!")); | 109 | "gains access to this file!")); |
106 | 110 | ||
107 | if (isNewAccount){ | 111 | if (isNewAccount){ |
108 | // select PAP/CHAP as default | 112 | // select PAP/CHAP as default |
109 | auth->setCurrentItem(AUTH_PAPCHAP); | 113 | auth->setCurrentItem(AUTH_PAPCHAP); |
110 | store_password->setChecked(true); | 114 | store_password->setChecked(true); |
111 | }else{ | 115 | }else{ |
112 | auth->setCurrentItem(_pppdata->authMethod()); | 116 | auth->setCurrentItem(_pppdata->authMethod()); |
113 | authChanged( auth->currentText() ); | 117 | authChanged( auth->currentText() ); |
114 | userName->setText( _pppdata->storedUsername() ); | 118 | userName->setText( _pppdata->storedUsername() ); |
115 | store_password->setChecked(_pppdata->storePassword()); | 119 | store_password->setChecked(_pppdata->storePassword()); |
116 | if (store_password->isChecked()) | 120 | if (store_password->isChecked()) |
117 | passWord->setText( _pppdata->storedPassword() ); | 121 | passWord->setText( _pppdata->storedPassword() ); |
118 | } | 122 | } |
119 | } | 123 | } |
120 | 124 | ||
121 | bool AuthWidget::check() | 125 | bool AuthWidget::check() |
122 | { | 126 | { |
123 | bool ret = true; | 127 | bool ret = true; |
124 | if (scriptWidget){ | 128 | if (scriptWidget){ |
125 | if (!scriptWidget->check()){ | 129 | if (!scriptWidget->check()){ |
126 | QMessageBox::critical(this, tr("error"), tr("<qt>Login script has unbalanced loop Start/End<qt>")); | 130 | QMessageBox::critical(this, tr("error"), tr("<qt>Login script has unbalanced loop Start/End<qt>")); |
127 | ret = false; | 131 | ret = false; |
128 | } | 132 | } |
129 | } | 133 | } |
130 | return ret; | 134 | return ret; |
131 | } | 135 | } |
132 | 136 | ||
133 | void AuthWidget::save() | 137 | void AuthWidget::save() |
134 | { | 138 | { |
135 | _pppdata->setAuthMethod(auth->currentItem()); | 139 | _pppdata->setAuthMethod(auth->currentItem()); |
136 | if (scriptWidget) scriptWidget->save(); | 140 | if (scriptWidget) scriptWidget->save(); |
137 | _pppdata->setStoredUsername( userName->text() ); | 141 | _pppdata->setStoredUsername( userName->text() ); |
138 | _pppdata->setStorePassword(store_password->isChecked()); | 142 | _pppdata->setStorePassword(store_password->isChecked()); |
139 | if (store_password->isChecked()) | 143 | if (store_password->isChecked()) |
140 | _pppdata->setStoredPassword( passWord->text() ); | 144 | _pppdata->setStoredPassword( passWord->text() ); |
141 | } | 145 | } |
142 | 146 | ||
143 | void AuthWidget::authChanged( const QString &authStr ) | 147 | void AuthWidget::authChanged( const QString &authStr ) |
144 | { | 148 | { |
145 | odebug << "AuthWidget::authChanged( " << authStr.latin1() << " )" << oendl; | 149 | odebug << "AuthWidget::authChanged( " << authStr.latin1() << " )" << oendl; |
146 | if ( authStr.contains( tr("Script-based") ) ){ | 150 | if ( authStr.contains( tr("Script-based") ) ){ |
147 | showUsernamePassword( false ); | 151 | showUsernamePassword( false ); |
148 | showScriptWindow( true ); | 152 | showScriptWindow( true ); |
149 | } else if ( authStr.contains( tr("PAP") ) || | 153 | } else if ( authStr.contains( tr("PAP") ) || |
150 | authStr.contains( tr("CHAP") ) ){ | 154 | authStr.contains( tr("CHAP") ) ){ |
151 | showUsernamePassword( true ); | 155 | showUsernamePassword( true ); |
152 | showScriptWindow( false ); | 156 | showScriptWindow( false ); |
153 | } else { | 157 | } else { |
154 | odebug << "do not really know how to handle" << oendl; | 158 | odebug << "do not really know how to handle" << oendl; |
155 | showUsernamePassword( false ); | 159 | showUsernamePassword( false ); |
156 | showScriptWindow( false ); | 160 | showScriptWindow( false ); |
157 | } | 161 | } |
158 | } | 162 | } |
159 | 163 | ||
160 | 164 | ||
161 | void AuthWidget::showUsernamePassword( bool show ) | 165 | void AuthWidget::showUsernamePassword( bool show ) |
162 | { | 166 | { |
163 | if (show){ | 167 | if (show){ |
164 | user_l->show(); | 168 | user_l->show(); |
165 | userName->show(); | 169 | userName->show(); |
166 | pw_l->show(); | 170 | pw_l->show(); |
167 | passWord->show(); | 171 | passWord->show(); |
168 | store_password->show(); | 172 | store_password->show(); |
169 | hidePw->show(); | 173 | hidePw->show(); |
170 | }else{//!show | 174 | }else{//!show |
171 | user_l->hide(); | 175 | user_l->hide(); |
172 | userName->hide(); | 176 | userName->hide(); |
173 | pw_l->hide(); | 177 | pw_l->hide(); |
174 | passWord->hide(); | 178 | passWord->hide(); |
175 | store_password->hide(); | 179 | store_password->hide(); |
176 | hidePw->hide(); | 180 | hidePw->hide(); |
177 | } | 181 | } |
178 | } | 182 | } |
179 | 183 | ||
180 | void AuthWidget::showScriptWindow( bool show ) | 184 | void AuthWidget::showScriptWindow( bool show ) |
181 | { | 185 | { |
182 | if (show){ | 186 | if (show){ |
183 | if (!scriptWidget){ | 187 | if (!scriptWidget){ |
184 | scriptWidget = new ScriptWidget( _pppdata, this, isNewAccount, "scriptWid"); | 188 | scriptWidget = new ScriptWidget( _pppdata, this, isNewAccount, "scriptWid"); |
185 | layout->addMultiCellWidget( scriptWidget, 1, 4, 0, 1 ); | 189 | layout->addMultiCellWidget( scriptWidget, 1, 4, 0, 1 ); |
186 | } | 190 | } |
187 | scriptWidget->show(); | 191 | scriptWidget->show(); |
188 | }else{ // !show | 192 | }else{ // !show |
189 | if (scriptWidget) scriptWidget->hide(); | 193 | if (scriptWidget) scriptWidget->hide(); |
190 | } | 194 | } |
191 | } | 195 | } |
192 | 196 | ||
193 | void AuthWidget::toggleEchoMode( bool t ) | 197 | void AuthWidget::toggleEchoMode( bool t ) |
194 | { | 198 | { |
195 | passWord->setEchoMode( t ? QLineEdit::Normal : QLineEdit::Password ); | 199 | passWord->setEchoMode( t ? QLineEdit::Normal : QLineEdit::Password ); |
196 | } | 200 | } |
197 | 201 | ||
diff --git a/noncore/settings/networksettings/ppp/config.in b/noncore/settings/networksettings/ppp/config.in index 0b71434..570ebfe 100644 --- a/noncore/settings/networksettings/ppp/config.in +++ b/noncore/settings/networksettings/ppp/config.in | |||
@@ -1,4 +1,4 @@ | |||
1 | config PPP | 1 | config PPP |
2 | boolean "opie-networksettingsplugin-kppp (PPP module)" | 2 | boolean "opie-networksettingsplugin-kppp (PPP module)" |
3 | default "n" if NETWORKSETUP | 3 | default "y" |
4 | depends ( LIBQPE || LIBQPE-X11 ) && NETWORKSETUP && NETWORKSETUP-CORE && INTERFACES | 4 | depends ( LIBQPE || LIBQPE-X11 ) && NETWORKSETUP && NETWORKSETUP-CORE && INTERFACES |
diff --git a/noncore/settings/networksettings/ppp/connect.cpp b/noncore/settings/networksettings/ppp/connect.cpp index b75410c..24d33f4 100644 --- a/noncore/settings/networksettings/ppp/connect.cpp +++ b/noncore/settings/networksettings/ppp/connect.cpp | |||
@@ -1,1466 +1,1467 @@ | |||
1 | /* | 1 | /* |
2 | * kPPP: A pppd front end for the KDE project | 2 | * kPPP: A pppd front end for the KDE project |
3 | * | 3 | * |
4 | * | 4 | * |
5 | * Copyright (C) 1997 Bernd Johannes Wuebben | 5 | * Copyright (C) 1997 Bernd Johannes Wuebben |
6 | * wuebben@math.cornell.edu | 6 | * wuebben@math.cornell.edu |
7 | * Copyright (C) 1998-2001 Harri Porten <porten@kde.org> | 7 | * Copyright (C) 1998-2001 Harri Porten <porten@kde.org> |
8 | * | 8 | * |
9 | * based on EzPPP: | 9 | * based on EzPPP: |
10 | * Copyright (C) 1997 Jay Painter | 10 | * Copyright (C) 1997 Jay Painter |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or | 12 | * This program is free software; you can redistribute it and/or |
13 | * modify it under the terms of the GNU Library General Public | 13 | * modify it under the terms of the GNU Library General Public |
14 | * License as published by the Free Software Foundation; either | 14 | * License as published by the Free Software Foundation; either |
15 | * version 2 of the License, or (at your option) any later version. | 15 | * version 2 of the License, or (at your option) any later version. |
16 | * | 16 | * |
17 | * This program is distributed in the hope that it will be useful, | 17 | * This program is distributed in the hope that it will be useful, |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
20 | * Library General Public License for more details. | 20 | * Library General Public License for more details. |
21 | * | 21 | * |
22 | * You should have received a copy of the GNU Library General Public | 22 | * You should have received a copy of the GNU Library General Public |
23 | * License along with this program; if not, write to the Free | 23 | * License along with this program; if not, write to the Free |
24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | //#include <config.h> | 27 | /* OPIE */ |
28 | #include <opie2/odebug.h> | ||
29 | using namespace Opie::Core; | ||
28 | 30 | ||
31 | /* QT */ | ||
29 | #include <qlayout.h> | 32 | #include <qlayout.h> |
30 | #include <qregexp.h> | 33 | #include <qregexp.h> |
31 | |||
32 | #include <qapplication.h> | 34 | #include <qapplication.h> |
33 | //#include <kdebug.h> | ||
34 | //#include <klocale.h> | ||
35 | #include <qmessagebox.h> | 35 | #include <qmessagebox.h> |
36 | #include <qpushbutton.h> | 36 | #include <qpushbutton.h> |
37 | 37 | ||
38 | /* STD */ | ||
38 | #include <unistd.h> | 39 | #include <unistd.h> |
39 | #include <stdlib.h> | 40 | #include <stdlib.h> |
40 | #include <string.h> | 41 | #include <string.h> |
41 | #include <fcntl.h> | 42 | #include <fcntl.h> |
42 | #include <netdb.h> | 43 | #include <netdb.h> |
43 | #include <sys/types.h> | 44 | #include <sys/types.h> |
44 | #include <sys/socket.h> | 45 | #include <sys/socket.h> |
45 | #include <arpa/inet.h> | 46 | #include <arpa/inet.h> |
46 | #include <netinet/in.h> | 47 | #include <netinet/in.h> |
47 | #include <sys/ioctl.h> | 48 | #include <sys/ioctl.h> |
48 | #include <assert.h> | 49 | #include <assert.h> |
49 | 50 | ||
50 | #ifdef _XPG4_2 | 51 | #ifdef _XPG4_2 |
51 | #define __xnet_connectconnect | 52 | #define __xnet_connectconnect |
52 | #endif | 53 | #endif |
53 | 54 | ||
54 | #include <errno.h> | 55 | #include <errno.h> |
55 | 56 | ||
56 | #ifdef HAVE_SYS_PARAM_H | 57 | #ifdef HAVE_SYS_PARAM_H |
57 | #include <sys/param.h> | 58 | #include <sys/param.h> |
58 | #endif | 59 | #endif |
59 | 60 | ||
60 | #ifdef __linux__ | 61 | #ifdef __linux__ |
61 | #include "runtests.h" | 62 | #include "runtests.h" |
62 | #endif | 63 | #endif |
63 | 64 | ||
64 | #include "auth.h" | 65 | #include "auth.h" |
65 | #include "connect.h" | 66 | #include "connect.h" |
66 | //#include "docking.h" | 67 | //#include "docking.h" |
67 | #include "interfaceppp.h" | 68 | #include "interfaceppp.h" |
68 | #include "modem.h" | 69 | #include "modem.h" |
69 | #include "kpppconfig.h" | 70 | #include "kpppconfig.h" |
70 | #include "pppdata.h" | 71 | #include "pppdata.h" |
71 | #include "kpppwidget.h" | 72 | #include "kpppwidget.h" |
72 | //#include "requester.h" | 73 | //#include "requester.h" |
73 | //#include "utils.h" | 74 | //#include "utils.h" |
74 | #define execute_command system | 75 | #define execute_command system |
75 | 76 | ||
76 | QString old_hostname; | 77 | QString old_hostname; |
77 | bool modified_hostname; | 78 | bool modified_hostname; |
78 | 79 | ||
79 | 80 | ||
80 | ConnectWidget::ConnectWidget(InterfacePPP *ifp, QWidget *parent, const char *name) | 81 | ConnectWidget::ConnectWidget(InterfacePPP *ifp, QWidget *parent, const char *name) |
81 | : QWidget(parent, name), | 82 | : QWidget(parent, name), |
82 | myreadbuffer(""), | 83 | myreadbuffer(""), |
83 | main_timer_ID(0), | 84 | main_timer_ID(0), |
84 | vmain(0), | 85 | vmain(0), |
85 | substate(-1), | 86 | substate(-1), |
86 | scriptindex(0), | 87 | scriptindex(0), |
87 | loopnest(0), | 88 | loopnest(0), |
88 | loopend(false), | 89 | loopend(false), |
89 | semaphore(false), | 90 | semaphore(false), |
90 | expecting(false), | 91 | expecting(false), |
91 | readbuffer(""), | 92 | readbuffer(""), |
92 | scanvar(""), | 93 | scanvar(""), |
93 | scanning(false), | 94 | scanning(false), |
94 | pausing(false), | 95 | pausing(false), |
95 | dialnumber(0), | 96 | dialnumber(0), |
96 | _ifaceppp(ifp) | 97 | _ifaceppp(ifp) |
97 | { | 98 | { |
98 | modified_hostname = false; | 99 | modified_hostname = false; |
99 | 100 | ||
100 | QVBoxLayout *tl = new QVBoxLayout(this, 8, 10); | 101 | QVBoxLayout *tl = new QVBoxLayout(this, 8, 10); |
101 | QString tit = QObject::tr("Connecting to: "); | 102 | QString tit = QObject::tr("Connecting to: "); |
102 | setCaption(tit); | 103 | setCaption(tit); |
103 | 104 | ||
104 | QHBoxLayout *l0 = new QHBoxLayout(10); | 105 | QHBoxLayout *l0 = new QHBoxLayout(10); |
105 | tl->addLayout(l0); | 106 | tl->addLayout(l0); |
106 | l0->addSpacing(10); | 107 | l0->addSpacing(10); |
107 | messg = new QLabel(this, "messg"); | 108 | messg = new QLabel(this, "messg"); |
108 | messg->setFrameStyle(QFrame::Panel|QFrame::Sunken); | 109 | messg->setFrameStyle(QFrame::Panel|QFrame::Sunken); |
109 | messg->setAlignment(AlignCenter); | 110 | messg->setAlignment(AlignCenter); |
110 | messg->setText(QObject::tr("Unable to create modem lock file.")); | 111 | messg->setText(QObject::tr("Unable to create modem lock file.")); |
111 | messg->setMinimumHeight(messg->sizeHint().height() + 5); | 112 | messg->setMinimumHeight(messg->sizeHint().height() + 5); |
112 | // int messw = (messg->sizeHint().width() * 12) / 10; | 113 | // int messw = (messg->sizeHint().width() * 12) / 10; |
113 | // messw = QMAX(messw,280); | 114 | // messw = QMAX(messw,280); |
114 | // messg->setMinimumWidth(messw); | 115 | // messg->setMinimumWidth(messw); |
115 | if (_ifaceppp->getStatus()) | 116 | if (_ifaceppp->getStatus()) |
116 | messg->setText(QObject::tr("Online")); | 117 | messg->setText(QObject::tr("Online")); |
117 | else | 118 | else |
118 | messg->setText(QObject::tr("Offline")); | 119 | messg->setText(QObject::tr("Offline")); |
119 | l0->addSpacing(10); | 120 | l0->addSpacing(10); |
120 | l0->addWidget(messg); | 121 | l0->addWidget(messg); |
121 | l0->addSpacing(10); | 122 | l0->addSpacing(10); |
122 | 123 | ||
123 | QHBoxLayout *l1 = new QHBoxLayout(10); | 124 | QHBoxLayout *l1 = new QHBoxLayout(10); |
124 | tl->addLayout(l1); | 125 | tl->addLayout(l1); |
125 | l1->addStretch(1); | 126 | l1->addStretch(1); |
126 | 127 | ||
127 | debug = new QPushButton(QObject::tr("Log"), this); | 128 | debug = new QPushButton(QObject::tr("Log"), this); |
128 | debug->setToggleButton(true); | 129 | debug->setToggleButton(true); |
129 | debug->setEnabled( false ); // FIXME: disable the log button | 130 | debug->setEnabled( false ); // FIXME: disable the log button |
130 | connect(debug, SIGNAL(clicked()), SIGNAL(toggleDebugWindow())); | 131 | connect(debug, SIGNAL(clicked()), SIGNAL(toggleDebugWindow())); |
131 | 132 | ||
132 | cancel = new QPushButton(QObject::tr("Cancel"), this); | 133 | cancel = new QPushButton(QObject::tr("Cancel"), this); |
133 | cancel->setFocus(); | 134 | cancel->setFocus(); |
134 | connect(cancel, SIGNAL(clicked()), SLOT(cancelbutton())); | 135 | connect(cancel, SIGNAL(clicked()), SLOT(cancelbutton())); |
135 | 136 | ||
136 | // int maxw = QMAX(cancel->sizeHint().width(), | 137 | // int maxw = QMAX(cancel->sizeHint().width(), |
137 | // debug->sizeHint().width()); | 138 | // debug->sizeHint().width()); |
138 | // maxw = QMAX(maxw,65); | 139 | // maxw = QMAX(maxw,65); |
139 | // debug->setFixedWidth(maxw); | 140 | // debug->setFixedWidth(maxw); |
140 | // cancel->setFixedWidth(maxw); | 141 | // cancel->setFixedWidth(maxw); |
141 | l1->addWidget(debug); | 142 | l1->addWidget(debug); |
142 | l1->addWidget(cancel); | 143 | l1->addWidget(cancel); |
143 | 144 | ||
144 | // setFixedSize(sizeHint()); | 145 | // setFixedSize(sizeHint()); |
145 | 146 | ||
146 | pausetimer = new QTimer(this); | 147 | pausetimer = new QTimer(this); |
147 | connect(pausetimer, SIGNAL(timeout()), SLOT(pause())); | 148 | connect(pausetimer, SIGNAL(timeout()), SLOT(pause())); |
148 | 149 | ||
149 | qApp->processEvents(); | 150 | qApp->processEvents(); |
150 | 151 | ||
151 | timeout_timer = new QTimer(this); | 152 | timeout_timer = new QTimer(this); |
152 | connect(timeout_timer, SIGNAL(timeout()), SLOT(script_timed_out())); | 153 | connect(timeout_timer, SIGNAL(timeout()), SLOT(script_timed_out())); |
153 | 154 | ||
154 | inittimer = new QTimer(this); | 155 | inittimer = new QTimer(this); |
155 | connect(inittimer, SIGNAL(timeout()), SLOT(init())); | 156 | connect(inittimer, SIGNAL(timeout()), SLOT(init())); |
156 | 157 | ||
157 | if_timeout_timer = new QTimer(this); | 158 | if_timeout_timer = new QTimer(this); |
158 | connect(if_timeout_timer, SIGNAL(timeout()), SLOT(if_waiting_timed_out())); | 159 | connect(if_timeout_timer, SIGNAL(timeout()), SLOT(if_waiting_timed_out())); |
159 | 160 | ||
160 | connect(this,SIGNAL(if_waiting_signal()),this,SLOT(if_waiting_slot())); | 161 | connect(this,SIGNAL(if_waiting_signal()),this,SLOT(if_waiting_slot())); |
161 | 162 | ||
162 | prompt = new PWEntry( this, "pw" ); | 163 | prompt = new PWEntry( this, "pw" ); |
163 | if_timer = new QTimer(this); | 164 | if_timer = new QTimer(this); |
164 | connect(if_timer,SIGNAL(timeout()), SLOT(if_waiting_slot())); | 165 | connect(if_timer,SIGNAL(timeout()), SLOT(if_waiting_slot())); |
165 | } | 166 | } |
166 | 167 | ||
167 | 168 | ||
168 | ConnectWidget::~ConnectWidget() { | 169 | ConnectWidget::~ConnectWidget() { |
169 | } | 170 | } |
170 | 171 | ||
171 | 172 | ||
172 | void ConnectWidget::preinit() { | 173 | void ConnectWidget::preinit() { |
173 | // this is all just to keep the GUI nice and snappy .... | 174 | // this is all just to keep the GUI nice and snappy .... |
174 | // you have to see to believe ... | 175 | // you have to see to believe ... |
175 | messg->setText(QObject::tr("Looking for modem...")); | 176 | messg->setText(QObject::tr("Looking for modem...")); |
176 | inittimer->start(100); | 177 | inittimer->start(100); |
177 | } | 178 | } |
178 | 179 | ||
179 | 180 | ||
180 | void ConnectWidget::init() { | 181 | void ConnectWidget::init() { |
181 | _ifaceppp->data()->setpppdError(0); | 182 | _ifaceppp->data()->setpppdError(0); |
182 | inittimer->stop(); | 183 | inittimer->stop(); |
183 | vmain = 0; | 184 | vmain = 0; |
184 | substate = -1; | 185 | substate = -1; |
185 | expecting = false; | 186 | expecting = false; |
186 | pausing = false; | 187 | pausing = false; |
187 | scriptindex = 0; | 188 | scriptindex = 0; |
188 | myreadbuffer = ""; | 189 | myreadbuffer = ""; |
189 | scanning = false; | 190 | scanning = false; |
190 | scanvar = ""; | 191 | scanvar = ""; |
191 | firstrunID = true; | 192 | firstrunID = true; |
192 | firstrunPW = true; | 193 | firstrunPW = true; |
193 | // stats->totalbytes = 0; | 194 | // stats->totalbytes = 0; |
194 | dialnumber = 0; | 195 | dialnumber = 0; |
195 | 196 | ||
196 | // p_kppp->con_speed = ""; | 197 | // p_kppp->con_speed = ""; |
197 | 198 | ||
198 | // p_kppp->setQuitOnDisconnect (p_kppp->quitOnDisconnect() || _ifaceppp->data()->quit_on_disconnect()); | 199 | // p_kppp->setQuitOnDisconnect (p_kppp->quitOnDisconnect() || _ifaceppp->data()->quit_on_disconnect()); |
199 | 200 | ||
200 | comlist = &_ifaceppp->data()->scriptType(); | 201 | comlist = &_ifaceppp->data()->scriptType(); |
201 | arglist = &_ifaceppp->data()->script(); | 202 | arglist = &_ifaceppp->data()->script(); |
202 | 203 | ||
203 | QString tit = QObject::tr("Connecting to: %1").arg(_ifaceppp->data()->accname()); | 204 | QString tit = QObject::tr("Connecting to: %1").arg(_ifaceppp->data()->accname()); |
204 | setCaption(tit); | 205 | setCaption(tit); |
205 | 206 | ||
206 | qApp->processEvents(); | 207 | qApp->processEvents(); |
207 | 208 | ||
208 | // run the "before-connect" command | 209 | // run the "before-connect" command |
209 | if (!_ifaceppp->data()->command_before_connect().isEmpty()) { | 210 | if (!_ifaceppp->data()->command_before_connect().isEmpty()) { |
210 | messg->setText(QObject::tr("Running pre-startup command...")); | 211 | messg->setText(QObject::tr("Running pre-startup command...")); |
211 | emit debugMessage(QObject::tr("Running pre-startup command...")); | 212 | emit debugMessage(QObject::tr("Running pre-startup command...")); |
212 | 213 | ||
213 | qApp->processEvents(); | 214 | qApp->processEvents(); |
214 | QApplication::flushX(); | 215 | QApplication::flushX(); |
215 | pid_t id = execute_command(_ifaceppp->data()->command_before_connect()); | 216 | pid_t id = execute_command(_ifaceppp->data()->command_before_connect()); |
216 | // int i, status; | 217 | // int i, status; |
217 | 218 | ||
218 | // do { | 219 | // do { |
219 | // qApp->processEvents(); | 220 | // qApp->processEvents(); |
220 | // i = waitpid(id, &status, WNOHANG); | 221 | // i = waitpid(id, &status, WNOHANG); |
221 | // usleep(100000); | 222 | // usleep(100000); |
222 | // } while (i == 0 && errno == 0); | 223 | // } while (i == 0 && errno == 0); |
223 | } | 224 | } |
224 | 225 | ||
225 | int lock = _ifaceppp->modem()->lockdevice(); | 226 | int lock = _ifaceppp->modem()->lockdevice(); |
226 | 227 | ||
227 | if (lock == 1) { | 228 | if (lock == 1) { |
228 | messg->setText(QObject::tr("Modem device is locked.")); | 229 | messg->setText(QObject::tr("Modem device is locked.")); |
229 | vmain = 20; // wait until cancel is pressed | 230 | vmain = 20; // wait until cancel is pressed |
230 | return; | 231 | return; |
231 | } | 232 | } |
232 | 233 | ||
233 | if (lock == -1) { | 234 | if (lock == -1) { |
234 | messg->setText(QObject::tr("Unable to create modem lock file.")); | 235 | messg->setText(QObject::tr("Unable to create modem lock file.")); |
235 | vmain = 20; // wait until cancel is pressed | 236 | vmain = 20; // wait until cancel is pressed |
236 | return; | 237 | return; |
237 | } | 238 | } |
238 | 239 | ||
239 | if(_ifaceppp->modem()->opentty()) { | 240 | if(_ifaceppp->modem()->opentty()) { |
240 | messg->setText(_ifaceppp->modem()->modemMessage()); | 241 | messg->setText(_ifaceppp->modem()->modemMessage()); |
241 | qApp->processEvents(); | 242 | qApp->processEvents(); |
242 | if(_ifaceppp->modem()->hangup()) { | 243 | if(_ifaceppp->modem()->hangup()) { |
243 | 244 | ||
244 | qApp->processEvents(); | 245 | qApp->processEvents(); |
245 | 246 | ||
246 | semaphore = false; | 247 | semaphore = false; |
247 | 248 | ||
248 | _ifaceppp->modem()->stop(); | 249 | _ifaceppp->modem()->stop(); |
249 | _ifaceppp->modem()->notify(this, SLOT(readChar(unsigned char))); | 250 | _ifaceppp->modem()->notify(this, SLOT(readChar(unsigned char))); |
250 | 251 | ||
251 | // if we are stuck anywhere we will time out | 252 | // if we are stuck anywhere we will time out |
252 | timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000); | 253 | timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000); |
253 | 254 | ||
254 | // this timer will run the script etc. | 255 | // this timer will run the script etc. |
255 | main_timer_ID = startTimer(10); | 256 | main_timer_ID = startTimer(10); |
256 | 257 | ||
257 | return; | 258 | return; |
258 | } | 259 | } |
259 | } | 260 | } |
260 | 261 | ||
261 | // initialization failed | 262 | // initialization failed |
262 | messg->setText(_ifaceppp->modem()->modemMessage()); | 263 | messg->setText(_ifaceppp->modem()->modemMessage()); |
263 | vmain = 20; // wait until cancel is pressed | 264 | vmain = 20; // wait until cancel is pressed |
264 | _ifaceppp->modem()->unlockdevice(); | 265 | _ifaceppp->modem()->unlockdevice(); |
265 | } | 266 | } |
266 | 267 | ||
267 | 268 | ||
268 | void ConnectWidget::timerEvent(QTimerEvent *) { | 269 | void ConnectWidget::timerEvent(QTimerEvent *) { |
269 | if (semaphore || pausing) | 270 | if (semaphore || pausing) |
270 | return; | 271 | return; |
271 | 272 | ||
272 | if(vmain == 0) { | 273 | if(vmain == 0) { |
273 | #ifdef DEBUG_WO_DIALING | 274 | #ifdef DEBUG_WO_DIALING |
274 | vmain = 10; | 275 | vmain = 10; |
275 | return; | 276 | return; |
276 | #endif | 277 | #endif |
277 | 278 | ||
278 | assert(PPPData::NumInitStrings > 0); | 279 | assert(PPPData::NumInitStrings > 0); |
279 | // first init string ? | 280 | // first init string ? |
280 | if(substate == -1) { | 281 | if(substate == -1) { |
281 | messg->setText(QObject::tr("Initializing modem...")); | 282 | messg->setText(QObject::tr("Initializing modem...")); |
282 | emit debugMessage(QObject::tr("Initializing modem...")); | 283 | emit debugMessage(QObject::tr("Initializing modem...")); |
283 | substate = 0; | 284 | substate = 0; |
284 | } | 285 | } |
285 | 286 | ||
286 | QString initStr = _ifaceppp->data()->modemInitStr(substate); | 287 | QString initStr = _ifaceppp->data()->modemInitStr(substate); |
287 | if (!initStr.isEmpty()) { | 288 | if (!initStr.isEmpty()) { |
288 | // send a carriage return and then wait a bit so that the modem will | 289 | // send a carriage return and then wait a bit so that the modem will |
289 | // let us issue commands. | 290 | // let us issue commands. |
290 | if(_ifaceppp->data()->modemPreInitDelay() > 0) { | 291 | if(_ifaceppp->data()->modemPreInitDelay() > 0) { |
291 | usleep(_ifaceppp->data()->modemPreInitDelay() * 5000); | 292 | usleep(_ifaceppp->data()->modemPreInitDelay() * 5000); |
292 | writeline(""); | 293 | writeline(""); |
293 | usleep(_ifaceppp->data()->modemPreInitDelay() * 5000); | 294 | usleep(_ifaceppp->data()->modemPreInitDelay() * 5000); |
294 | } | 295 | } |
295 | setExpect(_ifaceppp->data()->modemInitResp()); | 296 | setExpect(_ifaceppp->data()->modemInitResp()); |
296 | writeline(initStr); | 297 | writeline(initStr); |
297 | usleep(_ifaceppp->data()->modemInitDelay() * 10000); // 0.01 - 3.0 sec | 298 | usleep(_ifaceppp->data()->modemInitDelay() * 10000); // 0.01 - 3.0 sec |
298 | } | 299 | } |
299 | 300 | ||
300 | substate++; | 301 | substate++; |
301 | 302 | ||
302 | /* | 303 | /* |
303 | * FIXME after 3.0: Make it possible to disable ATS11 since it | 304 | * FIXME after 3.0: Make it possible to disable ATS11 since it |
304 | * seems to be incompatible with some ISDN adapters (e.g. DataBox | 305 | * seems to be incompatible with some ISDN adapters (e.g. DataBox |
305 | * Speed Dragon). Even better would be to detect this when doing | 306 | * Speed Dragon). Even better would be to detect this when doing |
306 | * a "Modem Query" | 307 | * a "Modem Query" |
307 | */ | 308 | */ |
308 | if (MODEM_TONEDURATION != _ifaceppp->data()->modemToneDuration()) | 309 | if (MODEM_TONEDURATION != _ifaceppp->data()->modemToneDuration()) |
309 | vmain = 5; | 310 | vmain = 5; |
310 | else | 311 | else |
311 | vmain = 3; | 312 | vmain = 3; |
312 | 313 | ||
313 | return; | 314 | return; |
314 | } | 315 | } |
315 | 316 | ||
316 | if (vmain == 5) { | 317 | if (vmain == 5) { |
317 | if(!expecting) { | 318 | if(!expecting) { |
318 | QString sToneDuration = "ATS11=" + QString::number(_ifaceppp->data()->modemToneDuration()); | 319 | QString sToneDuration = "ATS11=" + QString::number(_ifaceppp->data()->modemToneDuration()); |
319 | QString msg = QObject::tr("Setting ") + sToneDuration; | 320 | QString msg = QObject::tr("Setting ") + sToneDuration; |
320 | messg->setText(msg); | 321 | messg->setText(msg); |
321 | emit debugMessage(msg); | 322 | emit debugMessage(msg); |
322 | setExpect(_ifaceppp->data()->modemInitResp()); | 323 | setExpect(_ifaceppp->data()->modemInitResp()); |
323 | writeline(sToneDuration); | 324 | writeline(sToneDuration); |
324 | } | 325 | } |
325 | vmain = 3; | 326 | vmain = 3; |
326 | return; | 327 | return; |
327 | } | 328 | } |
328 | 329 | ||
329 | if(vmain == 3) { | 330 | if(vmain == 3) { |
330 | if(!expecting) { | 331 | if(!expecting) { |
331 | // done with all init strings ? | 332 | // done with all init strings ? |
332 | if(substate < PPPData::NumInitStrings) { | 333 | if(substate < PPPData::NumInitStrings) { |
333 | vmain = 0; | 334 | vmain = 0; |
334 | return; | 335 | return; |
335 | } | 336 | } |
336 | substate = -1; | 337 | substate = -1; |
337 | // skip setting the volume if command is empty | 338 | // skip setting the volume if command is empty |
338 | if(_ifaceppp->data()->volumeInitString().isEmpty()) { | 339 | if(_ifaceppp->data()->volumeInitString().isEmpty()) { |
339 | vmain = 4; | 340 | vmain = 4; |
340 | return; | 341 | return; |
341 | } | 342 | } |
342 | messg->setText(QObject::tr("Setting speaker volume...")); | 343 | messg->setText(QObject::tr("Setting speaker volume...")); |
343 | emit debugMessage(QObject::tr("Setting speaker volume...")); | 344 | emit debugMessage(QObject::tr("Setting speaker volume...")); |
344 | 345 | ||
345 | setExpect(_ifaceppp->data()->modemInitResp()); | 346 | setExpect(_ifaceppp->data()->modemInitResp()); |
346 | QString vol("AT"); | 347 | QString vol("AT"); |
347 | vol += _ifaceppp->data()->volumeInitString(); | 348 | vol += _ifaceppp->data()->volumeInitString(); |
348 | writeline(vol); | 349 | writeline(vol); |
349 | usleep(_ifaceppp->data()->modemInitDelay() * 10000); // 0.01 - 3.0 sec | 350 | usleep(_ifaceppp->data()->modemInitDelay() * 10000); // 0.01 - 3.0 sec |
350 | vmain = 4; | 351 | vmain = 4; |
351 | return; | 352 | return; |
352 | } | 353 | } |
353 | } | 354 | } |
354 | 355 | ||
355 | if(vmain == 4) { | 356 | if(vmain == 4) { |
356 | if(!expecting) { | 357 | if(!expecting) { |
357 | if(!_ifaceppp->data()->waitForDialTone()) { | 358 | if(!_ifaceppp->data()->waitForDialTone()) { |
358 | QString msg = QObject::tr("Turning off dial tone waiting..."); | 359 | QString msg = QObject::tr("Turning off dial tone waiting..."); |
359 | messg->setText(msg); | 360 | messg->setText(msg); |
360 | emit debugMessage(msg); | 361 | emit debugMessage(msg); |
361 | setExpect(_ifaceppp->data()->modemInitResp()); | 362 | setExpect(_ifaceppp->data()->modemInitResp()); |
362 | writeline(_ifaceppp->data()->modemNoDialToneDetectionStr()); | 363 | writeline(_ifaceppp->data()->modemNoDialToneDetectionStr()); |
363 | } | 364 | } |
364 | vmain = 1; | 365 | vmain = 1; |
365 | return; | 366 | return; |
366 | } | 367 | } |
367 | } | 368 | } |
368 | 369 | ||
369 | // dial the number and wait to connect | 370 | // dial the number and wait to connect |
370 | if(vmain == 1) { | 371 | if(vmain == 1) { |
371 | if(!expecting) { | 372 | if(!expecting) { |
372 | 373 | ||
373 | timeout_timer->stop(); | 374 | timeout_timer->stop(); |
374 | timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000); | 375 | timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000); |
375 | 376 | ||
376 | QStringList &plist = _ifaceppp->data()->phonenumbers(); | 377 | QStringList &plist = _ifaceppp->data()->phonenumbers(); |
377 | QString bmarg= _ifaceppp->data()->dialPrefix(); | 378 | QString bmarg= _ifaceppp->data()->dialPrefix(); |
378 | bmarg += *plist.at(dialnumber); | 379 | bmarg += *plist.at(dialnumber); |
379 | QString bm = QObject::tr("Dialing %1").arg(bmarg); | 380 | QString bm = QObject::tr("Dialing %1").arg(bmarg); |
380 | messg->setText(bm); | 381 | messg->setText(bm); |
381 | emit debugMessage(bm); | 382 | emit debugMessage(bm); |
382 | 383 | ||
383 | QString pn = _ifaceppp->data()->modemDialStr(); | 384 | QString pn = _ifaceppp->data()->modemDialStr(); |
384 | pn += _ifaceppp->data()->dialPrefix(); | 385 | pn += _ifaceppp->data()->dialPrefix(); |
385 | pn += *plist.at(dialnumber); | 386 | pn += *plist.at(dialnumber); |
386 | if(++dialnumber >= plist.count()) | 387 | if(++dialnumber >= plist.count()) |
387 | dialnumber = 0; | 388 | dialnumber = 0; |
388 | writeline(pn); | 389 | writeline(pn); |
389 | 390 | ||
390 | setExpect(_ifaceppp->data()->modemConnectResp()); | 391 | setExpect(_ifaceppp->data()->modemConnectResp()); |
391 | vmain = 100; | 392 | vmain = 100; |
392 | return; | 393 | return; |
393 | } | 394 | } |
394 | } | 395 | } |
395 | 396 | ||
396 | // wait for connect, but redial if BUSY or wait for user cancel | 397 | // wait for connect, but redial if BUSY or wait for user cancel |
397 | // if NO CARRIER or NO DIALTONE | 398 | // if NO CARRIER or NO DIALTONE |
398 | if(vmain == 100) { | 399 | if(vmain == 100) { |
399 | if(!expecting) { | 400 | if(!expecting) { |
400 | myreadbuffer = _ifaceppp->data()->modemConnectResp(); | 401 | myreadbuffer = _ifaceppp->data()->modemConnectResp(); |
401 | setExpect("\n"); | 402 | setExpect("\n"); |
402 | vmain = 101; | 403 | vmain = 101; |
403 | return; | 404 | return; |
404 | } | 405 | } |
405 | 406 | ||
406 | if(readbuffer.contains(_ifaceppp->data()->modemBusyResp())) { | 407 | if(readbuffer.contains(_ifaceppp->data()->modemBusyResp())) { |
407 | timeout_timer->stop(); | 408 | timeout_timer->stop(); |
408 | timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000); | 409 | timeout_timer->start(_ifaceppp->data()->modemTimeout()*1000); |
409 | 410 | ||
410 | messg->setText(QObject::tr("Line busy. Hanging up...")); | 411 | messg->setText(QObject::tr("Line busy. Hanging up...")); |
411 | emit debugPutChar('\n'); | 412 | emit debugPutChar('\n'); |
412 | _ifaceppp->modem()->hangup(); | 413 | _ifaceppp->modem()->hangup(); |
413 | 414 | ||
414 | if(_ifaceppp->data()->busyWait() > 0) { | 415 | if(_ifaceppp->data()->busyWait() > 0) { |
415 | QString bm = QObject::tr("Line busy. Waiting: %1 seconds").arg(_ifaceppp->data()->busyWait()); | 416 | QString bm = QObject::tr("Line busy. Waiting: %1 seconds").arg(_ifaceppp->data()->busyWait()); |
416 | messg->setText(bm); | 417 | messg->setText(bm); |
417 | emit debugMessage(bm); | 418 | emit debugMessage(bm); |
418 | 419 | ||
419 | pausing = true; | 420 | pausing = true; |
420 | 421 | ||
421 | pausetimer->start(_ifaceppp->data()->busyWait()*1000, true); | 422 | pausetimer->start(_ifaceppp->data()->busyWait()*1000, true); |
422 | timeout_timer->stop(); | 423 | timeout_timer->stop(); |
423 | } | 424 | } |
424 | 425 | ||
425 | _ifaceppp->modem()->setDataMode(false); | 426 | _ifaceppp->modem()->setDataMode(false); |
426 | vmain = 0; | 427 | vmain = 0; |
427 | substate = -1; | 428 | substate = -1; |
428 | return; | 429 | return; |
429 | } | 430 | } |
430 | 431 | ||
431 | if(readbuffer.contains(_ifaceppp->data()->modemNoDialtoneResp())) { | 432 | if(readbuffer.contains(_ifaceppp->data()->modemNoDialtoneResp())) { |
432 | timeout_timer->stop(); | 433 | timeout_timer->stop(); |
433 | 434 | ||
434 | messg->setText(QObject::tr("No Dialtone")); | 435 | messg->setText(QObject::tr("No Dialtone")); |
435 | vmain = 20; | 436 | vmain = 20; |
436 | _ifaceppp->modem()->unlockdevice(); | 437 | _ifaceppp->modem()->unlockdevice(); |
437 | return; | 438 | return; |
438 | } | 439 | } |
439 | 440 | ||
440 | if(readbuffer.contains(_ifaceppp->data()->modemNoCarrierResp())) { | 441 | if(readbuffer.contains(_ifaceppp->data()->modemNoCarrierResp())) { |
441 | timeout_timer->stop(); | 442 | timeout_timer->stop(); |
442 | 443 | ||
443 | messg->setText(QObject::tr("No Carrier")); | 444 | messg->setText(QObject::tr("No Carrier")); |
444 | vmain = 20; | 445 | vmain = 20; |
445 | _ifaceppp->modem()->unlockdevice(); | 446 | _ifaceppp->modem()->unlockdevice(); |
446 | return; | 447 | return; |
447 | } | 448 | } |
448 | } | 449 | } |
449 | 450 | ||
450 | // wait for newline after CONNECT response (so we get the speed) | 451 | // wait for newline after CONNECT response (so we get the speed) |
451 | if(vmain == 101) { | 452 | if(vmain == 101) { |
452 | if(!expecting) { | 453 | if(!expecting) { |
453 | _ifaceppp->modem()->setDataMode(true); // modem will no longer respond to AT commands | 454 | _ifaceppp->modem()->setDataMode(true); // modem will no longer respond to AT commands |
454 | 455 | ||
455 | emit startAccounting(); | 456 | emit startAccounting(); |
456 | // p_kppp->con_win->startClock(); | 457 | // p_kppp->con_win->startClock(); |
457 | 458 | ||
458 | vmain = 2; | 459 | vmain = 2; |
459 | scriptTimeout=_ifaceppp->data()->modemTimeout()*1000; | 460 | scriptTimeout=_ifaceppp->data()->modemTimeout()*1000; |
460 | return; | 461 | return; |
461 | } | 462 | } |
462 | } | 463 | } |
463 | 464 | ||
464 | // execute the script | 465 | // execute the script |
465 | if(vmain == 2) { | 466 | if(vmain == 2) { |
466 | if(!expecting && !pausing && !scanning) { | 467 | if(!expecting && !pausing && !scanning) { |
467 | 468 | ||
468 | timeout_timer->stop(); | 469 | timeout_timer->stop(); |
469 | timeout_timer->start(scriptTimeout); | 470 | timeout_timer->start(scriptTimeout); |
470 | 471 | ||
471 | if((unsigned) scriptindex < comlist->count()) { | 472 | if((unsigned) scriptindex < comlist->count()) { |
472 | scriptCommand = *(comlist->at(scriptindex)); | 473 | scriptCommand = *(comlist->at(scriptindex)); |
473 | scriptArgument = *(arglist->at(scriptindex)); | 474 | scriptArgument = *(arglist->at(scriptindex)); |
474 | } else { | 475 | } else { |
475 | odebug << "End of script" << oendl; | 476 | odebug << "End of script" << oendl; |
476 | vmain = 10; | 477 | vmain = 10; |
477 | return; | 478 | return; |
478 | } | 479 | } |
479 | 480 | ||
480 | if (scriptCommand == "Scan") { | 481 | if (scriptCommand == "Scan") { |
481 | QString bm = QObject::tr("Scanning %1").arg(scriptArgument); | 482 | QString bm = QObject::tr("Scanning %1").arg(scriptArgument); |
482 | messg->setText(bm); | 483 | messg->setText(bm); |
483 | emit debugMessage(bm); | 484 | emit debugMessage(bm); |
484 | 485 | ||
485 | setScan(scriptArgument); | 486 | setScan(scriptArgument); |
486 | scriptindex++; | 487 | scriptindex++; |
487 | return; | 488 | return; |
488 | } | 489 | } |
489 | 490 | ||
490 | if (scriptCommand == "Save") { | 491 | if (scriptCommand == "Save") { |
491 | QString bm = QObject::tr("Saving %1").arg(scriptArgument); | 492 | QString bm = QObject::tr("Saving %1").arg(scriptArgument); |
492 | messg->setText(bm); | 493 | messg->setText(bm); |
493 | emit debugMessage(bm); | 494 | emit debugMessage(bm); |
494 | 495 | ||
495 | if (scriptArgument.lower() == "password") { | 496 | if (scriptArgument.lower() == "password") { |
496 | _ifaceppp->data()->setPassword(scanvar); | 497 | _ifaceppp->data()->setPassword(scanvar); |
497 | // p_kppp->setPW_Edit(scanvar); | 498 | // p_kppp->setPW_Edit(scanvar); |
498 | if(_ifaceppp->data()->storePassword()) | 499 | if(_ifaceppp->data()->storePassword()) |
499 | _ifaceppp->data()->setStoredPassword(scanvar); | 500 | _ifaceppp->data()->setStoredPassword(scanvar); |
500 | firstrunPW = true; | 501 | firstrunPW = true; |
501 | } | 502 | } |
502 | 503 | ||
503 | scriptindex++; | 504 | scriptindex++; |
504 | return; | 505 | return; |
505 | } | 506 | } |
506 | 507 | ||
507 | 508 | ||
508 | if (scriptCommand == "Send" || scriptCommand == "SendNoEcho") { | 509 | if (scriptCommand == "Send" || scriptCommand == "SendNoEcho") { |
509 | QString bm = QObject::tr("Sending %1"); | 510 | QString bm = QObject::tr("Sending %1"); |
510 | 511 | ||
511 | // replace %USERNAME% and %PASSWORD% | 512 | // replace %USERNAME% and %PASSWORD% |
512 | QString arg = scriptArgument; | 513 | QString arg = scriptArgument; |
513 | QRegExp re1("%USERNAME%"); | 514 | QRegExp re1("%USERNAME%"); |
514 | QRegExp re2("%PASSWORD%"); | 515 | QRegExp re2("%PASSWORD%"); |
515 | arg = arg.replace(re1, _ifaceppp->data()->storedUsername()); | 516 | arg = arg.replace(re1, _ifaceppp->data()->storedUsername()); |
516 | arg = arg.replace(re2, _ifaceppp->data()->storedPassword()); | 517 | arg = arg.replace(re2, _ifaceppp->data()->storedPassword()); |
517 | 518 | ||
518 | if (scriptCommand == "Send") | 519 | if (scriptCommand == "Send") |
519 | bm = bm.arg(scriptArgument); | 520 | bm = bm.arg(scriptArgument); |
520 | else { | 521 | else { |
521 | for(uint i = 0; i < scriptArgument.length(); i++) | 522 | for(uint i = 0; i < scriptArgument.length(); i++) |
522 | bm = bm.arg("*"); | 523 | bm = bm.arg("*"); |
523 | } | 524 | } |
524 | 525 | ||
525 | messg->setText(bm); | 526 | messg->setText(bm); |
526 | emit debugMessage(bm); | 527 | emit debugMessage(bm); |
527 | 528 | ||
528 | writeline(scriptArgument); | 529 | writeline(scriptArgument); |
529 | scriptindex++; | 530 | scriptindex++; |
530 | return; | 531 | return; |
531 | } | 532 | } |
532 | 533 | ||
533 | if (scriptCommand == "Expect") { | 534 | if (scriptCommand == "Expect") { |
534 | QString bm = QObject::tr("Expecting %1").arg(scriptArgument); | 535 | QString bm = QObject::tr("Expecting %1").arg(scriptArgument); |
535 | messg->setText(bm); | 536 | messg->setText(bm); |
536 | emit debugMessage(bm); | 537 | emit debugMessage(bm); |
537 | 538 | ||
538 | // The incrementing of the scriptindex MUST be before the | 539 | // The incrementing of the scriptindex MUST be before the |
539 | // call to setExpect otherwise the expect will miss a string that is | 540 | // call to setExpect otherwise the expect will miss a string that is |
540 | // already in the buffer. | 541 | // already in the buffer. |
541 | scriptindex++; | 542 | scriptindex++; |
542 | setExpect(scriptArgument); | 543 | setExpect(scriptArgument); |
543 | return; | 544 | return; |
544 | } | 545 | } |
545 | 546 | ||
546 | 547 | ||
547 | if (scriptCommand == "Pause") { | 548 | if (scriptCommand == "Pause") { |
548 | QString bm = QObject::tr("Pause %1 seconds").arg(scriptArgument); | 549 | QString bm = QObject::tr("Pause %1 seconds").arg(scriptArgument); |
549 | messg->setText(bm); | 550 | messg->setText(bm); |
550 | emit debugMessage(bm); | 551 | emit debugMessage(bm); |
551 | 552 | ||
552 | pausing = true; | 553 | pausing = true; |
553 | 554 | ||
554 | pausetimer->start(scriptArgument.toInt()*1000, true); | 555 | pausetimer->start(scriptArgument.toInt()*1000, true); |
555 | timeout_timer->stop(); | 556 | timeout_timer->stop(); |
556 | 557 | ||
557 | scriptindex++; | 558 | scriptindex++; |
558 | return; | 559 | return; |
559 | } | 560 | } |
560 | 561 | ||
561 | if (scriptCommand == "Timeout") { | 562 | if (scriptCommand == "Timeout") { |
562 | 563 | ||
563 | timeout_timer->stop(); | 564 | timeout_timer->stop(); |
564 | 565 | ||
565 | QString bm = QObject::tr("Timeout %1 seconds").arg(scriptArgument); | 566 | QString bm = QObject::tr("Timeout %1 seconds").arg(scriptArgument); |
566 | messg->setText(bm); | 567 | messg->setText(bm); |
567 | emit debugMessage(bm); | 568 | emit debugMessage(bm); |
568 | 569 | ||
569 | scriptTimeout=scriptArgument.toInt()*1000; | 570 | scriptTimeout=scriptArgument.toInt()*1000; |
570 | timeout_timer->start(scriptTimeout); | 571 | timeout_timer->start(scriptTimeout); |
571 | 572 | ||
572 | scriptindex++; | 573 | scriptindex++; |
573 | return; | 574 | return; |
574 | } | 575 | } |
575 | 576 | ||
576 | if (scriptCommand == "Hangup") { | 577 | if (scriptCommand == "Hangup") { |
577 | messg->setText(QObject::tr("Hangup")); | 578 | messg->setText(QObject::tr("Hangup")); |
578 | emit debugMessage(QObject::tr("Hangup")); | 579 | emit debugMessage(QObject::tr("Hangup")); |
579 | 580 | ||
580 | writeline(_ifaceppp->data()->modemHangupStr()); | 581 | writeline(_ifaceppp->data()->modemHangupStr()); |
581 | setExpect(_ifaceppp->data()->modemHangupResp()); | 582 | setExpect(_ifaceppp->data()->modemHangupResp()); |
582 | 583 | ||
583 | scriptindex++; | 584 | scriptindex++; |
584 | return; | 585 | return; |
585 | } | 586 | } |
586 | 587 | ||
587 | if (scriptCommand == "Answer") { | 588 | if (scriptCommand == "Answer") { |
588 | 589 | ||
589 | timeout_timer->stop(); | 590 | timeout_timer->stop(); |
590 | 591 | ||
591 | messg->setText(QObject::tr("Answer")); | 592 | messg->setText(QObject::tr("Answer")); |
592 | emit debugMessage(QObject::tr("Answer")); | 593 | emit debugMessage(QObject::tr("Answer")); |
593 | 594 | ||
594 | setExpect(_ifaceppp->data()->modemRingResp()); | 595 | setExpect(_ifaceppp->data()->modemRingResp()); |
595 | vmain = 150; | 596 | vmain = 150; |
596 | return; | 597 | return; |
597 | } | 598 | } |
598 | 599 | ||
599 | if (scriptCommand == "ID") { | 600 | if (scriptCommand == "ID") { |
600 | QString bm = QObject::tr("ID %1").arg(scriptArgument); | 601 | QString bm = QObject::tr("ID %1").arg(scriptArgument); |
601 | messg->setText(bm); | 602 | messg->setText(bm); |
602 | emit debugMessage(bm); | 603 | emit debugMessage(bm); |
603 | 604 | ||
604 | QString idstring = _ifaceppp->data()->password(); | 605 | QString idstring = _ifaceppp->data()->password(); |
605 | 606 | ||
606 | if(!idstring.isEmpty() && firstrunID) { | 607 | if(!idstring.isEmpty() && firstrunID) { |
607 | // the user entered an Id on the main kppp dialog | 608 | // the user entered an Id on the main kppp dialog |
608 | writeline(idstring); | 609 | writeline(idstring); |
609 | firstrunID = false; | 610 | firstrunID = false; |
610 | scriptindex++; | 611 | scriptindex++; |
611 | } | 612 | } |
612 | else { | 613 | else { |
613 | // the user didn't enter and Id on the main kppp dialog | 614 | // the user didn't enter and Id on the main kppp dialog |
614 | // let's query for an ID | 615 | // let's query for an ID |
615 | /* if not around yet, then post window... */ | 616 | /* if not around yet, then post window... */ |
616 | if (prompt->Consumed()) { | 617 | if (prompt->Consumed()) { |
617 | if (!(prompt->isVisible())) { | 618 | if (!(prompt->isVisible())) { |
618 | prompt->setPrompt(scriptArgument); | 619 | prompt->setPrompt(scriptArgument); |
619 | prompt->setEchoModeNormal(); | 620 | prompt->setEchoModeNormal(); |
620 | prompt->show(); | 621 | prompt->show(); |
621 | } | 622 | } |
622 | } else { | 623 | } else { |
623 | /* if prompt withdrawn ... then, */ | 624 | /* if prompt withdrawn ... then, */ |
624 | if(!(prompt->isVisible())) { | 625 | if(!(prompt->isVisible())) { |
625 | writeline(prompt->text()); | 626 | writeline(prompt->text()); |
626 | prompt->setConsumed(); | 627 | prompt->setConsumed(); |
627 | scriptindex++; | 628 | scriptindex++; |
628 | return; | 629 | return; |
629 | } | 630 | } |
630 | /* replace timeout value */ | 631 | /* replace timeout value */ |
631 | } | 632 | } |
632 | } | 633 | } |
633 | } | 634 | } |
634 | 635 | ||
635 | if (scriptCommand == "Password") { | 636 | if (scriptCommand == "Password") { |
636 | QString bm = QObject::tr("Password %1").arg(scriptArgument); | 637 | QString bm = QObject::tr("Password %1").arg(scriptArgument); |
637 | messg->setText(bm); | 638 | messg->setText(bm); |
638 | emit debugMessage(bm); | 639 | emit debugMessage(bm); |
639 | 640 | ||
640 | QString pwstring = _ifaceppp->data()->password(); | 641 | QString pwstring = _ifaceppp->data()->password(); |
641 | 642 | ||
642 | if(!pwstring.isEmpty() && firstrunPW) { | 643 | if(!pwstring.isEmpty() && firstrunPW) { |
643 | // the user entered a password on the main kppp dialog | 644 | // the user entered a password on the main kppp dialog |
644 | writeline(pwstring); | 645 | writeline(pwstring); |
645 | firstrunPW = false; | 646 | firstrunPW = false; |
646 | scriptindex++; | 647 | scriptindex++; |
647 | } | 648 | } |
648 | else { | 649 | else { |
649 | // the user didn't enter a password on the main kppp dialog | 650 | // the user didn't enter a password on the main kppp dialog |
650 | // let's query for a password | 651 | // let's query for a password |
651 | /* if not around yet, then post window... */ | 652 | /* if not around yet, then post window... */ |
652 | if (prompt->Consumed()) { | 653 | if (prompt->Consumed()) { |
653 | if (!(prompt->isVisible())) { | 654 | if (!(prompt->isVisible())) { |
654 | prompt->setPrompt(scriptArgument); | 655 | prompt->setPrompt(scriptArgument); |
655 | prompt->setEchoModePassword(); | 656 | prompt->setEchoModePassword(); |
656 | prompt->show(); | 657 | prompt->show(); |
657 | } | 658 | } |
658 | } else { | 659 | } else { |
659 | /* if prompt withdrawn ... then, */ | 660 | /* if prompt withdrawn ... then, */ |
660 | if(!(prompt->isVisible())) { | 661 | if(!(prompt->isVisible())) { |
661 | // p_kppp->setPW_Edit(prompt->text()); | 662 | // p_kppp->setPW_Edit(prompt->text()); |
662 | writeline(prompt->text()); | 663 | writeline(prompt->text()); |
663 | prompt->setConsumed(); | 664 | prompt->setConsumed(); |
664 | scriptindex++; | 665 | scriptindex++; |
665 | return; | 666 | return; |
666 | } | 667 | } |
667 | /* replace timeout value */ | 668 | /* replace timeout value */ |
668 | } | 669 | } |
669 | } | 670 | } |
670 | } | 671 | } |
671 | 672 | ||
672 | if (scriptCommand == "Prompt") { | 673 | if (scriptCommand == "Prompt") { |
673 | QString bm = QObject::tr("Prompting %1"); | 674 | QString bm = QObject::tr("Prompting %1"); |
674 | 675 | ||
675 | // if the scriptindex (aka the prompt text) includes a ## marker | 676 | // if the scriptindex (aka the prompt text) includes a ## marker |
676 | // this marker should get substituted with the contents of our stored | 677 | // this marker should get substituted with the contents of our stored |
677 | // variable (from the subsequent scan). | 678 | // variable (from the subsequent scan). |
678 | 679 | ||
679 | QString ts = scriptArgument; | 680 | QString ts = scriptArgument; |
680 | int vstart = ts.find( "##" ); | 681 | int vstart = ts.find( "##" ); |
681 | if( vstart != -1 ) { | 682 | if( vstart != -1 ) { |
682 | ts.remove( vstart, 2 ); | 683 | ts.remove( vstart, 2 ); |
683 | ts.insert( vstart, scanvar ); | 684 | ts.insert( vstart, scanvar ); |
684 | } | 685 | } |
685 | 686 | ||
686 | bm = bm.arg(ts); | 687 | bm = bm.arg(ts); |
687 | messg->setText(bm); | 688 | messg->setText(bm); |
688 | emit debugMessage(bm); | 689 | emit debugMessage(bm); |
689 | 690 | ||
690 | /* if not around yet, then post window... */ | 691 | /* if not around yet, then post window... */ |
691 | if (prompt->Consumed()) { | 692 | if (prompt->Consumed()) { |
692 | if (!(prompt->isVisible())) { | 693 | if (!(prompt->isVisible())) { |
693 | prompt->setPrompt( ts ); | 694 | prompt->setPrompt( ts ); |
694 | prompt->setEchoModeNormal(); | 695 | prompt->setEchoModeNormal(); |
695 | prompt->show(); | 696 | prompt->show(); |
696 | } | 697 | } |
697 | } else { | 698 | } else { |
698 | /* if prompt withdrawn ... then, */ | 699 | /* if prompt withdrawn ... then, */ |
699 | if (!(prompt->isVisible())) { | 700 | if (!(prompt->isVisible())) { |
700 | writeline(prompt->text()); | 701 | writeline(prompt->text()); |
701 | prompt->setConsumed(); | 702 | prompt->setConsumed(); |
702 | scriptindex++; | 703 | scriptindex++; |
703 | return; | 704 | return; |
704 | } | 705 | } |
705 | /* replace timeout value */ | 706 | /* replace timeout value */ |
706 | } | 707 | } |
707 | } | 708 | } |
708 | 709 | ||
709 | if (scriptCommand == "PWPrompt") { | 710 | if (scriptCommand == "PWPrompt") { |
710 | QString bm = QObject::tr("PW Prompt %1").arg(scriptArgument); | 711 | QString bm = QObject::tr("PW Prompt %1").arg(scriptArgument); |
711 | messg->setText(bm); | 712 | messg->setText(bm); |
712 | emit debugMessage(bm); | 713 | emit debugMessage(bm); |
713 | 714 | ||
714 | /* if not around yet, then post window... */ | 715 | /* if not around yet, then post window... */ |
715 | if (prompt->Consumed()) { | 716 | if (prompt->Consumed()) { |
716 | if (!(prompt->isVisible())) { | 717 | if (!(prompt->isVisible())) { |
717 | prompt->setPrompt(scriptArgument); | 718 | prompt->setPrompt(scriptArgument); |
718 | prompt->setEchoModePassword(); | 719 | prompt->setEchoModePassword(); |
719 | prompt->show(); | 720 | prompt->show(); |
720 | } | 721 | } |
721 | } else { | 722 | } else { |
722 | /* if prompt withdrawn ... then, */ | 723 | /* if prompt withdrawn ... then, */ |
723 | if (!(prompt->isVisible())) { | 724 | if (!(prompt->isVisible())) { |
724 | writeline(prompt->text()); | 725 | writeline(prompt->text()); |
725 | prompt->setConsumed(); | 726 | prompt->setConsumed(); |
726 | scriptindex++; | 727 | scriptindex++; |
727 | return; | 728 | return; |
728 | } | 729 | } |
729 | /* replace timeout value */ | 730 | /* replace timeout value */ |
730 | } | 731 | } |
731 | } | 732 | } |
732 | 733 | ||
733 | if (scriptCommand == "LoopStart") { | 734 | if (scriptCommand == "LoopStart") { |
734 | 735 | ||
735 | QString bm = QObject::tr("Loop Start %1").arg(scriptArgument); | 736 | QString bm = QObject::tr("Loop Start %1").arg(scriptArgument); |
736 | 737 | ||
737 | // The incrementing of the scriptindex MUST be before the | 738 | // The incrementing of the scriptindex MUST be before the |
738 | // call to setExpect otherwise the expect will miss a string that is | 739 | // call to setExpect otherwise the expect will miss a string that is |
739 | // already in the buffer. | 740 | // already in the buffer. |
740 | scriptindex++; | 741 | scriptindex++; |
741 | 742 | ||
742 | if ( loopnest > (MAXLOOPNEST-2) ) { | 743 | if ( loopnest > (MAXLOOPNEST-2) ) { |
743 | bm += QObject::tr("ERROR: Nested too deep, ignored."); | 744 | bm += QObject::tr("ERROR: Nested too deep, ignored."); |
744 | vmain=20; | 745 | vmain=20; |
745 | cancelbutton(); | 746 | cancelbutton(); |
746 | QMessageBox::critical(0, "error", QObject::tr("Loops nested too deeply!")); | 747 | QMessageBox::critical(0, "error", QObject::tr("Loops nested too deeply!")); |
747 | } else { | 748 | } else { |
748 | setExpect(scriptArgument); | 749 | setExpect(scriptArgument); |
749 | loopstartindex[loopnest] = scriptindex; | 750 | loopstartindex[loopnest] = scriptindex; |
750 | loopstr[loopnest] = scriptArgument; | 751 | loopstr[loopnest] = scriptArgument; |
751 | loopend = false; | 752 | loopend = false; |
752 | loopnest++; | 753 | loopnest++; |
753 | } | 754 | } |
754 | messg->setText(bm); | 755 | messg->setText(bm); |
755 | emit debugMessage(bm); | 756 | emit debugMessage(bm); |
756 | 757 | ||
757 | } | 758 | } |
758 | 759 | ||
759 | if (scriptCommand == "LoopEnd") { | 760 | if (scriptCommand == "LoopEnd") { |
760 | QString bm = QObject::tr("Loop End %1").arg(scriptArgument); | 761 | QString bm = QObject::tr("Loop End %1").arg(scriptArgument); |
761 | if ( loopnest <= 0 ) { | 762 | if ( loopnest <= 0 ) { |
762 | bm = QObject::tr("LoopEnd without matching Start! Line: %1").arg(bm); | 763 | bm = QObject::tr("LoopEnd without matching Start! Line: %1").arg(bm); |
763 | vmain=20; | 764 | vmain=20; |
764 | cancelbutton(); | 765 | cancelbutton(); |
765 | QMessageBox::critical(0, "error", bm); | 766 | QMessageBox::critical(0, "error", bm); |
766 | return; | 767 | return; |
767 | } else { | 768 | } else { |
768 | // NB! The incrementing of the scriptindex MUST be before the | 769 | // NB! The incrementing of the scriptindex MUST be before the |
769 | // call to setExpect otherwise the expect will miss a string | 770 | // call to setExpect otherwise the expect will miss a string |
770 | // that is already in the buffer. | 771 | // that is already in the buffer. |
771 | scriptindex++; | 772 | scriptindex++; |
772 | setExpect(scriptArgument); | 773 | setExpect(scriptArgument); |
773 | loopnest--; | 774 | loopnest--; |
774 | loopend = true; | 775 | loopend = true; |
775 | } | 776 | } |
776 | messg->setText(bm); | 777 | messg->setText(bm); |
777 | emit debugMessage(bm); | 778 | emit debugMessage(bm); |
778 | 779 | ||
779 | } | 780 | } |
780 | } | 781 | } |
781 | } | 782 | } |
782 | 783 | ||
783 | // this is a subroutine for the "Answer" script option | 784 | // this is a subroutine for the "Answer" script option |
784 | 785 | ||
785 | if(vmain == 150) { | 786 | if(vmain == 150) { |
786 | if(!expecting) { | 787 | if(!expecting) { |
787 | writeline(_ifaceppp->data()->modemAnswerStr()); | 788 | writeline(_ifaceppp->data()->modemAnswerStr()); |
788 | setExpect(_ifaceppp->data()->modemAnswerResp()); | 789 | setExpect(_ifaceppp->data()->modemAnswerResp()); |
789 | 790 | ||
790 | vmain = 2; | 791 | vmain = 2; |
791 | scriptindex++; | 792 | scriptindex++; |
792 | return; | 793 | return; |
793 | } | 794 | } |
794 | } | 795 | } |
795 | 796 | ||
796 | if(vmain == 30) { | 797 | if(vmain == 30) { |
797 | // if (termwindow->isVisible()) | 798 | // if (termwindow->isVisible()) |
798 | // return; | 799 | // return; |
799 | // if (termwindow->pressedContinue()) | 800 | // if (termwindow->pressedContinue()) |
800 | // vmain = 10; | 801 | // vmain = 10; |
801 | // else | 802 | // else |
802 | cancelbutton(); | 803 | cancelbutton(); |
803 | } | 804 | } |
804 | 805 | ||
805 | if(vmain == 10) { | 806 | if(vmain == 10) { |
806 | if(!expecting) { | 807 | if(!expecting) { |
807 | 808 | ||
808 | int result; | 809 | int result; |
809 | 810 | ||
810 | timeout_timer->stop(); | 811 | timeout_timer->stop(); |
811 | if_timeout_timer->stop(); // better be sure. | 812 | if_timeout_timer->stop(); // better be sure. |
812 | 813 | ||
813 | // stop reading of data | 814 | // stop reading of data |
814 | _ifaceppp->modem()->stop(); | 815 | _ifaceppp->modem()->stop(); |
815 | 816 | ||
816 | if(_ifaceppp->data()->authMethod() == AUTH_TERMINAL) { | 817 | if(_ifaceppp->data()->authMethod() == AUTH_TERMINAL) { |
817 | // if (termwindow) { | 818 | // if (termwindow) { |
818 | // delete termwindow; | 819 | // delete termwindow; |
819 | // termwindow = 0L; | 820 | // termwindow = 0L; |
820 | // this->show(); | 821 | // this->show(); |
821 | // } else { | 822 | // } else { |
822 | // termwindow = new LoginTerm(0L, 0L); | 823 | // termwindow = new LoginTerm(0L, 0L); |
823 | // hide(); | 824 | // hide(); |
824 | // termwindow->show(); | 825 | // termwindow->show(); |
825 | // vmain = 30; | 826 | // vmain = 30; |
826 | // return; | 827 | // return; |
827 | // } | 828 | // } |
828 | } | 829 | } |
829 | 830 | ||
830 | // Close the tty. This prevents the QTimer::singleShot() in | 831 | // Close the tty. This prevents the QTimer::singleShot() in |
831 | // Modem::readtty() from re-enabling the socket notifier. | 832 | // Modem::readtty() from re-enabling the socket notifier. |
832 | // The port is still held open by the helper process. | 833 | // The port is still held open by the helper process. |
833 | 834 | ||
834 | /* Er, there _is_ not QTimer::singleShot() in Modem::readtty(), | 835 | /* Er, there _is_ not QTimer::singleShot() in Modem::readtty(), |
835 | and closing the thing prevents pppd from using it later. */ | 836 | and closing the thing prevents pppd from using it later. */ |
836 | //_ifaceppp->modem()->closetty(); | 837 | //_ifaceppp->modem()->closetty(); |
837 | 838 | ||
838 | killTimer( main_timer_ID ); | 839 | killTimer( main_timer_ID ); |
839 | 840 | ||
840 | if_timeout_timer->start(_ifaceppp->data()->pppdTimeout()*1000); | 841 | if_timeout_timer->start(_ifaceppp->data()->pppdTimeout()*1000); |
841 | odebug << "started if timeout timer with " << _ifaceppp->data()->pppdTimeout()*1000 << "" << oendl; | 842 | odebug << "started if timeout timer with " << _ifaceppp->data()->pppdTimeout()*1000 << "" << oendl; |
842 | 843 | ||
843 | // find out PPP interface and notify the stats module | 844 | // find out PPP interface and notify the stats module |
844 | // stats->setUnit(pppInterfaceNumber()); | 845 | // stats->setUnit(pppInterfaceNumber()); |
845 | 846 | ||
846 | qApp->flushX(); | 847 | qApp->flushX(); |
847 | semaphore = true; | 848 | semaphore = true; |
848 | result = execppp(); | 849 | result = execppp(); |
849 | 850 | ||
850 | emit debugMessage(QObject::tr("Starting pppd...")); | 851 | emit debugMessage(QObject::tr("Starting pppd...")); |
851 | odebug << "execppp() returned with return-code " << result << "" << oendl; | 852 | odebug << "execppp() returned with return-code " << result << "" << oendl; |
852 | 853 | ||
853 | if(result) { | 854 | if(result) { |
854 | if(!_ifaceppp->data()->autoDNS()) | 855 | if(!_ifaceppp->data()->autoDNS()) |
855 | adddns( _ifaceppp ); | 856 | adddns( _ifaceppp ); |
856 | 857 | ||
857 | // O.K we are done here, let's change over to the if_waiting loop | 858 | // O.K we are done here, let's change over to the if_waiting loop |
858 | // where we wait for the ppp if (interface) to come up. | 859 | // where we wait for the ppp if (interface) to come up. |
859 | 860 | ||
860 | emit if_waiting_signal(); | 861 | emit if_waiting_signal(); |
861 | } else { | 862 | } else { |
862 | 863 | ||
863 | // starting pppd wasn't successful. Error messages were | 864 | // starting pppd wasn't successful. Error messages were |
864 | // handled by execppp(); | 865 | // handled by execppp(); |
865 | if_timeout_timer->stop(); | 866 | if_timeout_timer->stop(); |
866 | this->hide(); | 867 | this->hide(); |
867 | messg->setText(""); | 868 | messg->setText(""); |
868 | //p_kppp->quit_b->setFocus(); | 869 | //p_kppp->quit_b->setFocus(); |
869 | //p_kppp->show(); | 870 | //p_kppp->show(); |
870 | qApp->processEvents(); | 871 | qApp->processEvents(); |
871 | _ifaceppp->modem()->hangup(); | 872 | _ifaceppp->modem()->hangup(); |
872 | emit stopAccounting(); | 873 | emit stopAccounting(); |
873 | //p_kppp->con_win->stopClock(); | 874 | //p_kppp->con_win->stopClock(); |
874 | _ifaceppp->modem()->closetty(); | 875 | _ifaceppp->modem()->closetty(); |
875 | _ifaceppp->modem()->unlockdevice(); | 876 | _ifaceppp->modem()->unlockdevice(); |
876 | 877 | ||
877 | } | 878 | } |
878 | 879 | ||
879 | return; | 880 | return; |
880 | } | 881 | } |
881 | } | 882 | } |
882 | 883 | ||
883 | // this is a "wait until cancel" entry | 884 | // this is a "wait until cancel" entry |
884 | 885 | ||
885 | if(vmain == 20) { | 886 | if(vmain == 20) { |
886 | } | 887 | } |
887 | } | 888 | } |
888 | 889 | ||
889 | 890 | ||
890 | void ConnectWidget::set_con_speed_string() { | 891 | void ConnectWidget::set_con_speed_string() { |
891 | // Here we are trying to determine the speed at which we are connected. | 892 | // Here we are trying to determine the speed at which we are connected. |
892 | // Usually the modem responds after connect with something like | 893 | // Usually the modem responds after connect with something like |
893 | // CONNECT 115200, so all we need to do is find the number after CONNECT | 894 | // CONNECT 115200, so all we need to do is find the number after CONNECT |
894 | // or whatever the modemConnectResp() is. | 895 | // or whatever the modemConnectResp() is. |
895 | // p_kppp->con_speed = _ifaceppp->modem()->parseModemSpeed(myreadbuffer); | 896 | // p_kppp->con_speed = _ifaceppp->modem()->parseModemSpeed(myreadbuffer); |
896 | } | 897 | } |
897 | 898 | ||
898 | 899 | ||
899 | 900 | ||
900 | void ConnectWidget::readChar(unsigned char c) { | 901 | void ConnectWidget::readChar(unsigned char c) { |
901 | if(semaphore) | 902 | if(semaphore) |
902 | return; | 903 | return; |
903 | 904 | ||
904 | readbuffer += c; | 905 | readbuffer += c; |
905 | myreadbuffer += c; | 906 | myreadbuffer += c; |
906 | 907 | ||
907 | // While in scanning mode store each char to the scan buffer | 908 | // While in scanning mode store each char to the scan buffer |
908 | // for use in the prompt command | 909 | // for use in the prompt command |
909 | if( scanning ) | 910 | if( scanning ) |
910 | scanbuffer += c; | 911 | scanbuffer += c; |
911 | 912 | ||
912 | // add to debug window | 913 | // add to debug window |
913 | emit debugPutChar(c); | 914 | emit debugPutChar(c); |
914 | 915 | ||
915 | checkBuffers(); | 916 | checkBuffers(); |
916 | } | 917 | } |
917 | 918 | ||
918 | 919 | ||
919 | void ConnectWidget::checkBuffers() { | 920 | void ConnectWidget::checkBuffers() { |
920 | // Let's check if we are finished with scanning: | 921 | // Let's check if we are finished with scanning: |
921 | // The scanstring have to be in the buffer and the latest character | 922 | // The scanstring have to be in the buffer and the latest character |
922 | // was a carriage return or an linefeed (depending on modem setup) | 923 | // was a carriage return or an linefeed (depending on modem setup) |
923 | if( scanning && scanbuffer.contains(scanstr) && | 924 | if( scanning && scanbuffer.contains(scanstr) && |
924 | ( scanbuffer.right(1) == "\n" || scanbuffer.right(1) == "\r") ) { | 925 | ( scanbuffer.right(1) == "\n" || scanbuffer.right(1) == "\r") ) { |
925 | scanning = false; | 926 | scanning = false; |
926 | 927 | ||
927 | int vstart = scanbuffer.find( scanstr ) + scanstr.length(); | 928 | int vstart = scanbuffer.find( scanstr ) + scanstr.length(); |
928 | scanvar = scanbuffer.mid( vstart, scanbuffer.length() - vstart); | 929 | scanvar = scanbuffer.mid( vstart, scanbuffer.length() - vstart); |
929 | scanvar = scanvar.stripWhiteSpace(); | 930 | scanvar = scanvar.stripWhiteSpace(); |
930 | 931 | ||
931 | // Show the Variabel content in the debug window | 932 | // Show the Variabel content in the debug window |
932 | QString sv = QObject::tr("Scan Var: %1").arg(scanvar); | 933 | QString sv = QObject::tr("Scan Var: %1").arg(scanvar); |
933 | emit debugMessage(sv); | 934 | emit debugMessage(sv); |
934 | } | 935 | } |
935 | 936 | ||
936 | if(expecting) { | 937 | if(expecting) { |
937 | if(readbuffer.contains(expectstr)) { | 938 | if(readbuffer.contains(expectstr)) { |
938 | expecting = false; | 939 | expecting = false; |
939 | // keep everything after the expected string | 940 | // keep everything after the expected string |
940 | readbuffer.remove(0, readbuffer.find(expectstr) + expectstr.length()); | 941 | readbuffer.remove(0, readbuffer.find(expectstr) + expectstr.length()); |
941 | 942 | ||
942 | QString ts = QObject::tr("Found: %1").arg(expectstr); | 943 | QString ts = QObject::tr("Found: %1").arg(expectstr); |
943 | emit debugMessage(ts); | 944 | emit debugMessage(ts); |
944 | 945 | ||
945 | if (loopend) { | 946 | if (loopend) { |
946 | loopend=false; | 947 | loopend=false; |
947 | } | 948 | } |
948 | } | 949 | } |
949 | 950 | ||
950 | if (loopend && readbuffer.contains(loopstr[loopnest])) { | 951 | if (loopend && readbuffer.contains(loopstr[loopnest])) { |
951 | expecting = false; | 952 | expecting = false; |
952 | readbuffer = ""; | 953 | readbuffer = ""; |
953 | QString ts = QObject::tr("Looping: %1").arg(loopstr[loopnest]); | 954 | QString ts = QObject::tr("Looping: %1").arg(loopstr[loopnest]); |
954 | emit debugMessage(ts); | 955 | emit debugMessage(ts); |
955 | scriptindex = loopstartindex[loopnest]; | 956 | scriptindex = loopstartindex[loopnest]; |
956 | loopend = false; | 957 | loopend = false; |
957 | loopnest++; | 958 | loopnest++; |
958 | } | 959 | } |
959 | // notify event loop if expected string was found | 960 | // notify event loop if expected string was found |
960 | if(!expecting) | 961 | if(!expecting) |
961 | timerEvent((QTimerEvent *) 0); | 962 | timerEvent((QTimerEvent *) 0); |
962 | } | 963 | } |
963 | } | 964 | } |
964 | 965 | ||
965 | 966 | ||
966 | 967 | ||
967 | void ConnectWidget::pause() { | 968 | void ConnectWidget::pause() { |
968 | pausing = false; | 969 | pausing = false; |
969 | pausetimer->stop(); | 970 | pausetimer->stop(); |
970 | } | 971 | } |
971 | 972 | ||
972 | 973 | ||
973 | void ConnectWidget::cancelbutton() { | 974 | void ConnectWidget::cancelbutton() { |
974 | _ifaceppp->modem()->stop(); | 975 | _ifaceppp->modem()->stop(); |
975 | killTimer(main_timer_ID); | 976 | killTimer(main_timer_ID); |
976 | timeout_timer->stop(); | 977 | timeout_timer->stop(); |
977 | if_timer->stop(); | 978 | if_timer->stop(); |
978 | if_timeout_timer->stop(); | 979 | if_timeout_timer->stop(); |
979 | 980 | ||
980 | // if (termwindow) { | 981 | // if (termwindow) { |
981 | // delete termwindow; | 982 | // delete termwindow; |
982 | // termwindow = 0L; | 983 | // termwindow = 0L; |
983 | // this->show(); | 984 | // this->show(); |
984 | // } | 985 | // } |
985 | 986 | ||
986 | messg->setText(QObject::tr("One moment please...")); | 987 | messg->setText(QObject::tr("One moment please...")); |
987 | 988 | ||
988 | // just to be sure | 989 | // just to be sure |
989 | _ifaceppp->modem()->removeSecret(AUTH_PAP); | 990 | _ifaceppp->modem()->removeSecret(AUTH_PAP); |
990 | _ifaceppp->modem()->removeSecret(AUTH_CHAP); | 991 | _ifaceppp->modem()->removeSecret(AUTH_CHAP); |
991 | removedns(_ifaceppp); | 992 | removedns(_ifaceppp); |
992 | 993 | ||
993 | qApp->processEvents(); | 994 | qApp->processEvents(); |
994 | 995 | ||
995 | _ifaceppp->modem()->killPPPDaemon(); | 996 | _ifaceppp->modem()->killPPPDaemon(); |
996 | _ifaceppp->modem()->hangup(); | 997 | _ifaceppp->modem()->hangup(); |
997 | 998 | ||
998 | 999 | ||
999 | // p_kppp->quit_b->setFocus(); | 1000 | // p_kppp->quit_b->setFocus(); |
1000 | // p_kppp->show(); | 1001 | // p_kppp->show(); |
1001 | // emit stopAccounting();// just to be sure | 1002 | // emit stopAccounting();// just to be sure |
1002 | // p_kppp->con_win->stopClock(); | 1003 | // p_kppp->con_win->stopClock(); |
1003 | _ifaceppp->modem()->closetty(); | 1004 | _ifaceppp->modem()->closetty(); |
1004 | _ifaceppp->modem()->unlockdevice(); | 1005 | _ifaceppp->modem()->unlockdevice(); |
1005 | 1006 | ||
1006 | //abort prompt window... | 1007 | //abort prompt window... |
1007 | if (prompt->isVisible()) { | 1008 | if (prompt->isVisible()) { |
1008 | prompt->hide(); | 1009 | prompt->hide(); |
1009 | } | 1010 | } |
1010 | prompt->setConsumed(); | 1011 | prompt->setConsumed(); |
1011 | 1012 | ||
1012 | _ifaceppp->setStatus( false ); | 1013 | _ifaceppp->setStatus( false ); |
1013 | _ifaceppp->refresh(); | 1014 | _ifaceppp->refresh(); |
1014 | // messg->setText(tr("offline")); | 1015 | // messg->setText(tr("offline")); |
1015 | refresh(); | 1016 | refresh(); |
1016 | } | 1017 | } |
1017 | 1018 | ||
1018 | 1019 | ||
1019 | void ConnectWidget::script_timed_out() { | 1020 | void ConnectWidget::script_timed_out() { |
1020 | if(vmain == 20) { // we are in the 'wait for the user to cancel' state | 1021 | if(vmain == 20) { // we are in the 'wait for the user to cancel' state |
1021 | timeout_timer->stop(); | 1022 | timeout_timer->stop(); |
1022 | emit stopAccounting(); | 1023 | emit stopAccounting(); |
1023 | // p_kppp->con_win->stopClock(); | 1024 | // p_kppp->con_win->stopClock(); |
1024 | return; | 1025 | return; |
1025 | } | 1026 | } |
1026 | 1027 | ||
1027 | if (prompt->isVisible()) | 1028 | if (prompt->isVisible()) |
1028 | prompt->hide(); | 1029 | prompt->hide(); |
1029 | 1030 | ||
1030 | prompt->setConsumed(); | 1031 | prompt->setConsumed(); |
1031 | messg->setText(QObject::tr("Script timed out!")); | 1032 | messg->setText(QObject::tr("Script timed out!")); |
1032 | _ifaceppp->modem()->hangup(); | 1033 | _ifaceppp->modem()->hangup(); |
1033 | emit stopAccounting(); | 1034 | emit stopAccounting(); |
1034 | // p_kppp->con_win->stopClock(); | 1035 | // p_kppp->con_win->stopClock(); |
1035 | 1036 | ||
1036 | vmain = 0; // let's try again. | 1037 | vmain = 0; // let's try again. |
1037 | substate = -1; | 1038 | substate = -1; |
1038 | } | 1039 | } |
1039 | 1040 | ||
1040 | 1041 | ||
1041 | void ConnectWidget::setScan(const QString &n) { | 1042 | void ConnectWidget::setScan(const QString &n) { |
1042 | scanning = true; | 1043 | scanning = true; |
1043 | scanstr = n; | 1044 | scanstr = n; |
1044 | scanbuffer = ""; | 1045 | scanbuffer = ""; |
1045 | 1046 | ||
1046 | QString ts = QObject::tr("Scanning: %1").arg(n); | 1047 | QString ts = QObject::tr("Scanning: %1").arg(n); |
1047 | emit debugMessage(ts); | 1048 | emit debugMessage(ts); |
1048 | } | 1049 | } |
1049 | 1050 | ||
1050 | 1051 | ||
1051 | void ConnectWidget::setExpect(const QString &n) { | 1052 | void ConnectWidget::setExpect(const QString &n) { |
1052 | expecting = true; | 1053 | expecting = true; |
1053 | expectstr = n; | 1054 | expectstr = n; |
1054 | 1055 | ||
1055 | QString ts = QObject::tr("Expecting: %1").arg(n); | 1056 | QString ts = QObject::tr("Expecting: %1").arg(n); |
1056 | ts.replace(QRegExp("\n"), "<LF>"); | 1057 | ts.replace(QRegExp("\n"), "<LF>"); |
1057 | emit debugMessage(ts); | 1058 | emit debugMessage(ts); |
1058 | 1059 | ||
1059 | // check if the expected string is in the read buffer already. | 1060 | // check if the expected string is in the read buffer already. |
1060 | checkBuffers(); | 1061 | checkBuffers(); |
1061 | } | 1062 | } |
1062 | 1063 | ||
1063 | 1064 | ||
1064 | void ConnectWidget::if_waiting_timed_out() { | 1065 | void ConnectWidget::if_waiting_timed_out() { |
1065 | if_timer->stop(); | 1066 | if_timer->stop(); |
1066 | if_timeout_timer->stop(); | 1067 | if_timeout_timer->stop(); |
1067 | odebug << "if_waiting_timed_out()" << oendl; | 1068 | odebug << "if_waiting_timed_out()" << oendl; |
1068 | 1069 | ||
1069 | _ifaceppp->data()->setpppdError(E_IF_TIMEOUT); | 1070 | _ifaceppp->data()->setpppdError(E_IF_TIMEOUT); |
1070 | 1071 | ||
1071 | // let's kill the stuck pppd | 1072 | // let's kill the stuck pppd |
1072 | _ifaceppp->modem()->killPPPDaemon(); | 1073 | _ifaceppp->modem()->killPPPDaemon(); |
1073 | 1074 | ||
1074 | emit stopAccounting(); | 1075 | emit stopAccounting(); |
1075 | // p_kppp->con_win->stopClock(); | 1076 | // p_kppp->con_win->stopClock(); |
1076 | 1077 | ||
1077 | 1078 | ||
1078 | // killing ppp will generate a SIGCHLD which will be caught in pppdie() | 1079 | // killing ppp will generate a SIGCHLD which will be caught in pppdie() |
1079 | // in main.cpp what happens next will depend on the boolean | 1080 | // in main.cpp what happens next will depend on the boolean |
1080 | // reconnect_on_disconnect which is set in ConnectWidget::init(); | 1081 | // reconnect_on_disconnect which is set in ConnectWidget::init(); |
1081 | } | 1082 | } |
1082 | 1083 | ||
1083 | void ConnectWidget::pppdDied() | 1084 | void ConnectWidget::pppdDied() |
1084 | { | 1085 | { |
1085 | if_timer->stop(); | 1086 | if_timer->stop(); |
1086 | if_timeout_timer->stop(); | 1087 | if_timeout_timer->stop(); |
1087 | } | 1088 | } |
1088 | 1089 | ||
1089 | void ConnectWidget::if_waiting_slot() { | 1090 | void ConnectWidget::if_waiting_slot() { |
1090 | messg->setText(QObject::tr("Logging on to network...")); | 1091 | messg->setText(QObject::tr("Logging on to network...")); |
1091 | 1092 | ||
1092 | // if(!stats->ifIsUp()) { | 1093 | // if(!stats->ifIsUp()) { |
1093 | 1094 | ||
1094 | // if(_ifaceppp->data()->pppdError() != 0) { | 1095 | // if(_ifaceppp->data()->pppdError() != 0) { |
1095 | // // we are here if pppd died immediately after starting it. | 1096 | // // we are here if pppd died immediately after starting it. |
1096 | // pppdDied(); | 1097 | // pppdDied(); |
1097 | // // error message handled in main.cpp: sigPPPDDied() | 1098 | // // error message handled in main.cpp: sigPPPDDied() |
1098 | // return; | 1099 | // return; |
1099 | // } | 1100 | // } |
1100 | 1101 | ||
1101 | // if_timer->start(100, TRUE); // single shot | 1102 | // if_timer->start(100, TRUE); // single shot |
1102 | // return; | 1103 | // return; |
1103 | // } | 1104 | // } |
1104 | 1105 | ||
1105 | // O.K the ppp interface is up and running | 1106 | // O.K the ppp interface is up and running |
1106 | // give it a few time to come up completly (0.2 seconds) | 1107 | // give it a few time to come up completly (0.2 seconds) |
1107 | if_timeout_timer->stop(); | 1108 | if_timeout_timer->stop(); |
1108 | if_timer->stop(); | 1109 | if_timer->stop(); |
1109 | usleep(200000); | 1110 | usleep(200000); |
1110 | 1111 | ||
1111 | if(_ifaceppp->data()->autoDNS()) | 1112 | if(_ifaceppp->data()->autoDNS()) |
1112 | addpeerdns( _ifaceppp ); | 1113 | addpeerdns( _ifaceppp ); |
1113 | 1114 | ||
1114 | // Close the debugging window. If we are connected, we | 1115 | // Close the debugging window. If we are connected, we |
1115 | // are not really interested in debug output | 1116 | // are not really interested in debug output |
1116 | emit closeDebugWindow(); | 1117 | emit closeDebugWindow(); |
1117 | // p_kppp->statdlg->take_stats(); // start taking ppp statistics | 1118 | // p_kppp->statdlg->take_stats(); // start taking ppp statistics |
1118 | auto_hostname(_ifaceppp); | 1119 | auto_hostname(_ifaceppp); |
1119 | 1120 | ||
1120 | if(!_ifaceppp->data()->command_on_connect().isEmpty()) { | 1121 | if(!_ifaceppp->data()->command_on_connect().isEmpty()) { |
1121 | messg->setText(QObject::tr("Running startup command...")); | 1122 | messg->setText(QObject::tr("Running startup command...")); |
1122 | 1123 | ||
1123 | // make sure that we don't get any async errors | 1124 | // make sure that we don't get any async errors |
1124 | qApp->flushX(); | 1125 | qApp->flushX(); |
1125 | execute_command(_ifaceppp->data()->command_on_connect()); | 1126 | execute_command(_ifaceppp->data()->command_on_connect()); |
1126 | messg->setText(QObject::tr("Done")); | 1127 | messg->setText(QObject::tr("Done")); |
1127 | } | 1128 | } |
1128 | 1129 | ||
1129 | // remove the authentication file | 1130 | // remove the authentication file |
1130 | _ifaceppp->modem()->removeSecret(AUTH_PAP); | 1131 | _ifaceppp->modem()->removeSecret(AUTH_PAP); |
1131 | _ifaceppp->modem()->removeSecret(AUTH_CHAP); | 1132 | _ifaceppp->modem()->removeSecret(AUTH_CHAP); |
1132 | 1133 | ||
1133 | emit debugMessage(QObject::tr("Done")); | 1134 | emit debugMessage(QObject::tr("Done")); |
1134 | set_con_speed_string(); | 1135 | set_con_speed_string(); |
1135 | 1136 | ||
1136 | // p_kppp->con_win->setConnectionSpeed(p_kppp->con_speed); | 1137 | // p_kppp->con_win->setConnectionSpeed(p_kppp->con_speed); |
1137 | // this->hide(); | 1138 | // this->hide(); |
1138 | // messg->setText(""); | 1139 | // messg->setText(""); |
1139 | 1140 | ||
1140 | _ifaceppp->setStatus( true ); | 1141 | _ifaceppp->setStatus( true ); |
1141 | 1142 | ||
1142 | m_refreshTimer = new QTimer( this ); | 1143 | m_refreshTimer = new QTimer( this ); |
1143 | connect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) ); | 1144 | connect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) ); |
1144 | m_refreshTimer->start( 3000 ); | 1145 | m_refreshTimer->start( 3000 ); |
1145 | //_ifaceppp->refresh(); | 1146 | //_ifaceppp->refresh(); |
1146 | // emit _ifaceppp->updateInterface(_ifaceppp); | 1147 | // emit _ifaceppp->updateInterface(_ifaceppp); |
1147 | 1148 | ||
1148 | // prepare the con_win so as to have the right size for | 1149 | // prepare the con_win so as to have the right size for |
1149 | // accounting / non-accounting mode | 1150 | // accounting / non-accounting mode |
1150 | // if(p_kppp->acct != 0) | 1151 | // if(p_kppp->acct != 0) |
1151 | // p_kppp->con_win->accounting(p_kppp->acct->running()); | 1152 | // p_kppp->con_win->accounting(p_kppp->acct->running()); |
1152 | // else | 1153 | // else |
1153 | // p_kppp->con_win->accounting(false); | 1154 | // p_kppp->con_win->accounting(false); |
1154 | 1155 | ||
1155 | // if (_ifaceppp->data()->get_dock_into_panel()) { | 1156 | // if (_ifaceppp->data()->get_dock_into_panel()) { |
1156 | // // DockWidget::dock_widget->show(); | 1157 | // // DockWidget::dock_widget->show(); |
1157 | // // DockWidget::dock_widget->take_stats(); | 1158 | // // DockWidget::dock_widget->take_stats(); |
1158 | // // this->hide(); | 1159 | // // this->hide(); |
1159 | // } | 1160 | // } |
1160 | // else { | 1161 | // else { |
1161 | // // p_kppp->con_win->show(); | 1162 | // // p_kppp->con_win->show(); |
1162 | 1163 | ||
1163 | // if(_ifaceppp->data()->get_iconify_on_connect()) { | 1164 | // if(_ifaceppp->data()->get_iconify_on_connect()) { |
1164 | // // p_kppp->con_win->showMinimized(); | 1165 | // // p_kppp->con_win->showMinimized(); |
1165 | // } | 1166 | // } |
1166 | // } | 1167 | // } |
1167 | 1168 | ||
1168 | _ifaceppp->modem()->closetty(); | 1169 | _ifaceppp->modem()->closetty(); |
1169 | } | 1170 | } |
1170 | 1171 | ||
1171 | void ConnectWidget::refresh() { | 1172 | void ConnectWidget::refresh() { |
1172 | _ifaceppp->refresh(); | 1173 | _ifaceppp->refresh(); |
1173 | if ( _ifaceppp->getStatus() ) { | 1174 | if ( _ifaceppp->getStatus() ) { |
1174 | messg->setText(QObject::tr("Online")); | 1175 | messg->setText(QObject::tr("Online")); |
1175 | } else { | 1176 | } else { |
1176 | messg->setText(QObject::tr("Offline")); | 1177 | messg->setText(QObject::tr("Offline")); |
1177 | } | 1178 | } |
1178 | } | 1179 | } |
1179 | 1180 | ||
1180 | 1181 | ||
1181 | bool ConnectWidget::execppp() { | 1182 | bool ConnectWidget::execppp() { |
1182 | QString command; | 1183 | QString command; |
1183 | 1184 | ||
1184 | command = "pppd"; | 1185 | command = "pppd"; |
1185 | 1186 | ||
1186 | // as of version 2.3.6 pppd falls back to the real user rights when | 1187 | // as of version 2.3.6 pppd falls back to the real user rights when |
1187 | // opening a device given in a command line. To avoid permission conflicts | 1188 | // opening a device given in a command line. To avoid permission conflicts |
1188 | // we'll simply leave this argument away. pppd will then use the default tty | 1189 | // we'll simply leave this argument away. pppd will then use the default tty |
1189 | // which is the serial port we connected stdin/stdout to in opener.cpp. | 1190 | // which is the serial port we connected stdin/stdout to in opener.cpp. |
1190 | // command += " "; | 1191 | // command += " "; |
1191 | // command += _ifaceppp->data()->modemDevice(); | 1192 | // command += _ifaceppp->data()->modemDevice(); |
1192 | 1193 | ||
1193 | command += " " + _ifaceppp->data()->speed(); | 1194 | command += " " + _ifaceppp->data()->speed(); |
1194 | 1195 | ||
1195 | command += " -detach"; | 1196 | command += " -detach"; |
1196 | 1197 | ||
1197 | if(_ifaceppp->data()->ipaddr() != "0.0.0.0" || | 1198 | if(_ifaceppp->data()->ipaddr() != "0.0.0.0" || |
1198 | _ifaceppp->data()->gateway() != "0.0.0.0") { | 1199 | _ifaceppp->data()->gateway() != "0.0.0.0") { |
1199 | if(_ifaceppp->data()->ipaddr() != "0.0.0.0") { | 1200 | if(_ifaceppp->data()->ipaddr() != "0.0.0.0") { |
1200 | command += " "; | 1201 | command += " "; |
1201 | command += _ifaceppp->data()->ipaddr(); | 1202 | command += _ifaceppp->data()->ipaddr(); |
1202 | command += ":"; | 1203 | command += ":"; |
1203 | } | 1204 | } |
1204 | else { | 1205 | else { |
1205 | command += " "; | 1206 | command += " "; |
1206 | command += ":"; | 1207 | command += ":"; |
1207 | } | 1208 | } |
1208 | 1209 | ||
1209 | if(_ifaceppp->data()->gateway() != "0.0.0.0") | 1210 | if(_ifaceppp->data()->gateway() != "0.0.0.0") |
1210 | command += _ifaceppp->data()->gateway(); | 1211 | command += _ifaceppp->data()->gateway(); |
1211 | } | 1212 | } |
1212 | 1213 | ||
1213 | if(_ifaceppp->data()->subnetmask() != "0.0.0.0") | 1214 | if(_ifaceppp->data()->subnetmask() != "0.0.0.0") |
1214 | command += " netmask " + _ifaceppp->data()->subnetmask(); | 1215 | command += " netmask " + _ifaceppp->data()->subnetmask(); |
1215 | 1216 | ||
1216 | if(_ifaceppp->data()->flowcontrol() != "None") { | 1217 | if(_ifaceppp->data()->flowcontrol() != "None") { |
1217 | if(_ifaceppp->data()->flowcontrol() == "CRTSCTS") | 1218 | if(_ifaceppp->data()->flowcontrol() == "CRTSCTS") |
1218 | command += " crtscts"; | 1219 | command += " crtscts"; |
1219 | else | 1220 | else |
1220 | command += " xonxoff"; | 1221 | command += " xonxoff"; |
1221 | } | 1222 | } |
1222 | 1223 | ||
1223 | if(_ifaceppp->data()->defaultroute()) | 1224 | if(_ifaceppp->data()->defaultroute()) |
1224 | command += " defaultroute"; | 1225 | command += " defaultroute"; |
1225 | 1226 | ||
1226 | if(_ifaceppp->data()->autoDNS()) | 1227 | if(_ifaceppp->data()->autoDNS()) |
1227 | command += " usepeerdns"; | 1228 | command += " usepeerdns"; |
1228 | 1229 | ||
1229 | 1230 | ||
1230 | // PAP settings | 1231 | // PAP settings |
1231 | if(_ifaceppp->data()->authMethod() == AUTH_PAP) { | 1232 | if(_ifaceppp->data()->authMethod() == AUTH_PAP) { |
1232 | command += " -chap user "; | 1233 | command += " -chap user "; |
1233 | command = command + _ifaceppp->data()->storedUsername(); | 1234 | command = command + _ifaceppp->data()->storedUsername(); |
1234 | } | 1235 | } |
1235 | 1236 | ||
1236 | // CHAP settings | 1237 | // CHAP settings |
1237 | if(_ifaceppp->data()->authMethod() == AUTH_CHAP) { | 1238 | if(_ifaceppp->data()->authMethod() == AUTH_CHAP) { |
1238 | command += " -pap user "; | 1239 | command += " -pap user "; |
1239 | command = command + _ifaceppp->data()->storedUsername(); | 1240 | command = command + _ifaceppp->data()->storedUsername(); |
1240 | } | 1241 | } |
1241 | 1242 | ||
1242 | // PAP/CHAP settings | 1243 | // PAP/CHAP settings |
1243 | if(_ifaceppp->data()->authMethod() == AUTH_PAPCHAP) { | 1244 | if(_ifaceppp->data()->authMethod() == AUTH_PAPCHAP) { |
1244 | QString tmpName = _ifaceppp->data()->storedUsername(); | 1245 | QString tmpName = _ifaceppp->data()->storedUsername(); |
1245 | if ( !tmpName.isEmpty() ) { | 1246 | if ( !tmpName.isEmpty() ) { |
1246 | command += " user "; | 1247 | command += " user "; |
1247 | command = command + tmpName; | 1248 | command = command + tmpName; |
1248 | } | 1249 | } |
1249 | } | 1250 | } |
1250 | 1251 | ||
1251 | // check for debug | 1252 | // check for debug |
1252 | if(_ifaceppp->data()->getPPPDebug()) | 1253 | if(_ifaceppp->data()->getPPPDebug()) |
1253 | command += " debug"; | 1254 | command += " debug"; |
1254 | 1255 | ||
1255 | QStringList &arglist = _ifaceppp->data()->pppdArgument(); | 1256 | QStringList &arglist = _ifaceppp->data()->pppdArgument(); |
1256 | for ( QStringList::Iterator it = arglist.begin(); | 1257 | for ( QStringList::Iterator it = arglist.begin(); |
1257 | it != arglist.end(); | 1258 | it != arglist.end(); |
1258 | ++it ) | 1259 | ++it ) |
1259 | { | 1260 | { |
1260 | command += " " + *it; | 1261 | command += " " + *it; |
1261 | } | 1262 | } |
1262 | 1263 | ||
1263 | command += " call opie-kppp logfd 11"; | 1264 | command += " call opie-kppp logfd 11"; |
1264 | 1265 | ||
1265 | if (command.length() > MAX_CMDLEN) { | 1266 | if (command.length() > MAX_CMDLEN) { |
1266 | QMessageBox::critical(this, "error", QObject::tr( | 1267 | QMessageBox::critical(this, "error", QObject::tr( |
1267 | "pppd command + command-line arguments exceed " | 1268 | "pppd command + command-line arguments exceed " |
1268 | "2024 characters in length." | 1269 | "2024 characters in length." |
1269 | )); | 1270 | )); |
1270 | 1271 | ||
1271 | return false; // nonsensically long command which would bust my buffer buf. | 1272 | return false; // nonsensically long command which would bust my buffer buf. |
1272 | } | 1273 | } |
1273 | 1274 | ||
1274 | owarn << "Command IS: " << command.latin1() << "" << oendl; | 1275 | owarn << "Command IS: " << command.latin1() << "" << oendl; |
1275 | 1276 | ||
1276 | qApp->flushX(); | 1277 | qApp->flushX(); |
1277 | 1278 | ||
1278 | return _ifaceppp->modem()->execPPPDaemon(command); | 1279 | return _ifaceppp->modem()->execPPPDaemon(command); |
1279 | } | 1280 | } |
1280 | 1281 | ||
1281 | 1282 | ||
1282 | void ConnectWidget::closeEvent( QCloseEvent *e ) { | 1283 | void ConnectWidget::closeEvent( QCloseEvent *e ) { |
1283 | e->ignore(); | 1284 | e->ignore(); |
1284 | emit cancelbutton(); | 1285 | emit cancelbutton(); |
1285 | } | 1286 | } |
1286 | 1287 | ||
1287 | 1288 | ||
1288 | void ConnectWidget::setMsg(const QString &msg) { | 1289 | void ConnectWidget::setMsg(const QString &msg) { |
1289 | messg->setText(msg); | 1290 | messg->setText(msg); |
1290 | } | 1291 | } |
1291 | 1292 | ||
1292 | void ConnectWidget::writeline(const QString &s) { | 1293 | void ConnectWidget::writeline(const QString &s) { |
1293 | _ifaceppp->modem()->writeLine(s.local8Bit()); | 1294 | _ifaceppp->modem()->writeLine(s.local8Bit()); |
1294 | } | 1295 | } |
1295 | 1296 | ||
1296 | // Set the hostname and domain from DNS Server | 1297 | // Set the hostname and domain from DNS Server |
1297 | void auto_hostname(InterfacePPP *_ifaceppp) { | 1298 | void auto_hostname(InterfacePPP *_ifaceppp) { |
1298 | struct in_addr local_ip; | 1299 | struct in_addr local_ip; |
1299 | struct hostent *hostname_entry; | 1300 | struct hostent *hostname_entry; |
1300 | QString new_hostname; | 1301 | QString new_hostname; |
1301 | int dot; | 1302 | int dot; |
1302 | char tmp_str[100]; // buffer overflow safe | 1303 | char tmp_str[100]; // buffer overflow safe |
1303 | 1304 | ||
1304 | gethostname(tmp_str, sizeof(tmp_str)); | 1305 | gethostname(tmp_str, sizeof(tmp_str)); |
1305 | tmp_str[sizeof(tmp_str)-1]=0; // panic | 1306 | tmp_str[sizeof(tmp_str)-1]=0; // panic |
1306 | old_hostname=tmp_str; // copy to QString | 1307 | old_hostname=tmp_str; // copy to QString |
1307 | 1308 | ||
1308 | // if (!p_kppp->stats->local_ip_address.isEmpty() && _ifaceppp->data()->autoname()) { | 1309 | // if (!p_kppp->stats->local_ip_address.isEmpty() && _ifaceppp->data()->autoname()) { |
1309 | if ( _ifaceppp->data()->autoname()) { | 1310 | if ( _ifaceppp->data()->autoname()) { |
1310 | // local_ip.s_addr=inet_addr(p_kppp->stats->local_ip_address.ascii()); | 1311 | // local_ip.s_addr=inet_addr(p_kppp->stats->local_ip_address.ascii()); |
1311 | hostname_entry=gethostbyaddr((const char *)&local_ip,sizeof(in_addr),AF_INET); | 1312 | hostname_entry=gethostbyaddr((const char *)&local_ip,sizeof(in_addr),AF_INET); |
1312 | 1313 | ||
1313 | if (hostname_entry != 0L) { | 1314 | if (hostname_entry != 0L) { |
1314 | new_hostname=hostname_entry->h_name; | 1315 | new_hostname=hostname_entry->h_name; |
1315 | dot=new_hostname.find('.'); | 1316 | dot=new_hostname.find('.'); |
1316 | new_hostname=new_hostname.remove(dot,new_hostname.length()-dot); | 1317 | new_hostname=new_hostname.remove(dot,new_hostname.length()-dot); |
1317 | _ifaceppp->modem()->setHostname(new_hostname); | 1318 | _ifaceppp->modem()->setHostname(new_hostname); |
1318 | modified_hostname = TRUE; | 1319 | modified_hostname = TRUE; |
1319 | 1320 | ||
1320 | new_hostname=hostname_entry->h_name; | 1321 | new_hostname=hostname_entry->h_name; |
1321 | new_hostname.remove(0,dot+1); | 1322 | new_hostname.remove(0,dot+1); |
1322 | 1323 | ||
1323 | add_domain(new_hostname, _ifaceppp); | 1324 | add_domain(new_hostname, _ifaceppp); |
1324 | } | 1325 | } |
1325 | } | 1326 | } |
1326 | 1327 | ||
1327 | } | 1328 | } |
1328 | 1329 | ||
1329 | // Replace the DNS domain entry in the /etc/resolv.conf file and | 1330 | // Replace the DNS domain entry in the /etc/resolv.conf file and |
1330 | // disable the nameserver entries if option is enabled | 1331 | // disable the nameserver entries if option is enabled |
1331 | void add_domain(const QString &domain, InterfacePPP *_ifaceppp) { | 1332 | void add_domain(const QString &domain, InterfacePPP *_ifaceppp) { |
1332 | 1333 | ||
1333 | int fd; | 1334 | int fd; |
1334 | char c; | 1335 | char c; |
1335 | QString resolv[MAX_RESOLVCONF_LINES]; | 1336 | QString resolv[MAX_RESOLVCONF_LINES]; |
1336 | 1337 | ||
1337 | if (domain.isEmpty()) | 1338 | if (domain.isEmpty()) |
1338 | return; | 1339 | return; |
1339 | 1340 | ||
1340 | if((fd = _ifaceppp->modem()->openResolv(O_RDONLY)) >= 0) { | 1341 | if((fd = _ifaceppp->modem()->openResolv(O_RDONLY)) >= 0) { |
1341 | 1342 | ||
1342 | int i=0; | 1343 | int i=0; |
1343 | while((read(fd, &c, 1) == 1) && (i < MAX_RESOLVCONF_LINES)) { | 1344 | while((read(fd, &c, 1) == 1) && (i < MAX_RESOLVCONF_LINES)) { |
1344 | if(c == '\n') { | 1345 | if(c == '\n') { |
1345 | i++; | 1346 | i++; |
1346 | } | 1347 | } |
1347 | else { | 1348 | else { |
1348 | resolv[i] += c; | 1349 | resolv[i] += c; |
1349 | } | 1350 | } |
1350 | } | 1351 | } |
1351 | close(fd); | 1352 | close(fd); |
1352 | if ((c != '\n') && (i < MAX_RESOLVCONF_LINES)) i++; | 1353 | if ((c != '\n') && (i < MAX_RESOLVCONF_LINES)) i++; |
1353 | 1354 | ||
1354 | if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_TRUNC)) >= 0) { | 1355 | if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_TRUNC)) >= 0) { |
1355 | QCString tmp = "domain " + domain.local8Bit() + | 1356 | QCString tmp = "domain " + domain.local8Bit() + |
1356 | " \t\t#kppp temp entry\n"; | 1357 | " \t\t#kppp temp entry\n"; |
1357 | write(fd, tmp.data(), tmp.length()); | 1358 | write(fd, tmp.data(), tmp.length()); |
1358 | 1359 | ||
1359 | for(int j=0; j < i; j++) { | 1360 | for(int j=0; j < i; j++) { |
1360 | if((resolv[j].contains("domain") || | 1361 | if((resolv[j].contains("domain") || |
1361 | ( resolv[j].contains("nameserver") | 1362 | ( resolv[j].contains("nameserver") |
1362 | && !resolv[j].contains("#kppp temp entry") | 1363 | && !resolv[j].contains("#kppp temp entry") |
1363 | && _ifaceppp->data()->exDNSDisabled())) | 1364 | && _ifaceppp->data()->exDNSDisabled())) |
1364 | && !resolv[j].contains("#entry disabled by kppp")) { | 1365 | && !resolv[j].contains("#entry disabled by kppp")) { |
1365 | QCString tmp = "# " + resolv[j].local8Bit() + | 1366 | QCString tmp = "# " + resolv[j].local8Bit() + |
1366 | " \t#entry disabled by kppp\n"; | 1367 | " \t#entry disabled by kppp\n"; |
1367 | write(fd, tmp, tmp.length()); | 1368 | write(fd, tmp, tmp.length()); |
1368 | } | 1369 | } |
1369 | else { | 1370 | else { |
1370 | QCString tmp = resolv[j].local8Bit() + "\n"; | 1371 | QCString tmp = resolv[j].local8Bit() + "\n"; |
1371 | write(fd, tmp, tmp.length()); | 1372 | write(fd, tmp, tmp.length()); |
1372 | } | 1373 | } |
1373 | } | 1374 | } |
1374 | } | 1375 | } |
1375 | close(fd); | 1376 | close(fd); |
1376 | } | 1377 | } |
1377 | } | 1378 | } |
1378 | 1379 | ||
1379 | 1380 | ||
1380 | // adds the DNS entries in the /etc/resolv.conf file | 1381 | // adds the DNS entries in the /etc/resolv.conf file |
1381 | void adddns( InterfacePPP *_ifaceppp) | 1382 | void adddns( InterfacePPP *_ifaceppp) |
1382 | { | 1383 | { |
1383 | int fd; | 1384 | int fd; |
1384 | 1385 | ||
1385 | if ((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_APPEND)) >= 0) { | 1386 | if ((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_APPEND)) >= 0) { |
1386 | QStringList &dnslist = _ifaceppp->data()->dns(); | 1387 | QStringList &dnslist = _ifaceppp->data()->dns(); |
1387 | for ( QStringList::Iterator it = dnslist.begin(); | 1388 | for ( QStringList::Iterator it = dnslist.begin(); |
1388 | it != dnslist.end(); | 1389 | it != dnslist.end(); |
1389 | ++it ) | 1390 | ++it ) |
1390 | { | 1391 | { |
1391 | QCString dns = "nameserver " + (*it).local8Bit() + | 1392 | QCString dns = "nameserver " + (*it).local8Bit() + |
1392 | " \t#kppp temp entry\n"; | 1393 | " \t#kppp temp entry\n"; |
1393 | write(fd, dns.data(), dns.length()); | 1394 | write(fd, dns.data(), dns.length()); |
1394 | } | 1395 | } |
1395 | close(fd); | 1396 | close(fd); |
1396 | } | 1397 | } |
1397 | add_domain(_ifaceppp->data()->domain(), _ifaceppp); | 1398 | add_domain(_ifaceppp->data()->domain(), _ifaceppp); |
1398 | } | 1399 | } |
1399 | 1400 | ||
1400 | void addpeerdns(InterfacePPP *_ifaceppp) { | 1401 | void addpeerdns(InterfacePPP *_ifaceppp) { |
1401 | int fd, fd2; | 1402 | int fd, fd2; |
1402 | 1403 | ||
1403 | if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_APPEND)) >= 0) { | 1404 | if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_APPEND)) >= 0) { |
1404 | if((fd2 = open("/etc/ppp/resolv.conf", O_RDONLY)) >= 0) { | 1405 | if((fd2 = open("/etc/ppp/resolv.conf", O_RDONLY)) >= 0) { |
1405 | char c; | 1406 | char c; |
1406 | int i = 0; | 1407 | int i = 0; |
1407 | while(i++ < 100 && read(fd2, &c, 1) == 1) { | 1408 | while(i++ < 100 && read(fd2, &c, 1) == 1) { |
1408 | if(c == '\n') | 1409 | if(c == '\n') |
1409 | write(fd, "\t#kppp temp entry\n", 18); | 1410 | write(fd, "\t#kppp temp entry\n", 18); |
1410 | else | 1411 | else |
1411 | write(fd, &c, 1); | 1412 | write(fd, &c, 1); |
1412 | } | 1413 | } |
1413 | close(fd2); | 1414 | close(fd2); |
1414 | } else | 1415 | } else |
1415 | fprintf(stderr, "failed to read from /etc/ppp/resolv.conf\n"); | 1416 | fprintf(stderr, "failed to read from /etc/ppp/resolv.conf\n"); |
1416 | close(fd); | 1417 | close(fd); |
1417 | } | 1418 | } |
1418 | add_domain(_ifaceppp->data()->domain(), _ifaceppp); | 1419 | add_domain(_ifaceppp->data()->domain(), _ifaceppp); |
1419 | } | 1420 | } |
1420 | 1421 | ||
1421 | // remove the dns entries from the /etc/resolv.conf file | 1422 | // remove the dns entries from the /etc/resolv.conf file |
1422 | void removedns(InterfacePPP *_ifaceppp) { | 1423 | void removedns(InterfacePPP *_ifaceppp) { |
1423 | 1424 | ||
1424 | int fd; | 1425 | int fd; |
1425 | char c; | 1426 | char c; |
1426 | QString resolv[MAX_RESOLVCONF_LINES]; | 1427 | QString resolv[MAX_RESOLVCONF_LINES]; |
1427 | 1428 | ||
1428 | if((fd = _ifaceppp->modem()->openResolv(O_RDONLY)) >= 0) { | 1429 | if((fd = _ifaceppp->modem()->openResolv(O_RDONLY)) >= 0) { |
1429 | 1430 | ||
1430 | int i=0; | 1431 | int i=0; |
1431 | while(read(fd, &c, 1) == 1 && i < MAX_RESOLVCONF_LINES) { | 1432 | while(read(fd, &c, 1) == 1 && i < MAX_RESOLVCONF_LINES) { |
1432 | if(c == '\n') { | 1433 | if(c == '\n') { |
1433 | i++; | 1434 | i++; |
1434 | } | 1435 | } |
1435 | else { | 1436 | else { |
1436 | resolv[i] += c; | 1437 | resolv[i] += c; |
1437 | } | 1438 | } |
1438 | } | 1439 | } |
1439 | close(fd); | 1440 | close(fd); |
1440 | 1441 | ||
1441 | if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_TRUNC)) >= 0) { | 1442 | if((fd = _ifaceppp->modem()->openResolv(O_WRONLY|O_TRUNC)) >= 0) { |
1442 | for(int j=0; j < i; j++) { | 1443 | for(int j=0; j < i; j++) { |
1443 | if(resolv[j].contains("#kppp temp entry")) continue; | 1444 | if(resolv[j].contains("#kppp temp entry")) continue; |
1444 | if(resolv[j].contains("#entry disabled by kppp")) { | 1445 | if(resolv[j].contains("#entry disabled by kppp")) { |
1445 | QCString tmp = resolv[j].local8Bit(); | 1446 | QCString tmp = resolv[j].local8Bit(); |
1446 | write(fd, tmp.data()+2, tmp.length() - 27); | 1447 | write(fd, tmp.data()+2, tmp.length() - 27); |
1447 | write(fd, "\n", 1); | 1448 | write(fd, "\n", 1); |
1448 | } | 1449 | } |
1449 | else { | 1450 | else { |
1450 | QCString tmp = resolv[j].local8Bit() + "\n"; | 1451 | QCString tmp = resolv[j].local8Bit() + "\n"; |
1451 | write(fd, tmp, tmp.length()); | 1452 | write(fd, tmp, tmp.length()); |
1452 | } | 1453 | } |
1453 | } | 1454 | } |
1454 | } | 1455 | } |
1455 | close(fd); | 1456 | close(fd); |
1456 | 1457 | ||
1457 | } | 1458 | } |
1458 | 1459 | ||
1459 | if ( modified_hostname ) { | 1460 | if ( modified_hostname ) { |
1460 | _ifaceppp->modem()->setHostname(old_hostname); | 1461 | _ifaceppp->modem()->setHostname(old_hostname); |
1461 | modified_hostname = FALSE; | 1462 | modified_hostname = FALSE; |
1462 | } | 1463 | } |
1463 | 1464 | ||
1464 | } | 1465 | } |
1465 | 1466 | ||
1466 | 1467 | ||
diff --git a/noncore/settings/networksettings/ppp/devices.cpp b/noncore/settings/networksettings/ppp/devices.cpp index 350ff32..42de44c 100644 --- a/noncore/settings/networksettings/ppp/devices.cpp +++ b/noncore/settings/networksettings/ppp/devices.cpp | |||
@@ -1,217 +1,219 @@ | |||
1 | /* | 1 | /* |
2 | * kPPP: A pppd front end for the KDE project | 2 | * kPPP: A pppd front end for the KDE project |
3 | * | 3 | * |
4 | * $Id$ | 4 | * $Id$ |
5 | * | 5 | * |
6 | * Copyright (C) 1997 Bernd Johannes Wuebben | 6 | * Copyright (C) 1997 Bernd Johannes Wuebben |
7 | * wuebben@math.cornell.edu | 7 | * wuebben@math.cornell.edu |
8 | * | 8 | * |
9 | * based on EzPPP: | 9 | * based on EzPPP: |
10 | * Copyright (C) 1997 Jay Painter | 10 | * Copyright (C) 1997 Jay Painter |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or | 12 | * This program is free software; you can redistribute it and/or |
13 | * modify it under the terms of the GNU Library General Public | 13 | * modify it under the terms of the GNU Library General Public |
14 | * License as published by the Free Software Foundation; either | 14 | * License as published by the Free Software Foundation; either |
15 | * version 2 of the License, or (at your option) any later version. | 15 | * version 2 of the License, or (at your option) any later version. |
16 | * | 16 | * |
17 | * This program is distributed in the hope that it will be useful, | 17 | * This program is distributed in the hope that it will be useful, |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
20 | * Library General Public License for more details. | 20 | * Library General Public License for more details. |
21 | * | 21 | * |
22 | * You should have received a copy of the GNU Library General Public | 22 | * You should have received a copy of the GNU Library General Public |
23 | * License along with this program; if not, write to the Free | 23 | * License along with this program; if not, write to the Free |
24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #include "interfaceppp.h" | 27 | #include "interfaceppp.h" |
28 | #include "devices.h" | 28 | #include "devices.h" |
29 | #include "authwidget.h" | 29 | #include "authwidget.h" |
30 | #include "pppdata.h" | 30 | #include "pppdata.h" |
31 | #include "edit.h" | 31 | #include "edit.h" |
32 | #include "general.h" | 32 | #include "general.h" |
33 | 33 | ||
34 | /* OPIE */ | 34 | /* OPIE */ |
35 | #include <opie2/odebug.h> | ||
35 | #include <qpe/qpeapplication.h> | 36 | #include <qpe/qpeapplication.h> |
37 | using namespace Opie::Core; | ||
36 | 38 | ||
37 | /* QT */ | 39 | /* QT */ |
38 | #include <qdir.h> | 40 | #include <qdir.h> |
39 | #include <qlayout.h> | 41 | #include <qlayout.h> |
40 | #include <qtabwidget.h> | 42 | #include <qtabwidget.h> |
41 | #include <qtabdialog.h> | 43 | #include <qtabdialog.h> |
42 | #include <qwhatsthis.h> | 44 | #include <qwhatsthis.h> |
43 | #include <qmessagebox.h> | 45 | #include <qmessagebox.h> |
44 | #include <qapplication.h> | 46 | #include <qapplication.h> |
45 | #include <qbuttongroup.h> | 47 | #include <qbuttongroup.h> |
46 | #include <qmessagebox.h> | 48 | #include <qmessagebox.h> |
47 | #include <qvgroupbox.h> | 49 | #include <qvgroupbox.h> |
48 | 50 | ||
49 | /* STD */ | 51 | /* STD */ |
50 | #include <stdlib.h> | 52 | #include <stdlib.h> |
51 | 53 | ||
52 | 54 | ||
53 | void parseargs(char* buf, char** args); | 55 | void parseargs(char* buf, char** args); |
54 | 56 | ||
55 | DevicesWidget::DevicesWidget( InterfacePPP* ip, QWidget *parent, const char *name, WFlags f ) | 57 | DevicesWidget::DevicesWidget( InterfacePPP* ip, QWidget *parent, const char *name, WFlags f ) |
56 | : ChooserWidget(ip->data(), parent, name, f) | 58 | : ChooserWidget(ip->data(), parent, name, f) |
57 | { | 59 | { |
58 | _ifaceppp = ip; | 60 | _ifaceppp = ip; |
59 | QWhatsThis::add(edit_b, tr("Allows you to modify the selected device")); | 61 | QWhatsThis::add(edit_b, tr("Allows you to modify the selected device")); |
60 | QWhatsThis::add(new_b, tr("Create a new device") ); | 62 | QWhatsThis::add(new_b, tr("Create a new device") ); |
61 | 63 | ||
62 | QWhatsThis::add(copy_b, | 64 | QWhatsThis::add(copy_b, |
63 | tr("Makes a copy of the selected device. All\n" | 65 | tr("Makes a copy of the selected device. All\n" |
64 | "settings of the selected device are copied\n" | 66 | "settings of the selected device are copied\n" |
65 | "to a new device, that you can modify to fit your\n" | 67 | "to a new device, that you can modify to fit your\n" |
66 | "needs")); | 68 | "needs")); |
67 | QWhatsThis::add(delete_b, | 69 | QWhatsThis::add(delete_b, |
68 | tr("<p>Deletes the selected device\n\n" | 70 | tr("<p>Deletes the selected device\n\n" |
69 | "<font color=\"red\"><b>Use with care!</b></font>")); | 71 | "<font color=\"red\"><b>Use with care!</b></font>")); |
70 | 72 | ||
71 | copy_b->setEnabled( false ); //FIXME | 73 | copy_b->setEnabled( false ); //FIXME |
72 | // delete_b->setEnabled( false ); //FIXME | 74 | // delete_b->setEnabled( false ); //FIXME |
73 | 75 | ||
74 | QStringList tmp = _pppdata->getDevicesNamesList(); | 76 | QStringList tmp = _pppdata->getDevicesNamesList(); |
75 | odebug << "DevicesWidget::DevicesWidget got devices " << tmp.join("--").latin1() << "" << oendl; | 77 | odebug << "DevicesWidget::DevicesWidget got devices " << tmp.join("--").latin1() << "" << oendl; |
76 | listListbox->insertStringList(tmp); | 78 | listListbox->insertStringList(tmp); |
77 | 79 | ||
78 | for (uint i = 0; i < listListbox->count(); i++){ | 80 | for (uint i = 0; i < listListbox->count(); i++){ |
79 | odebug << "listListbox->text(i) " << listListbox->text(i).latin1() << " == _pppdata->devname() " << _pppdata->devname().latin1() << "" << oendl; | 81 | odebug << "listListbox->text(i) " << listListbox->text(i).latin1() << " == _pppdata->devname() " << _pppdata->devname().latin1() << "" << oendl; |
80 | if ( listListbox->text(i) == _pppdata->devname() ) | 82 | if ( listListbox->text(i) == _pppdata->devname() ) |
81 | listListbox->setCurrentItem( i ); | 83 | listListbox->setCurrentItem( i ); |
82 | } | 84 | } |
83 | } | 85 | } |
84 | 86 | ||
85 | 87 | ||
86 | 88 | ||
87 | void DevicesWidget::slotListBoxSelect(int idx) { | 89 | void DevicesWidget::slotListBoxSelect(int idx) { |
88 | bool ok = _pppdata->setDevice( listListbox->text(idx) ); | 90 | bool ok = _pppdata->setDevice( listListbox->text(idx) ); |
89 | delete_b->setEnabled((bool)(idx != -1)); | 91 | delete_b->setEnabled((bool)(idx != -1)); |
90 | edit_b->setEnabled((bool)(idx != -1)); | 92 | edit_b->setEnabled((bool)(idx != -1)); |
91 | //FIXME copy_b->setEnabled((bool)(idx != -1)); | 93 | //FIXME copy_b->setEnabled((bool)(idx != -1)); |
92 | } | 94 | } |
93 | 95 | ||
94 | void DevicesWidget::edit() { | 96 | void DevicesWidget::edit() { |
95 | _pppdata->setDevice(listListbox->text(listListbox->currentItem())); | 97 | _pppdata->setDevice(listListbox->text(listListbox->currentItem())); |
96 | 98 | ||
97 | int result = doTab(); | 99 | int result = doTab(); |
98 | 100 | ||
99 | if(result == QDialog::Accepted) { | 101 | if(result == QDialog::Accepted) { |
100 | listListbox->changeItem(_pppdata->devname(),listListbox->currentItem()); | 102 | listListbox->changeItem(_pppdata->devname(),listListbox->currentItem()); |
101 | _pppdata->save(); | 103 | _pppdata->save(); |
102 | } | 104 | } |
103 | } | 105 | } |
104 | 106 | ||
105 | 107 | ||
106 | void DevicesWidget::create() { | 108 | void DevicesWidget::create() { |
107 | 109 | ||
108 | // if(listListbox->count() == MAX_ACCOUNTS) { | 110 | // if(listListbox->count() == MAX_ACCOUNTS) { |
109 | // QMessageBox::information(this, "sorry", | 111 | // QMessageBox::information(this, "sorry", |
110 | // tr("Maximum number of accounts reached.")); | 112 | // tr("Maximum number of accounts reached.")); |
111 | // return; | 113 | // return; |
112 | // } | 114 | // } |
113 | 115 | ||
114 | int result; | 116 | int result; |
115 | if (_pppdata->newdevice() == -1){ | 117 | if (_pppdata->newdevice() == -1){ |
116 | return; | 118 | return; |
117 | } | 119 | } |
118 | result = doTab(); | 120 | result = doTab(); |
119 | 121 | ||
120 | if(result == QDialog::Accepted) { | 122 | if(result == QDialog::Accepted) { |
121 | listListbox->insertItem(_pppdata->devname()); | 123 | listListbox->insertItem(_pppdata->devname()); |
122 | listListbox->setSelected(listListbox->findItem(_pppdata->devname()),true ); | 124 | listListbox->setSelected(listListbox->findItem(_pppdata->devname()),true ); |
123 | 125 | ||
124 | _pppdata->save(); | 126 | _pppdata->save(); |
125 | } else | 127 | } else |
126 | _pppdata->deleteDevice(); | 128 | _pppdata->deleteDevice(); |
127 | } | 129 | } |
128 | 130 | ||
129 | 131 | ||
130 | void DevicesWidget::copy() { | 132 | void DevicesWidget::copy() { |
131 | // if(listListbox->count() == MAX_ACCOUNTS) { | 133 | // if(listListbox->count() == MAX_ACCOUNTS) { |
132 | // QMessageBox::information(this, "sorry", tr("Maximum number of accounts reached.")); | 134 | // QMessageBox::information(this, "sorry", tr("Maximum number of accounts reached.")); |
133 | // return; | 135 | // return; |
134 | // } | 136 | // } |
135 | 137 | ||
136 | if(listListbox->currentItem()<0) { | 138 | if(listListbox->currentItem()<0) { |
137 | QMessageBox::information(this, "sorry", tr("No devices selected.")); | 139 | QMessageBox::information(this, "sorry", tr("No devices selected.")); |
138 | return; | 140 | return; |
139 | } | 141 | } |
140 | 142 | ||
141 | _pppdata->copydevice(listListbox->currentText()); | 143 | _pppdata->copydevice(listListbox->currentText()); |
142 | 144 | ||
143 | listListbox->insertItem(_pppdata->devname()); | 145 | listListbox->insertItem(_pppdata->devname()); |
144 | _pppdata->save(); | 146 | _pppdata->save(); |
145 | } | 147 | } |
146 | 148 | ||
147 | 149 | ||
148 | void DevicesWidget::remove() { | 150 | void DevicesWidget::remove() { |
149 | 151 | ||
150 | QString s = tr("Are you sure you want to delete\nthe device \"%1\"?") | 152 | QString s = tr("Are you sure you want to delete\nthe device \"%1\"?") |
151 | .arg(listListbox->text(listListbox->currentItem())); | 153 | .arg(listListbox->text(listListbox->currentItem())); |
152 | 154 | ||
153 | if(QMessageBox::warning(this,tr("Confirm"),s, | 155 | if(QMessageBox::warning(this,tr("Confirm"),s, |
154 | QMessageBox::Yes,QMessageBox::No | 156 | QMessageBox::Yes,QMessageBox::No |
155 | ) != QMessageBox::Yes) | 157 | ) != QMessageBox::Yes) |
156 | return; | 158 | return; |
157 | 159 | ||
158 | if(_pppdata->deleteDevice(listListbox->text(listListbox->currentItem()))) | 160 | if(_pppdata->deleteDevice(listListbox->text(listListbox->currentItem()))) |
159 | listListbox->removeItem(listListbox->currentItem()); | 161 | listListbox->removeItem(listListbox->currentItem()); |
160 | 162 | ||
161 | 163 | ||
162 | // _pppdata->save(); | 164 | // _pppdata->save(); |
163 | 165 | ||
164 | 166 | ||
165 | slotListBoxSelect(listListbox->currentItem()); | 167 | slotListBoxSelect(listListbox->currentItem()); |
166 | 168 | ||
167 | } | 169 | } |
168 | 170 | ||
169 | 171 | ||
170 | int DevicesWidget::doTab(){ | 172 | int DevicesWidget::doTab(){ |
171 | QDialog *dlg = new QDialog( 0, "newDevice", true, Qt::WStyle_ContextHelp ); | 173 | QDialog *dlg = new QDialog( 0, "newDevice", true, Qt::WStyle_ContextHelp ); |
172 | QVBoxLayout *layout = new QVBoxLayout( dlg ); | 174 | QVBoxLayout *layout = new QVBoxLayout( dlg ); |
173 | layout->setSpacing( 0 ); | 175 | layout->setSpacing( 0 ); |
174 | layout->setMargin( 1 ); | 176 | layout->setMargin( 1 ); |
175 | 177 | ||
176 | QTabWidget *tabWindow = new QTabWidget( dlg, "tabWindow" ); | 178 | QTabWidget *tabWindow = new QTabWidget( dlg, "tabWindow" ); |
177 | layout->addWidget( tabWindow ); | 179 | layout->addWidget( tabWindow ); |
178 | 180 | ||
179 | bool isnew; | 181 | bool isnew; |
180 | 182 | ||
181 | if(_pppdata->devname().isEmpty()) { | 183 | if(_pppdata->devname().isEmpty()) { |
182 | dlg->setCaption(tr("New Device")); | 184 | dlg->setCaption(tr("New Device")); |
183 | isnew = true; | 185 | isnew = true; |
184 | } else { | 186 | } else { |
185 | QString tit = tr("Edit Device: "); | 187 | QString tit = tr("Edit Device: "); |
186 | tit += _pppdata->devname(); | 188 | tit += _pppdata->devname(); |
187 | dlg->setCaption(tit); | 189 | dlg->setCaption(tit); |
188 | isnew = false; | 190 | isnew = false; |
189 | } | 191 | } |
190 | 192 | ||
191 | modem1 = new ModemWidget( _pppdata, tabWindow, "modem1" ); | 193 | modem1 = new ModemWidget( _pppdata, tabWindow, "modem1" ); |
192 | tabWindow->addTab( modem1, tr("&Device") ); | 194 | tabWindow->addTab( modem1, tr("&Device") ); |
193 | modem2 = new ModemWidget2( _pppdata, _ifaceppp, tabWindow, "modem2" ); | 195 | modem2 = new ModemWidget2( _pppdata, _ifaceppp, tabWindow, "modem2" ); |
194 | tabWindow->addTab( modem2, tr("&Modem") ); | 196 | tabWindow->addTab( modem2, tr("&Modem") ); |
195 | 197 | ||
196 | int result = 0; | 198 | int result = 0; |
197 | bool ok = false; | 199 | bool ok = false; |
198 | 200 | ||
199 | while (!ok){ | 201 | while (!ok){ |
200 | result = QPEApplication::execDialog( dlg ); | 202 | result = QPEApplication::execDialog( dlg ); |
201 | ok = true; | 203 | ok = true; |
202 | 204 | ||
203 | if(result == QDialog::Accepted) { | 205 | if(result == QDialog::Accepted) { |
204 | if (!modem1->save()){ | 206 | if (!modem1->save()){ |
205 | QMessageBox::critical(this, "error", tr( "You must enter a unique device name")); | 207 | QMessageBox::critical(this, "error", tr( "You must enter a unique device name")); |
206 | ok = false; | 208 | ok = false; |
207 | }else{ | 209 | }else{ |
208 | modem2->save(); | 210 | modem2->save(); |
209 | } | 211 | } |
210 | } | 212 | } |
211 | } | 213 | } |
212 | 214 | ||
213 | delete dlg; | 215 | delete dlg; |
214 | 216 | ||
215 | return result; | 217 | return result; |
216 | } | 218 | } |
217 | 219 | ||
diff --git a/noncore/settings/networksettings/ppp/general.cpp b/noncore/settings/networksettings/ppp/general.cpp index 69bb682..40ba19b 100644 --- a/noncore/settings/networksettings/ppp/general.cpp +++ b/noncore/settings/networksettings/ppp/general.cpp | |||
@@ -1,526 +1,528 @@ | |||
1 | /* | 1 | /* |
2 | * kPPP: A pppd front end for the KDE project | 2 | * kPPP: A pppd front end for the KDE project |
3 | * | 3 | * |
4 | * $Id$ | 4 | * $Id$ |
5 | * | 5 | * |
6 | * Copyright (C) 1997 Bernd Johannes Wuebben | 6 | * Copyright (C) 1997 Bernd Johannes Wuebben |
7 | * wuebben@math.cornell.edu | 7 | * wuebben@math.cornell.edu |
8 | * | 8 | * |
9 | * based on EzPPP: | 9 | * based on EzPPP: |
10 | * Copyright (C) 1997 Jay Painter | 10 | * Copyright (C) 1997 Jay Painter |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or | 12 | * This program is free software; you can redistribute it and/or |
13 | * modify it under the terms of the GNU Library General Public | 13 | * modify it under the terms of the GNU Library General Public |
14 | * License as published by the Free Software Foundation; either | 14 | * License as published by the Free Software Foundation; either |
15 | * version 2 of the License, or (at your option) any later version. | 15 | * version 2 of the License, or (at your option) any later version. |
16 | * | 16 | * |
17 | * This program is distributed in the hope that it will be useful, | 17 | * This program is distributed in the hope that it will be useful, |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
20 | * Library General Public License for more details. | 20 | * Library General Public License for more details. |
21 | * | 21 | * |
22 | * You should have received a copy of the GNU Library General Public | 22 | * You should have received a copy of the GNU Library General Public |
23 | * License along with this program; if not, write to the Free | 23 | * License along with this program; if not, write to the Free |
24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #include "general.h" | 27 | #include "general.h" |
28 | #include "interfaceppp.h" | 28 | #include "interfaceppp.h" |
29 | #include "modeminfo.h" | 29 | #include "modeminfo.h" |
30 | #include "modemcmds.h" | 30 | #include "modemcmds.h" |
31 | #include "pppdata.h" | 31 | #include "pppdata.h" |
32 | 32 | ||
33 | /* OPIE */ | 33 | /* OPIE */ |
34 | #include <opie2/odebug.h> | ||
34 | #include <qpe/config.h> | 35 | #include <qpe/config.h> |
35 | #include <qpe/qpeapplication.h> | 36 | #include <qpe/qpeapplication.h> |
37 | using namespace Opie::Core; | ||
36 | 38 | ||
37 | /* QT */ | 39 | /* QT */ |
38 | #include <qcheckbox.h> | 40 | #include <qcheckbox.h> |
39 | #include <qcombobox.h> | 41 | #include <qcombobox.h> |
40 | #include <qlabel.h> | 42 | #include <qlabel.h> |
41 | #include <qlayout.h> | 43 | #include <qlayout.h> |
42 | #include <qpushbutton.h> | 44 | #include <qpushbutton.h> |
43 | #include <qslider.h> | 45 | #include <qslider.h> |
44 | #include <qspinbox.h> | 46 | #include <qspinbox.h> |
45 | #include <qwhatsthis.h> | 47 | #include <qwhatsthis.h> |
46 | 48 | ||
47 | /* STD */ | 49 | /* STD */ |
48 | #include <termios.h> | 50 | #include <termios.h> |
49 | #include <string.h> | 51 | #include <string.h> |
50 | 52 | ||
51 | 53 | ||
52 | ModemWidget::ModemWidget( PPPData *pd, QWidget *parent, const char *name ) | 54 | ModemWidget::ModemWidget( PPPData *pd, QWidget *parent, const char *name ) |
53 | : QWidget(parent, name), _pppdata(pd) | 55 | : QWidget(parent, name), _pppdata(pd) |
54 | { | 56 | { |
55 | int k; | 57 | int k; |
56 | 58 | ||
57 | QGridLayout *tl = new QGridLayout(this, 8, 2, 0 );//, KDialog::spacingHint()); | 59 | QGridLayout *tl = new QGridLayout(this, 8, 2, 0 );//, KDialog::spacingHint()); |
58 | 60 | ||
59 | QLabel *label1; | 61 | QLabel *label1; |
60 | 62 | ||
61 | label1 = new QLabel(tr("Modem &name:"), this); | 63 | label1 = new QLabel(tr("Modem &name:"), this); |
62 | tl->addWidget(label1, 0, 0); | 64 | tl->addWidget(label1, 0, 0); |
63 | 65 | ||
64 | modemname = new QLineEdit(this, "modemName"); | 66 | modemname = new QLineEdit(this, "modemName"); |
65 | modemname->setText( _pppdata->devname() ); | 67 | modemname->setText( _pppdata->devname() ); |
66 | label1->setBuddy(modemname); | 68 | label1->setBuddy(modemname); |
67 | tl->addWidget(modemname, 0, 1); | 69 | tl->addWidget(modemname, 0, 1); |
68 | 70 | ||
69 | label1 = new QLabel(tr("Modem de&vice:"), this); | 71 | label1 = new QLabel(tr("Modem de&vice:"), this); |
70 | tl->addWidget(label1, 1, 0); | 72 | tl->addWidget(label1, 1, 0); |
71 | 73 | ||
72 | modemdevice = new QComboBox(false, this); | 74 | modemdevice = new QComboBox(false, this); |
73 | modemdevice->setEditable( true ); | 75 | modemdevice->setEditable( true ); |
74 | modemdevice->setDuplicatesEnabled ( false ); | 76 | modemdevice->setDuplicatesEnabled ( false ); |
75 | modemdevice->setInsertionPolicy( QComboBox::AtTop ); | 77 | modemdevice->setInsertionPolicy( QComboBox::AtTop ); |
76 | label1->setBuddy(modemdevice); | 78 | label1->setBuddy(modemdevice); |
77 | 79 | ||
78 | Config cfg("NetworkSetupPPP"); | 80 | Config cfg("NetworkSetupPPP"); |
79 | cfg.setGroup("Devices_General"); | 81 | cfg.setGroup("Devices_General"); |
80 | QStringList devs = cfg.readListEntry("devices",','); | 82 | QStringList devs = cfg.readListEntry("devices",','); |
81 | if (devs.isEmpty()) devs << "/dev/modem" << "/dev/ircomm0" << "/dev/ttyS0"; | 83 | if (devs.isEmpty()) devs << "/dev/modem" << "/dev/ircomm0" << "/dev/ttyS0"; |
82 | modemdevice->insertStringList( devs ); | 84 | modemdevice->insertStringList( devs ); |
83 | tl->addWidget(modemdevice, 1, 1); | 85 | tl->addWidget(modemdevice, 1, 1); |
84 | 86 | ||
85 | // connect(modemdevice, SIGNAL(activated(int)), | 87 | // connect(modemdevice, SIGNAL(activated(int)), |
86 | // SLOT(setmodemdc(int))); | 88 | // SLOT(setmodemdc(int))); |
87 | // connect(modemdevice, SIGNAL(textChanged(const QString&) ), | 89 | // connect(modemdevice, SIGNAL(textChanged(const QString&) ), |
88 | // SLOT( setmodemdc(const QString&) ) ); | 90 | // SLOT( setmodemdc(const QString&) ) ); |
89 | 91 | ||
90 | QString tmp = tr("This specifies the serial port your modem is attached \n" | 92 | QString tmp = tr("This specifies the serial port your modem is attached \n" |
91 | "to. On Linux/x86, typically this is either /dev/ttyS0 \n" | 93 | "to. On Linux/x86, typically this is either /dev/ttyS0 \n" |
92 | "(COM1 under DOS) or /dev/ttyS1 (COM2 under DOS).\n" | 94 | "(COM1 under DOS) or /dev/ttyS1 (COM2 under DOS).\n" |
93 | "\n" | 95 | "\n" |
94 | "If you have an internal ISDN card with AT command\n" | 96 | "If you have an internal ISDN card with AT command\n" |
95 | "emulation (most cards under Linux support this), you\n" | 97 | "emulation (most cards under Linux support this), you\n" |
96 | "should select one of the /dev/ttyIx devices."); | 98 | "should select one of the /dev/ttyIx devices."); |
97 | 99 | ||
98 | QWhatsThis::add(label1,tmp); | 100 | QWhatsThis::add(label1,tmp); |
99 | QWhatsThis::add(modemdevice,tmp); | 101 | QWhatsThis::add(modemdevice,tmp); |
100 | 102 | ||
101 | 103 | ||
102 | label1 = new QLabel(tr("&Flow control:"), this); | 104 | label1 = new QLabel(tr("&Flow control:"), this); |
103 | tl->addWidget(label1, 2, 0); | 105 | tl->addWidget(label1, 2, 0); |
104 | 106 | ||
105 | flowcontrol = new QComboBox(false, this); | 107 | flowcontrol = new QComboBox(false, this); |
106 | label1->setBuddy(flowcontrol); | 108 | label1->setBuddy(flowcontrol); |
107 | flowcontrol->insertItem(tr("Hardware [CRTSCTS]")); | 109 | flowcontrol->insertItem(tr("Hardware [CRTSCTS]")); |
108 | flowcontrol->insertItem(tr("Software [XON/XOFF]")); | 110 | flowcontrol->insertItem(tr("Software [XON/XOFF]")); |
109 | flowcontrol->insertItem(tr("None")); | 111 | flowcontrol->insertItem(tr("None")); |
110 | tl->addWidget(flowcontrol, 2, 1); | 112 | tl->addWidget(flowcontrol, 2, 1); |
111 | // connect(flowcontrol, SIGNAL(activated(int)), | 113 | // connect(flowcontrol, SIGNAL(activated(int)), |
112 | // SLOT(setflowcontrol(int))); | 114 | // SLOT(setflowcontrol(int))); |
113 | 115 | ||
114 | tmp = tr("<p>Specifies how the serial port and modem\n" | 116 | tmp = tr("<p>Specifies how the serial port and modem\n" |
115 | "communicate. You should not change this unless\n" | 117 | "communicate. You should not change this unless\n" |
116 | "you know what you are doing.\n" | 118 | "you know what you are doing.\n" |
117 | "\n" | 119 | "\n" |
118 | "<b>Default</b>: CRTSCTS"); | 120 | "<b>Default</b>: CRTSCTS"); |
119 | 121 | ||
120 | QWhatsThis::add(label1,tmp); | 122 | QWhatsThis::add(label1,tmp); |
121 | QWhatsThis::add(flowcontrol,tmp); | 123 | QWhatsThis::add(flowcontrol,tmp); |
122 | 124 | ||
123 | QLabel *labelenter = new QLabel(tr("&Line termination:"), this); | 125 | QLabel *labelenter = new QLabel(tr("&Line termination:"), this); |
124 | tl->addWidget(labelenter, 3, 0); | 126 | tl->addWidget(labelenter, 3, 0); |
125 | 127 | ||
126 | enter = new QComboBox(false, this); | 128 | enter = new QComboBox(false, this); |
127 | labelenter->setBuddy(enter); | 129 | labelenter->setBuddy(enter); |
128 | enter->insertItem("CR"); | 130 | enter->insertItem("CR"); |
129 | enter->insertItem("LF"); | 131 | enter->insertItem("LF"); |
130 | enter->insertItem("CR/LF"); | 132 | enter->insertItem("CR/LF"); |
131 | tl->addWidget(enter, 3, 1); | 133 | tl->addWidget(enter, 3, 1); |
132 | // connect(enter, SIGNAL(activated(int)), SLOT(setenter(int))); | 134 | // connect(enter, SIGNAL(activated(int)), SLOT(setenter(int))); |
133 | tmp = tr("<p>Specifies how AT commands are sent to your\n" | 135 | tmp = tr("<p>Specifies how AT commands are sent to your\n" |
134 | "modem. Most modems will work fine with the\n" | 136 | "modem. Most modems will work fine with the\n" |
135 | "default <i>CR/LF</i>. If your modem does not react\n" | 137 | "default <i>CR/LF</i>. If your modem does not react\n" |
136 | "to the init string, you should try different\n" | 138 | "to the init string, you should try different\n" |
137 | "settings here\n" | 139 | "settings here\n" |
138 | "\n" | 140 | "\n" |
139 | "<b>Default</b>: CR/LF"); | 141 | "<b>Default</b>: CR/LF"); |
140 | 142 | ||
141 | QWhatsThis::add(labelenter,tmp); | 143 | QWhatsThis::add(labelenter,tmp); |
142 | QWhatsThis::add(enter, tmp); | 144 | QWhatsThis::add(enter, tmp); |
143 | 145 | ||
144 | QLabel *baud_label = new QLabel(tr("Co&nnection speed:"), this); | 146 | QLabel *baud_label = new QLabel(tr("Co&nnection speed:"), this); |
145 | tl->addWidget(baud_label, 4, 0); | 147 | tl->addWidget(baud_label, 4, 0); |
146 | baud_c = new QComboBox(this); | 148 | baud_c = new QComboBox(this); |
147 | baud_label->setBuddy(baud_c); | 149 | baud_label->setBuddy(baud_c); |
148 | 150 | ||
149 | static const char *baudrates[] = | 151 | static const char *baudrates[] = |
150 | { | 152 | { |
151 | 153 | ||
152 | #ifdef B460800 | 154 | #ifdef B460800 |
153 | "460800", | 155 | "460800", |
154 | #endif | 156 | #endif |
155 | 157 | ||
156 | #ifdef B230400 | 158 | #ifdef B230400 |
157 | "230400", | 159 | "230400", |
158 | #endif | 160 | #endif |
159 | 161 | ||
160 | #ifdef B115200 | 162 | #ifdef B115200 |
161 | "115200", | 163 | "115200", |
162 | #endif | 164 | #endif |
163 | 165 | ||
164 | #ifdef B57600 | 166 | #ifdef B57600 |
165 | "57600", | 167 | "57600", |
166 | #endif | 168 | #endif |
167 | 169 | ||
168 | "38400", | 170 | "38400", |
169 | "19200", | 171 | "19200", |
170 | "9600", | 172 | "9600", |
171 | "2400", | 173 | "2400", |
172 | 0 | 174 | 0 |
173 | }; | 175 | }; |
174 | 176 | ||
175 | for(k = 0; baudrates[k]; k++) | 177 | for(k = 0; baudrates[k]; k++) |
176 | baud_c->insertItem(baudrates[k]); | 178 | baud_c->insertItem(baudrates[k]); |
177 | 179 | ||
178 | baud_c->setCurrentItem(3); | 180 | baud_c->setCurrentItem(3); |
179 | // connect(baud_c, SIGNAL(activated(int)), | 181 | // connect(baud_c, SIGNAL(activated(int)), |
180 | // this, SLOT(speed_selection(int))); | 182 | // this, SLOT(speed_selection(int))); |
181 | tl->addWidget(baud_c, 4, 1); | 183 | tl->addWidget(baud_c, 4, 1); |
182 | 184 | ||
183 | tmp = tr("Specifies the speed your modem and the serial\n" | 185 | tmp = tr("Specifies the speed your modem and the serial\n" |
184 | "port talk to each other. You should begin with\n" | 186 | "port talk to each other. You should begin with\n" |
185 | "the default of 38400 bits/sec. If everything\n" | 187 | "the default of 38400 bits/sec. If everything\n" |
186 | "works you can try to increase this value, but to\n" | 188 | "works you can try to increase this value, but to\n" |
187 | "no more than 115200 bits/sec (unless you know\n" | 189 | "no more than 115200 bits/sec (unless you know\n" |
188 | "that your serial port supports higher speeds)."); | 190 | "that your serial port supports higher speeds)."); |
189 | 191 | ||
190 | QWhatsThis::add(baud_label,tmp); | 192 | QWhatsThis::add(baud_label,tmp); |
191 | QWhatsThis::add(baud_c,tmp); | 193 | QWhatsThis::add(baud_c,tmp); |
192 | 194 | ||
193 | for(int i=0; i <= enter->count()-1; i++) | 195 | for(int i=0; i <= enter->count()-1; i++) |
194 | { | 196 | { |
195 | if(_pppdata->enter() == enter->text(i)) | 197 | if(_pppdata->enter() == enter->text(i)) |
196 | enter->setCurrentItem(i); | 198 | enter->setCurrentItem(i); |
197 | } | 199 | } |
198 | 200 | ||
199 | tl->addRowSpacing(5, 10); | 201 | tl->addRowSpacing(5, 10); |
200 | 202 | ||
201 | //Modem Lock File | 203 | //Modem Lock File |
202 | modemlockfile = new QCheckBox(tr("&Use lock file"), this); | 204 | modemlockfile = new QCheckBox(tr("&Use lock file"), this); |
203 | 205 | ||
204 | modemlockfile->setChecked(_pppdata->modemLockFile()); | 206 | modemlockfile->setChecked(_pppdata->modemLockFile()); |
205 | // connect(modemlockfile, SIGNAL(toggled(bool)), | 207 | // connect(modemlockfile, SIGNAL(toggled(bool)), |
206 | // SLOT(modemlockfilechanged(bool))); | 208 | // SLOT(modemlockfilechanged(bool))); |
207 | tl->addMultiCellWidget(modemlockfile, 6, 6, 0, 1); | 209 | tl->addMultiCellWidget(modemlockfile, 6, 6, 0, 1); |
208 | // l12->addStretch(1); | 210 | // l12->addStretch(1); |
209 | QWhatsThis::add(modemlockfile, | 211 | QWhatsThis::add(modemlockfile, |
210 | tr("<p>To prevent other programs from accessing the\n" | 212 | tr("<p>To prevent other programs from accessing the\n" |
211 | "modem while a connection is established, a\n" | 213 | "modem while a connection is established, a\n" |
212 | "file can be created to indicate that the modem\n" | 214 | "file can be created to indicate that the modem\n" |
213 | "is in use. On Linux an example file would be\n" | 215 | "is in use. On Linux an example file would be\n" |
214 | "<tt>/var/lock/LCK..ttyS1</tt>\n" | 216 | "<tt>/var/lock/LCK..ttyS1</tt>\n" |
215 | "Here you can select whether this locking will\n" | 217 | "Here you can select whether this locking will\n" |
216 | "be done.\n" | 218 | "be done.\n" |
217 | "\n" | 219 | "\n" |
218 | "<b>Default</b>: On")); | 220 | "<b>Default</b>: On")); |
219 | 221 | ||
220 | // Modem Timeout Line Edit Box | 222 | // Modem Timeout Line Edit Box |
221 | QHBoxLayout *timeoutLayout = new QHBoxLayout( this ); | 223 | QHBoxLayout *timeoutLayout = new QHBoxLayout( this ); |
222 | QLabel *timeoutlabel = new QLabel( tr("Modem timeout:") ,this, "timeout" ); | 224 | QLabel *timeoutlabel = new QLabel( tr("Modem timeout:") ,this, "timeout" ); |
223 | modemtimeout = new QSpinBox( 1, 120, 1, this, "modemTimeout" ); | 225 | modemtimeout = new QSpinBox( 1, 120, 1, this, "modemTimeout" ); |
224 | // modemtimeout = new KIntNumInput(_pppdata->modemTimeout(), this); | 226 | // modemtimeout = new KIntNumInput(_pppdata->modemTimeout(), this); |
225 | // modemtimeout->setLabel(tr("Modem &timeout:")); | 227 | // modemtimeout->setLabel(tr("Modem &timeout:")); |
226 | // modemtimeout->setRange(1, 120, 1); | 228 | // modemtimeout->setRange(1, 120, 1); |
227 | modemtimeout->setSuffix(tr(" sec")); | 229 | modemtimeout->setSuffix(tr(" sec")); |
228 | modemtimeout->setValue( _pppdata->modemTimeout() ); | 230 | modemtimeout->setValue( _pppdata->modemTimeout() ); |
229 | // connect(modemtimeout, SIGNAL(valueChanged(int)), | 231 | // connect(modemtimeout, SIGNAL(valueChanged(int)), |
230 | // SLOT(modemtimeoutchanged(int))); | 232 | // SLOT(modemtimeoutchanged(int))); |
231 | timeoutLayout->addWidget(timeoutlabel); | 233 | timeoutLayout->addWidget(timeoutlabel); |
232 | timeoutLayout->addWidget(modemtimeout); | 234 | timeoutLayout->addWidget(modemtimeout); |
233 | tl->addMultiCellLayout(timeoutLayout, 7, 7, 0, 1); | 235 | tl->addMultiCellLayout(timeoutLayout, 7, 7, 0, 1); |
234 | 236 | ||
235 | QWhatsThis::add(modemtimeout, | 237 | QWhatsThis::add(modemtimeout, |
236 | tr("This specifies how long <i>kppp</i> waits for a\n" | 238 | tr("This specifies how long <i>kppp</i> waits for a\n" |
237 | "<i>CONNECT</i> response from your modem. The\n" | 239 | "<i>CONNECT</i> response from your modem. The\n" |
238 | "recommended value is 30 seconds.")); | 240 | "recommended value is 30 seconds.")); |
239 | 241 | ||
240 | //set stuff from gpppdata | 242 | //set stuff from gpppdata |
241 | for(int i=0; i <= enter->count()-1; i++) | 243 | for(int i=0; i <= enter->count()-1; i++) |
242 | { | 244 | { |
243 | if(_pppdata->enter() == enter->text(i)) | 245 | if(_pppdata->enter() == enter->text(i)) |
244 | enter->setCurrentItem(i); | 246 | enter->setCurrentItem(i); |
245 | } | 247 | } |
246 | 248 | ||
247 | for(int i=0; i <= modemdevice->count()-1; i++) | 249 | for(int i=0; i <= modemdevice->count()-1; i++) |
248 | { | 250 | { |
249 | if(_pppdata->modemDevice() == modemdevice->text(i)) | 251 | if(_pppdata->modemDevice() == modemdevice->text(i)) |
250 | modemdevice->setCurrentItem(i); | 252 | modemdevice->setCurrentItem(i); |
251 | } | 253 | } |
252 | 254 | ||
253 | for(int i=0; i <= flowcontrol->count()-1; i++) | 255 | for(int i=0; i <= flowcontrol->count()-1; i++) |
254 | { | 256 | { |
255 | if(_pppdata->flowcontrol() == flowcontrol->text(i)) | 257 | if(_pppdata->flowcontrol() == flowcontrol->text(i)) |
256 | flowcontrol->setCurrentItem(i); | 258 | flowcontrol->setCurrentItem(i); |
257 | } | 259 | } |
258 | 260 | ||
259 | //set the modem speed | 261 | //set the modem speed |
260 | for(int i=0; i < baud_c->count(); i++) | 262 | for(int i=0; i < baud_c->count(); i++) |
261 | if(baud_c->text(i) == _pppdata->speed()) | 263 | if(baud_c->text(i) == _pppdata->speed()) |
262 | baud_c->setCurrentItem(i); | 264 | baud_c->setCurrentItem(i); |
263 | 265 | ||
264 | tl->setRowStretch(1, 1); | 266 | tl->setRowStretch(1, 1); |
265 | } | 267 | } |
266 | 268 | ||
267 | ModemWidget::~ModemWidget() | 269 | ModemWidget::~ModemWidget() |
268 | { | 270 | { |
269 | QStringList devs; | 271 | QStringList devs; |
270 | 272 | ||
271 | for (int i=0;i<modemdevice->count();i++) | 273 | for (int i=0;i<modemdevice->count();i++) |
272 | { | 274 | { |
273 | QString s = modemdevice->text(i); | 275 | QString s = modemdevice->text(i); |
274 | s.simplifyWhiteSpace(); | 276 | s.simplifyWhiteSpace(); |
275 | if (! s.isEmpty() ) devs << s; | 277 | if (! s.isEmpty() ) devs << s; |
276 | } | 278 | } |
277 | 279 | ||
278 | 280 | ||
279 | QString edited = modemdevice->currentText(); | 281 | QString edited = modemdevice->currentText(); |
280 | if ( !( edited ).isEmpty() ) | 282 | if ( !( edited ).isEmpty() ) |
281 | { | 283 | { |
282 | edited.simplifyWhiteSpace(); | 284 | edited.simplifyWhiteSpace(); |
283 | if ( devs.contains( edited ) == 0 ) | 285 | if ( devs.contains( edited ) == 0 ) |
284 | { | 286 | { |
285 | devs << edited; | 287 | devs << edited; |
286 | } | 288 | } |
287 | _pppdata->setModemDevice( edited ); | 289 | _pppdata->setModemDevice( edited ); |
288 | } | 290 | } |
289 | 291 | ||
290 | 292 | ||
291 | Config cfg("NetworkSetupPPP"); | 293 | Config cfg("NetworkSetupPPP"); |
292 | cfg.setGroup("Devices_General"); | 294 | cfg.setGroup("Devices_General"); |
293 | cfg.writeEntry("devices",devs,','); | 295 | cfg.writeEntry("devices",devs,','); |
294 | 296 | ||
295 | } | 297 | } |
296 | 298 | ||
297 | // void ModemWidget::speed_selection(int) { | 299 | // void ModemWidget::speed_selection(int) { |
298 | // _pppdata->setSpeed(baud_c->text(baud_c->currentItem())); | 300 | // _pppdata->setSpeed(baud_c->text(baud_c->currentItem())); |
299 | // } | 301 | // } |
300 | 302 | ||
301 | 303 | ||
302 | // void ModemWidget::setenter(int ) { | 304 | // void ModemWidget::setenter(int ) { |
303 | // _pppdata->setEnter(enter->text(enter->currentItem())); | 305 | // _pppdata->setEnter(enter->text(enter->currentItem())); |
304 | // } | 306 | // } |
305 | 307 | ||
306 | 308 | ||
307 | // void ModemWidget::setmodemdc(int i) { | 309 | // void ModemWidget::setmodemdc(int i) { |
308 | // _pppdata->setModemDevice(modemdevice->text(i)); | 310 | // _pppdata->setModemDevice(modemdevice->text(i)); |
309 | // } | 311 | // } |
310 | 312 | ||
311 | // void ModemWidget::setmodemdc( const QString &string ) { | 313 | // void ModemWidget::setmodemdc( const QString &string ) { |
312 | // _pppdata->setModemDevice( string ); | 314 | // _pppdata->setModemDevice( string ); |
313 | // } | 315 | // } |
314 | 316 | ||
315 | // void ModemWidget::setflowcontrol(int i) { | 317 | // void ModemWidget::setflowcontrol(int i) { |
316 | // _pppdata->setFlowcontrol(flowcontrol->text(i)); | 318 | // _pppdata->setFlowcontrol(flowcontrol->text(i)); |
317 | // } | 319 | // } |
318 | 320 | ||
319 | 321 | ||
320 | // void ModemWidget::modemlockfilechanged(bool set) { | 322 | // void ModemWidget::modemlockfilechanged(bool set) { |
321 | // _pppdata->setModemLockFile(set); | 323 | // _pppdata->setModemLockFile(set); |
322 | // } | 324 | // } |
323 | 325 | ||
324 | 326 | ||
325 | // void ModemWidget::modemtimeoutchanged(int n) { | 327 | // void ModemWidget::modemtimeoutchanged(int n) { |
326 | // _pppdata->setModemTimeout(n); | 328 | // _pppdata->setModemTimeout(n); |
327 | // } | 329 | // } |
328 | 330 | ||
329 | 331 | ||
330 | 332 | ||
331 | bool ModemWidget::save() | 333 | bool ModemWidget::save() |
332 | { | 334 | { |
333 | //first check to make sure that the device name is unique! | 335 | //first check to make sure that the device name is unique! |
334 | if(modemname->text().isEmpty() || | 336 | if(modemname->text().isEmpty() || |
335 | !_pppdata->isUniqueDevname(modemname->text())) | 337 | !_pppdata->isUniqueDevname(modemname->text())) |
336 | return false; | 338 | return false; |
337 | 339 | ||
338 | odebug << "ModemWidget::save saving modem1 data" << oendl; | 340 | odebug << "ModemWidget::save saving modem1 data" << oendl; |
339 | _pppdata->setDevname( modemname->text() ); | 341 | _pppdata->setDevname( modemname->text() ); |
340 | _pppdata->setModemDevice( modemdevice->currentText() ); | 342 | _pppdata->setModemDevice( modemdevice->currentText() ); |
341 | _pppdata->setFlowcontrol(flowcontrol->currentText()); | 343 | _pppdata->setFlowcontrol(flowcontrol->currentText()); |
342 | _pppdata->setFlowcontrol(flowcontrol->currentText()); | 344 | _pppdata->setFlowcontrol(flowcontrol->currentText()); |
343 | _pppdata->setSpeed(baud_c->currentText()); | 345 | _pppdata->setSpeed(baud_c->currentText()); |
344 | _pppdata->setModemLockFile( modemlockfile->isChecked()); | 346 | _pppdata->setModemLockFile( modemlockfile->isChecked()); |
345 | _pppdata->setModemTimeout( modemtimeout->value() ); | 347 | _pppdata->setModemTimeout( modemtimeout->value() ); |
346 | return true; | 348 | return true; |
347 | 349 | ||
348 | } | 350 | } |
349 | 351 | ||
350 | ModemWidget2::ModemWidget2( PPPData *pd, InterfacePPP *ip, QWidget *parent, | 352 | ModemWidget2::ModemWidget2( PPPData *pd, InterfacePPP *ip, QWidget *parent, |
351 | const char *name) | 353 | const char *name) |
352 | : QWidget(parent, name), _pppdata(pd), _ifaceppp(ip) | 354 | : QWidget(parent, name), _pppdata(pd), _ifaceppp(ip) |
353 | { | 355 | { |
354 | QVBoxLayout *l1 = new QVBoxLayout(this, 0 );//, KDialog::spacingHint()); | 356 | QVBoxLayout *l1 = new QVBoxLayout(this, 0 );//, KDialog::spacingHint()); |
355 | 357 | ||
356 | 358 | ||
357 | waitfordt = new QCheckBox(tr("&Wait for dial tone before dialing"), this); | 359 | waitfordt = new QCheckBox(tr("&Wait for dial tone before dialing"), this); |
358 | waitfordt->setChecked(_pppdata->waitForDialTone()); | 360 | waitfordt->setChecked(_pppdata->waitForDialTone()); |
359 | // connect(waitfordt, SIGNAL(toggled(bool)), SLOT(waitfordtchanged(bool))); | 361 | // connect(waitfordt, SIGNAL(toggled(bool)), SLOT(waitfordtchanged(bool))); |
360 | l1->addWidget(waitfordt); | 362 | l1->addWidget(waitfordt); |
361 | QWhatsThis::add(waitfordt, | 363 | QWhatsThis::add(waitfordt, |
362 | tr("<p>Normally the modem waits for a dial tone\n" | 364 | tr("<p>Normally the modem waits for a dial tone\n" |
363 | "from your phone line, indicating that it can\n" | 365 | "from your phone line, indicating that it can\n" |
364 | "start to dial a number. If your modem does not\n" | 366 | "start to dial a number. If your modem does not\n" |
365 | "recognize this sound, or your local phone system\n" | 367 | "recognize this sound, or your local phone system\n" |
366 | "does not emit such a tone, uncheck this option\n" | 368 | "does not emit such a tone, uncheck this option\n" |
367 | "\n" | 369 | "\n" |
368 | "<b>Default:</b>: On")); | 370 | "<b>Default:</b>: On")); |
369 | 371 | ||
370 | QHBoxLayout *waitLayout = new QHBoxLayout( this ); | 372 | QHBoxLayout *waitLayout = new QHBoxLayout( this ); |
371 | QLabel *waitLabel = new QLabel( tr("Busy wait:"), this, "busyWait" ); | 373 | QLabel *waitLabel = new QLabel( tr("Busy wait:"), this, "busyWait" ); |
372 | busywait = new QSpinBox( 0, 300, 5, this, "busyWait" ); | 374 | busywait = new QSpinBox( 0, 300, 5, this, "busyWait" ); |
373 | // busywait = new KIntNumInput(_pppdata->busyWait(), this); | 375 | // busywait = new KIntNumInput(_pppdata->busyWait(), this); |
374 | // busywait->setLabel(tr("B&usy wait:")); | 376 | // busywait->setLabel(tr("B&usy wait:")); |
375 | // busywait->setRange(0, 300, 5, true); | 377 | // busywait->setRange(0, 300, 5, true); |
376 | busywait->setSuffix(tr(" sec")); | 378 | busywait->setSuffix(tr(" sec")); |
377 | // connect(busywait, SIGNAL(valueChanged(int)), SLOT(busywaitchanged(int))); | 379 | // connect(busywait, SIGNAL(valueChanged(int)), SLOT(busywaitchanged(int))); |
378 | waitLayout->addWidget(waitLabel); | 380 | waitLayout->addWidget(waitLabel); |
379 | waitLayout->addWidget(busywait); | 381 | waitLayout->addWidget(busywait); |
380 | l1->addLayout( waitLayout ); | 382 | l1->addLayout( waitLayout ); |
381 | 383 | ||
382 | QWhatsThis::add(busywait, | 384 | QWhatsThis::add(busywait, |
383 | tr("Specifies the number of seconds to wait before\n" | 385 | tr("Specifies the number of seconds to wait before\n" |
384 | "redial if all dialed numbers are busy. This is\n" | 386 | "redial if all dialed numbers are busy. This is\n" |
385 | "necessary because some modems get stuck if the\n" | 387 | "necessary because some modems get stuck if the\n" |
386 | "same number is busy too often.\n" | 388 | "same number is busy too often.\n" |
387 | "\n" | 389 | "\n" |
388 | "The default is 0 seconds, you should not change\n" | 390 | "The default is 0 seconds, you should not change\n" |
389 | "this unless you need to.")); | 391 | "this unless you need to.")); |
390 | 392 | ||
391 | l1->addSpacing(10); | 393 | l1->addSpacing(10); |
392 | 394 | ||
393 | QHBoxLayout *hbl = new QHBoxLayout; | 395 | QHBoxLayout *hbl = new QHBoxLayout; |
394 | hbl->setSpacing(2);//KDialog::spacingHint()); | 396 | hbl->setSpacing(2);//KDialog::spacingHint()); |
395 | 397 | ||
396 | QLabel *volumeLabel = new QLabel(tr("Modem &volume:"), this); | 398 | QLabel *volumeLabel = new QLabel(tr("Modem &volume:"), this); |
397 | hbl->addWidget(volumeLabel); | 399 | hbl->addWidget(volumeLabel); |
398 | volume = new QSlider(0, 2, 1, _pppdata->volume(), | 400 | volume = new QSlider(0, 2, 1, _pppdata->volume(), |
399 | QSlider::Horizontal, this); | 401 | QSlider::Horizontal, this); |
400 | volumeLabel->setBuddy(volume); | 402 | volumeLabel->setBuddy(volume); |
401 | volume->setTickmarks(QSlider::Below); | 403 | volume->setTickmarks(QSlider::Below); |
402 | hbl->addWidget(volume); | 404 | hbl->addWidget(volume); |
403 | 405 | ||
404 | l1->addLayout(hbl); | 406 | l1->addLayout(hbl); |
405 | 407 | ||
406 | // connect(volume, SIGNAL(valueChanged(int)), | 408 | // connect(volume, SIGNAL(valueChanged(int)), |
407 | // this, SLOT(volumeChanged(int))); | 409 | // this, SLOT(volumeChanged(int))); |
408 | QString tmp = tr("Most modems have a speaker which makes\n" | 410 | QString tmp = tr("Most modems have a speaker which makes\n" |
409 | "a lot of noise when dialing. Here you can\n" | 411 | "a lot of noise when dialing. Here you can\n" |
410 | "either turn this completely off or select a\n" | 412 | "either turn this completely off or select a\n" |
411 | "lower volume.\n" | 413 | "lower volume.\n" |
412 | "\n" | 414 | "\n" |
413 | "If this does not work for your modem,\n" | 415 | "If this does not work for your modem,\n" |
414 | "you must modify the modem volume command."); | 416 | "you must modify the modem volume command."); |
415 | 417 | ||
416 | QWhatsThis::add(volumeLabel,tmp); | 418 | QWhatsThis::add(volumeLabel,tmp); |
417 | QWhatsThis::add(volume, tmp); | 419 | QWhatsThis::add(volume, tmp); |
418 | 420 | ||
419 | l1->addSpacing(20); | 421 | l1->addSpacing(20); |
420 | 422 | ||
421 | #if 0 | 423 | #if 0 |
422 | chkbox1 = new QCheckBox(tr("Modem asserts CD line"), this); | 424 | chkbox1 = new QCheckBox(tr("Modem asserts CD line"), this); |
423 | chkbox1->setChecked(_pppdata->UseCDLine()); | 425 | chkbox1->setChecked(_pppdata->UseCDLine()); |
424 | connect(chkbox1,SIGNAL(toggled(bool)), | 426 | connect(chkbox1,SIGNAL(toggled(bool)), |
425 | this,SLOT(use_cdline_toggled(bool))); | 427 | this,SLOT(use_cdline_toggled(bool))); |
426 | l12->addWidget(chkbox1); | 428 | l12->addWidget(chkbox1); |
427 | l12->addStretch(1); | 429 | l12->addStretch(1); |
428 | l1->addStretch(1); | 430 | l1->addStretch(1); |
429 | QWhatsThis::add(chkbox1, | 431 | QWhatsThis::add(chkbox1, |
430 | tr("This controls how <i>kppp</i> detects that the modem\n" | 432 | tr("This controls how <i>kppp</i> detects that the modem\n" |
431 | "is not responding. Unless you are having\n" | 433 | "is not responding. Unless you are having\n" |
432 | "problems with this, do not modify this setting.\n" | 434 | "problems with this, do not modify this setting.\n" |
433 | "\n" | 435 | "\n" |
434 | "<b>Default</b>: Off")); | 436 | "<b>Default</b>: Off")); |
435 | #endif | 437 | #endif |
436 | 438 | ||
437 | modemcmds = new QPushButton(tr("Mod&em Commands..."), this); | 439 | modemcmds = new QPushButton(tr("Mod&em Commands..."), this); |
438 | QWhatsThis::add(modemcmds, | 440 | QWhatsThis::add(modemcmds, |
439 | tr("Allows you to change the AT command for\n" | 441 | tr("Allows you to change the AT command for\n" |
440 | "your modem.")); | 442 | "your modem.")); |
441 | 443 | ||
442 | modeminfo_button = new QPushButton(tr("&Query Modem..."), this); | 444 | modeminfo_button = new QPushButton(tr("&Query Modem..."), this); |
443 | QWhatsThis::add(modeminfo_button, | 445 | QWhatsThis::add(modeminfo_button, |
444 | tr("Most modems support the ATI command set to\n" | 446 | tr("Most modems support the ATI command set to\n" |
445 | "find out vendor and revision of your modem.\n" | 447 | "find out vendor and revision of your modem.\n" |
446 | "\n" | 448 | "\n" |
447 | "Press this button to query your modem for\n" | 449 | "Press this button to query your modem for\n" |
448 | "this information. It can be useful to help\n" | 450 | "this information. It can be useful to help\n" |
449 | "you setup the modem")); | 451 | "you setup the modem")); |
450 | 452 | ||
451 | // terminal_button = new QPushButton(tr("&Terminal..."), this); | 453 | // terminal_button = new QPushButton(tr("&Terminal..."), this); |
452 | // QWhatsThis::add(terminal_button, | 454 | // QWhatsThis::add(terminal_button, |
453 | // tr("Opens the built-in terminal program. You\n" | 455 | // tr("Opens the built-in terminal program. You\n" |
454 | // "can use this if you want to play around\n" | 456 | // "can use this if you want to play around\n" |
455 | // "with your modem's AT command set")); | 457 | // "with your modem's AT command set")); |
456 | 458 | ||
457 | QHBoxLayout *hbox = new QHBoxLayout(); | 459 | QHBoxLayout *hbox = new QHBoxLayout(); |
458 | l1->addLayout(hbox); | 460 | l1->addLayout(hbox); |
459 | hbox->addStretch(1); | 461 | hbox->addStretch(1); |
460 | QVBoxLayout *vbox = new QVBoxLayout(); | 462 | QVBoxLayout *vbox = new QVBoxLayout(); |
461 | hbox->addLayout(vbox); | 463 | hbox->addLayout(vbox); |
462 | 464 | ||
463 | vbox->addWidget(modemcmds); | 465 | vbox->addWidget(modemcmds); |
464 | vbox->addWidget(modeminfo_button); | 466 | vbox->addWidget(modeminfo_button); |
465 | // vbox->addWidget(terminal_button); | 467 | // vbox->addWidget(terminal_button); |
466 | 468 | ||
467 | hbox->addStretch(1); | 469 | hbox->addStretch(1); |
468 | l1->addStretch(1); | 470 | l1->addStretch(1); |
469 | 471 | ||
470 | connect(modemcmds, SIGNAL(clicked()), | 472 | connect(modemcmds, SIGNAL(clicked()), |
471 | SLOT(modemcmdsbutton())); | 473 | SLOT(modemcmdsbutton())); |
472 | connect(modeminfo_button, SIGNAL(clicked()), | 474 | connect(modeminfo_button, SIGNAL(clicked()), |
473 | SLOT(query_modem())); | 475 | SLOT(query_modem())); |
474 | // connect(terminal_button, SIGNAL(clicked()), | 476 | // connect(terminal_button, SIGNAL(clicked()), |
475 | // SLOT(terminal())); | 477 | // SLOT(terminal())); |
476 | } | 478 | } |
477 | 479 | ||
478 | 480 | ||
479 | void ModemWidget2::modemcmdsbutton() | 481 | void ModemWidget2::modemcmdsbutton() |
480 | { | 482 | { |
481 | ModemCommands mc(_ifaceppp->data(), this, "commands" , true, Qt::WStyle_ContextHelp); | 483 | ModemCommands mc(_ifaceppp->data(), this, "commands" , true, Qt::WStyle_ContextHelp); |
482 | 484 | ||
483 | QPEApplication::execDialog( &mc ); | 485 | QPEApplication::execDialog( &mc ); |
484 | } | 486 | } |
485 | 487 | ||
486 | 488 | ||
487 | void ModemWidget2::query_modem() | 489 | void ModemWidget2::query_modem() |
488 | { | 490 | { |
489 | ModemTransfer mt(_ifaceppp->modem(), this); | 491 | ModemTransfer mt(_ifaceppp->modem(), this); |
490 | mt.exec(); | 492 | mt.exec(); |
491 | } | 493 | } |
492 | 494 | ||
493 | 495 | ||
494 | // void ModemWidget2::terminal() { | 496 | // void ModemWidget2::terminal() { |
495 | // MiniTerm terminal(NULL,NULL); | 497 | // MiniTerm terminal(NULL,NULL); |
496 | // terminal.exec(); | 498 | // terminal.exec(); |
497 | // } | 499 | // } |
498 | 500 | ||
499 | 501 | ||
500 | // #if 0 | 502 | // #if 0 |
501 | // void ModemWidget2::use_cdline_toggled(bool on) { | 503 | // void ModemWidget2::use_cdline_toggled(bool on) { |
502 | // _pppdata->setUseCDLine(on); | 504 | // _pppdata->setUseCDLine(on); |
503 | // } | 505 | // } |
504 | // #endif | 506 | // #endif |
505 | 507 | ||
506 | // void ModemWidget2::waitfordtchanged(bool b) { | 508 | // void ModemWidget2::waitfordtchanged(bool b) { |
507 | // _pppdata->setWaitForDialTone((int)b); | 509 | // _pppdata->setWaitForDialTone((int)b); |
508 | // } | 510 | // } |
509 | 511 | ||
510 | // void ModemWidget2::busywaitchanged(int n) { | 512 | // void ModemWidget2::busywaitchanged(int n) { |
511 | // _pppdata->setbusyWait(n); | 513 | // _pppdata->setbusyWait(n); |
512 | // } | 514 | // } |
513 | 515 | ||
514 | 516 | ||
515 | // void ModemWidget2::volumeChanged(int v) { | 517 | // void ModemWidget2::volumeChanged(int v) { |
516 | // _pppdata->setVolume(v); | 518 | // _pppdata->setVolume(v); |
517 | // } | 519 | // } |
518 | 520 | ||
519 | bool ModemWidget2::save() | 521 | bool ModemWidget2::save() |
520 | { | 522 | { |
521 | _pppdata->setWaitForDialTone(waitfordt->isChecked()); | 523 | _pppdata->setWaitForDialTone(waitfordt->isChecked()); |
522 | _pppdata->setbusyWait(busywait->value()); | 524 | _pppdata->setbusyWait(busywait->value()); |
523 | _pppdata->setVolume(volume->value()); | 525 | _pppdata->setVolume(volume->value()); |
524 | return true; | 526 | return true; |
525 | } | 527 | } |
526 | 528 | ||
diff --git a/noncore/settings/networksettings/ppp/interfaceinformationppp.cpp b/noncore/settings/networksettings/ppp/interfaceinformationppp.cpp index 5a76293..4755aed 100644 --- a/noncore/settings/networksettings/ppp/interfaceinformationppp.cpp +++ b/noncore/settings/networksettings/ppp/interfaceinformationppp.cpp | |||
@@ -1,41 +1,45 @@ | |||
1 | #include "interfaceinformationppp.h" | 1 | #include "interfaceinformationppp.h" |
2 | #include "connect.h" | ||
3 | #include "conwindow.h" | ||
4 | |||
5 | /* OPIE */ | ||
6 | #include <opie2/odebug.h> | ||
7 | using namespace Opie::Core; | ||
2 | 8 | ||
9 | /* QT */ | ||
3 | #include <qpushbutton.h> | 10 | #include <qpushbutton.h> |
4 | #include <qlabel.h> | 11 | #include <qlabel.h> |
5 | #include <qmessagebox.h> | 12 | #include <qmessagebox.h> |
6 | #include <qabstractlayout.h> | 13 | #include <qabstractlayout.h> |
7 | 14 | ||
8 | #include "connect.h" | ||
9 | #include "conwindow.h" | ||
10 | |||
11 | #ifdef QWS | 15 | #ifdef QWS |
12 | #else | 16 | #else |
13 | #define showMaximized show | 17 | #define showMaximized show |
14 | #endif | 18 | #endif |
15 | 19 | ||
16 | /** | 20 | /** |
17 | * Constructor for the InterfaceInformationImp class. This class pretty much | 21 | * Constructor for the InterfaceInformationImp class. This class pretty much |
18 | * just display's information about the interface that is passed to it. | 22 | * just display's information about the interface that is passed to it. |
19 | */ | 23 | */ |
20 | InterfaceInformationPPP::InterfaceInformationPPP(QWidget *parent, const char *name, Interface *i, WFlags f) | 24 | InterfaceInformationPPP::InterfaceInformationPPP(QWidget *parent, const char *name, Interface *i, WFlags f) |
21 | :InterfaceInformationImp(parent, name, i, Qt::WStyle_ContextHelp) | 25 | :InterfaceInformationImp(parent, name, i, Qt::WStyle_ContextHelp) |
22 | { | 26 | { |
23 | odebug << "InterfaceInformationPPP::InterfaceInformationPPP " << name << "" << oendl; | 27 | odebug << "InterfaceInformationPPP::InterfaceInformationPPP " << name << "" << oendl; |
24 | con = new ConnectWidget( (InterfacePPP*)i, this, "con" ); | 28 | con = new ConnectWidget( (InterfacePPP*)i, this, "con" ); |
25 | con->setSizePolicy( QSizePolicy(QSizePolicy::MinimumExpanding, | 29 | con->setSizePolicy( QSizePolicy(QSizePolicy::MinimumExpanding, |
26 | QSizePolicy::Fixed) ); | 30 | QSizePolicy::Fixed) ); |
27 | 31 | ||
28 | macAddressLabel->hide(); | 32 | macAddressLabel->hide(); |
29 | subnetMaskLabel->hide(); | 33 | subnetMaskLabel->hide(); |
30 | broadcastLabel->hide(); | 34 | broadcastLabel->hide(); |
31 | TextLabel23->hide(); | 35 | TextLabel23->hide(); |
32 | TextLabel21->hide(); | 36 | TextLabel21->hide(); |
33 | TextLabel24->hide(); | 37 | TextLabel24->hide(); |
34 | 38 | ||
35 | InterfaceInformationLayout->addWidget( con, 1, 0 ); | 39 | InterfaceInformationLayout->addWidget( con, 1, 0 ); |
36 | connect(i, SIGNAL(begin_connect()),con, SLOT(preinit())); | 40 | connect(i, SIGNAL(begin_connect()),con, SLOT(preinit())); |
37 | connect(i, SIGNAL(hangup_now() ), con, SLOT(cancelbutton() ) ); | 41 | connect(i, SIGNAL(hangup_now() ), con, SLOT(cancelbutton() ) ); |
38 | } | 42 | } |
39 | 43 | ||
40 | 44 | ||
41 | 45 | ||
diff --git a/noncore/settings/networksettings/ppp/interfaceppp.cpp b/noncore/settings/networksettings/ppp/interfaceppp.cpp index 5cc6f70..7d52f66 100644 --- a/noncore/settings/networksettings/ppp/interfaceppp.cpp +++ b/noncore/settings/networksettings/ppp/interfaceppp.cpp | |||
@@ -1,174 +1,178 @@ | |||
1 | #include "auth.h" | ||
2 | #include "interfaceppp.h" | ||
3 | #include "modem.h" | ||
4 | #include "pppdata.h" | ||
5 | |||
6 | /* OPIE */ | ||
7 | #include <opie2/odebug.h> | ||
8 | using namespace Opie::Core; | ||
1 | 9 | ||
10 | /* QT */ | ||
2 | #include <qmessagebox.h> | 11 | #include <qmessagebox.h> |
3 | #include <qlayout.h> | 12 | #include <qlayout.h> |
4 | #include <qlineedit.h> | 13 | #include <qlineedit.h> |
5 | #include <qlabel.h> | 14 | #include <qlabel.h> |
6 | 15 | ||
7 | #include "auth.h" | ||
8 | #include "interfaceppp.h" | ||
9 | #include "modem.h" | ||
10 | #include "pppdata.h" | ||
11 | |||
12 | InterfacePPP::InterfacePPP(QObject *parent, const char *name, bool status) | 16 | InterfacePPP::InterfacePPP(QObject *parent, const char *name, bool status) |
13 | : Interface(parent, name, status), | 17 | : Interface(parent, name, status), |
14 | _modemPtr(0), | 18 | _modemPtr(0), |
15 | _dataPtr(0) | 19 | _dataPtr(0) |
16 | { | 20 | { |
17 | odebug << "InterfacePPP::InterfacePPP(" << oendl; | 21 | odebug << "InterfacePPP::InterfacePPP(" << oendl; |
18 | } | 22 | } |
19 | 23 | ||
20 | PPPData* InterfacePPP::data()const | 24 | PPPData* InterfacePPP::data()const |
21 | { | 25 | { |
22 | if (!_dataPtr){ | 26 | if (!_dataPtr){ |
23 | odebug << "creating new Data obj" << oendl; | 27 | odebug << "creating new Data obj" << oendl; |
24 | _dataPtr = new PPPData(); | 28 | _dataPtr = new PPPData(); |
25 | _dataPtr->setDevice( getInterfaceName() ); | 29 | _dataPtr->setDevice( getInterfaceName() ); |
26 | _dataPtr->setAccount( getHardwareName() ); | 30 | _dataPtr->setAccount( getHardwareName() ); |
27 | } | 31 | } |
28 | return _dataPtr; | 32 | return _dataPtr; |
29 | } | 33 | } |
30 | 34 | ||
31 | Modem* InterfacePPP::modem()const | 35 | Modem* InterfacePPP::modem()const |
32 | { | 36 | { |
33 | if (!_modemPtr){ | 37 | if (!_modemPtr){ |
34 | odebug << "creating new modem obj" << oendl; | 38 | odebug << "creating new modem obj" << oendl; |
35 | _modemPtr = new Modem( data() ); | 39 | _modemPtr = new Modem( data() ); |
36 | } | 40 | } |
37 | return _modemPtr; | 41 | return _modemPtr; |
38 | } | 42 | } |
39 | 43 | ||
40 | bool InterfacePPP::refresh() | 44 | bool InterfacePPP::refresh() |
41 | { | 45 | { |
42 | odebug << "InterfacePPP::refresh()" << oendl; | 46 | odebug << "InterfacePPP::refresh()" << oendl; |
43 | QString old = getInterfaceName(); | 47 | QString old = getInterfaceName(); |
44 | setInterfaceName( modem()->pppDevice() ); | 48 | setInterfaceName( modem()->pppDevice() ); |
45 | 49 | ||
46 | (void)Interface::refresh(); | 50 | (void)Interface::refresh(); |
47 | 51 | ||
48 | setInterfaceName( old ); | 52 | setInterfaceName( old ); |
49 | emit updateInterface(this); | 53 | emit updateInterface(this); |
50 | 54 | ||
51 | return true; | 55 | return true; |
52 | } | 56 | } |
53 | 57 | ||
54 | void InterfacePPP::start() | 58 | void InterfacePPP::start() |
55 | { | 59 | { |
56 | odebug << "InterfacePPP::start" << oendl; | 60 | odebug << "InterfacePPP::start" << oendl; |
57 | 61 | ||
58 | if (data()->password().isEmpty() && !data()->storedUsername().isEmpty() ) { | 62 | if (data()->password().isEmpty() && !data()->storedUsername().isEmpty() ) { |
59 | 63 | ||
60 | QDialog mb( 0, "Dialog", true ); | 64 | QDialog mb( 0, "Dialog", true ); |
61 | mb.setCaption( tr( "No password" ) ); | 65 | mb.setCaption( tr( "No password" ) ); |
62 | QVBoxLayout layout( &mb ); | 66 | QVBoxLayout layout( &mb ); |
63 | QLabel text ( &mb ); | 67 | QLabel text ( &mb ); |
64 | text.setText( tr("Username defined but no password\n Please enter a password") ); | 68 | text.setText( tr("Username defined but no password\n Please enter a password") ); |
65 | QLineEdit lineedit( &mb ); | 69 | QLineEdit lineedit( &mb ); |
66 | lineedit.setEchoMode( QLineEdit::Password ); | 70 | lineedit.setEchoMode( QLineEdit::Password ); |
67 | layout.addWidget( &text ); | 71 | layout.addWidget( &text ); |
68 | layout.addWidget( &lineedit ); | 72 | layout.addWidget( &lineedit ); |
69 | if ( mb.exec() == QDialog::Accepted ) { | 73 | if ( mb.exec() == QDialog::Accepted ) { |
70 | data()->setPassword( lineedit.text() ); | 74 | data()->setPassword( lineedit.text() ); |
71 | } | 75 | } |
72 | } | 76 | } |
73 | 77 | ||
74 | QFileInfo info(pppdPath()); | 78 | QFileInfo info(pppdPath()); |
75 | 79 | ||
76 | if(!info.exists()){ | 80 | if(!info.exists()){ |
77 | QMessageBox::warning(0, tr("Error"), | 81 | QMessageBox::warning(0, tr("Error"), |
78 | QObject::tr("<qt>Cannot find the PPP daemon!<br>" | 82 | QObject::tr("<qt>Cannot find the PPP daemon!<br>" |
79 | "Make sure that pppd is installed and " | 83 | "Make sure that pppd is installed and " |
80 | "that you have entered the correct path.</qt>")); | 84 | "that you have entered the correct path.</qt>")); |
81 | return; | 85 | return; |
82 | } | 86 | } |
83 | //#if 0 | 87 | //#if 0 |
84 | if(!info.isExecutable()){ | 88 | if(!info.isExecutable()){ |
85 | 89 | ||
86 | QString string; | 90 | QString string; |
87 | string = QObject::tr( "<qt>Cannot execute:<br> %1<br>" | 91 | string = QObject::tr( "<qt>Cannot execute:<br> %1<br>" |
88 | "Please make sure that you have given " | 92 | "Please make sure that you have given " |
89 | "setuid permission and that " | 93 | "setuid permission and that " |
90 | "pppd is executable.<br>").arg(pppdPath()); | 94 | "pppd is executable.<br>").arg(pppdPath()); |
91 | QMessageBox::warning(0, tr("Error"), string); | 95 | QMessageBox::warning(0, tr("Error"), string); |
92 | return; | 96 | return; |
93 | 97 | ||
94 | } | 98 | } |
95 | //#endif | 99 | //#endif |
96 | 100 | ||
97 | QFileInfo info2(data()->modemDevice()); | 101 | QFileInfo info2(data()->modemDevice()); |
98 | 102 | ||
99 | if(!info2.exists()){ | 103 | if(!info2.exists()){ |
100 | QString string; | 104 | QString string; |
101 | string = QObject::tr( "<qt>Cannot find:<br> %1<br>" | 105 | string = QObject::tr( "<qt>Cannot find:<br> %1<br>" |
102 | "Please make sure you have setup " | 106 | "Please make sure you have setup " |
103 | "your modem device properly " | 107 | "your modem device properly " |
104 | "and/or adjust the location of the modem device on " | 108 | "and/or adjust the location of the modem device on " |
105 | "the modem tab of " | 109 | "the modem tab of " |
106 | "the setup dialog.</qt>").arg(data()->modemDevice()); | 110 | "the setup dialog.</qt>").arg(data()->modemDevice()); |
107 | QMessageBox::warning(0, tr("Error"), string); | 111 | QMessageBox::warning(0, tr("Error"), string); |
108 | return; | 112 | return; |
109 | } | 113 | } |
110 | 114 | ||
111 | // if this is a PAP or CHAP account, ensure that username is | 115 | // if this is a PAP or CHAP account, ensure that username is |
112 | // supplied | 116 | // supplied |
113 | if(data()->authMethod() == AUTH_PAP || | 117 | if(data()->authMethod() == AUTH_PAP || |
114 | data()->authMethod() == AUTH_CHAP || | 118 | data()->authMethod() == AUTH_CHAP || |
115 | data()->authMethod() == AUTH_PAPCHAP ) { | 119 | data()->authMethod() == AUTH_PAPCHAP ) { |
116 | if(false){ //FIXME: ID_Edit->text().isEmpty()) { | 120 | if(false){ //FIXME: ID_Edit->text().isEmpty()) { |
117 | QMessageBox::warning(0,tr("Error"), | 121 | QMessageBox::warning(0,tr("Error"), |
118 | QObject::tr("<qt>You have selected the authentication method PAP or CHAP. This requires that you supply a username and a password!</qt>")); | 122 | QObject::tr("<qt>You have selected the authentication method PAP or CHAP. This requires that you supply a username and a password!</qt>")); |
119 | // FIXME: return; | 123 | // FIXME: return; |
120 | } else { | 124 | } else { |
121 | if(!modem()->setSecret(data()->authMethod(), | 125 | if(!modem()->setSecret(data()->authMethod(), |
122 | PPPData::encodeWord(data()->storedUsername()), | 126 | PPPData::encodeWord(data()->storedUsername()), |
123 | PPPData::encodeWord(data()->password())) | 127 | PPPData::encodeWord(data()->password())) |
124 | ) { | 128 | ) { |
125 | QString s; | 129 | QString s; |
126 | s = QObject::tr("<qt>Cannot create PAP/CHAP authentication<br>" | 130 | s = QObject::tr("<qt>Cannot create PAP/CHAP authentication<br>" |
127 | "file \"%1\"</qt>").arg(PAP_AUTH_FILE); | 131 | "file \"%1\"</qt>").arg(PAP_AUTH_FILE); |
128 | QMessageBox::warning(0, tr("Error"), s); | 132 | QMessageBox::warning(0, tr("Error"), s); |
129 | return; | 133 | return; |
130 | } | 134 | } |
131 | } | 135 | } |
132 | } | 136 | } |
133 | 137 | ||
134 | if (data()->phonenumber().isEmpty()) { | 138 | if (data()->phonenumber().isEmpty()) { |
135 | QString s = QObject::tr("You must specify a telephone number!"); | 139 | QString s = QObject::tr("You must specify a telephone number!"); |
136 | QMessageBox::warning(0, tr("Error"), s); | 140 | QMessageBox::warning(0, tr("Error"), s); |
137 | return; | 141 | return; |
138 | } | 142 | } |
139 | 143 | ||
140 | // SEGFAULTS: | 144 | // SEGFAULTS: |
141 | // setStatus( true ); | 145 | // setStatus( true ); |
142 | // emit updateInterface((Interface*) this); | 146 | // emit updateInterface((Interface*) this); |
143 | 147 | ||
144 | emit begin_connect(); | 148 | emit begin_connect(); |
145 | 149 | ||
146 | odebug << "InterfacePPP::start END" << oendl; | 150 | odebug << "InterfacePPP::start END" << oendl; |
147 | } | 151 | } |
148 | 152 | ||
149 | void InterfacePPP::stop() | 153 | void InterfacePPP::stop() |
150 | { | 154 | { |
151 | odebug << "InterfacePPP::stop" << oendl; | 155 | odebug << "InterfacePPP::stop" << oendl; |
152 | // emit hangup_now(); | 156 | // emit hangup_now(); |
153 | status = false; // not connected | 157 | status = false; // not connected |
154 | setStatus( false ); | 158 | setStatus( false ); |
155 | emit hangup_now(); | 159 | emit hangup_now(); |
156 | refresh(); | 160 | refresh(); |
157 | 161 | ||
158 | } | 162 | } |
159 | 163 | ||
160 | void InterfacePPP::save() | 164 | void InterfacePPP::save() |
161 | { | 165 | { |
162 | data()->save(); | 166 | data()->save(); |
163 | emit updateInterface((Interface*) this); | 167 | emit updateInterface((Interface*) this); |
164 | } | 168 | } |
165 | QString InterfacePPP::pppDev()const { | 169 | QString InterfacePPP::pppDev()const { |
166 | return modem()->pppDevice(); | 170 | return modem()->pppDevice(); |
167 | } | 171 | } |
168 | pid_t InterfacePPP::pppPID()const{ | 172 | pid_t InterfacePPP::pppPID()const{ |
169 | return modem()->pppPID(); | 173 | return modem()->pppPID(); |
170 | } | 174 | } |
171 | void InterfacePPP::setPPPDpid( pid_t pid) { | 175 | void InterfacePPP::setPPPDpid( pid_t pid) { |
172 | setStatus( true ); | 176 | setStatus( true ); |
173 | modem()->setPPPDPid( pid ); | 177 | modem()->setPPPDPid( pid ); |
174 | } | 178 | } |
diff --git a/noncore/settings/networksettings/ppp/modem.cpp b/noncore/settings/networksettings/ppp/modem.cpp index f3f2639..5913a22 100644 --- a/noncore/settings/networksettings/ppp/modem.cpp +++ b/noncore/settings/networksettings/ppp/modem.cpp | |||
@@ -1,1080 +1,1085 @@ | |||
1 | /* | 1 | /* |
2 | * kPPP: A pppd Front End for the KDE project | 2 | * kPPP: A pppd Front End for the KDE project |
3 | * | 3 | * |
4 | * $Id$ | 4 | * $Id$ |
5 | * | 5 | * |
6 | * Copyright (C) 1997 Bernd Johannes Wuebben | 6 | * Copyright (C) 1997 Bernd Johannes Wuebben |
7 | * wuebben@math.cornell.edu | 7 | * wuebben@math.cornell.edu |
8 | * | 8 | * |
9 | * This file was added by Harri Porten <porten@tu-harburg.de> | 9 | * This file was added by Harri Porten <porten@tu-harburg.de> |
10 | * | 10 | * |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or | 12 | * This program is free software; you can redistribute it and/or |
13 | * modify it under the terms of the GNU Library General Public | 13 | * modify it under the terms of the GNU Library General Public |
14 | * License as published by the Free Software Foundation; either | 14 | * License as published by the Free Software Foundation; either |
15 | * version 2 of the License, or (at your option) any later version. | 15 | * version 2 of the License, or (at your option) any later version. |
16 | * | 16 | * |
17 | * This program is distributed in the hope that it will be useful, | 17 | * This program is distributed in the hope that it will be useful, |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
20 | * Library General Public License for more details. | 20 | * Library General Public License for more details. |
21 | * | 21 | * |
22 | * You should have received a copy of the GNU Library General Public | 22 | * You should have received a copy of the GNU Library General Public |
23 | * License along with this program; if not, write to the Free | 23 | * License along with this program; if not, write to the Free |
24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | /* OPIE */ | ||
28 | #include <opie2/odebug.h> | ||
29 | using namespace Opie::Core; | ||
30 | |||
31 | /* STD */ | ||
27 | #include <errno.h> | 32 | #include <errno.h> |
28 | #include <stdlib.h> | 33 | #include <stdlib.h> |
29 | #include <unistd.h> | 34 | #include <unistd.h> |
30 | #include <fcntl.h> | 35 | #include <fcntl.h> |
31 | #include <signal.h> | 36 | #include <signal.h> |
32 | #include <sys/ioctl.h> | 37 | #include <sys/ioctl.h> |
33 | #include <sys/types.h> | 38 | #include <sys/types.h> |
34 | #include <sys/stat.h> | 39 | #include <sys/stat.h> |
35 | #include <setjmp.h> | 40 | #include <setjmp.h> |
36 | #include <regex.h> | 41 | #include <regex.h> |
37 | #include <qregexp.h> | 42 | #include <qregexp.h> |
38 | #include <assert.h> | 43 | #include <assert.h> |
39 | #include <string.h> | 44 | #include <string.h> |
40 | 45 | ||
41 | #ifdef HAVE_RESOLV_H | 46 | #ifdef HAVE_RESOLV_H |
42 | # include <arpa/nameser.h> | 47 | # include <arpa/nameser.h> |
43 | # include <resolv.h> | 48 | # include <resolv.h> |
44 | #endif | 49 | #endif |
45 | 50 | ||
46 | #ifndef _PATH_RESCONF | 51 | #ifndef _PATH_RESCONF |
47 | #define _PATH_RESCONF "/etc/resolv.conf" | 52 | #define _PATH_RESCONF "/etc/resolv.conf" |
48 | #endif | 53 | #endif |
49 | 54 | ||
50 | #define strlcpy strcpy | 55 | #define strlcpy strcpy |
51 | #include "auth.h" | 56 | #include "auth.h" |
52 | #include "modem.h" | 57 | #include "modem.h" |
53 | #include "pppdata.h" | 58 | #include "pppdata.h" |
54 | #define qError qDebug | 59 | #define qError qDebug |
55 | 60 | ||
56 | 61 | ||
57 | #define MY_ASSERT(x) if (!(x)) { \ | 62 | #define MY_ASSERT(x) if (!(x)) { \ |
58 | ofatal << "ASSERT: \"" << #x << "\" in " << __FILE__ << " (" << __LINE__ << ")\n" << oendl; \ | 63 | ofatal << "ASSERT: \"" << #x << "\" in " << __FILE__ << " (" << __LINE__ << ")\n" << oendl; \ |
59 | exit(1); } | 64 | exit(1); } |
60 | 65 | ||
61 | 66 | ||
62 | static sigjmp_buf jmp_buffer; | 67 | static sigjmp_buf jmp_buffer; |
63 | 68 | ||
64 | //Modem *Modem::modem = 0; | 69 | //Modem *Modem::modem = 0; |
65 | 70 | ||
66 | 71 | ||
67 | const char* pppdPath() { | 72 | const char* pppdPath() { |
68 | // wasting a few bytes | 73 | // wasting a few bytes |
69 | static char buffer[sizeof(PPPDSEARCHPATH)+sizeof(PPPDNAME)]; | 74 | static char buffer[sizeof(PPPDSEARCHPATH)+sizeof(PPPDNAME)]; |
70 | static char *pppdPath = 0L; | 75 | static char *pppdPath = 0L; |
71 | char *p; | 76 | char *p; |
72 | 77 | ||
73 | if(pppdPath == 0L) { | 78 | if(pppdPath == 0L) { |
74 | const char *c = PPPDSEARCHPATH; | 79 | const char *c = PPPDSEARCHPATH; |
75 | while(*c != '\0') { | 80 | while(*c != '\0') { |
76 | while(*c == ':') | 81 | while(*c == ':') |
77 | c++; | 82 | c++; |
78 | p = buffer; | 83 | p = buffer; |
79 | while(*c != '\0' && *c != ':') | 84 | while(*c != '\0' && *c != ':') |
80 | *p++ = *c++; | 85 | *p++ = *c++; |
81 | *p = '\0'; | 86 | *p = '\0'; |
82 | strcat(p, "/"); | 87 | strcat(p, "/"); |
83 | strcat(p, PPPDNAME); | 88 | strcat(p, PPPDNAME); |
84 | if(access(buffer, F_OK) == 0) | 89 | if(access(buffer, F_OK) == 0) |
85 | return (pppdPath = buffer); | 90 | return (pppdPath = buffer); |
86 | } | 91 | } |
87 | } | 92 | } |
88 | 93 | ||
89 | return pppdPath; | 94 | return pppdPath; |
90 | } | 95 | } |
91 | 96 | ||
92 | 97 | ||
93 | Modem::Modem( PPPData* pd ) | 98 | Modem::Modem( PPPData* pd ) |
94 | { | 99 | { |
95 | _pppdata = pd; | 100 | _pppdata = pd; |
96 | modemfd = -1; | 101 | modemfd = -1; |
97 | _pppdExitStatus = -1; | 102 | _pppdExitStatus = -1; |
98 | pppdPid = -1; | 103 | pppdPid = -1; |
99 | sn = m_modemDebug = 0L; | 104 | sn = m_modemDebug = 0L; |
100 | data_mode = false; | 105 | data_mode = false; |
101 | modem_is_locked = false; | 106 | modem_is_locked = false; |
102 | lockfile[0] = '\0'; | 107 | lockfile[0] = '\0'; |
103 | device = "/dev/modem"; | 108 | device = "/dev/modem"; |
104 | } | 109 | } |
105 | 110 | ||
106 | 111 | ||
107 | Modem::~Modem() | 112 | Modem::~Modem() |
108 | { | 113 | { |
109 | } | 114 | } |
110 | 115 | ||
111 | 116 | ||
112 | speed_t Modem::modemspeed() { | 117 | speed_t Modem::modemspeed() { |
113 | // convert the string modem speed int the gpppdata object to a t_speed type | 118 | // convert the string modem speed int the gpppdata object to a t_speed type |
114 | // to set the modem. The constants here should all be ifdef'd because | 119 | // to set the modem. The constants here should all be ifdef'd because |
115 | // other systems may not have them | 120 | // other systems may not have them |
116 | int i = _pppdata->speed().toInt()/100; | 121 | int i = _pppdata->speed().toInt()/100; |
117 | 122 | ||
118 | switch(i) { | 123 | switch(i) { |
119 | case 24: | 124 | case 24: |
120 | return B2400; | 125 | return B2400; |
121 | break; | 126 | break; |
122 | case 96: | 127 | case 96: |
123 | return B9600; | 128 | return B9600; |
124 | break; | 129 | break; |
125 | case 192: | 130 | case 192: |
126 | return B19200; | 131 | return B19200; |
127 | break; | 132 | break; |
128 | case 384: | 133 | case 384: |
129 | return B38400; | 134 | return B38400; |
130 | break; | 135 | break; |
131 | #ifdef B57600 | 136 | #ifdef B57600 |
132 | case 576: | 137 | case 576: |
133 | return B57600; | 138 | return B57600; |
134 | break; | 139 | break; |
135 | #endif | 140 | #endif |
136 | 141 | ||
137 | #ifdef B115200 | 142 | #ifdef B115200 |
138 | case 1152: | 143 | case 1152: |
139 | return B115200; | 144 | return B115200; |
140 | break; | 145 | break; |
141 | #endif | 146 | #endif |
142 | 147 | ||
143 | #ifdef B230400 | 148 | #ifdef B230400 |
144 | case 2304: | 149 | case 2304: |
145 | return B230400; | 150 | return B230400; |
146 | break; | 151 | break; |
147 | #endif | 152 | #endif |
148 | 153 | ||
149 | #ifdef B460800 | 154 | #ifdef B460800 |
150 | case 4608: | 155 | case 4608: |
151 | return B460800; | 156 | return B460800; |
152 | break; | 157 | break; |
153 | #endif | 158 | #endif |
154 | 159 | ||
155 | default: | 160 | default: |
156 | return B38400; | 161 | return B38400; |
157 | break; | 162 | break; |
158 | } | 163 | } |
159 | } | 164 | } |
160 | 165 | ||
161 | bool Modem::opentty() { | 166 | bool Modem::opentty() { |
162 | // int flags; | 167 | // int flags; |
163 | 168 | ||
164 | //begin if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) { | 169 | //begin if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) { |
165 | close(modemfd); | 170 | close(modemfd); |
166 | device = _pppdata->modemDevice(); | 171 | device = _pppdata->modemDevice(); |
167 | if ((modemfd = open(device, O_RDWR|O_NDELAY|O_NOCTTY)) == -1) { | 172 | if ((modemfd = open(device, O_RDWR|O_NDELAY|O_NOCTTY)) == -1) { |
168 | odebug << "error opening modem device !" << oendl; | 173 | odebug << "error opening modem device !" << oendl; |
169 | errmsg = QObject::tr("Unable to open modem."); | 174 | errmsg = QObject::tr("Unable to open modem."); |
170 | return false; | 175 | return false; |
171 | } | 176 | } |
172 | //bend if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) { | 177 | //bend if((modemfd = Requester::rq->openModem(gpppdata.modemDevice()))<0) { |
173 | //} | 178 | //} |
174 | 179 | ||
175 | #if 0 | 180 | #if 0 |
176 | if(_pppdata->UseCDLine()) { | 181 | if(_pppdata->UseCDLine()) { |
177 | if(ioctl(modemfd, TIOCMGET, &flags) == -1) { | 182 | if(ioctl(modemfd, TIOCMGET, &flags) == -1) { |
178 | errmsg = QObject::tr("Unable to detect state of CD line."); | 183 | errmsg = QObject::tr("Unable to detect state of CD line."); |
179 | ::close(modemfd); | 184 | ::close(modemfd); |
180 | modemfd = -1; | 185 | modemfd = -1; |
181 | return false; | 186 | return false; |
182 | } | 187 | } |
183 | if ((flags&TIOCM_CD) == 0) { | 188 | if ((flags&TIOCM_CD) == 0) { |
184 | errmsg = QObject::tr("The modem is not ready."); | 189 | errmsg = QObject::tr("The modem is not ready."); |
185 | ::close(modemfd); | 190 | ::close(modemfd); |
186 | modemfd = -1; | 191 | modemfd = -1; |
187 | return false; | 192 | return false; |
188 | } | 193 | } |
189 | } | 194 | } |
190 | #endif | 195 | #endif |
191 | 196 | ||
192 | tcdrain (modemfd); | 197 | tcdrain (modemfd); |
193 | tcflush (modemfd, TCIOFLUSH); | 198 | tcflush (modemfd, TCIOFLUSH); |
194 | 199 | ||
195 | if(tcgetattr(modemfd, &tty) < 0){ | 200 | if(tcgetattr(modemfd, &tty) < 0){ |
196 | // this helps in some cases | 201 | // this helps in some cases |
197 | tcsendbreak(modemfd, 0); | 202 | tcsendbreak(modemfd, 0); |
198 | sleep(1); | 203 | sleep(1); |
199 | if(tcgetattr(modemfd, &tty) < 0){ | 204 | if(tcgetattr(modemfd, &tty) < 0){ |
200 | errmsg = QObject::tr("The modem is busy."); | 205 | errmsg = QObject::tr("The modem is busy."); |
201 | ::close(modemfd); | 206 | ::close(modemfd); |
202 | modemfd = -1; | 207 | modemfd = -1; |
203 | return false; | 208 | return false; |
204 | } | 209 | } |
205 | } | 210 | } |
206 | 211 | ||
207 | memset(&initial_tty,'\0',sizeof(initial_tty)); | 212 | memset(&initial_tty,'\0',sizeof(initial_tty)); |
208 | 213 | ||
209 | initial_tty = tty; | 214 | initial_tty = tty; |
210 | 215 | ||
211 | tty.c_cc[VMIN] = 0; // nonblocking | 216 | tty.c_cc[VMIN] = 0; // nonblocking |
212 | tty.c_cc[VTIME] = 0; | 217 | tty.c_cc[VTIME] = 0; |
213 | tty.c_oflag = 0; | 218 | tty.c_oflag = 0; |
214 | tty.c_lflag = 0; | 219 | tty.c_lflag = 0; |
215 | 220 | ||
216 | tty.c_cflag &= ~(CSIZE | CSTOPB | PARENB); | 221 | tty.c_cflag &= ~(CSIZE | CSTOPB | PARENB); |
217 | tty.c_cflag |= CS8 | CREAD; | 222 | tty.c_cflag |= CS8 | CREAD; |
218 | tty.c_cflag |= CLOCAL; // ignore modem status lines | 223 | tty.c_cflag |= CLOCAL; // ignore modem status lines |
219 | tty.c_iflag = IGNBRK | IGNPAR /* | ISTRIP */ ; | 224 | tty.c_iflag = IGNBRK | IGNPAR /* | ISTRIP */ ; |
220 | tty.c_lflag &= ~ICANON; // non-canonical mode | 225 | tty.c_lflag &= ~ICANON; // non-canonical mode |
221 | tty.c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHOKE); | 226 | tty.c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHOKE); |
222 | 227 | ||
223 | 228 | ||
224 | if(_pppdata->flowcontrol() != "None") { | 229 | if(_pppdata->flowcontrol() != "None") { |
225 | if(_pppdata->flowcontrol() == "CRTSCTS") { | 230 | if(_pppdata->flowcontrol() == "CRTSCTS") { |
226 | tty.c_cflag |= CRTSCTS; | 231 | tty.c_cflag |= CRTSCTS; |
227 | } | 232 | } |
228 | else { | 233 | else { |
229 | tty.c_iflag |= IXON | IXOFF; | 234 | tty.c_iflag |= IXON | IXOFF; |
230 | tty.c_cc[VSTOP] = 0x13; /* DC3 = XOFF = ^S */ | 235 | tty.c_cc[VSTOP] = 0x13; /* DC3 = XOFF = ^S */ |
231 | tty.c_cc[VSTART] = 0x11; /* DC1 = XON = ^Q */ | 236 | tty.c_cc[VSTART] = 0x11; /* DC1 = XON = ^Q */ |
232 | } | 237 | } |
233 | } | 238 | } |
234 | else { | 239 | else { |
235 | tty.c_cflag &= ~CRTSCTS; | 240 | tty.c_cflag &= ~CRTSCTS; |
236 | tty.c_iflag &= ~(IXON | IXOFF); | 241 | tty.c_iflag &= ~(IXON | IXOFF); |
237 | } | 242 | } |
238 | 243 | ||
239 | cfsetospeed(&tty, modemspeed()); | 244 | cfsetospeed(&tty, modemspeed()); |
240 | cfsetispeed(&tty, modemspeed()); | 245 | cfsetispeed(&tty, modemspeed()); |
241 | 246 | ||
242 | tcdrain(modemfd); | 247 | tcdrain(modemfd); |
243 | 248 | ||
244 | if(tcsetattr(modemfd, TCSANOW, &tty) < 0){ | 249 | if(tcsetattr(modemfd, TCSANOW, &tty) < 0){ |
245 | errmsg = QObject::tr("The modem is busy."); | 250 | errmsg = QObject::tr("The modem is busy."); |
246 | ::close(modemfd); | 251 | ::close(modemfd); |
247 | modemfd=-1; | 252 | modemfd=-1; |
248 | return false; | 253 | return false; |
249 | } | 254 | } |
250 | 255 | ||
251 | errmsg = QObject::tr("Modem Ready."); | 256 | errmsg = QObject::tr("Modem Ready."); |
252 | return true; | 257 | return true; |
253 | } | 258 | } |
254 | 259 | ||
255 | 260 | ||
256 | bool Modem::closetty() { | 261 | bool Modem::closetty() { |
257 | if(modemfd >=0 ) { | 262 | if(modemfd >=0 ) { |
258 | stop(); | 263 | stop(); |
259 | /* discard data not read or transmitted */ | 264 | /* discard data not read or transmitted */ |
260 | tcflush(modemfd, TCIOFLUSH); | 265 | tcflush(modemfd, TCIOFLUSH); |
261 | 266 | ||
262 | if(tcsetattr(modemfd, TCSANOW, &initial_tty) < 0){ | 267 | if(tcsetattr(modemfd, TCSANOW, &initial_tty) < 0){ |
263 | errmsg = QObject::tr("Can't restore tty settings: tcsetattr()\n"); | 268 | errmsg = QObject::tr("Can't restore tty settings: tcsetattr()\n"); |
264 | ::close(modemfd); | 269 | ::close(modemfd); |
265 | modemfd = -1; | 270 | modemfd = -1; |
266 | return false; | 271 | return false; |
267 | } | 272 | } |
268 | ::close(modemfd); | 273 | ::close(modemfd); |
269 | modemfd = -1; | 274 | modemfd = -1; |
270 | } | 275 | } |
271 | 276 | ||
272 | return true; | 277 | return true; |
273 | } | 278 | } |
274 | 279 | ||
275 | 280 | ||
276 | void Modem::readtty(int) { | 281 | void Modem::readtty(int) { |
277 | char buffer[200]; | 282 | char buffer[200]; |
278 | unsigned char c; | 283 | unsigned char c; |
279 | int len; | 284 | int len; |
280 | 285 | ||
281 | // read data in chunks of up to 200 bytes | 286 | // read data in chunks of up to 200 bytes |
282 | if((len = ::read(modemfd, buffer, 200)) > 0) { | 287 | if((len = ::read(modemfd, buffer, 200)) > 0) { |
283 | // split buffer into single characters for further processing | 288 | // split buffer into single characters for further processing |
284 | for(int i = 0; i < len; i++) { | 289 | for(int i = 0; i < len; i++) { |
285 | c = buffer[i] & 0x7F; | 290 | c = buffer[i] & 0x7F; |
286 | emit charWaiting(c); | 291 | emit charWaiting(c); |
287 | } | 292 | } |
288 | } | 293 | } |
289 | } | 294 | } |
290 | 295 | ||
291 | 296 | ||
292 | void Modem::notify(const QObject *receiver, const char *member) { | 297 | void Modem::notify(const QObject *receiver, const char *member) { |
293 | connect(this, SIGNAL(charWaiting(unsigned char)), receiver, member); | 298 | connect(this, SIGNAL(charWaiting(unsigned char)), receiver, member); |
294 | startNotifier(); | 299 | startNotifier(); |
295 | } | 300 | } |
296 | 301 | ||
297 | 302 | ||
298 | void Modem::stop() { | 303 | void Modem::stop() { |
299 | disconnect(SIGNAL(charWaiting(unsigned char))); | 304 | disconnect(SIGNAL(charWaiting(unsigned char))); |
300 | stopNotifier(); | 305 | stopNotifier(); |
301 | } | 306 | } |
302 | 307 | ||
303 | 308 | ||
304 | void Modem::startNotifier() { | 309 | void Modem::startNotifier() { |
305 | if(modemfd >= 0) { | 310 | if(modemfd >= 0) { |
306 | if(sn == 0) { | 311 | if(sn == 0) { |
307 | sn = new QSocketNotifier(modemfd, QSocketNotifier::Read, this); | 312 | sn = new QSocketNotifier(modemfd, QSocketNotifier::Read, this); |
308 | connect(sn, SIGNAL(activated(int)), SLOT(readtty(int))); | 313 | connect(sn, SIGNAL(activated(int)), SLOT(readtty(int))); |
309 | odebug << "QSocketNotifier started!" << oendl; | 314 | odebug << "QSocketNotifier started!" << oendl; |
310 | } else { | 315 | } else { |
311 | odebug << "QSocketNotifier re-enabled!" << oendl; | 316 | odebug << "QSocketNotifier re-enabled!" << oendl; |
312 | sn->setEnabled(true); | 317 | sn->setEnabled(true); |
313 | } | 318 | } |
314 | } | 319 | } |
315 | } | 320 | } |
316 | 321 | ||
317 | 322 | ||
318 | void Modem::stopNotifier() { | 323 | void Modem::stopNotifier() { |
319 | if(sn != 0) { | 324 | if(sn != 0) { |
320 | sn->setEnabled(false); | 325 | sn->setEnabled(false); |
321 | disconnect(sn); | 326 | disconnect(sn); |
322 | delete sn; | 327 | delete sn; |
323 | sn = 0; | 328 | sn = 0; |
324 | odebug << "QSocketNotifier stopped!" << oendl; | 329 | odebug << "QSocketNotifier stopped!" << oendl; |
325 | } | 330 | } |
326 | } | 331 | } |
327 | 332 | ||
328 | 333 | ||
329 | void Modem::flush() { | 334 | void Modem::flush() { |
330 | char c; | 335 | char c; |
331 | while(read(modemfd, &c, 1) == 1); | 336 | while(read(modemfd, &c, 1) == 1); |
332 | } | 337 | } |
333 | 338 | ||
334 | 339 | ||
335 | bool Modem::writeChar(unsigned char c) { | 340 | bool Modem::writeChar(unsigned char c) { |
336 | int s; | 341 | int s; |
337 | do { | 342 | do { |
338 | s = write(modemfd, &c, 1); | 343 | s = write(modemfd, &c, 1); |
339 | if (s < 0) { | 344 | if (s < 0) { |
340 | oerr << "write() in Modem::writeChar failed" << oendl; | 345 | oerr << "write() in Modem::writeChar failed" << oendl; |
341 | return false; | 346 | return false; |
342 | } | 347 | } |
343 | } while(s == 0); | 348 | } while(s == 0); |
344 | 349 | ||
345 | return true; | 350 | return true; |
346 | } | 351 | } |
347 | 352 | ||
348 | 353 | ||
349 | bool Modem::writeLine(const char *buf) { | 354 | bool Modem::writeLine(const char *buf) { |
350 | int len = strlen(buf); | 355 | int len = strlen(buf); |
351 | char *b = new char[len+2]; | 356 | char *b = new char[len+2]; |
352 | memcpy(b, buf, len); | 357 | memcpy(b, buf, len); |
353 | // different modems seem to need different line terminations | 358 | // different modems seem to need different line terminations |
354 | QString term = _pppdata->enter(); | 359 | QString term = _pppdata->enter(); |
355 | if(term == "LF") | 360 | if(term == "LF") |
356 | b[len++]='\n'; | 361 | b[len++]='\n'; |
357 | else if(term == "CR") | 362 | else if(term == "CR") |
358 | b[len++]='\r'; | 363 | b[len++]='\r'; |
359 | else if(term == "CR/LF") { | 364 | else if(term == "CR/LF") { |
360 | b[len++]='\r'; | 365 | b[len++]='\r'; |
361 | b[len++]='\n'; | 366 | b[len++]='\n'; |
362 | } | 367 | } |
363 | int l = len; | 368 | int l = len; |
364 | while(l) { | 369 | while(l) { |
365 | int wr = write(modemfd, &b[len-l], l); | 370 | int wr = write(modemfd, &b[len-l], l); |
366 | if(wr < 0) { | 371 | if(wr < 0) { |
367 | // TODO do something meaningful with the error code (or ignore it | 372 | // TODO do something meaningful with the error code (or ignore it |
368 | oerr << "write() in Modem::writeLine failed" << oendl; | 373 | oerr << "write() in Modem::writeLine failed" << oendl; |
369 | delete[] b; | 374 | delete[] b; |
370 | return false; | 375 | return false; |
371 | } | 376 | } |
372 | l -= wr; | 377 | l -= wr; |
373 | } | 378 | } |
374 | delete[] b; | 379 | delete[] b; |
375 | return true; | 380 | return true; |
376 | } | 381 | } |
377 | 382 | ||
378 | 383 | ||
379 | bool Modem::hangup() { | 384 | bool Modem::hangup() { |
380 | // 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 |
381 | // 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 |
382 | // 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 |
383 | // 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 |
384 | // is most likely the reason. | 389 | // is most likely the reason. |
385 | struct termios temptty; | 390 | struct termios temptty; |
386 | 391 | ||
387 | if(modemfd >= 0) { | 392 | if(modemfd >= 0) { |
388 | 393 | ||
389 | // is this Escape & HangupStr stuff really necessary ? (Harri) | 394 | // is this Escape & HangupStr stuff really necessary ? (Harri) |
390 | 395 | ||
391 | if (data_mode) escape_to_command_mode(); | 396 | if (data_mode) escape_to_command_mode(); |
392 | 397 | ||
393 | // Then hangup command | 398 | // Then hangup command |
394 | writeLine(_pppdata->modemHangupStr().local8Bit()); | 399 | writeLine(_pppdata->modemHangupStr().local8Bit()); |
395 | 400 | ||
396 | usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 sec | 401 | usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 sec |
397 | 402 | ||
398 | #ifndef DEBUG_WO_DIALING | 403 | #ifndef DEBUG_WO_DIALING |
399 | if (sigsetjmp(jmp_buffer, 1) == 0) { | 404 | if (sigsetjmp(jmp_buffer, 1) == 0) { |
400 | // set alarm in case tcsendbreak() hangs | 405 | // set alarm in case tcsendbreak() hangs |
401 | signal(SIGALRM, alarm_handler); | 406 | signal(SIGALRM, alarm_handler); |
402 | alarm(2); | 407 | alarm(2); |
403 | 408 | ||
404 | tcsendbreak(modemfd, 0); | 409 | tcsendbreak(modemfd, 0); |
405 | 410 | ||
406 | alarm(0); | 411 | alarm(0); |
407 | signal(SIGALRM, SIG_IGN); | 412 | signal(SIGALRM, SIG_IGN); |
408 | } else { | 413 | } else { |
409 | // we reach this point if the alarm handler got called | 414 | // we reach this point if the alarm handler got called |
410 | closetty(); | 415 | closetty(); |
411 | close(modemfd); | 416 | close(modemfd); |
412 | modemfd = -1; | 417 | modemfd = -1; |
413 | errmsg = QObject::tr("The modem does not respond."); | 418 | errmsg = QObject::tr("The modem does not respond."); |
414 | return false; | 419 | return false; |
415 | } | 420 | } |
416 | 421 | ||
417 | #ifndef __svr4__ // drops DTR but doesn't set it afterwards again. not good for init. | 422 | #ifndef __svr4__ // drops DTR but doesn't set it afterwards again. not good for init. |
418 | tcgetattr(modemfd, &temptty); | 423 | tcgetattr(modemfd, &temptty); |
419 | cfsetospeed(&temptty, B0); | 424 | cfsetospeed(&temptty, B0); |
420 | cfsetispeed(&temptty, B0); | 425 | cfsetispeed(&temptty, B0); |
421 | tcsetattr(modemfd, TCSAFLUSH, &temptty); | 426 | tcsetattr(modemfd, TCSAFLUSH, &temptty); |
422 | #else | 427 | #else |
423 | int modemstat; | 428 | int modemstat; |
424 | ioctl(modemfd, TIOCMGET, &modemstat); | 429 | ioctl(modemfd, TIOCMGET, &modemstat); |
425 | modemstat &= ~TIOCM_DTR; | 430 | modemstat &= ~TIOCM_DTR; |
426 | ioctl(modemfd, TIOCMSET, &modemstat); | 431 | ioctl(modemfd, TIOCMSET, &modemstat); |
427 | ioctl(modemfd, TIOCMGET, &modemstat); | 432 | ioctl(modemfd, TIOCMGET, &modemstat); |
428 | modemstat |= TIOCM_DTR; | 433 | modemstat |= TIOCM_DTR; |
429 | ioctl(modemfd, TIOCMSET, &modemstat); | 434 | ioctl(modemfd, TIOCMSET, &modemstat); |
430 | #endif | 435 | #endif |
431 | 436 | ||
432 | usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 secs | 437 | usleep(_pppdata->modemInitDelay() * 10000); // 0.01 - 3.0 secs |
433 | 438 | ||
434 | cfsetospeed(&temptty, modemspeed()); | 439 | cfsetospeed(&temptty, modemspeed()); |
435 | cfsetispeed(&temptty, modemspeed()); | 440 | cfsetispeed(&temptty, modemspeed()); |
436 | tcsetattr(modemfd, TCSAFLUSH, &temptty); | 441 | tcsetattr(modemfd, TCSAFLUSH, &temptty); |
437 | #endif | 442 | #endif |
438 | return true; | 443 | return true; |
439 | } else | 444 | } else |
440 | return false; | 445 | return false; |
441 | } | 446 | } |
442 | 447 | ||
443 | 448 | ||
444 | void Modem::escape_to_command_mode() { | 449 | void Modem::escape_to_command_mode() { |
445 | // 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. |
446 | // 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. |
447 | // When a modem sends the host the CONNECT string, that signals | 452 | // When a modem sends the host the CONNECT string, that signals |
448 | // 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.) |
449 | // 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. |
450 | // 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. |
451 | // | 456 | // |
452 | tcflush(modemfd, TCIOFLUSH); | 457 | tcflush(modemfd, TCIOFLUSH); |
453 | 458 | ||
454 | // +3 because quiet time must be greater than guard time. | 459 | // +3 because quiet time must be greater than guard time. |
455 | usleep((_pppdata->modemEscapeGuardTime()+3)*20000); | 460 | usleep((_pppdata->modemEscapeGuardTime()+3)*20000); |
456 | QCString tmp = _pppdata->modemEscapeStr().local8Bit(); | 461 | QCString tmp = _pppdata->modemEscapeStr().local8Bit(); |
457 | write(modemfd, tmp.data(), tmp.length()); | 462 | write(modemfd, tmp.data(), tmp.length()); |
458 | tcflush(modemfd, TCIOFLUSH); | 463 | tcflush(modemfd, TCIOFLUSH); |
459 | usleep((_pppdata->modemEscapeGuardTime()+3)*20000); | 464 | usleep((_pppdata->modemEscapeGuardTime()+3)*20000); |
460 | 465 | ||
461 | data_mode = false; | 466 | data_mode = false; |
462 | } | 467 | } |
463 | 468 | ||
464 | 469 | ||
465 | const QString Modem::modemMessage() { | 470 | const QString Modem::modemMessage() { |
466 | return errmsg; | 471 | return errmsg; |
467 | } | 472 | } |
468 | 473 | ||
469 | 474 | ||
470 | QString Modem::parseModemSpeed(const QString &s) { | 475 | QString Modem::parseModemSpeed(const QString &s) { |
471 | // this is a small (and bad) parser for modem speeds | 476 | // this is a small (and bad) parser for modem speeds |
472 | int rx = -1; | 477 | int rx = -1; |
473 | int tx = -1; | 478 | int tx = -1; |
474 | int i; | 479 | int i; |
475 | QString result; | 480 | QString result; |
476 | 481 | ||
477 | odebug << "Modem reported result string: " << s.latin1() << "" << oendl; | 482 | odebug << "Modem reported result string: " << s.latin1() << "" << oendl; |
478 | 483 | ||
479 | const int RXMAX = 7; | 484 | const int RXMAX = 7; |
480 | const int TXMAX = 2; | 485 | const int TXMAX = 2; |
481 | QRegExp rrx[RXMAX] = { | 486 | QRegExp rrx[RXMAX] = { |
482 | QRegExp("[0-9]+[:/ ]RX", false), | 487 | QRegExp("[0-9]+[:/ ]RX", false), |
483 | QRegExp("[0-9]+RX", false), | 488 | QRegExp("[0-9]+RX", false), |
484 | QRegExp("[/: -][0-9]+[/: ]", false), | 489 | QRegExp("[/: -][0-9]+[/: ]", false), |
485 | QRegExp("[/: -][0-9]+$", false), | 490 | QRegExp("[/: -][0-9]+$", false), |
486 | QRegExp("CARRIER [^0-9]*[0-9]+", false), | 491 | QRegExp("CARRIER [^0-9]*[0-9]+", false), |
487 | QRegExp("CONNECT [^0-9]*[0-9]+", false), | 492 | QRegExp("CONNECT [^0-9]*[0-9]+", false), |
488 | QRegExp("[0-9]+") // panic mode | 493 | QRegExp("[0-9]+") // panic mode |
489 | }; | 494 | }; |
490 | 495 | ||
491 | QRegExp trx[TXMAX] = { | 496 | QRegExp trx[TXMAX] = { |
492 | QRegExp("[0-9]+[:/ ]TX", false), | 497 | QRegExp("[0-9]+[:/ ]TX", false), |
493 | QRegExp("[0-9]+TX", false) | 498 | QRegExp("[0-9]+TX", false) |
494 | }; | 499 | }; |
495 | 500 | ||
496 | for(i = 0; i < RXMAX; i++) { | 501 | for(i = 0; i < RXMAX; i++) { |
497 | int len, idx, result; | 502 | int len, idx, result; |
498 | if((idx = rrx[i].match(s,0,&len)) > -1) { | 503 | if((idx = rrx[i].match(s,0,&len)) > -1) { |
499 | // if((idx = rrx[i].search(s)) > -1) { | 504 | // if((idx = rrx[i].search(s)) > -1) { |
500 | // len = rrx[i].matchedLength(); | 505 | // len = rrx[i].matchedLength(); |
501 | 506 | ||
502 | // | 507 | // |
503 | // 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 |
504 | // and len contains how long the match is. Extract the match. | 509 | // and len contains how long the match is. Extract the match. |
505 | // | 510 | // |
506 | QString sub = s.mid(idx, len); | 511 | QString sub = s.mid(idx, len); |
507 | 512 | ||
508 | // | 513 | // |
509 | // Now extract the digits only from the match, which will | 514 | // Now extract the digits only from the match, which will |
510 | // then be converted to an int. | 515 | // then be converted to an int. |
511 | // | 516 | // |
512 | if ((idx = rrx[RXMAX-1].match( sub,0,&len )) > -1) { | 517 | if ((idx = rrx[RXMAX-1].match( sub,0,&len )) > -1) { |
513 | // if ((idx = rrx[RXMAX-1].search( sub )) > -1) { | 518 | // if ((idx = rrx[RXMAX-1].search( sub )) > -1) { |
514 | // len = rrx[RXMAX-1].matchedLength(); | 519 | // len = rrx[RXMAX-1].matchedLength(); |
515 | sub = sub.mid(idx, len); | 520 | sub = sub.mid(idx, len); |
516 | result = sub.toInt(); | 521 | result = sub.toInt(); |
517 | if(result > 0) { | 522 | if(result > 0) { |
518 | rx = result; | 523 | rx = result; |
519 | break; | 524 | break; |
520 | } | 525 | } |
521 | } | 526 | } |
522 | } | 527 | } |
523 | } | 528 | } |
524 | 529 | ||
525 | for(i = 0; i < TXMAX; i++) { | 530 | for(i = 0; i < TXMAX; i++) { |
526 | int len, idx, result; | 531 | int len, idx, result; |
527 | if((idx = trx[i].match(s,0,&len)) > -1) { | 532 | if((idx = trx[i].match(s,0,&len)) > -1) { |
528 | // if((idx = trx[i].search(s)) > -1) { | 533 | // if((idx = trx[i].search(s)) > -1) { |
529 | // len = trx[i].matchedLength(); | 534 | // len = trx[i].matchedLength(); |
530 | 535 | ||
531 | // | 536 | // |
532 | // 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 |
533 | // and len contains how long the match is. Extract the match. | 538 | // and len contains how long the match is. Extract the match. |
534 | // | 539 | // |
535 | QString sub = s.mid(idx, len); | 540 | QString sub = s.mid(idx, len); |
536 | 541 | ||
537 | // | 542 | // |
538 | // Now extract the digits only from the match, which will then | 543 | // Now extract the digits only from the match, which will then |
539 | // be converted to an int. | 544 | // be converted to an int. |
540 | // | 545 | // |
541 | if((idx = rrx[RXMAX-1].match(sub,0,&len)) > -1) { | 546 | if((idx = rrx[RXMAX-1].match(sub,0,&len)) > -1) { |
542 | // if((idx = rrx[RXMAX-1].search(sub)) > -1) { | 547 | // if((idx = rrx[RXMAX-1].search(sub)) > -1) { |
543 | // len = rrx[RXMAX-1].matchedLength(); | 548 | // len = rrx[RXMAX-1].matchedLength(); |
544 | sub = sub.mid(idx, len); | 549 | sub = sub.mid(idx, len); |
545 | result = sub.toInt(); | 550 | result = sub.toInt(); |
546 | if(result > 0) { | 551 | if(result > 0) { |
547 | tx = result; | 552 | tx = result; |
548 | break; | 553 | break; |
549 | } | 554 | } |
550 | } | 555 | } |
551 | } | 556 | } |
552 | } | 557 | } |
553 | 558 | ||
554 | if(rx == -1 && tx == -1) | 559 | if(rx == -1 && tx == -1) |
555 | result = QObject::tr("Unknown speed"); | 560 | result = QObject::tr("Unknown speed"); |
556 | else if(tx == -1) | 561 | else if(tx == -1) |
557 | result.setNum(rx); | 562 | result.setNum(rx); |
558 | else if(rx == -1) // should not happen | 563 | else if(rx == -1) // should not happen |
559 | result.setNum(tx); | 564 | result.setNum(tx); |
560 | else | 565 | else |
561 | result.sprintf("%d/%d", rx, tx); | 566 | result.sprintf("%d/%d", rx, tx); |
562 | 567 | ||
563 | odebug << "The parsed result is: " << result.latin1() << "" << oendl; | 568 | odebug << "The parsed result is: " << result.latin1() << "" << oendl; |
564 | 569 | ||
565 | return result; | 570 | return result; |
566 | } | 571 | } |
567 | 572 | ||
568 | 573 | ||
569 | // 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 |
570 | // a lock file can't be created ( permission problem ) | 575 | // a lock file can't be created ( permission problem ) |
571 | int Modem::lockdevice() { | 576 | int Modem::lockdevice() { |
572 | int fd; | 577 | int fd; |
573 | char newlock[80]=""; // safe | 578 | char newlock[80]=""; // safe |
574 | 579 | ||
575 | if(!_pppdata->modemLockFile()) { | 580 | if(!_pppdata->modemLockFile()) { |
576 | odebug << "The user doesn't want a lockfile." << oendl; | 581 | odebug << "The user doesn't want a lockfile." << oendl; |
577 | return 0; | 582 | return 0; |
578 | } | 583 | } |
579 | 584 | ||
580 | if (modem_is_locked) | 585 | if (modem_is_locked) |
581 | return 1; | 586 | return 1; |
582 | 587 | ||
583 | QString lockfile = LOCK_DIR"/LCK.."; | 588 | QString lockfile = LOCK_DIR"/LCK.."; |
584 | lockfile += _pppdata->modemDevice().mid(5); // append everything after /dev/ | 589 | lockfile += _pppdata->modemDevice().mid(5); // append everything after /dev/ |
585 | 590 | ||
586 | if(access(QFile::encodeName(lockfile), F_OK) == 0) { | 591 | if(access(QFile::encodeName(lockfile), F_OK) == 0) { |
587 | // if ((fd = Requester::rq-> | 592 | // if ((fd = Requester::rq-> |
588 | if ((fd = openLockfile(QFile::encodeName(lockfile), O_RDONLY)) >= 0) { | 593 | if ((fd = openLockfile(QFile::encodeName(lockfile), O_RDONLY)) >= 0) { |
589 | // 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 |
590 | // file has more than 32 bytes, skip the rest | 595 | // file has more than 32 bytes, skip the rest |
591 | char oldlock[33]; // safe | 596 | char oldlock[33]; // safe |
592 | int sz = read(fd, &oldlock, 32); | 597 | int sz = read(fd, &oldlock, 32); |
593 | close (fd); | 598 | close (fd); |
594 | if (sz <= 0) | 599 | if (sz <= 0) |
595 | return 1; | 600 | return 1; |
596 | oldlock[sz] = '\0'; | 601 | oldlock[sz] = '\0'; |
597 | 602 | ||
598 | odebug << "Device is locked by: " << oldlock << "" << oendl; | 603 | odebug << "Device is locked by: " << oldlock << "" << oendl; |
599 | 604 | ||
600 | int oldpid; | 605 | int oldpid; |
601 | int match = sscanf(oldlock, "%d", &oldpid); | 606 | int match = sscanf(oldlock, "%d", &oldpid); |
602 | 607 | ||
603 | // found a pid in lockfile ? | 608 | // found a pid in lockfile ? |
604 | if (match < 1 || oldpid <= 0) | 609 | if (match < 1 || oldpid <= 0) |
605 | return 1; | 610 | return 1; |
606 | 611 | ||
607 | // check if process exists | 612 | // check if process exists |
608 | if (kill((pid_t)oldpid, 0) == 0 || errno != ESRCH) | 613 | if (kill((pid_t)oldpid, 0) == 0 || errno != ESRCH) |
609 | return 1; | 614 | return 1; |
610 | 615 | ||
611 | odebug << "lockfile is stale" << oendl; | 616 | odebug << "lockfile is stale" << oendl; |
612 | } | 617 | } |
613 | } | 618 | } |
614 | 619 | ||
615 | fd = openLockfile(_pppdata->modemDevice(),O_WRONLY|O_TRUNC|O_CREAT); | 620 | fd = openLockfile(_pppdata->modemDevice(),O_WRONLY|O_TRUNC|O_CREAT); |
616 | if(fd >= 0) { | 621 | if(fd >= 0) { |
617 | sprintf(newlock,"%010d\n", getpid()); | 622 | sprintf(newlock,"%010d\n", getpid()); |
618 | odebug << "Locking Device: " << newlock << "" << oendl; | 623 | odebug << "Locking Device: " << newlock << "" << oendl; |
619 | 624 | ||
620 | write(fd, newlock, strlen(newlock)); | 625 | write(fd, newlock, strlen(newlock)); |
621 | close(fd); | 626 | close(fd); |
622 | modem_is_locked=true; | 627 | modem_is_locked=true; |
623 | 628 | ||
624 | return 0; | 629 | return 0; |
625 | } | 630 | } |
626 | 631 | ||
627 | return -1; | 632 | return -1; |
628 | 633 | ||
629 | } | 634 | } |
630 | 635 | ||
631 | 636 | ||
632 | // UnLock modem device | 637 | // UnLock modem device |
633 | void Modem::unlockdevice() { | 638 | void Modem::unlockdevice() { |
634 | if (modem_is_locked) { | 639 | if (modem_is_locked) { |
635 | odebug << "UnLocking Modem Device" << oendl; | 640 | odebug << "UnLocking Modem Device" << oendl; |
636 | close(modemfd); | 641 | close(modemfd); |
637 | modemfd = -1; | 642 | modemfd = -1; |
638 | unlink(lockfile); | 643 | unlink(lockfile); |
639 | lockfile[0] = '\0'; | 644 | lockfile[0] = '\0'; |
640 | modem_is_locked=false; | 645 | modem_is_locked=false; |
641 | } | 646 | } |
642 | } | 647 | } |
643 | 648 | ||
644 | int Modem::openLockfile( QString lockfile, int flags) | 649 | int Modem::openLockfile( QString lockfile, int flags) |
645 | { | 650 | { |
646 | int fd; | 651 | int fd; |
647 | int mode; | 652 | int mode; |
648 | flags = O_RDONLY; | 653 | flags = O_RDONLY; |
649 | if(flags == O_WRONLY|O_TRUNC|O_CREAT) | 654 | if(flags == O_WRONLY|O_TRUNC|O_CREAT) |
650 | mode = 0644; | 655 | mode = 0644; |
651 | else | 656 | else |
652 | mode = 0; | 657 | mode = 0; |
653 | 658 | ||
654 | lockfile = LOCK_DIR; | 659 | lockfile = LOCK_DIR; |
655 | lockfile += "/LCK.."; | 660 | lockfile += "/LCK.."; |
656 | lockfile += device.right( device.length() - device.findRev("/") -1 ); | 661 | lockfile += device.right( device.length() - device.findRev("/") -1 ); |
657 | odebug << "lockfile >" << lockfile.latin1() << "<" << oendl; | 662 | odebug << "lockfile >" << lockfile.latin1() << "<" << oendl; |
658 | // TODO: | 663 | // TODO: |
659 | // struct stat st; | 664 | // struct stat st; |
660 | // if(stat(lockfile.data(), &st) == -1) { | 665 | // if(stat(lockfile.data(), &st) == -1) { |
661 | // if(errno == EBADF) | 666 | // if(errno == EBADF) |
662 | // return -1; | 667 | // return -1; |
663 | // } else { | 668 | // } else { |
664 | // // make sure that this is a regular file | 669 | // // make sure that this is a regular file |
665 | // if(!S_ISREG(st.st_mode)) | 670 | // if(!S_ISREG(st.st_mode)) |
666 | // return -1; | 671 | // return -1; |
667 | // } | 672 | // } |
668 | if ((fd = open(lockfile, flags, mode)) == -1) { | 673 | if ((fd = open(lockfile, flags, mode)) == -1) { |
669 | odebug << "error opening lockfile!" << oendl; | 674 | odebug << "error opening lockfile!" << oendl; |
670 | lockfile = QString::null; | 675 | lockfile = QString::null; |
671 | fd = open(DEVNULL, O_RDONLY); | 676 | fd = open(DEVNULL, O_RDONLY); |
672 | } else | 677 | } else |
673 | fchown(fd, 0, 0); | 678 | fchown(fd, 0, 0); |
674 | return fd; | 679 | return fd; |
675 | } | 680 | } |
676 | 681 | ||
677 | 682 | ||
678 | 683 | ||
679 | void alarm_handler(int) { | 684 | void alarm_handler(int) { |
680 | // fprintf(stderr, "alarm_handler(): Received SIGALRM\n"); | 685 | // fprintf(stderr, "alarm_handler(): Received SIGALRM\n"); |
681 | 686 | ||
682 | // jump | 687 | // jump |
683 | siglongjmp(jmp_buffer, 1); | 688 | siglongjmp(jmp_buffer, 1); |
684 | } | 689 | } |
685 | 690 | ||
686 | 691 | ||
687 | const char* Modem::authFile(Auth method, int version) { | 692 | const char* Modem::authFile(Auth method, int version) { |
688 | switch(method|version) { | 693 | switch(method|version) { |
689 | case PAP|Original: | 694 | case PAP|Original: |
690 | return PAP_AUTH_FILE; | 695 | return PAP_AUTH_FILE; |
691 | break; | 696 | break; |
692 | case PAP|New: | 697 | case PAP|New: |
693 | return PAP_AUTH_FILE".new"; | 698 | return PAP_AUTH_FILE".new"; |
694 | break; | 699 | break; |
695 | case PAP|Old: | 700 | case PAP|Old: |
696 | return PAP_AUTH_FILE".old"; | 701 | return PAP_AUTH_FILE".old"; |
697 | break; | 702 | break; |
698 | case CHAP|Original: | 703 | case CHAP|Original: |
699 | return CHAP_AUTH_FILE; | 704 | return CHAP_AUTH_FILE; |
700 | break; | 705 | break; |
701 | case CHAP|New: | 706 | case CHAP|New: |
702 | return CHAP_AUTH_FILE".new"; | 707 | return CHAP_AUTH_FILE".new"; |
703 | break; | 708 | break; |
704 | case CHAP|Old: | 709 | case CHAP|Old: |
705 | return CHAP_AUTH_FILE".old"; | 710 | return CHAP_AUTH_FILE".old"; |
706 | break; | 711 | break; |
707 | default: | 712 | default: |
708 | return 0L; | 713 | return 0L; |
709 | } | 714 | } |
710 | } | 715 | } |
711 | 716 | ||
712 | 717 | ||
713 | bool Modem::createAuthFile(Auth method, const char *username, const char *password) { | 718 | bool Modem::createAuthFile(Auth method, const char *username, const char *password) { |
714 | const char *authfile, *oldName, *newName; | 719 | const char *authfile, *oldName, *newName; |
715 | char line[100]; | 720 | char line[100]; |
716 | char regexp[2*MaxStrLen+30]; | 721 | char regexp[2*MaxStrLen+30]; |
717 | regex_t preg; | 722 | regex_t preg; |
718 | 723 | ||
719 | if(!(authfile = authFile(method))) | 724 | if(!(authfile = authFile(method))) |
720 | return false; | 725 | return false; |
721 | 726 | ||
722 | if(!(newName = authFile(method, New))) | 727 | if(!(newName = authFile(method, New))) |
723 | return false; | 728 | return false; |
724 | 729 | ||
725 | // look for username, "username" or 'username' | 730 | // look for username, "username" or 'username' |
726 | // if you modify this RE you have to adapt regexp's size above | 731 | // if you modify this RE you have to adapt regexp's size above |
727 | snprintf(regexp, sizeof(regexp), "^[ \t]*%s[ \t]\\|^[ \t]*[\"\']%s[\"\']", | 732 | snprintf(regexp, sizeof(regexp), "^[ \t]*%s[ \t]\\|^[ \t]*[\"\']%s[\"\']", |
728 | username,username); | 733 | username,username); |
729 | MY_ASSERT(regcomp(&preg, regexp, 0) == 0); | 734 | MY_ASSERT(regcomp(&preg, regexp, 0) == 0); |
730 | 735 | ||
731 | // copy to new file pap- or chap-secrets | 736 | // copy to new file pap- or chap-secrets |
732 | int old_umask = umask(0077); | 737 | int old_umask = umask(0077); |
733 | FILE *fout = fopen(newName, "w"); | 738 | FILE *fout = fopen(newName, "w"); |
734 | if(fout) { | 739 | if(fout) { |
735 | // copy old file | 740 | // copy old file |
736 | FILE *fin = fopen(authfile, "r"); | 741 | FILE *fin = fopen(authfile, "r"); |
737 | if(fin) { | 742 | if(fin) { |
738 | while(fgets(line, sizeof(line), fin)) { | 743 | while(fgets(line, sizeof(line), fin)) { |
739 | if(regexec(&preg, line, 0, 0L, 0) == 0) | 744 | if(regexec(&preg, line, 0, 0L, 0) == 0) |
740 | continue; | 745 | continue; |
741 | fputs(line, fout); | 746 | fputs(line, fout); |
742 | } | 747 | } |
743 | fclose(fin); | 748 | fclose(fin); |
744 | } | 749 | } |
745 | 750 | ||
746 | // append user/pass pair | 751 | // append user/pass pair |
747 | fprintf(fout, "\"%s\"\t*\t\"%s\"\n", username, password); | 752 | fprintf(fout, "\"%s\"\t*\t\"%s\"\n", username, password); |
748 | fclose(fout); | 753 | fclose(fout); |
749 | } | 754 | } |
750 | 755 | ||
751 | // restore umask | 756 | // restore umask |
752 | umask(old_umask); | 757 | umask(old_umask); |
753 | 758 | ||
754 | // free memory allocated by regcomp | 759 | // free memory allocated by regcomp |
755 | regfree(&preg); | 760 | regfree(&preg); |
756 | 761 | ||
757 | if(!(oldName = authFile(method, Old))) | 762 | if(!(oldName = authFile(method, Old))) |
758 | return false; | 763 | return false; |
759 | 764 | ||
760 | // delete old file if any | 765 | // delete old file if any |
761 | unlink(oldName); | 766 | unlink(oldName); |
762 | 767 | ||
763 | rename(authfile, oldName); | 768 | rename(authfile, oldName); |
764 | rename(newName, authfile); | 769 | rename(newName, authfile); |
765 | 770 | ||
766 | return true; | 771 | return true; |
767 | } | 772 | } |
768 | 773 | ||
769 | 774 | ||
770 | bool Modem::removeAuthFile(Auth method) { | 775 | bool Modem::removeAuthFile(Auth method) { |
771 | const char *authfile, *oldName; | 776 | const char *authfile, *oldName; |
772 | 777 | ||
773 | if(!(authfile = authFile(method))) | 778 | if(!(authfile = authFile(method))) |
774 | return false; | 779 | return false; |
775 | if(!(oldName = authFile(method, Old))) | 780 | if(!(oldName = authFile(method, Old))) |
776 | return false; | 781 | return false; |
777 | 782 | ||
778 | if(access(oldName, F_OK) == 0) { | 783 | if(access(oldName, F_OK) == 0) { |
779 | unlink(authfile); | 784 | unlink(authfile); |
780 | return (rename(oldName, authfile) == 0); | 785 | return (rename(oldName, authfile) == 0); |
781 | } else | 786 | } else |
782 | return false; | 787 | return false; |
783 | } | 788 | } |
784 | 789 | ||
785 | 790 | ||
786 | bool Modem::setSecret(int method, const char* name, const char* password) | 791 | bool Modem::setSecret(int method, const char* name, const char* password) |
787 | { | 792 | { |
788 | 793 | ||
789 | Auth auth; | 794 | Auth auth; |
790 | if(method == AUTH_PAPCHAP) | 795 | if(method == AUTH_PAPCHAP) |
791 | return setSecret(AUTH_PAP, name, password) && | 796 | return setSecret(AUTH_PAP, name, password) && |
792 | setSecret(AUTH_CHAP, name, password); | 797 | setSecret(AUTH_CHAP, name, password); |
793 | 798 | ||
794 | switch(method) { | 799 | switch(method) { |
795 | case AUTH_PAP: | 800 | case AUTH_PAP: |
796 | auth = Modem::PAP; | 801 | auth = Modem::PAP; |
797 | break; | 802 | break; |
798 | case AUTH_CHAP: | 803 | case AUTH_CHAP: |
799 | auth = Modem::CHAP; | 804 | auth = Modem::CHAP; |
800 | break; | 805 | break; |
801 | default: | 806 | default: |
802 | return false; | 807 | return false; |
803 | } | 808 | } |
804 | 809 | ||
805 | return createAuthFile(auth, name, password); | 810 | return createAuthFile(auth, name, password); |
806 | 811 | ||
807 | } | 812 | } |
808 | 813 | ||
809 | bool Modem::removeSecret(int method) | 814 | bool Modem::removeSecret(int method) |
810 | { | 815 | { |
811 | Auth auth; | 816 | Auth auth; |
812 | 817 | ||
813 | switch(method) { | 818 | switch(method) { |
814 | case AUTH_PAP: | 819 | case AUTH_PAP: |
815 | auth = Modem::PAP; | 820 | auth = Modem::PAP; |
816 | break; | 821 | break; |
817 | case AUTH_CHAP: | 822 | case AUTH_CHAP: |
818 | auth = Modem::CHAP; | 823 | auth = Modem::CHAP; |
819 | break; | 824 | break; |
820 | default: | 825 | default: |
821 | return false; | 826 | return false; |
822 | } | 827 | } |
823 | return removeAuthFile( auth ); | 828 | return removeAuthFile( auth ); |
824 | } | 829 | } |
825 | 830 | ||
826 | int checkForInterface() | 831 | int checkForInterface() |
827 | { | 832 | { |
828 | // I don't know if Linux needs more initialization to get the ioctl to | 833 | // I don't know if Linux needs more initialization to get the ioctl to |
829 | // work, pppd seems to hint it does. But BSD doesn't, and the following | 834 | // work, pppd seems to hint it does. But BSD doesn't, and the following |
830 | // code should compile. | 835 | // code should compile. |
831 | #if (defined(HAVE_NET_IF_PPP_H) || defined(HAVE_LINUX_IF_PPP_H)) && !defined(__svr4__) | 836 | #if (defined(HAVE_NET_IF_PPP_H) || defined(HAVE_LINUX_IF_PPP_H)) && !defined(__svr4__) |
832 | int s, ok; | 837 | int s, ok; |
833 | struct ifreq ifr; | 838 | struct ifreq ifr; |
834 | // extern char *no_ppp_msg; | 839 | // extern char *no_ppp_msg; |
835 | 840 | ||
836 | if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) | 841 | if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) |
837 | return 1; /* can't tell */ | 842 | return 1; /* can't tell */ |
838 | 843 | ||
839 | strlcpy(ifr.ifr_name, "ppp0", sizeof (ifr.ifr_name)); | 844 | strlcpy(ifr.ifr_name, "ppp0", sizeof (ifr.ifr_name)); |
840 | ok = ioctl(s, SIOCGIFFLAGS, (caddr_t) &ifr) >= 0; | 845 | ok = ioctl(s, SIOCGIFFLAGS, (caddr_t) &ifr) >= 0; |
841 | close(s); | 846 | close(s); |
842 | 847 | ||
843 | if (ok == -1) { | 848 | if (ok == -1) { |
844 | // This is ifdef'd FreeBSD, because FreeBSD is the only BSD that supports | 849 | // This is ifdef'd FreeBSD, because FreeBSD is the only BSD that supports |
845 | // KLDs, the old LKM interface couldn't handle loading devices | 850 | // KLDs, the old LKM interface couldn't handle loading devices |
846 | // dynamically, and thus can't load ppp support on the fly | 851 | // dynamically, and thus can't load ppp support on the fly |
847 | #ifdef __FreeBSD__ | 852 | #ifdef __FreeBSD__ |
848 | // If we failed to load ppp support and don't have it already. | 853 | // If we failed to load ppp support and don't have it already. |
849 | if (kldload("if_ppp") == -1) { | 854 | if (kldload("if_ppp") == -1) { |
850 | return -1; | 855 | return -1; |
851 | } | 856 | } |
852 | return 0; | 857 | return 0; |
853 | #else | 858 | #else |
854 | return -1; | 859 | return -1; |
855 | #endif | 860 | #endif |
856 | } | 861 | } |
857 | return 0; | 862 | return 0; |
858 | #else | 863 | #else |
859 | // We attempt to use the SunOS/SysVr4 method and stat /dev/ppp | 864 | // We attempt to use the SunOS/SysVr4 method and stat /dev/ppp |
860 | struct stat buf; | 865 | struct stat buf; |
861 | 866 | ||
862 | memset(&buf, 0, sizeof(buf)); | 867 | memset(&buf, 0, sizeof(buf)); |
863 | return stat("/dev/ppp", &buf); | 868 | return stat("/dev/ppp", &buf); |
864 | #endif | 869 | #endif |
865 | } | 870 | } |
866 | 871 | ||
867 | bool Modem::execpppd(const char *arguments) { | 872 | bool Modem::execpppd(const char *arguments) { |
868 | char buf[MAX_CMDLEN]; | 873 | char buf[MAX_CMDLEN]; |
869 | char *args[MaxArgs]; | 874 | char *args[MaxArgs]; |
870 | pid_t pgrpid; | 875 | pid_t pgrpid; |
871 | 876 | ||
872 | if(modemfd<0) | 877 | if(modemfd<0) |
873 | return false; | 878 | return false; |
874 | 879 | ||
875 | _pppdExitStatus = -1; | 880 | _pppdExitStatus = -1; |
876 | 881 | ||
877 | (void)::pipe( m_pppdLOG ); | 882 | (void)::pipe( m_pppdLOG ); |
878 | 883 | ||
879 | switch(pppdPid = fork()) | 884 | switch(pppdPid = fork()) |
880 | { | 885 | { |
881 | case -1: | 886 | case -1: |
882 | fprintf(stderr,"In parent: fork() failed\n"); | 887 | fprintf(stderr,"In parent: fork() failed\n"); |
883 | ::close( m_pppdLOG[0] ); | 888 | ::close( m_pppdLOG[0] ); |
884 | ::close( m_pppdLOG[1] ); | 889 | ::close( m_pppdLOG[1] ); |
885 | return false; | 890 | return false; |
886 | break; | 891 | break; |
887 | 892 | ||
888 | case 0: | 893 | case 0: |
889 | // 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 |
890 | // 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 |
891 | strlcpy(buf, arguments); | 896 | strlcpy(buf, arguments); |
892 | parseargs(buf, args); | 897 | parseargs(buf, args); |
893 | // become a session leader and let /dev/ttySx | 898 | // become a session leader and let /dev/ttySx |
894 | // be the controlling terminal. | 899 | // be the controlling terminal. |
895 | pgrpid = setsid(); | 900 | pgrpid = setsid(); |
896 | #ifdef TIOCSCTTY | 901 | #ifdef TIOCSCTTY |
897 | if(ioctl(modemfd, TIOCSCTTY, 0)<0) | 902 | if(ioctl(modemfd, TIOCSCTTY, 0)<0) |
898 | fprintf(stderr, "ioctl() failed.\n"); | 903 | fprintf(stderr, "ioctl() failed.\n"); |
899 | #elif defined (TIOCSPGRP) | 904 | #elif defined (TIOCSPGRP) |
900 | if(ioctl(modemfd, TIOCSPGRP, &pgrpid)<0) | 905 | if(ioctl(modemfd, TIOCSPGRP, &pgrpid)<0) |
901 | fprintf(stderr, "ioctl() failed.\n"); | 906 | fprintf(stderr, "ioctl() failed.\n"); |
902 | #endif | 907 | #endif |
903 | if(tcsetpgrp(modemfd, pgrpid)<0) | 908 | if(tcsetpgrp(modemfd, pgrpid)<0) |
904 | fprintf(stderr, "tcsetpgrp() failed.\n"); | 909 | fprintf(stderr, "tcsetpgrp() failed.\n"); |
905 | 910 | ||
906 | ::close( m_pppdLOG[0] ); | 911 | ::close( m_pppdLOG[0] ); |
907 | ::setenv( "LANG", "C", 1 ); // overwrite | 912 | ::setenv( "LANG", "C", 1 ); // overwrite |
908 | dup2(m_pppdLOG[1], 11 ); // for logfd 11 | 913 | dup2(m_pppdLOG[1], 11 ); // for logfd 11 |
909 | dup2(modemfd, 0); | 914 | dup2(modemfd, 0); |
910 | dup2(modemfd, 1); | 915 | dup2(modemfd, 1); |
911 | 916 | ||
912 | 917 | ||
913 | switch (checkForInterface()) { | 918 | switch (checkForInterface()) { |
914 | case 1: | 919 | case 1: |
915 | fprintf(stderr, "Cannot determine if kernel supports ppp.\n"); | 920 | fprintf(stderr, "Cannot determine if kernel supports ppp.\n"); |
916 | break; | 921 | break; |
917 | case -1: | 922 | case -1: |
918 | fprintf(stderr, "Kernel does not support ppp, oops.\n"); | 923 | fprintf(stderr, "Kernel does not support ppp, oops.\n"); |
919 | break; | 924 | break; |
920 | case 0: | 925 | case 0: |
921 | fprintf(stderr, "Kernel supports ppp alright.\n"); | 926 | fprintf(stderr, "Kernel supports ppp alright.\n"); |
922 | break; | 927 | break; |
923 | } | 928 | } |
924 | 929 | ||
925 | execve(pppdPath(), args, 0L); | 930 | execve(pppdPath(), args, 0L); |
926 | _exit(0); | 931 | _exit(0); |
927 | break; | 932 | break; |
928 | 933 | ||
929 | default: | 934 | default: |
930 | odebug << "In parent: pppd pid " << pppdPid << "\n" << oendl; | 935 | odebug << "In parent: pppd pid " << pppdPid << "\n" << oendl; |
931 | close(modemfd); | 936 | close(modemfd); |
932 | 937 | ||
933 | ::close( m_pppdLOG[1] ); | 938 | ::close( m_pppdLOG[1] ); |
934 | // set it to nonblocking io | 939 | // set it to nonblocking io |
935 | int flag = ::fcntl( m_pppdLOG[0], F_GETFL ); | 940 | int flag = ::fcntl( m_pppdLOG[0], F_GETFL ); |
936 | 941 | ||
937 | if ( !(flag & O_NONBLOCK) ) { | 942 | if ( !(flag & O_NONBLOCK) ) { |
938 | odebug << "Setting nonblocking io" << oendl; | 943 | odebug << "Setting nonblocking io" << oendl; |
939 | flag |= O_NONBLOCK; | 944 | flag |= O_NONBLOCK; |
940 | ::fcntl(m_pppdLOG[0], F_SETFL, flag ); | 945 | ::fcntl(m_pppdLOG[0], F_SETFL, flag ); |
941 | } | 946 | } |
942 | 947 | ||
943 | delete m_modemDebug; | 948 | delete m_modemDebug; |
944 | m_modemDebug = new QSocketNotifier(m_pppdLOG[0], QSocketNotifier::Read, this ); | 949 | m_modemDebug = new QSocketNotifier(m_pppdLOG[0], QSocketNotifier::Read, this ); |
945 | connect(m_modemDebug, SIGNAL(activated(int) ), | 950 | connect(m_modemDebug, SIGNAL(activated(int) ), |
946 | this, SLOT(slotModemDebug(int) ) ); | 951 | this, SLOT(slotModemDebug(int) ) ); |
947 | 952 | ||
948 | modemfd = -1; | 953 | modemfd = -1; |
949 | m_pppdDev = QString::fromLatin1("ppp0"); | 954 | m_pppdDev = QString::fromLatin1("ppp0"); |
950 | return true; | 955 | return true; |
951 | break; | 956 | break; |
952 | } | 957 | } |
953 | } | 958 | } |
954 | 959 | ||
955 | 960 | ||
956 | bool Modem::killpppd() { | 961 | bool Modem::killpppd() { |
957 | odebug << "In killpppd and pid is " << pppdPid << "" << oendl; | 962 | odebug << "In killpppd and pid is " << pppdPid << "" << oendl; |
958 | if(pppdPid > 0) { | 963 | if(pppdPid > 0) { |
959 | delete m_modemDebug; | 964 | delete m_modemDebug; |
960 | m_modemDebug = 0; | 965 | m_modemDebug = 0; |
961 | odebug << "In killpppd(): Sending SIGTERM to " << pppdPid << "\n" << oendl; | 966 | odebug << "In killpppd(): Sending SIGTERM to " << pppdPid << "\n" << oendl; |
962 | if(kill(pppdPid, SIGTERM) < 0) { | 967 | if(kill(pppdPid, SIGTERM) < 0) { |
963 | odebug << "Error terminating " << pppdPid << ". Sending SIGKILL\n" << oendl; | 968 | odebug << "Error terminating " << pppdPid << ". Sending SIGKILL\n" << oendl; |
964 | if(kill(pppdPid, SIGKILL) < 0) { | 969 | if(kill(pppdPid, SIGKILL) < 0) { |
965 | odebug << "Error killing " << pppdPid << "\n" << oendl; | 970 | odebug << "Error killing " << pppdPid << "\n" << oendl; |
966 | return false; | 971 | return false; |
967 | } | 972 | } |
968 | } | 973 | } |
969 | } | 974 | } |
970 | return true; | 975 | return true; |
971 | } | 976 | } |
972 | 977 | ||
973 | 978 | ||
974 | void Modem::parseargs(char* buf, char** args) { | 979 | void Modem::parseargs(char* buf, char** args) { |
975 | int nargs = 0; | 980 | int nargs = 0; |
976 | int quotes; | 981 | int quotes; |
977 | 982 | ||
978 | while(nargs < MaxArgs-1 && *buf != '\0') { | 983 | while(nargs < MaxArgs-1 && *buf != '\0') { |
979 | 984 | ||
980 | quotes = 0; | 985 | quotes = 0; |
981 | 986 | ||
982 | // Strip whitespace. Use nulls, so that the previous argument is | 987 | // Strip whitespace. Use nulls, so that the previous argument is |
983 | // terminated automatically. | 988 | // terminated automatically. |
984 | 989 | ||
985 | while ((*buf == ' ' ) || (*buf == '\t' ) || (*buf == '\n' ) ) | 990 | while ((*buf == ' ' ) || (*buf == '\t' ) || (*buf == '\n' ) ) |
986 | *buf++ = '\0'; | 991 | *buf++ = '\0'; |
987 | 992 | ||
988 | // detect begin of quoted argument | 993 | // detect begin of quoted argument |
989 | if (*buf == '"' || *buf == '\'') { | 994 | if (*buf == '"' || *buf == '\'') { |
990 | quotes = *buf; | 995 | quotes = *buf; |
991 | *buf++ = '\0'; | 996 | *buf++ = '\0'; |
992 | } | 997 | } |
993 | 998 | ||
994 | // save the argument | 999 | // save the argument |
995 | if(*buf != '\0') { | 1000 | if(*buf != '\0') { |
996 | *args++ = buf; | 1001 | *args++ = buf; |
997 | nargs++; | 1002 | nargs++; |
998 | } | 1003 | } |
999 | 1004 | ||
1000 | if (!quotes) | 1005 | if (!quotes) |
1001 | while ((*buf != '\0') && (*buf != '\n') && | 1006 | while ((*buf != '\0') && (*buf != '\n') && |
1002 | (*buf != '\t') && (*buf != ' ')) | 1007 | (*buf != '\t') && (*buf != ' ')) |
1003 | buf++; | 1008 | buf++; |
1004 | else { | 1009 | else { |
1005 | while ((*buf != '\0') && (*buf != quotes)) | 1010 | while ((*buf != '\0') && (*buf != quotes)) |
1006 | buf++; | 1011 | buf++; |
1007 | *buf++ = '\0'; | 1012 | *buf++ = '\0'; |
1008 | } | 1013 | } |
1009 | } | 1014 | } |
1010 | 1015 | ||
1011 | *args = 0L; | 1016 | *args = 0L; |
1012 | } | 1017 | } |
1013 | 1018 | ||
1014 | bool Modem::execPPPDaemon(const QString & arguments) | 1019 | bool Modem::execPPPDaemon(const QString & arguments) |
1015 | { | 1020 | { |
1016 | if(execpppd(arguments)) { | 1021 | if(execpppd(arguments)) { |
1017 | _pppdata->setpppdRunning(true); | 1022 | _pppdata->setpppdRunning(true); |
1018 | return true; | 1023 | return true; |
1019 | } else | 1024 | } else |
1020 | return false; | 1025 | return false; |
1021 | } | 1026 | } |
1022 | 1027 | ||
1023 | void Modem::killPPPDaemon() | 1028 | void Modem::killPPPDaemon() |
1024 | { | 1029 | { |
1025 | _pppdata->setpppdRunning(false); | 1030 | _pppdata->setpppdRunning(false); |
1026 | killpppd(); | 1031 | killpppd(); |
1027 | } | 1032 | } |
1028 | 1033 | ||
1029 | int Modem::pppdExitStatus() | 1034 | int Modem::pppdExitStatus() |
1030 | { | 1035 | { |
1031 | return _pppdExitStatus; | 1036 | return _pppdExitStatus; |
1032 | } | 1037 | } |
1033 | 1038 | ||
1034 | int Modem::openResolv(int flags) | 1039 | int Modem::openResolv(int flags) |
1035 | { | 1040 | { |
1036 | int fd; | 1041 | int fd; |
1037 | if ((fd = open(_PATH_RESCONF, flags)) == -1) { | 1042 | if ((fd = open(_PATH_RESCONF, flags)) == -1) { |
1038 | odebug << "error opening resolv.conf!" << oendl; | 1043 | odebug << "error opening resolv.conf!" << oendl; |
1039 | fd = open(DEVNULL, O_RDONLY); | 1044 | fd = open(DEVNULL, O_RDONLY); |
1040 | } | 1045 | } |
1041 | return fd; | 1046 | return fd; |
1042 | } | 1047 | } |
1043 | 1048 | ||
1044 | bool Modem::setHostname(const QString & name) | 1049 | bool Modem::setHostname(const QString & name) |
1045 | { | 1050 | { |
1046 | return sethostname(name, name.length()) == 0; | 1051 | return sethostname(name, name.length()) == 0; |
1047 | } | 1052 | } |
1048 | 1053 | ||
1049 | QString Modem::pppDevice()const { | 1054 | QString Modem::pppDevice()const { |
1050 | return m_pppdDev; | 1055 | return m_pppdDev; |
1051 | } | 1056 | } |
1052 | void Modem::setPPPDevice( const QString& dev ) { | 1057 | void Modem::setPPPDevice( const QString& dev ) { |
1053 | m_pppdDev = dev; | 1058 | m_pppdDev = dev; |
1054 | } | 1059 | } |
1055 | pid_t Modem::pppPID()const { | 1060 | pid_t Modem::pppPID()const { |
1056 | return pppdPid; | 1061 | return pppdPid; |
1057 | } | 1062 | } |
1058 | void Modem::setPPPDPid( pid_t pid ) { | 1063 | void Modem::setPPPDPid( pid_t pid ) { |
1059 | odebug << "Modem setting pid" << oendl; | 1064 | odebug << "Modem setting pid" << oendl; |
1060 | _pppdExitStatus = -1; | 1065 | _pppdExitStatus = -1; |
1061 | pppdPid = pid; | 1066 | pppdPid = pid; |
1062 | modemfd = -1; | 1067 | modemfd = -1; |
1063 | } | 1068 | } |
1064 | void Modem::slotModemDebug(int fd) { | 1069 | void Modem::slotModemDebug(int fd) { |
1065 | char buf[2049]; | 1070 | char buf[2049]; |
1066 | int len; | 1071 | int len; |
1067 | 1072 | ||
1068 | // read in pppd data look for Using interface | 1073 | // read in pppd data look for Using interface |
1069 | // then read the interface | 1074 | // then read the interface |
1070 | // we limit to 10 device now 0-9 | 1075 | // we limit to 10 device now 0-9 |
1071 | if((len = ::read(fd, buf, 2048)) > 0) { | 1076 | if((len = ::read(fd, buf, 2048)) > 0) { |
1072 | buf[len+1] = '\0'; | 1077 | buf[len+1] = '\0'; |
1073 | char *found; | 1078 | char *found; |
1074 | if ( (found = ::strstr(buf, "Using interface ") ) ) { | 1079 | if ( (found = ::strstr(buf, "Using interface ") ) ) { |
1075 | found += 16; | 1080 | found += 16; |
1076 | m_pppdDev = QString::fromLatin1(found, 5 ); | 1081 | m_pppdDev = QString::fromLatin1(found, 5 ); |
1077 | m_pppdDev = m_pppdDev.simplifyWhiteSpace(); | 1082 | m_pppdDev = m_pppdDev.simplifyWhiteSpace(); |
1078 | } | 1083 | } |
1079 | } | 1084 | } |
1080 | } | 1085 | } |
diff --git a/noncore/settings/networksettings/ppp/ppp.pro b/noncore/settings/networksettings/ppp/ppp.pro index 62ca2b5..45fa0ee 100644 --- a/noncore/settings/networksettings/ppp/ppp.pro +++ b/noncore/settings/networksettings/ppp/ppp.pro | |||
@@ -1,17 +1,14 @@ | |||
1 | #TEMPLATE = app | ||
2 | # | ||
3 | TEMPLATE = lib | 1 | TEMPLATE = lib |
4 | #CONFIG += qt plugin warn_on | ||
5 | CONFIG += qt plugin warn_on | 2 | CONFIG += qt plugin warn_on |
6 | DESTDIR = $(OPIEDIR)/plugins/networksettings | 3 | DESTDIR = $(OPIEDIR)/plugins/networksettings |
7 | HEADERS = pppmodule.h modem.h modeminfo.h pppdata.h kpppconfig.h pppdata.h runtests.h general.h modemcmds.h conwindow.h accounts.h connect.h edit.h scriptedit.h pppdargs.h iplined.h pwentry.h pppconfig.h interfaceinformationppp.h interfaceppp.h authwidget.h chooserwidget.h devices.h | 4 | HEADERS = pppmodule.h modem.h modeminfo.h pppdata.h kpppconfig.h pppdata.h runtests.h general.h modemcmds.h conwindow.h accounts.h connect.h edit.h scriptedit.h pppdargs.h iplined.h pwentry.h pppconfig.h interfaceinformationppp.h interfaceppp.h authwidget.h chooserwidget.h devices.h |
8 | SOURCES = pppmodule.cpp modem.cpp modeminfo.cpp pppdata.cpp runtests.cpp general.cpp modemcmds.cpp conwindow.cpp accounts.cpp connect.cpp edit.cpp scriptedit.cpp pppdargs.cpp iplined.cpp pwentry.cpp pppconfig.cpp interfaceinformationppp.cpp interfaceppp.cpp authwidget.cpp chooserwidget.cpp devices.cpp | 5 | SOURCES = pppmodule.cpp modem.cpp modeminfo.cpp pppdata.cpp runtests.cpp general.cpp modemcmds.cpp conwindow.cpp accounts.cpp connect.cpp edit.cpp scriptedit.cpp pppdargs.cpp iplined.cpp pwentry.cpp pppconfig.cpp interfaceinformationppp.cpp interfaceppp.cpp authwidget.cpp chooserwidget.cpp devices.cpp |
9 | INCLUDEPATH+= $(OPIEDIR)/include ../ ../interfaces/ | 6 | INCLUDEPATH+= $(OPIEDIR)/include ../ ../interfaces/ |
10 | DEPENDPATH+= $(OPIEDIR)/include | 7 | DEPENDPATH+= $(OPIEDIR)/include |
11 | LIBS += -lqpe -L../interfaces/ -linterfaces | 8 | LIBS += -lqpe -L../interfaces/ -linterfaces |
12 | TARGET = kppp | 9 | TARGET = kppp |
13 | VERSION = 1.0.0 | 10 | VERSION = 1.0.0 |
14 | 11 | ||
15 | 12 | ||
16 | 13 | ||
17 | include ( $(OPIEDIR)/include.pro ) | 14 | include ( $(OPIEDIR)/include.pro ) |
diff --git a/noncore/settings/networksettings/ppp/pppconfig.cpp b/noncore/settings/networksettings/ppp/pppconfig.cpp index a8c99fd..d2a1490 100644 --- a/noncore/settings/networksettings/ppp/pppconfig.cpp +++ b/noncore/settings/networksettings/ppp/pppconfig.cpp | |||
@@ -1,75 +1,79 @@ | |||
1 | |||
2 | #include <qlayout.h> | ||
3 | #include <qmessagebox.h> | ||
4 | #include <qtabwidget.h> | ||
5 | |||
6 | #include "accounts.h" | 1 | #include "accounts.h" |
7 | #include "devices.h" | 2 | #include "devices.h" |
8 | #include "general.h" | 3 | #include "general.h" |
9 | #include "interfaceppp.h" | 4 | #include "interfaceppp.h" |
10 | #include "modem.h" | 5 | #include "modem.h" |
11 | #include "pppconfig.h" | 6 | #include "pppconfig.h" |
12 | #include "pppdata.h" | 7 | #include "pppdata.h" |
13 | #include "runtests.h" | 8 | #include "runtests.h" |
14 | 9 | ||
10 | /* OPIE */ | ||
11 | #include <opie2/odebug.h> | ||
12 | using namespace Opie::Core; | ||
13 | |||
14 | /* QT */ | ||
15 | #include <qlayout.h> | ||
16 | #include <qmessagebox.h> | ||
17 | #include <qtabwidget.h> | ||
18 | |||
15 | PPPConfigWidget::PPPConfigWidget( InterfacePPP* iface, QWidget *parent, | 19 | PPPConfigWidget::PPPConfigWidget( InterfacePPP* iface, QWidget *parent, |
16 | const char *name, | 20 | const char *name, |
17 | bool modal, WFlags fl ) | 21 | bool modal, WFlags fl ) |
18 | : QDialog(parent, name, modal, fl) | 22 | : QDialog(parent, name, modal, fl) |
19 | { | 23 | { |
20 | setCaption(tr("Configure Modem")); | 24 | setCaption(tr("Configure Modem")); |
21 | int result = runTests(); | 25 | int result = runTests(); |
22 | if(result == TEST_CRITICAL){ | 26 | if(result == TEST_CRITICAL){ |
23 | QMessageBox::critical(0, tr("Modem failure"), tr("A critical failure appeard while testing the modem") ); | 27 | QMessageBox::critical(0, tr("Modem failure"), tr("A critical failure appeard while testing the modem") ); |
24 | return; | 28 | return; |
25 | } | 29 | } |
26 | 30 | ||
27 | interface = iface; | 31 | interface = iface; |
28 | odebug << "PPPConfigWidget::PPPConfigWidget" << oendl; | 32 | odebug << "PPPConfigWidget::PPPConfigWidget" << oendl; |
29 | odebug << " interface->getHardwareName >" << interface->getHardwareName().latin1() << "<" << oendl; | 33 | odebug << " interface->getHardwareName >" << interface->getHardwareName().latin1() << "<" << oendl; |
30 | 34 | ||
31 | odebug << " _pppdata->accname >" << interface->data()->accname().latin1() << "<" << oendl; | 35 | odebug << " _pppdata->accname >" << interface->data()->accname().latin1() << "<" << oendl; |
32 | 36 | ||
33 | 37 | ||
34 | QVBoxLayout *layout = new QVBoxLayout( this ); | 38 | QVBoxLayout *layout = new QVBoxLayout( this ); |
35 | layout->setSpacing( 0 ); | 39 | layout->setSpacing( 0 ); |
36 | layout->setMargin( 1 ); | 40 | layout->setMargin( 1 ); |
37 | tabWindow = new QTabWidget( this, "tabWidget" ); | 41 | tabWindow = new QTabWidget( this, "tabWidget" ); |
38 | layout->addWidget( tabWindow ); | 42 | layout->addWidget( tabWindow ); |
39 | 43 | ||
40 | accounts = new AccountWidget( interface->data(), tabWindow, "accounts", Qt::WStyle_ContextHelp ); | 44 | accounts = new AccountWidget( interface->data(), tabWindow, "accounts", Qt::WStyle_ContextHelp ); |
41 | tabWindow->addTab( accounts, tr("&Accounts") ); | 45 | tabWindow->addTab( accounts, tr("&Accounts") ); |
42 | devices = new DevicesWidget( interface, tabWindow, "devices", Qt::WStyle_ContextHelp ); | 46 | devices = new DevicesWidget( interface, tabWindow, "devices", Qt::WStyle_ContextHelp ); |
43 | tabWindow->addTab( devices, tr("&Devices") ); | 47 | tabWindow->addTab( devices, tr("&Devices") ); |
44 | 48 | ||
45 | //OLD: | 49 | //OLD: |
46 | // modem1 = new ModemWidget( interface, tabWindow, "modem1" ); | 50 | // modem1 = new ModemWidget( interface, tabWindow, "modem1" ); |
47 | // tabWindow->addTab( modem1, tr("&Device") ); | 51 | // tabWindow->addTab( modem1, tr("&Device") ); |
48 | // modem2 = new ModemWidget2( interface, tabWindow, "modem2" ); | 52 | // modem2 = new ModemWidget2( interface, tabWindow, "modem2" ); |
49 | // tabWindow->addTab( modem2, tr("&Modem") ); | 53 | // tabWindow->addTab( modem2, tr("&Modem") ); |
50 | 54 | ||
51 | } | 55 | } |
52 | 56 | ||
53 | 57 | ||
54 | PPPConfigWidget::~PPPConfigWidget() | 58 | PPPConfigWidget::~PPPConfigWidget() |
55 | { | 59 | { |
56 | 60 | ||
57 | } | 61 | } |
58 | 62 | ||
59 | void PPPConfigWidget::accept() | 63 | void PPPConfigWidget::accept() |
60 | { | 64 | { |
61 | odebug << "PPPConfigWidget::accept" << oendl; | 65 | odebug << "PPPConfigWidget::accept" << oendl; |
62 | odebug << " _pppdata->accname >" << interface->data()->accname().latin1() << "<" << oendl; | 66 | odebug << " _pppdata->accname >" << interface->data()->accname().latin1() << "<" << oendl; |
63 | odebug << " interface->getHardwareName >" << interface->getHardwareName().latin1() << "<" << oendl; | 67 | odebug << " interface->getHardwareName >" << interface->getHardwareName().latin1() << "<" << oendl; |
64 | interface->setInterfaceName( interface->data()->devname() ); | 68 | interface->setInterfaceName( interface->data()->devname() ); |
65 | interface->setHardwareName( interface->data()->accname() ); | 69 | interface->setHardwareName( interface->data()->accname() ); |
66 | interface->save(); | 70 | interface->save(); |
67 | QDialog::accept(); | 71 | QDialog::accept(); |
68 | } | 72 | } |
69 | 73 | ||
70 | 74 | ||
71 | void PPPConfigWidget::reject() | 75 | void PPPConfigWidget::reject() |
72 | { | 76 | { |
73 | interface->data()->cancel(); | 77 | interface->data()->cancel(); |
74 | QDialog::reject(); | 78 | QDialog::reject(); |
75 | } | 79 | } |
diff --git a/noncore/settings/networksettings/ppp/pppdata.cpp b/noncore/settings/networksettings/ppp/pppdata.cpp index 567ccf8..eb03ef4 100644 --- a/noncore/settings/networksettings/ppp/pppdata.cpp +++ b/noncore/settings/networksettings/ppp/pppdata.cpp | |||
@@ -1,1495 +1,1497 @@ | |||
1 | /* | 1 | /* |
2 | * kPPP: A pppd front end for the KDE project | 2 | * kPPP: A pppd front end for the KDE project |
3 | * | 3 | * |
4 | * $Id$ | 4 | * $Id$ |
5 | * | 5 | * |
6 | * Copyright (C) 1997 Bernd Johannes Wuebben | 6 | * Copyright (C) 1997 Bernd Johannes Wuebben |
7 | * wuebben@math.cornell.edu | 7 | * wuebben@math.cornell.edu |
8 | * | 8 | * |
9 | * based on EzPPP: | 9 | * based on EzPPP: |
10 | * Copyright (C) 1997 Jay Painter | 10 | * Copyright (C) 1997 Jay Painter |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or | 12 | * This program is free software; you can redistribute it and/or |
13 | * modify it under the terms of the GNU Library General Public | 13 | * modify it under the terms of the GNU Library General Public |
14 | * License as published by the Free Software Foundation; either | 14 | * License as published by the Free Software Foundation; either |
15 | * version 2 of the License, or (at your option) any later version. | 15 | * version 2 of the License, or (at your option) any later version. |
16 | * | 16 | * |
17 | * This program is distributed in the hope that it will be useful, | 17 | * This program is distributed in the hope that it will be useful, |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
20 | * Library General Public License for more details. | 20 | * Library General Public License for more details. |
21 | * | 21 | * |
22 | * You should have received a copy of the GNU Library General Public | 22 | * You should have received a copy of the GNU Library General Public |
23 | * License along with this program; if not, write to the Free | 23 | * License along with this program; if not, write to the Free |
24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #include "pppdata.h" | 27 | #include "pppdata.h" |
28 | #include "runtests.h" | 28 | #include "runtests.h" |
29 | //#include "devices.h" | 29 | |
30 | //#include <klocale.h> | 30 | /* OPIE */ |
31 | #include <opie2/odebug.h> | ||
31 | #include <qpe/config.h> | 32 | #include <qpe/config.h> |
33 | using namespace Opie::Core; | ||
34 | |||
35 | /* QT */ | ||
32 | #include <qmessagebox.h> | 36 | #include <qmessagebox.h> |
33 | #include <qapplication.h> | 37 | #include <qapplication.h> |
34 | // #include <klocale.h> | 38 | |
35 | // #include <kconfig.h> | 39 | /* STD */ |
36 | // #include <kmessagebox.h> | ||
37 | // #include <kapplication.h> | ||
38 | #include <assert.h> | 40 | #include <assert.h> |
39 | 41 | ||
40 | #define SEPARATOR -sseepp- | 42 | #define SEPARATOR -sseepp- |
41 | #define SEP QString("%1SEPARATOR%1") | 43 | #define SEP QString("%1SEPARATOR%1") |
42 | 44 | ||
43 | PPPData::PPPData() | 45 | PPPData::PPPData() |
44 | : passwd(""), | 46 | : passwd(""), |
45 | _modemName(""), | 47 | _modemName(""), |
46 | highcount(-1), // start out with no entries | 48 | highcount(-1), // start out with no entries |
47 | highcountdev(-1), // start out with no entries | 49 | highcountdev(-1), // start out with no entries |
48 | // caccount(-1), // set the current account index also | 50 | // caccount(-1), // set the current account index also |
49 | suidprocessid(-1), // process ID of setuid child | 51 | suidprocessid(-1), // process ID of setuid child |
50 | pppdisrunning(false), | 52 | pppdisrunning(false), |
51 | pppderror(0) | 53 | pppderror(0) |
52 | { | 54 | { |
53 | highcount = readNumConfig(GENERAL_GRP, NUMACCOUNTS_KEY, 0) - 1; | 55 | highcount = readNumConfig(GENERAL_GRP, NUMACCOUNTS_KEY, 0) - 1; |
54 | highcountdev = readNumConfig(GENERAL_GRP, NUMDEVICES_KEY, 0) - 1; | 56 | highcountdev = readNumConfig(GENERAL_GRP, NUMDEVICES_KEY, 0) - 1; |
55 | Config cfg = config(); | 57 | Config cfg = config(); |
56 | cfg.setGroup(GENERAL_GRP); | 58 | cfg.setGroup(GENERAL_GRP); |
57 | accountList = cfg.readListEntry(ACCOUNT_LIST, ',' ); | 59 | accountList = cfg.readListEntry(ACCOUNT_LIST, ',' ); |
58 | deviceList = cfg.readListEntry(DEVICESNAMES_LIST, ',' ); | 60 | deviceList = cfg.readListEntry(DEVICESNAMES_LIST, ',' ); |
59 | odebug << "PPPData::PPPData has a accountList " << accountList.join("---").latin1() << "" << oendl; | 61 | odebug << "PPPData::PPPData has a accountList " << accountList.join("---").latin1() << "" << oendl; |
60 | odebug << "PPPData::PPPData has a deviceList " << deviceList.join("---").latin1() << "" << oendl; | 62 | odebug << "PPPData::PPPData has a deviceList " << deviceList.join("---").latin1() << "" << oendl; |
61 | 63 | ||
62 | // if (highcount > MAX_ACCOUNTS) | 64 | // if (highcount > MAX_ACCOUNTS) |
63 | // highcount = MAX_ACCOUNTS; | 65 | // highcount = MAX_ACCOUNTS; |
64 | 66 | ||
65 | // if(highcount >= 0 && defaultAccount().isEmpty()) { | 67 | // if(highcount >= 0 && defaultAccount().isEmpty()) { |
66 | // setAccountbyIndex(0); | 68 | // setAccountbyIndex(0); |
67 | // setDefaultAccount(accname()); | 69 | // setDefaultAccount(accname()); |
68 | // } else if(!setAccount(defaultAccount())) | 70 | // } else if(!setAccount(defaultAccount())) |
69 | setDefaultAccount(accname()); | 71 | setDefaultAccount(accname()); |
70 | 72 | ||
71 | // start out with internal debugging disabled | 73 | // start out with internal debugging disabled |
72 | // the user is still free to specify `debug' on his own | 74 | // the user is still free to specify `debug' on his own |
73 | setPPPDebug(false); | 75 | setPPPDebug(false); |
74 | 76 | ||
75 | ::pppdVersion(&pppdVer, &pppdMod, &pppdPatch); | 77 | ::pppdVersion(&pppdVer, &pppdMod, &pppdPatch); |
76 | 78 | ||
77 | } | 79 | } |
78 | 80 | ||
79 | Config PPPData::config() | 81 | Config PPPData::config() |
80 | { | 82 | { |
81 | return Config("NetworkSetupPPP"); | 83 | return Config("NetworkSetupPPP"); |
82 | } | 84 | } |
83 | 85 | ||
84 | // | 86 | // |
85 | // save configuration | 87 | // save configuration |
86 | // | 88 | // |
87 | void PPPData::save() | 89 | void PPPData::save() |
88 | { | 90 | { |
89 | odebug << "PPPData saving data" << oendl; | 91 | odebug << "PPPData saving data" << oendl; |
90 | writeConfig(GENERAL_GRP, NUMACCOUNTS_KEY, count()); | 92 | writeConfig(GENERAL_GRP, NUMACCOUNTS_KEY, count()); |
91 | writeConfig(GENERAL_GRP, NUMDEVICES_KEY, highcountdev + 1); | 93 | writeConfig(GENERAL_GRP, NUMDEVICES_KEY, highcountdev + 1); |
92 | QString key; | 94 | QString key; |
93 | QStringList keys; | 95 | QStringList keys; |
94 | Config cfg = config(); | 96 | Config cfg = config(); |
95 | cfg.setGroup(GENERAL_GRP); | 97 | cfg.setGroup(GENERAL_GRP); |
96 | cfg.writeEntry(ACCOUNT_LIST, accountList, ',' ); | 98 | cfg.writeEntry(ACCOUNT_LIST, accountList, ',' ); |
97 | cfg.writeEntry(DEVICESNAMES_LIST, deviceList, ',' ); | 99 | cfg.writeEntry(DEVICESNAMES_LIST, deviceList, ',' ); |
98 | 100 | ||
99 | for( QMap<QString,QString>::Iterator it = stringEntries.begin(); | 101 | for( QMap<QString,QString>::Iterator it = stringEntries.begin(); |
100 | it != stringEntries.end(); ++it ){ | 102 | it != stringEntries.end(); ++it ){ |
101 | QString val = it.data(); | 103 | QString val = it.data(); |
102 | key = it.key(); | 104 | key = it.key(); |
103 | // odebug << "saving " << key.latin1() << " -> " << val.latin1() << "" << oendl; | 105 | // odebug << "saving " << key.latin1() << " -> " << val.latin1() << "" << oendl; |
104 | keys = QStringList::split( "SEPARATOR", key ); | 106 | keys = QStringList::split( "SEPARATOR", key ); |
105 | //odebug << "group >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val.latin1() << "<" << oendl; | 107 | //odebug << "group >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val.latin1() << "<" << oendl; |
106 | cfg.setGroup(keys[0]); | 108 | cfg.setGroup(keys[0]); |
107 | cfg.writeEntry(keys[1], val); | 109 | cfg.writeEntry(keys[1], val); |
108 | } | 110 | } |
109 | for( QMap<QString,int>::Iterator it = intEntries.begin(); | 111 | for( QMap<QString,int>::Iterator it = intEntries.begin(); |
110 | it != intEntries.end(); ++it ){ | 112 | it != intEntries.end(); ++it ){ |
111 | int val = it.data(); | 113 | int val = it.data(); |
112 | key = it.key(); | 114 | key = it.key(); |
113 | // odebug << "saving " << key.latin1() << " -> " << val << "" << oendl; | 115 | // odebug << "saving " << key.latin1() << " -> " << val << "" << oendl; |
114 | keys = QStringList::split( "SEPARATOR", key ); | 116 | keys = QStringList::split( "SEPARATOR", key ); |
115 | //odebug << "group >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< val " << val << "" << oendl; | 117 | //odebug << "group >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< val " << val << "" << oendl; |
116 | cfg.setGroup(keys[0]); | 118 | cfg.setGroup(keys[0]); |
117 | cfg.writeEntry(keys[1], val); | 119 | cfg.writeEntry(keys[1], val); |
118 | } | 120 | } |
119 | for( QMap<QString,QStringList>::Iterator it = listEntries.begin(); | 121 | for( QMap<QString,QStringList>::Iterator it = listEntries.begin(); |
120 | it != listEntries.end(); ++it ){ | 122 | it != listEntries.end(); ++it ){ |
121 | QStringList val = it.data(); | 123 | QStringList val = it.data(); |
122 | key = it.key(); | 124 | key = it.key(); |
123 | QChar sep = sepEntries[key]; | 125 | QChar sep = sepEntries[key]; |
124 | // odebug << "saving " << key.latin1() << " -> " << val.join(sep).latin1() << "" << oendl; | 126 | // odebug << "saving " << key.latin1() << " -> " << val.join(sep).latin1() << "" << oendl; |
125 | keys = QStringList::split( "SEPARATOR", key ); | 127 | keys = QStringList::split( "SEPARATOR", key ); |
126 | cfg.setGroup(keys[0]); | 128 | cfg.setGroup(keys[0]); |
127 | cfg.writeEntry(keys[1], val, sep); | 129 | cfg.writeEntry(keys[1], val, sep); |
128 | } | 130 | } |
129 | } | 131 | } |
130 | 132 | ||
131 | 133 | ||
132 | // | 134 | // |
133 | // cancel changes | 135 | // cancel changes |
134 | // | 136 | // |
135 | void PPPData::cancel() { | 137 | void PPPData::cancel() { |
136 | stringEntries.clear(); | 138 | stringEntries.clear(); |
137 | intEntries.clear(); | 139 | intEntries.clear(); |
138 | listEntries.clear(); | 140 | listEntries.clear(); |
139 | } | 141 | } |
140 | 142 | ||
141 | // functions to read/write date to configuration file | 143 | // functions to read/write date to configuration file |
142 | QString PPPData::readConfig(const QString &group, const QString &key, | 144 | QString PPPData::readConfig(const QString &group, const QString &key, |
143 | const QString &defvalue = "") | 145 | const QString &defvalue = "") |
144 | { | 146 | { |
145 | // odebug << "PPPData::readConfig key >" << key.latin1() << "< group >" << group.latin1() << "<" << oendl; | 147 | // odebug << "PPPData::readConfig key >" << key.latin1() << "< group >" << group.latin1() << "<" << oendl; |
146 | QString idx = SEP.arg(group).arg(key); | 148 | QString idx = SEP.arg(group).arg(key); |
147 | if (stringEntries.find(idx) != stringEntries.end()) | 149 | if (stringEntries.find(idx) != stringEntries.end()) |
148 | return stringEntries[idx]; | 150 | return stringEntries[idx]; |
149 | Config cfg = config(); | 151 | Config cfg = config(); |
150 | cfg.setGroup(group); | 152 | cfg.setGroup(group); |
151 | return cfg.readEntry(key, defvalue); | 153 | return cfg.readEntry(key, defvalue); |
152 | } | 154 | } |
153 | 155 | ||
154 | 156 | ||
155 | int PPPData::readNumConfig(const QString &group, const QString &key, | 157 | int PPPData::readNumConfig(const QString &group, const QString &key, |
156 | int defvalue) | 158 | int defvalue) |
157 | { | 159 | { |
158 | QString idx = SEP.arg(group).arg(key); | 160 | QString idx = SEP.arg(group).arg(key); |
159 | if (intEntries.find(idx) != intEntries.end()) | 161 | if (intEntries.find(idx) != intEntries.end()) |
160 | return intEntries[idx]; | 162 | return intEntries[idx]; |
161 | Config cfg = config(); | 163 | Config cfg = config(); |
162 | cfg.setGroup(group); | 164 | cfg.setGroup(group); |
163 | return cfg.readNumEntry(key, defvalue); | 165 | return cfg.readNumEntry(key, defvalue); |
164 | 166 | ||
165 | // if (config) { | 167 | // if (config) { |
166 | // config->setGroup(group); | 168 | // config->setGroup(group); |
167 | // return config->readNumEntry(key, defvalue); | 169 | // return config->readNumEntry(key, defvalue); |
168 | // } else | 170 | // } else |
169 | // return defvalue; | 171 | // return defvalue; |
170 | 172 | ||
171 | } | 173 | } |
172 | 174 | ||
173 | 175 | ||
174 | bool PPPData::readListConfig(const QString &group, const QString &key, | 176 | bool PPPData::readListConfig(const QString &group, const QString &key, |
175 | QStringList &list, char sep) { | 177 | QStringList &list, char sep) { |
176 | list.clear(); | 178 | list.clear(); |
177 | QString idx = SEP.arg(group).arg(key); | 179 | QString idx = SEP.arg(group).arg(key); |
178 | if (listEntries.find(idx) != listEntries.end()){ | 180 | if (listEntries.find(idx) != listEntries.end()){ |
179 | list = listEntries[idx]; | 181 | list = listEntries[idx]; |
180 | return true; | 182 | return true; |
181 | } | 183 | } |
182 | Config cfg = config(); | 184 | Config cfg = config(); |
183 | cfg.setGroup(group); | 185 | cfg.setGroup(group); |
184 | list = cfg.readListEntry(key, sep); | 186 | list = cfg.readListEntry(key, sep); |
185 | if (list.count() > 0) return true; | 187 | if (list.count() > 0) return true; |
186 | return false; | 188 | return false; |
187 | 189 | ||
188 | // if (config) { | 190 | // if (config) { |
189 | // config->setGroup(group); | 191 | // config->setGroup(group); |
190 | // list = config->readListEntry(key, sep); | 192 | // list = config->readListEntry(key, sep); |
191 | // return true; | 193 | // return true; |
192 | // } else | 194 | // } else |
193 | // return false; | 195 | // return false; |
194 | } | 196 | } |
195 | 197 | ||
196 | 198 | ||
197 | void PPPData::writeConfig(const QString &group, const QString &key, | 199 | void PPPData::writeConfig(const QString &group, const QString &key, |
198 | const QString &value) { | 200 | const QString &value) { |
199 | stringEntries.insert( SEP.arg(group).arg(key), value ); | 201 | stringEntries.insert( SEP.arg(group).arg(key), value ); |
200 | // if (config) { | 202 | // if (config) { |
201 | // config->setGroup(group); | 203 | // config->setGroup(group); |
202 | // config->writeEntry(key, value); | 204 | // config->writeEntry(key, value); |
203 | // } | 205 | // } |
204 | } | 206 | } |
205 | 207 | ||
206 | 208 | ||
207 | void PPPData::writeConfig(const QString &group, const QString &key, int value) | 209 | void PPPData::writeConfig(const QString &group, const QString &key, int value) |
208 | { | 210 | { |
209 | intEntries.insert( SEP.arg(group).arg(key), value ); | 211 | intEntries.insert( SEP.arg(group).arg(key), value ); |
210 | // if (config) { | 212 | // if (config) { |
211 | // config->setGroup(group); | 213 | // config->setGroup(group); |
212 | // config->writeEntry(key, value); | 214 | // config->writeEntry(key, value); |
213 | // } | 215 | // } |
214 | } | 216 | } |
215 | 217 | ||
216 | 218 | ||
217 | void PPPData::writeListConfig(const QString &group, const QString &key, | 219 | void PPPData::writeListConfig(const QString &group, const QString &key, |
218 | QStringList &list, char sep) | 220 | QStringList &list, char sep) |
219 | { | 221 | { |
220 | listEntries.insert( SEP.arg(group).arg(key), list ); | 222 | listEntries.insert( SEP.arg(group).arg(key), list ); |
221 | sepEntries.insert( SEP.arg(group).arg(key), sep ); | 223 | sepEntries.insert( SEP.arg(group).arg(key), sep ); |
222 | // if (config) { | 224 | // if (config) { |
223 | // config->setGroup(group); | 225 | // config->setGroup(group); |
224 | // config->writeEntry(key, list, sep); | 226 | // config->writeEntry(key, list, sep); |
225 | // } | 227 | // } |
226 | } | 228 | } |
227 | 229 | ||
228 | 230 | ||
229 | // | 231 | // |
230 | // functions to set/return general information | 232 | // functions to set/return general information |
231 | // | 233 | // |
232 | QString PPPData::password(){ | 234 | QString PPPData::password(){ |
233 | if ( storePassword() ) return storedPassword(); | 235 | if ( storePassword() ) return storedPassword(); |
234 | else return passwd; | 236 | else return passwd; |
235 | } | 237 | } |
236 | 238 | ||
237 | 239 | ||
238 | void PPPData::setPassword(const QString &pw) { | 240 | void PPPData::setPassword(const QString &pw) { |
239 | passwd = pw; | 241 | passwd = pw; |
240 | } | 242 | } |
241 | 243 | ||
242 | 244 | ||
243 | const QString PPPData::defaultAccount() { | 245 | const QString PPPData::defaultAccount() { |
244 | return readConfig(GENERAL_GRP, DEFAULTACCOUNT_KEY); | 246 | return readConfig(GENERAL_GRP, DEFAULTACCOUNT_KEY); |
245 | } | 247 | } |
246 | 248 | ||
247 | 249 | ||
248 | void PPPData::setDefaultAccount(const QString &n) { | 250 | void PPPData::setDefaultAccount(const QString &n) { |
249 | writeConfig(GENERAL_GRP, DEFAULTACCOUNT_KEY, n); | 251 | writeConfig(GENERAL_GRP, DEFAULTACCOUNT_KEY, n); |
250 | 252 | ||
251 | //now set the current account index to the default account | 253 | //now set the current account index to the default account |
252 | setAccount(defaultAccount()); | 254 | setAccount(defaultAccount()); |
253 | } | 255 | } |
254 | 256 | ||
255 | 257 | ||
256 | bool PPPData::get_show_clock_on_caption() { | 258 | bool PPPData::get_show_clock_on_caption() { |
257 | return (bool) readNumConfig(GENERAL_GRP, SHOWCLOCK_KEY, true); | 259 | return (bool) readNumConfig(GENERAL_GRP, SHOWCLOCK_KEY, true); |
258 | } | 260 | } |
259 | 261 | ||
260 | 262 | ||
261 | void PPPData::set_show_clock_on_caption(bool set) { | 263 | void PPPData::set_show_clock_on_caption(bool set) { |
262 | writeConfig(GENERAL_GRP, SHOWCLOCK_KEY, (int) set); | 264 | writeConfig(GENERAL_GRP, SHOWCLOCK_KEY, (int) set); |
263 | } | 265 | } |
264 | 266 | ||
265 | 267 | ||
266 | bool PPPData::get_xserver_exit_disconnect() { | 268 | bool PPPData::get_xserver_exit_disconnect() { |
267 | return (bool) readNumConfig(GENERAL_GRP, DISCONNECT_KEY, true); | 269 | return (bool) readNumConfig(GENERAL_GRP, DISCONNECT_KEY, true); |
268 | } | 270 | } |
269 | 271 | ||
270 | 272 | ||
271 | void PPPData::setPPPDebug(bool set) { | 273 | void PPPData::setPPPDebug(bool set) { |
272 | writeConfig(GENERAL_GRP, PPP_DEBUG_OPTION, (int)set); | 274 | writeConfig(GENERAL_GRP, PPP_DEBUG_OPTION, (int)set); |
273 | } | 275 | } |
274 | 276 | ||
275 | 277 | ||
276 | bool PPPData::getPPPDebug() { | 278 | bool PPPData::getPPPDebug() { |
277 | return (bool)readNumConfig(GENERAL_GRP, PPP_DEBUG_OPTION, false); | 279 | return (bool)readNumConfig(GENERAL_GRP, PPP_DEBUG_OPTION, false); |
278 | } | 280 | } |
279 | 281 | ||
280 | 282 | ||
281 | void PPPData::set_xserver_exit_disconnect(bool set) { | 283 | void PPPData::set_xserver_exit_disconnect(bool set) { |
282 | writeConfig(GENERAL_GRP, DISCONNECT_KEY, (int) set); | 284 | writeConfig(GENERAL_GRP, DISCONNECT_KEY, (int) set); |
283 | } | 285 | } |
284 | 286 | ||
285 | 287 | ||
286 | bool PPPData::quit_on_disconnect() { | 288 | bool PPPData::quit_on_disconnect() { |
287 | return (bool) readNumConfig(GENERAL_GRP, QUITONDISCONNECT_KEY, false); | 289 | return (bool) readNumConfig(GENERAL_GRP, QUITONDISCONNECT_KEY, false); |
288 | } | 290 | } |
289 | 291 | ||
290 | 292 | ||
291 | void PPPData::set_quit_on_disconnect(bool set) { | 293 | void PPPData::set_quit_on_disconnect(bool set) { |
292 | writeConfig(GENERAL_GRP, QUITONDISCONNECT_KEY, (int) set); | 294 | writeConfig(GENERAL_GRP, QUITONDISCONNECT_KEY, (int) set); |
293 | } | 295 | } |
294 | 296 | ||
295 | 297 | ||
296 | bool PPPData::get_show_log_window() { | 298 | bool PPPData::get_show_log_window() { |
297 | return (bool) readNumConfig (GENERAL_GRP, SHOWLOGWIN_KEY, false); | 299 | return (bool) readNumConfig (GENERAL_GRP, SHOWLOGWIN_KEY, false); |
298 | } | 300 | } |
299 | 301 | ||
300 | 302 | ||
301 | void PPPData::set_show_log_window(bool set) { | 303 | void PPPData::set_show_log_window(bool set) { |
302 | writeConfig(GENERAL_GRP, SHOWLOGWIN_KEY, (int) set); | 304 | writeConfig(GENERAL_GRP, SHOWLOGWIN_KEY, (int) set); |
303 | } | 305 | } |
304 | 306 | ||
305 | 307 | ||
306 | bool PPPData::automatic_redial() { | 308 | bool PPPData::automatic_redial() { |
307 | return (bool) readNumConfig(GENERAL_GRP, AUTOREDIAL_KEY, FALSE); | 309 | return (bool) readNumConfig(GENERAL_GRP, AUTOREDIAL_KEY, FALSE); |
308 | } | 310 | } |
309 | 311 | ||
310 | 312 | ||
311 | void PPPData::set_automatic_redial(bool set) { | 313 | void PPPData::set_automatic_redial(bool set) { |
312 | writeConfig(GENERAL_GRP, AUTOREDIAL_KEY, (int) set); | 314 | writeConfig(GENERAL_GRP, AUTOREDIAL_KEY, (int) set); |
313 | } | 315 | } |
314 | 316 | ||
315 | 317 | ||
316 | // bool PPPData::get_iconify_on_connect() { | 318 | // bool PPPData::get_iconify_on_connect() { |
317 | // return (bool) readNumConfig(GENERAL_GRP, ICONIFY_ON_CONNECT_KEY, TRUE); | 319 | // return (bool) readNumConfig(GENERAL_GRP, ICONIFY_ON_CONNECT_KEY, TRUE); |
318 | // } | 320 | // } |
319 | 321 | ||
320 | 322 | ||
321 | // void PPPData::set_iconify_on_connect(bool set) { | 323 | // void PPPData::set_iconify_on_connect(bool set) { |
322 | // writeConfig(GENERAL_GRP, ICONIFY_ON_CONNECT_KEY, (int) set); | 324 | // writeConfig(GENERAL_GRP, ICONIFY_ON_CONNECT_KEY, (int) set); |
323 | // } | 325 | // } |
324 | 326 | ||
325 | 327 | ||
326 | // bool PPPData::get_dock_into_panel() { | 328 | // bool PPPData::get_dock_into_panel() { |
327 | // return (bool) readNumConfig(GENERAL_GRP, DOCKING_KEY, false); | 329 | // return (bool) readNumConfig(GENERAL_GRP, DOCKING_KEY, false); |
328 | // } | 330 | // } |
329 | 331 | ||
330 | 332 | ||
331 | // void PPPData::set_dock_into_panel(bool set) { | 333 | // void PPPData::set_dock_into_panel(bool set) { |
332 | // writeConfig(GENERAL_GRP, DOCKING_KEY, (int) set); | 334 | // writeConfig(GENERAL_GRP, DOCKING_KEY, (int) set); |
333 | // } | 335 | // } |
334 | 336 | ||
335 | 337 | ||
336 | QString PPPData::pppdVersion() { | 338 | QString PPPData::pppdVersion() { |
337 | return QString("%1.%2.%3").arg(pppdVer).arg(pppdMod).arg(pppdPatch); | 339 | return QString("%1.%2.%3").arg(pppdVer).arg(pppdMod).arg(pppdPatch); |
338 | } | 340 | } |
339 | 341 | ||
340 | bool PPPData::pppdVersionMin(int ver, int mod, int patch) { | 342 | bool PPPData::pppdVersionMin(int ver, int mod, int patch) { |
341 | // check if pppd version fulfills minimum requirement | 343 | // check if pppd version fulfills minimum requirement |
342 | return (pppdVer > ver | 344 | return (pppdVer > ver |
343 | || (pppdVer == ver && pppdMod > mod) | 345 | || (pppdVer == ver && pppdMod > mod) |
344 | || (pppdVer == ver && pppdMod == mod && pppdPatch >= patch)); | 346 | || (pppdVer == ver && pppdMod == mod && pppdPatch >= patch)); |
345 | } | 347 | } |
346 | 348 | ||
347 | int PPPData::pppdTimeout() { | 349 | int PPPData::pppdTimeout() { |
348 | return readNumConfig(GENERAL_GRP, PPPDTIMEOUT_KEY, PPPD_TIMEOUT); | 350 | return readNumConfig(GENERAL_GRP, PPPDTIMEOUT_KEY, PPPD_TIMEOUT); |
349 | } | 351 | } |
350 | 352 | ||
351 | 353 | ||
352 | void PPPData::setpppdTimeout(int n) { | 354 | void PPPData::setpppdTimeout(int n) { |
353 | writeConfig(GENERAL_GRP, PPPDTIMEOUT_KEY, n); | 355 | writeConfig(GENERAL_GRP, PPPDTIMEOUT_KEY, n); |
354 | } | 356 | } |
355 | 357 | ||
356 | 358 | ||
357 | const QString PPPData::modemDevice() { | 359 | const QString PPPData::modemDevice() { |
358 | return readConfig (modemGroup(), MODEMDEV_KEY, "/dev/modem" ); | 360 | return readConfig (modemGroup(), MODEMDEV_KEY, "/dev/modem" ); |
359 | } | 361 | } |
360 | 362 | ||
361 | 363 | ||
362 | // const QString PPPData::modemName() | 364 | // const QString PPPData::modemName() |
363 | // { | 365 | // { |
364 | // return readConfig(modemGroup(), MODEMNAME_KEY); | 366 | // return readConfig(modemGroup(), MODEMNAME_KEY); |
365 | // } | 367 | // } |
366 | 368 | ||
367 | // bool PPPData::setModemName(const QString &n) { | 369 | // bool PPPData::setModemName(const QString &n) { |
368 | // odebug << "Setting modem name to >" << n.latin1() << "<" << oendl; | 370 | // odebug << "Setting modem name to >" << n.latin1() << "<" << oendl; |
369 | // _modemName = n; | 371 | // _modemName = n; |
370 | // writeConfig(cgroup, MODEMNAME_KEY, n); | 372 | // writeConfig(cgroup, MODEMNAME_KEY, n); |
371 | // return true; //FIXME | 373 | // return true; //FIXME |
372 | // } | 374 | // } |
373 | 375 | ||
374 | // bool PPPData::changeModemName(const QString &n) { | 376 | // bool PPPData::changeModemName(const QString &n) { |
375 | // odebug << "Setting modem name to >" << n.latin1() << "<" << oendl; | 377 | // odebug << "Setting modem name to >" << n.latin1() << "<" << oendl; |
376 | // _modemName = n; | 378 | // _modemName = n; |
377 | // writeConfig(modemGroup(), MODEMNAME_KEY, n); | 379 | // writeConfig(modemGroup(), MODEMNAME_KEY, n); |
378 | // return true; //FIXME | 380 | // return true; //FIXME |
379 | // } | 381 | // } |
380 | 382 | ||
381 | bool PPPData::setModemDevice(const QString &n) { | 383 | bool PPPData::setModemDevice(const QString &n) { |
382 | odebug << "Setting modem dev to >" << n.latin1() << "<" << oendl; | 384 | odebug << "Setting modem dev to >" << n.latin1() << "<" << oendl; |
383 | writeConfig(modemGroup(), MODEMDEV_KEY, n); | 385 | writeConfig(modemGroup(), MODEMDEV_KEY, n); |
384 | return true; //FIXME | 386 | return true; //FIXME |
385 | } | 387 | } |
386 | 388 | ||
387 | 389 | ||
388 | const QString PPPData::flowcontrol() { | 390 | const QString PPPData::flowcontrol() { |
389 | return readConfig(modemGroup(), FLOWCONTROL_KEY, "CRTSCTS"); | 391 | return readConfig(modemGroup(), FLOWCONTROL_KEY, "CRTSCTS"); |
390 | } | 392 | } |
391 | 393 | ||
392 | 394 | ||
393 | void PPPData::setFlowcontrol(const QString &n) { | 395 | void PPPData::setFlowcontrol(const QString &n) { |
394 | writeConfig(modemGroup(), FLOWCONTROL_KEY, n); | 396 | writeConfig(modemGroup(), FLOWCONTROL_KEY, n); |
395 | } | 397 | } |
396 | 398 | ||
397 | 399 | ||
398 | const QString PPPData::speed() { | 400 | const QString PPPData::speed() { |
399 | QString s = readConfig(modemGroup(), SPEED_KEY, "57600"); | 401 | QString s = readConfig(modemGroup(), SPEED_KEY, "57600"); |
400 | // undo the damage of a bug in former versions. It left an empty Speed= | 402 | // undo the damage of a bug in former versions. It left an empty Speed= |
401 | // entry in kppprc. kppp did set the serial port to 57600 as default but | 403 | // entry in kppprc. kppp did set the serial port to 57600 as default but |
402 | // pppd wouldn't receive the speed via the command line. | 404 | // pppd wouldn't receive the speed via the command line. |
403 | if(s.toUInt() == 0) | 405 | if(s.toUInt() == 0) |
404 | s = "57600"; | 406 | s = "57600"; |
405 | return s; | 407 | return s; |
406 | } | 408 | } |
407 | 409 | ||
408 | 410 | ||
409 | void PPPData::setSpeed(const QString &n) { | 411 | void PPPData::setSpeed(const QString &n) { |
410 | writeConfig(modemGroup(), SPEED_KEY, n); | 412 | writeConfig(modemGroup(), SPEED_KEY, n); |
411 | } | 413 | } |
412 | 414 | ||
413 | 415 | ||
414 | #if 0 | 416 | #if 0 |
415 | void PPPData::setUseCDLine(const int n) { | 417 | void PPPData::setUseCDLine(const int n) { |
416 | writeConfig(modemGroup(),USECDLINE_KEY,n); | 418 | writeConfig(modemGroup(),USECDLINE_KEY,n); |
417 | } | 419 | } |
418 | 420 | ||
419 | 421 | ||
420 | int PPPData::UseCDLine() { | 422 | int PPPData::UseCDLine() { |
421 | return readNumConfig(modemGroup(),USECDLINE_KEY,0); | 423 | return readNumConfig(modemGroup(),USECDLINE_KEY,0); |
422 | } | 424 | } |
423 | #endif | 425 | #endif |
424 | 426 | ||
425 | const QString PPPData::modemEscapeStr() { | 427 | const QString PPPData::modemEscapeStr() { |
426 | return readConfig(modemGroup(),ESCAPESTR_KEY,"+++"); | 428 | return readConfig(modemGroup(),ESCAPESTR_KEY,"+++"); |
427 | } | 429 | } |
428 | 430 | ||
429 | 431 | ||
430 | void PPPData::setModemEscapeStr(const QString &n) { | 432 | void PPPData::setModemEscapeStr(const QString &n) { |
431 | writeConfig(modemGroup(),ESCAPESTR_KEY,n); | 433 | writeConfig(modemGroup(),ESCAPESTR_KEY,n); |
432 | } | 434 | } |
433 | 435 | ||
434 | 436 | ||
435 | const QString PPPData::modemEscapeResp() { | 437 | const QString PPPData::modemEscapeResp() { |
436 | return readConfig(modemGroup(),ESCAPERESP_KEY,"OK"); | 438 | return readConfig(modemGroup(),ESCAPERESP_KEY,"OK"); |
437 | } | 439 | } |
438 | 440 | ||
439 | 441 | ||
440 | void PPPData::setModemEscapeResp(const QString &n) { | 442 | void PPPData::setModemEscapeResp(const QString &n) { |
441 | writeConfig(modemGroup(),ESCAPERESP_KEY,n); | 443 | writeConfig(modemGroup(),ESCAPERESP_KEY,n); |
442 | } | 444 | } |
443 | 445 | ||
444 | 446 | ||
445 | int PPPData::modemEscapeGuardTime() { | 447 | int PPPData::modemEscapeGuardTime() { |
446 | return readNumConfig(modemGroup(),ESCAPEGUARDTIME_KEY,50); | 448 | return readNumConfig(modemGroup(),ESCAPEGUARDTIME_KEY,50); |
447 | } | 449 | } |
448 | 450 | ||
449 | 451 | ||
450 | void PPPData::setModemEscapeGuardTime(int n) { | 452 | void PPPData::setModemEscapeGuardTime(int n) { |
451 | writeConfig(modemGroup(),ESCAPEGUARDTIME_KEY,n); | 453 | writeConfig(modemGroup(),ESCAPEGUARDTIME_KEY,n); |
452 | } | 454 | } |
453 | 455 | ||
454 | 456 | ||
455 | bool PPPData::modemLockFile() { | 457 | bool PPPData::modemLockFile() { |
456 | return readNumConfig(modemGroup(), LOCKFILE_KEY, 1); | 458 | return readNumConfig(modemGroup(), LOCKFILE_KEY, 1); |
457 | } | 459 | } |
458 | 460 | ||
459 | 461 | ||
460 | void PPPData::setModemLockFile(bool set) { | 462 | void PPPData::setModemLockFile(bool set) { |
461 | writeConfig(modemGroup(), LOCKFILE_KEY, set); | 463 | writeConfig(modemGroup(), LOCKFILE_KEY, set); |
462 | } | 464 | } |
463 | 465 | ||
464 | 466 | ||
465 | int PPPData::modemTimeout() { | 467 | int PPPData::modemTimeout() { |
466 | return readNumConfig(modemGroup(), TIMEOUT_KEY, MODEM_TIMEOUT); | 468 | return readNumConfig(modemGroup(), TIMEOUT_KEY, MODEM_TIMEOUT); |
467 | } | 469 | } |
468 | 470 | ||
469 | 471 | ||
470 | void PPPData::setModemTimeout(int n) { | 472 | void PPPData::setModemTimeout(int n) { |
471 | writeConfig(modemGroup(), TIMEOUT_KEY, n); | 473 | writeConfig(modemGroup(), TIMEOUT_KEY, n); |
472 | } | 474 | } |
473 | 475 | ||
474 | 476 | ||
475 | int PPPData::modemToneDuration() { | 477 | int PPPData::modemToneDuration() { |
476 | return readNumConfig(modemGroup(), TONEDURATION_KEY,MODEM_TONEDURATION); | 478 | return readNumConfig(modemGroup(), TONEDURATION_KEY,MODEM_TONEDURATION); |
477 | } | 479 | } |
478 | 480 | ||
479 | 481 | ||
480 | void PPPData::setModemToneDuration(int n) { | 482 | void PPPData::setModemToneDuration(int n) { |
481 | writeConfig(modemGroup(), TONEDURATION_KEY, n); | 483 | writeConfig(modemGroup(), TONEDURATION_KEY, n); |
482 | } | 484 | } |
483 | 485 | ||
484 | 486 | ||
485 | int PPPData::busyWait() { | 487 | int PPPData::busyWait() { |
486 | return readNumConfig(modemGroup(), BUSYWAIT_KEY, BUSY_WAIT); | 488 | return readNumConfig(modemGroup(), BUSYWAIT_KEY, BUSY_WAIT); |
487 | } | 489 | } |
488 | 490 | ||
489 | 491 | ||
490 | void PPPData::setbusyWait(int n) { | 492 | void PPPData::setbusyWait(int n) { |
491 | writeConfig(modemGroup(), BUSYWAIT_KEY, n); | 493 | writeConfig(modemGroup(), BUSYWAIT_KEY, n); |
492 | } | 494 | } |
493 | 495 | ||
494 | 496 | ||
495 | // | 497 | // |
496 | //Advanced "Modem" dialog | 498 | //Advanced "Modem" dialog |
497 | // | 499 | // |
498 | // defaults: InitString=ATZ, InitString1="" etc. | 500 | // defaults: InitString=ATZ, InitString1="" etc. |
499 | const QString PPPData::modemInitStr(int i) { | 501 | const QString PPPData::modemInitStr(int i) { |
500 | assert(i >= 0 && i < NumInitStrings); | 502 | assert(i >= 0 && i < NumInitStrings); |
501 | if(i == 0) | 503 | if(i == 0) |
502 | return readConfig(modemGroup(), INITSTR_KEY, "ATZ"); | 504 | return readConfig(modemGroup(), INITSTR_KEY, "ATZ"); |
503 | else | 505 | else |
504 | return readConfig(modemGroup(), INITSTR_KEY + QString::number(i), ""); | 506 | return readConfig(modemGroup(), INITSTR_KEY + QString::number(i), ""); |
505 | } | 507 | } |
506 | 508 | ||
507 | 509 | ||
508 | void PPPData::setModemInitStr(int i, const QString &n) { | 510 | void PPPData::setModemInitStr(int i, const QString &n) { |
509 | assert(i >= 0 && i < NumInitStrings); | 511 | assert(i >= 0 && i < NumInitStrings); |
510 | QString k = INITSTR_KEY + (i > 0 ? QString::number(i) : QString("")); | 512 | QString k = INITSTR_KEY + (i > 0 ? QString::number(i) : QString("")); |
511 | writeConfig(modemGroup(), k, n); | 513 | writeConfig(modemGroup(), k, n); |
512 | } | 514 | } |
513 | 515 | ||
514 | 516 | ||
515 | const QString PPPData::modemInitResp() { | 517 | const QString PPPData::modemInitResp() { |
516 | return readConfig(modemGroup(), INITRESP_KEY, "OK"); | 518 | return readConfig(modemGroup(), INITRESP_KEY, "OK"); |
517 | } | 519 | } |
518 | 520 | ||
519 | 521 | ||
520 | void PPPData::setModemInitResp(const QString &n) { | 522 | void PPPData::setModemInitResp(const QString &n) { |
521 | writeConfig(modemGroup(), INITRESP_KEY, n); | 523 | writeConfig(modemGroup(), INITRESP_KEY, n); |
522 | } | 524 | } |
523 | 525 | ||
524 | 526 | ||
525 | int PPPData::modemPreInitDelay() { | 527 | int PPPData::modemPreInitDelay() { |
526 | return readNumConfig(modemGroup(), PREINITDELAY_KEY, 50); | 528 | return readNumConfig(modemGroup(), PREINITDELAY_KEY, 50); |
527 | } | 529 | } |
528 | 530 | ||
529 | 531 | ||
530 | void PPPData::setModemPreInitDelay(int n) { | 532 | void PPPData::setModemPreInitDelay(int n) { |
531 | writeConfig(modemGroup(), PREINITDELAY_KEY, n); | 533 | writeConfig(modemGroup(), PREINITDELAY_KEY, n); |
532 | } | 534 | } |
533 | 535 | ||
534 | 536 | ||
535 | int PPPData::modemInitDelay() { | 537 | int PPPData::modemInitDelay() { |
536 | return readNumConfig(modemGroup(), INITDELAY_KEY, 50); | 538 | return readNumConfig(modemGroup(), INITDELAY_KEY, 50); |
537 | } | 539 | } |
538 | 540 | ||
539 | 541 | ||
540 | void PPPData::setModemInitDelay(int n) { | 542 | void PPPData::setModemInitDelay(int n) { |
541 | writeConfig(modemGroup(), INITDELAY_KEY, n); | 543 | writeConfig(modemGroup(), INITDELAY_KEY, n); |
542 | } | 544 | } |
543 | 545 | ||
544 | QString PPPData::modemNoDialToneDetectionStr() { | 546 | QString PPPData::modemNoDialToneDetectionStr() { |
545 | return readConfig(modemGroup(), NODTDETECT_KEY, "ATX3"); | 547 | return readConfig(modemGroup(), NODTDETECT_KEY, "ATX3"); |
546 | } | 548 | } |
547 | 549 | ||
548 | void PPPData::setModemNoDialToneDetectionStr(const QString &n) { | 550 | void PPPData::setModemNoDialToneDetectionStr(const QString &n) { |
549 | writeConfig(modemGroup(), NODTDETECT_KEY, n); | 551 | writeConfig(modemGroup(), NODTDETECT_KEY, n); |
550 | } | 552 | } |
551 | 553 | ||
552 | const QString PPPData::modemDialStr() { | 554 | const QString PPPData::modemDialStr() { |
553 | return readConfig(modemGroup(), DIALSTR_KEY, "ATDT"); | 555 | return readConfig(modemGroup(), DIALSTR_KEY, "ATDT"); |
554 | } | 556 | } |
555 | 557 | ||
556 | 558 | ||
557 | void PPPData::setModemDialStr(const QString &n) { | 559 | void PPPData::setModemDialStr(const QString &n) { |
558 | writeConfig(modemGroup(), DIALSTR_KEY, n); | 560 | writeConfig(modemGroup(), DIALSTR_KEY, n); |
559 | } | 561 | } |
560 | 562 | ||
561 | 563 | ||
562 | const QString PPPData::modemConnectResp() { | 564 | const QString PPPData::modemConnectResp() { |
563 | return readConfig(modemGroup(), CONNECTRESP_KEY, "CONNECT"); | 565 | return readConfig(modemGroup(), CONNECTRESP_KEY, "CONNECT"); |
564 | } | 566 | } |
565 | 567 | ||
566 | 568 | ||
567 | void PPPData::setModemConnectResp(const QString &n) { | 569 | void PPPData::setModemConnectResp(const QString &n) { |
568 | writeConfig(modemGroup(), CONNECTRESP_KEY, n); | 570 | writeConfig(modemGroup(), CONNECTRESP_KEY, n); |
569 | } | 571 | } |
570 | 572 | ||
571 | 573 | ||
572 | const QString PPPData::modemBusyResp() { | 574 | const QString PPPData::modemBusyResp() { |
573 | return readConfig(modemGroup(), BUSYRESP_KEY, "BUSY"); | 575 | return readConfig(modemGroup(), BUSYRESP_KEY, "BUSY"); |
574 | } | 576 | } |
575 | 577 | ||
576 | 578 | ||
577 | void PPPData::setModemBusyResp(const QString &n) { | 579 | void PPPData::setModemBusyResp(const QString &n) { |
578 | writeConfig(modemGroup(), BUSYRESP_KEY, n); | 580 | writeConfig(modemGroup(), BUSYRESP_KEY, n); |
579 | } | 581 | } |
580 | 582 | ||
581 | 583 | ||
582 | const QString PPPData::modemNoCarrierResp() { | 584 | const QString PPPData::modemNoCarrierResp() { |
583 | return readConfig(modemGroup(), NOCARRIERRESP_KEY, "NO CARRIER"); | 585 | return readConfig(modemGroup(), NOCARRIERRESP_KEY, "NO CARRIER"); |
584 | } | 586 | } |
585 | 587 | ||
586 | 588 | ||
587 | void PPPData::setModemNoCarrierResp(const QString &n) { | 589 | void PPPData::setModemNoCarrierResp(const QString &n) { |
588 | writeConfig(modemGroup(), NOCARRIERRESP_KEY, n); | 590 | writeConfig(modemGroup(), NOCARRIERRESP_KEY, n); |
589 | } | 591 | } |
590 | 592 | ||
591 | 593 | ||
592 | const QString PPPData::modemNoDialtoneResp() { | 594 | const QString PPPData::modemNoDialtoneResp() { |
593 | return readConfig(modemGroup(), NODIALTONERESP_KEY, "NO DIALTONE"); | 595 | return readConfig(modemGroup(), NODIALTONERESP_KEY, "NO DIALTONE"); |
594 | } | 596 | } |
595 | 597 | ||
596 | 598 | ||
597 | void PPPData::setModemNoDialtoneResp(const QString &n) { | 599 | void PPPData::setModemNoDialtoneResp(const QString &n) { |
598 | writeConfig(modemGroup(), NODIALTONERESP_KEY, n); | 600 | writeConfig(modemGroup(), NODIALTONERESP_KEY, n); |
599 | } | 601 | } |
600 | 602 | ||
601 | 603 | ||
602 | const QString PPPData::modemHangupStr() { | 604 | const QString PPPData::modemHangupStr() { |
603 | return readConfig(modemGroup(), HANGUPSTR_KEY, "+++ATH"); | 605 | return readConfig(modemGroup(), HANGUPSTR_KEY, "+++ATH"); |
604 | } | 606 | } |
605 | 607 | ||
606 | void PPPData::setModemHangupStr(const QString &n) { | 608 | void PPPData::setModemHangupStr(const QString &n) { |
607 | writeConfig(modemGroup(), HANGUPSTR_KEY, n); | 609 | writeConfig(modemGroup(), HANGUPSTR_KEY, n); |
608 | } | 610 | } |
609 | 611 | ||
610 | 612 | ||
611 | const QString PPPData::modemHangupResp() { | 613 | const QString PPPData::modemHangupResp() { |
612 | return readConfig(modemGroup(), HANGUPRESP_KEY, "OK"); | 614 | return readConfig(modemGroup(), HANGUPRESP_KEY, "OK"); |
613 | } | 615 | } |
614 | 616 | ||
615 | void PPPData::setModemHangupResp(const QString &n) { | 617 | void PPPData::setModemHangupResp(const QString &n) { |
616 | writeConfig(modemGroup(), HANGUPRESP_KEY, n); | 618 | writeConfig(modemGroup(), HANGUPRESP_KEY, n); |
617 | } | 619 | } |
618 | 620 | ||
619 | 621 | ||
620 | const QString PPPData::modemAnswerStr() { | 622 | const QString PPPData::modemAnswerStr() { |
621 | return readConfig(modemGroup(), ANSWERSTR_KEY, "ATA"); | 623 | return readConfig(modemGroup(), ANSWERSTR_KEY, "ATA"); |
622 | } | 624 | } |
623 | 625 | ||
624 | 626 | ||
625 | QString PPPData::volumeOff() { | 627 | QString PPPData::volumeOff() { |
626 | return readConfig(modemGroup(), VOLUME_OFF, "M0L0"); | 628 | return readConfig(modemGroup(), VOLUME_OFF, "M0L0"); |
627 | } | 629 | } |
628 | 630 | ||
629 | 631 | ||
630 | void PPPData::setVolumeOff(const QString &s) { | 632 | void PPPData::setVolumeOff(const QString &s) { |
631 | writeConfig(modemGroup(), VOLUME_OFF, s); | 633 | writeConfig(modemGroup(), VOLUME_OFF, s); |
632 | } | 634 | } |
633 | 635 | ||
634 | 636 | ||
635 | QString PPPData::volumeMedium() { | 637 | QString PPPData::volumeMedium() { |
636 | return readConfig(modemGroup(), VOLUME_MEDIUM, "M1L1"); | 638 | return readConfig(modemGroup(), VOLUME_MEDIUM, "M1L1"); |
637 | } | 639 | } |
638 | 640 | ||
639 | 641 | ||
640 | void PPPData::setVolumeMedium(const QString &s) { | 642 | void PPPData::setVolumeMedium(const QString &s) { |
641 | writeConfig(modemGroup(), VOLUME_MEDIUM, s); | 643 | writeConfig(modemGroup(), VOLUME_MEDIUM, s); |
642 | } | 644 | } |
643 | 645 | ||
644 | 646 | ||
645 | QString PPPData::volumeHigh() { | 647 | QString PPPData::volumeHigh() { |
646 | QString tmp = readConfig(modemGroup(), VOLUME_HIGH, "M1L3"); | 648 | QString tmp = readConfig(modemGroup(), VOLUME_HIGH, "M1L3"); |
647 | if(tmp == "M1L4") | 649 | if(tmp == "M1L4") |
648 | tmp = "M1L3"; | 650 | tmp = "M1L3"; |
649 | return tmp; | 651 | return tmp; |
650 | } | 652 | } |
651 | 653 | ||
652 | 654 | ||
653 | void PPPData::setVolumeHigh(const QString &s) { | 655 | void PPPData::setVolumeHigh(const QString &s) { |
654 | writeConfig(modemGroup(), VOLUME_HIGH, s); | 656 | writeConfig(modemGroup(), VOLUME_HIGH, s); |
655 | } | 657 | } |
656 | 658 | ||
657 | 659 | ||
658 | QString PPPData::volumeInitString() { | 660 | QString PPPData::volumeInitString() { |
659 | QString s; | 661 | QString s; |
660 | 662 | ||
661 | switch(volume()) { | 663 | switch(volume()) { |
662 | case 0: | 664 | case 0: |
663 | s = volumeOff(); | 665 | s = volumeOff(); |
664 | break; | 666 | break; |
665 | case 1: | 667 | case 1: |
666 | s = volumeMedium(); | 668 | s = volumeMedium(); |
667 | break; | 669 | break; |
668 | case 2: | 670 | case 2: |
669 | s = volumeHigh(); | 671 | s = volumeHigh(); |
670 | break; | 672 | break; |
671 | default: | 673 | default: |
672 | s = volumeMedium(); | 674 | s = volumeMedium(); |
673 | } | 675 | } |
674 | 676 | ||
675 | return s; | 677 | return s; |
676 | } | 678 | } |
677 | 679 | ||
678 | 680 | ||
679 | int PPPData::volume() { | 681 | int PPPData::volume() { |
680 | return readNumConfig(modemGroup(), VOLUME_KEY, 1); | 682 | return readNumConfig(modemGroup(), VOLUME_KEY, 1); |
681 | } | 683 | } |
682 | 684 | ||
683 | 685 | ||
684 | void PPPData::setVolume(int i) { | 686 | void PPPData::setVolume(int i) { |
685 | writeConfig(modemGroup(), VOLUME_KEY, i); | 687 | writeConfig(modemGroup(), VOLUME_KEY, i); |
686 | } | 688 | } |
687 | 689 | ||
688 | int PPPData::waitForDialTone() { | 690 | int PPPData::waitForDialTone() { |
689 | return readNumConfig(modemGroup(), DIALTONEWAIT_KEY, 1); | 691 | return readNumConfig(modemGroup(), DIALTONEWAIT_KEY, 1); |
690 | } | 692 | } |
691 | 693 | ||
692 | void PPPData::setWaitForDialTone(int i) { | 694 | void PPPData::setWaitForDialTone(int i) { |
693 | writeConfig(modemGroup(), DIALTONEWAIT_KEY, i); | 695 | writeConfig(modemGroup(), DIALTONEWAIT_KEY, i); |
694 | } | 696 | } |
695 | 697 | ||
696 | void PPPData::setModemAnswerStr(const QString &n) { | 698 | void PPPData::setModemAnswerStr(const QString &n) { |
697 | writeConfig(modemGroup(), ANSWERSTR_KEY, n); | 699 | writeConfig(modemGroup(), ANSWERSTR_KEY, n); |
698 | } | 700 | } |
699 | 701 | ||
700 | 702 | ||
701 | const QString PPPData::modemRingResp() { | 703 | const QString PPPData::modemRingResp() { |
702 | return readConfig(modemGroup(), RINGRESP_KEY, "RING"); | 704 | return readConfig(modemGroup(), RINGRESP_KEY, "RING"); |
703 | } | 705 | } |
704 | 706 | ||
705 | 707 | ||
706 | void PPPData::setModemRingResp(const QString &n) { | 708 | void PPPData::setModemRingResp(const QString &n) { |
707 | writeConfig(modemGroup(), RINGRESP_KEY, n); | 709 | writeConfig(modemGroup(), RINGRESP_KEY, n); |
708 | } | 710 | } |
709 | 711 | ||
710 | 712 | ||
711 | const QString PPPData::modemAnswerResp() { | 713 | const QString PPPData::modemAnswerResp() { |
712 | return readConfig(modemGroup(), ANSWERRESP_KEY, "CONNECT"); | 714 | return readConfig(modemGroup(), ANSWERRESP_KEY, "CONNECT"); |
713 | } | 715 | } |
714 | 716 | ||
715 | 717 | ||
716 | void PPPData::setModemAnswerResp(const QString &n) { | 718 | void PPPData::setModemAnswerResp(const QString &n) { |
717 | writeConfig(modemGroup(), ANSWERRESP_KEY, n); | 719 | writeConfig(modemGroup(), ANSWERRESP_KEY, n); |
718 | } | 720 | } |
719 | 721 | ||
720 | 722 | ||
721 | const QString PPPData::enter() { | 723 | const QString PPPData::enter() { |
722 | return readConfig(modemGroup(), ENTER_KEY, "CR"); | 724 | return readConfig(modemGroup(), ENTER_KEY, "CR"); |
723 | } | 725 | } |
724 | 726 | ||
725 | 727 | ||
726 | void PPPData::setEnter(const QString &n) { | 728 | void PPPData::setEnter(const QString &n) { |
727 | writeConfig(modemGroup(), ENTER_KEY, n); | 729 | writeConfig(modemGroup(), ENTER_KEY, n); |
728 | } | 730 | } |
729 | 731 | ||
730 | 732 | ||
731 | // | 733 | // |
732 | // functions to set/return account information | 734 | // functions to set/return account information |
733 | // | 735 | // |
734 | 736 | ||
735 | //returns number of accounts | 737 | //returns number of accounts |
736 | int PPPData::count() const { | 738 | int PPPData::count() const { |
737 | return highcount + 1; | 739 | return highcount + 1; |
738 | } | 740 | } |
739 | 741 | ||
740 | 742 | ||
741 | bool PPPData::setAccount(const QString &aname) { | 743 | bool PPPData::setAccount(const QString &aname) { |
742 | odebug << "setting account to >" << aname.latin1() << "<" << oendl; | 744 | odebug << "setting account to >" << aname.latin1() << "<" << oendl; |
743 | for ( QStringList::Iterator it = accountList.begin(); it != accountList.end(); ++it ) { | 745 | for ( QStringList::Iterator it = accountList.begin(); it != accountList.end(); ++it ) { |
744 | cgroup = *it; | 746 | cgroup = *it; |
745 | odebug << "PPPData::setAccount " << cgroup.latin1() << "" << oendl; | 747 | odebug << "PPPData::setAccount " << cgroup.latin1() << "" << oendl; |
746 | odebug << "iterator " << (*it).latin1() << "" << oendl; | 748 | odebug << "iterator " << (*it).latin1() << "" << oendl; |
747 | if(accname() == aname) { | 749 | if(accname() == aname) { |
748 | odebug << "SUCCESS" << oendl; | 750 | odebug << "SUCCESS" << oendl; |
749 | return true; | 751 | return true; |
750 | } | 752 | } |
751 | 753 | ||
752 | } | 754 | } |
753 | odebug << "FAILURE" << oendl; | 755 | odebug << "FAILURE" << oendl; |
754 | return false; | 756 | return false; |
755 | } | 757 | } |
756 | 758 | ||
757 | /* | 759 | /* |
758 | bool PPPData::setAccountbyIndex(int i) { | 760 | bool PPPData::setAccountbyIndex(int i) { |
759 | if(i >= 0 && i <= highcount) { | 761 | if(i >= 0 && i <= highcount) { |
760 | QString tmp; | 762 | QString tmp; |
761 | tmp.sprintf("%s%i", ACCOUNT_GRP, i); | 763 | tmp.sprintf("%s%i", ACCOUNT_GRP, i); |
762 | if (_deleted.find(tmp)!=_deleted.end()) return false; | 764 | if (_deleted.find(tmp)!=_deleted.end()) return false; |
763 | caccount = i; | 765 | caccount = i; |
764 | cgroup = tmp; | 766 | cgroup = tmp; |
765 | return true; | 767 | return true; |
766 | } | 768 | } |
767 | return false; | 769 | return false; |
768 | } | 770 | } |
769 | */ | 771 | */ |
770 | 772 | ||
771 | bool PPPData::isUniqueAccname(const QString &n) { | 773 | bool PPPData::isUniqueAccname(const QString &n) { |
772 | QString save_cgroup = cgroup; | 774 | QString save_cgroup = cgroup; |
773 | for ( QStringList::Iterator it = accountList.begin(); it != accountList.end(); ++it ) { | 775 | for ( QStringList::Iterator it = accountList.begin(); it != accountList.end(); ++it ) { |
774 | cgroup = *it; | 776 | cgroup = *it; |
775 | odebug << "PPPData::setAccount " << cgroup.latin1() << "" << oendl; | 777 | odebug << "PPPData::setAccount " << cgroup.latin1() << "" << oendl; |
776 | odebug << "" << (*it).latin1() << " \n" << oendl; | 778 | odebug << "" << (*it).latin1() << " \n" << oendl; |
777 | if(accname() == n && cgroup != save_cgroup) { | 779 | if(accname() == n && cgroup != save_cgroup) { |
778 | cgroup = save_cgroup; | 780 | cgroup = save_cgroup; |
779 | odebug << "SUCCESS" << oendl; | 781 | odebug << "SUCCESS" << oendl; |
780 | return false; | 782 | return false; |
781 | } | 783 | } |
782 | 784 | ||
783 | } | 785 | } |
784 | cgroup = save_cgroup; | 786 | cgroup = save_cgroup; |
785 | return true; | 787 | return true; |
786 | } | 788 | } |
787 | 789 | ||
788 | 790 | ||
789 | bool PPPData::isUniqueDevname(const QString &n) { | 791 | bool PPPData::isUniqueDevname(const QString &n) { |
790 | QString save_mName = _modemName; | 792 | QString save_mName = _modemName; |
791 | odebug << "PPPData::isUniqueDevname checking if " << n.latin1() << " is unique" << oendl; | 793 | odebug << "PPPData::isUniqueDevname checking if " << n.latin1() << " is unique" << oendl; |
792 | for ( QStringList::Iterator it = deviceList.begin(); it != deviceList.end(); ++it ) { | 794 | for ( QStringList::Iterator it = deviceList.begin(); it != deviceList.end(); ++it ) { |
793 | _modemName = *it; | 795 | _modemName = *it; |
794 | odebug << "PPPData::isUniqueDevname " << n.latin1() << " == " << devname().latin1() << "" << oendl; | 796 | odebug << "PPPData::isUniqueDevname " << n.latin1() << " == " << devname().latin1() << "" << oendl; |
795 | if(devname() == n && _modemName != save_mName) { | 797 | if(devname() == n && _modemName != save_mName) { |
796 | _modemName = save_mName; | 798 | _modemName = save_mName; |
797 | odebug << "NOT UNIQUE" << oendl; | 799 | odebug << "NOT UNIQUE" << oendl; |
798 | return false; | 800 | return false; |
799 | } | 801 | } |
800 | 802 | ||
801 | } | 803 | } |
802 | _modemName = save_mName; | 804 | _modemName = save_mName; |
803 | return true; | 805 | return true; |
804 | } | 806 | } |
805 | 807 | ||
806 | 808 | ||
807 | bool PPPData::deleteAccount() { | 809 | bool PPPData::deleteAccount() { |
808 | // FIXME: check if this account exists in a config... | 810 | // FIXME: check if this account exists in a config... |
809 | Config cfg = PPPData::config(); | 811 | Config cfg = PPPData::config(); |
810 | cfg.setGroup(cgroup); | 812 | cfg.setGroup(cgroup); |
811 | cfg.clearGroup(); | 813 | cfg.clearGroup(); |
812 | accountList.remove(cgroup); | 814 | accountList.remove(cgroup); |
813 | 815 | ||
814 | QString key; | 816 | QString key; |
815 | QStringList keys; | 817 | QStringList keys; |
816 | for( QMap<QString,QString>::Iterator it = stringEntries.begin(); | 818 | for( QMap<QString,QString>::Iterator it = stringEntries.begin(); |
817 | it != stringEntries.end(); ++it ){ | 819 | it != stringEntries.end(); ++it ){ |
818 | QString val = it.data(); | 820 | QString val = it.data(); |
819 | key = it.key(); | 821 | key = it.key(); |
820 | keys = QStringList::split( "SEPARATOR", key ); | 822 | keys = QStringList::split( "SEPARATOR", key ); |
821 | if(keys[0]==cgroup){ | 823 | if(keys[0]==cgroup){ |
822 | stringEntries.remove( it ); | 824 | stringEntries.remove( it ); |
823 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val.latin1() << "<" << oendl; | 825 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val.latin1() << "<" << oendl; |
824 | } | 826 | } |
825 | } | 827 | } |
826 | for( QMap<QString,int>::Iterator it = intEntries.begin(); | 828 | for( QMap<QString,int>::Iterator it = intEntries.begin(); |
827 | it != intEntries.end(); ++it ){ | 829 | it != intEntries.end(); ++it ){ |
828 | int val = it.data(); | 830 | int val = it.data(); |
829 | key = it.key(); | 831 | key = it.key(); |
830 | keys = QStringList::split( "SEPARATOR", key ); | 832 | keys = QStringList::split( "SEPARATOR", key ); |
831 | if(keys[0]==cgroup){ | 833 | if(keys[0]==cgroup){ |
832 | intEntries.remove( it ); | 834 | intEntries.remove( it ); |
833 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val << "<" << oendl; | 835 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val << "<" << oendl; |
834 | } | 836 | } |
835 | } | 837 | } |
836 | for( QMap<QString,QStringList>::Iterator it = listEntries.begin(); | 838 | for( QMap<QString,QStringList>::Iterator it = listEntries.begin(); |
837 | it != listEntries.end(); ++it ){ | 839 | it != listEntries.end(); ++it ){ |
838 | QStringList val = it.data(); | 840 | QStringList val = it.data(); |
839 | key = it.key(); | 841 | key = it.key(); |
840 | if(keys[0]==cgroup){ | 842 | if(keys[0]==cgroup){ |
841 | listEntries.remove( it ); | 843 | listEntries.remove( it ); |
842 | sepEntries.remove( key ); | 844 | sepEntries.remove( key ); |
843 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val.join("").latin1() << "<" << oendl; | 845 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val.join("").latin1() << "<" << oendl; |
844 | } | 846 | } |
845 | } | 847 | } |
846 | 848 | ||
847 | return true; | 849 | return true; |
848 | } | 850 | } |
849 | 851 | ||
850 | 852 | ||
851 | bool PPPData::deleteAccount(const QString &aname) { | 853 | bool PPPData::deleteAccount(const QString &aname) { |
852 | if(!setAccount(aname)) | 854 | if(!setAccount(aname)) |
853 | return false; | 855 | return false; |
854 | 856 | ||
855 | deleteAccount(); | 857 | deleteAccount(); |
856 | 858 | ||
857 | return true; | 859 | return true; |
858 | } | 860 | } |
859 | 861 | ||
860 | 862 | ||
861 | int PPPData::newaccount() { | 863 | int PPPData::newaccount() { |
862 | 864 | ||
863 | odebug << "PPPData::newaccount highcount " << highcount << "/" << MAX_ACCOUNTS << "" << oendl; | 865 | odebug << "PPPData::newaccount highcount " << highcount << "/" << MAX_ACCOUNTS << "" << oendl; |
864 | // if(!config) open(); | 866 | // if(!config) open(); |
865 | // if (highcount >= MAX_ACCOUNTS) return -1; | 867 | // if (highcount >= MAX_ACCOUNTS) return -1; |
866 | 868 | ||
867 | 869 | ||
868 | QString tmp; | 870 | QString tmp; |
869 | tmp.sprintf("%s%i", ACCOUNT_GRP, ++highcount); | 871 | tmp.sprintf("%s%i", ACCOUNT_GRP, ++highcount); |
870 | cgroup = QString(tmp); | 872 | cgroup = QString(tmp); |
871 | accountList << tmp; | 873 | accountList << tmp; |
872 | odebug << "PPPData::newaccount() Group: >" << cgroup.latin1() << "<" << oendl; | 874 | odebug << "PPPData::newaccount() Group: >" << cgroup.latin1() << "<" << oendl; |
873 | setpppdArgumentDefaults(); | 875 | setpppdArgumentDefaults(); |
874 | return highcount; | 876 | return highcount; |
875 | } | 877 | } |
876 | 878 | ||
877 | int PPPData::copyaccount(const QString&) { | 879 | int PPPData::copyaccount(const QString&) { |
878 | // FIXME: PPPData::copyaccount | 880 | // FIXME: PPPData::copyaccount |
879 | // if(highcount >= MAX_ACCOUNTS) | 881 | // if(highcount >= MAX_ACCOUNTS) |
880 | return -1; | 882 | return -1; |
881 | 883 | ||
882 | // setAccountbyIndex(i); | 884 | // setAccountbyIndex(i); |
883 | 885 | ||
884 | // QMap <QString, QString> map = config->entryMap(cgroup); | 886 | // QMap <QString, QString> map = config->entryMap(cgroup); |
885 | // QMap <QString, QString>::ConstIterator it = map.begin(); | 887 | // QMap <QString, QString>::ConstIterator it = map.begin(); |
886 | 888 | ||
887 | // QString newname = QObject::tr("%1_copy").arg(accname()); | 889 | // QString newname = QObject::tr("%1_copy").arg(accname()); |
888 | 890 | ||
889 | // newaccount(); | 891 | // newaccount(); |
890 | 892 | ||
891 | // while (it != map.end()) { | 893 | // while (it != map.end()) { |
892 | // config->writeEntry(it.key(), *it); | 894 | // config->writeEntry(it.key(), *it); |
893 | // it++; | 895 | // it++; |
894 | // } | 896 | // } |
895 | 897 | ||
896 | // setAccname(newname); | 898 | // setAccname(newname); |
897 | 899 | ||
898 | // return caccount; | 900 | // return caccount; |
899 | } | 901 | } |
900 | 902 | ||
901 | 903 | ||
902 | const QString PPPData::accname() { | 904 | const QString PPPData::accname() { |
903 | return readConfig(cgroup, NAME_KEY); | 905 | return readConfig(cgroup, NAME_KEY); |
904 | } | 906 | } |
905 | 907 | ||
906 | void PPPData::setAccname(const QString &n) { | 908 | void PPPData::setAccname(const QString &n) { |
907 | if(!cgroup.isNull()) { | 909 | if(!cgroup.isNull()) { |
908 | // are we manipulating the default account's name ? then change it, too. | 910 | // are we manipulating the default account's name ? then change it, too. |
909 | bool def = accname() == defaultAccount(); | 911 | bool def = accname() == defaultAccount(); |
910 | writeConfig(cgroup, NAME_KEY, n); | 912 | writeConfig(cgroup, NAME_KEY, n); |
911 | if (def) | 913 | if (def) |
912 | setDefaultAccount(n); | 914 | setDefaultAccount(n); |
913 | } | 915 | } |
914 | writeConfig(cgroup, NAME_KEY, n); | 916 | writeConfig(cgroup, NAME_KEY, n); |
915 | } | 917 | } |
916 | 918 | ||
917 | 919 | ||
918 | #define SEPARATOR_CHAR '&' | 920 | #define SEPARATOR_CHAR '&' |
919 | QStringList &PPPData::phonenumbers() { | 921 | QStringList &PPPData::phonenumbers() { |
920 | 922 | ||
921 | readListConfig(cgroup, PHONENUMBER_KEY, phonelist, SEPARATOR_CHAR); | 923 | readListConfig(cgroup, PHONENUMBER_KEY, phonelist, SEPARATOR_CHAR); |
922 | return phonelist; | 924 | return phonelist; |
923 | 925 | ||
924 | } | 926 | } |
925 | 927 | ||
926 | 928 | ||
927 | const QString PPPData::phonenumber() { | 929 | const QString PPPData::phonenumber() { |
928 | return readConfig(cgroup, PHONENUMBER_KEY); | 930 | return readConfig(cgroup, PHONENUMBER_KEY); |
929 | } | 931 | } |
930 | 932 | ||
931 | 933 | ||
932 | void PPPData::setPhonenumber(const QString &n) { | 934 | void PPPData::setPhonenumber(const QString &n) { |
933 | writeConfig(cgroup, PHONENUMBER_KEY, n); | 935 | writeConfig(cgroup, PHONENUMBER_KEY, n); |
934 | } | 936 | } |
935 | 937 | ||
936 | 938 | ||
937 | const QString PPPData::dialPrefix() { | 939 | const QString PPPData::dialPrefix() { |
938 | return readConfig(cgroup, DIAL_PREFIX_KEY, ""); | 940 | return readConfig(cgroup, DIAL_PREFIX_KEY, ""); |
939 | } | 941 | } |
940 | 942 | ||
941 | 943 | ||
942 | void PPPData::setDialPrefix(const QString &s) { | 944 | void PPPData::setDialPrefix(const QString &s) { |
943 | writeConfig(cgroup, DIAL_PREFIX_KEY, s); | 945 | writeConfig(cgroup, DIAL_PREFIX_KEY, s); |
944 | } | 946 | } |
945 | 947 | ||
946 | 948 | ||
947 | int PPPData::authMethod() { | 949 | int PPPData::authMethod() { |
948 | return readNumConfig(cgroup, AUTH_KEY, 0); | 950 | return readNumConfig(cgroup, AUTH_KEY, 0); |
949 | } | 951 | } |
950 | 952 | ||
951 | 953 | ||
952 | void PPPData::setAuthMethod(int value) { | 954 | void PPPData::setAuthMethod(int value) { |
953 | writeConfig(cgroup, AUTH_KEY, value); | 955 | writeConfig(cgroup, AUTH_KEY, value); |
954 | } | 956 | } |
955 | 957 | ||
956 | 958 | ||
957 | const QString PPPData::storedUsername() { | 959 | const QString PPPData::storedUsername() { |
958 | return readConfig(cgroup, STORED_USERNAME_KEY, ""); | 960 | return readConfig(cgroup, STORED_USERNAME_KEY, ""); |
959 | } | 961 | } |
960 | 962 | ||
961 | 963 | ||
962 | void PPPData::setStoredUsername(const QString &b) { | 964 | void PPPData::setStoredUsername(const QString &b) { |
963 | writeConfig(cgroup, STORED_USERNAME_KEY, b); | 965 | writeConfig(cgroup, STORED_USERNAME_KEY, b); |
964 | } | 966 | } |
965 | 967 | ||
966 | 968 | ||
967 | const QString PPPData::storedPassword() { | 969 | const QString PPPData::storedPassword() { |
968 | odebug << "getting stored pw" << oendl; | 970 | odebug << "getting stored pw" << oendl; |
969 | odebug << "g " << cgroup.latin1() << "" << oendl; | 971 | odebug << "g " << cgroup.latin1() << "" << oendl; |
970 | odebug << "k " << STORED_PASSWORD_KEY << "" << oendl; | 972 | odebug << "k " << STORED_PASSWORD_KEY << "" << oendl; |
971 | return readConfig(cgroup, STORED_PASSWORD_KEY, ""); | 973 | return readConfig(cgroup, STORED_PASSWORD_KEY, ""); |
972 | } | 974 | } |
973 | 975 | ||
974 | 976 | ||
975 | void PPPData::setStoredPassword(const QString &b) { | 977 | void PPPData::setStoredPassword(const QString &b) { |
976 | writeConfig(cgroup, STORED_PASSWORD_KEY, b); | 978 | writeConfig(cgroup, STORED_PASSWORD_KEY, b); |
977 | } | 979 | } |
978 | 980 | ||
979 | 981 | ||
980 | bool PPPData::storePassword() { | 982 | bool PPPData::storePassword() { |
981 | return (bool)readNumConfig(cgroup, STORE_PASSWORD_KEY, 1); | 983 | return (bool)readNumConfig(cgroup, STORE_PASSWORD_KEY, 1); |
982 | } | 984 | } |
983 | 985 | ||
984 | 986 | ||
985 | const QString PPPData::command_before_connect() { | 987 | const QString PPPData::command_before_connect() { |
986 | return readConfig(cgroup, BEFORE_CONNECT_KEY); | 988 | return readConfig(cgroup, BEFORE_CONNECT_KEY); |
987 | } | 989 | } |
988 | 990 | ||
989 | 991 | ||
990 | void PPPData::setCommand_before_connect(const QString &n) { | 992 | void PPPData::setCommand_before_connect(const QString &n) { |
991 | writeConfig(cgroup, BEFORE_CONNECT_KEY, n); | 993 | writeConfig(cgroup, BEFORE_CONNECT_KEY, n); |
992 | } | 994 | } |
993 | 995 | ||
994 | 996 | ||
995 | void PPPData::setStorePassword(bool b) { | 997 | void PPPData::setStorePassword(bool b) { |
996 | writeConfig(cgroup, STORE_PASSWORD_KEY, (int)b); | 998 | writeConfig(cgroup, STORE_PASSWORD_KEY, (int)b); |
997 | } | 999 | } |
998 | 1000 | ||
999 | 1001 | ||
1000 | const QString PPPData::command_on_connect() { | 1002 | const QString PPPData::command_on_connect() { |
1001 | return readConfig(cgroup, COMMAND_KEY); | 1003 | return readConfig(cgroup, COMMAND_KEY); |
1002 | } | 1004 | } |
1003 | 1005 | ||
1004 | 1006 | ||
1005 | void PPPData::setCommand_on_connect(const QString &n) { | 1007 | void PPPData::setCommand_on_connect(const QString &n) { |
1006 | writeConfig(cgroup, COMMAND_KEY, n); | 1008 | writeConfig(cgroup, COMMAND_KEY, n); |
1007 | } | 1009 | } |
1008 | 1010 | ||
1009 | 1011 | ||
1010 | const QString PPPData::command_on_disconnect() { | 1012 | const QString PPPData::command_on_disconnect() { |
1011 | return readConfig(cgroup, DISCONNECT_COMMAND_KEY); | 1013 | return readConfig(cgroup, DISCONNECT_COMMAND_KEY); |
1012 | } | 1014 | } |
1013 | 1015 | ||
1014 | 1016 | ||
1015 | void PPPData::setCommand_on_disconnect(const QString &n) { | 1017 | void PPPData::setCommand_on_disconnect(const QString &n) { |
1016 | writeConfig(cgroup, DISCONNECT_COMMAND_KEY, n); | 1018 | writeConfig(cgroup, DISCONNECT_COMMAND_KEY, n); |
1017 | } | 1019 | } |
1018 | 1020 | ||
1019 | 1021 | ||
1020 | const QString PPPData::command_before_disconnect() { | 1022 | const QString PPPData::command_before_disconnect() { |
1021 | return readConfig(cgroup, BEFORE_DISCONNECT_KEY); | 1023 | return readConfig(cgroup, BEFORE_DISCONNECT_KEY); |
1022 | } | 1024 | } |
1023 | 1025 | ||
1024 | 1026 | ||
1025 | void PPPData::setCommand_before_disconnect(const QString &n) { | 1027 | void PPPData::setCommand_before_disconnect(const QString &n) { |
1026 | writeConfig(cgroup, BEFORE_DISCONNECT_KEY, n); | 1028 | writeConfig(cgroup, BEFORE_DISCONNECT_KEY, n); |
1027 | } | 1029 | } |
1028 | 1030 | ||
1029 | 1031 | ||
1030 | const QString PPPData::ipaddr() { | 1032 | const QString PPPData::ipaddr() { |
1031 | return readConfig(cgroup, IPADDR_KEY); | 1033 | return readConfig(cgroup, IPADDR_KEY); |
1032 | } | 1034 | } |
1033 | 1035 | ||
1034 | 1036 | ||
1035 | void PPPData::setIpaddr(const QString &n) { | 1037 | void PPPData::setIpaddr(const QString &n) { |
1036 | writeConfig(cgroup, IPADDR_KEY, n); | 1038 | writeConfig(cgroup, IPADDR_KEY, n); |
1037 | } | 1039 | } |
1038 | 1040 | ||
1039 | 1041 | ||
1040 | const QString PPPData::subnetmask() { | 1042 | const QString PPPData::subnetmask() { |
1041 | return readConfig(cgroup, SUBNETMASK_KEY); | 1043 | return readConfig(cgroup, SUBNETMASK_KEY); |
1042 | } | 1044 | } |
1043 | 1045 | ||
1044 | 1046 | ||
1045 | void PPPData::setSubnetmask(const QString &n) { | 1047 | void PPPData::setSubnetmask(const QString &n) { |
1046 | writeConfig(cgroup, SUBNETMASK_KEY, n); | 1048 | writeConfig(cgroup, SUBNETMASK_KEY, n); |
1047 | } | 1049 | } |
1048 | 1050 | ||
1049 | 1051 | ||
1050 | bool PPPData::autoname() { | 1052 | bool PPPData::autoname() { |
1051 | return (bool) readNumConfig(cgroup, AUTONAME_KEY, false); | 1053 | return (bool) readNumConfig(cgroup, AUTONAME_KEY, false); |
1052 | } | 1054 | } |
1053 | 1055 | ||
1054 | 1056 | ||
1055 | void PPPData::setAutoname(bool set) { | 1057 | void PPPData::setAutoname(bool set) { |
1056 | writeConfig(cgroup, AUTONAME_KEY, (int) set); | 1058 | writeConfig(cgroup, AUTONAME_KEY, (int) set); |
1057 | } | 1059 | } |
1058 | 1060 | ||
1059 | 1061 | ||
1060 | bool PPPData::AcctEnabled() { | 1062 | bool PPPData::AcctEnabled() { |
1061 | return (bool) readNumConfig(cgroup, ACCTENABLED_KEY, false); | 1063 | return (bool) readNumConfig(cgroup, ACCTENABLED_KEY, false); |
1062 | } | 1064 | } |
1063 | 1065 | ||
1064 | 1066 | ||
1065 | void PPPData::setAcctEnabled(bool set) { | 1067 | void PPPData::setAcctEnabled(bool set) { |
1066 | writeConfig(cgroup, ACCTENABLED_KEY, (int) set); | 1068 | writeConfig(cgroup, ACCTENABLED_KEY, (int) set); |
1067 | } | 1069 | } |
1068 | 1070 | ||
1069 | 1071 | ||
1070 | // int PPPData::VolAcctEnabled() { | 1072 | // int PPPData::VolAcctEnabled() { |
1071 | // return readNumConfig(cgroup, VOLACCTENABLED_KEY, 0); | 1073 | // return readNumConfig(cgroup, VOLACCTENABLED_KEY, 0); |
1072 | // } | 1074 | // } |
1073 | 1075 | ||
1074 | 1076 | ||
1075 | // void PPPData::setVolAcctEnabled(int set) { | 1077 | // void PPPData::setVolAcctEnabled(int set) { |
1076 | // writeConfig(cgroup, VOLACCTENABLED_KEY, set); | 1078 | // writeConfig(cgroup, VOLACCTENABLED_KEY, set); |
1077 | // } | 1079 | // } |
1078 | 1080 | ||
1079 | 1081 | ||
1080 | const QString PPPData::gateway() { | 1082 | const QString PPPData::gateway() { |
1081 | return readConfig(cgroup, GATEWAY_KEY); | 1083 | return readConfig(cgroup, GATEWAY_KEY); |
1082 | } | 1084 | } |
1083 | 1085 | ||
1084 | 1086 | ||
1085 | void PPPData::setGateway(const QString &n ) { | 1087 | void PPPData::setGateway(const QString &n ) { |
1086 | writeConfig(cgroup, GATEWAY_KEY, n); | 1088 | writeConfig(cgroup, GATEWAY_KEY, n); |
1087 | } | 1089 | } |
1088 | 1090 | ||
1089 | 1091 | ||
1090 | bool PPPData::defaultroute() { | 1092 | bool PPPData::defaultroute() { |
1091 | // default route is by default 'on'. | 1093 | // default route is by default 'on'. |
1092 | return (bool) readNumConfig(cgroup, DEFAULTROUTE_KEY, true); | 1094 | return (bool) readNumConfig(cgroup, DEFAULTROUTE_KEY, true); |
1093 | } | 1095 | } |
1094 | 1096 | ||
1095 | 1097 | ||
1096 | void PPPData::setDefaultroute(bool set) { | 1098 | void PPPData::setDefaultroute(bool set) { |
1097 | writeConfig(cgroup, DEFAULTROUTE_KEY, (int) set); | 1099 | writeConfig(cgroup, DEFAULTROUTE_KEY, (int) set); |
1098 | } | 1100 | } |
1099 | 1101 | ||
1100 | 1102 | ||
1101 | bool PPPData::autoDNS() { | 1103 | bool PPPData::autoDNS() { |
1102 | bool set = (bool) readNumConfig(cgroup, AUTODNS_KEY, true); | 1104 | bool set = (bool) readNumConfig(cgroup, AUTODNS_KEY, true); |
1103 | return (set && pppdVersionMin(2, 3, 7)); | 1105 | return (set && pppdVersionMin(2, 3, 7)); |
1104 | } | 1106 | } |
1105 | 1107 | ||
1106 | 1108 | ||
1107 | void PPPData::setAutoDNS(bool set) { | 1109 | void PPPData::setAutoDNS(bool set) { |
1108 | writeConfig(cgroup, AUTODNS_KEY, (int) set); | 1110 | writeConfig(cgroup, AUTODNS_KEY, (int) set); |
1109 | } | 1111 | } |
1110 | 1112 | ||
1111 | 1113 | ||
1112 | void PPPData::setExDNSDisabled(bool set) { | 1114 | void PPPData::setExDNSDisabled(bool set) { |
1113 | writeConfig(cgroup, EXDNSDISABLED_KEY, (int) set); | 1115 | writeConfig(cgroup, EXDNSDISABLED_KEY, (int) set); |
1114 | } | 1116 | } |
1115 | 1117 | ||
1116 | 1118 | ||
1117 | bool PPPData::exDNSDisabled() { | 1119 | bool PPPData::exDNSDisabled() { |
1118 | return (bool) readNumConfig(cgroup, EXDNSDISABLED_KEY,0); | 1120 | return (bool) readNumConfig(cgroup, EXDNSDISABLED_KEY,0); |
1119 | } | 1121 | } |
1120 | 1122 | ||
1121 | 1123 | ||
1122 | QStringList &PPPData::dns() { | 1124 | QStringList &PPPData::dns() { |
1123 | static QStringList dnslist; | 1125 | static QStringList dnslist; |
1124 | 1126 | ||
1125 | readListConfig(cgroup, DNS_KEY, dnslist); | 1127 | readListConfig(cgroup, DNS_KEY, dnslist); |
1126 | while(dnslist.count() > MAX_DNS_ENTRIES) | 1128 | while(dnslist.count() > MAX_DNS_ENTRIES) |
1127 | dnslist.remove(dnslist.last()); | 1129 | dnslist.remove(dnslist.last()); |
1128 | 1130 | ||
1129 | return dnslist; | 1131 | return dnslist; |
1130 | } | 1132 | } |
1131 | 1133 | ||
1132 | 1134 | ||
1133 | void PPPData::setDns(QStringList &list) { | 1135 | void PPPData::setDns(QStringList &list) { |
1134 | writeListConfig(cgroup, DNS_KEY, list); | 1136 | writeListConfig(cgroup, DNS_KEY, list); |
1135 | } | 1137 | } |
1136 | 1138 | ||
1137 | 1139 | ||
1138 | const QString PPPData::domain() { | 1140 | const QString PPPData::domain() { |
1139 | return readConfig(cgroup, DOMAIN_KEY); | 1141 | return readConfig(cgroup, DOMAIN_KEY); |
1140 | } | 1142 | } |
1141 | 1143 | ||
1142 | 1144 | ||
1143 | void PPPData::setDomain(const QString &n ) { | 1145 | void PPPData::setDomain(const QString &n ) { |
1144 | writeConfig(cgroup, DOMAIN_KEY, n); | 1146 | writeConfig(cgroup, DOMAIN_KEY, n); |
1145 | } | 1147 | } |
1146 | 1148 | ||
1147 | 1149 | ||
1148 | QStringList &PPPData::scriptType() { | 1150 | QStringList &PPPData::scriptType() { |
1149 | static QStringList typelist; | 1151 | static QStringList typelist; |
1150 | 1152 | ||
1151 | readListConfig(cgroup, SCRIPTCOM_KEY, typelist); | 1153 | readListConfig(cgroup, SCRIPTCOM_KEY, typelist); |
1152 | while(typelist.count() > MAX_SCRIPT_ENTRIES) | 1154 | while(typelist.count() > MAX_SCRIPT_ENTRIES) |
1153 | typelist.remove(typelist.last()); | 1155 | typelist.remove(typelist.last()); |
1154 | 1156 | ||
1155 | return typelist; | 1157 | return typelist; |
1156 | } | 1158 | } |
1157 | 1159 | ||
1158 | 1160 | ||
1159 | void PPPData::setScriptType(QStringList &list) { | 1161 | void PPPData::setScriptType(QStringList &list) { |
1160 | writeListConfig(cgroup, SCRIPTCOM_KEY, list); | 1162 | writeListConfig(cgroup, SCRIPTCOM_KEY, list); |
1161 | } | 1163 | } |
1162 | 1164 | ||
1163 | 1165 | ||
1164 | QStringList &PPPData::script() { | 1166 | QStringList &PPPData::script() { |
1165 | static QStringList scriptlist; | 1167 | static QStringList scriptlist; |
1166 | 1168 | ||
1167 | readListConfig(cgroup, SCRIPTARG_KEY, scriptlist); | 1169 | readListConfig(cgroup, SCRIPTARG_KEY, scriptlist); |
1168 | while(scriptlist.count() > MAX_SCRIPT_ENTRIES) | 1170 | while(scriptlist.count() > MAX_SCRIPT_ENTRIES) |
1169 | scriptlist.remove(scriptlist.last()); | 1171 | scriptlist.remove(scriptlist.last()); |
1170 | 1172 | ||
1171 | return scriptlist; | 1173 | return scriptlist; |
1172 | } | 1174 | } |
1173 | 1175 | ||
1174 | 1176 | ||
1175 | void PPPData::setScript(QStringList &list) { | 1177 | void PPPData::setScript(QStringList &list) { |
1176 | writeListConfig(cgroup, SCRIPTARG_KEY, list); | 1178 | writeListConfig(cgroup, SCRIPTARG_KEY, list); |
1177 | } | 1179 | } |
1178 | 1180 | ||
1179 | 1181 | ||
1180 | // const QString PPPData::accountingFile() { | 1182 | // const QString PPPData::accountingFile() { |
1181 | // return readConfig(cgroup, ACCTFILE_KEY); | 1183 | // return readConfig(cgroup, ACCTFILE_KEY); |
1182 | // } | 1184 | // } |
1183 | 1185 | ||
1184 | 1186 | ||
1185 | // void PPPData::setAccountingFile(const QString &n) { | 1187 | // void PPPData::setAccountingFile(const QString &n) { |
1186 | // writeConfig(cgroup, ACCTFILE_KEY, n); | 1188 | // writeConfig(cgroup, ACCTFILE_KEY, n); |
1187 | // } | 1189 | // } |
1188 | 1190 | ||
1189 | 1191 | ||
1190 | // const QString PPPData::totalCosts() { | 1192 | // const QString PPPData::totalCosts() { |
1191 | // return readConfig(cgroup, TOTALCOSTS_KEY); | 1193 | // return readConfig(cgroup, TOTALCOSTS_KEY); |
1192 | // } | 1194 | // } |
1193 | 1195 | ||
1194 | 1196 | ||
1195 | // void PPPData::setTotalCosts(const QString &n) { | 1197 | // void PPPData::setTotalCosts(const QString &n) { |
1196 | // writeConfig(cgroup, TOTALCOSTS_KEY, n); | 1198 | // writeConfig(cgroup, TOTALCOSTS_KEY, n); |
1197 | // } | 1199 | // } |
1198 | 1200 | ||
1199 | 1201 | ||
1200 | // int PPPData::totalBytes() { | 1202 | // int PPPData::totalBytes() { |
1201 | // return readNumConfig(cgroup, TOTALBYTES_KEY, 0); | 1203 | // return readNumConfig(cgroup, TOTALBYTES_KEY, 0); |
1202 | // } | 1204 | // } |
1203 | 1205 | ||
1204 | // void PPPData::setTotalBytes(int n) { | 1206 | // void PPPData::setTotalBytes(int n) { |
1205 | // writeConfig(cgroup, TOTALBYTES_KEY, n); | 1207 | // writeConfig(cgroup, TOTALBYTES_KEY, n); |
1206 | // } | 1208 | // } |
1207 | 1209 | ||
1208 | 1210 | ||
1209 | QStringList &PPPData::pppdArgument() { | 1211 | QStringList &PPPData::pppdArgument() { |
1210 | static QStringList arglist; | 1212 | static QStringList arglist; |
1211 | 1213 | ||
1212 | while(arglist.count() > MAX_PPPD_ARGUMENTS) | 1214 | while(arglist.count() > MAX_PPPD_ARGUMENTS) |
1213 | arglist.remove(arglist.last()); | 1215 | arglist.remove(arglist.last()); |
1214 | readListConfig(cgroup, PPPDARG_KEY, arglist); | 1216 | readListConfig(cgroup, PPPDARG_KEY, arglist); |
1215 | 1217 | ||
1216 | return arglist; | 1218 | return arglist; |
1217 | } | 1219 | } |
1218 | 1220 | ||
1219 | 1221 | ||
1220 | void PPPData::setpppdArgument(QStringList &args) { | 1222 | void PPPData::setpppdArgument(QStringList &args) { |
1221 | writeListConfig(cgroup, PPPDARG_KEY, args); | 1223 | writeListConfig(cgroup, PPPDARG_KEY, args); |
1222 | } | 1224 | } |
1223 | 1225 | ||
1224 | 1226 | ||
1225 | void PPPData::setpppdArgumentDefaults() { | 1227 | void PPPData::setpppdArgumentDefaults() { |
1226 | QStringList arg; | 1228 | QStringList arg; |
1227 | arg << "lcp-echo-failure 0"; | 1229 | arg << "lcp-echo-failure 0"; |
1228 | setpppdArgument(arg); | 1230 | setpppdArgument(arg); |
1229 | } | 1231 | } |
1230 | 1232 | ||
1231 | 1233 | ||
1232 | // // graphing widget | 1234 | // // graphing widget |
1233 | // void PPPData::setGraphingOptions(bool enable, | 1235 | // void PPPData::setGraphingOptions(bool enable, |
1234 | // QColor bg, | 1236 | // QColor bg, |
1235 | // QColor text, | 1237 | // QColor text, |
1236 | // QColor in, | 1238 | // QColor in, |
1237 | // QColor out) | 1239 | // QColor out) |
1238 | // { | 1240 | // { |
1239 | // if(config) { | 1241 | // if(config) { |
1240 | // config->setGroup(GRAPH_GRP); | 1242 | // config->setGroup(GRAPH_GRP); |
1241 | // config->writeEntry(GENABLED, enable); | 1243 | // config->writeEntry(GENABLED, enable); |
1242 | // // config->writeEntry(GCOLOR_BG, bg); | 1244 | // // config->writeEntry(GCOLOR_BG, bg); |
1243 | // // config->writeEntry(GCOLOR_TEXT, text); | 1245 | // // config->writeEntry(GCOLOR_TEXT, text); |
1244 | // // config->writeEntry(GCOLOR_IN, in); | 1246 | // // config->writeEntry(GCOLOR_IN, in); |
1245 | // // config->writeEntry(GCOLOR_OUT, out); | 1247 | // // config->writeEntry(GCOLOR_OUT, out); |
1246 | // } | 1248 | // } |
1247 | // } | 1249 | // } |
1248 | 1250 | ||
1249 | // void PPPData::graphingOptions(bool &enable, | 1251 | // void PPPData::graphingOptions(bool &enable, |
1250 | // QColor &bg, | 1252 | // QColor &bg, |
1251 | // QColor &text, | 1253 | // QColor &text, |
1252 | // QColor &in, | 1254 | // QColor &in, |
1253 | // QColor &out) | 1255 | // QColor &out) |
1254 | // { | 1256 | // { |
1255 | // QColor c; | 1257 | // QColor c; |
1256 | 1258 | ||
1257 | // if(config) { | 1259 | // if(config) { |
1258 | // config->setGroup(GRAPH_GRP); | 1260 | // config->setGroup(GRAPH_GRP); |
1259 | // enable = config->readBoolEntry(GENABLED, true); | 1261 | // enable = config->readBoolEntry(GENABLED, true); |
1260 | // bg = Qt::white; | 1262 | // bg = Qt::white; |
1261 | // //bg = config->readColorEntry(GCOLOR_BG, &c); | 1263 | // //bg = config->readColorEntry(GCOLOR_BG, &c); |
1262 | // text = Qt::black; | 1264 | // text = Qt::black; |
1263 | // //text = config->readColorEntry(GCOLOR_TEXT, &c); | 1265 | // //text = config->readColorEntry(GCOLOR_TEXT, &c); |
1264 | // in = Qt::blue; | 1266 | // in = Qt::blue; |
1265 | // //in = config->readColorEntry(GCOLOR_IN, &c); | 1267 | // //in = config->readColorEntry(GCOLOR_IN, &c); |
1266 | // out = Qt::red; | 1268 | // out = Qt::red; |
1267 | // //out = config->readColorEntry(GCOLOR_OUT, &c); | 1269 | // //out = config->readColorEntry(GCOLOR_OUT, &c); |
1268 | // } | 1270 | // } |
1269 | // } | 1271 | // } |
1270 | 1272 | ||
1271 | 1273 | ||
1272 | // bool PPPData::graphingEnabled() { | 1274 | // bool PPPData::graphingEnabled() { |
1273 | // return (bool) readNumConfig(GRAPH_GRP, GENABLED, true); | 1275 | // return (bool) readNumConfig(GRAPH_GRP, GENABLED, true); |
1274 | // } | 1276 | // } |
1275 | 1277 | ||
1276 | 1278 | ||
1277 | 1279 | ||
1278 | // | 1280 | // |
1279 | //functions to change/set the child pppd process info | 1281 | //functions to change/set the child pppd process info |
1280 | // | 1282 | // |
1281 | bool PPPData::pppdRunning() const { | 1283 | bool PPPData::pppdRunning() const { |
1282 | return pppdisrunning; | 1284 | return pppdisrunning; |
1283 | } | 1285 | } |
1284 | 1286 | ||
1285 | void PPPData::setpppdRunning(bool set) { | 1287 | void PPPData::setpppdRunning(bool set) { |
1286 | pppdisrunning = set; | 1288 | pppdisrunning = set; |
1287 | } | 1289 | } |
1288 | 1290 | ||
1289 | int PPPData::pppdError() const { | 1291 | int PPPData::pppdError() const { |
1290 | return pppderror; | 1292 | return pppderror; |
1291 | } | 1293 | } |
1292 | 1294 | ||
1293 | void PPPData::setpppdError(int err) { | 1295 | void PPPData::setpppdError(int err) { |
1294 | pppderror = err; | 1296 | pppderror = err; |
1295 | } | 1297 | } |
1296 | 1298 | ||
1297 | QString PPPData::modemGroup() | 1299 | QString PPPData::modemGroup() |
1298 | { | 1300 | { |
1299 | if (_modemName.isEmpty()) | 1301 | if (_modemName.isEmpty()) |
1300 | _modemName = deviceList[0]; | 1302 | _modemName = deviceList[0]; |
1301 | return _modemName; | 1303 | return _modemName; |
1302 | } | 1304 | } |
1303 | 1305 | ||
1304 | 1306 | ||
1305 | QMap<QString,QString> PPPData::getConfiguredInterfaces() | 1307 | QMap<QString,QString> PPPData::getConfiguredInterfaces() |
1306 | { | 1308 | { |
1307 | QMap<QString,QString> ifaces; | 1309 | QMap<QString,QString> ifaces; |
1308 | Config config = PPPData::config(); | 1310 | Config config = PPPData::config(); |
1309 | config.setGroup(ACCLIST_GRP); | 1311 | config.setGroup(ACCLIST_GRP); |
1310 | int count = config.readNumEntry( ACCOUNTS_COUNT, -1 ); | 1312 | int count = config.readNumEntry( ACCOUNTS_COUNT, -1 ); |
1311 | QString accGrp, dev, acc; | 1313 | QString accGrp, dev, acc; |
1312 | for (int i = 0; i < count; i++){ | 1314 | for (int i = 0; i < count; i++){ |
1313 | accGrp = QString("%1_%1").arg(ACCLIST_GRP).arg(i); | 1315 | accGrp = QString("%1_%1").arg(ACCLIST_GRP).arg(i); |
1314 | config.setGroup(accGrp); | 1316 | config.setGroup(accGrp); |
1315 | dev = config.readEntry( ACOUNTS_DEV, "error" ); | 1317 | dev = config.readEntry( ACOUNTS_DEV, "error" ); |
1316 | acc = config.readEntry( ACOUNTS_ACC, "error" ); | 1318 | acc = config.readEntry( ACOUNTS_ACC, "error" ); |
1317 | ifaces.insert( dev, acc ); | 1319 | ifaces.insert( dev, acc ); |
1318 | } | 1320 | } |
1319 | 1321 | ||
1320 | return ifaces; | 1322 | return ifaces; |
1321 | } | 1323 | } |
1322 | 1324 | ||
1323 | void PPPData::setConfiguredInterfaces( QMap<QString,QString> ifaces ) | 1325 | void PPPData::setConfiguredInterfaces( QMap<QString,QString> ifaces ) |
1324 | { | 1326 | { |
1325 | QMap<QString,QString>::Iterator it; | 1327 | QMap<QString,QString>::Iterator it; |
1326 | int i = 0; | 1328 | int i = 0; |
1327 | Config cfg = config(); | 1329 | Config cfg = config(); |
1328 | for( it = ifaces.begin(); it != ifaces.end(); ++it ){ | 1330 | for( it = ifaces.begin(); it != ifaces.end(); ++it ){ |
1329 | cfg.setGroup(QString("%1_%1").arg(ACCLIST_GRP).arg(i++)); | 1331 | cfg.setGroup(QString("%1_%1").arg(ACCLIST_GRP).arg(i++)); |
1330 | cfg.writeEntry( ACOUNTS_DEV, it.key() ); | 1332 | cfg.writeEntry( ACOUNTS_DEV, it.key() ); |
1331 | cfg.writeEntry( ACOUNTS_ACC, it.data() ); | 1333 | cfg.writeEntry( ACOUNTS_ACC, it.data() ); |
1332 | odebug << "I " << i << "" << oendl; | 1334 | odebug << "I " << i << "" << oendl; |
1333 | } | 1335 | } |
1334 | cfg.setGroup( ACCLIST_GRP ); | 1336 | cfg.setGroup( ACCLIST_GRP ); |
1335 | odebug << "saved " << i << " account settings" << oendl; | 1337 | odebug << "saved " << i << " account settings" << oendl; |
1336 | cfg.writeEntry( ACCOUNTS_COUNT, i ); | 1338 | cfg.writeEntry( ACCOUNTS_COUNT, i ); |
1337 | 1339 | ||
1338 | } | 1340 | } |
1339 | 1341 | ||
1340 | /** | 1342 | /** |
1341 | * pppd's getword() function knows about escape characters. | 1343 | * pppd's getword() function knows about escape characters. |
1342 | * If we write the username and password to the secrets file | 1344 | * If we write the username and password to the secrets file |
1343 | * we'll therefore have to escape back slashes. | 1345 | * we'll therefore have to escape back slashes. |
1344 | */ | 1346 | */ |
1345 | QString PPPData::encodeWord(const QString &s) { | 1347 | QString PPPData::encodeWord(const QString &s) { |
1346 | QString r = s; | 1348 | QString r = s; |
1347 | r.replace(QRegExp("\\"), "\\\\"); | 1349 | r.replace(QRegExp("\\"), "\\\\"); |
1348 | return r; | 1350 | return r; |
1349 | } | 1351 | } |
1350 | 1352 | ||
1351 | QStringList PPPData::getDevicesList() | 1353 | QStringList PPPData::getDevicesList() |
1352 | { | 1354 | { |
1353 | Config cfg("NetworkSetupPPP"); | 1355 | Config cfg("NetworkSetupPPP"); |
1354 | cfg.setGroup("Devices_General"); | 1356 | cfg.setGroup("Devices_General"); |
1355 | return cfg.readListEntry(DEVICES_LIST,DEVICES_LIST_SEP); | 1357 | return cfg.readListEntry(DEVICES_LIST,DEVICES_LIST_SEP); |
1356 | } | 1358 | } |
1357 | 1359 | ||
1358 | QStringList PPPData::getAccountList() | 1360 | QStringList PPPData::getAccountList() |
1359 | { | 1361 | { |
1360 | QStringList list; | 1362 | QStringList list; |
1361 | QString save_cgroup; | 1363 | QString save_cgroup; |
1362 | save_cgroup = cgroup; | 1364 | save_cgroup = cgroup; |
1363 | for ( QStringList::Iterator it = accountList.begin(); it != accountList.end(); ++it ) { | 1365 | for ( QStringList::Iterator it = accountList.begin(); it != accountList.end(); ++it ) { |
1364 | cgroup = *it; | 1366 | cgroup = *it; |
1365 | list << accname(); | 1367 | list << accname(); |
1366 | } | 1368 | } |
1367 | cgroup = save_cgroup; | 1369 | cgroup = save_cgroup; |
1368 | return list; | 1370 | return list; |
1369 | }; | 1371 | }; |
1370 | 1372 | ||
1371 | 1373 | ||
1372 | const QString PPPData::devname() | 1374 | const QString PPPData::devname() |
1373 | { | 1375 | { |
1374 | QString tmp = readConfig(modemGroup(), MODEMNAME_KEY ); | 1376 | QString tmp = readConfig(modemGroup(), MODEMNAME_KEY ); |
1375 | odebug << "PPPData::devname() of " << modemGroup().latin1() << " is " << tmp.latin1() << "" << oendl; | 1377 | odebug << "PPPData::devname() of " << modemGroup().latin1() << " is " << tmp.latin1() << "" << oendl; |
1376 | return tmp; | 1378 | return tmp; |
1377 | } | 1379 | } |
1378 | 1380 | ||
1379 | void PPPData::setDevname(const QString &n) { | 1381 | void PPPData::setDevname(const QString &n) { |
1380 | // if(!cgroup.isNull()) { | 1382 | // if(!cgroup.isNull()) { |
1381 | // // are we manipulating the default account's name ? then change it, too. | 1383 | // // are we manipulating the default account's name ? then change it, too. |
1382 | // bool def = accname() == defaultAccount(); | 1384 | // bool def = accname() == defaultAccount(); |
1383 | // writeConfig(cgroup, NAME_KEY, n); | 1385 | // writeConfig(cgroup, NAME_KEY, n); |
1384 | // if (def) | 1386 | // if (def) |
1385 | // setDefaultAccount(n); | 1387 | // setDefaultAccount(n); |
1386 | // } | 1388 | // } |
1387 | writeConfig(modemGroup(), MODEMNAME_KEY, n ); | 1389 | writeConfig(modemGroup(), MODEMNAME_KEY, n ); |
1388 | } | 1390 | } |
1389 | 1391 | ||
1390 | 1392 | ||
1391 | bool PPPData::setDevice(const QString &dev ) | 1393 | bool PPPData::setDevice(const QString &dev ) |
1392 | { | 1394 | { |
1393 | odebug << "setting device to >" << dev.latin1() << "<" << oendl; | 1395 | odebug << "setting device to >" << dev.latin1() << "<" << oendl; |
1394 | QString save_mName = _modemName; | 1396 | QString save_mName = _modemName; |
1395 | for ( QStringList::Iterator it = deviceList.begin(); it != deviceList.end(); ++it ) { | 1397 | for ( QStringList::Iterator it = deviceList.begin(); it != deviceList.end(); ++it ) { |
1396 | _modemName = *it; | 1398 | _modemName = *it; |
1397 | odebug << "PPPData::setDevice " << _modemName.latin1() << " is named " << devname().latin1() << "" << oendl; | 1399 | odebug << "PPPData::setDevice " << _modemName.latin1() << " is named " << devname().latin1() << "" << oendl; |
1398 | odebug << "iterator " << (*it).latin1() << "" << oendl; | 1400 | odebug << "iterator " << (*it).latin1() << "" << oendl; |
1399 | if(devname() == dev) { | 1401 | if(devname() == dev) { |
1400 | odebug << "SUCCESS" << oendl; | 1402 | odebug << "SUCCESS" << oendl; |
1401 | return true; | 1403 | return true; |
1402 | } | 1404 | } |
1403 | 1405 | ||
1404 | } | 1406 | } |
1405 | _modemName = save_mName; | 1407 | _modemName = save_mName; |
1406 | odebug << "FAILURE" << oendl; | 1408 | odebug << "FAILURE" << oendl; |
1407 | return false; | 1409 | return false; |
1408 | } | 1410 | } |
1409 | 1411 | ||
1410 | bool PPPData::deleteDevice() | 1412 | bool PPPData::deleteDevice() |
1411 | { | 1413 | { |
1412 | // FIXME: check if this account exists in a config... | 1414 | // FIXME: check if this account exists in a config... |
1413 | Config cfg = PPPData::config(); | 1415 | Config cfg = PPPData::config(); |
1414 | cfg.setGroup(modemGroup()); | 1416 | cfg.setGroup(modemGroup()); |
1415 | cfg.clearGroup(); | 1417 | cfg.clearGroup(); |
1416 | deviceList.remove(modemGroup()); | 1418 | deviceList.remove(modemGroup()); |
1417 | 1419 | ||
1418 | QString key; | 1420 | QString key; |
1419 | QStringList keys; | 1421 | QStringList keys; |
1420 | for( QMap<QString,QString>::Iterator it = stringEntries.begin(); | 1422 | for( QMap<QString,QString>::Iterator it = stringEntries.begin(); |
1421 | it != stringEntries.end(); ++it ){ | 1423 | it != stringEntries.end(); ++it ){ |
1422 | QString val = it.data(); | 1424 | QString val = it.data(); |
1423 | key = it.key(); | 1425 | key = it.key(); |
1424 | keys = QStringList::split( "SEPARATOR", key ); | 1426 | keys = QStringList::split( "SEPARATOR", key ); |
1425 | if(keys[0]==modemGroup()){ | 1427 | if(keys[0]==modemGroup()){ |
1426 | stringEntries.remove( it ); | 1428 | stringEntries.remove( it ); |
1427 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val.latin1() << "<" << oendl; | 1429 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val.latin1() << "<" << oendl; |
1428 | } | 1430 | } |
1429 | } | 1431 | } |
1430 | for( QMap<QString,int>::Iterator it = intEntries.begin(); | 1432 | for( QMap<QString,int>::Iterator it = intEntries.begin(); |
1431 | it != intEntries.end(); ++it ){ | 1433 | it != intEntries.end(); ++it ){ |
1432 | int val = it.data(); | 1434 | int val = it.data(); |
1433 | key = it.key(); | 1435 | key = it.key(); |
1434 | keys = QStringList::split( "SEPARATOR", key ); | 1436 | keys = QStringList::split( "SEPARATOR", key ); |
1435 | if(keys[0]==modemGroup()){ | 1437 | if(keys[0]==modemGroup()){ |
1436 | intEntries.remove( it ); | 1438 | intEntries.remove( it ); |
1437 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val << "<" << oendl; | 1439 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val << "<" << oendl; |
1438 | } | 1440 | } |
1439 | } | 1441 | } |
1440 | for( QMap<QString,QStringList>::Iterator it = listEntries.begin(); | 1442 | for( QMap<QString,QStringList>::Iterator it = listEntries.begin(); |
1441 | it != listEntries.end(); ++it ){ | 1443 | it != listEntries.end(); ++it ){ |
1442 | QStringList val = it.data(); | 1444 | QStringList val = it.data(); |
1443 | key = it.key(); | 1445 | key = it.key(); |
1444 | if(keys[0]==modemGroup()){ | 1446 | if(keys[0]==modemGroup()){ |
1445 | listEntries.remove( it ); | 1447 | listEntries.remove( it ); |
1446 | sepEntries.remove( key ); | 1448 | sepEntries.remove( key ); |
1447 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val.join("").latin1() << "<" << oendl; | 1449 | odebug << "deleting >" << keys[0].latin1() << "< key >" << keys[1].latin1() << "< value >" << val.join("").latin1() << "<" << oendl; |
1448 | } | 1450 | } |
1449 | } | 1451 | } |
1450 | 1452 | ||
1451 | return true; | 1453 | return true; |
1452 | 1454 | ||
1453 | } | 1455 | } |
1454 | 1456 | ||
1455 | bool PPPData::deleteDevice(const QString &dev) | 1457 | bool PPPData::deleteDevice(const QString &dev) |
1456 | { | 1458 | { |
1457 | if(!setDevice(dev)) | 1459 | if(!setDevice(dev)) |
1458 | return false; | 1460 | return false; |
1459 | 1461 | ||
1460 | return deleteDevice(); | 1462 | return deleteDevice(); |
1461 | } | 1463 | } |
1462 | 1464 | ||
1463 | int PPPData::newdevice() | 1465 | int PPPData::newdevice() |
1464 | { | 1466 | { |
1465 | 1467 | ||
1466 | odebug << "PPPData::newdevice highcount " << highcountdev << "" << oendl; | 1468 | odebug << "PPPData::newdevice highcount " << highcountdev << "" << oendl; |
1467 | 1469 | ||
1468 | 1470 | ||
1469 | QString tmp; | 1471 | QString tmp; |
1470 | tmp.sprintf("%s%i", MODEM_GRP, ++highcountdev); | 1472 | tmp.sprintf("%s%i", MODEM_GRP, ++highcountdev); |
1471 | _modemName = QString(tmp); | 1473 | _modemName = QString(tmp); |
1472 | deviceList << tmp; | 1474 | deviceList << tmp; |
1473 | odebug << "PPPData::newdevice() Group: >" << cgroup.latin1() << "<" << oendl; | 1475 | odebug << "PPPData::newdevice() Group: >" << cgroup.latin1() << "<" << oendl; |
1474 | return highcountdev; | 1476 | return highcountdev; |
1475 | } | 1477 | } |
1476 | 1478 | ||
1477 | int PPPData::copydevice(const QString&) | 1479 | int PPPData::copydevice(const QString&) |
1478 | { | 1480 | { |
1479 | return false; | 1481 | return false; |
1480 | } | 1482 | } |
1481 | 1483 | ||
1482 | 1484 | ||
1483 | QStringList PPPData::getDevicesNamesList() | 1485 | QStringList PPPData::getDevicesNamesList() |
1484 | { | 1486 | { |
1485 | QStringList list; | 1487 | QStringList list; |
1486 | QString save_mName = _modemName; | 1488 | QString save_mName = _modemName; |
1487 | odebug << "PPPData::getDevicesNamesList has " << deviceList.join("---").latin1() << "" << oendl; | 1489 | odebug << "PPPData::getDevicesNamesList has " << deviceList.join("---").latin1() << "" << oendl; |
1488 | for ( QStringList::Iterator it = deviceList.begin(); it != deviceList.end(); ++it ) { | 1490 | for ( QStringList::Iterator it = deviceList.begin(); it != deviceList.end(); ++it ) { |
1489 | _modemName = *it; | 1491 | _modemName = *it; |
1490 | odebug << "PPPData::getDevicesNamesList adding " << _modemName.latin1() << " as " << devname().latin1() << "" << oendl; | 1492 | odebug << "PPPData::getDevicesNamesList adding " << _modemName.latin1() << " as " << devname().latin1() << "" << oendl; |
1491 | list << devname(); | 1493 | list << devname(); |
1492 | } | 1494 | } |
1493 | _modemName = save_mName; | 1495 | _modemName = save_mName; |
1494 | return list; | 1496 | return list; |
1495 | }; | 1497 | }; |
diff --git a/noncore/settings/networksettings/ppp/pppmodule.cpp b/noncore/settings/networksettings/ppp/pppmodule.cpp index 2291e8a..b102a10 100644 --- a/noncore/settings/networksettings/ppp/pppmodule.cpp +++ b/noncore/settings/networksettings/ppp/pppmodule.cpp | |||
@@ -1,283 +1,285 @@ | |||
1 | 1 | ||
2 | #include "modem.h" | 2 | #include "modem.h" |
3 | #include "pppconfig.h" | 3 | #include "pppconfig.h" |
4 | #include "pppmodule.h" | 4 | #include "pppmodule.h" |
5 | #include "pppdata.h" | 5 | #include "pppdata.h" |
6 | #include "interfaceinformationppp.h" | 6 | #include "interfaceinformationppp.h" |
7 | #include "interfaceppp.h" | 7 | #include "interfaceppp.h" |
8 | 8 | ||
9 | /* OPIE */ | 9 | /* OPIE */ |
10 | #include <opie2/odebug.h> | ||
10 | #include <qpe/config.h> | 11 | #include <qpe/config.h> |
11 | #include <qpe/qpeapplication.h> | 12 | #include <qpe/qpeapplication.h> |
13 | using namespace Opie::Core; | ||
12 | 14 | ||
13 | /* QT */ | 15 | /* QT */ |
14 | 16 | ||
15 | /* STD */ | 17 | /* STD */ |
16 | #include <errno.h> | 18 | #include <errno.h> |
17 | #include <signal.h> | 19 | #include <signal.h> |
18 | 20 | ||
19 | // don't polute global namespace | 21 | // don't polute global namespace |
20 | namespace | 22 | namespace |
21 | { | 23 | { |
22 | /* | 24 | /* |
23 | * If network settings is qutting and we've ppp | 25 | * If network settings is qutting and we've ppp |
24 | * devices open we need to save the pid_t the PPData | 26 | * devices open we need to save the pid_t the PPData |
25 | * and the interface number | 27 | * and the interface number |
26 | */ | 28 | */ |
27 | struct Connection | 29 | struct Connection |
28 | { | 30 | { |
29 | pid_t pid; | 31 | pid_t pid; |
30 | QString device; | 32 | QString device; |
31 | QString name; | 33 | QString name; |
32 | }; | 34 | }; |
33 | class InterfaceKeeper | 35 | class InterfaceKeeper |
34 | { | 36 | { |
35 | public: | 37 | public: |
36 | InterfaceKeeper(); | 38 | InterfaceKeeper(); |
37 | ~InterfaceKeeper(); | 39 | ~InterfaceKeeper(); |
38 | 40 | ||
39 | void addInterface( pid_t, const QString& pppDev, const QString& name ); | 41 | void addInterface( pid_t, const QString& pppDev, const QString& name ); |
40 | QMap<QString, Connection> interfaces()const; // will check if still available | 42 | QMap<QString, Connection> interfaces()const; // will check if still available |
41 | private: | 43 | private: |
42 | bool isAvailable( pid_t )const; | 44 | bool isAvailable( pid_t )const; |
43 | QMap<QString, Connection> m_interfaces; | 45 | QMap<QString, Connection> m_interfaces; |
44 | }; | 46 | }; |
45 | } | 47 | } |
46 | 48 | ||
47 | 49 | ||
48 | /** | 50 | /** |
49 | * Constructor, find all of the possible interfaces | 51 | * Constructor, find all of the possible interfaces |
50 | * We also need to restore the state.. it could be that | 52 | * We also need to restore the state.. it could be that |
51 | * an interface was up while closing the application | 53 | * an interface was up while closing the application |
52 | * we need to be able to shut it down... | 54 | * we need to be able to shut it down... |
53 | */ | 55 | */ |
54 | PPPModule::PPPModule() : Module() | 56 | PPPModule::PPPModule() : Module() |
55 | { | 57 | { |
56 | InterfaceKeeper inFace; | 58 | InterfaceKeeper inFace; |
57 | QMap<QString,Connection> running = inFace.interfaces(); | 59 | QMap<QString,Connection> running = inFace.interfaces(); |
58 | QStringList handledInterfaceNames; | 60 | QStringList handledInterfaceNames; |
59 | 61 | ||
60 | QMap<QString,QString> ifaces = PPPData::getConfiguredInterfaces(); | 62 | QMap<QString,QString> ifaces = PPPData::getConfiguredInterfaces(); |
61 | QMap<QString,QString>::Iterator it; | 63 | QMap<QString,QString>::Iterator it; |
62 | InterfacePPP *iface; | 64 | InterfacePPP *iface; |
63 | odebug << "getting interfaces" << oendl; | 65 | odebug << "getting interfaces" << oendl; |
64 | for( it = ifaces.begin(); it != ifaces.end(); ++it ) | 66 | for( it = ifaces.begin(); it != ifaces.end(); ++it ) |
65 | { | 67 | { |
66 | odebug << "ifaces " << it.key().latin1() << " " << it.data().latin1() << "" << oendl; | 68 | odebug << "ifaces " << it.key().latin1() << " " << it.data().latin1() << "" << oendl; |
67 | iface = new InterfacePPP( 0, it.key() ); | 69 | iface = new InterfacePPP( 0, it.key() ); |
68 | iface->setHardwareName( it.data() ); | 70 | iface->setHardwareName( it.data() ); |
69 | list.append( (Interface*)iface ); | 71 | list.append( (Interface*)iface ); |
70 | 72 | ||
71 | // check if (*it) is one of the running ifaces | 73 | // check if (*it) is one of the running ifaces |
72 | if ( running.contains( it.data() ) ) | 74 | if ( running.contains( it.data() ) ) |
73 | { | 75 | { |
74 | odebug << "iface is running " << it.key().latin1() << "" << oendl; | 76 | odebug << "iface is running " << it.key().latin1() << "" << oendl; |
75 | handledInterfaceNames << running[it.data()].device; | 77 | handledInterfaceNames << running[it.data()].device; |
76 | iface->setStatus( true ); | 78 | iface->setStatus( true ); |
77 | iface->setPPPDpid( running[it.data()].pid ); | 79 | iface->setPPPDpid( running[it.data()].pid ); |
78 | iface->modem()->setPPPDevice( running[it.data()].device ); | 80 | iface->modem()->setPPPDevice( running[it.data()].device ); |
79 | iface->refresh(); | 81 | iface->refresh(); |
80 | } | 82 | } |
81 | } | 83 | } |
82 | 84 | ||
83 | setHandledInterfaceNames( handledInterfaceNames ); | 85 | setHandledInterfaceNames( handledInterfaceNames ); |
84 | } | 86 | } |
85 | 87 | ||
86 | /** | 88 | /** |
87 | * Delete any interfaces that we own. | 89 | * Delete any interfaces that we own. |
88 | */ | 90 | */ |
89 | PPPModule::~PPPModule() | 91 | PPPModule::~PPPModule() |
90 | { | 92 | { |
91 | odebug << "PPPModule::~PPPModule() " << oendl; | 93 | odebug << "PPPModule::~PPPModule() " << oendl; |
92 | QMap<QString,QString> ifaces; | 94 | QMap<QString,QString> ifaces; |
93 | InterfaceKeeper keeper; | 95 | InterfaceKeeper keeper; |
94 | Interface *i; | 96 | Interface *i; |
95 | for ( i=list.first(); i != 0; i=list.next() ) | 97 | for ( i=list.first(); i != 0; i=list.next() ) |
96 | { | 98 | { |
97 | /* if online save the state */ | 99 | /* if online save the state */ |
98 | if ( i->getStatus() ) | 100 | if ( i->getStatus() ) |
99 | { | 101 | { |
100 | odebug << "Iface " << i->getHardwareName().latin1() << " is still up" << oendl; | 102 | odebug << "Iface " << i->getHardwareName().latin1() << " is still up" << oendl; |
101 | InterfacePPP* ppp = static_cast<InterfacePPP*>(i); | 103 | InterfacePPP* ppp = static_cast<InterfacePPP*>(i); |
102 | keeper.addInterface( ppp->pppPID(), ppp->pppDev(), ppp->getHardwareName() ); | 104 | keeper.addInterface( ppp->pppPID(), ppp->pppDev(), ppp->getHardwareName() ); |
103 | } | 105 | } |
104 | ifaces.insert( i->getInterfaceName(), i->getHardwareName() ); | 106 | ifaces.insert( i->getInterfaceName(), i->getHardwareName() ); |
105 | delete i; | 107 | delete i; |
106 | } | 108 | } |
107 | PPPData::setConfiguredInterfaces( ifaces ); | 109 | PPPData::setConfiguredInterfaces( ifaces ); |
108 | } | 110 | } |
109 | 111 | ||
110 | /** | 112 | /** |
111 | * Change the current profile | 113 | * Change the current profile |
112 | */ | 114 | */ |
113 | void PPPModule::setProfile(const QString &newProfile) | 115 | void PPPModule::setProfile(const QString &newProfile) |
114 | { | 116 | { |
115 | profile = newProfile; | 117 | profile = newProfile; |
116 | } | 118 | } |
117 | 119 | ||
118 | /** | 120 | /** |
119 | * get the icon name for this device. | 121 | * get the icon name for this device. |
120 | * @param Interface* can be used in determining the icon. | 122 | * @param Interface* can be used in determining the icon. |
121 | * @return QString the icon name (minus .png, .gif etc) | 123 | * @return QString the icon name (minus .png, .gif etc) |
122 | */ | 124 | */ |
123 | QString PPPModule::getPixmapName(Interface* ) | 125 | QString PPPModule::getPixmapName(Interface* ) |
124 | { | 126 | { |
125 | return "ppp"; | 127 | return "ppp"; |
126 | } | 128 | } |
127 | 129 | ||
128 | /** | 130 | /** |
129 | * Check to see if the interface i is owned by this module. | 131 | * Check to see if the interface i is owned by this module. |
130 | * @param Interface* interface to check against | 132 | * @param Interface* interface to check against |
131 | * @return bool true if i is owned by this module, false otherwise. | 133 | * @return bool true if i is owned by this module, false otherwise. |
132 | */ | 134 | */ |
133 | bool PPPModule::isOwner(Interface *i) | 135 | bool PPPModule::isOwner(Interface *i) |
134 | { | 136 | { |
135 | return list.find( i ) != -1; | 137 | return list.find( i ) != -1; |
136 | } | 138 | } |
137 | 139 | ||
138 | /** | 140 | /** |
139 | * Create, and return the WLANConfigure Module | 141 | * Create, and return the WLANConfigure Module |
140 | * @return QWidget* pointer to this modules configure. | 142 | * @return QWidget* pointer to this modules configure. |
141 | */ | 143 | */ |
142 | QWidget *PPPModule::configure(Interface *i) | 144 | QWidget *PPPModule::configure(Interface *i) |
143 | { | 145 | { |
144 | odebug << "return ModemWidget" << oendl; | 146 | odebug << "return ModemWidget" << oendl; |
145 | PPPConfigWidget *pppconfig = new PPPConfigWidget( (InterfacePPP*)i, | 147 | PPPConfigWidget *pppconfig = new PPPConfigWidget( (InterfacePPP*)i, |
146 | 0, "PPPConfig", false, | 148 | 0, "PPPConfig", false, |
147 | (Qt::WDestructiveClose | Qt::WStyle_ContextHelp)); | 149 | (Qt::WDestructiveClose | Qt::WStyle_ContextHelp)); |
148 | return pppconfig; | 150 | return pppconfig; |
149 | } | 151 | } |
150 | 152 | ||
151 | /** | 153 | /** |
152 | * Create, and return the Information Module | 154 | * Create, and return the Information Module |
153 | * @return QWidget* pointer to this modules info. | 155 | * @return QWidget* pointer to this modules info. |
154 | */ | 156 | */ |
155 | QWidget *PPPModule::information(Interface *i) | 157 | QWidget *PPPModule::information(Interface *i) |
156 | { | 158 | { |
157 | // We don't have any advanced pppd information widget yet :-D | 159 | // We don't have any advanced pppd information widget yet :-D |
158 | // TODO ^ | 160 | // TODO ^ |
159 | 161 | ||
160 | return new InterfaceInformationPPP( 0, "InterfaceInformationPPP", i ); | 162 | return new InterfaceInformationPPP( 0, "InterfaceInformationPPP", i ); |
161 | } | 163 | } |
162 | 164 | ||
163 | /** | 165 | /** |
164 | * Get all active (up or down) interfaces | 166 | * Get all active (up or down) interfaces |
165 | * @return QList<Interface> A list of interfaces that exsist that havn't | 167 | * @return QList<Interface> A list of interfaces that exsist that havn't |
166 | * been called by isOwner() | 168 | * been called by isOwner() |
167 | */ | 169 | */ |
168 | QList<Interface> PPPModule::getInterfaces() | 170 | QList<Interface> PPPModule::getInterfaces() |
169 | { | 171 | { |
170 | // List all of the files in the peer directory | 172 | // List all of the files in the peer directory |
171 | odebug << "PPPModule::getInterfaces" << oendl; | 173 | odebug << "PPPModule::getInterfaces" << oendl; |
172 | return list; | 174 | return list; |
173 | } | 175 | } |
174 | 176 | ||
175 | /** | 177 | /** |
176 | * Attempt to add a new interface as defined by name | 178 | * Attempt to add a new interface as defined by name |
177 | * @param name the name of the type of interface that should be created given | 179 | * @param name the name of the type of interface that should be created given |
178 | * by possibleNewInterfaces(); | 180 | * by possibleNewInterfaces(); |
179 | * @return Interface* NULL if it was unable to be created. | 181 | * @return Interface* NULL if it was unable to be created. |
180 | */ | 182 | */ |
181 | Interface *PPPModule::addNewInterface(const QString &newInterface) | 183 | Interface *PPPModule::addNewInterface(const QString &newInterface) |
182 | { | 184 | { |
183 | 185 | ||
184 | InterfacePPP *ifaceppp; | 186 | InterfacePPP *ifaceppp; |
185 | Interface *iface; | 187 | Interface *iface; |
186 | ifaceppp = new InterfacePPP(); | 188 | ifaceppp = new InterfacePPP(); |
187 | PPPConfigWidget imp(ifaceppp, 0, "PPPConfigImp", true); | 189 | PPPConfigWidget imp(ifaceppp, 0, "PPPConfigImp", true); |
188 | 190 | ||
189 | if( QPEApplication::execDialog( &imp ) == QDialog::Accepted ) | 191 | if( QPEApplication::execDialog( &imp ) == QDialog::Accepted ) |
190 | { | 192 | { |
191 | iface = (InterfacePPP*) ifaceppp; | 193 | iface = (InterfacePPP*) ifaceppp; |
192 | iface->setModuleOwner( this ); | 194 | iface->setModuleOwner( this ); |
193 | list.append( iface ); | 195 | list.append( iface ); |
194 | return iface; | 196 | return iface; |
195 | } | 197 | } |
196 | else | 198 | else |
197 | { | 199 | { |
198 | delete ifaceppp; | 200 | delete ifaceppp; |
199 | iface = NULL; | 201 | iface = NULL; |
200 | } | 202 | } |
201 | return iface; | 203 | return iface; |
202 | } | 204 | } |
203 | 205 | ||
204 | /** | 206 | /** |
205 | * Attempts to remove the interface, doesn't delete i | 207 | * Attempts to remove the interface, doesn't delete i |
206 | * @return bool true if successful, false otherwise. | 208 | * @return bool true if successful, false otherwise. |
207 | */ | 209 | */ |
208 | bool PPPModule::remove(Interface *i) | 210 | bool PPPModule::remove(Interface *i) |
209 | { | 211 | { |
210 | return list.remove(i); | 212 | return list.remove(i); |
211 | } | 213 | } |
212 | 214 | ||
213 | void PPPModule::possibleNewInterfaces(QMap<QString, QString> &newIfaces) | 215 | void PPPModule::possibleNewInterfaces(QMap<QString, QString> &newIfaces) |
214 | { | 216 | { |
215 | newIfaces.insert(QObject::tr("PPP") , | 217 | newIfaces.insert(QObject::tr("PPP") , |
216 | QObject::tr("generic ppp device")); | 218 | QObject::tr("generic ppp device")); |
217 | } | 219 | } |
218 | 220 | ||
219 | 221 | ||
220 | 222 | ||
221 | namespace | 223 | namespace |
222 | { | 224 | { |
223 | InterfaceKeeper::InterfaceKeeper( ) | 225 | InterfaceKeeper::InterfaceKeeper( ) |
224 | {} | 226 | {} |
225 | InterfaceKeeper::~InterfaceKeeper() | 227 | InterfaceKeeper::~InterfaceKeeper() |
226 | { | 228 | { |
227 | Config cfg("ppp_plugin_keeper"); | 229 | Config cfg("ppp_plugin_keeper"); |
228 | QStringList lst = cfg.groupList(); | 230 | QStringList lst = cfg.groupList(); |
229 | for (QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) | 231 | for (QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) |
230 | { | 232 | { |
231 | Connection con; | 233 | Connection con; |
232 | cfg.setGroup( (*it) ); | 234 | cfg.setGroup( (*it) ); |
233 | cfg.clearGroup(); | 235 | cfg.clearGroup(); |
234 | } | 236 | } |
235 | 237 | ||
236 | for (QMap<QString, Connection>::Iterator it = m_interfaces.begin(); it != m_interfaces.end(); ++it ) | 238 | for (QMap<QString, Connection>::Iterator it = m_interfaces.begin(); it != m_interfaces.end(); ++it ) |
237 | { | 239 | { |
238 | Connection con = it.data(); | 240 | Connection con = it.data(); |
239 | cfg.setGroup( con.name ); | 241 | cfg.setGroup( con.name ); |
240 | cfg.writeEntry( "pid", con.pid ); | 242 | cfg.writeEntry( "pid", con.pid ); |
241 | cfg.writeEntry( "device", con.device ); | 243 | cfg.writeEntry( "device", con.device ); |
242 | } | 244 | } |
243 | } | 245 | } |
244 | void InterfaceKeeper::addInterface(pid_t pid, const QString& dev, const QString& name ) | 246 | void InterfaceKeeper::addInterface(pid_t pid, const QString& dev, const QString& name ) |
245 | { | 247 | { |
246 | Connection con; | 248 | Connection con; |
247 | con.pid = pid; | 249 | con.pid = pid; |
248 | con.device = dev; | 250 | con.device = dev; |
249 | con.name = name; | 251 | con.name = name; |
250 | m_interfaces.insert( name, con ); | 252 | m_interfaces.insert( name, con ); |
251 | } | 253 | } |
252 | QMap<QString, Connection> InterfaceKeeper::interfaces()const | 254 | QMap<QString, Connection> InterfaceKeeper::interfaces()const |
253 | { | 255 | { |
254 | Config cfg("ppp_plugin_keeper"); | 256 | Config cfg("ppp_plugin_keeper"); |
255 | QMap<QString, Connection> ifaces; | 257 | QMap<QString, Connection> ifaces; |
256 | QStringList lst = cfg.groupList(); | 258 | QStringList lst = cfg.groupList(); |
257 | for (QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) | 259 | for (QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) |
258 | { | 260 | { |
259 | Connection con; | 261 | Connection con; |
260 | cfg.setGroup( (*it) ); | 262 | cfg.setGroup( (*it) ); |
261 | con.name = (*it); | 263 | con.name = (*it); |
262 | con.pid = cfg.readNumEntry("pid"); | 264 | con.pid = cfg.readNumEntry("pid"); |
263 | con.device = cfg.readEntry("device"); | 265 | con.device = cfg.readEntry("device"); |
264 | odebug << " " << con.name.latin1() << " " << con.device.latin1() << " " << con.pid << "" << oendl; | 266 | odebug << " " << con.name.latin1() << " " << con.device.latin1() << " " << con.pid << "" << oendl; |
265 | 267 | ||
266 | if ( con.pid != -1 && isAvailable( con.pid ) ) | 268 | if ( con.pid != -1 && isAvailable( con.pid ) ) |
267 | ifaces.insert( con.name, con ); | 269 | ifaces.insert( con.name, con ); |
268 | } | 270 | } |
269 | return ifaces; | 271 | return ifaces; |
270 | } | 272 | } |
271 | bool InterfaceKeeper::isAvailable( pid_t p)const | 273 | bool InterfaceKeeper::isAvailable( pid_t p)const |
272 | { | 274 | { |
273 | if (::kill(p, 0 ) == 0 || errno != ESRCH ) | 275 | if (::kill(p, 0 ) == 0 || errno != ESRCH ) |
274 | { | 276 | { |
275 | odebug << "isAvailable " << p << "" << oendl; | 277 | odebug << "isAvailable " << p << "" << oendl; |
276 | return true; | 278 | return true; |
277 | } | 279 | } |
278 | 280 | ||
279 | odebug << "notAvailable " << p << "" << oendl; | 281 | odebug << "notAvailable " << p << "" << oendl; |
280 | return false; | 282 | return false; |
281 | } | 283 | } |
282 | 284 | ||
283 | } | 285 | } |
diff --git a/noncore/settings/networksettings/wlan/config.in b/noncore/settings/networksettings/wlan/config.in index d4661cb..233764e 100644 --- a/noncore/settings/networksettings/wlan/config.in +++ b/noncore/settings/networksettings/wlan/config.in | |||
@@ -1,6 +1,6 @@ | |||
1 | config WLAN | 1 | config WLAN |
2 | boolean "opie-networksettingsplugin-wlan (wireless LAN module)" | 2 | boolean "opie-networksettingsplugin-wlan (wireless LAN module)" |
3 | default "n" if NETWORKSETUP | 3 | default "y" |
4 | depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2UI && NETWORKSETUP && NETWORKSETUP-CORE && INTERFACES && LIBOPIE2NET | 4 | depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2UI && NETWORKSETUP && NETWORKSETUP-CORE && INTERFACES && LIBOPIE2NET |
5 | #comment "opie-networksettingsplugin-wlan needs libopie2ui, libopie2net and networksetup" | 5 | #comment "opie-networksettingsplugin-wlan needs libopie2ui, libopie2net and networksetup" |
6 | #depends !( LIBOPIE2NET && NETWORKSETUP) \ No newline at end of file | 6 | #depends !( LIBOPIE2NET && NETWORKSETUP) |
diff --git a/noncore/settings/networksettings/wlan/infoimp.cpp b/noncore/settings/networksettings/wlan/infoimp.cpp index c558f5e..273bed8 100644 --- a/noncore/settings/networksettings/wlan/infoimp.cpp +++ b/noncore/settings/networksettings/wlan/infoimp.cpp | |||
@@ -1,56 +1,61 @@ | |||
1 | #include "infoimp.h" | 1 | #include "infoimp.h" |
2 | #include "wextensions.h" | 2 | #include "wextensions.h" |
3 | 3 | ||
4 | /* OPIE */ | ||
5 | #include <opie2/odebug.h> | ||
6 | using namespace Opie::Core; | ||
7 | |||
8 | /* QT */ | ||
4 | #include <qtimer.h> | 9 | #include <qtimer.h> |
5 | #include <qprogressbar.h> | 10 | #include <qprogressbar.h> |
6 | #include <qlabel.h> | 11 | #include <qlabel.h> |
7 | 12 | ||
8 | /** | 13 | /** |
9 | * Constructor. If wireless extensions are enabled on device name then | 14 | * Constructor. If wireless extensions are enabled on device name then |
10 | * start a timer that every second will update the information. | 15 | * start a timer that every second will update the information. |
11 | */ | 16 | */ |
12 | WlanInfoImp::WlanInfoImp( QWidget* parent, const char* name, WFlags fl): WlanInfo(parent, name, fl){ | 17 | WlanInfoImp::WlanInfoImp( QWidget* parent, const char* name, WFlags fl): WlanInfo(parent, name, fl){ |
13 | WExtensions *wExtensions = new WExtensions(name); | 18 | WExtensions *wExtensions = new WExtensions(name); |
14 | if(!wExtensions->doesHaveWirelessExtensions()){ | 19 | if(!wExtensions->doesHaveWirelessExtensions()){ |
15 | delete wExtensions; | 20 | delete wExtensions; |
16 | odebug << "WlanInfoImp::No wireless extension" << oendl; | 21 | odebug << "WlanInfoImp::No wireless extension" << oendl; |
17 | return; | 22 | return; |
18 | } | 23 | } |
19 | delete wExtensions; | 24 | delete wExtensions; |
20 | timer = new QTimer( this ); | 25 | timer = new QTimer( this ); |
21 | connect( timer, SIGNAL(timeout()), this, SLOT(update())); | 26 | connect( timer, SIGNAL(timeout()), this, SLOT(update())); |
22 | timer->start( 1000, false ); | 27 | timer->start( 1000, false ); |
23 | } | 28 | } |
24 | 29 | ||
25 | /** | 30 | /** |
26 | * Updates the information about the wireless device. | 31 | * Updates the information about the wireless device. |
27 | */ | 32 | */ |
28 | void WlanInfoImp::update(){ | 33 | void WlanInfoImp::update(){ |
29 | WExtensions *wExtensions = new WExtensions(this->name()); | 34 | WExtensions *wExtensions = new WExtensions(this->name()); |
30 | if(!wExtensions->doesHaveWirelessExtensions()){ | 35 | if(!wExtensions->doesHaveWirelessExtensions()){ |
31 | odebug << "No extension" << oendl; | 36 | odebug << "No extension" << oendl; |
32 | delete wExtensions; | 37 | delete wExtensions; |
33 | timer->stop(); | 38 | timer->stop(); |
34 | return; | 39 | return; |
35 | } | 40 | } |
36 | essidLabel->setText(wExtensions->essid()); | 41 | essidLabel->setText(wExtensions->essid()); |
37 | apLabel->setText(wExtensions->ap()); | 42 | apLabel->setText(wExtensions->ap()); |
38 | stationLabel->setText(wExtensions->station()); | 43 | stationLabel->setText(wExtensions->station()); |
39 | modeLabel->setText(wExtensions->mode()); | 44 | modeLabel->setText(wExtensions->mode()); |
40 | channelLabel->setText(QString("%1").arg(wExtensions->channel())); | 45 | channelLabel->setText(QString("%1").arg(wExtensions->channel())); |
41 | int signal = 0; | 46 | int signal = 0; |
42 | int noise = 0; | 47 | int noise = 0; |
43 | int quality = 0; | 48 | int quality = 0; |
44 | wExtensions->stats(signal, noise, quality); | 49 | wExtensions->stats(signal, noise, quality); |
45 | if(signalProgressBar->progress() != signal) | 50 | if(signalProgressBar->progress() != signal) |
46 | signalProgressBar->setProgress(signal); | 51 | signalProgressBar->setProgress(signal); |
47 | if(noiseProgressBar->progress() != noise) | 52 | if(noiseProgressBar->progress() != noise) |
48 | noiseProgressBar->setProgress(noise); | 53 | noiseProgressBar->setProgress(noise); |
49 | if(qualityProgressBar->progress() != quality) | 54 | if(qualityProgressBar->progress() != quality) |
50 | qualityProgressBar->setProgress(quality); | 55 | qualityProgressBar->setProgress(quality); |
51 | rateLabel->setText(QString("%1 Mb/s").arg(wExtensions->rate())); | 56 | rateLabel->setText(QString("%1 Mb/s").arg(wExtensions->rate())); |
52 | delete wExtensions; | 57 | delete wExtensions; |
53 | } | 58 | } |
54 | 59 | ||
55 | // infoimp.cpp | 60 | // infoimp.cpp |
56 | 61 | ||
diff --git a/noncore/settings/networksettings/wlan/wextensions.cpp b/noncore/settings/networksettings/wlan/wextensions.cpp index 9c64323..fe21f02 100644 --- a/noncore/settings/networksettings/wlan/wextensions.cpp +++ b/noncore/settings/networksettings/wlan/wextensions.cpp | |||
@@ -1,200 +1,207 @@ | |||
1 | #include "wextensions.h" | 1 | #include "wextensions.h" |
2 | 2 | ||
3 | /* OPIE */ | ||
4 | #include <opie2/odebug.h> | ||
5 | using namespace Opie::Core; | ||
6 | |||
7 | /* QT */ | ||
3 | #include <qfile.h> | 8 | #include <qfile.h> |
4 | #include <qtextstream.h> | 9 | #include <qtextstream.h> |
5 | 10 | ||
11 | /* STD */ | ||
6 | #include <arpa/inet.h> | 12 | #include <arpa/inet.h> |
7 | #include <sys/socket.h> | 13 | #include <sys/socket.h> |
8 | #include <sys/ioctl.h> | 14 | #include <sys/ioctl.h> |
9 | |||
10 | #include <math.h> | 15 | #include <math.h> |
11 | 16 | ||
12 | #define PROCNETWIRELESS "/proc/net/wireless" | 17 | #define PROCNETWIRELESS "/proc/net/wireless" |
13 | #define IW_LOWER 0 | 18 | #define IW_LOWER 0 |
14 | #define IW_UPPER 256 | 19 | #define IW_UPPER 256 |
15 | 20 | ||
21 | #warning This is duplicated code. Use libopienet2! | ||
22 | |||
16 | /** | 23 | /** |
17 | * Constructor. Sets hasWirelessExtensions | 24 | * Constructor. Sets hasWirelessExtensions |
18 | */ | 25 | */ |
19 | WExtensions::WExtensions(QString interfaceName): hasWirelessExtensions(false), interface(interfaceName) { | 26 | WExtensions::WExtensions(QString interfaceName): hasWirelessExtensions(false), interface(interfaceName) { |
20 | fd = socket( AF_INET, SOCK_DGRAM, 0 ); | 27 | fd = socket( AF_INET, SOCK_DGRAM, 0 ); |
21 | if(fd == -1) | 28 | if(fd == -1) |
22 | return; | 29 | return; |
23 | 30 | ||
24 | const char* buffer[200]; | 31 | const char* buffer[200]; |
25 | memset( &iwr, 0, sizeof( iwr ) ); | 32 | memset( &iwr, 0, sizeof( iwr ) ); |
26 | iwr.u.essid.pointer = (caddr_t) buffer; | 33 | iwr.u.essid.pointer = (caddr_t) buffer; |
27 | iwr.u.essid.length = IW_ESSID_MAX_SIZE; | 34 | iwr.u.essid.length = IW_ESSID_MAX_SIZE; |
28 | iwr.u.essid.flags = 0; | 35 | iwr.u.essid.flags = 0; |
29 | 36 | ||
30 | // check if it is an IEEE 802.11 standard conform | 37 | // check if it is an IEEE 802.11 standard conform |
31 | // wireless device by sending SIOCGIWESSID | 38 | // wireless device by sending SIOCGIWESSID |
32 | // which also gives back the Extended Service Set ID | 39 | // which also gives back the Extended Service Set ID |
33 | // (see IEEE 802.11 for more information) | 40 | // (see IEEE 802.11 for more information) |
34 | 41 | ||
35 | const char* iname = interface.latin1(); | 42 | const char* iname = interface.latin1(); |
36 | strcpy( iwr.ifr_ifrn.ifrn_name, (const char *)iname ); | 43 | strcpy( iwr.ifr_ifrn.ifrn_name, (const char *)iname ); |
37 | if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr ) ) | 44 | if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr ) ) |
38 | hasWirelessExtensions = true; | 45 | hasWirelessExtensions = true; |
39 | } | 46 | } |
40 | 47 | ||
41 | /** | 48 | /** |
42 | * @return QString the station name of the access point. | 49 | * @return QString the station name of the access point. |
43 | */ | 50 | */ |
44 | QString WExtensions::station(){ | 51 | QString WExtensions::station(){ |
45 | if(!hasWirelessExtensions) | 52 | if(!hasWirelessExtensions) |
46 | return QString(); | 53 | return QString(); |
47 | const char* buffer[200]; | 54 | const char* buffer[200]; |
48 | iwr.u.data.pointer = (caddr_t) buffer; | 55 | iwr.u.data.pointer = (caddr_t) buffer; |
49 | iwr.u.data.length = IW_ESSID_MAX_SIZE; | 56 | iwr.u.data.length = IW_ESSID_MAX_SIZE; |
50 | iwr.u.data.flags = 0; | 57 | iwr.u.data.flags = 0; |
51 | if ( 0 == ioctl( fd, SIOCGIWNICKN, &iwr )){ | 58 | if ( 0 == ioctl( fd, SIOCGIWNICKN, &iwr )){ |
52 | iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0'; | 59 | iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0'; |
53 | return QString(iwr.u.data.pointer); | 60 | return QString(iwr.u.data.pointer); |
54 | } | 61 | } |
55 | return QString(); | 62 | return QString(); |
56 | } | 63 | } |
57 | 64 | ||
58 | /** | 65 | /** |
59 | * @return QString the essid of the host 802.11 access point. | 66 | * @return QString the essid of the host 802.11 access point. |
60 | */ | 67 | */ |
61 | QString WExtensions::essid(){ | 68 | QString WExtensions::essid(){ |
62 | if(!hasWirelessExtensions) | 69 | if(!hasWirelessExtensions) |
63 | return QString(); | 70 | return QString(); |
64 | if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr )){ | 71 | if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr )){ |
65 | iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length] = '\0'; | 72 | iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length] = '\0'; |
66 | return QString(iwr.u.essid.pointer); | 73 | return QString(iwr.u.essid.pointer); |
67 | } | 74 | } |
68 | return QString(); | 75 | return QString(); |
69 | } | 76 | } |
70 | 77 | ||
71 | /** | 78 | /** |
72 | * @return QString the mode of interface | 79 | * @return QString the mode of interface |
73 | */ | 80 | */ |
74 | QString WExtensions::mode(){ | 81 | QString WExtensions::mode(){ |
75 | if(!hasWirelessExtensions) | 82 | if(!hasWirelessExtensions) |
76 | return QString(); | 83 | return QString(); |
77 | if ( 0 == ioctl( fd, SIOCGIWMODE, &iwr ) ) | 84 | if ( 0 == ioctl( fd, SIOCGIWMODE, &iwr ) ) |
78 | return QString("%1").arg(iwr.u.mode == IW_MODE_ADHOC ? "Ad-Hoc" : "Managed"); | 85 | return QString("%1").arg(iwr.u.mode == IW_MODE_ADHOC ? "Ad-Hoc" : "Managed"); |
79 | return QString(); | 86 | return QString(); |
80 | } | 87 | } |
81 | 88 | ||
82 | /** | 89 | /** |
83 | * Get the frequency that the interface is running at. | 90 | * Get the frequency that the interface is running at. |
84 | * @return int the frequency that the interfacae is running at. | 91 | * @return int the frequency that the interfacae is running at. |
85 | */ | 92 | */ |
86 | double WExtensions::frequency(){ | 93 | double WExtensions::frequency(){ |
87 | if(!hasWirelessExtensions) | 94 | if(!hasWirelessExtensions) |
88 | return 0; | 95 | return 0; |
89 | if ( 0 == ioctl( fd, SIOCGIWFREQ, &iwr )) | 96 | if ( 0 == ioctl( fd, SIOCGIWFREQ, &iwr )) |
90 | return (double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000); | 97 | return (double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000); |
91 | return 0; | 98 | return 0; |
92 | } | 99 | } |
93 | 100 | ||
94 | /** | 101 | /** |
95 | * Get the channel that the interface is running at. | 102 | * Get the channel that the interface is running at. |
96 | * @return int the channel that the interfacae is running at. | 103 | * @return int the channel that the interfacae is running at. |
97 | */ | 104 | */ |
98 | int WExtensions::channel(){ | 105 | int WExtensions::channel(){ |
99 | if(!hasWirelessExtensions) | 106 | if(!hasWirelessExtensions) |
100 | return 0; | 107 | return 0; |
101 | if ( 0 != ioctl( fd, SIOCGIWFREQ, &iwr )) | 108 | if ( 0 != ioctl( fd, SIOCGIWFREQ, &iwr )) |
102 | return 0; | 109 | return 0; |
103 | 110 | ||
104 | // http://www.elanix.com/pdf/an137e.pdf | 111 | // http://www.elanix.com/pdf/an137e.pdf |
105 | 112 | ||
106 | double num = (double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000); | 113 | double num = (double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000); |
107 | double left = 2.401; | 114 | double left = 2.401; |
108 | double right = 2.416; | 115 | double right = 2.416; |
109 | for(int channel = 1; channel<= 15; channel++){ | 116 | for(int channel = 1; channel<= 15; channel++){ |
110 | if( num >= left && num <= right ) | 117 | if( num >= left && num <= right ) |
111 | return channel; | 118 | return channel; |
112 | left += 0.005; | 119 | left += 0.005; |
113 | right += 0.005; | 120 | right += 0.005; |
114 | } | 121 | } |
115 | odebug << QString("Unknown frequency: %1, returning -1 for the channel.").arg(num).latin1() << oendl; | 122 | odebug << QString("Unknown frequency: %1, returning -1 for the channel.").arg(num).latin1() << oendl; |
116 | return -1; | 123 | return -1; |
117 | } | 124 | } |
118 | 125 | ||
119 | /*** | 126 | /*** |
120 | * Get the current rate that the card is transmiting at. | 127 | * Get the current rate that the card is transmiting at. |
121 | * @return double the rate, 0 if error. | 128 | * @return double the rate, 0 if error. |
122 | */ | 129 | */ |
123 | double WExtensions::rate(){ | 130 | double WExtensions::rate(){ |
124 | if(!hasWirelessExtensions) | 131 | if(!hasWirelessExtensions) |
125 | return 0; | 132 | return 0; |
126 | if(0 == ioctl(fd, SIOCGIWRATE, &iwr)){ | 133 | if(0 == ioctl(fd, SIOCGIWRATE, &iwr)){ |
127 | return ((double)iwr.u.bitrate.value)/1000000; | 134 | return ((double)iwr.u.bitrate.value)/1000000; |
128 | } | 135 | } |
129 | return 0; | 136 | return 0; |
130 | } | 137 | } |
131 | 138 | ||
132 | 139 | ||
133 | /** | 140 | /** |
134 | * @return QString the AccessPoint that the interface is connected to. | 141 | * @return QString the AccessPoint that the interface is connected to. |
135 | */ | 142 | */ |
136 | QString WExtensions::ap(){ | 143 | QString WExtensions::ap(){ |
137 | if(!hasWirelessExtensions) | 144 | if(!hasWirelessExtensions) |
138 | return QString(); | 145 | return QString(); |
139 | if ( 0 == ioctl( fd, SIOCGIWAP, &iwr )){ | 146 | if ( 0 == ioctl( fd, SIOCGIWAP, &iwr )){ |
140 | QString ap; | 147 | QString ap; |
141 | ap = ap.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X", | 148 | ap = ap.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X", |
142 | iwr.u.ap_addr.sa_data[0]&0xff, | 149 | iwr.u.ap_addr.sa_data[0]&0xff, |
143 | iwr.u.ap_addr.sa_data[1]&0xff, | 150 | iwr.u.ap_addr.sa_data[1]&0xff, |
144 | iwr.u.ap_addr.sa_data[2]&0xff, | 151 | iwr.u.ap_addr.sa_data[2]&0xff, |
145 | iwr.u.ap_addr.sa_data[3]&0xff, | 152 | iwr.u.ap_addr.sa_data[3]&0xff, |
146 | iwr.u.ap_addr.sa_data[4]&0xff, | 153 | iwr.u.ap_addr.sa_data[4]&0xff, |
147 | iwr.u.ap_addr.sa_data[5]&0xff ); | 154 | iwr.u.ap_addr.sa_data[5]&0xff ); |
148 | return ap; | 155 | return ap; |
149 | } | 156 | } |
150 | else return QString(); | 157 | else return QString(); |
151 | } | 158 | } |
152 | 159 | ||
153 | /** | 160 | /** |
154 | * Get the stats for interfaces | 161 | * Get the stats for interfaces |
155 | * @param signal the signal strength of interface | 162 | * @param signal the signal strength of interface |
156 | * @param noise the noise level of the interface | 163 | * @param noise the noise level of the interface |
157 | * @param quality the quality level of the interface | 164 | * @param quality the quality level of the interface |
158 | * @return bool true if successful | 165 | * @return bool true if successful |
159 | */ | 166 | */ |
160 | bool WExtensions::stats(int &signal, int &noise, int &quality){ | 167 | bool WExtensions::stats(int &signal, int &noise, int &quality){ |
161 | // gather link quality from /proc/net/wireless | 168 | // gather link quality from /proc/net/wireless |
162 | if(!QFile::exists(PROCNETWIRELESS)) | 169 | if(!QFile::exists(PROCNETWIRELESS)) |
163 | return false; | 170 | return false; |
164 | 171 | ||
165 | char c; | 172 | char c; |
166 | QString status; | 173 | QString status; |
167 | QString name; | 174 | QString name; |
168 | 175 | ||
169 | QFile wfile( PROCNETWIRELESS ); | 176 | QFile wfile( PROCNETWIRELESS ); |
170 | if(!wfile.open( IO_ReadOnly )) | 177 | if(!wfile.open( IO_ReadOnly )) |
171 | return false; | 178 | return false; |
172 | 179 | ||
173 | QTextStream wstream( &wfile ); | 180 | QTextStream wstream( &wfile ); |
174 | wstream.readLine(); // skip the first two lines | 181 | wstream.readLine(); // skip the first two lines |
175 | wstream.readLine(); // because they only contain headers | 182 | wstream.readLine(); // because they only contain headers |
176 | while(!wstream.atEnd()){ | 183 | while(!wstream.atEnd()){ |
177 | wstream >> name >> status >> quality >> c >> signal >> c >> noise; | 184 | wstream >> name >> status >> quality >> c >> signal >> c >> noise; |
178 | if(name == QString("%1:").arg(interface)){ | 185 | if(name == QString("%1:").arg(interface)){ |
179 | if ( quality > 92 ) | 186 | if ( quality > 92 ) |
180 | odebug << "WIFIAPPLET: D'oh! Quality " << quality << " > estimated max!\n" << oendl; | 187 | odebug << "WIFIAPPLET: D'oh! Quality " << quality << " > estimated max!\n" << oendl; |
181 | if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) ) | 188 | if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) ) |
182 | odebug << "WIFIAPPLET: Doh! Strength " << signal << " > estimated max!\n" << oendl; | 189 | odebug << "WIFIAPPLET: Doh! Strength " << signal << " > estimated max!\n" << oendl; |
183 | if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) ) | 190 | if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) ) |
184 | odebug << "WIFIAPPLET: Doh! Noise " << noise << " > estimated max!\n" << oendl; | 191 | odebug << "WIFIAPPLET: Doh! Noise " << noise << " > estimated max!\n" << oendl; |
185 | //odebug << QString("q:%1, s:%2, n:%3").arg(quality).arg(signal).arg(noise).latin1() << oendl; | 192 | //odebug << QString("q:%1, s:%2, n:%3").arg(quality).arg(signal).arg(noise).latin1() << oendl; |
186 | signal = ( ( signal-IW_LOWER ) * 100 ) / IW_UPPER; | 193 | signal = ( ( signal-IW_LOWER ) * 100 ) / IW_UPPER; |
187 | noise = ( ( noise-IW_LOWER ) * 100 ) / IW_UPPER; | 194 | noise = ( ( noise-IW_LOWER ) * 100 ) / IW_UPPER; |
188 | quality = ( quality*100 ) / 92; | 195 | quality = ( quality*100 ) / 92; |
189 | return true; | 196 | return true; |
190 | } | 197 | } |
191 | } | 198 | } |
192 | 199 | ||
193 | odebug << "WExtensions::statsCard no longer present." << oendl; | 200 | odebug << "WExtensions::statsCard no longer present." << oendl; |
194 | quality = -1; | 201 | quality = -1; |
195 | signal = IW_LOWER; | 202 | signal = IW_LOWER; |
196 | noise = IW_LOWER; | 203 | noise = IW_LOWER; |
197 | return false; | 204 | return false; |
198 | } | 205 | } |
199 | 206 | ||
200 | // wextensions.cpp | 207 | // wextensions.cpp |
diff --git a/noncore/settings/networksettings/wlan/wlan.pro b/noncore/settings/networksettings/wlan/wlan.pro index 89867ae..c94dc0e 100644 --- a/noncore/settings/networksettings/wlan/wlan.pro +++ b/noncore/settings/networksettings/wlan/wlan.pro | |||
@@ -1,28 +1,25 @@ | |||
1 | # | ||
2 | TEMPLATE = lib | 1 | TEMPLATE = lib |
3 | #TEMPLATE = app | ||
4 | CONFIG += qt plugin warn_on | 2 | CONFIG += qt plugin warn_on |
5 | #CONFIG += qt plugin warn_on | ||
6 | DESTDIR = $(OPIEDIR)/plugins/networksettings | 3 | DESTDIR = $(OPIEDIR)/plugins/networksettings |
7 | HEADERS = infoimp.h wlanmodule.h wextensions.h keyedit.h | 4 | HEADERS = infoimp.h wlanmodule.h wextensions.h keyedit.h |
8 | SOURCES = infoimp.cpp wlanmodule.cpp wextensions.cpp keyedit.cpp | 5 | SOURCES = infoimp.cpp wlanmodule.cpp wextensions.cpp keyedit.cpp |
9 | INCLUDEPATH+= $(OPIEDIR)/include ../ ../interfaces/ | 6 | INCLUDEPATH+= $(OPIEDIR)/include ../ ../interfaces/ |
10 | DEPENDPATH+= $(OPIEDIR)/include | 7 | DEPENDPATH+= $(OPIEDIR)/include |
11 | LIBS += -lqpe -L../interfaces/ -linterfaces -lopiecore2 -lopienet2 | 8 | LIBS += -lqpe -L../interfaces/ -linterfaces -lopiecore2 -lopienet2 |
12 | INTERFACES= wlan.ui info.ui | 9 | INTERFACES= wlan.ui info.ui |
13 | TARGET = wlan | 10 | TARGET = wlan |
14 | VERSION = 1.0.0 | 11 | VERSION = 1.0.0 |
15 | 12 | ||
16 | #CONFIG += wirelessopts | 13 | #CONFIG += wirelessopts |
17 | 14 | ||
18 | wirelessopts { | 15 | wirelessopts { |
19 | HEADERS+= wlanimp.h | 16 | HEADERS+= wlanimp.h |
20 | SOURCES+= wlanimp.cpp | 17 | SOURCES+= wlanimp.cpp |
21 | } | 18 | } |
22 | 19 | ||
23 | ! wirelessopts { | 20 | ! wirelessopts { |
24 | HEADERS+= wlanimp2.h | 21 | HEADERS+= wlanimp2.h |
25 | SOURCES += wlanimp2.cpp | 22 | SOURCES += wlanimp2.cpp |
26 | } | 23 | } |
27 | 24 | ||
28 | include ( $(OPIEDIR)/include.pro ) | 25 | include ( $(OPIEDIR)/include.pro ) |
diff --git a/noncore/settings/networksettings/wlan/wlanimp2.cpp b/noncore/settings/networksettings/wlan/wlanimp2.cpp index e4aa2f9..4294b12 100644 --- a/noncore/settings/networksettings/wlan/wlanimp2.cpp +++ b/noncore/settings/networksettings/wlan/wlanimp2.cpp | |||
@@ -1,492 +1,494 @@ | |||
1 | #include "wlanimp2.h" | 1 | #include "wlanimp2.h" |
2 | #include "keyedit.h" | 2 | #include "keyedit.h" |
3 | #include "interfacesetupimp.h" | 3 | #include "interfacesetupimp.h" |
4 | |||
5 | #include "../interfaces/interface.h" | 4 | #include "../interfaces/interface.h" |
6 | 5 | ||
7 | #include <assert.h> | 6 | #include <assert.h> |
8 | #include <errno.h> | 7 | #include <errno.h> |
9 | #include <string.h> | 8 | #include <string.h> |
10 | 9 | ||
10 | /* OPIE */ | ||
11 | #include <opie2/odebug.h> | ||
12 | #include <opie2/oprocess.h> | ||
13 | #include <opie2/onetwork.h> | ||
14 | #include <opie2/opcap.h> | ||
15 | #include <qpe/resource.h> | ||
16 | using namespace Opie::Core; | ||
17 | using namespace Opie::Net; | ||
18 | |||
19 | /* QT */ | ||
11 | #include <qapplication.h> | 20 | #include <qapplication.h> |
12 | #include <qfile.h> | 21 | #include <qfile.h> |
13 | #include <qdir.h> | 22 | #include <qdir.h> |
14 | #include <qdialog.h> | 23 | #include <qdialog.h> |
15 | #include <qtextstream.h> | 24 | #include <qtextstream.h> |
16 | #include <qmessagebox.h> | 25 | #include <qmessagebox.h> |
17 | #include <qlineedit.h> | 26 | #include <qlineedit.h> |
18 | #include <qlabel.h> | 27 | #include <qlabel.h> |
19 | #include <qspinbox.h> | 28 | #include <qspinbox.h> |
20 | #include <qradiobutton.h> | 29 | #include <qradiobutton.h> |
21 | #include <qpushbutton.h> | 30 | #include <qpushbutton.h> |
22 | #include <qcheckbox.h> | 31 | #include <qcheckbox.h> |
23 | #include <qtabwidget.h> | 32 | #include <qtabwidget.h> |
24 | #include <qcombobox.h> | 33 | #include <qcombobox.h> |
25 | #include <qlistview.h> | 34 | #include <qlistview.h> |
26 | #include <qvbox.h> | 35 | #include <qvbox.h> |
27 | #include <qprogressbar.h> | 36 | #include <qprogressbar.h> |
28 | 37 | ||
29 | #ifdef QWS | 38 | /* STD */ |
30 | #include <qpe/resource.h> | 39 | #include <assert.h> |
31 | #include <opie2/oprocess.h> | 40 | #include <errno.h> |
32 | #include <opie2/onetwork.h> | 41 | #include <string.h> |
33 | #include <opie2/opcap.h> | ||
34 | #else | ||
35 | #define OProcess KProcess | ||
36 | #include <kprocess.h> | ||
37 | #endif | ||
38 | 42 | ||
39 | #define WIRELESS_OPTS "/etc/pcmcia/wireless.opts" | 43 | #define WIRELESS_OPTS "/etc/pcmcia/wireless.opts" |
40 | #define PREUP "/etc/network/if-pre-up.d/wireless-tools" | 44 | #define PREUP "/etc/network/if-pre-up.d/wireless-tools" |
41 | 45 | ||
42 | /** | 46 | /** |
43 | * Constructor, read in the wireless.opts file for parsing later. | 47 | * Constructor, read in the wireless.opts file for parsing later. |
44 | */ | 48 | */ |
45 | using namespace Opie::Net; | ||
46 | using namespace Opie::Core; | ||
47 | WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : WLAN(parent, name, modal, fl), interface(i), currentProfile("*") { | 49 | WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : WLAN(parent, name, modal, fl), interface(i), currentProfile("*") { |
48 | interfaces = new Interfaces(); | 50 | interfaces = new Interfaces(); |
49 | interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, interfaces); | 51 | interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, interfaces); |
50 | tabWidget->insertTab(interfaceSetup, "TCP/IP"); | 52 | tabWidget->insertTab(interfaceSetup, "TCP/IP"); |
51 | 53 | ||
52 | // 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 |
53 | QFile file(QString(PREUP)); | 55 | QFile file(QString(PREUP)); |
54 | if (file.exists()) { | 56 | if (file.exists()) { |
55 | 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; |
56 | } | 58 | } |
57 | 59 | ||
58 | connect( rescanButton, SIGNAL( clicked() ), this, SLOT( rescanNeighbourhood() ) ); | 60 | connect( rescanButton, SIGNAL( clicked() ), this, SLOT( rescanNeighbourhood() ) ); |
59 | connect( netView, SIGNAL( clicked(QListViewItem*) ), this, SLOT( selectNetwork(QListViewItem*) ) ); | 61 | connect( netView, SIGNAL( clicked(QListViewItem*) ), this, SLOT( selectNetwork(QListViewItem*) ) ); |
60 | netView->setColumnAlignment( col_chn, AlignCenter ); | 62 | netView->setColumnAlignment( col_chn, AlignCenter ); |
61 | netView->setItemMargin( 3 ); | 63 | netView->setItemMargin( 3 ); |
62 | netView->setAllColumnsShowFocus( true ); | 64 | netView->setAllColumnsShowFocus( true ); |
63 | 65 | ||
64 | } | 66 | } |
65 | 67 | ||
66 | WLANImp::~WLANImp() { | 68 | WLANImp::~WLANImp() { |
67 | //FIXME: delete interfaces; | 69 | //FIXME: delete interfaces; |
68 | } | 70 | } |
69 | 71 | ||
70 | /** | 72 | /** |
71 | * Change the profile for both wireless settings and network settings. | 73 | * Change the profile for both wireless settings and network settings. |
72 | */ | 74 | */ |
73 | void WLANImp::setProfile(const QString &profile){ | 75 | void WLANImp::setProfile(const QString &profile){ |
74 | interfaceSetup->setProfile(profile); | 76 | interfaceSetup->setProfile(profile); |
75 | parseOpts(); | 77 | parseOpts(); |
76 | } | 78 | } |
77 | 79 | ||
78 | void WLANImp::parseOpts() { | 80 | void WLANImp::parseOpts() { |
79 | bool error; | 81 | bool error; |
80 | QString opt; | 82 | QString opt; |
81 | 83 | ||
82 | if (! interfaces->isInterfaceSet()) | 84 | if (! interfaces->isInterfaceSet()) |
83 | return; | 85 | return; |
84 | 86 | ||
85 | 87 | ||
86 | opt = interfaces->getInterfaceOption("wireless_essid", error); | 88 | opt = interfaces->getInterfaceOption("wireless_essid", error); |
87 | if(opt == "any" || opt == "off" || opt.isNull()){ | 89 | if(opt == "any" || opt == "off" || opt.isNull()){ |
88 | essid->setEditText("any"); | 90 | essid->setEditText("any"); |
89 | } else { | 91 | } else { |
90 | essid->setEditText(opt); | 92 | essid->setEditText(opt); |
91 | } | 93 | } |
92 | 94 | ||
93 | opt = interfaces->getInterfaceOption("wireless_mode", error).simplifyWhiteSpace(); | 95 | opt = interfaces->getInterfaceOption("wireless_mode", error).simplifyWhiteSpace(); |
94 | 96 | ||
95 | for ( int i = 0; i < mode->count(); i++) | 97 | for ( int i = 0; i < mode->count(); i++) |
96 | if ( mode->text( i ) == opt ) mode->setCurrentItem( i ); | 98 | if ( mode->text( i ) == opt ) mode->setCurrentItem( i ); |
97 | 99 | ||
98 | opt = interfaces->getInterfaceOption("wireless_ap", error).simplifyWhiteSpace(); | 100 | opt = interfaces->getInterfaceOption("wireless_ap", error).simplifyWhiteSpace(); |
99 | if (! opt.isNull()) { | 101 | if (! opt.isNull()) { |
100 | specifyAp->setChecked(true); | 102 | specifyAp->setChecked(true); |
101 | macEdit->setText(opt); | 103 | macEdit->setText(opt); |
102 | } | 104 | } |
103 | 105 | ||
104 | opt = interfaces->getInterfaceOption("wireless_channel", error).simplifyWhiteSpace(); | 106 | opt = interfaces->getInterfaceOption("wireless_channel", error).simplifyWhiteSpace(); |
105 | if (! opt.isNull()) { | 107 | if (! opt.isNull()) { |
106 | specifyChan->setChecked(true); | 108 | specifyChan->setChecked(true); |
107 | networkChannel->setValue(opt.toInt()); | 109 | networkChannel->setValue(opt.toInt()); |
108 | } | 110 | } |
109 | 111 | ||
110 | opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace(); | 112 | opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace(); |
111 | if (opt.isNull()) | 113 | if (opt.isNull()) |
112 | opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace(); | 114 | opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace(); |
113 | parseKeyStr(opt); | 115 | parseKeyStr(opt); |
114 | } | 116 | } |
115 | 117 | ||
116 | void WLANImp::parseKeyStr(QString keystr) { | 118 | void WLANImp::parseKeyStr(QString keystr) { |
117 | int loc = 0; | 119 | int loc = 0; |
118 | int index = 1; | 120 | int index = 1; |
119 | QString key; | 121 | QString key; |
120 | QStringList keys = QStringList::split(QRegExp("\\s+"), keystr); | 122 | QStringList keys = QStringList::split(QRegExp("\\s+"), keystr); |
121 | int enc = -1; // encryption state | 123 | int enc = -1; // encryption state |
122 | 124 | ||
123 | for (QStringList::Iterator it = keys.begin(); it != keys.end(); ++it) { | 125 | for (QStringList::Iterator it = keys.begin(); it != keys.end(); ++it) { |
124 | if ((*it).left(3) == "off") { | 126 | if ((*it).left(3) == "off") { |
125 | // encryption disabled | 127 | // encryption disabled |
126 | enc = 0; | 128 | enc = 0; |
127 | } else if ((*it).left(2) == "on") { | 129 | } else if ((*it).left(2) == "on") { |
128 | // encryption enabled | 130 | // encryption enabled |
129 | enc = 1; | 131 | enc = 1; |
130 | } else if ((*it).left(4) == "open") { | 132 | } else if ((*it).left(4) == "open") { |
131 | // open mode, accept non encrypted packets | 133 | // open mode, accept non encrypted packets |
132 | acceptNonEnc->setChecked(true); | 134 | acceptNonEnc->setChecked(true); |
133 | } else if ((*it).left(10) == "restricted") { | 135 | } else if ((*it).left(10) == "restricted") { |
134 | // restricted mode, only accept encrypted packets | 136 | // restricted mode, only accept encrypted packets |
135 | rejectNonEnc->setChecked(true); | 137 | rejectNonEnc->setChecked(true); |
136 | } else if ((*it).left(3) == "key") { | 138 | } else if ((*it).left(3) == "key") { |
137 | // new set of options | 139 | // new set of options |
138 | } else if ((*it).left(1) == "[") { | 140 | } else if ((*it).left(1) == "[") { |
139 | index = (*it).mid(1, 1).toInt(); | 141 | index = (*it).mid(1, 1).toInt(); |
140 | // switch current key to index | 142 | // switch current key to index |
141 | switch (index) { | 143 | switch (index) { |
142 | case 1: | 144 | case 1: |
143 | keyRadio0->setChecked(true); | 145 | keyRadio0->setChecked(true); |
144 | break; | 146 | break; |
145 | case 2: | 147 | case 2: |
146 | keyRadio1->setChecked(true); | 148 | keyRadio1->setChecked(true); |
147 | break; | 149 | break; |
148 | case 3: | 150 | case 3: |
149 | keyRadio2->setChecked(true); | 151 | keyRadio2->setChecked(true); |
150 | break; | 152 | break; |
151 | case 4: | 153 | case 4: |
152 | keyRadio3->setChecked(true); | 154 | keyRadio3->setChecked(true); |
153 | break; | 155 | break; |
154 | } | 156 | } |
155 | } else { | 157 | } else { |
156 | // key | 158 | // key |
157 | key = (*it); | 159 | key = (*it); |
158 | } | 160 | } |
159 | if (! key.isNull()) { | 161 | if (! key.isNull()) { |
160 | if (enc == -1) | 162 | if (enc == -1) |
161 | enc = 1; | 163 | enc = 1; |
162 | QStringList::Iterator next = ++it; | 164 | QStringList::Iterator next = ++it; |
163 | if (it == keys.end()) { | 165 | if (it == keys.end()) { |
164 | break; | 166 | break; |
165 | } | 167 | } |
166 | if ((*(next)).left(1) == "[") { | 168 | if ((*(next)).left(1) == "[") { |
167 | // set key at index | 169 | // set key at index |
168 | index = (*(next)).mid(1, 1).toInt(); | 170 | index = (*(next)).mid(1, 1).toInt(); |
169 | } else { | 171 | } else { |
170 | index = 1; | 172 | index = 1; |
171 | } | 173 | } |
172 | switch (index) { | 174 | switch (index) { |
173 | case 1: | 175 | case 1: |
174 | keyLineEdit0->setText(key); | 176 | keyLineEdit0->setText(key); |
175 | break; | 177 | break; |
176 | case 2: | 178 | case 2: |
177 | keyLineEdit1->setText(key); | 179 | keyLineEdit1->setText(key); |
178 | break; | 180 | break; |
179 | case 3: | 181 | case 3: |
180 | keyLineEdit2->setText(key); | 182 | keyLineEdit2->setText(key); |
181 | break; | 183 | break; |
182 | case 4: | 184 | case 4: |
183 | keyLineEdit3->setText(key); | 185 | keyLineEdit3->setText(key); |
184 | break; | 186 | break; |
185 | } | 187 | } |
186 | key = QString::null; | 188 | key = QString::null; |
187 | } | 189 | } |
188 | } | 190 | } |
189 | if (enc == 1) { | 191 | if (enc == 1) { |
190 | wepEnabled->setChecked(true); | 192 | wepEnabled->setChecked(true); |
191 | } else { | 193 | } else { |
192 | wepEnabled->setChecked(false); | 194 | wepEnabled->setChecked(false); |
193 | } | 195 | } |
194 | } | 196 | } |
195 | 197 | ||
196 | /** | 198 | /** |
197 | * Check to see if the current config is valid | 199 | * Check to see if the current config is valid |
198 | * Save interfaces | 200 | * Save interfaces |
199 | */ | 201 | */ |
200 | void WLANImp::accept() { | 202 | void WLANImp::accept() { |
201 | if (wepEnabled->isChecked()) { | 203 | if (wepEnabled->isChecked()) { |
202 | if ((keyRadio0->isChecked() && keyLineEdit0->text().isEmpty()) || | 204 | if ((keyRadio0->isChecked() && keyLineEdit0->text().isEmpty()) || |
203 | (keyRadio1->isChecked() && keyLineEdit1->text().isEmpty()) || | 205 | (keyRadio1->isChecked() && keyLineEdit1->text().isEmpty()) || |
204 | (keyRadio2->isChecked() && keyLineEdit2->text().isEmpty()) || | 206 | (keyRadio2->isChecked() && keyLineEdit2->text().isEmpty()) || |
205 | (keyRadio3->isChecked() && keyLineEdit3->text().isEmpty())) { | 207 | (keyRadio3->isChecked() && keyLineEdit3->text().isEmpty())) { |
206 | QMessageBox::information(this, "Error", "Please enter a WEP key.", QMessageBox::Ok); | 208 | QMessageBox::information(this, "Error", "Please enter a WEP key.", QMessageBox::Ok); |
207 | return; | 209 | return; |
208 | } | 210 | } |
209 | } | 211 | } |
210 | 212 | ||
211 | if (essid->currentText().isEmpty()) { | 213 | if (essid->currentText().isEmpty()) { |
212 | QMessageBox::information(this, "Error", "Please select/enter an ESSID.", QMessageBox::Ok); | 214 | QMessageBox::information(this, "Error", "Please select/enter an ESSID.", QMessageBox::Ok); |
213 | return; | 215 | return; |
214 | } | 216 | } |
215 | 217 | ||
216 | if (specifyAp->isChecked() && macEdit->text().isEmpty()) { | 218 | if (specifyAp->isChecked() && macEdit->text().isEmpty()) { |
217 | 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); |
218 | return; | 220 | return; |
219 | } | 221 | } |
220 | 222 | ||
221 | // Try to save the interfaces settings. | 223 | // Try to save the interfaces settings. |
222 | writeOpts(); | 224 | writeOpts(); |
223 | 225 | ||
224 | // Close out the dialog | 226 | // Close out the dialog |
225 | // FIXME: QDialog::accept(); | 227 | // FIXME: QDialog::accept(); |
226 | } | 228 | } |
227 | 229 | ||
228 | void WLANImp::writeOpts() { | 230 | void WLANImp::writeOpts() { |
229 | // 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 |
230 | if(!interfaces->isInterfaceSet()){ | 232 | if(!interfaces->isInterfaceSet()){ |
231 | QMessageBox::warning(0,"Inface not set","should not happen!!!"); | 233 | QMessageBox::warning(0,"Inface not set","should not happen!!!"); |
232 | return; | 234 | return; |
233 | } | 235 | } |
234 | bool error = false; | 236 | bool error = false; |
235 | 237 | ||
236 | odebug << "setting wlan interface " << interfaces->getInterfaceName( error ).latin1() << "" << oendl; | 238 | odebug << "setting wlan interface " << interfaces->getInterfaceName( error ).latin1() << "" << oendl; |
237 | 239 | ||
238 | if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!"); | 240 | if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!"); |
239 | 241 | ||
240 | interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText()); | 242 | interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText()); |
241 | interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText()); | 243 | interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText()); |
242 | 244 | ||
243 | if (specifyAp->isChecked()) { | 245 | if (specifyAp->isChecked()) { |
244 | interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text()); | 246 | interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text()); |
245 | } else { | 247 | } else { |
246 | interfaces->removeInterfaceOption(QString("wireless_ap")); | 248 | interfaces->removeInterfaceOption(QString("wireless_ap")); |
247 | } | 249 | } |
248 | 250 | ||
249 | if (specifyChan->isChecked()) { | 251 | if (specifyChan->isChecked()) { |
250 | interfaces->setInterfaceOption(QString("wireless_channel"), networkChannel->text()); | 252 | interfaces->setInterfaceOption(QString("wireless_channel"), networkChannel->text()); |
251 | } else { | 253 | } else { |
252 | interfaces->removeInterfaceOption(QString("wireless_channel")); | 254 | interfaces->removeInterfaceOption(QString("wireless_channel")); |
253 | } | 255 | } |
254 | 256 | ||
255 | if (wepEnabled->isChecked()) { | 257 | if (wepEnabled->isChecked()) { |
256 | QStringList keyList; | 258 | QStringList keyList; |
257 | 259 | ||
258 | if (! keyLineEdit0->text().isNull()) { | 260 | if (! keyLineEdit0->text().isNull()) { |
259 | keyList += keyLineEdit0->text(); | 261 | keyList += keyLineEdit0->text(); |
260 | keyList += "[1]"; | 262 | keyList += "[1]"; |
261 | } //else | 263 | } //else |
262 | if (! keyLineEdit1->text().isNull()) { | 264 | if (! keyLineEdit1->text().isNull()) { |
263 | keyList += keyLineEdit1->text(); | 265 | keyList += keyLineEdit1->text(); |
264 | keyList += "[2]"; | 266 | keyList += "[2]"; |
265 | } //else | 267 | } //else |
266 | if (! keyLineEdit2->text().isNull()) { | 268 | if (! keyLineEdit2->text().isNull()) { |
267 | keyList += keyLineEdit2->text(); | 269 | keyList += keyLineEdit2->text(); |
268 | keyList += "[3]"; | 270 | keyList += "[3]"; |
269 | } //else | 271 | } //else |
270 | if (! keyLineEdit3->text().isNull()) { | 272 | if (! keyLineEdit3->text().isNull()) { |
271 | keyList += keyLineEdit3->text(); | 273 | keyList += keyLineEdit3->text(); |
272 | keyList += "[4]"; | 274 | keyList += "[4]"; |
273 | } | 275 | } |
274 | if (acceptNonEnc->isChecked()) { | 276 | if (acceptNonEnc->isChecked()) { |
275 | keyList += "open"; | 277 | keyList += "open"; |
276 | } else { | 278 | } else { |
277 | keyList += "restricted"; | 279 | keyList += "restricted"; |
278 | } | 280 | } |
279 | 281 | ||
280 | keyList += "key"; | 282 | keyList += "key"; |
281 | if (keyRadio0->isChecked()) { | 283 | if (keyRadio0->isChecked()) { |
282 | keyList += "[1]"; | 284 | keyList += "[1]"; |
283 | } else if (keyRadio1->isChecked()) { | 285 | } else if (keyRadio1->isChecked()) { |
284 | keyList += "[2]"; | 286 | keyList += "[2]"; |
285 | } else if (keyRadio2->isChecked()) { | 287 | } else if (keyRadio2->isChecked()) { |
286 | keyList += "[3]"; | 288 | keyList += "[3]"; |
287 | } else if (keyRadio3->isChecked()) { | 289 | } else if (keyRadio3->isChecked()) { |
288 | keyList += "[4]"; | 290 | keyList += "[4]"; |
289 | } | 291 | } |
290 | interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" "))); | 292 | interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" "))); |
291 | } else { | 293 | } else { |
292 | interfaces->removeInterfaceOption(QString("wireless_key")); | 294 | interfaces->removeInterfaceOption(QString("wireless_key")); |
293 | } | 295 | } |
294 | interfaces->removeInterfaceOption(QString("wireless_enc")); | 296 | interfaces->removeInterfaceOption(QString("wireless_enc")); |
295 | 297 | ||
296 | if(!interfaceSetup->saveChanges()) | 298 | if(!interfaceSetup->saveChanges()) |
297 | return; | 299 | return; |
298 | 300 | ||
299 | QDialog::accept(); | 301 | QDialog::accept(); |
300 | } | 302 | } |
301 | 303 | ||
302 | /* | 304 | /* |
303 | * Scan for possible wireless networks around... | 305 | * Scan for possible wireless networks around... |
304 | * ... 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> |
305 | */ | 307 | */ |
306 | 308 | ||
307 | void WLANImp::rescanNeighbourhood() | 309 | void WLANImp::rescanNeighbourhood() |
308 | { | 310 | { |
309 | QString name = interface->getInterfaceName(); | 311 | QString name = interface->getInterfaceName(); |
310 | odebug << "rescanNeighbourhood via '" << name << "'" << oendl; | 312 | odebug << "rescanNeighbourhood via '" << name << "'" << oendl; |
311 | 313 | ||
312 | OWirelessNetworkInterface* wiface = static_cast<OWirelessNetworkInterface*>( ONetwork::instance()->interface( name ) ); | 314 | OWirelessNetworkInterface* wiface = static_cast<OWirelessNetworkInterface*>( ONetwork::instance()->interface( name ) ); |
313 | assert( wiface ); | 315 | assert( wiface ); |
314 | 316 | ||
315 | // try to guess device type | 317 | // try to guess device type |
316 | QString devicetype; | 318 | QString devicetype; |
317 | QFile m( "/proc/modules" ); | 319 | QFile m( "/proc/modules" ); |
318 | if ( m.open( IO_ReadOnly ) ) | 320 | if ( m.open( IO_ReadOnly ) ) |
319 | { | 321 | { |
320 | QString line; | 322 | QString line; |
321 | QTextStream modules( &m ); | 323 | QTextStream modules( &m ); |
322 | while( !modules.atEnd() && !devicetype ) | 324 | while( !modules.atEnd() && !devicetype ) |
323 | { | 325 | { |
324 | modules >> line; | 326 | modules >> line; |
325 | if ( line.contains( "cisco" ) ) devicetype = "cisco"; | 327 | if ( line.contains( "cisco" ) ) devicetype = "cisco"; |
326 | else if ( line.contains( "hostap" ) ) devicetype = "hostap"; | 328 | else if ( line.contains( "hostap" ) ) devicetype = "hostap"; |
327 | else if ( line.contains( "prism" ) ) devicetype = "wlan-ng"; /* puke */ | 329 | else if ( line.contains( "prism" ) ) devicetype = "wlan-ng"; /* puke */ |
328 | else if ( line.contains( "orinoco" ) ) devicetype = "orinoco"; | 330 | else if ( line.contains( "orinoco" ) ) devicetype = "orinoco"; |
329 | } | 331 | } |
330 | } | 332 | } |
331 | if ( devicetype.isEmpty() ) | 333 | if ( devicetype.isEmpty() ) |
332 | { | 334 | { |
333 | owarn << "rescanNeighbourhood(): couldn't guess device type :(" << oendl; | 335 | owarn << "rescanNeighbourhood(): couldn't guess device type :(" << oendl; |
334 | return; | 336 | return; |
335 | } | 337 | } |
336 | else | 338 | else |
337 | { | 339 | { |
338 | odebug << "rescanNeighbourhood(): device type seems to be '" << devicetype << "'" << oendl; | 340 | odebug << "rescanNeighbourhood(): device type seems to be '" << devicetype << "'" << oendl; |
339 | } | 341 | } |
340 | 342 | ||
341 | // configure interface to receive 802.11 management frames | 343 | // configure interface to receive 802.11 management frames |
342 | 344 | ||
343 | wiface->setUp( true ); | 345 | wiface->setUp( true ); |
344 | wiface->setPromiscuousMode( true ); | 346 | wiface->setPromiscuousMode( true ); |
345 | 347 | ||
346 | if ( devicetype == "cisco" ) wiface->setMonitoring( new OCiscoMonitoringInterface( wiface, false ) ); | 348 | if ( devicetype == "cisco" ) wiface->setMonitoring( new OCiscoMonitoringInterface( wiface, false ) ); |
347 | else if ( devicetype == "hostap" ) wiface->setMonitoring( new OHostAPMonitoringInterface( wiface, false ) ); | 349 | else if ( devicetype == "hostap" ) wiface->setMonitoring( new OHostAPMonitoringInterface( wiface, false ) ); |
348 | else if ( devicetype == "wlan-ng" ) wiface->setMonitoring( new OWlanNGMonitoringInterface( wiface, false ) ); | 350 | else if ( devicetype == "wlan-ng" ) wiface->setMonitoring( new OWlanNGMonitoringInterface( wiface, false ) ); |
349 | else if ( devicetype == "orinoco" ) wiface->setMonitoring( new OOrinocoMonitoringInterface( wiface, false ) ); | 351 | else if ( devicetype == "orinoco" ) wiface->setMonitoring( new OOrinocoMonitoringInterface( wiface, false ) ); |
350 | else | 352 | else |
351 | { | 353 | { |
352 | odebug << "rescanNeighbourhood(): unsupported device type for monitoring :(" << oendl; | 354 | odebug << "rescanNeighbourhood(): unsupported device type for monitoring :(" << oendl; |
353 | return; | 355 | return; |
354 | } | 356 | } |
355 | 357 | ||
356 | wiface->setMode( "monitor" ); | 358 | wiface->setMode( "monitor" ); |
357 | if ( wiface->mode() != "monitor" ) | 359 | if ( wiface->mode() != "monitor" ) |
358 | { | 360 | { |
359 | 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; |
360 | return; | 362 | return; |
361 | } | 363 | } |
362 | 364 | ||
363 | // open a packet capturer | 365 | // open a packet capturer |
364 | OPacketCapturer* cap = new OPacketCapturer(); | 366 | OPacketCapturer* cap = new OPacketCapturer(); |
365 | cap->open( name ); | 367 | cap->open( name ); |
366 | if ( !cap->isOpen() ) | 368 | if ( !cap->isOpen() ) |
367 | { | 369 | { |
368 | owarn << "rescanNeighbourhood(): Unable to open libpcap (" << strerror( errno ) << ")." << oendl; | 370 | owarn << "rescanNeighbourhood(): Unable to open libpcap (" << strerror( errno ) << ")." << oendl; |
369 | return; | 371 | return; |
370 | } | 372 | } |
371 | 373 | ||
372 | // display splash screen | 374 | // display splash screen |
373 | 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 ); |
374 | splash->setLineWidth( 2 ); | 376 | splash->setLineWidth( 2 ); |
375 | splash->setFrameStyle( QFrame::Panel | QFrame::Raised ); | 377 | splash->setFrameStyle( QFrame::Panel | QFrame::Raised ); |
376 | QVBoxLayout* vbox = new QVBoxLayout( splash, 4, 4 ); | 378 | QVBoxLayout* vbox = new QVBoxLayout( splash, 4, 4 ); |
377 | 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 ); |
378 | QProgressBar* pb = new QProgressBar( wiface->channels(), splash ); | 380 | QProgressBar* pb = new QProgressBar( wiface->channels(), splash ); |
379 | vbox->addWidget( lab ); | 381 | vbox->addWidget( lab ); |
380 | vbox->addWidget( pb ); | 382 | vbox->addWidget( pb ); |
381 | pb->setCenterIndicator( true ); | 383 | pb->setCenterIndicator( true ); |
382 | pb->setFixedHeight( pb->sizeHint().height() ); | 384 | pb->setFixedHeight( pb->sizeHint().height() ); |
383 | QWidget* widgetDesktop = qApp->desktop(); | 385 | QWidget* widgetDesktop = qApp->desktop(); |
384 | int dw = widgetDesktop->width(); | 386 | int dw = widgetDesktop->width(); |
385 | int dh = widgetDesktop->height(); | 387 | int dh = widgetDesktop->height(); |
386 | int pw = vbox->sizeHint().width(); | 388 | int pw = vbox->sizeHint().width(); |
387 | int ph = vbox->sizeHint().height(); | 389 | int ph = vbox->sizeHint().height(); |
388 | splash->setGeometry((dw-pw)/2,(dh-ph)/2,pw,ph); | 390 | splash->setGeometry((dw-pw)/2,(dh-ph)/2,pw,ph); |
389 | splash->show(); | 391 | splash->show(); |
390 | splash->raise(); | 392 | splash->raise(); |
391 | qApp->processEvents(); | 393 | qApp->processEvents(); |
392 | 394 | ||
393 | // set capturer to non-blocking mode | 395 | // set capturer to non-blocking mode |
394 | cap->setBlocking( false ); | 396 | cap->setBlocking( false ); |
395 | 397 | ||
396 | for ( int i = 1; i <= wiface->channels(); ++i ) | 398 | for ( int i = 1; i <= wiface->channels(); ++i ) |
397 | { | 399 | { |
398 | wiface->setChannel( i ); | 400 | wiface->setChannel( i ); |
399 | pb->setProgress( i ); | 401 | pb->setProgress( i ); |
400 | qApp->processEvents(); | 402 | qApp->processEvents(); |
401 | odebug << "rescanNeighbourhood(): listening on channel " << i << "..." << oendl; | 403 | odebug << "rescanNeighbourhood(): listening on channel " << i << "..." << oendl; |
402 | OPacket* p = cap->next( 1000 ); | 404 | OPacket* p = cap->next( 1000 ); |
403 | if ( !p ) | 405 | if ( !p ) |
404 | { | 406 | { |
405 | odebug << "rescanNeighbourhood(): nothing received on channel " << i << "" << oendl; | 407 | odebug << "rescanNeighbourhood(): nothing received on channel " << i << "" << oendl; |
406 | } | 408 | } |
407 | else | 409 | else |
408 | { | 410 | { |
409 | odebug << "rescanNeighbourhood(): TADAA - something came in on channel " << i << "" << oendl; | 411 | odebug << "rescanNeighbourhood(): TADAA - something came in on channel " << i << "" << oendl; |
410 | handlePacket( p ); | 412 | handlePacket( p ); |
411 | } | 413 | } |
412 | } | 414 | } |
413 | 415 | ||
414 | cap->close(); | 416 | cap->close(); |
415 | wiface->setMode( "managed" ); // TODO: use previous mode | 417 | wiface->setMode( "managed" ); // TODO: use previous mode |
416 | wiface->setPromiscuousMode( false ); | 418 | wiface->setPromiscuousMode( false ); |
417 | 419 | ||
418 | splash->hide(); | 420 | splash->hide(); |
419 | delete splash; | 421 | delete splash; |
420 | 422 | ||
421 | } | 423 | } |
422 | 424 | ||
423 | void WLANImp::handlePacket( OPacket* p ) | 425 | void WLANImp::handlePacket( OPacket* p ) |
424 | { | 426 | { |
425 | 427 | ||
426 | // check if we received a beacon frame | 428 | // check if we received a beacon frame |
427 | OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) ); | 429 | OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) ); |
428 | if ( beacon && beacon->managementType() == "Beacon" ) | 430 | if ( beacon && beacon->managementType() == "Beacon" ) |
429 | { | 431 | { |
430 | 432 | ||
431 | QString type; | 433 | QString type; |
432 | if ( beacon->canIBSS() ) | 434 | if ( beacon->canIBSS() ) |
433 | { | 435 | { |
434 | type = "adhoc"; | 436 | type = "adhoc"; |
435 | } | 437 | } |
436 | else if ( beacon->canESS() ) | 438 | else if ( beacon->canESS() ) |
437 | { | 439 | { |
438 | type = "managed"; | 440 | type = "managed"; |
439 | } | 441 | } |
440 | else | 442 | else |
441 | { | 443 | { |
442 | owarn << "handlePacket(): invalid frame [possibly noise] detected!" << oendl; | 444 | owarn << "handlePacket(): invalid frame [possibly noise] detected!" << oendl; |
443 | return; | 445 | return; |
444 | } | 446 | } |
445 | 447 | ||
446 | OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); | 448 | OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); |
447 | QString essid = ssid ? ssid->ID() : QString("<unknown>"); | 449 | QString essid = ssid ? ssid->ID() : QString("<unknown>"); |
448 | OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) ); | 450 | OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) ); |
449 | int channel = ds ? ds->channel() : -1; | 451 | int channel = ds ? ds->channel() : -1; |
450 | OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); | 452 | OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); |
451 | displayFoundNetwork( type, channel, essid, header->macAddress2() ); | 453 | displayFoundNetwork( type, channel, essid, header->macAddress2() ); |
452 | } | 454 | } |
453 | } | 455 | } |
454 | 456 | ||
455 | 457 | ||
456 | void WLANImp::displayFoundNetwork( const QString& mode, int channel, const QString& ssid, const OMacAddress& mac ) | 458 | void WLANImp::displayFoundNetwork( const QString& mode, int channel, const QString& ssid, const OMacAddress& mac ) |
457 | { | 459 | { |
458 | 460 | ||
459 | qDebug( "found network: <%s>, chn %d, ssid '%s', mac '%s'", (const char*) mode, channel, | 461 | qDebug( "found network: <%s>, chn %d, ssid '%s', mac '%s'", (const char*) mode, channel, |
460 | (const char*) ssid, | 462 | (const char*) ssid, |
461 | (const char*) mac.toString() ); | 463 | (const char*) mac.toString() ); |
462 | 464 | ||
463 | QListViewItemIterator it( netView ); | 465 | QListViewItemIterator it( netView ); |
464 | while ( it.current() && it.current()->text( col_ssid ) != ssid ) ++it; | 466 | while ( it.current() && it.current()->text( col_ssid ) != ssid ) ++it; |
465 | if ( !it.current() ) // ssid didn't show up yet | 467 | if ( !it.current() ) // ssid didn't show up yet |
466 | { | 468 | { |
467 | QListViewItem* item = new QListViewItem( netView, mode.left( 1 ).upper(), ssid, QString::number( channel ), mac.toString() ); | 469 | QListViewItem* item = new QListViewItem( netView, mode.left( 1 ).upper(), ssid, QString::number( channel ), mac.toString() ); |
468 | QString name; | 470 | QString name; |
469 | name.sprintf( "networksettings/%s", (const char*) mode ); | 471 | name.sprintf( "networksettings/%s", (const char*) mode ); |
470 | item->setPixmap( col_mode, Resource::loadPixmap( name ) ); | 472 | item->setPixmap( col_mode, Resource::loadPixmap( name ) ); |
471 | qApp->processEvents(); | 473 | qApp->processEvents(); |
472 | } | 474 | } |
473 | 475 | ||
474 | } | 476 | } |
475 | 477 | ||
476 | 478 | ||
477 | void WLANImp::selectNetwork( QListViewItem* item ) | 479 | void WLANImp::selectNetwork( QListViewItem* item ) |
478 | { | 480 | { |
479 | bool ok; | 481 | bool ok; |
480 | if ( item ) | 482 | if ( item ) |
481 | { | 483 | { |
482 | specifyAp->setChecked(true); | 484 | specifyAp->setChecked(true); |
483 | macEdit->setText( item->text( col_mac ) ); | 485 | macEdit->setText( item->text( col_mac ) ); |
484 | specifyChan->setChecked( item->text( col_mode ) == "A" ); | 486 | specifyChan->setChecked( item->text( col_mode ) == "A" ); |
485 | networkChannel->setValue( item->text( col_chn ).toInt( &ok ) ); | 487 | networkChannel->setValue( item->text( col_chn ).toInt( &ok ) ); |
486 | essid->setEditText( item->text( col_ssid ) ); | 488 | essid->setEditText( item->text( col_ssid ) ); |
487 | if ( item->text( col_mode ) == "A" ) | 489 | if ( item->text( col_mode ) == "A" ) |
488 | mode->setCurrentItem( 3 ); | 490 | mode->setCurrentItem( 3 ); |
489 | else | 491 | else |
490 | mode->setCurrentItem( 2 ); | 492 | mode->setCurrentItem( 2 ); |
491 | } | 493 | } |
492 | } | 494 | } |
diff --git a/noncore/settings/networksettings/wlan/wlanmodule.cpp b/noncore/settings/networksettings/wlan/wlanmodule.cpp index 886af10..ba89fa4 100644 --- a/noncore/settings/networksettings/wlan/wlanmodule.cpp +++ b/noncore/settings/networksettings/wlan/wlanmodule.cpp | |||
@@ -1,255 +1,257 @@ | |||
1 | 1 | ||
2 | #include "wlanmodule.h" | 2 | #include "wlanmodule.h" |
3 | #include "wlanimp2.h" | 3 | #include "wlanimp2.h" |
4 | #include "infoimp.h" | 4 | #include "infoimp.h" |
5 | #include "wextensions.h" | 5 | #include "wextensions.h" |
6 | #include "interfaceinformationimp.h" | 6 | #include "interfaceinformationimp.h" |
7 | 7 | ||
8 | /* OPIE */ | 8 | /* OPIE */ |
9 | #include <opie2/odebug.h> | ||
9 | #include <qpe/qpeapplication.h> | 10 | #include <qpe/qpeapplication.h> |
11 | using namespace Opie::Core; | ||
10 | 12 | ||
11 | /* QT */ | 13 | /* QT */ |
12 | #include <qcheckbox.h> | 14 | #include <qcheckbox.h> |
13 | #include <qcombobox.h> | 15 | #include <qcombobox.h> |
14 | #include <qlabel.h> | 16 | #include <qlabel.h> |
15 | #include <qlineedit.h> | 17 | #include <qlineedit.h> |
16 | #include <qprogressbar.h> | 18 | #include <qprogressbar.h> |
17 | #include <qspinbox.h> | 19 | #include <qspinbox.h> |
18 | #include <qtabwidget.h> | 20 | #include <qtabwidget.h> |
19 | 21 | ||
20 | 22 | ||
21 | /** | 23 | /** |
22 | * Constructor, find all of the possible interfaces | 24 | * Constructor, find all of the possible interfaces |
23 | */ | 25 | */ |
24 | WLANModule::WLANModule() | 26 | WLANModule::WLANModule() |
25 | : Module(), | 27 | : Module(), |
26 | wlanconfigWiget(0) | 28 | wlanconfigWiget(0) |
27 | { | 29 | { |
28 | } | 30 | } |
29 | 31 | ||
30 | /** | 32 | /** |
31 | * Delete any interfaces that we own. | 33 | * Delete any interfaces that we own. |
32 | */ | 34 | */ |
33 | WLANModule::~WLANModule(){ | 35 | WLANModule::~WLANModule(){ |
34 | Interface *i; | 36 | Interface *i; |
35 | for ( i=list.first(); i != 0; i=list.next() ) | 37 | for ( i=list.first(); i != 0; i=list.next() ) |
36 | delete i; | 38 | delete i; |
37 | 39 | ||
38 | } | 40 | } |
39 | 41 | ||
40 | /** | 42 | /** |
41 | * Change the current profile | 43 | * Change the current profile |
42 | */ | 44 | */ |
43 | void WLANModule::setProfile(const QString &newProfile){ | 45 | void WLANModule::setProfile(const QString &newProfile){ |
44 | profile = newProfile; | 46 | profile = newProfile; |
45 | } | 47 | } |
46 | 48 | ||
47 | /** | 49 | /** |
48 | * get the icon name for this device. | 50 | * get the icon name for this device. |
49 | * @param Interface* can be used in determining the icon. | 51 | * @param Interface* can be used in determining the icon. |
50 | * @return QString the icon name (minus .png, .gif etc) | 52 | * @return QString the icon name (minus .png, .gif etc) |
51 | */ | 53 | */ |
52 | QString WLANModule::getPixmapName(Interface* ){ | 54 | QString WLANModule::getPixmapName(Interface* ){ |
53 | return "wlan"; | 55 | return "wlan"; |
54 | } | 56 | } |
55 | 57 | ||
56 | /** | 58 | /** |
57 | * Check to see if the interface i is owned by this module. | 59 | * Check to see if the interface i is owned by this module. |
58 | * @param Interface* interface to check against | 60 | * @param Interface* interface to check against |
59 | * @return bool true if i is owned by this module, false otherwise. | 61 | * @return bool true if i is owned by this module, false otherwise. |
60 | */ | 62 | */ |
61 | bool WLANModule::isOwner(Interface *i){ | 63 | bool WLANModule::isOwner(Interface *i){ |
62 | WExtensions we(i->getInterfaceName()); | 64 | WExtensions we(i->getInterfaceName()); |
63 | if(!we.doesHaveWirelessExtensions()) | 65 | if(!we.doesHaveWirelessExtensions()) |
64 | return false; | 66 | return false; |
65 | 67 | ||
66 | i->setHardwareName("802.11b"); | 68 | i->setHardwareName("802.11b"); |
67 | list.append(i); | 69 | list.append(i); |
68 | return true; | 70 | return true; |
69 | } | 71 | } |
70 | 72 | ||
71 | /** | 73 | /** |
72 | * Create, and return the WLANConfigure Module | 74 | * Create, and return the WLANConfigure Module |
73 | * @return QWidget* pointer to this modules configure. | 75 | * @return QWidget* pointer to this modules configure. |
74 | */ | 76 | */ |
75 | QWidget *WLANModule::configure(Interface *i){ | 77 | QWidget *WLANModule::configure(Interface *i){ |
76 | WLANImp *wlanconfig = new WLANImp(0, "WlanConfig", i, true, Qt::WDestructiveClose); | 78 | WLANImp *wlanconfig = new WLANImp(0, "WlanConfig", i, true, Qt::WDestructiveClose); |
77 | wlanconfig->setProfile(profile); | 79 | wlanconfig->setProfile(profile); |
78 | return wlanconfig; | 80 | return wlanconfig; |
79 | } | 81 | } |
80 | 82 | ||
81 | /** | 83 | /** |
82 | * Create, and return the Information Module | 84 | * Create, and return the Information Module |
83 | * @return QWidget* pointer to this modules info. | 85 | * @return QWidget* pointer to this modules info. |
84 | */ | 86 | */ |
85 | QWidget *WLANModule::information(Interface *i){ | 87 | QWidget *WLANModule::information(Interface *i){ |
86 | WExtensions we(i->getInterfaceName()); | 88 | WExtensions we(i->getInterfaceName()); |
87 | if(!we.doesHaveWirelessExtensions()) | 89 | if(!we.doesHaveWirelessExtensions()) |
88 | return NULL; | 90 | return NULL; |
89 | 91 | ||
90 | return getInfo( i ); | 92 | return getInfo( i ); |
91 | } | 93 | } |
92 | 94 | ||
93 | /** | 95 | /** |
94 | * Get all active (up or down) interfaces | 96 | * Get all active (up or down) interfaces |
95 | * @return QList<Interface> A list of interfaces that exsist that havn't | 97 | * @return QList<Interface> A list of interfaces that exsist that havn't |
96 | * been called by isOwner() | 98 | * been called by isOwner() |
97 | */ | 99 | */ |
98 | QList<Interface> WLANModule::getInterfaces(){ | 100 | QList<Interface> WLANModule::getInterfaces(){ |
99 | return list; | 101 | return list; |
100 | } | 102 | } |
101 | 103 | ||
102 | /** | 104 | /** |
103 | * Attempt to add a new interface as defined by name | 105 | * Attempt to add a new interface as defined by name |
104 | * @param name the name of the type of interface that should be created given | 106 | * @param name the name of the type of interface that should be created given |
105 | * by possibleNewInterfaces(); | 107 | * by possibleNewInterfaces(); |
106 | * @return Interface* NULL if it was unable to be created. | 108 | * @return Interface* NULL if it was unable to be created. |
107 | */ | 109 | */ |
108 | Interface *WLANModule::addNewInterface(const QString &){ | 110 | Interface *WLANModule::addNewInterface(const QString &){ |
109 | // We can't add a 802.11 interface, either the hardware will be there | 111 | // We can't add a 802.11 interface, either the hardware will be there |
110 | // or it wont. | 112 | // or it wont. |
111 | return NULL; | 113 | return NULL; |
112 | } | 114 | } |
113 | 115 | ||
114 | /** | 116 | /** |
115 | * Attempts to remove the interface, doesn't delete i | 117 | * Attempts to remove the interface, doesn't delete i |
116 | * @return bool true if successful, false otherwise. | 118 | * @return bool true if successful, false otherwise. |
117 | */ | 119 | */ |
118 | bool WLANModule::remove(Interface*){ | 120 | bool WLANModule::remove(Interface*){ |
119 | // Can't remove a hardware device, you can stop it though. | 121 | // Can't remove a hardware device, you can stop it though. |
120 | return false; | 122 | return false; |
121 | } | 123 | } |
122 | 124 | ||
123 | void WLANModule::receive(const QCString ¶m, const QByteArray &arg) | 125 | void WLANModule::receive(const QCString ¶m, const QByteArray &arg) |
124 | { | 126 | { |
125 | odebug << "WLANModule::receive "+param << oendl; | 127 | odebug << "WLANModule::receive "+param << oendl; |
126 | QStringList params = QStringList::split(",",param); | 128 | QStringList params = QStringList::split(",",param); |
127 | int count = params.count(); | 129 | int count = params.count(); |
128 | odebug << "WLANModule got " << count << " params" << oendl; | 130 | odebug << "WLANModule got " << count << " params" << oendl; |
129 | if (count < 2){ | 131 | if (count < 2){ |
130 | odebug << "Erorr less than 2 parameter" << oendl; | 132 | odebug << "Erorr less than 2 parameter" << oendl; |
131 | odebug << "RETURNING" << oendl; | 133 | odebug << "RETURNING" << oendl; |
132 | return; | 134 | return; |
133 | } | 135 | } |
134 | 136 | ||
135 | QDataStream stream(arg,IO_ReadOnly); | 137 | QDataStream stream(arg,IO_ReadOnly); |
136 | QString interface; | 138 | QString interface; |
137 | QString action; | 139 | QString action; |
138 | int countMsgs = 0; | 140 | int countMsgs = 0; |
139 | stream >> interface; | 141 | stream >> interface; |
140 | odebug << "got count? >" << interface.latin1() << "<" << oendl; | 142 | odebug << "got count? >" << interface.latin1() << "<" << oendl; |
141 | if (interface == "count"){ | 143 | if (interface == "count"){ |
142 | odebug << "got count" << oendl; | 144 | odebug << "got count" << oendl; |
143 | stream >> action; | 145 | stream >> action; |
144 | odebug << "Got count num >" << action.latin1() << "<" << oendl; | 146 | odebug << "Got count num >" << action.latin1() << "<" << oendl; |
145 | countMsgs = action.toInt(); | 147 | countMsgs = action.toInt(); |
146 | } | 148 | } |
147 | 149 | ||
148 | QDialog *toShow; | 150 | QDialog *toShow; |
149 | //while (! stream.atEnd() ){ | 151 | //while (! stream.atEnd() ){ |
150 | for (int i = 0; i < countMsgs; i++){ | 152 | for (int i = 0; i < countMsgs; i++){ |
151 | odebug << "start stream " << i << "/" << countMsgs << "" << oendl; | 153 | odebug << "start stream " << i << "/" << countMsgs << "" << oendl; |
152 | if (stream.atEnd()){ | 154 | if (stream.atEnd()){ |
153 | odebug << "end of stream" << oendl; | 155 | odebug << "end of stream" << oendl; |
154 | return; | 156 | return; |
155 | } | 157 | } |
156 | stream >> interface; | 158 | stream >> interface; |
157 | odebug << "got iface" << oendl; | 159 | odebug << "got iface" << oendl; |
158 | stream >> action; | 160 | stream >> action; |
159 | odebug << "WLANModule got interface " << interface.latin1() << " and acion " << action.latin1() << "" << oendl; | 161 | odebug << "WLANModule got interface " << interface.latin1() << " and acion " << action.latin1() << "" << oendl; |
160 | // find interfaces | 162 | // find interfaces |
161 | Interface *ifa=0; | 163 | Interface *ifa=0; |
162 | for ( Interface *i=list.first(); i != 0; i=list.next() ){ | 164 | for ( Interface *i=list.first(); i != 0; i=list.next() ){ |
163 | if (i->getInterfaceName() == interface){ | 165 | if (i->getInterfaceName() == interface){ |
164 | odebug << "WLANModule found interface " << interface.latin1() << "" << oendl; | 166 | odebug << "WLANModule found interface " << interface.latin1() << "" << oendl; |
165 | ifa = i; | 167 | ifa = i; |
166 | } | 168 | } |
167 | } | 169 | } |
168 | 170 | ||
169 | if (ifa == 0){ | 171 | if (ifa == 0){ |
170 | odebug << "WLANModule Did not find " << interface.latin1() << "" << oendl; | 172 | odebug << "WLANModule Did not find " << interface.latin1() << "" << oendl; |
171 | odebug << "skipping" << oendl; | 173 | odebug << "skipping" << oendl; |
172 | count = 0; | 174 | count = 0; |
173 | } | 175 | } |
174 | 176 | ||
175 | if (count == 2){ | 177 | if (count == 2){ |
176 | // those should call the interface directly | 178 | // those should call the interface directly |
177 | QWidget *info = getInfo( ifa ); | 179 | QWidget *info = getInfo( ifa ); |
178 | QPEApplication::showWidget( info ); | 180 | QPEApplication::showWidget( info ); |
179 | 181 | ||
180 | if ( action.contains("start" ) ){ | 182 | if ( action.contains("start" ) ){ |
181 | ifa->start(); | 183 | ifa->start(); |
182 | } else if ( action.contains("restart" ) ){ | 184 | } else if ( action.contains("restart" ) ){ |
183 | ifa->restart(); | 185 | ifa->restart(); |
184 | } else if ( action.contains("stop" ) ){ | 186 | } else if ( action.contains("stop" ) ){ |
185 | ifa->stop(); | 187 | ifa->stop(); |
186 | }else if ( action.contains("refresh" ) ){ | 188 | }else if ( action.contains("refresh" ) ){ |
187 | ifa->refresh(); | 189 | ifa->refresh(); |
188 | } | 190 | } |
189 | }else if (count == 3){ | 191 | }else if (count == 3){ |
190 | QString value; | 192 | QString value; |
191 | if (!wlanconfigWiget){ | 193 | if (!wlanconfigWiget){ |
192 | //FIXME: what if it got closed meanwhile? | 194 | //FIXME: what if it got closed meanwhile? |
193 | wlanconfigWiget = (WLANImp*) configure(ifa); | 195 | wlanconfigWiget = (WLANImp*) configure(ifa); |
194 | toShow = (QDialog*) wlanconfigWiget; | 196 | toShow = (QDialog*) wlanconfigWiget; |
195 | } | 197 | } |
196 | QPEApplication::showWidget( wlanconfigWiget ); | 198 | QPEApplication::showWidget( wlanconfigWiget ); |
197 | stream >> value; | 199 | stream >> value; |
198 | odebug << "WLANModule (build 4) is setting " << action.latin1() << " of " << interface.latin1() << " to " << value.latin1() << "" << oendl; | 200 | odebug << "WLANModule (build 4) is setting " << action.latin1() << " of " << interface.latin1() << " to " << value.latin1() << "" << oendl; |
199 | if (value.isEmpty()){ | 201 | if (value.isEmpty()){ |
200 | odebug << "value is empty!!!\nreturning" << oendl; | 202 | odebug << "value is empty!!!\nreturning" << oendl; |
201 | return; | 203 | return; |
202 | } | 204 | } |
203 | if ( action.contains("ESSID") ){ | 205 | if ( action.contains("ESSID") ){ |
204 | QComboBox *combo = wlanconfigWiget->essid; | 206 | QComboBox *combo = wlanconfigWiget->essid; |
205 | bool found = false; | 207 | bool found = false; |
206 | for ( int i = 0; i < combo->count(); i++) | 208 | for ( int i = 0; i < combo->count(); i++) |
207 | if ( combo->text( i ) == value ){ | 209 | if ( combo->text( i ) == value ){ |
208 | combo->setCurrentItem( i ); | 210 | combo->setCurrentItem( i ); |
209 | found = true; | 211 | found = true; |
210 | } | 212 | } |
211 | if (!found) combo->insertItem( value, 0 ); | 213 | if (!found) combo->insertItem( value, 0 ); |
212 | }else if ( action.contains("Mode") ){ | 214 | }else if ( action.contains("Mode") ){ |
213 | QComboBox *combo = wlanconfigWiget->mode; | 215 | QComboBox *combo = wlanconfigWiget->mode; |
214 | for ( int i = 0; i < combo->count(); i++) | 216 | for ( int i = 0; i < combo->count(); i++) |
215 | if ( combo->text( i ) == value ){ | 217 | if ( combo->text( i ) == value ){ |
216 | combo->setCurrentItem( i ); | 218 | combo->setCurrentItem( i ); |
217 | } | 219 | } |
218 | 220 | ||
219 | }else if (action.contains("Channel")){ | 221 | }else if (action.contains("Channel")){ |
220 | bool ok; | 222 | bool ok; |
221 | odebug << "converting channel" << oendl; | 223 | odebug << "converting channel" << oendl; |
222 | int chan = value.toInt( &ok ); | 224 | int chan = value.toInt( &ok ); |
223 | if (ok){ | 225 | if (ok){ |
224 | odebug << "ok setting channel" << oendl; | 226 | odebug << "ok setting channel" << oendl; |
225 | wlanconfigWiget->specifyChan->setChecked( true ); | 227 | wlanconfigWiget->specifyChan->setChecked( true ); |
226 | wlanconfigWiget->networkChannel->setValue( chan ); | 228 | wlanconfigWiget->networkChannel->setValue( chan ); |
227 | } | 229 | } |
228 | }else if (action.contains("MacAddr")){ | 230 | }else if (action.contains("MacAddr")){ |
229 | wlanconfigWiget->specifyAp->setChecked( true ); | 231 | wlanconfigWiget->specifyAp->setChecked( true ); |
230 | wlanconfigWiget->macEdit->setText( value ); | 232 | wlanconfigWiget->macEdit->setText( value ); |
231 | }else | 233 | }else |
232 | odebug << "wlan plugin has no clue" << oendl; | 234 | odebug << "wlan plugin has no clue" << oendl; |
233 | } | 235 | } |
234 | odebug << "next stream" << oendl; | 236 | odebug << "next stream" << oendl; |
235 | }// while stream | 237 | }// while stream |
236 | odebug << "end of stream" << oendl; | 238 | odebug << "end of stream" << oendl; |
237 | if (toShow) toShow->exec(); | 239 | if (toShow) toShow->exec(); |
238 | odebug << "returning" << oendl; | 240 | odebug << "returning" << oendl; |
239 | } | 241 | } |
240 | 242 | ||
241 | QWidget *WLANModule::getInfo( Interface *i) | 243 | QWidget *WLANModule::getInfo( Interface *i) |
242 | { | 244 | { |
243 | odebug << "WLANModule::getInfo start" << oendl; | 245 | odebug << "WLANModule::getInfo start" << oendl; |
244 | WlanInfoImp *info = new WlanInfoImp(0, i->getInterfaceName(), Qt::WDestructiveClose); | 246 | WlanInfoImp *info = new WlanInfoImp(0, i->getInterfaceName(), Qt::WDestructiveClose); |
245 | InterfaceInformationImp *information = new InterfaceInformationImp(info->tabWidget, "InterfaceSetupImp", i); | 247 | InterfaceInformationImp *information = new InterfaceInformationImp(info->tabWidget, "InterfaceSetupImp", i); |
246 | info->tabWidget->insertTab(information, "TCP/IP", 0); | 248 | info->tabWidget->insertTab(information, "TCP/IP", 0); |
247 | info->tabWidget->setCurrentPage( 0 ); | 249 | info->tabWidget->setCurrentPage( 0 ); |
248 | info->tabWidget->showPage( information ); | 250 | info->tabWidget->showPage( information ); |
249 | if (info->tabWidget->currentPage() == information ) odebug << "infotab OK" << oendl; | 251 | if (info->tabWidget->currentPage() == information ) odebug << "infotab OK" << oendl; |
250 | else odebug << "infotab NOT OK" << oendl; | 252 | else odebug << "infotab NOT OK" << oendl; |
251 | odebug << "current idx " << info->tabWidget->currentPageIndex() << "" << oendl; | 253 | odebug << "current idx " << info->tabWidget->currentPageIndex() << "" << oendl; |
252 | odebug << "WLANModule::getInfo return" << oendl; | 254 | odebug << "WLANModule::getInfo return" << oendl; |
253 | return info; | 255 | return info; |
254 | } | 256 | } |
255 | 257 | ||