summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings2/gprs/GPRSrun.cpp
Unidiff
Diffstat (limited to 'noncore/settings/networksettings2/gprs/GPRSrun.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/networksettings2/gprs/GPRSrun.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/noncore/settings/networksettings2/gprs/GPRSrun.cpp b/noncore/settings/networksettings2/gprs/GPRSrun.cpp
new file mode 100644
index 0000000..e842b99
--- a/dev/null
+++ b/noncore/settings/networksettings2/gprs/GPRSrun.cpp
@@ -0,0 +1,105 @@
1#include <sys/types.h>
2#include <signal.h>
3#include <errno.h>
4#include <qdir.h>
5#include <system.h>
6#include <resources.h>
7#include <netnode.h>
8#include "GPRSrun.h"
9
10State_t GPRSRun::detectState( void ) {
11
12 // is pppd still running ?
13 // is rfcomm still active
14 NodeCollection * NC = nodeCollection();
15 InterfaceInfo * I = NC->assignedInterface();
16
17 QDir D("/var/run");
18
19 if( I ) {
20 // has some pppx attached
21 return ( I->IsUp ) ? IsUp : Available;
22 }
23
24 // check ppp itself and figure out interface
25
26 owarn << "Check for ppp " << NC->name() << oendl;
27 if( D.exists( QString("ppp-")+removeSpaces(NC->name())+".pid") ) {
28 // get pid and check if pppd is still running
29 QFile F( D.path()+"/ppp-"+removeSpaces(NC->name())+".pid");
30
31 owarn << "PPP PID " << F.name() << oendl;
32 if( F.open( IO_ReadOnly ) ) {
33 QTextStream TS(&F);
34 QString X = TS.readLine();
35 PPPPid = X.toULong();
36 int rv;
37
38 rv = ::kill( PPPPid, 0 );
39 if( rv == 0 ||
40 ( rv < 0 && errno == EPERM )
41 ) {
42 // pppd is still up
43 X = TS.readLine();
44 I = NSResources->system().findInterface(X);
45
46 owarn << "ppp running : IFace " << X << " = " << (long)I << oendl;
47
48 if( I ) {
49 NC->assignInterface( I );
50 return (I->IsUp) ? IsUp : Available;
51 }
52
53 return Available;
54
55 } else {
56 // pppd is down
57 PPPPid = 0;
58 }
59 } // else pppd is down
60 }
61 NC->assignInterface( 0 );
62 return Unknown;
63}
64
65QString GPRSRun::setMyState( NodeCollection * NC, Action_t A , bool ) {
66
67 if( A == Up ) {
68 // start ppp on deviceFile
69 QStringList SL;
70 SL << "pon"
71 << removeSpaces( NC->name() )
72 << NC->device()->deviceFile();
73
74 if( ! NSResources->system().execAsUser( SL ) ) {
75 return QString("Cannot start pppd for %1").arg(NC->name());
76 }
77 } else if ( A == Down ) {
78 if( PPPPid == 0 ) {
79 detectState();
80 }
81 if( PPPPid ) {
82 QStringList SL;
83
84 SL << "poff"
85 << removeSpaces( NC->name() );
86
87 if( ! NSResources->system().execAsUser( SL ) ) {
88 return QString("Cannot terminate pppd for %1").arg(NC->name());
89 }
90 NC->assignInterface( 0 );
91 owarn << "ppp stopped " << oendl;
92 PPPPid = 0;
93 }
94 }
95
96 return QString();
97}
98
99bool GPRSRun::handlesInterface( const QString & S ) {
100 return Pat.match( S ) >= 0;
101}
102
103bool GPRSRun::handlesInterface( InterfaceInfo * I ) {
104 return handlesInterface( I->Name );
105}