author | wimpie <wimpie> | 2004-08-09 02:31:25 (UTC) |
---|---|---|
committer | wimpie <wimpie> | 2004-08-09 02:31:25 (UTC) |
commit | 0784cfdbd261c43856b45be6ab7439841e69b858 (patch) (unidiff) | |
tree | f6a27d6b2e1e6d8dcc908b2ef5836cd320ddfab1 | |
parent | 5e10278e748608766245ff9f59a54d1ae8ff6f7e (diff) | |
download | opie-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
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 | |||
@@ -5,16 +5,17 @@ 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 |
16 | LIBS += -lqpe | 17 | LIBS += -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 | ||
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,27 +1,40 @@ | |||
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 | ||
5 | ABluetoothBNEP::ABluetoothBNEP( BluetoothBNEPNetNode * PNN ) : ANetNodeInstance( PNN ) { | 5 | ABluetoothBNEP::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 | ||
10 | void ABluetoothBNEP::setSpecificAttribute( QString & , QString & ) { | 12 | void 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 | ||
13 | void ABluetoothBNEP::saveSpecificAttribute( QTextStream & ) { | 20 | void 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 | ||
16 | QWidget * ABluetoothBNEP::edit( QWidget * parent ) { | 29 | QWidget * 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 | ||
22 | QString ABluetoothBNEP::acceptable( void ) { | 35 | QString ABluetoothBNEP::acceptable( void ) { |
23 | return ( GUI ) ? GUI->acceptable( ) : QString(); | 36 | return ( GUI ) ? GUI->acceptable( ) : QString(); |
24 | } | 37 | } |
25 | 38 | ||
26 | void ABluetoothBNEP::commit( void ) { | 39 | void ABluetoothBNEP::commit( void ) { |
27 | if( GUI && GUI->commit( Data ) ) | 40 | if( GUI && GUI->commit( Data ) ) |
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 | |||
4 | typedef struct BluetoothBNEPData { | 6 | typedef 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 | ||
7 | BluetoothBNEPEdit::BluetoothBNEPEdit( QWidget * Parent ) : BluetoothBNEPGUI( Parent ){ | 9 | BluetoothBNEPEdit::BluetoothBNEPEdit( QWidget * Parent ) : BluetoothBNEPGUI( Parent ){ |
8 | 10 | ||
9 | } | 11 | } |
10 | 12 | ||
11 | QString BluetoothBNEPEdit::acceptable( void ) { | 13 | QString 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 | ||
15 | bool BluetoothBNEPEdit::commit( BluetoothBNEPData & ) { | 22 | bool 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 | ||
19 | void BluetoothBNEPEdit::showData( BluetoothBNEPData & ) { | 32 | void 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 | ||
22 | void BluetoothBNEPEdit::SLOT_StartBTMgr( void ) { | 44 | void 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 | |||
7 | QDict<QString> * BluetoothBNEPRun::PANConnections = 0; | ||
8 | |||
9 | void 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 | |||
153 | bool 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 | |||
196 | bool 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 | ||
222 | InterfaceInfo * 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 | |||
247 | bool 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 | ||
4 | class BluetoothBNEPRun : public AsDevice { | 4 | class BluetoothBNEPRun : public AsDevice { |
5 | 5 | ||
6 | public : | 6 | public : |
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 | ||
18 | protected : | 21 | protected : |
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 ) | 28 | private : |
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 | |||
@@ -109,19 +109,19 @@ void LanCardEdit::SLOT_ScanCards( void ) { | |||
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 ? |
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 | |||
@@ -73,61 +73,68 @@ int main( int argc, char * argv[] ) { | |||
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 | |||
@@ -8,16 +8,17 @@ void NetworkRun::detectState( NodeCollection * NC ) { | |||
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 | ||
20 | bool NetworkRun::setState( NodeCollection * NC, Action_t A, bool Force ) { | 21 | bool 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(); |
@@ -29,27 +30,38 @@ bool NetworkRun::setState( NodeCollection * NC, Action_t A, bool 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 | ||
50 | bool NetworkRun::canSetState( State_t Curr, Action_t A ) { | 62 | bool 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 ); |
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,9 +1,10 @@ | |||
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> |
@@ -56,16 +57,20 @@ NetworkSettings::NetworkSettings( QWidget *parent, | |||
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 | } |
@@ -86,16 +91,22 @@ NetworkSettings::~NetworkSettings() { | |||
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 | ||
99 | void 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 | |||
94 | void NetworkSettings::SLOT_RefreshStates( void ) { | 105 | void 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() ); |
@@ -129,16 +140,19 @@ void NetworkSettings::SLOT_RefreshStates( void ) { | |||
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 | ||
148 | void NetworkSettings::SLOT_NoLongerBusy( void ) { | ||
149 | NSResources->busy( FALSE ); | ||
150 | } | ||
137 | void NetworkSettings::SLOT_AddNode( void ) { | 151 | void NetworkSettings::SLOT_AddNode( void ) { |
138 | SLOT_EditNode( 0 ); | 152 | SLOT_EditNode( 0 ); |
139 | } | 153 | } |
140 | 154 | ||
141 | void NetworkSettings::SLOT_DeleteNode( void ) { | 155 | void 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 ) |
@@ -167,16 +181,18 @@ void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { | |||
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 ) { |
@@ -201,17 +217,17 @@ void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { | |||
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 ) { |
@@ -252,41 +268,46 @@ void NetworkSettings::SLOT_ShowNode( QListBoxItem * LBI ) { | |||
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 | ||
287 | void NetworkSettings::SLOT_CheckState( void ) { | 308 | void 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 | } |
@@ -409,25 +430,30 @@ void NetworkSettings::SLOT_Connect( void ) { | |||
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 | ||
416 | void NetworkSettings::SLOT_Disconnect( void ) { | 437 | void 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 | ||
428 | void NetworkSettings::SLOT_ToMessages( void ) { | 454 | void NetworkSettings::SLOT_ToMessages( void ) { |
429 | Profile_GB->hide(); | 455 | Profile_GB->hide(); |
430 | Messages_GB->show(); | 456 | Messages_GB->show(); |
431 | } | 457 | } |
432 | 458 | ||
433 | void NetworkSettings::SLOT_ToProfile( void ) { | 459 | void NetworkSettings::SLOT_ToProfile( void ) { |
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 | |||
@@ -23,30 +23,32 @@ public : | |||
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 | ||
29 | public slots : | 29 | public 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 | ||
46 | private : | 48 | private : |
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 | ||
5 | extern void VLog( char * Format, ... ); | ||
6 | extern 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 | |||
@@ -9,12 +9,14 @@ class AsFullSetup : public RuntimeInfo { | |||
9 | 9 | ||
10 | public : | 10 | public : |
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 | |||
@@ -98,18 +98,16 @@ ANetNodeInstance * ANetNodeInstance::nextNode( void ) { | |||
98 | } | 98 | } |
99 | 99 | ||
100 | // | 100 | // |
101 | // | 101 | // |
102 | // NODECOLLECTION | 102 | // NODECOLLECTION |
103 | // | 103 | // |
104 | // | 104 | // |
105 | 105 | ||
106 | long NodeCollection::MaxNr = -1; | ||
107 | |||
108 | NodeCollection::NodeCollection( void ) : QList<ANetNodeInstance>() { | 106 | NodeCollection::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 | ||
@@ -141,16 +139,17 @@ NodeCollection::NodeCollection( QTextStream & TS ) : | |||
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; |
@@ -290,16 +289,19 @@ QString NodeCollection::stateName( State_t S) { | |||
290 | void NodeCollection::reassign( void ) { | 289 | void 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 | ||
297 | bool NodeCollection::triggersVPN() { | ||
298 | return getToplevel()->runtime()->asFullSetup()->triggersVPN(); | ||
299 | } | ||
298 | // | 300 | // |
299 | // | 301 | // |
300 | // RUNTIMEINFO | 302 | // RUNTIMEINFO |
301 | // | 303 | // |
302 | // | 304 | // |
303 | 305 | ||
304 | InterfaceInfo * RuntimeInfo::assignedInterface( void ) { | 306 | InterfaceInfo * RuntimeInfo::assignedInterface( void ) { |
305 | return netNode()->nextNode()->runtime()->assignedInterface(); | 307 | return netNode()->nextNode()->runtime()->assignedInterface(); |
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 | |||
@@ -3,16 +3,18 @@ | |||
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 |
12 | class AsDevice; | 14 | class AsDevice; |
13 | class AsLine; | 15 | class AsLine; |
14 | class AsConnection; | 16 | class AsConnection; |
15 | class AsFullSetup; | 17 | class AsFullSetup; |
16 | 18 | ||
17 | // needed for plugin creation function | 19 | // needed for plugin creation function |
18 | #include <qlist.h> | 20 | #include <qlist.h> |
@@ -278,17 +280,17 @@ public : | |||
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 ; } |
@@ -300,18 +302,25 @@ public : | |||
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 ); |
@@ -347,28 +356,21 @@ public : | |||
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 | |||
361 | private : | 364 | private : |
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 |
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 | |||
@@ -15,14 +15,14 @@ HEADERS = netnode.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 |
23 | LIBS += -lqpe -lopiecore2 | 23 | LIBS += -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 | ||
28 | include ( $(OPIEDIR)/include.pro ) | 28 | include ( $(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 | |||
@@ -18,16 +18,18 @@ | |||
18 | // single resources instance | 18 | // single resources instance |
19 | TheNSResources * _NSResources = 0; | 19 | TheNSResources * _NSResources = 0; |
20 | 20 | ||
21 | TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), | 21 | TheNSResources::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 | ||
@@ -75,30 +77,41 @@ TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), | |||
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 | ||
86 | TheNSResources::~TheNSResources( void ) { | 87 | TheNSResources::~TheNSResources( void ) { |
87 | delete TheSystem; | 88 | delete TheSystem; |
88 | } | 89 | } |
89 | 90 | ||
91 | void 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 | */ |
95 | void TheNSResources::findAvailableNetNodes(const QString &path){ | 107 | void 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 ); |
@@ -122,16 +135,37 @@ void TheNSResources::findAvailableNetNodes(const QString &path){ | |||
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 | ||
144 | int 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 | */ |
136 | bool TheNSResources::loadNetNode( | 170 | bool TheNSResources::loadNetNode( |
137 | const QString &pluginFileName, const QString &resolveString){ | 171 | const QString &pluginFileName, const QString &resolveString){ |
@@ -162,28 +196,29 @@ bool TheNSResources::loadNetNode( | |||
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 | ||
177 | QPixmap TheNSResources::getPixmap( const QString & QS ) { | 210 | QPixmap 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 | ||
184 | QString TheNSResources::tr( const char * s ) { | 219 | QString TheNSResources::tr( const char * s ) { |
185 | return qApp->translate( "resource", s ); | 220 | return qApp->translate( "resource", s ); |
186 | } | 221 | } |
187 | 222 | ||
188 | const QString & TheNSResources::netNode2Name( const char * s ) { | 223 | const QString & TheNSResources::netNode2Name( const char * s ) { |
189 | return NodeTypeNameMap[s]; | 224 | return NodeTypeNameMap[s]; |
@@ -220,30 +255,32 @@ void TheNSResources::removeConnection( const QString & N ) { | |||
220 | } | 255 | } |
221 | ConnectionsMap.remove( N ); | 256 | ConnectionsMap.remove( N ); |
222 | } | 257 | } |
223 | 258 | ||
224 | NodeCollection * TheNSResources::findConnection( const QString & S ) { | 259 | NodeCollection * TheNSResources::findConnection( const QString & S ) { |
225 | return ConnectionsMap[ S ]; | 260 | return ConnectionsMap[ S ]; |
226 | } | 261 | } |
227 | 262 | ||
263 | /* | ||
228 | void TheNSResources::renumberConnections( void ) { | 264 | void 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 | ||
243 | typedef struct EnvVars { | 280 | typedef 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 | ||
@@ -258,113 +295,150 @@ static EnvVar_t EV[] = { | |||
258 | AnEV( "SHELL=" ), | 295 | AnEV( "SHELL=" ), |
259 | { NULL, 0 } | 296 | { NULL, 0 } |
260 | }; | 297 | }; |
261 | 298 | ||
262 | void TheNSResources::detectCurrentUser( void ) { | 299 | void 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 | |||
@@ -41,19 +41,23 @@ typedef QDict<SystemFile> Name2SystemFile_t; | |||
41 | 41 | ||
42 | class TheNSResources { | 42 | class TheNSResources { |
43 | 43 | ||
44 | public : | 44 | public : |
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); |
@@ -83,17 +87,16 @@ public : | |||
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; } |
@@ -114,15 +117,15 @@ private : | |||
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 | ||
125 | extern TheNSResources * _NSResources; | 128 | extern 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 | |||
@@ -3,25 +3,27 @@ | |||
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 | ||
26 | static char Dig2Hex[] = { | 28 | static char Dig2Hex[] = { |
27 | '0', '1', '2', '3', | 29 | '0', '1', '2', '3', |
@@ -30,55 +32,80 @@ static char Dig2Hex[] = { | |||
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 | ||
38 | System::System( void ) : ProbedInterfaces() { | 40 | System::System( void ) : QObject(), ProbedInterfaces() { |
39 | probeInterfaces(); | 41 | probeInterfaces(); |
40 | } | 42 | } |
41 | 43 | ||
42 | System::~System( void ) { | 44 | System::~System( void ) { |
43 | if( ProcDevNet ) | 45 | if( ProcDevNet ) |
44 | delete ProcDevNet; | 46 | delete ProcDevNet; |
45 | } | 47 | } |
46 | 48 | ||
47 | int System::runAsRoot( const QString & S ) { | 49 | int 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 | ||
81 | void System::refreshStatistics( InterfaceInfo & I ) { | 108 | void System::refreshStatistics( InterfaceInfo & I ) { |
82 | if( ! ProcDevNet ) { | 109 | if( ! ProcDevNet ) { |
83 | return; | 110 | return; |
84 | } | 111 | } |
@@ -193,17 +220,17 @@ void System::probeInterfaces( void ) { | |||
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); |
@@ -220,18 +247,18 @@ void System::probeInterfaces( void ) { | |||
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", |
@@ -288,17 +315,17 @@ void System::probeInterfaces( void ) { | |||
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; |
@@ -318,26 +345,26 @@ void System::probeInterfaces( void ) { | |||
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 | ||
330 | void System::execAsUser( QString & Cmd, char * argv[] ) { | 357 | void 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 *) * |
@@ -346,10 +373,45 @@ void System::execAsUser( QString & Cmd, char * argv[] ) { | |||
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> | ||
385 | static FILE * logf = 0; | ||
386 | |||
387 | void 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 | |||
411 | void 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,14 +1,16 @@ | |||
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 | ||
8 | class ANetNodeInstance; | 10 | class ANetNodeInstance; |
9 | class QFile; | 11 | class QFile; |
10 | 12 | ||
11 | class InterfaceInfo { | 13 | class InterfaceInfo { |
12 | 14 | ||
13 | public : | 15 | public : |
14 | 16 | ||
@@ -42,17 +44,19 @@ public : | |||
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 | ||
50 | class System { | 52 | class System : public QObject { |
53 | |||
54 | Q_OBJECT | ||
51 | 55 | ||
52 | public : | 56 | public : |
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; } |
@@ -66,16 +70,21 @@ public : | |||
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 | ||
78 | signals : | ||
79 | |||
80 | void lineFromCommand( const QString & S ); | ||
81 | |||
74 | private : | 82 | private : |
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 | |||
@@ -6,34 +6,34 @@ | |||
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"> |
@@ -297,80 +297,16 @@ | |||
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> |
@@ -480,17 +416,17 @@ | |||
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> |
@@ -609,16 +545,22 @@ | |||
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> |
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 | |||
@@ -12,17 +12,17 @@ | |||
12 | static QString CfgFile; | 12 | static QString CfgFile; |
13 | 13 | ||
14 | NetworkSettingsData::NetworkSettingsData( void ) { | 14 | NetworkSettingsData::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 |
@@ -74,21 +74,21 @@ void NetworkSettingsData::loadSettings( void ) { | |||
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(); |
@@ -146,17 +146,17 @@ QString 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 | ||
@@ -224,17 +224,17 @@ QString NetworkSettingsData::generateSettings( bool ForceReq ) { | |||
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; |
@@ -276,24 +276,16 @@ QString NetworkSettingsData::generateSettings( bool ForceReq ) { | |||
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 |
@@ -316,17 +308,17 @@ QString NetworkSettingsData::generateSettings( bool ForceReq ) { | |||
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>" ). |
@@ -400,17 +392,17 @@ QList<NodeCollection> NetworkSettingsData::collectPossible( const char * Interfa | |||
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 | /* |
@@ -421,18 +413,17 @@ QList<NodeCollection> NetworkSettingsData::collectPossible( const char * Interfa | |||
421 | 413 | ||
422 | bool NetworkSettingsData::canStart( const char * Interface ) { | 414 | bool 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; |
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 | |||
@@ -6,18 +6,18 @@ | |||
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> |
@@ -54,68 +54,138 @@ | |||
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"> |
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 | |||
@@ -2,37 +2,41 @@ | |||
2 | #include "profile_NNI.h" | 2 | #include "profile_NNI.h" |
3 | #include "profile_NN.h" | 3 | #include "profile_NN.h" |
4 | 4 | ||
5 | AProfile::AProfile( ProfileNetNode * PNN ) : ANetNodeInstance( PNN ) { | 5 | AProfile::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 | ||
14 | void AProfile::setSpecificAttribute( QString & Attr, QString & Value ) { | 15 | void 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 | ||
27 | void AProfile::saveSpecificAttribute( QTextStream & TS ) { | 30 | void 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 | ||
34 | QWidget * AProfile::edit( QWidget * parent ) { | 38 | QWidget * 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 | } |
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 | |||
@@ -5,11 +5,12 @@ | |||
5 | typedef struct ProfileData { | 5 | typedef 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 | |||
@@ -53,26 +53,28 @@ ProfileEdit::ProfileEdit( QWidget * Parent, ANetNodeInstance * TNNI ) : | |||
53 | 53 | ||
54 | QString ProfileEdit::acceptable( void ) { | 54 | QString ProfileEdit::acceptable( void ) { |
55 | return QString(); | 55 | return QString(); |
56 | } | 56 | } |
57 | 57 | ||
58 | void ProfileEdit::showData( ProfileData_t & Data ) { | 58 | void 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 | ||
66 | bool ProfileEdit::commit( ProfileData_t & Data ) { | 67 | bool 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 | ||
77 | void ProfileEdit::SLOT_Refresh( void ) { | 79 | void ProfileEdit::SLOT_Refresh( void ) { |
78 | InterfaceInfo * II = Dev->assignedInterface(); | 80 | InterfaceInfo * II = Dev->assignedInterface(); |
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,23 +1,25 @@ | |||
1 | #include <resources.h> | 1 | #include <resources.h> |
2 | 2 | ||
3 | #include "profilerun.h" | 3 | #include "profilerun.h" |
4 | 4 | ||
5 | void ProfileRun::detectState( NodeCollection * NC ) { | 5 | void 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 | ||
15 | bool ProfileRun::setState( NodeCollection * NC, Action_t A, bool ) { | 17 | bool 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 |
@@ -36,17 +38,17 @@ bool ProfileRun::setState( NodeCollection * NC, Action_t A, bool ) { | |||
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 | ||
47 | bool ProfileRun::canSetState( State_t Curr, Action_t A ) { | 49 | bool 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 |
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 | |||
@@ -18,14 +18,18 @@ public : | |||
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 | |||
26 | private : | 30 | private : |
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 | |||
@@ -7,39 +7,41 @@ | |||
7 | void USBRun::detectState( NodeCollection * NC ) { | 7 | void 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 | } |
@@ -48,34 +50,34 @@ void USBRun::detectState( NodeCollection * NC ) { | |||
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 | ||
78 | bool USBRun::setState( NodeCollection * NC, Action_t A, bool ) { | 80 | bool 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 ) { |
@@ -89,17 +91,17 @@ bool USBRun::setState( NodeCollection * NC, Action_t A, bool ) { | |||
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 ... |