summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings/ppp/kpppwidget.cpp
authortille <tille>2003-05-23 19:43:46 (UTC)
committer tille <tille>2003-05-23 19:43:46 (UTC)
commit9b6b21112f38181f49b07e973bfe00c0d83a6900 (patch) (side-by-side diff)
treec2fa45a93ac5c26fe98558f28bb0a166b14ad065 /noncore/settings/networksettings/ppp/kpppwidget.cpp
parent34b9974063032242e5de65fa56d4c2cb5e1ce565 (diff)
downloadopie-9b6b21112f38181f49b07e973bfe00c0d83a6900.zip
opie-9b6b21112f38181f49b07e973bfe00c0d83a6900.tar.gz
opie-9b6b21112f38181f49b07e973bfe00c0d83a6900.tar.bz2
configure dialog basicly working
more kppp stuff... ;)
Diffstat (limited to 'noncore/settings/networksettings/ppp/kpppwidget.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings/ppp/kpppwidget.cpp905
1 files changed, 905 insertions, 0 deletions
diff --git a/noncore/settings/networksettings/ppp/kpppwidget.cpp b/noncore/settings/networksettings/ppp/kpppwidget.cpp
new file mode 100644
index 0000000..2f9feda
--- a/dev/null
+++ b/noncore/settings/networksettings/ppp/kpppwidget.cpp
@@ -0,0 +1,905 @@
+/*
+ *
+ * kPPP: A pppd front end for the KDE project
+ *
+ * $Id$
+ *
+ * Copyright (C) 1997 Bernd Johannes Wuebben
+ * wuebben@math.cornell.edu
+ *
+ * Copyright (C) 1998-2002 Harri Porten <porten@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "kpppwidget.h"
+
+#include <qapplication.h>
+#include <qcombobox.h>
+#include <qdir.h>
+#include <qevent.h>
+#include <qdialog.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qregexp.h>
+#include <qtabwidget.h>
+#include <qdialog.h>
+#include <qwhatsthis.h>
+
+// #include <kaboutdata.h>
+// #include <kapplication.h>
+#include <qbuttongroup.h>
+//#include <kcmdlineargs.h>
+//#include <kconfig.h>
+//#include <kdebug.h>
+#define i18n QObject::tr
+//#include <kiconloader.h> // For BarIcon
+//#include <klocale.h>
+#include <qmessagebox.h>
+// #include <kseparator.h>
+// #include <kstandarddirs.h>
+// #include <kwin.h>
+// #include <khelpmenu.h>
+#include <qpushbutton.h>
+//#include <kguiitem.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <signal.h>
+
+#include "runtests.h"
+
+//#include "main.h"
+#include "auth.h"
+#include "modem.h"
+//#include "ppplog.h"
+//#include "opener.h"
+//#include "requester.h"
+//#include "pppstats.h"
+#include "pppdata.h"
+#include "general.h"
+
+#define execute_command system
+
+KPPPWidget *p_kppp = 0;
+
+KPPPWidget::KPPPWidget( QWidget *parent, const char *name, bool modal, WFlags fl )
+ : QDialog(parent, name, modal, fl)
+// , acct(0)
+// , m_bCmdlAccount (false)
+{
+// tabWindow = 0;
+ p_kppp = this;
+ // before doing anything else, run a few tests
+
+ int result = runTests();
+ if(result == TEST_CRITICAL)
+ exit(4);
+
+// installEventFilter(this);
+
+// QVBoxLayout *tl = new QVBoxLayout(this, 10, 10);
+
+// QGridLayout *l1 = new QGridLayout(3, 4);
+// tl->addLayout(l1);
+// l1->addColSpacing(0, 10);
+// l1->addColSpacing(3, 10);
+// l1->setColStretch(1, 3);
+// l1->setColStretch(2, 4);
+
+// label1 = new QLabel(i18n("C&onnect to: "), this);
+// l1->addWidget(label1, 0, 1);
+
+// connectto_c = new QComboBox(false, this);
+// label1->setBuddy(connectto_c);
+
+// connect(connectto_c, SIGNAL(activated(int)),
+// SLOT(newdefaultaccount(int)));
+// l1->addWidget(connectto_c, 0, 2);
+
+// ID_Label = new QLabel(i18n("&Login ID:"), this);
+// l1->addWidget(ID_Label, 1, 1);
+
+// // the entry line for usernames
+// ID_Edit = new QLineEdit(this);
+// ID_Label->setBuddy(ID_Edit);
+// l1->addWidget(ID_Edit, 1, 2);
+// connect(ID_Edit, SIGNAL(returnPressed()),
+// this, SLOT(enterPressedInID()));
+// QString tmp = i18n("<p>Type in the username that you got from your\n"
+// "ISP. This is especially important for PAP\n"
+// "and CHAP. You may omit this when you use\n"
+// "terminal-based or script-based authentication.\n"
+// "\n"
+// "<b>Important</b>: case is important here:\n"
+// "<i>myusername</i> is not the same as <i>MyUserName</i>!");
+
+// QWhatsThis::add(ID_Label,tmp);
+// QWhatsThis::add(ID_Edit,tmp);
+
+// PW_Label = new QLabel(i18n("&Password:"), this);
+// l1->addWidget(PW_Label, 2, 1);
+
+// PW_Edit= new QLineEdit(this);
+// PW_Label->setBuddy(PW_Edit);
+// PW_Edit->setEchoMode(QLineEdit::Password);
+// l1->addWidget(PW_Edit, 2, 2);
+// connect(PW_Edit, SIGNAL(returnPressed()),
+// this, SLOT(enterPressedInPW()));
+
+// tmp = i18n("<p>Type in the password that you got from your\n"
+// "ISP. This is especially important for PAP\n"
+// "and CHAP. You may omit this when you use\n"
+// "terminal-based or script-based authentication.\n"
+// "\n"
+// "<b>Important</b>: case is important here:\n"
+// "<i>mypassword</i> is not the same as <i>MyPassword</i>!");
+
+// QWhatsThis::add(PW_Label,tmp);
+// QWhatsThis::add(PW_Edit,tmp);
+
+// QHBoxLayout *l3 = new QHBoxLayout;
+// tl->addSpacing(5);
+// tl->addLayout(l3);
+// tl->addSpacing(5);
+// l3->addSpacing(10);
+// log = new QCheckBox(i18n("Show lo&g window"), this);
+// connect(log, SIGNAL(toggled(bool)),
+// this, SLOT(log_window_toggled(bool)));
+// log->setChecked(gpppdata.get_show_log_window());
+// l3->addWidget(log);
+
+// QWhatsThis::add(log,
+// i18n("<p>This controls whether a log window is shown.\n"
+// "A log window shows the communication between\n"
+// "<i>kppp</i> and your modem. This will help you\n"
+// "in tracking down problems.\n"
+// "\n"
+// "Turn it off if <i>kppp</i> routinely connects without\n"
+// "problems"));
+
+// // fline = new QSeparator( KSeparator::HLine, this);
+// // tl->addWidget(fline);
+
+// QHBoxLayout *l2 = new QHBoxLayout(this);
+// tl->addLayout(l2);
+
+// int minw = 0;
+// quit_b = new QPushButton(i18n("&Quit"), this);
+// // quit_b-> setGuiItem (KGuiItem(i18n("&Quit"), "exit" ) );
+// connect( quit_b, SIGNAL(clicked()), SLOT(quitbutton()));
+// if(quit_b->sizeHint().width() > minw)
+// minw = quit_b->sizeHint().width();
+
+// setup_b = new QPushButton(i18n("&Setup..."), this);
+// // setup_b->setGuiItem (KGuiItem(i18n("&Setup...")) );
+// connect( setup_b, SIGNAL(clicked()), SLOT(expandbutton()));
+// if(setup_b->sizeHint().width() > minw)
+// minw = setup_b->sizeHint().width();
+
+
+
+// if(gpppdata.access() != KConfig::ReadWrite)
+// setup_b->setEnabled(false);
+
+// help_b = new QPushButton(i18n("&Help"), this);
+// connect( help_b, SIGNAL(clicked()), SLOT(helpbutton()));
+
+// KHelpMenu *helpMenu = new KHelpMenu(this, KGlobal::instance()->aboutData(), true);
+// help_b->setPopup((QPopupMenu*)helpMenu->menu());
+// help_b->setGuiItem (KGuiItem(i18n("&Help"), "help" ) );
+
+// if(help_b->sizeHint().width() > minw)
+// minw = help_b->sizeHint().width();
+
+// connect_b = new QPushButton(i18n("&Connect"), this);
+// connect_b->setDefault(true);
+// connect_b->setFocus();
+// connect(connect_b, SIGNAL(clicked()), SLOT(beginConnect()));
+// if(connect_b->sizeHint().width() > minw)
+// minw = connect_b->sizeHint().width();
+
+// quit_b->setFixedWidth(minw);
+// setup_b->setFixedWidth(minw);
+// // help_b->setFixedWidth(help_b->sizeHint().width());
+// connect_b->setFixedWidth(minw);
+
+// l2->addWidget(quit_b);
+// l2->addWidget(setup_b);
+// // l2->addWidget(help_b);
+// l2->addSpacing(20);
+// l2->addWidget(connect_b);
+
+ setFixedSize(sizeHint());
+
+ (void)new Modem;
+
+ // we also connect cmld_start to the beginConnect so that I can run
+ // the dialer through a command line argument
+ connect(this,SIGNAL(cmdl_start()),this,SLOT(beginConnect()));
+
+// stats = new PPPStats;
+
+ // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon());
+
+ // constructor of con_win reads position from config file
+// con_win = new ConWindow(0, "conw", this);
+ // KWin::setIcons(con_win->winId(), kapp->icon(), kapp->miniIcon());
+
+// statdlg = new PPPStatsDlg(0, "stats", this, stats);
+// statdlg->hide();
+
+ debugwindow = new DebugWidget(0,"debugwindow");
+ // KWin::setIcons(debugwindow->winId(), kapp->icon(), kapp->miniIcon());
+ debugwindow->hide();
+
+ // load up the accounts combo box
+
+// resetaccounts();
+// con = new ConnectWidget(0, "con");
+ //KWin::setIcons(con->winId(), kapp->icon(), kapp->miniIcon() );
+// connect(this, SIGNAL(begin_connect()),con, SLOT(preinit()));
+ // Is this the best we can do here? it's not right.
+// QRect desk = QApplication::desktop()->screenGeometry(
+// QApplication::desktop()->screenNumber(topLevelWidget()));
+// con->setGeometry(desk.center().x()-175, desk.center().y()-55, 350,110);
+
+ // connect the ConnectWidgets various signals
+// connect(con, SIGNAL(closeDebugWindow()),
+// debugwindow, SLOT(hide()));
+// connect(con, SIGNAL(debugMessage(const QString &)),
+// debugwindow, SLOT(statusLabel(const QString &)));
+// connect(con, SIGNAL(toggleDebugWindow()),
+// debugwindow, SLOT(toggleVisibility()));
+// connect(con, SIGNAL(debugPutChar(unsigned char)),
+// debugwindow, SLOT(addChar(unsigned char)));
+// // connect(con, SIGNAL(startAccounting()),
+// // this, SLOT(startAccounting()));
+// // connect(con, SIGNAL(stopAccounting()),
+// // this, SLOT(stopAccounting()));
+// connect(qApp, SIGNAL(saveYourself()),
+// this, SLOT(saveMyself()));
+// connect(qApp, SIGNAL(shutDown()),
+// this, SLOT(shutDown()));
+
+// debugwindow->setGeometry(desk.center().x()+190, desk.center().y()-55,
+// debugwindow->width(),debugwindow->height());
+
+// move(desk.center().x()-width()/2, desk.center().y()-height()/2);
+
+
+// KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+// m_strCmdlAccount = args->getOption("c");
+// m_bQuitOnDisconnect = args->isSet("q");
+
+// if(!m_strCmdlAccount.isEmpty()) {
+// m_bCmdlAccount = true;
+// kdDebug(5002) << "cmdl_account: " << m_bCmdlAccount << endl;
+// }
+
+// if(m_bCmdlAccount){
+// bool result = gpppdata.setAccount(m_strCmdlAccount);
+// if (!result){
+// QString string;
+// string = i18n("No such Account:\n%1").arg(m_strCmdlAccount);
+// KMessageBox::error(this, string);
+// m_bCmdlAccount = false;
+// this->show();
+// } else {
+// beginConnect();
+// }
+// } else
+// expandbutton();
+// show();
+
+
+//#define KPPP_SHOW_NEWS
+#ifdef KPPP_SHOW_NEWS
+ // keep user informed about recent changes
+ if(!m_bCmdlAccount)
+ showNews();
+#endif
+}
+
+KPPPWidget::~KPPPWidget()
+{
+ p_kppp = 0;
+// delete stats;
+}
+
+// bool KPPPWidget::eventFilter(QObject *o, QEvent *e) {
+// if(e->type() == QEvent::User) {
+// switch(((SignalEvent*)e)->sigType()) {
+// case SIGINT:
+// qDebug( "Received a SIGINT" );
+// interruptConnection();
+// break;
+// case SIGCHLD:
+// sigChld();
+// break;
+// case SIGUSR1:
+// sigPPPDDied();
+// break;
+// }
+// return true;
+// }
+
+// if(o == connect_b) {
+// if(e->type() == QEvent::KeyPress) {
+// if(connect_b->hasFocus() && ((QKeyEvent *)e)->key() == Qt::Key_Return) {
+// beginConnect();
+// return true;
+// }
+// }
+// }
+
+// return false;
+// }
+
+
+
+
+void KPPPWidget::enterPressedInID() {
+ PW_Edit->setFocus();
+}
+
+
+void KPPPWidget::enterPressedInPW() {
+ connect_b->setFocus();
+}
+
+// triggered by the session manager
+void KPPPWidget::saveMyself() {
+ gpppdata.save();
+}
+
+void KPPPWidget::shutDown() {
+ interruptConnection();
+ saveMyself();
+}
+
+void KPPPWidget::log_window_toggled(bool on) {
+ gpppdata.set_show_log_window(on);
+}
+
+
+
+
+// void KPPPWidget::resetaccounts() {
+// connectto_c->clear();
+
+// int count = gpppdata.count();
+
+// // enable/disable controls
+// connectto_c->setEnabled(count > 0);
+// connect_b->setEnabled(count > 0);
+// log->setEnabled(count > 0);
+// ID_Edit->setEnabled(count > 0);
+// PW_Edit->setEnabled(count > 0);
+
+// //load the accounts
+// for(int i=0; i < count; i++) {
+// gpppdata.setAccountbyIndex(i);
+// connectto_c->insertItem(gpppdata.accname());
+// }
+
+// //set the default account
+// if(!gpppdata.defaultAccount().isEmpty()) {
+// for(int i=0; i < count; i++)
+// if(gpppdata.defaultAccount() == connectto_c->text(i)) {
+// connectto_c->setCurrentItem(i);
+// gpppdata.setAccountbyIndex(i);
+
+// ID_Edit->setText(gpppdata.storedUsername());
+// PW_Edit->setText(gpppdata.storedPassword());
+// }
+// }
+// else
+// if(count > 0) {
+// gpppdata.setDefaultAccount(connectto_c->text(0));
+// gpppdata.save();
+// ID_Edit->setText(gpppdata.storedUsername());
+// PW_Edit->setText(gpppdata.storedPassword());
+// }
+
+// connect(ID_Edit, SIGNAL(textChanged(const QString &)),
+// this, SLOT(usernameChanged(const QString &)));
+
+// connect(PW_Edit, SIGNAL(textChanged(const QString &)),
+// this, SLOT(passwordChanged(const QString &)));
+
+// if (ID_Edit->text().isEmpty())
+// ID_Edit->setFocus();
+// else if (PW_Edit->text().isEmpty())
+// PW_Edit->setFocus();
+// }
+
+
+void KPPPWidget::interruptConnection() {
+ // interrupt dial up
+// if (con->isVisible())
+// emit con->cancelbutton();
+
+ // disconnect if online
+ if (gpppdata.pppdRunning())
+ emit disconnect();
+}
+
+
+void KPPPWidget::sigPPPDDied() {
+ qDebug( "Received a SIGUSR1" );
+
+ // if we are not connected pppdpid is -1 so have have to check for that
+ // in the followin line to make sure that we don't raise a false alarm
+ // such as would be the case when the log file viewer exits.
+ if(gpppdata.pppdRunning() || gpppdata.pppdError()) {
+ qDebug( "It was pppd that died" );
+
+ // when we killpppd() on Cancel in ConnectWidget
+ // we set pppid to -1 so we won't
+ // enter this block
+
+ // just to be sure
+
+ Modem::modem->removeSecret(AUTH_PAP);
+ Modem::modem->removeSecret(AUTH_CHAP);
+
+ gpppdata.setpppdRunning(false);
+
+ qDebug( "Executing command on disconnect since pppd has died." );
+ QApplication::flushX();
+ execute_command(gpppdata.command_on_disconnect());
+
+// stopAccounting();
+
+// con_win->stopClock();
+// DockWidget::dock_widget->stop_stats();
+// DockWidget::dock_widget->hide();
+
+ if(!gpppdata.pppdError())
+ gpppdata.setpppdError(E_PPPD_DIED);
+ removedns();
+ Modem::modem->unlockdevice();
+ // con->pppdDied();
+
+ if(!gpppdata.automatic_redial()) {
+ quit_b->setFocus();
+ show();
+// con_win->stopClock();
+// stopAccounting();
+// con_win->hide();
+// con->hide();
+
+ gpppdata.setpppdRunning(false);
+ // // not in a signal handler !!! KNotifyClient::beep();
+ QString msg;
+ if (gpppdata.pppdError() == E_IF_TIMEOUT)
+ msg = i18n("Timeout expired while waiting for the PPP interface "
+ "to come up!");
+ else {
+ msg = i18n("<p>The pppd daemon died unexpectedly!</p>");
+ Modem::modem->pppdExitStatus();
+ if (Modem::modem->lastStatus != 99) { // more recent pppds only
+ msg += i18n("<p>Exit status: %1").arg(Modem::modem->lastStatus);
+ msg += i18n("</p><p>See 'man pppd' for an explanation of the error "
+ "codes or take a look at the kppp FAQ on "
+ " <a href=http://devel-home.kde.org/~kppp/index.html>"
+ "http://devel-home.kde.org/~kppp/index.html</a></p>");
+ }
+ }
+
+// if(QMessageBox::warning(0, msg, i18n("Error"), i18n("&OK"), i18n("&Details...")) == QMessageBox::No)
+// // PPPL_ShowLog();
+// } else { /* reconnect on disconnect */
+ if (false){
+ qDebug( "Trying to reconnect... " );
+
+ if(gpppdata.authMethod() == AUTH_PAP ||
+ gpppdata.authMethod() == AUTH_CHAP ||
+ gpppdata.authMethod() == AUTH_PAPCHAP)
+ Modem::modem->setSecret(gpppdata.authMethod(),
+ encodeWord(gpppdata.storedUsername()),
+ encodeWord(gpppdata.password()));
+
+// con_win->hide();
+ // con_win->stopClock();
+// stopAccounting();
+ gpppdata.setpppdRunning(false);
+ // not in a signal handler !!! KNotifyClient::beep();
+ emit cmdl_start();
+ }
+ }
+ gpppdata.setpppdError(0);
+ }
+}
+
+// void KPPPWidget::sigChld() {
+// qDebug( "sigchld()" );
+// // pid_t id = wait(0L);
+// // if(id == helperPid && helperPid != -1) {
+// // kdDebug(5002) << "It was the setuid child that died" << endl;
+// // helperPid = -1;
+// QString msg = i18n("kppp's helper process just died.\n"
+// "Since a further execution would be pointless, "
+// "kppp will shut down now.");
+// QMessageBox::warning(0L,"error", msg);
+// //remove_pidfile();
+// exit(1);
+// // }
+// }
+
+
+void KPPPWidget::newdefaultaccount(int i) {
+ gpppdata.setDefaultAccount(connectto_c->text(i));
+ gpppdata.save();
+ ID_Edit->setText(gpppdata.storedUsername());
+ PW_Edit->setText(gpppdata.storedPassword());
+}
+
+
+
+
+void KPPPWidget::beginConnect() {
+ // make sure to connect to the account that is selected in the combo box
+ // (exeption: an account given by a command line argument)
+ // if(!m_bCmdlAccount) {
+// gpppdata.setAccount(connectto_c->currentText());
+// gpppdata.setPassword(PW_Edit->text());
+// } else {
+ gpppdata.setPassword(gpppdata.storedPassword());
+// }
+
+ QFileInfo info(pppdPath());
+
+ if(!info.exists()){
+ QMessageBox::warning(this, "error", i18n("Cannot find the PPP daemon!\n"
+ "Make sure that pppd is installed and "
+ "that you have entered the correct path."));
+ return;
+ }
+#if 0
+ if(!info.isExecutable()){
+
+ QString string;
+ string = i18n("kppp cannot execute:\n %1\n"
+ "Please make sure that you have given kppp "
+ "setuid permission and that "
+ "pppd is executable.").arg(gpppdata.pppdPath());
+ KMessageBox::error(this, string);
+ return;
+
+ }
+#endif
+
+ QFileInfo info2(gpppdata.modemDevice());
+
+ if(!info2.exists()){
+ QString string;
+ string = i18n("kppp can not find:\n %1\nPlease make sure you have setup "
+ "your modem device properly "
+ "and/or adjust the location of the modem device on "
+ "the modem tab of "
+ "the setup dialog.").arg(gpppdata.modemDevice());
+ QMessageBox::warning(this, "error", string);
+ return;
+ }
+
+ // if this is a PAP or CHAP account, ensure that username is
+ // supplied
+ if(gpppdata.authMethod() == AUTH_PAP ||
+ gpppdata.authMethod() == AUTH_CHAP ||
+ gpppdata.authMethod() == AUTH_PAPCHAP ) {
+ if(ID_Edit->text().isEmpty()) {
+ QMessageBox::warning(this,"error",
+ i18n(
+ "You have selected the authentication "
+ "method PAP or CHAP. This requires that you "
+ "supply a username and a password!"));
+ return;
+ } else {
+ if(!Modem::modem->setSecret(gpppdata.authMethod(),
+ encodeWord(gpppdata.storedUsername()),
+ encodeWord(gpppdata.password()))) {
+ QString s;
+ s = i18n("Cannot create PAP/CHAP authentication\n"
+ "file \"%1\"").arg(PAP_AUTH_FILE);
+ QMessageBox::warning(this, "error", s);
+ return;
+ }
+ }
+ }
+
+ if (gpppdata.phonenumber().isEmpty()) {
+ QString s = i18n("You must specify a telephone number!");
+ QMessageBox::warning(this, "error", s);
+ return;
+ }
+
+ this->hide();
+
+ QString tit = i18n("Connecting to: %1").arg(gpppdata.accname());
+// con->setCaption(tit);
+
+// con->show();
+
+ bool show_debug = gpppdata.get_show_log_window();
+// con->debug->setOn(show_debug); // toggle button
+ debugwindow->clear();
+ if (!show_debug)
+ debugwindow->hide();
+ else {
+ debugwindow->show();
+// con->raise();
+ }
+
+ emit begin_connect();
+}
+
+
+void KPPPWidget::disconnect() {
+ if (!gpppdata.command_before_disconnect().isEmpty()) {
+// con_win->hide();
+// con->show();
+// con->setCaption(i18n("Disconnecting..."));
+// con->setMsg(i18n("Executing command before disconnection."));
+
+ qApp->processEvents();
+ QApplication::flushX();
+// pid_t id =
+ execute_command(gpppdata.command_before_disconnect());
+// int i, status;
+
+// do {
+// kapp->processEvents();
+// i = waitpid(id, &status, WNOHANG);
+// usleep(500000);
+// } while (i == 0 && errno == 0);
+
+// con->hide();
+ }
+
+ qApp->processEvents();
+
+// statdlg->stop_stats();
+ Modem::modem->killPPPDaemon();
+
+ QApplication::flushX();
+ execute_command(gpppdata.command_on_disconnect());
+
+ Modem::modem->removeSecret(AUTH_PAP);
+ Modem::modem->removeSecret(AUTH_CHAP);
+
+ removedns();
+ Modem::modem->unlockdevice();
+
+// con_win->stopClock();
+// p_kppp->stopAccounting();
+// con_win->hide();
+
+// DockWidget::dock_widget->stop_stats();
+// DockWidget::dock_widget->hide();
+
+// if(m_bQuitOnDisconnect)
+// kapp->exit(0);
+// else {
+ this->quit_b->setFocus();
+ this->show();
+// }
+}
+
+
+// void KPPPWidget::helpbutton() {
+// kapp->invokeHelp();
+// }
+
+
+void KPPPWidget::quitbutton() {
+ if(gpppdata.pppdRunning()) {
+ int ok = QMessageBox::warning(this,
+ i18n("Exiting kPPP will close your PPP Session."),
+ i18n("Quit kPPP?"));
+ if(ok == QMessageBox::Yes) {
+ Modem::modem->killPPPDaemon();
+ QApplication::flushX();
+ execute_command(gpppdata.command_on_disconnect());
+ removedns();
+ Modem::modem->unlockdevice();
+ }
+ } else {
+ if (!gpppdata.accname().isEmpty() && !gpppdata.storePassword())
+ gpppdata.setStoredPassword("");
+ }
+ gpppdata.save();
+ qApp->quit();
+}
+
+
+// void KPPPWidget::rulesetLoadError() {
+// QMessageBox::warning(this,"error", ruleset_load_errmsg);
+// }
+
+
+// void KPPPWidget::startAccounting() {
+// // volume accounting
+// stats->totalbytes = 0;
+
+// kdDebug() << "AcctEnabled: " << gpppdata.AcctEnabled() << endl;
+
+// // load the ruleset
+// if(!gpppdata.AcctEnabled())
+// return;
+
+// QString d = AccountingBase::getAccountingFile(gpppdata.accountingFile());
+// // if(::access(d.data(), X_OK) != 0)
+// acct = new Accounting(this, stats);
+// // else
+// // acct = new ExecutableAccounting(this);
+
+// // connect to the accounting object
+// connect(acct, SIGNAL(changed(QString, QString)),
+// con_win, SLOT(slotAccounting(QString, QString)));
+
+// // if(!acct->loadRuleSet(gpppdata.accountingFile())) {
+// // QString s= i18n("Can not load the accounting "
+// // "ruleset \"%1\"!").arg(gpppdata.accountingFile());
+
+// // starting the messagebox with a timer will prevent us
+// // from blocking the calling function ConnectWidget::timerEvent
+// ruleset_load_errmsg = s;
+// QTimer::singleShot(0, this, SLOT(rulesetLoadError()));
+// return;
+// }
+// //else
+// // acct->slotStart();
+// }
+
+// void KPPPWidget::stopAccounting() {
+// // store volume accounting
+// // if(stats->totalbytes != 0)
+// // gpppdata.setTotalBytes(stats->totalbytes);
+
+// if(!gpppdata.AcctEnabled())
+// return;
+
+// // if(acct != 0) {
+// // acct->slotStop();
+// // delete acct;
+// // acct = 0;
+// // }
+// }
+
+
+// void KPPPWidget::showStats() {
+// if(statdlg) {
+// statdlg->show();
+// statdlg->raise();
+// }
+// }
+
+
+void KPPPWidget::usernameChanged(const QString &) {
+ // store username for later use
+ gpppdata.setStoredUsername(ID_Edit->text());
+}
+
+
+void KPPPWidget::passwordChanged(const QString &) {
+ // store the password if so requested
+ if(gpppdata.storePassword())
+ gpppdata.setStoredPassword(PW_Edit->text());
+ else
+ gpppdata.setStoredPassword("");
+}
+
+
+void KPPPWidget::setPW_Edit(const QString &pw) {
+ PW_Edit->setText(pw);
+}
+
+
+// void KPPPWidget::resetCosts(const QString &s) {
+// AccountingBase::resetCosts(s);
+// }
+
+
+// void KPPPWidget::resetVolume(const QString &s) {
+// AccountingBase::resetVolume(s);
+// }
+
+/**
+ * pppd's getword() function knows about escape characters.
+ * If we write the username and password to the secrets file
+ * we'll therefore have to escape back slashes.
+ */
+QString KPPPWidget::encodeWord(const QString &s) {
+ QString r = s;
+ r.replace(QRegExp("\\"), "\\\\");
+ return r;
+}
+
+// void KPPPWidget::setQuitOnDisconnect (bool b)
+// {
+// m_bQuitOnDisconnect = b;
+// }
+
+void KPPPWidget::showNews() {
+#ifdef KPPP_SHOW_NEWS
+ /*
+ * Introduce the QuickHelp feature to new users of this version
+ */
+ #define QUICKHELP_HINT "Hint_QuickHelp"
+ if(gpppdata.readNumConfig(GENERAL_GRP, QUICKHELP_HINT, 0) == 0) {
+ QDialog dlg(0, 0, true);
+ dlg.setCaption(i18n("Recent Changes in KPPP"));
+
+ QVBoxLayout *tl = new QVBoxLayout(&dlg, 10, 10);
+ QHBoxLayout *l1 = new QHBoxLayout(10);
+ QVBoxLayout *l2 = new QVBoxLayout(10);
+ tl->addLayout(l1);
+
+ QLabel *icon = new QLabel(&dlg);
+ icon->setPixmap(BarIcon("exclamation"));
+ icon->setFixedSize(icon->sizeHint());
+ l1->addWidget(icon);
+ l1->addLayout(l2);
+
+ QLabel *l = new QLabel(i18n("From version 1.4.8 on, kppp has a new feature\n"
+ "called \"Quickhelp\". It's similar to a tooltip,\n"
+ "but you can activate it whenever you want.\n"
+ "\n"
+ "To activate it, simply click on a control like\n"
+ "a button or a label with the right mouse button.\n"
+ "If the item supports Quickhelp, a popup menu\n"
+ "will appear leading to Quickhelp.\n"
+ "\n"
+ "To test it, right-click somewhere in this text."),
+ &dlg);
+
+ QCheckBox *cb = new QCheckBox(i18n("Don't show this hint again"), &dlg);
+ cb->setFixedSize(cb->sizeHint());
+
+ KButtonBox *bbox = new KButtonBox(&dlg);
+ bbox->addStretch(1);
+ QPushButton *ok = bbox->addButton(i18n("OK"));
+ ok->setDefault(true);
+ dlg.connect(ok, SIGNAL(clicked()),
+ &dlg, SLOT(accept()));
+ bbox->addStretch(1);
+ bbox->layout();
+
+ l2->addWidget(l);
+ l2->addWidget(cb);
+ tl->addWidget(bbox);
+
+ QString tmp = i18n("This is an example of <b>QuickHelp</b>.\n"
+ "This window will stay open until you\n"
+ "click a mouse button or a press a key.\n");
+
+ QWhatsThis::add(cb,tmp);
+ QWhatsThis::add(l, tmp);
+
+ dlg.exec();
+ if(cb->isChecked()) {
+ gpppdata.writeConfig(GENERAL_GRP, QUICKHELP_HINT, 1);
+ gpppdata.save();
+ }
+ }
+#endif
+}
+
+
+//#include "kpppwidget.moc"
+