-rw-r--r-- | noncore/net/opietooth/manager/pppdialog.cpp | 78 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/pppdialog.h | 16 |
2 files changed, 78 insertions, 16 deletions
diff --git a/noncore/net/opietooth/manager/pppdialog.cpp b/noncore/net/opietooth/manager/pppdialog.cpp index ef007f5..b8d800a 100644 --- a/noncore/net/opietooth/manager/pppdialog.cpp +++ b/noncore/net/opietooth/manager/pppdialog.cpp @@ -2,2 +2,3 @@ #include "pppdialog.h" +#include "rfcommhelper.h" #include <qpushbutton.h> @@ -14,3 +15,7 @@ using namespace OpieTooth; using namespace Opie::Core; -PPPDialog::PPPDialog( QWidget* parent, const char* name, bool modal, WFlags fl, const QString& device ) + +Connection PPPDialog::conns[NCONNECTS]; + +PPPDialog::PPPDialog( const QString& device, int port, QWidget* parent, + const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) { @@ -18,3 +23,3 @@ PPPDialog::PPPDialog( QWidget* parent, const char* name, bool modal, WFlags fl, if ( !name ) - setName( "PPPDialog" ); + setName( "PPPDialog" ); setCaption( tr( "ppp connection " ) ) ; @@ -22,2 +27,3 @@ PPPDialog::PPPDialog( QWidget* parent, const char* name, bool modal, WFlags fl, m_device = device; + m_port = port; @@ -46,2 +52,11 @@ PPPDialog::PPPDialog( QWidget* parent, const char* name, bool modal, WFlags fl, + connect(&PPPDialog::conns[0].proc, + SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int)), + this, SLOT(fillOutPut(Opie::Core::OProcess*, char*, int))); + connect( &PPPDialog::conns[0].proc, + SIGNAL(receivedStderr(Opie::Core::OProcess*, char*, int)), + this, SLOT(fillErr(Opie::Core::OProcess*, char*, int))); + connect( &PPPDialog::conns[0].proc, + SIGNAL(processExited(Opie::Core::OProcess*)), + this, SLOT(slotProcessExited(Opie::Core::OProcess*))); } @@ -52,12 +67,27 @@ PPPDialog::~PPPDialog() { void PPPDialog::connectToDevice() { + if (PPPDialog::conns[0].proc.isRunning()) { + outPut->append(tr("Work in progress")); + return; + } outPut->clear(); + PPPDialog::conns[0].proc.clearArguments(); // vom popupmenu beziehen - QString connectScript = "/etc/ppp/peers/" + cmdLine->text(); - OProcess* pppDial = new OProcess(); - *pppDial << "pppd" << m_device << "call" << connectScript; - connect( pppDial, SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int) ), - this, SLOT(fillOutPut(Opie::Core::OProcess*,char*,int) ) ); - if (!pppDial->start(OProcess::DontCare, OProcess::AllOutput) ) { - owarn << "could not start" << oendl; - delete pppDial; + if (cmdLine->text().isEmpty()) {//Connect by rfcomm + PPPDialog::conns[0].proc << "rfcomm" << "connect" + << "0" << m_device << QString::number(m_port); + } + else { + QString connectScript = "/etc/ppp/peers/" + cmdLine->text(); + PPPDialog::conns[0].proc << "pppd" + << m_device << "call" << connectScript; + } + if (!PPPDialog::conns[0].proc.start(OProcess::NotifyOnExit, OProcess::All)) { + outPut->append(tr("Couldn't start")); + } + else + { + PPPDialog::conns[0].proc.resume(); + outPut->append(tr("Started")); + PPPDialog::conns[0].btAddr = m_device; + PPPDialog::conns[0].port = m_port; } @@ -65,7 +95,27 @@ void PPPDialog::connectToDevice() { -void PPPDialog::fillOutPut( OProcess* pppDial, char* cha, int len ) { - QCString str(cha, len ); - outPut->insertLine( str ); - delete pppDial; +void PPPDialog::fillOutPut( OProcess*, char* cha, int len ) { + QCString str(cha, len); + outPut->append(str); } +void PPPDialog::fillErr(OProcess*, char* buf, int len) +{ + QCString str(buf, len); + outPut->append(str); +} + +void PPPDialog::slotProcessExited(OProcess* proc) { + if (proc->normalExit()) { + outPut->append( tr("Finished with result ") ); + outPut->append( QString::number(proc->exitStatus()) ); + } + else + outPut->append( tr("Exited abnormally") ); +} + +void PPPDialog::closeEvent(QCloseEvent* e) +{ + if(PPPDialog::conns[0].proc.isRunning()) + PPPDialog::conns[0].proc.kill(); + QDialog::closeEvent(e); +} diff --git a/noncore/net/opietooth/manager/pppdialog.h b/noncore/net/opietooth/manager/pppdialog.h index 05894e2..565fe1e 100644 --- a/noncore/net/opietooth/manager/pppdialog.h +++ b/noncore/net/opietooth/manager/pppdialog.h @@ -11,5 +11,10 @@ class QMultiLineEdit; class QLineEdit; - +#define NCONNECTS 10 //Maximal namespace OpieTooth { + typedef struct { + Opie::Core::OProcess proc; //Connection process + QString btAddr; //MAC address + int port; //port + } Connection; @@ -20,3 +25,3 @@ namespace OpieTooth { public: - PPPDialog( QWidget* parent = 0, const char* name = 0, bool modal = TRUE, WFlags fl = 0, const QString& device = 0); + PPPDialog(const QString& device = 0, int port = 0, QWidget* parent = 0, const char* name = 0, bool modal = TRUE, WFlags fl = 0); ~PPPDialog(); @@ -26,2 +31,8 @@ namespace OpieTooth { void fillOutPut( Opie::Core::OProcess* pppDial, char* cha, int len ); + void fillErr(Opie::Core::OProcess*, char*, int); + void slotProcessExited(Opie::Core::OProcess* proc); + void closeEvent(QCloseEvent* e); + public: + //Array of connections indexed by rfcomm device number + static Connection conns[NCONNECTS]; protected: @@ -34,2 +45,3 @@ namespace OpieTooth { QString m_device; + int m_port; }; |