summaryrefslogtreecommitdiff
path: root/noncore/settings
authorwimpie <wimpie>2004-08-09 02:31:25 (UTC)
committer wimpie <wimpie>2004-08-09 02:31:25 (UTC)
commit0784cfdbd261c43856b45be6ab7439841e69b858 (patch) (unidiff)
treef6a27d6b2e1e6d8dcc908b2ef5836cd320ddfab1 /noncore/settings
parent5e10278e748608766245ff9f59a54d1ae8ff6f7e (diff)
downloadopie-0784cfdbd261c43856b45be6ab7439841e69b858.zip
opie-0784cfdbd261c43856b45be6ab7439841e69b858.tar.gz
opie-0784cfdbd261c43856b45be6ab7439841e69b858.tar.bz2
Many changes :
bluetooth and usb seems to work added preliminary support for VPN on top of any network This version is still very much crippled yet is does DO some things
Diffstat (limited to 'noncore/settings') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetooth.pro1
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp25
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothBNEPdata.h5
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothBNEPedit.cpp28
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.cpp249
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.h23
-rw-r--r--noncore/settings/networksettings2/lancard/lancardedit.cpp4
-rw-r--r--noncore/settings/networksettings2/main.cpp7
-rw-r--r--noncore/settings/networksettings2/network/networkrun.cpp26
-rw-r--r--noncore/settings/networksettings2/networksettings.cpp34
-rw-r--r--noncore/settings/networksettings2/networksettings.h2
-rw-r--r--noncore/settings/networksettings2/networksettings2/Utils.h8
-rw-r--r--noncore/settings/networksettings2/networksettings2/asfullsetup.h2
-rw-r--r--noncore/settings/networksettings2/networksettings2/netnode.cpp6
-rw-r--r--noncore/settings/networksettings2/networksettings2/netnode.h20
-rw-r--r--noncore/settings/networksettings2/networksettings2/networksettings2.pro2
-rw-r--r--noncore/settings/networksettings2/networksettings2/resources.cpp256
-rw-r--r--noncore/settings/networksettings2/networksettings2/resources.h7
-rw-r--r--noncore/settings/networksettings2/networksettings2/system.cpp108
-rw-r--r--noncore/settings/networksettings2/networksettings2/system.h11
-rw-r--r--noncore/settings/networksettings2/networksettingsGUI.ui76
-rw-r--r--noncore/settings/networksettings2/nsdata.cpp25
-rw-r--r--noncore/settings/networksettings2/profile/profileGUI.ui162
-rw-r--r--noncore/settings/networksettings2/profile/profile_NNI.cpp4
-rw-r--r--noncore/settings/networksettings2/profile/profiledata.h1
-rw-r--r--noncore/settings/networksettings2/profile/profileedit.cpp2
-rw-r--r--noncore/settings/networksettings2/profile/profilerun.cpp6
-rw-r--r--noncore/settings/networksettings2/profile/profilerun.h4
-rw-r--r--noncore/settings/networksettings2/usb/usbrun.cpp14
29 files changed, 818 insertions, 300 deletions
diff --git a/noncore/settings/networksettings2/bluetooth/bluetooth.pro b/noncore/settings/networksettings2/bluetooth/bluetooth.pro
index 180bda9..2e1e138 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetooth.pro
+++ b/noncore/settings/networksettings2/bluetooth/bluetooth.pro
@@ -1,21 +1,22 @@
1TEMPLATE = lib 1TEMPLATE = lib
2CONFIG += qt warn_on release 2CONFIG += qt warn_on release
3DESTDIR = $(OPIEDIR)/plugins/networksettings2 3DESTDIR = $(OPIEDIR)/plugins/networksettings2
4 HEADERS = bluetooth_NN.h \ 4 HEADERS = bluetooth_NN.h \
5 bluetoothBNEP_NNI.h \ 5 bluetoothBNEP_NNI.h \
6 bluetoothRFCOMM_NNI.h \ 6 bluetoothRFCOMM_NNI.h \
7 bluetoothBNEPedit.h \ 7 bluetoothBNEPedit.h \
8 bluetoothRFCOMMedit.h 8 bluetoothRFCOMMedit.h
9 SOURCES = bluetooth_NN.cpp \ 9 SOURCES = bluetooth_NN.cpp \
10 bluetoothBNEP_NNI.cpp \ 10 bluetoothBNEP_NNI.cpp \
11 bluetoothRFCOMM_NNI.cpp \ 11 bluetoothRFCOMM_NNI.cpp \
12 bluetoothBNEPedit.cpp \ 12 bluetoothBNEPedit.cpp \
13 bluetoothBNEPrun.cpp \
13 bluetoothRFCOMMedit.cpp 14 bluetoothRFCOMMedit.cpp
14 INCLUDEPATH+= $(OPIEDIR)/include ../ ../networksettings2 15 INCLUDEPATH+= $(OPIEDIR)/include ../ ../networksettings2
15 DEPENDPATH+= $(OPIEDIR)/include ../ ../networksettings2 16 DEPENDPATH+= $(OPIEDIR)/include ../ ../networksettings2
16LIBS += -lqpe 17LIBS += -lqpe
17 INTERFACES= bluetoothBNEPGUI.ui bluetoothRFCOMMGUI.ui 18 INTERFACES= bluetoothBNEPGUI.ui bluetoothRFCOMMGUI.ui
18 TARGET = bluetooth 19 TARGET = bluetooth
19 VERSION = 1.0.0 20 VERSION = 1.0.0
20 21
21include ( $(OPIEDIR)/include.pro ) 22include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp
index 73312c6..d8420b9 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp
@@ -1,31 +1,44 @@
1#include "bluetoothBNEPedit.h" 1#include "bluetoothBNEPedit.h"
2#include "bluetoothBNEP_NNI.h" 2#include "bluetoothBNEP_NNI.h"
3#include "bluetooth_NN.h" 3#include "bluetooth_NN.h"
4 4
5ABluetoothBNEP::ABluetoothBNEP( BluetoothBNEPNetNode * PNN ) : ANetNodeInstance( PNN ) { 5ABluetoothBNEP::ABluetoothBNEP( BluetoothBNEPNetNode * PNN ) :
6 ANetNodeInstance( PNN ), Data() {
6 GUI = 0; 7 GUI = 0;
7 RT = 0; 8 RT = 0;
9 Data.AllowAll = 1;
8} 10}
9 11
10void ABluetoothBNEP::setSpecificAttribute( QString & , QString & ) { 12void ABluetoothBNEP::setSpecificAttribute( QString & S, QString & A ) {
13 if( S == "bdaddress" ) {
14 Data.BDAddress << A;
15 } else if ( S == "allowall" ) {
16 Data.AllowAll = 1;
17 }
11} 18}
12 19
13void ABluetoothBNEP::saveSpecificAttribute( QTextStream & ) { 20void ABluetoothBNEP::saveSpecificAttribute( QTextStream & TS ) {
21 TS << "allowall=" << Data.AllowAll << endl;
22 for ( QStringList::Iterator it = Data.BDAddress.begin();
23 it != Data.BDAddress.end();
24 ++it ) {
25 TS << "bdaddress=" << (*it) << endl;
26 }
14} 27}
15 28
16QWidget * ABluetoothBNEP::edit( QWidget * parent ) { 29QWidget * ABluetoothBNEP::edit( QWidget * parent ) {
17 GUI = new BluetoothBNEPEdit( parent ); 30 GUI = new BluetoothBNEPEdit( parent );
18 GUI->showData( Data ); 31 GUI->showData( Data );
19 return GUI; 32 return GUI;
20} 33}
21 34
22QString ABluetoothBNEP::acceptable( void ) { 35QString ABluetoothBNEP::acceptable( void ) {
23 return ( GUI ) ? GUI->acceptable( ) : QString(); 36 return ( GUI ) ? GUI->acceptable( ) : QString();
24} 37}
25 38
26void ABluetoothBNEP::commit( void ) { 39void ABluetoothBNEP::commit( void ) {
27 if( GUI && GUI->commit( Data ) ) 40 if( GUI && GUI->commit( Data ) )
28 setModified( 1 ); 41 setModified( 1 );
29} 42}
30 43
31bool ABluetoothBNEP::hasDataFor( const QString & ) { 44bool ABluetoothBNEP::hasDataFor( const QString & ) {
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPdata.h b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPdata.h
index 037b7b1..03c6903 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPdata.h
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPdata.h
@@ -1,8 +1,11 @@
1#ifndef BLUETOOTHBNEP_DATA_H 1#ifndef BLUETOOTHBNEP_DATA_H
2#define BLUETOOTHBNEP_DATA_H 2#define BLUETOOTHBNEP_DATA_H
3 3
4#include <qstringlist.h>
5
4typedef struct BluetoothBNEPData { 6typedef struct BluetoothBNEPData {
5 long x; 7 bool AllowAll;
8 QStringList BDAddress;
6} BluetoothBNEPData_t; 9} BluetoothBNEPData_t;
7 10
8#endif 11#endif
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPedit.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPedit.cpp
index 9a3156b..195dbae 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPedit.cpp
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPedit.cpp
@@ -1,26 +1,48 @@
1#include <qtopia/qcopenvelope_qws.h> 1#include <qtopia/qcopenvelope_qws.h>
2#include <qlistview.h>
3#include <qcheckbox.h>
2 4
3#include <GUIUtils.h> 5#include <GUIUtils.h>
4#include "bluetoothBNEPedit.h" 6#include "bluetoothBNEPedit.h"
5 7
6 8
7BluetoothBNEPEdit::BluetoothBNEPEdit( QWidget * Parent ) : BluetoothBNEPGUI( Parent ){ 9BluetoothBNEPEdit::BluetoothBNEPEdit( QWidget * Parent ) : BluetoothBNEPGUI( Parent ){
8 10
9} 11}
10 12
11QString BluetoothBNEPEdit::acceptable( void ) { 13QString BluetoothBNEPEdit::acceptable( void ) {
14 if( ( ! AnyPAN_CB->isChecked() ) &&
15 BTPANServers_LV->firstChild() == 0 ) {
16 return tr("<p>No bluetooth device addresses specified</p>");
17 }
18
12 return QString(); 19 return QString();
13} 20}
14 21
15bool BluetoothBNEPEdit::commit( BluetoothBNEPData & ) { 22bool BluetoothBNEPEdit::commit( BluetoothBNEPData & Data ) {
16 return 0; 23 QListViewItem * it = BTPANServers_LV->firstChild();
24 Data.BDAddress.clear();
25 while( it ) {
26 Data.BDAddress << it->text(0);
27 it = it->nextSibling();
28 }
29 return 0;
17} 30}
18 31
19void BluetoothBNEPEdit::showData( BluetoothBNEPData & ) { 32void BluetoothBNEPEdit::showData( BluetoothBNEPData & Data ) {
33 QListViewItem * lvit;
34 BTPANServers_LV->clear();
35
36 for ( QStringList::Iterator it = Data.BDAddress.begin();
37 it != Data.BDAddress.end();
38 ++it ) {
39 lvit = new QListViewItem(BTPANServers_LV);
40 lvit->setText( 0, (*it) );
41 }
20} 42}
21 43
22void BluetoothBNEPEdit::SLOT_StartBTMgr( void ) { 44void BluetoothBNEPEdit::SLOT_StartBTMgr( void ) {
23 QCopEnvelope e( "QPE/System", "execute(QString)" ); 45 QCopEnvelope e( "QPE/System", "execute(QString)" );
24 e << QString( "bluetooth-manager" ); 46 e << QString( "bluetooth-manager" );
25 47
26} 48}
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.cpp
new file mode 100644
index 0000000..24e4b7b
--- a/dev/null
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.cpp
@@ -0,0 +1,249 @@
1#include <qfile.h>
2#include <qfileinfo.h>
3#include <qtextstream.h>
4#include <resources.h>
5#include "bluetoothBNEPrun.h"
6
7QDict<QString> * BluetoothBNEPRun::PANConnections = 0;
8
9void BluetoothBNEPRun::detectState( NodeCollection * NC ) {
10 // unavailable : no card found
11 // available : card found and assigned to us or free
12 // up : card found and assigned to us and up
13 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number());
14 System & Sys = NSResources->system();
15 InterfaceInfo * Run;
16 QFile F( S );
17
18 Log(("Detecting for %s\n", NC->name().latin1() ));
19
20 if( F.open( IO_ReadOnly ) ) {
21 // could open file -> read interface and assign
22 QString X;
23 bool accepted = 0;
24 QTextStream TS(&F);
25 X = TS.readLine();
26 Log(("%s exists : %s\n", S.latin1(), X.latin1() ));
27 // find interface
28 if( handlesInterface( X ) ) {
29
30 Log(("Handles interface %s, PANC %p\n", X.latin1(), PANConnections ));
31 if( PANConnections == 0 ) {
32 // load connections that are active
33 // format : bnep0 00:60:57:02:71:A2 PANU
34 FILE * OutputOfCmd = popen( "pand --show", "r" ) ;
35
36 PANConnections = new QDict<QString>;
37
38 if( OutputOfCmd ) {
39 char ch;
40 // could fork
41 // read all data
42 QString Line = "";
43 while( 1 ) {
44 if( fread( &ch, 1, 1, OutputOfCmd ) < 1 ) {
45 // eof
46 break;
47 }
48 if( ch == '\n' || ch == '\r' ) {
49 if( ! Line.isEmpty() ) {
50 if( Line.startsWith( "bnep" ) ) {
51 QStringList SL = QStringList::split( " ", Line );
52 Log(("Detected PAN %s %s\n",
53 SL[0].latin1(), SL[1].latin1() ));
54 PANConnections->insert( SL[0], new QString(SL[1]));
55 }
56 Line="";
57 }
58 } else {
59 Line += ch;
60 }
61 }
62 }
63
64 pclose( OutputOfCmd );
65 }
66
67 // check if this runtime allows connection to node
68 if( ! Data.AllowAll ) {
69 // has addresses
70 for ( QStringList::Iterator it = Data.BDAddress.begin();
71 ! accepted && it != Data.BDAddress.end();
72 ++ it ) {
73 for( QDictIterator<QString> it2( *(PANConnections) );
74 it2.current();
75 ++ it2 ) {
76 if( X == it2.currentKey() &&
77 (*it) == *(it2.current())
78 ) {
79 // found
80 Log(("%s accepts connections to %s\n",
81 NC->name().latin1(),
82 it2.current()->latin1() ));
83 accepted = 1;
84 break;
85 }
86 }
87 }
88 } else {
89 Log(("%s accepts any connection\n", NC->name().latin1() ));
90 // accept any
91 accepted = 1;
92 }
93
94 if( accepted ) {
95 // matches and is allowed for this node
96 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
97 It.current();
98 ++It ) {
99 Run = It.current();
100 if( X == Run->Name ) {
101 Log(("%s Assigned %p\n", NC->name().latin1(), Run ));
102 Run->assignNode( netNode() );
103 assignInterface( Run );
104 NC->setCurrentState( IsUp );
105 return;
106 }
107 }
108 }
109 }
110 }
111
112 Log(("Assigned %p\n", assignedInterface() ));
113 if( ( Run = assignedInterface() ) ) {
114 // we already have an interface assigned -> still present ?
115 if( ! Run->IsUp ) {
116 // usb is still free -> keep assignment
117 NC->setCurrentState( Available );
118 return;
119 } // else interface is up but NOT us -> some other profile
120 }
121
122 // nothing (valid) assigned to us
123 assignInterface( 0 );
124
125 // find possible interface
126 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
127 It.current();
128 ++It ) {
129 Run = It.current();
130
131 Log(("%s %d %d=%d %d\n",
132 Run->Name.latin1(),
133 handlesInterface( Run->Name ),
134 Run->CardType, ARPHRD_ETHER,
135 ! Run->IsUp ));
136
137 if( handlesInterface( Run->Name ) &&
138 Run->CardType == ARPHRD_ETHER &&
139 ! Run->IsUp
140 ) {
141 Log(("Released(OFF)\n" ));
142 // proper type, and Not UP -> free
143 NC->setCurrentState( Off );
144 return;
145 }
146 }
147 // no free found
148 Log(("None available\n" ));
149
150 NC->setCurrentState( Unavailable );
151}
152
153bool BluetoothBNEPRun::setState( NodeCollection * NC, Action_t A, bool ) {
154
155 // we only handle activate and deactivate
156 switch( A ) {
157 case Activate :
158 {
159 if( NC->currentState() != Off ) {
160 return 0;
161 }
162 InterfaceInfo * N = getInterface();
163 if( ! N ) {
164 // no interface available
165 NC->setCurrentState( Unavailable );
166 return 0;
167 }
168 // because we were OFF the interface
169 // we get back is NOT assigned
170 N->assignNode( netNode() );
171 assignInterface( N );
172 Log(("Assing %p\n", N ));
173 NC->setCurrentState( Available );
174 return 1;
175 }
176 case Deactivate :
177 if( NC->currentState() == IsUp ) {
178 // bring down first
179 if( ! connection()->setState( Down ) )
180 // could not ...
181 return 0;
182 } else if( NC->currentState() != Available ) {
183 return 1;
184 }
185 assignedInterface()->assignNode( 0 ); // release
186 assignInterface( 0 );
187 NC->setCurrentState( Off );
188 return 1;
189 default :
190 // FT
191 break;
192 }
193 return 0;
194}
195
196bool BluetoothBNEPRun::canSetState( State_t Curr , Action_t A ) {
197 // we only handle up down activate and deactivate
198 switch( A ) {
199 case Activate :
200 { // at least available
201 if( Curr == Available ) {
202 return 1;
203 }
204 // or we can make one available
205 InterfaceInfo * N = getInterface();
206 if( ! N || N->assignedNode() != 0 ) {
207 // non available or assigned
208 return 0;
209 }
210 return 1;
211 }
212 case Deactivate :
213 return ( Curr >= Available );
214 default :
215 // FT
216 break;
217 }
218 return 0;
219}
220
221// get interface that is free or assigned to us
222InterfaceInfo * BluetoothBNEPRun::getInterface( void ) {
223
224 System & S = NSResources->system();
225 InterfaceInfo * best = 0, * Run;
226
227 for( QDictIterator<InterfaceInfo> It(S.interfaces());
228 It.current();
229 ++It ) {
230 Run = It.current();
231 if( handlesInterface( Run->Name ) &&
232 Run->CardType == ARPHRD_ETHER
233 ) {
234 // this is a bluetooth card
235 if( Run->assignedNode() == netNode() ) {
236 // assigned to us
237 return Run;
238 } else if( Run->assignedNode() == 0 ) {
239 // free
240 best = Run;
241 }
242 }
243 }
244 return best; // can be 0
245}
246
247bool BluetoothBNEPRun::handlesInterface( const QString & S ) {
248 return Pat.match( S ) >= 0;
249}
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.h b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.h
index c168429..ce03cbb 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.h
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.h
@@ -1,31 +1,34 @@
1#include <asdevice.h> 1#include <asdevice.h>
2#include "bluetoothBNEPdata.h" 2#include "bluetoothBNEPdata.h"
3 3
4class BluetoothBNEPRun : public AsDevice { 4class BluetoothBNEPRun : public AsDevice {
5 5
6public : 6public :
7 7
8 BluetoothBNEPRun( ANetNodeInstance * NNI, 8 BluetoothBNEPRun( ANetNodeInstance * NNI,
9 BluetoothBNEPData & Data ) : AsDevice( NNI ) 9 BluetoothBNEPData & D ) :
10 AsDevice( NNI ),
11 Data( D),
12 Pat( "bnep[0-6]" )
10 { } 13 { }
11 14
12 virtual AsDevice * asDevice( void ) 15 virtual AsDevice * asDevice( void )
13 { return (AsDevice *)this; } 16 { return (AsDevice *)this; }
14 17
15 virtual AsDevice * device( void ) 18 virtual AsDevice * device( void )
16 { return asDevice(); } 19 { return asDevice(); }
17 20
18protected : 21protected :
19 22
20 void detectState( NodeCollection * ) 23 void detectState( NodeCollection * );
21 { } 24 bool setState( NodeCollection * , Action_t, bool );
22 25 bool canSetState( State_t , Action_t );
23 bool setState( NodeCollection * , Action_t, bool ) 26 bool handlesInterface( const QString & );
24 { return 0; }
25 27
26 bool canSetState( State_t , Action_t ) 28private :
27 { return 0; }
28 29
29 bool handlesInterface( const QString & ) 30 InterfaceInfo * getInterface( void );
30 { return 0; } 31 BluetoothBNEPData & Data;
32 static QDict<QString> * PANConnections;
33 QRegExp Pat;
31}; 34};
diff --git a/noncore/settings/networksettings2/lancard/lancardedit.cpp b/noncore/settings/networksettings2/lancard/lancardedit.cpp
index ffe9bf6..c00d7aa 100644
--- a/noncore/settings/networksettings2/lancard/lancardedit.cpp
+++ b/noncore/settings/networksettings2/lancard/lancardedit.cpp
@@ -105,27 +105,27 @@ void LanCardEdit::populateList( void ) {
105 105
106// rescan system for new cards 106// rescan system for new cards
107void LanCardEdit::SLOT_ScanCards( void ) { 107void LanCardEdit::SLOT_ScanCards( void ) {
108 LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass(); 108 LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass();
109 109
110 // add any NIC that is new and matches our interfacename 110 // add any NIC that is new and matches our interfacename
111 System & S = NSResources->system(); 111 System & S = NSResources->system();
112 QRegExp R( "eth[0-9]" ); 112 QRegExp R( "eth[0-9]" );
113 // populate with all lancards in system 113 // populate with all lancards in system
114 for( QDictIterator<InterfaceInfo> It(S.interfaces()); 114 for( QDictIterator<InterfaceInfo> It(S.interfaces());
115 It.current(); 115 It.current();
116 ++It ) { 116 ++It ) {
117 fprintf( stderr, "TEST %s %s\n", 117 Log(( "TEST %s %s\n",
118 It.current()->Name.latin1(), 118 It.current()->Name.latin1(),
119 It.current()->MACAddress.latin1() ); 119 It.current()->MACAddress.latin1() ));
120 if( R.match( It.current()->Name ) >= 0 && 120 if( R.match( It.current()->Name ) >= 0 &&
121 ( It.current()->CardType == ARPHRD_ETHER 121 ( It.current()->CardType == ARPHRD_ETHER
122#ifdef ARPHRD_IEEE1394 122#ifdef ARPHRD_IEEE1394
123 || It.current()->CardType == ARPHRD_IEEE1394 123 || It.current()->CardType == ARPHRD_IEEE1394
124#endif 124#endif
125 ) 125 )
126 ) { 126 ) {
127 // old item ? 127 // old item ?
128 QCheckListItem * CLI = 128 QCheckListItem * CLI =
129 (QCheckListItem *)LanCards_LV->firstChild(); 129 (QCheckListItem *)LanCards_LV->firstChild();
130 while( CLI ) { 130 while( CLI ) {
131 if( CLI->text(0) == It.current()->MACAddress ) { 131 if( CLI->text(0) == It.current()->MACAddress ) {
diff --git a/noncore/settings/networksettings2/main.cpp b/noncore/settings/networksettings2/main.cpp
index 30d1270..6c969fc 100644
--- a/noncore/settings/networksettings2/main.cpp
+++ b/noncore/settings/networksettings2/main.cpp
@@ -69,65 +69,72 @@ int main( int argc, char * argv[] ) {
69 } else { 69 } else {
70 TheApp = new QPEApplication( argc, argv, GuiType ); 70 TheApp = new QPEApplication( argc, argv, GuiType );
71 } 71 }
72#else 72#else
73 TheApp = new QApplication( argc, argv, GuiType ); 73 TheApp = new QApplication( argc, argv, GuiType );
74#endif 74#endif
75 75
76 // init qt with app widget 76 // init qt with app widget
77 77
78 switch( Action ) { 78 switch( Action ) {
79 case ACT_REQUEST : 79 case ACT_REQUEST :
80 { NetworkSettingsData NS; 80 { NetworkSettingsData NS;
81 Log(("ACT_REQUEST\n"));
81 if( NS.canStart( argv[1] ) ) { 82 if( NS.canStart( argv[1] ) ) {
82 QString S; 83 QString S;
84 Log(("NEED FOR PROMPT\n" ));
83 S.sprintf( QPEApplication::qpeDir()+ 85 S.sprintf( QPEApplication::qpeDir()+
84 "/bin/networksettings2" ); 86 "/bin/networksettings2" );
85 char * MyArgv[4]; 87 char * MyArgv[4];
86 MyArgv[0] = "networksettings2"; 88 MyArgv[0] = "networksettings2";
87 MyArgv[1] = "--prompt"; 89 MyArgv[1] = "--prompt";
88 MyArgv[2] = argv[1]; 90 MyArgv[2] = argv[1];
89 MyArgv[3] = NULL; 91 MyArgv[3] = NULL;
90 NSResources->system().execAsUser( S, MyArgv ); 92 NSResources->system().execAsUser( S, MyArgv );
91 // if we come here , failed 93 // if we come here , failed
92 printf( "%s-cNN-disallowed", argv[1] ); 94 printf( "%s-cNN-disallowed", argv[1] );
93 } 95 }
94 } 96 }
95 break; 97 break;
96 case ACT_REGEN : 98 case ACT_REGEN :
97 { NetworkSettingsData NS; 99 { NetworkSettingsData NS;
100 Log(("REGEN\n" ));
98 // regen returns 0 if OK 101 // regen returns 0 if OK
99 rv = (NS.regenerate()) ? 1 : 0; 102 rv = (NS.regenerate()) ? 1 : 0;
100 } 103 }
101 break; 104 break;
102 case ACT_PROMPT : 105 case ACT_PROMPT :
103 { ActivateProfile AP(argv[1]); 106 { ActivateProfile AP(argv[1]);
107 Log(("PROMPT\n" ));
104 if( AP.exec() == QDialog::Accepted ) { 108 if( AP.exec() == QDialog::Accepted ) {
105 printf( "%s-c%ld-allowed", argv[1], AP.selectedProfile() ); 109 printf( "%s-c%ld-allowed", argv[1], AP.selectedProfile() );
106 } else { 110 } else {
107 printf( "%s-cNN-disallowed", argv[1] ); 111 printf( "%s-cNN-disallowed", argv[1] );
108 } 112 }
109 } 113 }
110 break; 114 break;
111 case ACT_GUI : 115 case ACT_GUI :
112 { QWidget * W = new NetworkSettings(0); 116 { QWidget * W = new NetworkSettings(0);
117 Log(("GUI\n" ));
113 TheApp->setMainWidget( W ); 118 TheApp->setMainWidget( W );
114 W->show(); 119 W->show();
115#ifdef _WS_QWS_ 120#ifdef _WS_QWS_
116 W->showMaximized(); 121 W->showMaximized();
117#else 122#else
118 W->resize( W->sizeHint() ); 123 W->resize( W->sizeHint() );
119#endif 124#endif
120 rv = TheApp->exec(); 125 rv = TheApp->exec();
121 delete W; 126 delete W;
122 } 127 }
123 break; 128 break;
124 } 129 }
125 130
131 LogClose();
132
126 return rv; 133 return rv;
127} 134}
128 135
129#endif 136#endif
130 137
131 138
132// main.cpp 139// main.cpp
133 140
diff --git a/noncore/settings/networksettings2/network/networkrun.cpp b/noncore/settings/networksettings2/network/networkrun.cpp
index 41e1c53..3e24c5f 100644
--- a/noncore/settings/networksettings2/network/networkrun.cpp
+++ b/noncore/settings/networksettings2/network/networkrun.cpp
@@ -4,56 +4,68 @@
4 4
5void NetworkRun::detectState( NodeCollection * NC ) { 5void NetworkRun::detectState( NodeCollection * NC ) {
6 RuntimeInfo * RI = netNode()->nextNode()->runtime(); 6 RuntimeInfo * RI = netNode()->nextNode()->runtime();
7 AsDevice * Next = RI->asDevice(); 7 AsDevice * Next = RI->asDevice();
8 InterfaceInfo * II = Next->assignedInterface(); 8 InterfaceInfo * II = Next->assignedInterface();
9 9
10 if( II ) { 10 if( II ) {
11 // device has assigned interface 11 // device has assigned interface
12 NC->setCurrentState( (( II->IsUp ) ? IsUp : Available) ); 12 NC->setCurrentState( (( II->IsUp ) ? IsUp : Available) );
13 return; 13 return;
14 } 14 }
15 15
16 Log(( "%s not ! UP or ava\n", NC->name().latin1() ));
16 // has no interface -> delegate 17 // has no interface -> delegate
17 RI->detectState( NC ); 18 RI->detectState( NC );
18} 19}
19 20
20bool NetworkRun::setState( NodeCollection * NC, Action_t A, bool Force ) { 21bool NetworkRun::setState( NodeCollection * NC, Action_t A, bool Force ) {
21 // we handle UP and DOWN 22 // we handle UP and DOWN
22 RuntimeInfo * RI = netNode()->nextNode()->runtime(); 23 RuntimeInfo * RI = netNode()->nextNode()->runtime();
23 AsDevice * Next = RI->asDevice(); 24 AsDevice * Next = RI->asDevice();
24 InterfaceInfo * II = Next->assignedInterface(); 25 InterfaceInfo * II = Next->assignedInterface();
25 26
26 if( A == Up ) { 27 if( A == Up ) {
27 // we can bring UP if lower level is available 28 // we can bring UP if lower level is available
28 if( NC->currentState() == Available || Force ) { 29 if( NC->currentState() == Available || Force ) {
29 QString S; 30 QString S;
30 S.sprintf( "ifup %s=%s-c%d-allowed", 31 S.sprintf( "ifup %s=%s-c%d-allowed",
31 II->Name.latin1(), II->Name.latin1(), 32 II->Name.latin1(), II->Name.latin1(),
32 connection()->number() ); 33 connection()->number() );
33 NSResources->system().runAsRoot( S ); 34 NSResources->system().runAsRoot( S );
34 } 35 }
35 return 1; 36 return 1;
36 } else if( A == Down ) { 37 } else if( A == Down ) {
37 if( NC->currentState() == IsUp || Force ) { 38 QString S;
38 QString S; 39 if( Force ) {
39 S.sprintf( "ifdown %s=%s-c%d-allowed", 40 Log(("Force mode %d\n", Force ));
40 II->Name.latin1(), II->Name.latin1(), 41 for( int i = 0;
41 connection()->number() ); 42 i < RI->netNode()->nodeClass()->instanceCount();
42 NSResources->system().runAsRoot( S ); 43 i ++ ) {
44 S.sprintf( "ifdown %s",
45 RI->netNode()->nodeClass()->genNic( i ).latin1() );
46 NSResources->system().runAsRoot( S );
47 }
48 } else {
49 if( NC->currentState() == IsUp ) {
50 S.sprintf( "ifdown %s=%s-c%d-allowed",
51 II->Name.latin1(), II->Name.latin1(),
52 connection()->number() );
53 NSResources->system().runAsRoot( S );
54 }
43 } 55 }
44 return 1; 56 return 1;
45 } 57 }
46 // delegate 58 // delegate
47 return RI->setState( NC, A ); 59 return RI->setState( NC, A, Force );
48} 60}
49 61
50bool NetworkRun::canSetState( State_t Curr, Action_t A ) { 62bool NetworkRun::canSetState( State_t Curr, Action_t A ) {
51 // we handle UP and DOWN 63 // we handle UP and DOWN
52 RuntimeInfo * RI = netNode()->nextNode()->runtime(); 64 RuntimeInfo * RI = netNode()->nextNode()->runtime();
53 65
54 if( A == Up ) { 66 if( A == Up ) {
55 return ( Curr == Available ); 67 return ( Curr == Available );
56 } else if( A == Down ) { 68 } else if( A == Down ) {
57 return ( Curr == IsUp ); 69 return ( Curr == IsUp );
58 } 70 }
59 // delegate 71 // delegate
diff --git a/noncore/settings/networksettings2/networksettings.cpp b/noncore/settings/networksettings2/networksettings.cpp
index b36c7a0..6ee4106 100644
--- a/noncore/settings/networksettings2/networksettings.cpp
+++ b/noncore/settings/networksettings2/networksettings.cpp
@@ -1,13 +1,14 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <unistd.h>
2 3
3#include <qpe/qpeapplication.h> 4#include <qpe/qpeapplication.h>
4#include <qlistbox.h> 5#include <qlistbox.h>
5#include <qgroupbox.h> 6#include <qgroupbox.h>
6#include <qtimer.h> 7#include <qtimer.h>
7#include <qlistbox.h> 8#include <qlistbox.h>
8#include <qmessagebox.h> 9#include <qmessagebox.h>
9#include <qlabel.h> 10#include <qlabel.h>
10#include <qiconview.h> 11#include <qiconview.h>
11#include <qtimer.h> 12#include <qtimer.h>
12#include <qpe/qpeapplication.h> 13#include <qpe/qpeapplication.h>
13#include <qtoolbutton.h> 14#include <qtoolbutton.h>
@@ -52,24 +53,28 @@ NetworkSettings::NetworkSettings( QWidget *parent,
52 } 53 }
53 } 54 }
54 55
55 if( Profiles_LB->count() ) { 56 if( Profiles_LB->count() ) {
56 Profiles_LB->setSelected( 0, TRUE ); 57 Profiles_LB->setSelected( 0, TRUE );
57 } 58 }
58 59
59 // if no profiles -> auto popup editing 60 // if no profiles -> auto popup editing
60 if( NSResources->connections().count() == 0 ) { 61 if( NSResources->connections().count() == 0 ) {
61 QTimer::singleShot( 100, this, SLOT(SLOT_AddNode() ) ); 62 QTimer::singleShot( 100, this, SLOT(SLOT_AddNode() ) );
62 } 63 }
63 64
65 connect( &(NSResources->system()),
66 SIGNAL( lineFromCommand(const QString &) ),
67 this, SLOT( SLOT_CmdMessage(const QString &) ) );
68
64 UpdateTimer->start( 5000 ); 69 UpdateTimer->start( 5000 );
65 connect( UpdateTimer, SIGNAL( timeout() ), 70 connect( UpdateTimer, SIGNAL( timeout() ),
66 this, SLOT( SLOT_RefreshStates() ) ); 71 this, SLOT( SLOT_RefreshStates() ) );
67 72
68 /* Add QCopChannel */ 73 /* Add QCopChannel */
69 connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)), 74 connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)),
70 this, SLOT(SLOT_QCopMessage(const QCString&,const QByteArray&)) ); 75 this, SLOT(SLOT_QCopMessage(const QCString&,const QByteArray&)) );
71} 76}
72 77
73NetworkSettings::~NetworkSettings() { 78NetworkSettings::~NetworkSettings() {
74 QString S; 79 QString S;
75 80
@@ -82,24 +87,30 @@ NetworkSettings::~NetworkSettings() {
82 ); 87 );
83 } 88 }
84 89
85 S = NSD.saveSettings(); 90 S = NSD.saveSettings();
86 if( ! S.isEmpty() ) { 91 if( ! S.isEmpty() ) {
87 // problem saving 92 // problem saving
88 QMessageBox::warning( 93 QMessageBox::warning(
89 0, 94 0,
90 tr( "Saving setup" ), S ); 95 tr( "Saving setup" ), S );
91 } 96 }
92} 97}
93 98
99void NetworkSettings::SLOT_CmdMessage( const QString & S ) {
100 Messages_LB->insertItem( S );
101 Messages_LB->setCurrentItem( Messages_LB->count()-1 );
102 Messages_LB->ensureCurrentVisible();
103}
104
94void NetworkSettings::SLOT_RefreshStates( void ) { 105void NetworkSettings::SLOT_RefreshStates( void ) {
95 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); // remember 106 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); // remember
96 107
97 if( LBI ) { 108 if( LBI ) {
98 NodeCollection * NC; 109 NodeCollection * NC;
99 NSResources->system().probeInterfaces(); 110 NSResources->system().probeInterfaces();
100 // update current selection only 111 // update current selection only
101 NC = NSResources->findConnection( LBI->text() ); 112 NC = NSResources->findConnection( LBI->text() );
102 if( NC ) { 113 if( NC ) {
103 State_t OldS = NC->state(); 114 State_t OldS = NC->state();
104 State_t NewS = NC->state(1); 115 State_t NewS = NC->state(1);
105 if( OldS != NewS ) { 116 if( OldS != NewS ) {
@@ -125,24 +136,27 @@ void NetworkSettings::SLOT_RefreshStates( void ) {
125 i ); 136 i );
126 if( is ) { 137 if( is ) {
127 Profiles_LB->setSelected( i, TRUE ); 138 Profiles_LB->setSelected( i, TRUE );
128 } 139 }
129 } 140 }
130 } 141 }
131 } 142 }
132 if( ci >= 0 ) 143 if( ci >= 0 )
133 Profiles_LB->setCurrentItem( ci ); 144 Profiles_LB->setCurrentItem( ci );
134 */ 145 */
135} 146}
136 147
148void NetworkSettings::SLOT_NoLongerBusy( void ) {
149 NSResources->busy( FALSE );
150}
137void NetworkSettings::SLOT_AddNode( void ) { 151void NetworkSettings::SLOT_AddNode( void ) {
138 SLOT_EditNode( 0 ); 152 SLOT_EditNode( 0 );
139} 153}
140 154
141void NetworkSettings::SLOT_DeleteNode( void ) { 155void NetworkSettings::SLOT_DeleteNode( void ) {
142 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); 156 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() );
143 157
144 if ( ! LBI ) 158 if ( ! LBI )
145 return; 159 return;
146 160
147 if( QMessageBox::warning( 161 if( QMessageBox::warning(
148 0, 162 0,
@@ -163,24 +177,26 @@ void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) {
163 if( LBI ) { 177 if( LBI ) {
164 NodeCollection * NC = NSResources->findConnection( LBI->text() ); 178 NodeCollection * NC = NSResources->findConnection( LBI->text() );
165 if( ! NC ) { 179 if( ! NC ) {
166 return; 180 return;
167 } 181 }
168 OldName = NC->name(); 182 OldName = NC->name();
169 EC.setConnection( NC ); 183 EC.setConnection( NC );
170 } 184 }
171 185
172 EC.showMaximized(); 186 EC.showMaximized();
173 // disable refresh timer 187 // disable refresh timer
174 UpdateTimer->stop(); 188 UpdateTimer->stop();
189 NSResources->busy( TRUE );
190 QTimer::singleShot( 1000, this, SLOT( SLOT_NoLongerBusy() ));
175 // we need to retry 191 // we need to retry
176 while( 1 ) { 192 while( 1 ) {
177 if( EC.exec() == QDialog::Accepted ) { 193 if( EC.exec() == QDialog::Accepted ) {
178 // toplevel item -> store 194 // toplevel item -> store
179 NodeCollection * NC = EC.connection(); 195 NodeCollection * NC = EC.connection();
180 if( NC->isModified() ) { 196 if( NC->isModified() ) {
181 setModified( 1 ); 197 setModified( 1 );
182 if( LBI ) { 198 if( LBI ) {
183 if( NC->name() != OldName ) { 199 if( NC->name() != OldName ) {
184 // find if new name is free 200 // find if new name is free
185 NodeCollection * LCN = NSResources->findConnection( 201 NodeCollection * LCN = NSResources->findConnection(
186 NC->name() ); 202 NC->name() );
@@ -197,25 +213,25 @@ void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) {
197 NSResources->addConnection( NC ); 213 NSResources->addConnection( NC );
198 } // else not changed 214 } // else not changed
199 215
200 // must add it here since change will trigger event 216 // must add it here since change will trigger event
201 Profiles_LB->changeItem( NC->devicePixmap(), 217 Profiles_LB->changeItem( NC->devicePixmap(),
202 NC->name(), 218 NC->name(),
203 Profiles_LB->index( LBI ) 219 Profiles_LB->index( LBI )
204 ); 220 );
205 } else { 221 } else {
206 // new item 222 // new item
207 int ci = Profiles_LB->count(); 223 int ci = Profiles_LB->count();
208 NSResources->addConnection( NC ); 224 NSResources->addConnection( NC );
209 NC->setNumber( NC->maxConnectionNumber()+1 ); 225 NC->setNumber( NSResources->assignConnectionNumber() );
210 Profiles_LB->insertItem( NC->devicePixmap(), NC->name() ); 226 Profiles_LB->insertItem( NC->devicePixmap(), NC->name() );
211 Profiles_LB->setSelected( ci, TRUE ); 227 Profiles_LB->setSelected( ci, TRUE );
212 } 228 }
213 updateProfileState( LBI ); 229 updateProfileState( LBI );
214 } 230 }
215 } else { 231 } else {
216 // cancelled : reset connection 232 // cancelled : reset connection
217 if( LBI ) { 233 if( LBI ) {
218 NodeCollection * NC = NSResources->findConnection( LBI->text() ); 234 NodeCollection * NC = NSResources->findConnection( LBI->text() );
219 NC->reassign(); 235 NC->reassign();
220 } 236 }
221 } 237 }
@@ -248,49 +264,54 @@ void NetworkSettings::SLOT_ShowNode( QListBoxItem * LBI ) {
248 case Unavailable : 264 case Unavailable :
249 // cannot do anything but recheck 265 // cannot do anything but recheck
250 EnabledPossible = OnPossible = ConnectPossible = 0; 266 EnabledPossible = OnPossible = ConnectPossible = 0;
251 break; 267 break;
252 case Disabled : 268 case Disabled :
253 OnPossible = ConnectPossible = 0; 269 OnPossible = ConnectPossible = 0;
254 break; 270 break;
255 case Off : 271 case Off :
256 DisabledOn = 0; 272 DisabledOn = 0;
257 break; 273 break;
258 case Available : 274 case Available :
259 OnOn = 1; 275 OnOn = 1;
276 Connect_TB->setPixmap( NSResources->getPixmap( "disconnected" ) );
260 DisabledOn = 0; 277 DisabledOn = 0;
261 break; 278 break;
262 case IsUp : 279 case IsUp :
263 OnOn = ConnectOn = 1; 280 OnOn = ConnectOn = 1;
281 Connect_TB->setPixmap( NSResources->getPixmap( "connected" ) );
264 DisabledOn = 0; 282 DisabledOn = 0;
265 break; 283 break;
266 } 284 }
267 285
286 if( ! OnOn ) {
287 Connect_TB->setPixmap( NSResources->getPixmap( "disconnected" ) );
288 }
289
268 // set button state 290 // set button state
269 Enable_TB->setEnabled( EnabledPossible ); 291 Enable_TB->setEnabled( EnabledPossible );
270 On_TB->setEnabled( OnPossible ); 292 On_TB->setEnabled( OnPossible );
271 Connect_TB->setEnabled( ConnectPossible ); 293 Connect_TB->setEnabled( ConnectPossible );
272 294
273 Enable_TB->setOn( DisabledOn ); 295 Enable_TB->setOn( DisabledOn );
274 On_TB->setOn( OnOn ); 296 On_TB->setOn( OnOn );
275 Connect_TB->setOn( ConnectOn ); 297 Connect_TB->setOn( ConnectOn );
276 298
277 if( NC->description().isEmpty() ) { 299 if( NC->description().isEmpty() ) {
278 Description_LBL->setText( tr( "No description" ) ); 300 Description_LBL->setText( tr( "<<No description>>" ) );
279 } else { 301 } else {
280 Description_LBL->setText( NC->description() ); 302 Description_LBL->setText( NC->description() );
281 } 303 }
282 304
283 Profile_GB->setTitle( LBI->text() ); 305 Profile_GB->setTitle( LBI->text() + " : " + NC->stateName() );
284 State_LBL->setText( NC->stateName() );
285} 306}
286 307
287void NetworkSettings::SLOT_CheckState( void ) { 308void NetworkSettings::SLOT_CheckState( void ) {
288 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); 309 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() );
289 if ( ! LBI ) 310 if ( ! LBI )
290 return; 311 return;
291 updateProfileState( LBI ); 312 updateProfileState( LBI );
292} 313}
293 314
294void NetworkSettings::updateProfileState( QListBoxItem * LBI ) { 315void NetworkSettings::updateProfileState( QListBoxItem * LBI ) {
295 if( LBI == Profiles_LB->item( Profiles_LB->currentItem() ) ) { 316 if( LBI == Profiles_LB->item( Profiles_LB->currentItem() ) ) {
296 SLOT_ShowNode( LBI ); 317 SLOT_ShowNode( LBI );
@@ -405,33 +426,38 @@ void NetworkSettings::SLOT_Connect( void ) {
405 426
406 if( ! rv ) { 427 if( ! rv ) {
407 QMessageBox::warning( 428 QMessageBox::warning(
408 0, 429 0,
409 tr( "Activating profile" ), 430 tr( "Activating profile" ),
410 tr( "Cannot enable profile" ) ); 431 tr( "Cannot enable profile" ) );
411 } 432 }
412 433
413 // we do not update the GUI but wait for the REAL upping of the device 434 // we do not update the GUI but wait for the REAL upping of the device
414} 435}
415 436
416void NetworkSettings::SLOT_Disconnect( void ) { 437void NetworkSettings::SLOT_Disconnect( void ) {
438 QString S;
417 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); 439 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() );
418 440
419 if ( ! LBI ) 441 if ( ! LBI )
420 return; 442 return;
421 443
422 NodeCollection * NC = 444 NodeCollection * NC =
423 NSResources->findConnection( LBI->text() ); 445 NSResources->findConnection( LBI->text() );
424 446
447 Log(( "Force interface %s down\n", NC->name().latin1() ));
425 NC->setState( Down, 1 ); 448 NC->setState( Down, 1 );
449 // remove 'up' file to make sure
450 S.sprintf( "/tmp/Profile-%d.up", NC->number() );
451 unlink( S.latin1() );
426} 452}
427 453
428void NetworkSettings::SLOT_ToMessages( void ) { 454void NetworkSettings::SLOT_ToMessages( void ) {
429 Profile_GB->hide(); 455 Profile_GB->hide();
430 Messages_GB->show(); 456 Messages_GB->show();
431} 457}
432 458
433void NetworkSettings::SLOT_ToProfile( void ) { 459void NetworkSettings::SLOT_ToProfile( void ) {
434 Profile_GB->show(); 460 Profile_GB->show();
435 Messages_GB->hide(); 461 Messages_GB->hide();
436} 462}
437 463
diff --git a/noncore/settings/networksettings2/networksettings.h b/noncore/settings/networksettings2/networksettings.h
index 97852af..8ffde06 100644
--- a/noncore/settings/networksettings2/networksettings.h
+++ b/noncore/settings/networksettings2/networksettings.h
@@ -19,34 +19,36 @@ public :
19 ~NetworkSettings( void ); 19 ~NetworkSettings( void );
20 20
21 static QString appName( void ) 21 static QString appName( void )
22 { return QString::fromLatin1("networksettings"); } 22 { return QString::fromLatin1("networksettings"); }
23 23
24 bool isModified( void ) 24 bool isModified( void )
25 { return NSD.isModified(); } 25 { return NSD.isModified(); }
26 void setModified( bool m ) 26 void setModified( bool m )
27 { NSD.setModified( m ); } 27 { NSD.setModified( m ); }
28 28
29public slots : 29public slots :
30 30
31 void SLOT_NoLongerBusy( void );
31 void SLOT_AddNode( void ); 32 void SLOT_AddNode( void );
32 void SLOT_DeleteNode( void ); 33 void SLOT_DeleteNode( void );
33 void SLOT_ShowNode( QListBoxItem * ); 34 void SLOT_ShowNode( QListBoxItem * );
34 void SLOT_EditNode( QListBoxItem * ); 35 void SLOT_EditNode( QListBoxItem * );
35 void SLOT_CheckState( void ); 36 void SLOT_CheckState( void );
36 void SLOT_Enable( void ); 37 void SLOT_Enable( void );
37 void SLOT_On( void ); 38 void SLOT_On( void );
38 void SLOT_Connect( void ); 39 void SLOT_Connect( void );
39 void SLOT_Disconnect( void ); 40 void SLOT_Disconnect( void );
40 void SLOT_GenerateConfig( void ); 41 void SLOT_GenerateConfig( void );
41 void SLOT_RefreshStates( void ); 42 void SLOT_RefreshStates( void );
42 void SLOT_QCopMessage( const QCString&,const QByteArray& ); 43 void SLOT_QCopMessage( const QCString&,const QByteArray& );
43 void SLOT_ToProfile( void ); 44 void SLOT_ToProfile( void );
44 void SLOT_ToMessages( void ); 45 void SLOT_ToMessages( void );
46 void SLOT_CmdMessage( const QString & S );
45 47
46private : 48private :
47 49
48 void updateProfileState( QListBoxItem * it ); 50 void updateProfileState( QListBoxItem * it );
49 QTimer * UpdateTimer; 51 QTimer * UpdateTimer;
50 NetworkSettingsData NSD; 52 NetworkSettingsData NSD;
51 53
52}; 54};
diff --git a/noncore/settings/networksettings2/networksettings2/Utils.h b/noncore/settings/networksettings2/networksettings2/Utils.h
new file mode 100644
index 0000000..63ef51c
--- a/dev/null
+++ b/noncore/settings/networksettings2/networksettings2/Utils.h
@@ -0,0 +1,8 @@
1#ifndef __UTILS_H
2#define __UTILS_H
3
4#define Log(x) VLog x
5extern void VLog( char * Format, ... );
6extern void LogClose( void );
7
8#endif
diff --git a/noncore/settings/networksettings2/networksettings2/asfullsetup.h b/noncore/settings/networksettings2/networksettings2/asfullsetup.h
index e358a83..072de9a 100644
--- a/noncore/settings/networksettings2/networksettings2/asfullsetup.h
+++ b/noncore/settings/networksettings2/networksettings2/asfullsetup.h
@@ -5,16 +5,18 @@
5 5
6// pure virtual (component oriented) interface of any 6// pure virtual (component oriented) interface of any
7// plugin that offers a full setup 7// plugin that offers a full setup
8class AsFullSetup : public RuntimeInfo { 8class AsFullSetup : public RuntimeInfo {
9 9
10public : 10public :
11 11
12 AsFullSetup( ANetNodeInstance * NNI ) : 12 AsFullSetup( ANetNodeInstance * NNI ) :
13 RuntimeInfo( NNI ) { 13 RuntimeInfo( NNI ) {
14 } 14 }
15 15
16 virtual const QString & description( void ) = 0; 16 virtual const QString & description( void ) = 0;
17 virtual bool triggersVPN( void )
18 { return 0; }
17 19
18}; 20};
19 21
20#endif 22#endif
diff --git a/noncore/settings/networksettings2/networksettings2/netnode.cpp b/noncore/settings/networksettings2/networksettings2/netnode.cpp
index 1182543..8c80e0b 100644
--- a/noncore/settings/networksettings2/networksettings2/netnode.cpp
+++ b/noncore/settings/networksettings2/networksettings2/netnode.cpp
@@ -94,26 +94,24 @@ void ANetNodeInstance::saveAttributes( QTextStream & TS ) {
94} 94}
95 95
96ANetNodeInstance * ANetNodeInstance::nextNode( void ) { 96ANetNodeInstance * ANetNodeInstance::nextNode( void ) {
97 return connection()->findNext( this ); 97 return connection()->findNext( this );
98} 98}
99 99
100// 100//
101// 101//
102// NODECOLLECTION 102// NODECOLLECTION
103// 103//
104// 104//
105 105
106long NodeCollection::MaxNr = -1;
107
108NodeCollection::NodeCollection( void ) : QList<ANetNodeInstance>() { 106NodeCollection::NodeCollection( void ) : QList<ANetNodeInstance>() {
109 IsModified = 0; 107 IsModified = 0;
110 Index = -1; 108 Index = -1;
111 Name=""; 109 Name="";
112 IsNew = 1; 110 IsNew = 1;
113 CurrentState = Unchecked; 111 CurrentState = Unchecked;
114} 112}
115 113
116NodeCollection::NodeCollection( QTextStream & TS ) : 114NodeCollection::NodeCollection( QTextStream & TS ) :
117 QList<ANetNodeInstance>() { 115 QList<ANetNodeInstance>() {
118 long idx; 116 long idx;
119 bool InError = 0; 117 bool InError = 0;
@@ -137,24 +135,25 @@ NodeCollection::NodeCollection( QTextStream & TS ) :
137 135
138 idx = S.find('='); 136 idx = S.find('=');
139 S.stripWhiteSpace(); 137 S.stripWhiteSpace();
140 A = S.left( idx ); 138 A = S.left( idx );
141 A.lower(); 139 A.lower();
142 N = S.mid( idx+1, S.length() ); 140 N = S.mid( idx+1, S.length() );
143 N.stripWhiteSpace(); 141 N.stripWhiteSpace();
144 N = deQuote( N ); 142 N = deQuote( N );
145 143
146 if( A == "name" ) { 144 if( A == "name" ) {
147 Name = N; 145 Name = N;
148 } else if( A == "number" ) { 146 } else if( A == "number" ) {
147 Log(( "read number %s\n", N.latin1() ));
149 setNumber( N.toLong() ); 148 setNumber( N.toLong() );
150 } else if( A == "node" ) { 149 } else if( A == "node" ) {
151 ANetNodeInstance * NNI = NSResources->findNodeInstance( N ); 150 ANetNodeInstance * NNI = NSResources->findNodeInstance( N );
152 if( NNI && ! InError ) { 151 if( NNI && ! InError ) {
153 append( NSResources->findNodeInstance( N ) ); 152 append( NSResources->findNodeInstance( N ) );
154 } else { 153 } else {
155 // could not find a node type -> collection invalid 154 // could not find a node type -> collection invalid
156 InError = 1; 155 InError = 1;
157 } 156 }
158 } 157 }
159 } while( 1 ); 158 } while( 1 );
160} 159}
@@ -286,24 +285,27 @@ QString NodeCollection::stateName( State_t S) {
286 } 285 }
287 return QString(""); 286 return QString("");
288} 287}
289 288
290void NodeCollection::reassign( void ) { 289void NodeCollection::reassign( void ) {
291 for( QListIterator<ANetNodeInstance> it(*this); 290 for( QListIterator<ANetNodeInstance> it(*this);
292 it.current(); 291 it.current();
293 ++it ) { 292 ++it ) {
294 it.current()->setConnection( this ); 293 it.current()->setConnection( this );
295 } 294 }
296} 295}
297 296
297bool NodeCollection::triggersVPN() {
298 return getToplevel()->runtime()->asFullSetup()->triggersVPN();
299}
298// 300//
299// 301//
300// RUNTIMEINFO 302// RUNTIMEINFO
301// 303//
302// 304//
303 305
304InterfaceInfo * RuntimeInfo::assignedInterface( void ) { 306InterfaceInfo * RuntimeInfo::assignedInterface( void ) {
305 return netNode()->nextNode()->runtime()->assignedInterface(); 307 return netNode()->nextNode()->runtime()->assignedInterface();
306} 308}
307 309
308AsDevice * RuntimeInfo::device( void ) { 310AsDevice * RuntimeInfo::device( void ) {
309 return netNode()->nextNode()->runtime()->device(); 311 return netNode()->nextNode()->runtime()->device();
diff --git a/noncore/settings/networksettings2/networksettings2/netnode.h b/noncore/settings/networksettings2/networksettings2/netnode.h
index 5e36062..ca35c27 100644
--- a/noncore/settings/networksettings2/networksettings2/netnode.h
+++ b/noncore/settings/networksettings2/networksettings2/netnode.h
@@ -1,22 +1,24 @@
1#ifndef NETNODE_H 1#ifndef NETNODE_H
2#define NETNODE_H 2#define NETNODE_H
3 3
4#include <qtextstream.h> 4#include <qtextstream.h>
5#include <qlist.h> 5#include <qlist.h>
6#include <qdict.h> 6#include <qdict.h>
7#include <qpixmap.h> 7#include <qpixmap.h>
8#include <qobject.h> 8#include <qobject.h>
9#include <time.h> 9#include <time.h>
10 10
11#include <Utils.h>
12
11// difference feature interfaces 13// difference feature interfaces
12class AsDevice; 14class AsDevice;
13class AsLine; 15class AsLine;
14class AsConnection; 16class AsConnection;
15class AsFullSetup; 17class AsFullSetup;
16 18
17// needed for plugin creation function 19// needed for plugin creation function
18#include <qlist.h> 20#include <qlist.h>
19 21
20class ANetNode; 22class ANetNode;
21class ANetNodeInstance; 23class ANetNodeInstance;
22class NodeCollection; 24class NodeCollection;
@@ -274,48 +276,55 @@ protected :
274 276
275class NodeCollection : public QList<ANetNodeInstance> { 277class NodeCollection : public QList<ANetNodeInstance> {
276 278
277public : 279public :
278 280
279 NodeCollection( void ); 281 NodeCollection( void );
280 NodeCollection( QTextStream & TS ); 282 NodeCollection( QTextStream & TS );
281 ~NodeCollection( void ); 283 ~NodeCollection( void );
282 284
283 int number( void ) 285 int number( void )
284 { return Number; } 286 { return Number; }
285 void setNumber( int i ) 287 void setNumber( int i )
286 { Number = i; if( MaxNr < i ) MaxNr = i; } 288 { Number = i; }
287 bool isNew( void ) 289 bool isNew( void )
288 { return IsNew; } 290 { return IsNew; }
289 void setNew( bool N ) 291 void setNew( bool N )
290 { IsNew = N ; } 292 { IsNew = N ; }
291 bool isModified( void ) 293 bool isModified( void )
292 { return IsModified; } 294 { return IsModified; }
293 void setModified( bool N ) 295 void setModified( bool N )
294 { IsModified = N ; } 296 { IsModified = N ; }
295 297
296 bool handlesInterface( const QString & S ) { 298 bool handlesInterface( const QString & S ) {
297 return getToplevel()->runtime()->handlesInterface( S ); 299 return getToplevel()->runtime()->handlesInterface( S );
298 } 300 }
299 301
300 InterfaceInfo * assignedInterface( void ) { 302 InterfaceInfo * assignedInterface( void ) {
301 return getToplevel()->runtime()->assignedInterface(); 303 return getToplevel()->runtime()->assignedInterface();
302 } 304 }
303 305
304 AsDevice * device() { 306 AsDevice * device() {
305 return getToplevel()->runtime()->device(); 307 return getToplevel()->runtime()->device();
306 } 308 }
307 309
310 bool triggersVPN();
311
308 State_t state( bool Update = 0 ) 312 State_t state( bool Update = 0 )
309 { if( CurrentState == Unchecked || Update ) { 313 { Log(( "%s state %d(=%d?)\n", Name.latin1(), CurrentState,
314 Unchecked ));
315 if( CurrentState == Unchecked || Update ) {
316 Log(( "TL %p TLR %p\n",
317 getToplevel(),
318 getToplevel()->runtime() ));
310 // need to get current state 319 // need to get current state
311 getToplevel()->runtime()->detectState( this ); 320 getToplevel()->runtime()->detectState( this );
312 } 321 }
313 return CurrentState; 322 return CurrentState;
314 } 323 }
315 324
316 // get the ixmap for this device 325 // get the ixmap for this device
317 QPixmap devicePixmap( void ); 326 QPixmap devicePixmap( void );
318 QPixmap statePixmap( State_t S ); 327 QPixmap statePixmap( State_t S );
319 QPixmap statePixmap( bool Update = 0 ) 328 QPixmap statePixmap( bool Update = 0 )
320 { return statePixmap( state(Update) ); } 329 { return statePixmap( state(Update) ); }
321 QString stateName( State_t ); 330 QString stateName( State_t );
@@ -343,36 +352,29 @@ public :
343 { return Name; } 352 { return Name; }
344 353
345 const QString & description( void ); 354 const QString & description( void );
346 355
347 void setName( const QString & N) 356 void setName( const QString & N)
348 { Name = N; } 357 { Name = N; }
349 358
350 State_t currentState( void ) 359 State_t currentState( void )
351 { return CurrentState; } 360 { return CurrentState; }
352 void setCurrentState( State_t S ) 361 void setCurrentState( State_t S )
353 { CurrentState = S; } 362 { CurrentState = S; }
354 363
355 long maxConnectionNumber( void )
356 { return MaxNr; }
357
358 static void resetMaxNr( void )
359 { MaxNr = -1; }
360
361private : 364private :
362 365
363 int compareItems ( QCollection::Item item1, 366 int compareItems ( QCollection::Item item1,
364 QCollection::Item item2 ); 367 QCollection::Item item2 );
365 368
366 static long MaxNr;
367 long Number; 369 long Number;
368 370
369 // state of this connection 371 // state of this connection
370 State_t CurrentState; 372 State_t CurrentState;
371 373
372 QString Name; 374 QString Name;
373 // true if this collection was just created (and not 375 // true if this collection was just created (and not
374 // loaded from file 376 // loaded from file
375 bool IsNew; 377 bool IsNew;
376 // index in listbox 378 // index in listbox
377 int Index; 379 int Index;
378 bool IsModified; 380 bool IsModified;
diff --git a/noncore/settings/networksettings2/networksettings2/networksettings2.pro b/noncore/settings/networksettings2/networksettings2/networksettings2.pro
index f97c93b..16a946b 100644
--- a/noncore/settings/networksettings2/networksettings2/networksettings2.pro
+++ b/noncore/settings/networksettings2/networksettings2/networksettings2.pro
@@ -11,18 +11,18 @@ HEADERS = netnode.h \
11 asfullsetup.h \ 11 asfullsetup.h \
12 systemfile.h \ 12 systemfile.h \
13 wextensions.h \ 13 wextensions.h \
14 asdevice.h 14 asdevice.h
15 SOURCES = netnode.cpp \ 15 SOURCES = netnode.cpp \
16 GUIUtils.cpp \ 16 GUIUtils.cpp \
17 system.cpp \ 17 system.cpp \
18 systemfile.cpp \ 18 systemfile.cpp \
19 wextensions.cpp \ 19 wextensions.cpp \
20 resources.cpp 20 resources.cpp
21 INCLUDEPATH+= $(OPIEDIR)/include ../networksettings2 21 INCLUDEPATH+= $(OPIEDIR)/include ../networksettings2
22 DEPENDPATH+= $(OPIEDIR)/include 22 DEPENDPATH+= $(OPIEDIR)/include
23LIBS += -lqpe -lopiecore2 23LIBS += -lqpe -lopiecore2 -lopieui2
24 INTERFACES= 24 INTERFACES=
25 TARGET = networksettings2 25 TARGET = networksettings2
26 VERSION = 1.0.0 26 VERSION = 1.0.0
27 27
28include ( $(OPIEDIR)/include.pro ) 28include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/settings/networksettings2/networksettings2/resources.cpp b/noncore/settings/networksettings2/networksettings2/resources.cpp
index c95ac7f..71e84cd 100644
--- a/noncore/settings/networksettings2/networksettings2/resources.cpp
+++ b/noncore/settings/networksettings2/networksettings2/resources.cpp
@@ -14,24 +14,26 @@
14 14
15#define PLUGINDIR "plugins/networksettings2" 15#define PLUGINDIR "plugins/networksettings2"
16#define ICONDIR "/pics/networksettings2/" 16#define ICONDIR "/pics/networksettings2/"
17 17
18// single resources instance 18// single resources instance
19TheNSResources * _NSResources = 0; 19TheNSResources * _NSResources = 0;
20 20
21TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), 21TheNSResources::TheNSResources( void ) : NodeTypeNameMap(),
22 ConnectionsMap() { 22 ConnectionsMap() {
23 23
24 _NSResources = this; 24 _NSResources = this;
25 25
26 detectCurrentUser();
27
26 // load available netnodes 28 // load available netnodes
27 findAvailableNetNodes(QPEApplication::qpeDir() + PLUGINDIR ); 29 findAvailableNetNodes(QPEApplication::qpeDir() + PLUGINDIR );
28 30
29 // compile provides and needs lists 31 // compile provides and needs lists
30 { const char ** NeedsRun; 32 { const char ** NeedsRun;
31 QDictIterator<NetNode_t> OuterIt( AllNodeTypes ); 33 QDictIterator<NetNode_t> OuterIt( AllNodeTypes );
32 bool Done; 34 bool Done;
33 35
34 for ( ; OuterIt.current(); ++OuterIt ) { 36 for ( ; OuterIt.current(); ++OuterIt ) {
35 // find needs list 37 // find needs list
36 ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList; 38 ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList;
37 ANetNode::NetNodeList & NNL = *(NNLP); 39 ANetNode::NetNodeList & NNL = *(NNLP);
@@ -71,38 +73,49 @@ TheNSResources::TheNSResources( void ) : NodeTypeNameMap(),
71 tr( "<p>Devices that can handle single bytes</p>" ) ); 73 tr( "<p>Devices that can handle single bytes</p>" ) );
72 NodeTypeDescriptionMap.insert( "connection", 74 NodeTypeDescriptionMap.insert( "connection",
73 tr( "<p>Nodes that provide working IP connections</p>" ) ); 75 tr( "<p>Nodes that provide working IP connections</p>" ) );
74 NodeTypeDescriptionMap.insert( "fullsetup", 76 NodeTypeDescriptionMap.insert( "fullsetup",
75 tr( "<p>Fully configured connection profile</p>" ) ); 77 tr( "<p>Fully configured connection profile</p>" ) );
76 78
77 // define system files 79 // define system files
78 addSystemFile( new SystemFile( "interfaces", "./interfaces" ) ); 80 addSystemFile( new SystemFile( "interfaces", "./interfaces" ) );
79 81
80 // get access to the system 82 // get access to the system
81 TheSystem = new System(); 83 TheSystem = new System();
82 84
83 detectCurrentUser();
84} 85}
85 86
86TheNSResources::~TheNSResources( void ) { 87TheNSResources::~TheNSResources( void ) {
87 delete TheSystem; 88 delete TheSystem;
88} 89}
89 90
91void TheNSResources::busy( bool B ) {
92/*
93 if( B ) {
94 ShowWait->show();
95 qApp->process
96 } else {
97 ShowWait->hide();
98 }
99*/
100}
101
90/** 102/**
91 * Load all modules that are found in the path 103 * Load all modules that are found in the path
92 * @param path a directory that is scaned for any plugins that can be loaded 104 * @param path a directory that is scaned for any plugins that can be loaded
93 * and attempts to load them 105 * and attempts to load them
94 */ 106 */
95void TheNSResources::findAvailableNetNodes(const QString &path){ 107void TheNSResources::findAvailableNetNodes(const QString &path){
96 108
109 Log(("Locate plugins in %s\n", path.latin1() ));
97 QDir d(path); 110 QDir d(path);
98 if(!d.exists()) 111 if(!d.exists())
99 return; 112 return;
100 113
101 QString lang = ::getenv("LANG"); 114 QString lang = ::getenv("LANG");
102 115
103 // Don't want sym links 116 // Don't want sym links
104 d.setFilter( QDir::Files | QDir::NoSymLinks ); 117 d.setFilter( QDir::Files | QDir::NoSymLinks );
105 const QFileInfoList *list = d.entryInfoList(); 118 const QFileInfoList *list = d.entryInfoList();
106 QFileInfoListIterator it( *list ); 119 QFileInfoListIterator it( *list );
107 QFileInfo *fi; 120 QFileInfo *fi;
108 121
@@ -118,24 +131,45 @@ void TheNSResources::findAvailableNetNodes(const QString &path){
118 ".qm"; 131 ".qm";
119 132
120 if( trans->load( fn ) ) 133 if( trans->load( fn ) )
121 qApp->installTranslator( trans ); 134 qApp->installTranslator( trans );
122 else 135 else
123 delete trans; 136 delete trans;
124 } 137 }
125 } 138 }
126 ++it; 139 ++it;
127 } 140 }
128} 141}
129 142
143// used to find unique connection number
144int TheNSResources::assignConnectionNumber( void ) {
145 bool found = 1;
146 for( int trial = 0; ; trial ++ ) {
147 found = 1;
148 for( QDictIterator<NodeCollection> it(ConnectionsMap);
149 it.current();
150 ++it ) {
151 if( it.current()->number() == trial ) {
152 found = 0;
153 break;
154 }
155 }
156
157 if( found ) {
158 Log(("Assign profile number %d\n", trial ));
159 return trial;
160 }
161 }
162}
163
130/** 164/**
131 * Attempt to load a function and resolve a function. 165 * Attempt to load a function and resolve a function.
132 * @param pluginFileName - the name of the file in which to attempt to load 166 * @param pluginFileName - the name of the file in which to attempt to load
133 * @param resolveString - function pointer to resolve 167 * @param resolveString - function pointer to resolve
134 * @return true of loading is successful 168 * @return true of loading is successful
135 */ 169 */
136bool TheNSResources::loadNetNode( 170bool TheNSResources::loadNetNode(
137 const QString &pluginFileName, const QString &resolveString){ 171 const QString &pluginFileName, const QString &resolveString){
138 172
139 QLibrary *lib = new QLibrary(pluginFileName); 173 QLibrary *lib = new QLibrary(pluginFileName);
140 void * res = lib->resolve(resolveString); 174 void * res = lib->resolve(resolveString);
141 if( ! res ){ 175 if( ! res ){
@@ -158,36 +192,37 @@ bool TheNSResources::loadNetNode(
158 for( QListIterator<ANetNode> it(PNN); 192 for( QListIterator<ANetNode> it(PNN);
159 it.current(); 193 it.current();
160 ++it ) { 194 ++it ) {
161 NetNode_t * NN; 195 NetNode_t * NN;
162 196
163 NNP = it.current(); 197 NNP = it.current();
164 NN = new NetNode_t; 198 NN = new NetNode_t;
165 NN->NetNode = NNP; 199 NN->NetNode = NNP;
166 NN->TheLibrary = lib; 200 NN->TheLibrary = lib;
167 NN->NodeCountInLib = PNN.count(); 201 NN->NodeCountInLib = PNN.count();
168 202
169 // store mapping 203 // store mapping
170 printf( "Store %s\n", NN->NetNode->name() );
171 AllNodeTypes.insert( NN->NetNode->name(), NN ); 204 AllNodeTypes.insert( NN->NetNode->name(), NN );
172 } 205 }
173 206
174 return 1; 207 return 1;
175} 208}
176 209
177QPixmap TheNSResources::getPixmap( const QString & QS ) { 210QPixmap TheNSResources::getPixmap( const QString & QS ) {
211 QPixmap P;
178 QString S("networksettings2/"); 212 QString S("networksettings2/");
179 S += QS; 213 S += QS;
180 fprintf( stderr, "%s\n", S.latin1() ); 214 Log(("%s\n", S.latin1() ));
181 return Resource::loadPixmap( S ); 215 P = Resource::loadPixmap( S );
216 return ( P.isNull() ) ? QPixmap() : P;
182} 217}
183 218
184QString TheNSResources::tr( const char * s ) { 219QString TheNSResources::tr( const char * s ) {
185 return qApp->translate( "resource", s ); 220 return qApp->translate( "resource", s );
186} 221}
187 222
188const QString & TheNSResources::netNode2Name( const char * s ) { 223const QString & TheNSResources::netNode2Name( const char * s ) {
189 return NodeTypeNameMap[s]; 224 return NodeTypeNameMap[s];
190} 225}
191 226
192const QString & TheNSResources::netNode2Description( const char * s ) { 227const QString & TheNSResources::netNode2Description( const char * s ) {
193 return NodeTypeDescriptionMap[s]; 228 return NodeTypeDescriptionMap[s];
@@ -216,155 +251,194 @@ void TheNSResources::removeConnection( const QString & N ) {
216 // delete netnodes in this connection 251 // delete netnodes in this connection
217 ANetNodeInstance * NNI; 252 ANetNodeInstance * NNI;
218 for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) { 253 for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) {
219 removeNodeInstance( NNI->name() ); 254 removeNodeInstance( NNI->name() );
220 } 255 }
221 ConnectionsMap.remove( N ); 256 ConnectionsMap.remove( N );
222} 257}
223 258
224NodeCollection * TheNSResources::findConnection( const QString & S ) { 259NodeCollection * TheNSResources::findConnection( const QString & S ) {
225 return ConnectionsMap[ S ]; 260 return ConnectionsMap[ S ];
226} 261}
227 262
263/*
228void TheNSResources::renumberConnections( void ) { 264void TheNSResources::renumberConnections( void ) {
229 Name2Connection_t & M = NSResources->connections(); 265 Name2Connection_t & M = NSResources->connections();
230 NodeCollection * NC; 266 NodeCollection * NC;
231 267
232 // for all connections 268 // for all connections
233 NodeCollection::resetMaxNr(); 269 NodeCollection::resetMaxNr();
234 for( QDictIterator<NodeCollection> it(M); 270 for( QDictIterator<NodeCollection> it(M);
235 it.current(); 271 it.current();
236 ++it ) { 272 ++it ) {
237 NC = it.current(); 273 NC = it.current();
238 NC->setNumber( NC->maxConnectionNumber()+1 ); 274 NC->setNumber( NC->maxConnectionNumber()+1 );
239 NC->setModified( 1 ); 275 NC->setModified( 1 );
240 } 276 }
241} 277}
278*/
242 279
243typedef struct EnvVars { 280typedef struct EnvVars {
244 char * Name; 281 char * Name;
245 int Len; 282 int Len;
246} EnvVar_t; 283} EnvVar_t;
247 284
248#define AnEV(x) x, sizeof(x)-1 285#define AnEV(x) x, sizeof(x)-1
249 286
250static EnvVar_t EV[] = { 287static EnvVar_t EV[] = {
251 // AnEV( "HOME=" ), -> SPECIAL 288 // AnEV( "HOME=" ), -> SPECIAL
252 // AnEV( "LOGNAME=" ), -> SPECIAL 289 // AnEV( "LOGNAME=" ), -> SPECIAL
253 AnEV( "USER=" ), 290 AnEV( "USER=" ),
254 AnEV( "LD_LIBRARY_PATH=" ), 291 AnEV( "LD_LIBRARY_PATH=" ),
255 AnEV( "PATH=" ), 292 AnEV( "PATH=" ),
256 AnEV( "QTDIR=" ), 293 AnEV( "QTDIR=" ),
257 AnEV( "OPIEDIR=" ), 294 AnEV( "OPIEDIR=" ),
258 AnEV( "SHELL=" ), 295 AnEV( "SHELL=" ),
259 { NULL, 0 } 296 { NULL, 0 }
260}; 297};
261 298
262void TheNSResources::detectCurrentUser( void ) { 299void TheNSResources::detectCurrentUser( void ) {
263 // find current running qpe 300 // find current running qpe
264 QString QPEEnvFile = ""; 301 QString QPEEnvFile = "";
265 302
266 // open proc dir and find all dirs in it 303 if( getenv( "OPIEDIR" ) == 0 ) {
267 { QRegExp R("[0-9]+"); 304 // nothing known
268 QDir ProcDir( "/proc" ); 305 { // open proc dir and find all dirs in it
269 QString QPELoc = QPEApplication::qpeDir() + "bin/qpe"; 306 QRegExp R("[0-9]+");
270 QFileInfo FI; 307 QDir ProcDir( "/proc" );
271 QStringList EL = ProcDir.entryList( QDir::Dirs ); 308 QFileInfo FI;
272 309 QStringList EL = ProcDir.entryList( QDir::Dirs );
273 // print it out 310
274 for ( QStringList::Iterator it = EL.begin(); 311 // print it out
275 it != EL.end(); 312 for ( QStringList::Iterator it = EL.begin();
276 ++it ) { 313 it != EL.end();
277 if( R.match( (*it) ) >= 0 ) { 314 ++it ) {
278 QString S = ProcDir.path()+"/"+ (*it); 315 if( R.match( (*it) ) >= 0 ) {
279 S.append( "/exe" ); 316 QString S = ProcDir.path()+"/"+ (*it);
280 FI.setFile( S ); 317 S.append( "/exe" );
281 // get the linke 318 FI.setFile( S );
282 S = FI.readLink(); 319 // get the link
283 if( S == QPELoc ) { 320 S = FI.readLink();
284 // found running qpe 321 if( S.right( 8 ) == "/bin/qpe" ) {
285 QPEEnvFile.sprintf( ProcDir.path()+ "/" + (*it) + "/environ" ); 322 // found running qpe
286 break; 323 QPEEnvFile.sprintf( ProcDir.path()+ "/" + (*it) + "/environ" );
324 break;
325 }
287 } 326 }
288 } 327 }
289 } 328 }
290 }
291 329
292 if( QPEEnvFile.isEmpty() ) { 330 if( QPEEnvFile.isEmpty() ) {
293 // could not find qpe 331 // could not find qpe
294 fprintf( stderr, "Could not find qpe\n" ); 332 Log(("Could not find qpe\n" ));
295 return;
296 }
297
298 // FI now contains path ProcDir to the cmd dir
299 { char * Buf = 0;
300 char TB[1024];
301 long BufSize = 0;
302 int fd;
303 int rd;
304
305 fd = open( QPEEnvFile.latin1(), O_RDONLY );
306 if( fd < 0 ) {
307 fprintf( stderr, "Could not open %s : %d\n",
308 QPEEnvFile.latin1(), errno );
309 return; 333 return;
310 } 334 }
311 335
312 while( (rd = read( fd, TB, sizeof(TB) ) ) > 0 ) { 336 // FI now contains path ProcDir to the cmd dir
313 Buf = (char *)realloc( Buf, BufSize+rd ); 337 { char * Buf = 0;
314 memcpy( Buf+BufSize, TB, rd ); 338 char TB[1024];
315 BufSize += rd; 339 long BufSize = 0;
316 } 340 int fd;
341 int rd;
342
343 fd = open( QPEEnvFile.latin1(), O_RDONLY );
344 if( fd < 0 ) {
345 Log(("Could not open %s : %d\n",
346 QPEEnvFile.latin1(), errno ));
347 return;
348 }
317 349
318 char * Data = Buf; 350 while( (rd = read( fd, TB, sizeof(TB) ) ) > 0 ) {
319 char * DataEnd = Data+BufSize-1; 351 Buf = (char *)realloc( Buf, BufSize+rd );
320 352 memcpy( Buf+BufSize, TB, rd );
321 // get env items out of list 353 BufSize += rd;
322 while( Data < DataEnd ) { 354 }
323 if( strncmp( Data, "LOGNAME=", 8 ) == 0 ) { 355
324 CurrentUser.UserName = Data+8; 356 char * Data = Buf;
325 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 357 char * DataEnd = Data+BufSize-1;
326 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = 358
327 strdup( Data ); 359 // get env items out of list
328 } else if( strncmp( Data, "HOME=", 5 ) == 0 ) { 360 while( Data < DataEnd ) {
329 CurrentUser.HomeDir = Data+5; 361 if( strncmp( Data, "LOGNAME=", 8 ) == 0 ) {
330 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 362 CurrentUser.UserName = Data+8;
331 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = 363 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
332 strdup( Data ); 364 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] =
333 } else { 365 strdup( Data );
334 EnvVar_t * Run = EV; 366 } else if( strncmp( Data, "HOME=", 5 ) == 0 ) {
335 while( Run->Name ) { 367 CurrentUser.HomeDir = Data+5;
336 if( strncmp( Data, Run->Name, Run->Len ) == 0 ) { 368 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
337 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 369 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] =
338 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = 370 strdup( Data );
339 strdup( Data ); 371 } else {
340 break; 372 EnvVar_t * Run = EV;
373 while( Run->Name ) {
374 if( strncmp( Data, Run->Name, Run->Len ) == 0 ) {
375 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
376 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] =
377 strdup( Data );
378 // put OPIEDIR in env
379 if( strcmp( Run->Name, "OPIEDIR=" ) == 0 ) {
380 putenv( CurrentUser.EnvList[CurrentUser.EnvList.size()-1] );
381
382 }
383 break;
384 }
385 Run ++;
341 } 386 }
342 Run ++;
343 } 387 }
344 }
345 388
346 Data += strlen( Data )+1; 389 Data += strlen( Data )+1;
347 } 390 }
348 391
349 free( Buf ); 392 free( Buf );
350 393
351 if( ! CurrentUser.UserName.isEmpty() ) { 394 if( ! CurrentUser.UserName.isEmpty() ) {
352 // find user info 395 // find user info
353 struct passwd pwd; 396 struct passwd pwd;
354 struct passwd * pwdres; 397 struct passwd * pwdres;
355 398
356 if( getpwnam_r( CurrentUser.UserName.latin1(), 399 if( getpwnam_r( CurrentUser.UserName.latin1(),
357 &pwd, TB, sizeof(TB), &pwdres ) || 400 &pwd, TB, sizeof(TB), &pwdres ) ||
358 pwdres == 0 ) { 401 pwdres == 0 ) {
359 fprintf( stderr, "Could not determine user %s : %d\n", 402 Log(("Could not determine user %s : %d\n",
360 CurrentUser.UserName.latin1(), errno ); 403 CurrentUser.UserName.latin1(), errno ));
361 return; 404 return;
405 }
406 CurrentUser.Uid = pwd.pw_uid;
407 CurrentUser.Gid = pwd.pw_gid;
408 } else{
409 CurrentUser.Uid =
410 CurrentUser.Gid = -1;
362 } 411 }
363 CurrentUser.Uid = pwd.pw_uid;
364 CurrentUser.Gid = pwd.pw_gid;
365 } else{
366 CurrentUser.Uid =
367 CurrentUser.Gid = -1;
368 } 412 }
413
414 } else {
415 CurrentUser.UserName = getenv( "LOGNAME" );
416 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
417 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] =
418 strdup( CurrentUser.UserName );
419
420 CurrentUser.HomeDir = getenv( "HOME" );
421 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
422 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] =
423 strdup( CurrentUser.HomeDir );
424
425 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
426 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("USER");
427 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
428 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("LD_LIBRARY_PATH");
429
430 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
431 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("PATH");
432
433 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
434 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("QTDIR");
435
436 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
437 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("OPIEDIR");
438 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
439 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("SHELL");
440
441 CurrentUser.Uid = getuid();
442 CurrentUser.Gid = getgid();
369 } 443 }
370} 444}
diff --git a/noncore/settings/networksettings2/networksettings2/resources.h b/noncore/settings/networksettings2/networksettings2/resources.h
index 3d6a44f..55d2f29 100644
--- a/noncore/settings/networksettings2/networksettings2/resources.h
+++ b/noncore/settings/networksettings2/networksettings2/resources.h
@@ -37,27 +37,31 @@ public :
37typedef QDict<NetNode_t> Name2NetNode_t; 37typedef QDict<NetNode_t> Name2NetNode_t;
38typedef QDict<ANetNodeInstance > Name2Instance_t; 38typedef QDict<ANetNodeInstance > Name2Instance_t;
39typedef QDict<NodeCollection> Name2Connection_t; 39typedef QDict<NodeCollection> Name2Connection_t;
40typedef QDict<SystemFile> Name2SystemFile_t; 40typedef QDict<SystemFile> Name2SystemFile_t;
41 41
42class TheNSResources { 42class TheNSResources {
43 43
44public : 44public :
45 45
46 TheNSResources( void ); 46 TheNSResources( void );
47 ~TheNSResources( ); 47 ~TheNSResources( );
48 48
49 // give busy feedback
50 void busy( bool B );
51
49 System & system() 52 System & system()
50 { return *TheSystem; } 53 { return *TheSystem; }
51 54
55 int assignConnectionNumber(void);
52 QPixmap getPixmap( const QString & Name ); 56 QPixmap getPixmap( const QString & Name );
53 57
54 Name2NetNode_t & netNodes( void ) 58 Name2NetNode_t & netNodes( void )
55 { return AllNodeTypes; } 59 { return AllNodeTypes; }
56 bool netNodeExists( const QString & X ) 60 bool netNodeExists( const QString & X )
57 { return AllNodeTypes.find(X)!=0; } 61 { return AllNodeTypes.find(X)!=0; }
58 ANetNode * findNetNode( const QString & N ) 62 ANetNode * findNetNode( const QString & N )
59 { NetNode_t * NNT = AllNodeTypes.find(N); 63 { NetNode_t * NNT = AllNodeTypes.find(N);
60 return (NNT) ? NNT->NetNode : 0; 64 return (NNT) ? NNT->NetNode : 0;
61 } 65 }
62 66
63 Name2SystemFile_t & systemFiles( void ) 67 Name2SystemFile_t & systemFiles( void )
@@ -79,25 +83,24 @@ public :
79 Name2Instance_t & netNodeInstances( void ) 83 Name2Instance_t & netNodeInstances( void )
80 { return AllNodes; } 84 { return AllNodes; }
81 void addNodeInstance( ANetNodeInstance * I ) 85 void addNodeInstance( ANetNodeInstance * I )
82 { AllNodes.insert( I->name(), I ); } 86 { AllNodes.insert( I->name(), I ); }
83 void removeNodeInstance( const QString & N ) 87 void removeNodeInstance( const QString & N )
84 { AllNodes.remove( N );} 88 { AllNodes.remove( N );}
85 ANetNodeInstance * findNodeInstance( const QString & S ) 89 ANetNodeInstance * findNodeInstance( const QString & S )
86 { return (AllNodes.find(S)!=0) ? AllNodes[S] : 0; } 90 { return (AllNodes.find(S)!=0) ? AllNodes[S] : 0; }
87 91
88 const QString & netNode2Name( const char * Type ); 92 const QString & netNode2Name( const char * Type );
89 const QString & netNode2Description( const char * Type ); 93 const QString & netNode2Description( const char * Type );
90 94
91 void renumberConnections( void );
92 void addConnection( NodeCollection * NC ); 95 void addConnection( NodeCollection * NC );
93 void removeConnection( const QString & N ); 96 void removeConnection( const QString & N );
94 NodeCollection * findConnection( const QString & N ); 97 NodeCollection * findConnection( const QString & N );
95 Name2Connection_t & connections( void ) 98 Name2Connection_t & connections( void )
96 { return ConnectionsMap; } 99 { return ConnectionsMap; }
97 100
98 CurrentQPEUser & currentUser( void ) 101 CurrentQPEUser & currentUser( void )
99 { return CurrentUser; } 102 { return CurrentUser; }
100 103
101private : 104private :
102 105
103 void detectCurrentUser( void ); 106 void detectCurrentUser( void );
@@ -110,19 +113,19 @@ private :
110 QMap< QString, QString> NodeTypeNameMap; 113 QMap< QString, QString> NodeTypeNameMap;
111 QMap< QString, QString> NodeTypeDescriptionMap; 114 QMap< QString, QString> NodeTypeDescriptionMap;
112 Name2Connection_t ConnectionsMap; 115 Name2Connection_t ConnectionsMap;
113 System * TheSystem; 116 System * TheSystem;
114 Name2SystemFile_t SystemFiles; 117 Name2SystemFile_t SystemFiles;
115 118
116 // all node type classes 119 // all node type classes
117 Name2NetNode_t AllNodeTypes; 120 Name2NetNode_t AllNodeTypes;
118 121
119 // all nodes 122 // all nodes
120 Name2Instance_t AllNodes; 123 Name2Instance_t AllNodes;
121 124
122 CurrentQPEUser CurrentUser; 125 CurrentQPEUser CurrentUser;
123}; 126};
124 127
125extern TheNSResources * _NSResources; 128extern TheNSResources * _NSResources;
126#define NSResources _NSResources 129#define NSResources _NSResources
127 130
128#endif 131#endif
diff --git a/noncore/settings/networksettings2/networksettings2/system.cpp b/noncore/settings/networksettings2/networksettings2/system.cpp
index 2133d34..a579396 100644
--- a/noncore/settings/networksettings2/networksettings2/system.cpp
+++ b/noncore/settings/networksettings2/networksettings2/system.cpp
@@ -1,88 +1,115 @@
1#include <sys/types.h> 1#include <sys/types.h>
2#include <sys/wait.h> 2#include <sys/wait.h>
3 3
4#include <net/if.h> 4#include <net/if.h>
5#include <net/if_arp.h> 5#include <net/if_arp.h>
6#include <netinet/in.h> 6#include <netinet/in.h>
7#include <arpa/inet.h> 7#include <arpa/inet.h>
8#include <sys/ioctl.h> 8#include <sys/ioctl.h>
9#include <sys/socket.h> 9#include <sys/socket.h>
10#include <stdlib.h> 10#include <stdlib.h>
11#include <stdio.h>
11#include <fcntl.h> 12#include <fcntl.h>
12#include <errno.h> 13#include <errno.h>
13#include <unistd.h> 14#include <unistd.h>
14 15
15#include <qdir.h> 16#include <qdir.h>
16#include <qregexp.h> 17#include <qregexp.h>
17#include <qstringlist.h> 18#include <qstringlist.h>
18#include <qfile.h> 19#include <qfile.h>
19#include <qtextstream.h> 20#include <qtextstream.h>
21#include <qapplication.h>
20 22
21#include "resources.h" 23#include "resources.h"
22#include "system.h" 24#include "system.h"
23 25
24#define PROCNETDEV "/proc/net/dev" 26#define PROCNETDEV "/proc/net/dev"
25 27
26static char Dig2Hex[] = { 28static char Dig2Hex[] = {
27 '0', '1', '2', '3', 29 '0', '1', '2', '3',
28 '4', '5', '6', '7', 30 '4', '5', '6', '7',
29 '8', '9', 'A', 'B', 31 '8', '9', 'A', 'B',
30 'C', 'D', 'E', 'F' 32 'C', 'D', 'E', 'F'
31}; 33};
32 34
33// get HIGH nibble of byte 35// get HIGH nibble of byte
34#define HN(x) Dig2Hex[(((x)&0xf0)>>4)] 36#define HN(x) Dig2Hex[(((x)&0xf0)>>4)]
35// get LOW nibble of byte 37// get LOW nibble of byte
36#define LN(x) Dig2Hex[((x)&0x0f)] 38#define LN(x) Dig2Hex[((x)&0x0f)]
37 39
38System::System( void ) : ProbedInterfaces() { 40System::System( void ) : QObject(), ProbedInterfaces() {
39 probeInterfaces(); 41 probeInterfaces();
40} 42}
41 43
42System::~System( void ) { 44System::~System( void ) {
43 if( ProcDevNet ) 45 if( ProcDevNet )
44 delete ProcDevNet; 46 delete ProcDevNet;
45} 47}
46 48
47int System::runAsRoot( const QString & S ) { 49int System::runAsRoot( const QString & S ) {
48 QString MyS = S; 50 QString MyS = S;
49 char * usr = getenv("USER"); 51 char * usr = getenv("USER");
50 int rv; 52 char ch;
51 53
52 if( S.isEmpty() ) { 54 if( S.isEmpty() ) {
53 // loophole to start shell 55 // loophole to start shell
54 return 8888; 56 return 8888;
55 } 57 }
56 if( usr == 0 || strcmp( usr, "root" ) ) { 58 if( usr == 0 || strcmp( usr, "root" ) ) {
57 // unknown or non-root user -> use SUDO 59 // unknown or non-root user -> use SUDO
58 MyS.prepend( "sudo " ); 60 MyS.prepend( "sudo " );
59 } 61 }
60 62
61 fprintf( stderr, "Executing %s\n", MyS.latin1() ); 63 Log(("Executing %s\n", MyS.latin1() ));
62 64
63 rv = system( MyS.latin1() ) ; 65 emit lineFromCommand( tr("Command : ") + MyS );
64 switch( rv ) { 66 emit lineFromCommand( "---------------" );
65 case -1 : 67 Log(( "Command : %s\n", MyS.latin1() ) );
66 // cannot fork 68 MyS += " 2>&1 ";
67 return 1; 69 OutputOfCmd = popen( MyS.latin1(), "r" ) ;
68 case 127 : 70 if( ! OutputOfCmd ) {
69 // cannot start shell 71 // cannot fork
70 return 2; 72 return 1;
71 default : 73 }
72 if( WEXITSTATUS(rv) != 0 ) { 74
73 // error in command 75 // read all data
74 return 3; 76 QString Line = "";
77 while( 1 ) {
78 if( fread( &ch, 1, 1, OutputOfCmd ) < 1 )
79 // eof
80 break;
81 if( ch == '\n' || ch == '\r' ) {
82 if( ! Line.isEmpty() ) {
83 Log(( "read cmd output : **%s**\n", Line.latin1() ) );
84 emit lineFromCommand( Line );
85 Line = "";
86 qApp->processEvents();
75 } 87 }
88 } else {
89 Line += ch;
90 }
91 }
92
93 if( ! Line.isEmpty() ) {
94 emit lineFromCommand( Line );
95 Log(( "read cmd output : **%s**\n", Line.latin1() ) );
96 }
97 Log(( "End of command\n", Line.latin1() ) );
98
99 if( pclose( OutputOfCmd ) < 0 ) {
100 // error in command
101 return 3;
76 } 102 }
103
77 // all is fine 104 // all is fine
78 return 0; 105 return 0;
79} 106}
80 107
81void System::refreshStatistics( InterfaceInfo & I ) { 108void System::refreshStatistics( InterfaceInfo & I ) {
82 if( ! ProcDevNet ) { 109 if( ! ProcDevNet ) {
83 return; 110 return;
84 } 111 }
85 // cannot seek on dev 112 // cannot seek on dev
86 ProcDevNet->close(); 113 ProcDevNet->close();
87 ProcDevNet->open( IO_ReadOnly ); 114 ProcDevNet->open( IO_ReadOnly );
88 115
@@ -189,25 +216,25 @@ void System::probeInterfaces( void ) {
189 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) { 216 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) {
190 if((loc = line.find(":")) == -1) { 217 if((loc = line.find(":")) == -1) {
191 continue; 218 continue;
192 } 219 }
193 220
194 NicName = line.left(loc); 221 NicName = line.left(loc);
195 222
196 // set name for ioctl 223 // set name for ioctl
197 strcpy( ifrs.ifr_name, NicName.latin1() ); 224 strcpy( ifrs.ifr_name, NicName.latin1() );
198 225
199 if ( ! ( IFI = ProbedInterfaces.find( NicName ) ) ) { 226 if ( ! ( IFI = ProbedInterfaces.find( NicName ) ) ) {
200 // new nic 227 // new nic
201 fprintf( stderr, "NEWNIC %s\n", NicName.latin1()); 228 Log(("NEWNIC %s\n", NicName.latin1()));
202 IFI = new InterfaceInfo; 229 IFI = new InterfaceInfo;
203 IFI->Name = line.left(loc); 230 IFI->Name = line.left(loc);
204 IFI->NetNode = 0; 231 IFI->NetNode = 0;
205 ProbedInterfaces.insert( IFI->Name, IFI ); 232 ProbedInterfaces.insert( IFI->Name, IFI );
206 233
207 // get dynamic info 234 // get dynamic info
208 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) { 235 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) {
209 IFI->IsPointToPoint = ((ifrs.ifr_flags & IFF_POINTOPOINT) == IFF_POINTOPOINT); 236 IFI->IsPointToPoint = ((ifrs.ifr_flags & IFF_POINTOPOINT) == IFF_POINTOPOINT);
210 } else { 237 } else {
211 IFI->IsPointToPoint = 0; 238 IFI->IsPointToPoint = 0;
212 } 239 }
213 240
@@ -216,26 +243,26 @@ void System::probeInterfaces( void ) {
216 243
217 if( IFI->IsPointToPoint ) { 244 if( IFI->IsPointToPoint ) {
218 if( ioctl(sockfd, SIOCGIFDSTADDR, &ifrs) >= 0 ) { 245 if( ioctl(sockfd, SIOCGIFDSTADDR, &ifrs) >= 0 ) {
219 IFI->DstAddress = 246 IFI->DstAddress =
220 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_dstaddr)->sin_addr); 247 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_dstaddr)->sin_addr);
221 } 248 }
222 } 249 }
223 250
224 IFI->CardType = 999999; 251 IFI->CardType = 999999;
225 IFI->MACAddress = ""; 252 IFI->MACAddress = "";
226 253
227 if( ioctl(sockfd, SIOCGIFHWADDR, &ifrs) >= 0 ) { 254 if( ioctl(sockfd, SIOCGIFHWADDR, &ifrs) >= 0 ) {
228 fprintf( stderr, "%s = %d\n", IFI->Name.latin1(), 255 Log(("%s = %d\n", IFI->Name.latin1(),
229 ifrs.ifr_hwaddr.sa_family ); 256 ifrs.ifr_hwaddr.sa_family ));
230 257
231 IFI->CardType = ifrs.ifr_hwaddr.sa_family; 258 IFI->CardType = ifrs.ifr_hwaddr.sa_family;
232 switch( ifrs.ifr_hwaddr.sa_family ) { 259 switch( ifrs.ifr_hwaddr.sa_family ) {
233 case ARPHRD_ETHER : // regular MAC address 260 case ARPHRD_ETHER : // regular MAC address
234 // valid address -> convert to regular ::: format 261 // valid address -> convert to regular ::: format
235 // length = 6 bytes = 12 DIGITS -> 6 : 262 // length = 6 bytes = 12 DIGITS -> 6 :
236 IFI->MACAddress.sprintf( 263 IFI->MACAddress.sprintf(
237 "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c", 264 "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c",
238 HN( ifrs.ifr_hwaddr.sa_data[0] ), 265 HN( ifrs.ifr_hwaddr.sa_data[0] ),
239 LN( ifrs.ifr_hwaddr.sa_data[0] ), 266 LN( ifrs.ifr_hwaddr.sa_data[0] ),
240 HN( ifrs.ifr_hwaddr.sa_data[1] ), 267 HN( ifrs.ifr_hwaddr.sa_data[1] ),
241 LN( ifrs.ifr_hwaddr.sa_data[1] ), 268 LN( ifrs.ifr_hwaddr.sa_data[1] ),
@@ -284,25 +311,25 @@ void System::probeInterfaces( void ) {
284 ); 311 );
285 break; 312 break;
286#endif 313#endif
287 case ARPHRD_PPP : // PPP 314 case ARPHRD_PPP : // PPP
288 break; 315 break;
289 case ARPHRD_IEEE80211 : // WLAN 316 case ARPHRD_IEEE80211 : // WLAN
290 break; 317 break;
291 case ARPHRD_IRDA : // IRDA 318 case ARPHRD_IRDA : // IRDA
292 break; 319 break;
293 } 320 }
294 } 321 }
295 } else // else already probed before -> just update 322 } else // else already probed before -> just update
296 fprintf( stderr, "OLDNIC %s\n", NicName.latin1()); 323 Log(("OLDNIC %s\n", NicName.latin1()));
297 324
298 // get dynamic info 325 // get dynamic info
299 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) { 326 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) {
300 IFI->IsUp = ((ifrs.ifr_flags & IFF_UP) == IFF_UP); 327 IFI->IsUp = ((ifrs.ifr_flags & IFF_UP) == IFF_UP);
301 IFI->HasMulticast = ((ifrs.ifr_flags & IFF_MULTICAST) == IFF_MULTICAST); 328 IFI->HasMulticast = ((ifrs.ifr_flags & IFF_MULTICAST) == IFF_MULTICAST);
302 } else { 329 } else {
303 IFI->IsUp = 0; 330 IFI->IsUp = 0;
304 IFI->HasMulticast = 0; 331 IFI->HasMulticast = 0;
305 } 332 }
306 333
307 if( ioctl(sockfd, SIOCGIFADDR, &ifrs) >= 0 ) { 334 if( ioctl(sockfd, SIOCGIFADDR, &ifrs) >= 0 ) {
308 IFI->Address = 335 IFI->Address =
@@ -314,42 +341,77 @@ void System::probeInterfaces( void ) {
314 if( ioctl(sockfd, SIOCGIFBRDADDR, &ifrs) >= 0 ) { 341 if( ioctl(sockfd, SIOCGIFBRDADDR, &ifrs) >= 0 ) {
315 IFI->BCastAddress = 342 IFI->BCastAddress =
316 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_broadaddr)->sin_addr); 343 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_broadaddr)->sin_addr);
317 } else { 344 } else {
318 IFI->BCastAddress = ""; 345 IFI->BCastAddress = "";
319 } 346 }
320 if( ioctl(sockfd, SIOCGIFNETMASK, &ifrs) >= 0 ) { 347 if( ioctl(sockfd, SIOCGIFNETMASK, &ifrs) >= 0 ) {
321 IFI->Netmask = 348 IFI->Netmask =
322 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_netmask)->sin_addr); 349 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_netmask)->sin_addr);
323 } else { 350 } else {
324 IFI->Netmask = ""; 351 IFI->Netmask = "";
325 } 352 }
326 fprintf( stderr, "NIC %s UP %d\n", NicName.latin1(), IFI->IsUp ); 353 Log(("NIC %s UP %d\n", NicName.latin1(), IFI->IsUp ));
327 } 354 }
328} 355}
329 356
330void System::execAsUser( QString & Cmd, char * argv[] ) { 357void System::execAsUser( QString & Cmd, char * argv[] ) {
331 CurrentQPEUser CU = NSResources->currentUser(); 358 CurrentQPEUser CU = NSResources->currentUser();
332 359
333 if( CU.UserName.isEmpty() ) { 360 if( CU.UserName.isEmpty() ) {
334 // if we come here, the exec was not successfull 361 // if we come here, the exec was not successfull
335 fprintf( stderr, "User not known \n" ); 362 Log(("User not known \n" ));
336 return; 363 return;
337 } 364 }
338 365
339 // now we are ready to exec the requested command 366 // now we are ready to exec the requested command
340 setuid( CU.Uid ); 367 setuid( CU.Uid );
341 setgid( CU.Gid ); 368 setgid( CU.Gid );
342 369
343 char ** envp = (char **)alloca( sizeof( char *) * 370 char ** envp = (char **)alloca( sizeof( char *) *
344 (CU.EnvList.count()+1) ); 371 (CU.EnvList.count()+1) );
345 372
346 for( unsigned int i = 0 ; i < CU.EnvList.count() ; i ++ ) { 373 for( unsigned int i = 0 ; i < CU.EnvList.count() ; i ++ ) {
347 *(envp+i) = CU.EnvList[i]; 374 *(envp+i) = CU.EnvList[i];
348 } 375 }
349 envp[CU.EnvList.count()]=NULL; 376 envp[CU.EnvList.count()]=NULL;
350 377
351 execve( Cmd.latin1(), argv, envp ); 378 execve( Cmd.latin1(), argv, envp );
352 379
353 // if we come here, the exec was not successfull 380 // if we come here, the exec was not successfull
354 fprintf( stderr, "Could not exec : %d\n", errno ); 381 Log(("Could not exec : %d\n", errno ));
382}
383
384#include <stdarg.h>
385static FILE * logf = 0;
386
387void VLog( char * Format, ... ) {
388 va_list l;
389
390 va_start(l, Format );
391
392 if( logf == (FILE *)0 ) {
393 // logf = fopen( "/tmp/ns2log", "a" );
394 logf = stderr;
395 if( ! logf ) {
396 fprintf( stderr, "Cannot open logfile /tmp/ns2log %d\n",
397 errno );
398 logf = (FILE *)1;
399 } else {
400 fprintf( logf, "____ OPEN LOGFILE ____\n");
401 }
402 }
403
404 if( (long)logf > 1 ) {
405 vfprintf( logf, Format, l );
406 }
407 va_end( l );
408
409}
410
411void LogClose( void ) {
412 if( (long)logf > 1 ) {
413 fprintf( logf, "____ CLOSE LOGFILE ____\n");
414 fclose( logf );
415 logf = 0;
416 }
355} 417}
diff --git a/noncore/settings/networksettings2/networksettings2/system.h b/noncore/settings/networksettings2/networksettings2/system.h
index 96ee9bd..33af391 100644
--- a/noncore/settings/networksettings2/networksettings2/system.h
+++ b/noncore/settings/networksettings2/networksettings2/system.h
@@ -1,18 +1,20 @@
1#ifndef __SYSTEM__H 1#ifndef __SYSTEM__H
2#define __SYSTEM__H 2#define __SYSTEM__H
3 3
4// for hardware types 4// for hardware types
5#include <net/if_arp.h> 5#include <net/if_arp.h>
6#include <qdict.h> 6#include <qdict.h>
7#include <qobject.h>
8#include <stdio.h>
7 9
8class ANetNodeInstance; 10class ANetNodeInstance;
9class QFile; 11class QFile;
10 12
11class InterfaceInfo { 13class InterfaceInfo {
12 14
13public : 15public :
14 16
15 InterfaceInfo() : 17 InterfaceInfo() :
16 Name(), 18 Name(),
17 MACAddress(), 19 MACAddress(),
18 BCastAddress(), 20 BCastAddress(),
@@ -38,44 +40,51 @@ public :
38 bool HasMulticast; // Supports Multicast 40 bool HasMulticast; // Supports Multicast
39 bool IsPointToPoint; // IsPointToPoint card 41 bool IsPointToPoint; // IsPointToPoint card
40 42
41 QString RcvBytes; 43 QString RcvBytes;
42 QString SndBytes; 44 QString SndBytes;
43 QString RcvErrors; 45 QString RcvErrors;
44 QString SndErrors; 46 QString SndErrors;
45 QString RcvDropped; 47 QString RcvDropped;
46 QString SndDropped; 48 QString SndDropped;
47 QString Collisions; 49 QString Collisions;
48}; 50};
49 51
50class System { 52class System : public QObject {
53
54 Q_OBJECT
51 55
52public : 56public :
53 57
54 System( void ); 58 System( void );
55 ~System( void ); 59 ~System( void );
56 60
57 QDict<InterfaceInfo> & interfaces( void ) 61 QDict<InterfaceInfo> & interfaces( void )
58 { return ProbedInterfaces; } 62 { return ProbedInterfaces; }
59 InterfaceInfo * interface( const QString& N ) 63 InterfaceInfo * interface( const QString& N )
60 { return ProbedInterfaces[N]; } 64 { return ProbedInterfaces[N]; }
61 65
62 // exec command as root 66 // exec command as root
63 int runAsRoot( const QString & S ); 67 int runAsRoot( const QString & S );
64 68
65 // exec command as user 69 // exec command as user
66 void execAsUser( QString & Cmd, char * argv[] ); 70 void execAsUser( QString & Cmd, char * argv[] );
67 71
68 // refresh stats for this interface 72 // refresh stats for this interface
69 void refreshStatistics( InterfaceInfo & ); 73 void refreshStatistics( InterfaceInfo & );
70 74
71 // reloads interfaces 75 // reloads interfaces
72 void probeInterfaces( void ); 76 void probeInterfaces( void );
73 77
78signals :
79
80 void lineFromCommand( const QString & S );
81
74private : 82private :
75 83
76 QDict<InterfaceInfo> ProbedInterfaces; 84 QDict<InterfaceInfo> ProbedInterfaces;
85 FILE * OutputOfCmd;
77 QFile * ProcDevNet; 86 QFile * ProcDevNet;
78 87
79}; 88};
80 89
81#endif 90#endif
diff --git a/noncore/settings/networksettings2/networksettingsGUI.ui b/noncore/settings/networksettings2/networksettingsGUI.ui
index 7ef2f64..6ed29f3 100644
--- a/noncore/settings/networksettings2/networksettingsGUI.ui
+++ b/noncore/settings/networksettings2/networksettingsGUI.ui
@@ -2,42 +2,42 @@
2<class>NetworkSettingsGUI</class> 2<class>NetworkSettingsGUI</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>NetworkSettingsGUI</cstring> 7 <cstring>NetworkSettingsGUI</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>160</width> 14 <width>144</width>
15 <height>260</height> 15 <height>260</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Network Settings</string> 20 <string>Network Settings</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
27 </property> 27 </property>
28 <vbox> 28 <vbox>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>0</number> 31 <number>2</number>
32 </property> 32 </property>
33 <property stdset="1"> 33 <property stdset="1">
34 <name>spacing</name> 34 <name>spacing</name>
35 <number>2</number> 35 <number>2</number>
36 </property> 36 </property>
37 <widget> 37 <widget>
38 <class>QFrame</class> 38 <class>QFrame</class>
39 <property stdset="1"> 39 <property stdset="1">
40 <name>name</name> 40 <name>name</name>
41 <cstring>Frame4</cstring> 41 <cstring>Frame4</cstring>
42 </property> 42 </property>
43 <property stdset="1"> 43 <property stdset="1">
@@ -293,88 +293,24 @@
293 <name>layoutSpacing</name> 293 <name>layoutSpacing</name>
294 </property> 294 </property>
295 <vbox> 295 <vbox>
296 <property stdset="1"> 296 <property stdset="1">
297 <name>margin</name> 297 <name>margin</name>
298 <number>4</number> 298 <number>4</number>
299 </property> 299 </property>
300 <property stdset="1"> 300 <property stdset="1">
301 <name>spacing</name> 301 <name>spacing</name>
302 <number>2</number> 302 <number>2</number>
303 </property> 303 </property>
304 <widget> 304 <widget>
305 <class>QLayoutWidget</class>
306 <property stdset="1">
307 <name>name</name>
308 <cstring>Layout3</cstring>
309 </property>
310 <hbox>
311 <property stdset="1">
312 <name>margin</name>
313 <number>0</number>
314 </property>
315 <property stdset="1">
316 <name>spacing</name>
317 <number>6</number>
318 </property>
319 <widget>
320 <class>QLabel</class>
321 <property stdset="1">
322 <name>name</name>
323 <cstring>TextLabel2_2</cstring>
324 </property>
325 <property stdset="1">
326 <name>text</name>
327 <string>State</string>
328 </property>
329 </widget>
330 <widget>
331 <class>QLabel</class>
332 <property stdset="1">
333 <name>name</name>
334 <cstring>State_LBL</cstring>
335 </property>
336 <property stdset="1">
337 <name>text</name>
338 <string>State</string>
339 </property>
340 <property stdset="1">
341 <name>indent</name>
342 <number>0</number>
343 </property>
344 </widget>
345 <spacer>
346 <property>
347 <name>name</name>
348 <cstring>Spacer6_2</cstring>
349 </property>
350 <property stdset="1">
351 <name>orientation</name>
352 <enum>Horizontal</enum>
353 </property>
354 <property stdset="1">
355 <name>sizeType</name>
356 <enum>Expanding</enum>
357 </property>
358 <property>
359 <name>sizeHint</name>
360 <size>
361 <width>20</width>
362 <height>20</height>
363 </size>
364 </property>
365 </spacer>
366 </hbox>
367 </widget>
368 <widget>
369 <class>QLabel</class> 305 <class>QLabel</class>
370 <property stdset="1"> 306 <property stdset="1">
371 <name>name</name> 307 <name>name</name>
372 <cstring>Description_LBL</cstring> 308 <cstring>Description_LBL</cstring>
373 </property> 309 </property>
374 <property stdset="1"> 310 <property stdset="1">
375 <name>sizePolicy</name> 311 <name>sizePolicy</name>
376 <sizepolicy> 312 <sizepolicy>
377 <hsizetype>5</hsizetype> 313 <hsizetype>5</hsizetype>
378 <vsizetype>7</vsizetype> 314 <vsizetype>7</vsizetype>
379 </sizepolicy> 315 </sizepolicy>
380 </property> 316 </property>
@@ -476,25 +412,25 @@
476 <property stdset="1"> 412 <property stdset="1">
477 <name>margin</name> 413 <name>margin</name>
478 <number>4</number> 414 <number>4</number>
479 </property> 415 </property>
480 <property stdset="1"> 416 <property stdset="1">
481 <name>spacing</name> 417 <name>spacing</name>
482 <number>2</number> 418 <number>2</number>
483 </property> 419 </property>
484 <widget> 420 <widget>
485 <class>QListBox</class> 421 <class>QListBox</class>
486 <property stdset="1"> 422 <property stdset="1">
487 <name>name</name> 423 <name>name</name>
488 <cstring>Mesages_LB</cstring> 424 <cstring>Messages_LB</cstring>
489 </property> 425 </property>
490 </widget> 426 </widget>
491 <widget> 427 <widget>
492 <class>QLayoutWidget</class> 428 <class>QLayoutWidget</class>
493 <property stdset="1"> 429 <property stdset="1">
494 <name>name</name> 430 <name>name</name>
495 <cstring>Layout2</cstring> 431 <cstring>Layout2</cstring>
496 </property> 432 </property>
497 <hbox> 433 <hbox>
498 <property stdset="1"> 434 <property stdset="1">
499 <name>margin</name> 435 <name>margin</name>
500 <number>0</number> 436 <number>0</number>
@@ -605,24 +541,30 @@
605 <connection> 541 <connection>
606 <sender>ToProfile_BUT</sender> 542 <sender>ToProfile_BUT</sender>
607 <signal>clicked()</signal> 543 <signal>clicked()</signal>
608 <receiver>NetworkSettingsGUI</receiver> 544 <receiver>NetworkSettingsGUI</receiver>
609 <slot>SLOT_ToProfile()</slot> 545 <slot>SLOT_ToProfile()</slot>
610 </connection> 546 </connection>
611 <connection> 547 <connection>
612 <sender>ToMessages_BUT</sender> 548 <sender>ToMessages_BUT</sender>
613 <signal>clicked()</signal> 549 <signal>clicked()</signal>
614 <receiver>NetworkSettingsGUI</receiver> 550 <receiver>NetworkSettingsGUI</receiver>
615 <slot>SLOT_ToMessages()</slot> 551 <slot>SLOT_ToMessages()</slot>
616 </connection> 552 </connection>
553 <connection>
554 <sender>Disconnect_TB</sender>
555 <signal>clicked()</signal>
556 <receiver>NetworkSettingsGUI</receiver>
557 <slot>SLOT_Disconnect()</slot>
558 </connection>
617 <slot access="public">SLOT_AddNode()</slot> 559 <slot access="public">SLOT_AddNode()</slot>
618 <slot access="public">SLOT_CheckState()</slot> 560 <slot access="public">SLOT_CheckState()</slot>
619 <slot access="public">SLOT_Connect()</slot> 561 <slot access="public">SLOT_Connect()</slot>
620 <slot access="public">SLOT_DeleteNode()</slot> 562 <slot access="public">SLOT_DeleteNode()</slot>
621 <slot access="public">SLOT_EditNode( QListBoxItem *)</slot> 563 <slot access="public">SLOT_EditNode( QListBoxItem *)</slot>
622 <slot access="public">SLOT_Enable()</slot> 564 <slot access="public">SLOT_Enable()</slot>
623 <slot access="public">SLOT_GenerateConfig()</slot> 565 <slot access="public">SLOT_GenerateConfig()</slot>
624 <slot access="public">SLOT_On()</slot> 566 <slot access="public">SLOT_On()</slot>
625 <slot access="public">SLOT_ShowNode( QListBoxItem*)</slot> 567 <slot access="public">SLOT_ShowNode( QListBoxItem*)</slot>
626 <slot access="public">SLOT_ToMessages()</slot> 568 <slot access="public">SLOT_ToMessages()</slot>
627 <slot access="public">SLOT_ToProfile()</slot> 569 <slot access="public">SLOT_ToProfile()</slot>
628 <slot access="public">SLOT_Disconnect()</slot> 570 <slot access="public">SLOT_Disconnect()</slot>
diff --git a/noncore/settings/networksettings2/nsdata.cpp b/noncore/settings/networksettings2/nsdata.cpp
index bb37f10..3b17548 100644
--- a/noncore/settings/networksettings2/nsdata.cpp
+++ b/noncore/settings/networksettings2/nsdata.cpp
@@ -8,25 +8,25 @@
8#include "nsdata.h" 8#include "nsdata.h"
9#include <asdevice.h> 9#include <asdevice.h>
10#include <resources.h> 10#include <resources.h>
11 11
12static QString CfgFile; 12static QString CfgFile;
13 13
14NetworkSettingsData::NetworkSettingsData( void ) { 14NetworkSettingsData::NetworkSettingsData( void ) {
15 // init global resources structure 15 // init global resources structure
16 new TheNSResources(); 16 new TheNSResources();
17 17
18 CfgFile.sprintf( "%s/Settings/NS2.conf", 18 CfgFile.sprintf( "%s/Settings/NS2.conf",
19 NSResources->currentUser().HomeDir.latin1() ); 19 NSResources->currentUser().HomeDir.latin1() );
20 fprintf( stderr, "Cfg from %s\n", CfgFile.latin1() ); 20 Log(( "Cfg from %s\n", CfgFile.latin1() ));
21 21
22 // load settings 22 // load settings
23 Force = 0; 23 Force = 0;
24 IsModified = 0; 24 IsModified = 0;
25 loadSettings(); 25 loadSettings();
26} 26}
27 27
28// saving is done by caller 28// saving is done by caller
29NetworkSettingsData::~NetworkSettingsData( void ) { 29NetworkSettingsData::~NetworkSettingsData( void ) {
30 delete NSResources; 30 delete NSResources;
31} 31}
32 32
@@ -70,29 +70,29 @@ void NetworkSettingsData::loadSettings( void ) {
70 if( S == "connection" ) { 70 if( S == "connection" ) {
71 // load connections -> collections of nodes 71 // load connections -> collections of nodes
72 NodeCollection * NC = new NodeCollection( TS ); 72 NodeCollection * NC = new NodeCollection( TS );
73 NSResources->addConnection( NC ); 73 NSResources->addConnection( NC );
74 } else { 74 } else {
75 ANetNode * NN = 0; 75 ANetNode * NN = 0;
76 ANetNodeInstance* NNI = 0; 76 ANetNodeInstance* NNI = 0;
77 if( S.startsWith( "nodetype " ) ) { 77 if( S.startsWith( "nodetype " ) ) {
78 S = S.mid( 9, S.length()-9 ); 78 S = S.mid( 9, S.length()-9 );
79 S = deQuote(S); 79 S = deQuote(S);
80 // try to find netnode 80 // try to find netnode
81 NN = NSResources->findNetNode( S ); 81 NN = NSResources->findNetNode( S );
82 fprintf( stderr, "Node %s : %p\n", S.latin1(), NN ); 82 Log( ( "Node %s : %p\n", S.latin1(), NN ) );
83 } else { 83 } else {
84 // try to find instance 84 // try to find instance
85 NNI = NSResources->createNodeInstance( S ); 85 NNI = NSResources->createNodeInstance( S );
86 fprintf( stderr, "NodeInstance %s : %p\n", S.latin1(), NNI ); 86 Log( ( "NodeInstance %s : %p\n", S.latin1(), NNI ));
87 } 87 }
88 88
89 if( NN == 0 && NNI == 0 ) { 89 if( NN == 0 && NNI == 0 ) {
90 LeftOvers.append( Line ); 90 LeftOvers.append( Line );
91 } 91 }
92 92
93 do { 93 do {
94 S = Line = TS.readLine(); 94 S = Line = TS.readLine();
95 95
96 if( NN || NNI ) { 96 if( NN || NNI ) {
97 if( S.isEmpty() ) { 97 if( S.isEmpty() ) {
98 // empty line 98 // empty line
@@ -142,25 +142,25 @@ void NetworkSettingsData::loadSettings( void ) {
142 142
143} 143}
144 144
145QString NetworkSettingsData::saveSettings( void ) { 145QString NetworkSettingsData::saveSettings( void ) {
146 QString ErrS = ""; 146 QString ErrS = "";
147 147
148 if( ! isModified() ) 148 if( ! isModified() )
149 return ErrS; 149 return ErrS;
150 150
151 QString S; 151 QString S;
152 QFile F( CfgFile + ".bup" ); 152 QFile F( CfgFile + ".bup" );
153 153
154 printf( "Saving settings to %s\n", CfgFile.latin1() ); 154 Log( ( "Saving settings to %s\n", CfgFile.latin1() ));
155 if( ! F.open( IO_WriteOnly | IO_Truncate ) ) { 155 if( ! F.open( IO_WriteOnly | IO_Truncate ) ) {
156 ErrS = qApp->translate( "NetworkSettings", 156 ErrS = qApp->translate( "NetworkSettings",
157 "<p>Could not save setup to \"%1\" !</p>" ). 157 "<p>Could not save setup to \"%1\" !</p>" ).
158 arg(CfgFile); 158 arg(CfgFile);
159 // problem 159 // problem
160 return ErrS; 160 return ErrS;
161 } 161 }
162 162
163 QTextStream TS( &F ); 163 QTextStream TS( &F );
164 164
165 // save leftovers 165 // save leftovers
166 for ( QStringList::Iterator it = LeftOvers.begin(); 166 for ( QStringList::Iterator it = LeftOvers.begin();
@@ -220,25 +220,25 @@ QString NetworkSettingsData::saveSettings( void ) {
220 220
221QString NetworkSettingsData::generateSettings( bool ForceReq ) { 221QString NetworkSettingsData::generateSettings( bool ForceReq ) {
222 bool ForceIt; 222 bool ForceIt;
223 QString S = ""; 223 QString S = "";
224 224
225 // include own force flag 225 // include own force flag
226 ForceIt = (Force) ? 1 : ForceReq; 226 ForceIt = (Force) ? 1 : ForceReq;
227 227
228 if( ! ForceIt && ! isModified() ) 228 if( ! ForceIt && ! isModified() )
229 return S; 229 return S;
230 230
231 // regenerate system files 231 // regenerate system files
232 fprintf( stderr, "Generating settings from %s\n", CfgFile.latin1() ); 232 Log( ( "Generating settings from %s\n", CfgFile.latin1() ));
233 233
234 { Name2SystemFile_t & SFM = NSResources->systemFiles(); 234 { Name2SystemFile_t & SFM = NSResources->systemFiles();
235 Name2Connection_t & M = NSResources->connections(); 235 Name2Connection_t & M = NSResources->connections();
236 NodeCollection * NC; 236 NodeCollection * NC;
237 ANetNodeInstance * NNI; 237 ANetNodeInstance * NNI;
238 SystemFile * SF; 238 SystemFile * SF;
239 AsDevice * CurDev; 239 AsDevice * CurDev;
240 ANetNode * CurDevNN; 240 ANetNode * CurDevNN;
241 bool needToRegenerate = ForceIt; 241 bool needToRegenerate = ForceIt;
242 242
243 // 243 //
244 // check if we need to generate at least one of the system files 244 // check if we need to generate at least one of the system files
@@ -272,32 +272,24 @@ QString NetworkSettingsData::generateSettings( bool ForceReq ) {
272 break; 272 break;
273 } 273 }
274 } 274 }
275 } 275 }
276 if( needToRegenerate ) 276 if( needToRegenerate )
277 break; 277 break;
278 } 278 }
279 if( needToRegenerate ) 279 if( needToRegenerate )
280 break; 280 break;
281 } 281 }
282 } 282 }
283 283
284 // we cannot renumber with a FORCE request since
285 // we probably are NOT going to save the config
286 // e.g. when using --regen option
287 if( ! ForceReq && needToRegenerate ) {
288 NSResources->renumberConnections();
289 setModified(1);
290 }
291
292 // 284 //
293 // generate files proper to each netnodeinstance 285 // generate files proper to each netnodeinstance
294 // 286 //
295 { Name2Instance_t & NNIs = NSResources->netNodeInstances(); 287 { Name2Instance_t & NNIs = NSResources->netNodeInstances();
296 288
297 for( QDictIterator<ANetNodeInstance> NNIIt(NNIs); 289 for( QDictIterator<ANetNodeInstance> NNIIt(NNIs);
298 NNIIt.current(); 290 NNIIt.current();
299 ++NNIIt 291 ++NNIIt
300 ){ 292 ){
301 // for all nodes find those that are modified 293 // for all nodes find those that are modified
302 NNI = NNIIt.current(); 294 NNI = NNIIt.current();
303 295
@@ -312,25 +304,25 @@ QString NetworkSettingsData::generateSettings( bool ForceReq ) {
312 } 304 }
313 } 305 }
314 } 306 }
315 307
316 // 308 //
317 // generate all system files 309 // generate all system files
318 // 310 //
319 for( QDictIterator<SystemFile> sfit(SFM); 311 for( QDictIterator<SystemFile> sfit(SFM);
320 sfit.current(); 312 sfit.current();
321 ++sfit ) { 313 ++sfit ) {
322 SF = sfit.current(); 314 SF = sfit.current();
323 315
324 fprintf( stderr, "Generating %s\n", SF->name().latin1() ); 316 Log( ( "Generating %s\n", SF->name().latin1() ));
325 SF->open(); 317 SF->open();
326 318
327 do { // so we can break; 319 do { // so we can break;
328 320
329 // global presection for this system file 321 // global presection for this system file
330 if( SF->preSection() ) { 322 if( SF->preSection() ) {
331 S = qApp->translate( "NetworkSettings", 323 S = qApp->translate( "NetworkSettings",
332 "<p>Error in preSection for file \"%1\"</p>" ). 324 "<p>Error in preSection for file \"%1\"</p>" ).
333 arg( SF->name() ); 325 arg( SF->name() );
334 return S; 326 return S;
335 } 327 }
336 328
@@ -396,47 +388,46 @@ QList<NodeCollection> NetworkSettingsData::collectPossible( const char * Interfa
396 Name2Connection_t & M = NSResources->connections(); 388 Name2Connection_t & M = NSResources->connections();
397 389
398 // for all connections 390 // for all connections
399 for( QDictIterator<NodeCollection> it(M); 391 for( QDictIterator<NodeCollection> it(M);
400 it.current(); 392 it.current();
401 ++it ) { 393 ++it ) {
402 NC = it.current(); 394 NC = it.current();
403 // check if this profile handles the requested interface 395 // check if this profile handles the requested interface
404 if( NC->handlesInterface( Interface ) && // if different Intf. 396 if( NC->handlesInterface( Interface ) && // if different Intf.
405 NC->state() != Disabled && // if not enabled 397 NC->state() != Disabled && // if not enabled
406 NC->state() != IsUp // if already used 398 NC->state() != IsUp // if already used
407 ) { 399 ) {
408 fprintf( stderr, "Append %s for %s\n", NC->name().latin1(), Interface); 400 Log( ( "Append %s for %s\n", NC->name().latin1(), Interface));
409 PossibleConnections.append( NC ); 401 PossibleConnections.append( NC );
410 } 402 }
411 } 403 }
412 return PossibleConnections; 404 return PossibleConnections;
413} 405}
414 406
415 407
416/* 408/*
417 Called by the system to see if interface can be brought UP 409 Called by the system to see if interface can be brought UP
418 410
419 if allowed, echo Interface-allowed else Interface-disallowed 411 if allowed, echo Interface-allowed else Interface-disallowed
420*/ 412*/
421 413
422bool NetworkSettingsData::canStart( const char * Interface ) { 414bool NetworkSettingsData::canStart( const char * Interface ) {
423 // load situation 415 // load situation
424 NodeCollection * NC = 0; 416 NodeCollection * NC = 0;
425 QList<NodeCollection> PossibleConnections; 417 QList<NodeCollection> PossibleConnections;
426 418
427 PossibleConnections = collectPossible( Interface ); 419 PossibleConnections = collectPossible( Interface );
428 420
429 fprintf( stderr, "Possiblilies %d\n", 421 Log( ( "Possiblilies %d\n", PossibleConnections.count() ));
430 PossibleConnections.count() );
431 switch( PossibleConnections.count() ) { 422 switch( PossibleConnections.count() ) {
432 case 0 : // no connections 423 case 0 : // no connections
433 break; 424 break;
434 case 1 : // one connection 425 case 1 : // one connection
435 NC = PossibleConnections.first(); 426 NC = PossibleConnections.first();
436 break; 427 break;
437 default : // need to ask user ? 428 default : // need to ask user ?
438 return 1; 429 return 1;
439 } 430 }
440 431
441 if( NC ) { 432 if( NC ) {
442 switch( NC->state() ) { 433 switch( NC->state() ) {
diff --git a/noncore/settings/networksettings2/profile/profileGUI.ui b/noncore/settings/networksettings2/profile/profileGUI.ui
index 365704b..5bf9a9c 100644
--- a/noncore/settings/networksettings2/profile/profileGUI.ui
+++ b/noncore/settings/networksettings2/profile/profileGUI.ui
@@ -2,26 +2,26 @@
2<class>ProfileGUI</class> 2<class>ProfileGUI</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>Profile_FRM</cstring> 7 <cstring>Profile_FRM</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>225</width> 14 <width>276</width>
15 <height>301</height> 15 <height>231</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Profile</string> 20 <string>Profile</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
27 </property> 27 </property>
@@ -50,76 +50,146 @@
50 <class>QWidget</class> 50 <class>QWidget</class>
51 <property stdset="1"> 51 <property stdset="1">
52 <name>name</name> 52 <name>name</name>
53 <cstring>tab</cstring> 53 <cstring>tab</cstring>
54 </property> 54 </property>
55 <attribute> 55 <attribute>
56 <name>title</name> 56 <name>title</name>
57 <string>Setup</string> 57 <string>Setup</string>
58 </attribute> 58 </attribute>
59 <vbox> 59 <vbox>
60 <property stdset="1"> 60 <property stdset="1">
61 <name>margin</name> 61 <name>margin</name>
62 <number>2</number> 62 <number>1</number>
63 </property> 63 </property>
64 <property stdset="1"> 64 <property stdset="1">
65 <name>spacing</name> 65 <name>spacing</name>
66 <number>0</number> 66 <number>2</number>
67 </property> 67 </property>
68 <widget> 68 <widget>
69 <class>QCheckBox</class> 69 <class>QLayoutWidget</class>
70 <property stdset="1">
71 <name>name</name>
72 <cstring>Automatic_CB</cstring>
73 </property>
74 <property stdset="1">
75 <name>text</name>
76 <string>Start automatically</string>
77 </property>
78 </widget>
79 <widget>
80 <class>QCheckBox</class>
81 <property stdset="1">
82 <name>name</name>
83 <cstring>Confirm_CB</cstring>
84 </property>
85 <property stdset="1">
86 <name>enabled</name>
87 <bool>true</bool>
88 </property>
89 <property stdset="1">
90 <name>text</name>
91 <string>Confirm before start</string>
92 </property>
93 <property>
94 <name>layoutMargin</name>
95 </property>
96 </widget>
97 <widget>
98 <class>QCheckBox</class>
99 <property stdset="1"> 70 <property stdset="1">
100 <name>name</name> 71 <name>name</name>
101 <cstring>Disabled_CB</cstring> 72 <cstring>Layout8</cstring>
102 </property>
103 <property stdset="1">
104 <name>enabled</name>
105 <bool>true</bool>
106 </property>
107 <property stdset="1">
108 <name>text</name>
109 <string>Disabled</string>
110 </property>
111 <property>
112 <name>layoutMargin</name>
113 </property> 73 </property>
74 <grid>
75 <property stdset="1">
76 <name>margin</name>
77 <number>0</number>
78 </property>
79 <property stdset="1">
80 <name>spacing</name>
81 <number>6</number>
82 </property>
83 <widget row="0" column="0" rowspan="2" colspan="1" >
84 <class>QGroupBox</class>
85 <property stdset="1">
86 <name>name</name>
87 <cstring>GroupBox1</cstring>
88 </property>
89 <property stdset="1">
90 <name>title</name>
91 <string>Start</string>
92 </property>
93 <vbox>
94 <property stdset="1">
95 <name>margin</name>
96 <number>11</number>
97 </property>
98 <property stdset="1">
99 <name>spacing</name>
100 <number>6</number>
101 </property>
102 <widget>
103 <class>QCheckBox</class>
104 <property stdset="1">
105 <name>name</name>
106 <cstring>Automatic_CB</cstring>
107 </property>
108 <property stdset="1">
109 <name>text</name>
110 <string>Automatically</string>
111 </property>
112 </widget>
113 <widget>
114 <class>QCheckBox</class>
115 <property stdset="1">
116 <name>name</name>
117 <cstring>Confirm_CB</cstring>
118 </property>
119 <property stdset="1">
120 <name>enabled</name>
121 <bool>true</bool>
122 </property>
123 <property stdset="1">
124 <name>text</name>
125 <string>Ask</string>
126 </property>
127 <property>
128 <name>layoutMargin</name>
129 </property>
130 </widget>
131 <widget>
132 <class>QCheckBox</class>
133 <property stdset="1">
134 <name>name</name>
135 <cstring>Disabled_CB</cstring>
136 </property>
137 <property stdset="1">
138 <name>enabled</name>
139 <bool>true</bool>
140 </property>
141 <property stdset="1">
142 <name>text</name>
143 <string>Disabled</string>
144 </property>
145 <property>
146 <name>layoutMargin</name>
147 </property>
148 </widget>
149 </vbox>
150 </widget>
151 <widget row="0" column="1" >
152 <class>QCheckBox</class>
153 <property stdset="1">
154 <name>name</name>
155 <cstring>TriggersVPN_CB</cstring>
156 </property>
157 <property stdset="1">
158 <name>text</name>
159 <string>Trigger VPN</string>
160 </property>
161 </widget>
162 <spacer row="1" column="1" >
163 <property>
164 <name>name</name>
165 <cstring>Spacer8</cstring>
166 </property>
167 <property stdset="1">
168 <name>orientation</name>
169 <enum>Vertical</enum>
170 </property>
171 <property stdset="1">
172 <name>sizeType</name>
173 <enum>Expanding</enum>
174 </property>
175 <property>
176 <name>sizeHint</name>
177 <size>
178 <width>20</width>
179 <height>20</height>
180 </size>
181 </property>
182 </spacer>
183 </grid>
114 </widget> 184 </widget>
115 <widget> 185 <widget>
116 <class>QLabel</class> 186 <class>QLabel</class>
117 <property stdset="1"> 187 <property stdset="1">
118 <name>name</name> 188 <name>name</name>
119 <cstring>TextLabel3</cstring> 189 <cstring>TextLabel3</cstring>
120 </property> 190 </property>
121 <property stdset="1"> 191 <property stdset="1">
122 <name>text</name> 192 <name>text</name>
123 <string>Description</string> 193 <string>Description</string>
124 </property> 194 </property>
125 </widget> 195 </widget>
diff --git a/noncore/settings/networksettings2/profile/profile_NNI.cpp b/noncore/settings/networksettings2/profile/profile_NNI.cpp
index 5b54aa4..cb52b2a 100644
--- a/noncore/settings/networksettings2/profile/profile_NNI.cpp
+++ b/noncore/settings/networksettings2/profile/profile_NNI.cpp
@@ -1,42 +1,46 @@
1#include "profileedit.h" 1#include "profileedit.h"
2#include "profile_NNI.h" 2#include "profile_NNI.h"
3#include "profile_NN.h" 3#include "profile_NN.h"
4 4
5AProfile::AProfile( ProfileNetNode * PNN ) : ANetNodeInstance( PNN ) { 5AProfile::AProfile( ProfileNetNode * PNN ) : ANetNodeInstance( PNN ) {
6 Data.Automatic = 1; 6 Data.Automatic = 1;
7 Data.Confirm = 0; 7 Data.Confirm = 0;
8 Data.Description = ""; 8 Data.Description = "";
9 Data.Disabled = 0; 9 Data.Disabled = 0;
10 Data.TriggerVPN = 0;
10 GUI = 0; 11 GUI = 0;
11 RT = 0; 12 RT = 0;
12} 13}
13 14
14void AProfile::setSpecificAttribute( QString & Attr, QString & Value ) { 15void AProfile::setSpecificAttribute( QString & Attr, QString & Value ) {
15 16
16 if ( Attr == "automatic" ) { 17 if ( Attr == "automatic" ) {
17 Data.Automatic = (Value=="yes"); 18 Data.Automatic = (Value=="yes");
18 } else if ( Attr == "preconfirm" ) { 19 } else if ( Attr == "preconfirm" ) {
19 Data.Confirm = (Value=="yes"); 20 Data.Confirm = (Value=="yes");
20 } else if ( Attr == "disabled" ) { 21 } else if ( Attr == "disabled" ) {
21 Data.Disabled = (Value=="yes"); 22 Data.Disabled = (Value=="yes");
23 } else if ( Attr == "triggervpn" ) {
24 Data.TriggerVPN = (Value=="yes");
22 } else if ( Attr == "description" ) { 25 } else if ( Attr == "description" ) {
23 Data.Description = Value; 26 Data.Description = Value;
24 } 27 }
25} 28}
26 29
27void AProfile::saveSpecificAttribute( QTextStream & TS ) { 30void AProfile::saveSpecificAttribute( QTextStream & TS ) {
28 TS << "automatic=" << ((Data.Automatic) ? "yes" : "no") << endl; 31 TS << "automatic=" << ((Data.Automatic) ? "yes" : "no") << endl;
29 TS << "preconfirm=" << ((Data.Confirm) ? "yes" : "no") << endl; 32 TS << "preconfirm=" << ((Data.Confirm) ? "yes" : "no") << endl;
30 TS << "disabled=" << ((Data.Disabled) ? "yes" : "no") << endl; 33 TS << "disabled=" << ((Data.Disabled) ? "yes" : "no") << endl;
34 TS << "triggervpn=" << ((Data.TriggerVPN) ? "yes" : "no") << endl;
31 TS << "description=" << Data.Description << endl; 35 TS << "description=" << Data.Description << endl;
32} 36}
33 37
34QWidget * AProfile::edit( QWidget * parent ) { 38QWidget * AProfile::edit( QWidget * parent ) {
35 GUI = new ProfileEdit( parent, this ); 39 GUI = new ProfileEdit( parent, this );
36 GUI->showData( Data ); 40 GUI->showData( Data );
37 return GUI; 41 return GUI;
38} 42}
39 43
40QString AProfile::acceptable( void ) { 44QString AProfile::acceptable( void ) {
41 return ( GUI ) ? GUI->acceptable( ) : QString(); 45 return ( GUI ) ? GUI->acceptable( ) : QString();
42} 46}
diff --git a/noncore/settings/networksettings2/profile/profiledata.h b/noncore/settings/networksettings2/profile/profiledata.h
index b4168e2..246d50c 100644
--- a/noncore/settings/networksettings2/profile/profiledata.h
+++ b/noncore/settings/networksettings2/profile/profiledata.h
@@ -1,15 +1,16 @@
1#ifndef PROFILE_DATA_H 1#ifndef PROFILE_DATA_H
2#define PROFILE_DATA_H 2#define PROFILE_DATA_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5typedef struct ProfileData { 5typedef struct ProfileData {
6 QString Description; 6 QString Description;
7 // start up automatically 7 // start up automatically
8 bool Automatic; 8 bool Automatic;
9 // if started up automatically, ask user for confirmation 9 // if started up automatically, ask user for confirmation
10 bool Confirm; 10 bool Confirm;
11 // Do not bring this connection up 11 // Do not bring this connection up
12 bool Disabled; 12 bool Disabled;
13 bool TriggerVPN;
13} ProfileData_t; 14} ProfileData_t;
14 15
15#endif 16#endif
diff --git a/noncore/settings/networksettings2/profile/profileedit.cpp b/noncore/settings/networksettings2/profile/profileedit.cpp
index c9fb650..87e503e 100644
--- a/noncore/settings/networksettings2/profile/profileedit.cpp
+++ b/noncore/settings/networksettings2/profile/profileedit.cpp
@@ -49,34 +49,36 @@ ProfileEdit::ProfileEdit( QWidget * Parent, ANetNodeInstance * TNNI ) :
49 this, SLOT( SLOT_Refresh() ) ); 49 this, SLOT( SLOT_Refresh() ) );
50 } 50 }
51 51
52} 52}
53 53
54QString ProfileEdit::acceptable( void ) { 54QString ProfileEdit::acceptable( void ) {
55 return QString(); 55 return QString();
56} 56}
57 57
58void ProfileEdit::showData( ProfileData_t & Data ) { 58void ProfileEdit::showData( ProfileData_t & Data ) {
59 Description_LE->setText( Data.Description ); 59 Description_LE->setText( Data.Description );
60 Automatic_CB->setChecked( Data.Automatic ); 60 Automatic_CB->setChecked( Data.Automatic );
61 TriggersVPN_CB->setChecked( Data.TriggerVPN );
61 Confirm_CB->setChecked( Data.Confirm ); 62 Confirm_CB->setChecked( Data.Confirm );
62 Disabled_CB->setChecked( Data.Disabled ); 63 Disabled_CB->setChecked( Data.Disabled );
63} 64}
64 65
65 66
66bool ProfileEdit::commit( ProfileData_t & Data ) { 67bool ProfileEdit::commit( ProfileData_t & Data ) {
67 bool SM = 0; 68 bool SM = 0;
68 TXTM( Data.Description, Description_LE, SM ); 69 TXTM( Data.Description, Description_LE, SM );
69 70
70 CBM( Data.Automatic, Automatic_CB, SM ); 71 CBM( Data.Automatic, Automatic_CB, SM );
72 CBM( Data.TriggerVPN, TriggersVPN_CB, SM );
71 CBM( Data.Disabled, Disabled_CB, SM ); 73 CBM( Data.Disabled, Disabled_CB, SM );
72 CBM( Data.Confirm, Confirm_CB, SM ); 74 CBM( Data.Confirm, Confirm_CB, SM );
73 75
74 return SM; 76 return SM;
75} 77}
76 78
77void ProfileEdit::SLOT_Refresh( void ) { 79void ProfileEdit::SLOT_Refresh( void ) {
78 InterfaceInfo * II = Dev->assignedInterface(); 80 InterfaceInfo * II = Dev->assignedInterface();
79 NSResources->system().refreshStatistics( *II ); 81 NSResources->system().refreshStatistics( *II );
80 RcvBytes_LBL->setText( II->RcvBytes ); 82 RcvBytes_LBL->setText( II->RcvBytes );
81 SndBytes_LBL->setText( II->SndBytes ); 83 SndBytes_LBL->setText( II->SndBytes );
82 RcvErrors_LBL->setText( II->RcvErrors ); 84 RcvErrors_LBL->setText( II->RcvErrors );
diff --git a/noncore/settings/networksettings2/profile/profilerun.cpp b/noncore/settings/networksettings2/profile/profilerun.cpp
index 79bb93e..1a5b15b 100644
--- a/noncore/settings/networksettings2/profile/profilerun.cpp
+++ b/noncore/settings/networksettings2/profile/profilerun.cpp
@@ -1,27 +1,29 @@
1#include <resources.h> 1#include <resources.h>
2 2
3#include "profilerun.h" 3#include "profilerun.h"
4 4
5void ProfileRun::detectState( NodeCollection * NC ) { 5void ProfileRun::detectState( NodeCollection * NC ) {
6 if( Data->Disabled ) { 6 if( Data->Disabled ) {
7 Log(( "%s disabled\n", NC->name().latin1() ));
7 NC->setCurrentState( Disabled ); 8 NC->setCurrentState( Disabled );
8 } else { 9 } else {
10 Log(( "%s not disabled\n", NC->name().latin1() ));
9 // find next item in connection 11 // find next item in connection
10 // convert to runtime and ask to detect the state 12 // convert to runtime and ask to detect the state
11 netNode()->nextNode()->runtime()->detectState( NC ); 13 netNode()->nextNode()->runtime()->detectState( NC );
12 } 14 }
13} 15}
14 16
15bool ProfileRun::setState( NodeCollection * NC, Action_t A, bool ) { 17bool ProfileRun::setState( NodeCollection * NC, Action_t A, bool F ) {
16 ANetNodeInstance * NNNI; 18 ANetNodeInstance * NNNI;
17 19
18 NNNI = netNode()->nextNode(); 20 NNNI = netNode()->nextNode();
19 switch ( A ) { 21 switch ( A ) {
20 case Enable : 22 case Enable :
21 if( NC->currentState() == Disabled ) { 23 if( NC->currentState() == Disabled ) {
22 Data->Disabled = 0; 24 Data->Disabled = 0;
23 NC->setCurrentState( Off ); // at least 25 NC->setCurrentState( Off ); // at least
24 // ... but request deeper 26 // ... but request deeper
25 NNNI->runtime()->detectState(NC); 27 NNNI->runtime()->detectState(NC);
26 } 28 }
27 return 1; 29 return 1;
@@ -32,25 +34,25 @@ bool ProfileRun::setState( NodeCollection * NC, Action_t A, bool ) {
32 // bring Deactivate (will bring down) 34 // bring Deactivate (will bring down)
33 if( ! NNNI->runtime()->setState(NC, Deactivate) ) 35 if( ! NNNI->runtime()->setState(NC, Deactivate) )
34 return 0; 36 return 0;
35 default : 37 default :
36 break; 38 break;
37 } 39 }
38 Data->Disabled = 1; 40 Data->Disabled = 1;
39 NC->setCurrentState( Disabled ); 41 NC->setCurrentState( Disabled );
40 return 1; 42 return 1;
41 default : 43 default :
42 break; 44 break;
43 } 45 }
44 return NNNI->runtime()->setState(NC, A); 46 return NNNI->runtime()->setState(NC, A, F );
45} 47}
46 48
47bool ProfileRun::canSetState( State_t Curr, Action_t A ) { 49bool ProfileRun::canSetState( State_t Curr, Action_t A ) {
48 RuntimeInfo * RI; 50 RuntimeInfo * RI;
49 switch ( A ) { 51 switch ( A ) {
50 case Enable : 52 case Enable :
51 case Disable : 53 case Disable :
52 // always possible 54 // always possible
53 return 1; 55 return 1;
54 default : 56 default :
55 break; 57 break;
56 } 58 }
diff --git a/noncore/settings/networksettings2/profile/profilerun.h b/noncore/settings/networksettings2/profile/profilerun.h
index c8ea063..400b56c 100644
--- a/noncore/settings/networksettings2/profile/profilerun.h
+++ b/noncore/settings/networksettings2/profile/profilerun.h
@@ -14,18 +14,22 @@ public :
14 14
15 void detectState( NodeCollection * NC ); 15 void detectState( NodeCollection * NC );
16 bool setState( NodeCollection * NC, Action_t A, bool ); 16 bool setState( NodeCollection * NC, Action_t A, bool );
17 bool canSetState( State_t Curr, Action_t A ); 17 bool canSetState( State_t Curr, Action_t A );
18 18
19 bool handlesInterface( const QString & I ); 19 bool handlesInterface( const QString & I );
20 20
21 virtual const QString & description( void ) 21 virtual const QString & description( void )
22 { return Data->Description; } 22 { return Data->Description; }
23 23
24 virtual AsFullSetup * asFullSetup( void ) 24 virtual AsFullSetup * asFullSetup( void )
25 { return (AsFullSetup *)this; } 25 { return (AsFullSetup *)this; }
26
27 virtual bool triggersVPN( void )
28 { return Data->TriggerVPN; }
29
26private : 30private :
27 31
28 ProfileData * Data; 32 ProfileData * Data;
29 33
30}; 34};
31#endif 35#endif
diff --git a/noncore/settings/networksettings2/usb/usbrun.cpp b/noncore/settings/networksettings2/usb/usbrun.cpp
index beacd7b..b8ac8a8 100644
--- a/noncore/settings/networksettings2/usb/usbrun.cpp
+++ b/noncore/settings/networksettings2/usb/usbrun.cpp
@@ -3,107 +3,109 @@
3#include <qtextstream.h> 3#include <qtextstream.h>
4#include <resources.h> 4#include <resources.h>
5#include "usbrun.h" 5#include "usbrun.h"
6 6
7void USBRun::detectState( NodeCollection * NC ) { 7void USBRun::detectState( NodeCollection * NC ) {
8 // unavailable : no card found 8 // unavailable : no card found
9 // available : card found and assigned to us or free 9 // available : card found and assigned to us or free
10 // up : card found and assigned to us and up 10 // up : card found and assigned to us and up
11 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number()); 11 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number());
12 System & Sys = NSResources->system(); 12 System & Sys = NSResources->system();
13 InterfaceInfo * Run; 13 InterfaceInfo * Run;
14 QFile F( S ); 14 QFile F( S );
15 Log(("Detecting for %s\n", NC->name().latin1() ));
15 16
16 if( F.open( IO_ReadOnly ) ) { 17 if( F.open( IO_ReadOnly ) ) {
17 // could open file -> read interface and assign 18 // could open file -> read interface and assign
18 QString X; 19 QString X;
19 QTextStream TS(&F); 20 QTextStream TS(&F);
20 X = TS.readLine(); 21 X = TS.readLine();
22 Log(("%s exists\n", S.latin1() ));
21 // find interface 23 // find interface
22 if( handlesInterface( X ) ) { 24 if( handlesInterface( X ) ) {
23 for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); 25 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
24 It.current(); 26 It.current();
25 ++It ) { 27 ++It ) {
26 Run = It.current(); 28 Run = It.current();
27 if( X == Run->Name ) { 29 if( X == Run->Name ) {
28 Run->assignNode( netNode() ); 30 Run->assignNode( netNode() );
29 assignInterface( Run ); 31 assignInterface( Run );
30 NC->setCurrentState( IsUp ); 32 NC->setCurrentState( IsUp );
31 return; 33 return;
32 } 34 }
33 } 35 }
34 } 36 }
35 } 37 }
36 38
37 fprintf( stderr, "Assigned %p\n", assignedInterface() ); 39 Log(("Assigned %p\n", assignedInterface() ));
38 if( ( Run = assignedInterface() ) ) { 40 if( ( Run = assignedInterface() ) ) {
39 // we already have an interface assigned -> still present ? 41 // we already have an interface assigned -> still present ?
40 if( ! Run->IsUp ) { 42 if( ! Run->IsUp ) {
41 // usb is still free -> keep assignment 43 // usb is still free -> keep assignment
42 NC->setCurrentState( Available ); 44 NC->setCurrentState( Available );
43 return; 45 return;
44 } // else interface is up but NOT us -> some other profile 46 } // else interface is up but NOT us -> some other profile
45 } 47 }
46 48
47 // nothing (valid) assigned to us 49 // nothing (valid) assigned to us
48 assignInterface( 0 ); 50 assignInterface( 0 );
49 51
50 // find possible interface 52 // find possible interface
51 for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); 53 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
52 It.current(); 54 It.current();
53 ++It ) { 55 ++It ) {
54 Run = It.current(); 56 Run = It.current();
55 57
56 fprintf( stderr, "%s %d %d=%d %d\n", 58 Log(("%s %d %d=%d %d\n",
57 Run->Name.latin1(), 59 Run->Name.latin1(),
58 handlesInterface( Run->Name ), 60 handlesInterface( Run->Name ),
59 Run->CardType, ARPHRD_ETHER, 61 Run->CardType, ARPHRD_ETHER,
60 ! Run->IsUp ); 62 ! Run->IsUp ));
61 63
62 if( handlesInterface( Run->Name ) && 64 if( handlesInterface( Run->Name ) &&
63 Run->CardType == ARPHRD_ETHER && 65 Run->CardType == ARPHRD_ETHER &&
64 ! Run->IsUp 66 ! Run->IsUp
65 ) { 67 ) {
66 fprintf( stderr, "Released(OFF)\n" ); 68 Log(("Released(OFF)\n" ));
67 // proper type, and Not UP -> free 69 // proper type, and Not UP -> free
68 NC->setCurrentState( Off ); 70 NC->setCurrentState( Off );
69 return; 71 return;
70 } 72 }
71 } 73 }
72 // no free found 74 // no free found
73 fprintf( stderr, "UNA\n" ); 75 Log(("UNA\n" ));
74 76
75 NC->setCurrentState( Unavailable ); 77 NC->setCurrentState( Unavailable );
76} 78}
77 79
78bool USBRun::setState( NodeCollection * NC, Action_t A, bool ) { 80bool USBRun::setState( NodeCollection * NC, Action_t A, bool ) {
79 81
80 // we only handle activate and deactivate 82 // we only handle activate and deactivate
81 switch( A ) { 83 switch( A ) {
82 case Activate : 84 case Activate :
83 { 85 {
84 if( NC->currentState() != Off ) { 86 if( NC->currentState() != Off ) {
85 return 0; 87 return 0;
86 } 88 }
87 InterfaceInfo * N = getInterface(); 89 InterfaceInfo * N = getInterface();
88 if( ! N ) { 90 if( ! N ) {
89 // no interface available 91 // no interface available
90 NC->setCurrentState( Unavailable ); 92 NC->setCurrentState( Unavailable );
91 return 0; 93 return 0;
92 } 94 }
93 // because we were OFF the interface 95 // because we were OFF the interface
94 // we get back is NOT assigned 96 // we get back is NOT assigned
95 N->assignNode( netNode() ); 97 N->assignNode( netNode() );
96 assignInterface( N ); 98 assignInterface( N );
97 fprintf( stderr, "Assing %p\n", N ); 99 Log(("Assing %p\n", N ));
98 NC->setCurrentState( Available ); 100 NC->setCurrentState( Available );
99 return 1; 101 return 1;
100 } 102 }
101 case Deactivate : 103 case Deactivate :
102 if( NC->currentState() == IsUp ) { 104 if( NC->currentState() == IsUp ) {
103 // bring down first 105 // bring down first
104 if( ! connection()->setState( Down ) ) 106 if( ! connection()->setState( Down ) )
105 // could not ... 107 // could not ...
106 return 0; 108 return 0;
107 } else if( NC->currentState() != Available ) { 109 } else if( NC->currentState() != Available ) {
108 return 1; 110 return 1;
109 } 111 }