29 files changed, 818 insertions, 300 deletions
diff --git a/noncore/settings/networksettings2/bluetooth/bluetooth.pro b/noncore/settings/networksettings2/bluetooth/bluetooth.pro index 180bda9..2e1e138 100644 --- a/noncore/settings/networksettings2/bluetooth/bluetooth.pro +++ b/noncore/settings/networksettings2/bluetooth/bluetooth.pro | |||
@@ -1,21 +1,22 @@ | |||
1 | TEMPLATE = lib | 1 | TEMPLATE = lib |
2 | CONFIG += qt warn_on release | 2 | CONFIG += qt warn_on release |
3 | DESTDIR = $(OPIEDIR)/plugins/networksettings2 | 3 | DESTDIR = $(OPIEDIR)/plugins/networksettings2 |
4 | HEADERS = bluetooth_NN.h \ | 4 | HEADERS = bluetooth_NN.h \ |
5 | bluetoothBNEP_NNI.h \ | 5 | bluetoothBNEP_NNI.h \ |
6 | bluetoothRFCOMM_NNI.h \ | 6 | bluetoothRFCOMM_NNI.h \ |
7 | bluetoothBNEPedit.h \ | 7 | bluetoothBNEPedit.h \ |
8 | bluetoothRFCOMMedit.h | 8 | bluetoothRFCOMMedit.h |
9 | SOURCES = bluetooth_NN.cpp \ | 9 | SOURCES = bluetooth_NN.cpp \ |
10 | bluetoothBNEP_NNI.cpp \ | 10 | bluetoothBNEP_NNI.cpp \ |
11 | bluetoothRFCOMM_NNI.cpp \ | 11 | bluetoothRFCOMM_NNI.cpp \ |
12 | bluetoothBNEPedit.cpp \ | 12 | bluetoothBNEPedit.cpp \ |
13 | bluetoothBNEPrun.cpp \ | ||
13 | bluetoothRFCOMMedit.cpp | 14 | bluetoothRFCOMMedit.cpp |
14 | INCLUDEPATH+= $(OPIEDIR)/include ../ ../networksettings2 | 15 | INCLUDEPATH+= $(OPIEDIR)/include ../ ../networksettings2 |
15 | DEPENDPATH+= $(OPIEDIR)/include ../ ../networksettings2 | 16 | DEPENDPATH+= $(OPIEDIR)/include ../ ../networksettings2 |
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 | ||
21 | include ( $(OPIEDIR)/include.pro ) | 22 | include ( $(OPIEDIR)/include.pro ) |
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp index 73312c6..d8420b9 100644 --- a/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp +++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp | |||
@@ -1,37 +1,50 @@ | |||
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 ) ) |
28 | setModified( 1 ); | 41 | setModified( 1 ); |
29 | } | 42 | } |
30 | 43 | ||
31 | bool ABluetoothBNEP::hasDataFor( const QString & ) { | 44 | bool ABluetoothBNEP::hasDataFor( const QString & ) { |
32 | return 0; | 45 | return 0; |
33 | } | 46 | } |
34 | 47 | ||
35 | bool ABluetoothBNEP::generateDataForCommonFile( SystemFile & , long ){ | 48 | bool ABluetoothBNEP::generateDataForCommonFile( SystemFile & , long ){ |
36 | return 0; | 49 | return 0; |
37 | } | 50 | } |
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 | |||
@@ -1,208 +1,208 @@ | |||
1 | #include <GUIUtils.h> | 1 | #include <GUIUtils.h> |
2 | #include <resources.h> | 2 | #include <resources.h> |
3 | #include <qarray.h> | 3 | #include <qarray.h> |
4 | #include <qlistview.h> | 4 | #include <qlistview.h> |
5 | #include <qcheckbox.h> | 5 | #include <qcheckbox.h> |
6 | #include <qheader.h> | 6 | #include <qheader.h> |
7 | #include <qregexp.h> | 7 | #include <qregexp.h> |
8 | 8 | ||
9 | #include "lancardedit.h" | 9 | #include "lancardedit.h" |
10 | #include "lancard_NN.h" | 10 | #include "lancard_NN.h" |
11 | #include "lancard_NNI.h" | 11 | #include "lancard_NNI.h" |
12 | 12 | ||
13 | LanCardEdit::LanCardEdit( QWidget * Parent ) : LanCardGUI( Parent ){ | 13 | LanCardEdit::LanCardEdit( QWidget * Parent ) : LanCardGUI( Parent ){ |
14 | LanCards_LV->header()->hide(); | 14 | LanCards_LV->header()->hide(); |
15 | 15 | ||
16 | } | 16 | } |
17 | 17 | ||
18 | QString LanCardEdit::acceptable( void ) { | 18 | QString LanCardEdit::acceptable( void ) { |
19 | return QString(); | 19 | return QString(); |
20 | } | 20 | } |
21 | 21 | ||
22 | bool LanCardEdit::commit( LanCardData & Data ) { | 22 | bool LanCardEdit::commit( LanCardData & Data ) { |
23 | bool SM = 0; | 23 | bool SM = 0; |
24 | CBM( Data.AnyLanCard, AnyCard_CB, SM ); | 24 | CBM( Data.AnyLanCard, AnyCard_CB, SM ); |
25 | 25 | ||
26 | if( ! Data.AnyLanCard ) { | 26 | if( ! Data.AnyLanCard ) { |
27 | // take copy for orig list | 27 | // take copy for orig list |
28 | QStringList NewList( Data.HWAddresses ); | 28 | QStringList NewList( Data.HWAddresses ); |
29 | 29 | ||
30 | // update HWAddresses to new state | 30 | // update HWAddresses to new state |
31 | // remove item also from NewList | 31 | // remove item also from NewList |
32 | int idx; | 32 | int idx; |
33 | QCheckListItem * CLI = (QCheckListItem *)LanCards_LV->firstChild(); | 33 | QCheckListItem * CLI = (QCheckListItem *)LanCards_LV->firstChild(); |
34 | while( CLI ) { | 34 | while( CLI ) { |
35 | idx = Data.HWAddresses.findIndex(CLI->text(0)); | 35 | idx = Data.HWAddresses.findIndex(CLI->text(0)); |
36 | if( CLI->isOn() ) { | 36 | if( CLI->isOn() ) { |
37 | if( idx < 0 ) { | 37 | if( idx < 0 ) { |
38 | // should be in list | 38 | // should be in list |
39 | Data.HWAddresses.append( CLI->text(0) ); | 39 | Data.HWAddresses.append( CLI->text(0) ); |
40 | SM = 1; | 40 | SM = 1; |
41 | } | 41 | } |
42 | } else { | 42 | } else { |
43 | // should not be in list | 43 | // should not be in list |
44 | if( idx >= 0 ) { | 44 | if( idx >= 0 ) { |
45 | NewList.remove( CLI->text(0) ); | 45 | NewList.remove( CLI->text(0) ); |
46 | Data.HWAddresses.remove( CLI->text(0) ); | 46 | Data.HWAddresses.remove( CLI->text(0) ); |
47 | SM = 1; | 47 | SM = 1; |
48 | } | 48 | } |
49 | } | 49 | } |
50 | CLI = (QCheckListItem *)CLI->nextSibling(); | 50 | CLI = (QCheckListItem *)CLI->nextSibling(); |
51 | } | 51 | } |
52 | 52 | ||
53 | // if newlist still contains items. it were items | 53 | // if newlist still contains items. it were items |
54 | // that were checked but no longer are present in the system | 54 | // that were checked but no longer are present in the system |
55 | SM |= ( NewList.count() > 0 ) ; | 55 | SM |= ( NewList.count() > 0 ) ; |
56 | } | 56 | } |
57 | return SM; | 57 | return SM; |
58 | } | 58 | } |
59 | 59 | ||
60 | void LanCardEdit::showData( ALanCard * LC ) { | 60 | void LanCardEdit::showData( ALanCard * LC ) { |
61 | NNI = LC; | 61 | NNI = LC; |
62 | LanCardData & Data = *((LanCardData *)LC->data()); | 62 | LanCardData & Data = *((LanCardData *)LC->data()); |
63 | 63 | ||
64 | AnyCard_CB->setChecked( Data.AnyLanCard ); | 64 | AnyCard_CB->setChecked( Data.AnyLanCard ); |
65 | 65 | ||
66 | // load all cards | 66 | // load all cards |
67 | populateList(); | 67 | populateList(); |
68 | 68 | ||
69 | // set checks | 69 | // set checks |
70 | QCheckListItem * CLI = (QCheckListItem *)LanCards_LV->firstChild(); | 70 | QCheckListItem * CLI = (QCheckListItem *)LanCards_LV->firstChild(); |
71 | while( CLI ) { | 71 | while( CLI ) { |
72 | CLI->setOn( Data.HWAddresses.findIndex(CLI->text(0)) >= 0 ); | 72 | CLI->setOn( Data.HWAddresses.findIndex(CLI->text(0)) >= 0 ); |
73 | CLI = (QCheckListItem *)CLI->nextSibling(); | 73 | CLI = (QCheckListItem *)CLI->nextSibling(); |
74 | } | 74 | } |
75 | } | 75 | } |
76 | 76 | ||
77 | // load all known cards in list | 77 | // load all known cards in list |
78 | void LanCardEdit::populateList( void ) { | 78 | void LanCardEdit::populateList( void ) { |
79 | LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass(); | 79 | LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass(); |
80 | QCheckListItem * CLI; | 80 | QCheckListItem * CLI; |
81 | bool Found; | 81 | bool Found; |
82 | 82 | ||
83 | LanCards_LV->clear(); | 83 | LanCards_LV->clear(); |
84 | 84 | ||
85 | for( QStringList::Iterator it = NN->addressesOfNIC().begin(); | 85 | for( QStringList::Iterator it = NN->addressesOfNIC().begin(); |
86 | it != NN->addressesOfNIC().end(); | 86 | it != NN->addressesOfNIC().end(); |
87 | ++it ) { | 87 | ++it ) { |
88 | CLI = new QCheckListItem( LanCards_LV, (*it), QCheckListItem::CheckBox ); | 88 | CLI = new QCheckListItem( LanCards_LV, (*it), QCheckListItem::CheckBox ); |
89 | 89 | ||
90 | // check interfaces and see if this card is present | 90 | // check interfaces and see if this card is present |
91 | Found = 0; | 91 | Found = 0; |
92 | for( QDictIterator<InterfaceInfo> NIt(NSResources->system().interfaces()); | 92 | for( QDictIterator<InterfaceInfo> NIt(NSResources->system().interfaces()); |
93 | NIt.current(); | 93 | NIt.current(); |
94 | ++NIt ) { | 94 | ++NIt ) { |
95 | if( NIt.current()->MACAddress == (*it) ) { | 95 | if( NIt.current()->MACAddress == (*it) ) { |
96 | Found = 1; | 96 | Found = 1; |
97 | break; | 97 | break; |
98 | } | 98 | } |
99 | } | 99 | } |
100 | 100 | ||
101 | CLI->setPixmap( 0, NSResources->getPixmap( | 101 | CLI->setPixmap( 0, NSResources->getPixmap( |
102 | (Found) ? "add" : "remove" ) ); | 102 | (Found) ? "add" : "remove" ) ); |
103 | } | 103 | } |
104 | } | 104 | } |
105 | 105 | ||
106 | // rescan system for new cards | 106 | // rescan system for new cards |
107 | void LanCardEdit::SLOT_ScanCards( void ) { | 107 | void LanCardEdit::SLOT_ScanCards( void ) { |
108 | LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass(); | 108 | LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass(); |
109 | 109 | ||
110 | // add any NIC that is new and matches our interfacename | 110 | // add any NIC that is new and matches our interfacename |
111 | System & S = NSResources->system(); | 111 | System & S = NSResources->system(); |
112 | QRegExp R( "eth[0-9]" ); | 112 | QRegExp R( "eth[0-9]" ); |
113 | // populate with all lancards in system | 113 | // populate with all lancards in system |
114 | for( QDictIterator<InterfaceInfo> It(S.interfaces()); | 114 | for( QDictIterator<InterfaceInfo> It(S.interfaces()); |
115 | It.current(); | 115 | It.current(); |
116 | ++It ) { | 116 | ++It ) { |
117 | fprintf( stderr, "TEST %s %s\n", | 117 | Log(( "TEST %s %s\n", |
118 | It.current()->Name.latin1(), | 118 | It.current()->Name.latin1(), |
119 | It.current()->MACAddress.latin1() ); | 119 | It.current()->MACAddress.latin1() )); |
120 | if( R.match( It.current()->Name ) >= 0 && | 120 | if( R.match( It.current()->Name ) >= 0 && |
121 | ( It.current()->CardType == ARPHRD_ETHER | 121 | ( It.current()->CardType == ARPHRD_ETHER |
122 | #ifdef ARPHRD_IEEE1394 | 122 | #ifdef ARPHRD_IEEE1394 |
123 | || It.current()->CardType == ARPHRD_IEEE1394 | 123 | || It.current()->CardType == ARPHRD_IEEE1394 |
124 | #endif | 124 | #endif |
125 | ) | 125 | ) |
126 | ) { | 126 | ) { |
127 | // old item ? | 127 | // old item ? |
128 | QCheckListItem * CLI = | 128 | QCheckListItem * CLI = |
129 | (QCheckListItem *)LanCards_LV->firstChild(); | 129 | (QCheckListItem *)LanCards_LV->firstChild(); |
130 | while( CLI ) { | 130 | while( CLI ) { |
131 | if( CLI->text(0) == It.current()->MACAddress ) { | 131 | if( CLI->text(0) == It.current()->MACAddress ) { |
132 | break; | 132 | break; |
133 | } | 133 | } |
134 | CLI = (QCheckListItem *)CLI->nextSibling(); | 134 | CLI = (QCheckListItem *)CLI->nextSibling(); |
135 | } | 135 | } |
136 | 136 | ||
137 | if( ! CLI ) { | 137 | if( ! CLI ) { |
138 | // new item | 138 | // new item |
139 | CLI = new QCheckListItem( LanCards_LV, | 139 | CLI = new QCheckListItem( LanCards_LV, |
140 | It.current()->MACAddress, | 140 | It.current()->MACAddress, |
141 | QCheckListItem::CheckBox ); | 141 | QCheckListItem::CheckBox ); |
142 | } | 142 | } |
143 | 143 | ||
144 | // mark present | 144 | // mark present |
145 | CLI->setPixmap( 0, NSResources->getPixmap( | 145 | CLI->setPixmap( 0, NSResources->getPixmap( |
146 | "add" ) ); | 146 | "add" ) ); |
147 | 147 | ||
148 | if( NN->addressesOfNIC().findIndex( It.current()->MACAddress) < 0 ) { | 148 | if( NN->addressesOfNIC().findIndex( It.current()->MACAddress) < 0 ) { |
149 | // new | 149 | // new |
150 | NN->addressesOfNIC().append( It.current()->MACAddress ); | 150 | NN->addressesOfNIC().append( It.current()->MACAddress ); |
151 | } | 151 | } |
152 | } | 152 | } |
153 | } | 153 | } |
154 | 154 | ||
155 | } | 155 | } |
156 | 156 | ||
157 | // remove all cards that are not present -> flagged with 'remove' | 157 | // remove all cards that are not present -> flagged with 'remove' |
158 | // and unchecked | 158 | // and unchecked |
159 | void LanCardEdit::SLOT_RemoveUnknown( void ) { | 159 | void LanCardEdit::SLOT_RemoveUnknown( void ) { |
160 | QArray<QCheckListItem *> AllItems; | 160 | QArray<QCheckListItem *> AllItems; |
161 | 161 | ||
162 | LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass(); | 162 | LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass(); |
163 | 163 | ||
164 | QCheckListItem * CLI = (QCheckListItem *)LanCards_LV->firstChild(); | 164 | QCheckListItem * CLI = (QCheckListItem *)LanCards_LV->firstChild(); |
165 | while( CLI ) { | 165 | while( CLI ) { |
166 | AllItems.resize( AllItems.size()+1 ); | 166 | AllItems.resize( AllItems.size()+1 ); |
167 | AllItems[ AllItems.size()-1 ] = CLI; | 167 | AllItems[ AllItems.size()-1 ] = CLI; |
168 | CLI = (QCheckListItem *)CLI->nextSibling(); | 168 | CLI = (QCheckListItem *)CLI->nextSibling(); |
169 | } | 169 | } |
170 | 170 | ||
171 | // force update of system | 171 | // force update of system |
172 | System & S = NSResources->system(); | 172 | System & S = NSResources->system(); |
173 | S.probeInterfaces(); | 173 | S.probeInterfaces(); |
174 | 174 | ||
175 | // add any NIC that is new and matches our interfacename | 175 | // add any NIC that is new and matches our interfacename |
176 | QRegExp R( "eth[0-9]" ); | 176 | QRegExp R( "eth[0-9]" ); |
177 | 177 | ||
178 | 178 | ||
179 | for( QDictIterator<InterfaceInfo> It(S.interfaces()); | 179 | for( QDictIterator<InterfaceInfo> It(S.interfaces()); |
180 | It.current(); | 180 | It.current(); |
181 | ++It ) { | 181 | ++It ) { |
182 | if( R.match( It.current()->Name ) >= 0 && | 182 | if( R.match( It.current()->Name ) >= 0 && |
183 | ( It.current()->CardType == ARPHRD_ETHER | 183 | ( It.current()->CardType == ARPHRD_ETHER |
184 | #ifdef ARPHRD_IEEE1394 | 184 | #ifdef ARPHRD_IEEE1394 |
185 | || It.current()->CardType == ARPHRD_IEEE1394 | 185 | || It.current()->CardType == ARPHRD_IEEE1394 |
186 | #endif | 186 | #endif |
187 | ) | 187 | ) |
188 | ) { | 188 | ) { |
189 | 189 | ||
190 | for ( unsigned i = 0; i< AllItems.size(); i++ ) { | 190 | for ( unsigned i = 0; i< AllItems.size(); i++ ) { |
191 | if( AllItems[i] && | 191 | if( AllItems[i] && |
192 | AllItems[i]->text(0) == It.current()->MACAddress ) { | 192 | AllItems[i]->text(0) == It.current()->MACAddress ) { |
193 | AllItems[i] = 0; | 193 | AllItems[i] = 0; |
194 | break; | 194 | break; |
195 | } | 195 | } |
196 | } | 196 | } |
197 | } | 197 | } |
198 | } | 198 | } |
199 | 199 | ||
200 | // AllItems now contains all cards NOT present | 200 | // AllItems now contains all cards NOT present |
201 | // remove all items non null and not ON | 201 | // remove all items non null and not ON |
202 | for ( unsigned i = 0; i< AllItems.size(); i++ ) { | 202 | for ( unsigned i = 0; i< AllItems.size(); i++ ) { |
203 | if( AllItems[i] && ! AllItems[i]->isOn() ) { | 203 | if( AllItems[i] && ! AllItems[i]->isOn() ) { |
204 | NN->addressesOfNIC().remove( AllItems[i]->text(0) ); | 204 | NN->addressesOfNIC().remove( AllItems[i]->text(0) ); |
205 | delete AllItems[i]; | 205 | delete AllItems[i]; |
206 | } | 206 | } |
207 | } | 207 | } |
208 | } | 208 | } |
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 | |||
@@ -1,133 +1,140 @@ | |||
1 | #include "nsdata.h" | 1 | #include "nsdata.h" |
2 | #include "activateprofile.h" | 2 | #include "activateprofile.h" |
3 | #include "networksettings.h" | 3 | #include "networksettings.h" |
4 | 4 | ||
5 | #include <qpe/qpeapplication.h> | 5 | #include <qpe/qpeapplication.h> |
6 | 6 | ||
7 | #include <opie2/oapplicationfactory.h> | 7 | #include <opie2/oapplicationfactory.h> |
8 | using namespace Opie::Core; | 8 | using namespace Opie::Core; |
9 | 9 | ||
10 | #ifdef GONE | 10 | #ifdef GONE |
11 | 11 | ||
12 | OPIE_EXPORT_APP( OApplicationFactory<NetworkSettings> ) | 12 | OPIE_EXPORT_APP( OApplicationFactory<NetworkSettings> ) |
13 | 13 | ||
14 | #else | 14 | #else |
15 | 15 | ||
16 | // just standard GUI | 16 | // just standard GUI |
17 | #define ACT_GUI 0 | 17 | #define ACT_GUI 0 |
18 | // used by interfaces to request for allow of up/down | 18 | // used by interfaces to request for allow of up/down |
19 | #define ACT_REQUEST 1 | 19 | #define ACT_REQUEST 1 |
20 | // regenerate config files | 20 | // regenerate config files |
21 | #define ACT_REGEN 2 | 21 | #define ACT_REGEN 2 |
22 | // used by interfaces to request user prompt | 22 | // used by interfaces to request user prompt |
23 | #define ACT_PROMPT 3 | 23 | #define ACT_PROMPT 3 |
24 | 24 | ||
25 | int main( int argc, char * argv[] ) { | 25 | int main( int argc, char * argv[] ) { |
26 | int rv = 0; | 26 | int rv = 0; |
27 | int Action = ACT_GUI; | 27 | int Action = ACT_GUI; |
28 | // could be overruled by -qws | 28 | // could be overruled by -qws |
29 | QApplication::Type GuiType = QApplication::GuiClient; | 29 | QApplication::Type GuiType = QApplication::GuiClient; |
30 | 30 | ||
31 | #ifdef _WS_QWS_ | 31 | #ifdef _WS_QWS_ |
32 | QPEApplication * TheApp; | 32 | QPEApplication * TheApp; |
33 | #else | 33 | #else |
34 | QApplication * TheApp; | 34 | QApplication * TheApp; |
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | for ( int i = 1; i < argc; i ++ ) { | 37 | for ( int i = 1; i < argc; i ++ ) { |
38 | int rmv; | 38 | int rmv; |
39 | rmv = 0; | 39 | rmv = 0; |
40 | if( strcmp( argv[i], "--regen" ) == 0 ) { | 40 | if( strcmp( argv[i], "--regen" ) == 0 ) { |
41 | Action = ACT_REGEN; | 41 | Action = ACT_REGEN; |
42 | GuiType = QApplication::Tty; | 42 | GuiType = QApplication::Tty; |
43 | rmv = 1; | 43 | rmv = 1; |
44 | } else if( strcmp( argv[i], "--prompt" ) == 0 ) { | 44 | } else if( strcmp( argv[i], "--prompt" ) == 0 ) { |
45 | Action = ACT_PROMPT; | 45 | Action = ACT_PROMPT; |
46 | rmv = 1; | 46 | rmv = 1; |
47 | } | 47 | } |
48 | if( rmv ) { | 48 | if( rmv ) { |
49 | memmove( argv+i, argv+i+rmv, | 49 | memmove( argv+i, argv+i+rmv, |
50 | sizeof( char * ) * (argc-i-rmv) ); | 50 | sizeof( char * ) * (argc-i-rmv) ); |
51 | i --; | 51 | i --; |
52 | argc -= rmv; | 52 | argc -= rmv; |
53 | } | 53 | } |
54 | } | 54 | } |
55 | 55 | ||
56 | if( strstr( argv[0], "-request" ) ) { | 56 | if( strstr( argv[0], "-request" ) ) { |
57 | // called from system to request something | 57 | // called from system to request something |
58 | GuiType = QApplication::Tty; | 58 | GuiType = QApplication::Tty; |
59 | Action = ACT_REQUEST; | 59 | Action = ACT_REQUEST; |
60 | } | 60 | } |
61 | 61 | ||
62 | // Start Qt | 62 | // Start Qt |
63 | #ifdef _WS_QWS_ | 63 | #ifdef _WS_QWS_ |
64 | // because QPEApplication does not handle GuiType well | 64 | // because QPEApplication does not handle GuiType well |
65 | if( GuiType == QApplication::Tty ) { | 65 | if( GuiType == QApplication::Tty ) { |
66 | // this cast is NOT correct but we do not use | 66 | // this cast is NOT correct but we do not use |
67 | // TheApp anymore ... | 67 | // TheApp anymore ... |
68 | TheApp = (QPEApplication *)new QApplication( argc, argv, GuiType ); | 68 | TheApp = (QPEApplication *)new QApplication( argc, argv, GuiType ); |
69 | } else { | 69 | } else { |
70 | TheApp = new QPEApplication( argc, argv, GuiType ); | 70 | TheApp = new QPEApplication( argc, argv, GuiType ); |
71 | } | 71 | } |
72 | #else | 72 | #else |
73 | TheApp = new QApplication( argc, argv, GuiType ); | 73 | TheApp = new QApplication( argc, argv, GuiType ); |
74 | #endif | 74 | #endif |
75 | 75 | ||
76 | // init qt with app widget | 76 | // init qt with app widget |
77 | 77 | ||
78 | switch( Action ) { | 78 | switch( Action ) { |
79 | case ACT_REQUEST : | 79 | case ACT_REQUEST : |
80 | { NetworkSettingsData NS; | 80 | { NetworkSettingsData NS; |
81 | Log(("ACT_REQUEST\n")); | ||
81 | if( NS.canStart( argv[1] ) ) { | 82 | if( NS.canStart( argv[1] ) ) { |
82 | QString S; | 83 | QString S; |
84 | Log(("NEED FOR PROMPT\n" )); | ||
83 | S.sprintf( QPEApplication::qpeDir()+ | 85 | S.sprintf( QPEApplication::qpeDir()+ |
84 | "/bin/networksettings2" ); | 86 | "/bin/networksettings2" ); |
85 | char * MyArgv[4]; | 87 | char * MyArgv[4]; |
86 | MyArgv[0] = "networksettings2"; | 88 | MyArgv[0] = "networksettings2"; |
87 | MyArgv[1] = "--prompt"; | 89 | MyArgv[1] = "--prompt"; |
88 | MyArgv[2] = argv[1]; | 90 | MyArgv[2] = argv[1]; |
89 | MyArgv[3] = NULL; | 91 | MyArgv[3] = NULL; |
90 | NSResources->system().execAsUser( S, MyArgv ); | 92 | NSResources->system().execAsUser( S, MyArgv ); |
91 | // if we come here , failed | 93 | // if we come here , failed |
92 | printf( "%s-cNN-disallowed", argv[1] ); | 94 | printf( "%s-cNN-disallowed", argv[1] ); |
93 | } | 95 | } |
94 | } | 96 | } |
95 | break; | 97 | break; |
96 | case ACT_REGEN : | 98 | case ACT_REGEN : |
97 | { NetworkSettingsData NS; | 99 | { NetworkSettingsData NS; |
100 | Log(("REGEN\n" )); | ||
98 | // regen returns 0 if OK | 101 | // regen returns 0 if OK |
99 | rv = (NS.regenerate()) ? 1 : 0; | 102 | rv = (NS.regenerate()) ? 1 : 0; |
100 | } | 103 | } |
101 | break; | 104 | break; |
102 | case ACT_PROMPT : | 105 | case ACT_PROMPT : |
103 | { ActivateProfile AP(argv[1]); | 106 | { ActivateProfile AP(argv[1]); |
107 | Log(("PROMPT\n" )); | ||
104 | if( AP.exec() == QDialog::Accepted ) { | 108 | if( AP.exec() == QDialog::Accepted ) { |
105 | printf( "%s-c%ld-allowed", argv[1], AP.selectedProfile() ); | 109 | printf( "%s-c%ld-allowed", argv[1], AP.selectedProfile() ); |
106 | } else { | 110 | } else { |
107 | printf( "%s-cNN-disallowed", argv[1] ); | 111 | printf( "%s-cNN-disallowed", argv[1] ); |
108 | } | 112 | } |
109 | } | 113 | } |
110 | break; | 114 | break; |
111 | case ACT_GUI : | 115 | case ACT_GUI : |
112 | { QWidget * W = new NetworkSettings(0); | 116 | { QWidget * W = new NetworkSettings(0); |
117 | Log(("GUI\n" )); | ||
113 | TheApp->setMainWidget( W ); | 118 | TheApp->setMainWidget( W ); |
114 | W->show(); | 119 | W->show(); |
115 | #ifdef _WS_QWS_ | 120 | #ifdef _WS_QWS_ |
116 | W->showMaximized(); | 121 | W->showMaximized(); |
117 | #else | 122 | #else |
118 | W->resize( W->sizeHint() ); | 123 | W->resize( W->sizeHint() ); |
119 | #endif | 124 | #endif |
120 | rv = TheApp->exec(); | 125 | rv = TheApp->exec(); |
121 | delete W; | 126 | delete W; |
122 | } | 127 | } |
123 | break; | 128 | break; |
124 | } | 129 | } |
125 | 130 | ||
131 | LogClose(); | ||
132 | |||
126 | return rv; | 133 | return rv; |
127 | } | 134 | } |
128 | 135 | ||
129 | #endif | 136 | #endif |
130 | 137 | ||
131 | 138 | ||
132 | // main.cpp | 139 | // main.cpp |
133 | 140 | ||
diff --git a/noncore/settings/networksettings2/network/networkrun.cpp b/noncore/settings/networksettings2/network/networkrun.cpp index 41e1c53..3e24c5f 100644 --- a/noncore/settings/networksettings2/network/networkrun.cpp +++ b/noncore/settings/networksettings2/network/networkrun.cpp | |||
@@ -1,66 +1,78 @@ | |||
1 | #include <system.h> | 1 | #include <system.h> |
2 | #include <asdevice.h> | 2 | #include <asdevice.h> |
3 | #include "networkrun.h" | 3 | #include "networkrun.h" |
4 | 4 | ||
5 | void NetworkRun::detectState( NodeCollection * NC ) { | 5 | void NetworkRun::detectState( NodeCollection * NC ) { |
6 | RuntimeInfo * RI = netNode()->nextNode()->runtime(); | 6 | RuntimeInfo * RI = netNode()->nextNode()->runtime(); |
7 | AsDevice * Next = RI->asDevice(); | 7 | AsDevice * Next = RI->asDevice(); |
8 | InterfaceInfo * II = Next->assignedInterface(); | 8 | InterfaceInfo * II = Next->assignedInterface(); |
9 | 9 | ||
10 | if( II ) { | 10 | if( II ) { |
11 | // device has assigned interface | 11 | // device has assigned interface |
12 | NC->setCurrentState( (( II->IsUp ) ? IsUp : Available) ); | 12 | NC->setCurrentState( (( II->IsUp ) ? IsUp : Available) ); |
13 | return; | 13 | return; |
14 | } | 14 | } |
15 | 15 | ||
16 | Log(( "%s not ! UP or ava\n", NC->name().latin1() )); | ||
16 | // has no interface -> delegate | 17 | // has no interface -> delegate |
17 | RI->detectState( NC ); | 18 | RI->detectState( NC ); |
18 | } | 19 | } |
19 | 20 | ||
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(); |
24 | InterfaceInfo * II = Next->assignedInterface(); | 25 | InterfaceInfo * II = Next->assignedInterface(); |
25 | 26 | ||
26 | if( A == Up ) { | 27 | if( A == Up ) { |
27 | // we can bring UP if lower level is available | 28 | // we can bring UP if lower level is available |
28 | if( NC->currentState() == Available || Force ) { | 29 | if( NC->currentState() == Available || Force ) { |
29 | QString S; | 30 | QString S; |
30 | S.sprintf( "ifup %s=%s-c%d-allowed", | 31 | S.sprintf( "ifup %s=%s-c%d-allowed", |
31 | II->Name.latin1(), II->Name.latin1(), | 32 | II->Name.latin1(), II->Name.latin1(), |
32 | connection()->number() ); | 33 | connection()->number() ); |
33 | NSResources->system().runAsRoot( S ); | 34 | NSResources->system().runAsRoot( S ); |
34 | } | 35 | } |
35 | return 1; | 36 | return 1; |
36 | } else if( A == Down ) { | 37 | } else if( A == Down ) { |
37 | if( NC->currentState() == IsUp || Force ) { | 38 | QString S; |
38 | QString S; | 39 | if( Force ) { |
39 | S.sprintf( "ifdown %s=%s-c%d-allowed", | 40 | Log(("Force mode %d\n", Force )); |
40 | II->Name.latin1(), II->Name.latin1(), | 41 | for( int i = 0; |
41 | connection()->number() ); | 42 | i < RI->netNode()->nodeClass()->instanceCount(); |
42 | NSResources->system().runAsRoot( S ); | 43 | i ++ ) { |
44 | S.sprintf( "ifdown %s", | ||
45 | RI->netNode()->nodeClass()->genNic( i ).latin1() ); | ||
46 | NSResources->system().runAsRoot( S ); | ||
47 | } | ||
48 | } else { | ||
49 | if( NC->currentState() == IsUp ) { | ||
50 | S.sprintf( "ifdown %s=%s-c%d-allowed", | ||
51 | II->Name.latin1(), II->Name.latin1(), | ||
52 | connection()->number() ); | ||
53 | NSResources->system().runAsRoot( S ); | ||
54 | } | ||
43 | } | 55 | } |
44 | return 1; | 56 | return 1; |
45 | } | 57 | } |
46 | // delegate | 58 | // delegate |
47 | return RI->setState( NC, A ); | 59 | return RI->setState( NC, A, Force ); |
48 | } | 60 | } |
49 | 61 | ||
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 ); |
56 | } else if( A == Down ) { | 68 | } else if( A == Down ) { |
57 | return ( Curr == IsUp ); | 69 | return ( Curr == IsUp ); |
58 | } | 70 | } |
59 | // delegate | 71 | // delegate |
60 | return RI->canSetState( Curr, A ); | 72 | return RI->canSetState( Curr, A ); |
61 | } | 73 | } |
62 | 74 | ||
63 | bool NetworkRun::handlesInterface( const QString & S ) { | 75 | bool NetworkRun::handlesInterface( const QString & S ) { |
64 | // donno -> pass deeper | 76 | // donno -> pass deeper |
65 | return netNode()->nextNode()->runtime()->handlesInterface(S); | 77 | return netNode()->nextNode()->runtime()->handlesInterface(S); |
66 | } | 78 | } |
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,449 +1,475 @@ | |||
1 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | #include <unistd.h> | ||
2 | 3 | ||
3 | #include <qpe/qpeapplication.h> | 4 | #include <qpe/qpeapplication.h> |
4 | #include <qlistbox.h> | 5 | #include <qlistbox.h> |
5 | #include <qgroupbox.h> | 6 | #include <qgroupbox.h> |
6 | #include <qtimer.h> | 7 | #include <qtimer.h> |
7 | #include <qlistbox.h> | 8 | #include <qlistbox.h> |
8 | #include <qmessagebox.h> | 9 | #include <qmessagebox.h> |
9 | #include <qlabel.h> | 10 | #include <qlabel.h> |
10 | #include <qiconview.h> | 11 | #include <qiconview.h> |
11 | #include <qtimer.h> | 12 | #include <qtimer.h> |
12 | #include <qpe/qpeapplication.h> | 13 | #include <qpe/qpeapplication.h> |
13 | #include <qtoolbutton.h> | 14 | #include <qtoolbutton.h> |
14 | 15 | ||
15 | #include <asdevice.h> | 16 | #include <asdevice.h> |
16 | #include "networksettings.h" | 17 | #include "networksettings.h" |
17 | #include "netnode.h" | 18 | #include "netnode.h" |
18 | #include "editconnection.h" | 19 | #include "editconnection.h" |
19 | 20 | ||
20 | NetworkSettings::NetworkSettings( QWidget *parent, | 21 | NetworkSettings::NetworkSettings( QWidget *parent, |
21 | const char *name, | 22 | const char *name, |
22 | WFlags fl ) : NetworkSettingsGUI(parent,name,fl), | 23 | WFlags fl ) : NetworkSettingsGUI(parent,name,fl), |
23 | NSD() { | 24 | NSD() { |
24 | 25 | ||
25 | UpdateTimer = new QTimer( this ); | 26 | UpdateTimer = new QTimer( this ); |
26 | 27 | ||
27 | // set pixmaps | 28 | // set pixmaps |
28 | Add_TB->setPixmap( NSResources->getPixmap( "add" ) ); | 29 | Add_TB->setPixmap( NSResources->getPixmap( "add" ) ); |
29 | Delete_TB->setPixmap( NSResources->getPixmap( "remove" ) ); | 30 | Delete_TB->setPixmap( NSResources->getPixmap( "remove" ) ); |
30 | CheckState_TB->setPixmap( NSResources->getPixmap( "check" ) ); | 31 | CheckState_TB->setPixmap( NSResources->getPixmap( "check" ) ); |
31 | Enable_TB->setPixmap( NSResources->getPixmap( "disabled" ) ); | 32 | Enable_TB->setPixmap( NSResources->getPixmap( "disabled" ) ); |
32 | GenConfig_TB->setPixmap( NSResources->getPixmap( "configure" ) ); | 33 | GenConfig_TB->setPixmap( NSResources->getPixmap( "configure" ) ); |
33 | 34 | ||
34 | Connect_TB->setPixmap( NSResources->getPixmap( "connected" ) ); | 35 | Connect_TB->setPixmap( NSResources->getPixmap( "connected" ) ); |
35 | Disconnect_TB->setPixmap( NSResources->getPixmap( "disconnected" ) ); | 36 | Disconnect_TB->setPixmap( NSResources->getPixmap( "disconnected" ) ); |
36 | 37 | ||
37 | On_TB->setPixmap( NSResources->getPixmap( "off" ) ); | 38 | On_TB->setPixmap( NSResources->getPixmap( "off" ) ); |
38 | 39 | ||
39 | SLOT_ToProfile(); | 40 | SLOT_ToProfile(); |
40 | 41 | ||
41 | // populate main Listbox | 42 | // populate main Listbox |
42 | Profiles_LB->clear(); | 43 | Profiles_LB->clear(); |
43 | { Name2Connection_t & M = NSResources->connections(); | 44 | { Name2Connection_t & M = NSResources->connections(); |
44 | NodeCollection * NC; | 45 | NodeCollection * NC; |
45 | // for all connections | 46 | // for all connections |
46 | for( QDictIterator<NodeCollection> it(M); | 47 | for( QDictIterator<NodeCollection> it(M); |
47 | it.current(); | 48 | it.current(); |
48 | ++it ) { | 49 | ++it ) { |
49 | NC = it.current(); | 50 | NC = it.current(); |
50 | Profiles_LB->insertItem( NC->devicePixmap(), | 51 | Profiles_LB->insertItem( NC->devicePixmap(), |
51 | NC->name() ); | 52 | NC->name() ); |
52 | } | 53 | } |
53 | } | 54 | } |
54 | 55 | ||
55 | if( Profiles_LB->count() ) { | 56 | if( Profiles_LB->count() ) { |
56 | Profiles_LB->setSelected( 0, TRUE ); | 57 | Profiles_LB->setSelected( 0, TRUE ); |
57 | } | 58 | } |
58 | 59 | ||
59 | // if no profiles -> auto popup editing | 60 | // if no profiles -> auto popup editing |
60 | if( NSResources->connections().count() == 0 ) { | 61 | if( NSResources->connections().count() == 0 ) { |
61 | QTimer::singleShot( 100, this, SLOT(SLOT_AddNode() ) ); | 62 | QTimer::singleShot( 100, this, SLOT(SLOT_AddNode() ) ); |
62 | } | 63 | } |
63 | 64 | ||
65 | connect( &(NSResources->system()), | ||
66 | SIGNAL( lineFromCommand(const QString &) ), | ||
67 | this, SLOT( SLOT_CmdMessage(const QString &) ) ); | ||
68 | |||
64 | UpdateTimer->start( 5000 ); | 69 | UpdateTimer->start( 5000 ); |
65 | connect( UpdateTimer, SIGNAL( timeout() ), | 70 | connect( UpdateTimer, SIGNAL( timeout() ), |
66 | this, SLOT( SLOT_RefreshStates() ) ); | 71 | this, SLOT( SLOT_RefreshStates() ) ); |
67 | 72 | ||
68 | /* Add QCopChannel */ | 73 | /* Add QCopChannel */ |
69 | connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)), | 74 | connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)), |
70 | this, SLOT(SLOT_QCopMessage(const QCString&,const QByteArray&)) ); | 75 | this, SLOT(SLOT_QCopMessage(const QCString&,const QByteArray&)) ); |
71 | } | 76 | } |
72 | 77 | ||
73 | NetworkSettings::~NetworkSettings() { | 78 | NetworkSettings::~NetworkSettings() { |
74 | QString S; | 79 | QString S; |
75 | 80 | ||
76 | S = NSD.generateSettings(); | 81 | S = NSD.generateSettings(); |
77 | if( ! S.isEmpty() ) { | 82 | if( ! S.isEmpty() ) { |
78 | QMessageBox::warning( | 83 | QMessageBox::warning( |
79 | 0, | 84 | 0, |
80 | tr( "In System Config" ), | 85 | tr( "In System Config" ), |
81 | S | 86 | S |
82 | ); | 87 | ); |
83 | } | 88 | } |
84 | 89 | ||
85 | S = NSD.saveSettings(); | 90 | S = NSD.saveSettings(); |
86 | if( ! S.isEmpty() ) { | 91 | if( ! S.isEmpty() ) { |
87 | // problem saving | 92 | // problem saving |
88 | QMessageBox::warning( | 93 | QMessageBox::warning( |
89 | 0, | 94 | 0, |
90 | tr( "Saving setup" ), S ); | 95 | tr( "Saving setup" ), S ); |
91 | } | 96 | } |
92 | } | 97 | } |
93 | 98 | ||
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() ); |
102 | if( NC ) { | 113 | if( NC ) { |
103 | State_t OldS = NC->state(); | 114 | State_t OldS = NC->state(); |
104 | State_t NewS = NC->state(1); | 115 | State_t NewS = NC->state(1); |
105 | if( OldS != NewS ) { | 116 | if( OldS != NewS ) { |
106 | updateProfileState( LBI ); | 117 | updateProfileState( LBI ); |
107 | } | 118 | } |
108 | } | 119 | } |
109 | } | 120 | } |
110 | 121 | ||
111 | 122 | ||
112 | /* -> LATER !! | 123 | /* -> LATER !! |
113 | bool is; | 124 | bool is; |
114 | NodeCollection * NC; | 125 | NodeCollection * NC; |
115 | 126 | ||
116 | for( unsigned int i = 0; i < Profiles_LB->count() ; i ++ ) { | 127 | for( unsigned int i = 0; i < Profiles_LB->count() ; i ++ ) { |
117 | NC = NSResources->findConnection( Profiles_LB->text(i) ); | 128 | NC = NSResources->findConnection( Profiles_LB->text(i) ); |
118 | if( NC ) { | 129 | if( NC ) { |
119 | State_t OldS = NC->state(); | 130 | State_t OldS = NC->state(); |
120 | State_t NewS = NC->state(1); | 131 | State_t NewS = NC->state(1); |
121 | if( OldS != NewS ) { | 132 | if( OldS != NewS ) { |
122 | is = Profiles_LB->isSelected(i); | 133 | is = Profiles_LB->isSelected(i); |
123 | Profiles_LB->changeItem( NC->statePixmap(NewS), | 134 | Profiles_LB->changeItem( NC->statePixmap(NewS), |
124 | NC->name(), | 135 | NC->name(), |
125 | i ); | 136 | i ); |
126 | if( is ) { | 137 | if( is ) { |
127 | Profiles_LB->setSelected( i, TRUE ); | 138 | Profiles_LB->setSelected( i, TRUE ); |
128 | } | 139 | } |
129 | } | 140 | } |
130 | } | 141 | } |
131 | } | 142 | } |
132 | if( ci >= 0 ) | 143 | if( ci >= 0 ) |
133 | Profiles_LB->setCurrentItem( ci ); | 144 | Profiles_LB->setCurrentItem( ci ); |
134 | */ | 145 | */ |
135 | } | 146 | } |
136 | 147 | ||
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 ) |
145 | return; | 159 | return; |
146 | 160 | ||
147 | if( QMessageBox::warning( | 161 | if( QMessageBox::warning( |
148 | 0, | 162 | 0, |
149 | tr( "Removing profile" ), | 163 | tr( "Removing profile" ), |
150 | tr( "Remove selected profile ?" ), | 164 | tr( "Remove selected profile ?" ), |
151 | 1, 0 ) == 1 ) { | 165 | 1, 0 ) == 1 ) { |
152 | NSResources->removeConnection( LBI->text() ); | 166 | NSResources->removeConnection( LBI->text() ); |
153 | delete LBI; | 167 | delete LBI; |
154 | setModified( 1 ); | 168 | setModified( 1 ); |
155 | NSD.forceGeneration(1); | 169 | NSD.forceGeneration(1); |
156 | } | 170 | } |
157 | } | 171 | } |
158 | 172 | ||
159 | void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { | 173 | void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { |
160 | QString OldName = ""; | 174 | QString OldName = ""; |
161 | EditConnection EC( this ); | 175 | EditConnection EC( this ); |
162 | 176 | ||
163 | if( LBI ) { | 177 | if( LBI ) { |
164 | NodeCollection * NC = NSResources->findConnection( LBI->text() ); | 178 | NodeCollection * NC = NSResources->findConnection( LBI->text() ); |
165 | if( ! NC ) { | 179 | if( ! NC ) { |
166 | return; | 180 | return; |
167 | } | 181 | } |
168 | OldName = NC->name(); | 182 | OldName = NC->name(); |
169 | EC.setConnection( NC ); | 183 | EC.setConnection( NC ); |
170 | } | 184 | } |
171 | 185 | ||
172 | EC.showMaximized(); | 186 | EC.showMaximized(); |
173 | // disable refresh timer | 187 | // disable refresh timer |
174 | UpdateTimer->stop(); | 188 | UpdateTimer->stop(); |
189 | NSResources->busy( TRUE ); | ||
190 | QTimer::singleShot( 1000, this, SLOT( SLOT_NoLongerBusy() )); | ||
175 | // we need to retry | 191 | // we need to retry |
176 | while( 1 ) { | 192 | while( 1 ) { |
177 | if( EC.exec() == QDialog::Accepted ) { | 193 | if( EC.exec() == QDialog::Accepted ) { |
178 | // toplevel item -> store | 194 | // toplevel item -> store |
179 | NodeCollection * NC = EC.connection(); | 195 | NodeCollection * NC = EC.connection(); |
180 | if( NC->isModified() ) { | 196 | if( NC->isModified() ) { |
181 | setModified( 1 ); | 197 | setModified( 1 ); |
182 | if( LBI ) { | 198 | if( LBI ) { |
183 | if( NC->name() != OldName ) { | 199 | if( NC->name() != OldName ) { |
184 | // find if new name is free | 200 | // find if new name is free |
185 | NodeCollection * LCN = NSResources->findConnection( | 201 | NodeCollection * LCN = NSResources->findConnection( |
186 | NC->name() ); | 202 | NC->name() ); |
187 | if( LCN ) { | 203 | if( LCN ) { |
188 | QMessageBox::warning( | 204 | QMessageBox::warning( |
189 | 0, | 205 | 0, |
190 | tr( "In System Config" ), | 206 | tr( "In System Config" ), |
191 | tr( "Name %1 already exists" ).arg(NC->name()) | 207 | tr( "Name %1 already exists" ).arg(NC->name()) |
192 | ); | 208 | ); |
193 | continue; // restart exec | 209 | continue; // restart exec |
194 | } // else new name | 210 | } // else new name |
195 | // new name -> remove item | 211 | // new name -> remove item |
196 | NSResources->removeConnection( OldName ); | 212 | NSResources->removeConnection( OldName ); |
197 | NSResources->addConnection( NC ); | 213 | NSResources->addConnection( NC ); |
198 | } // else not changed | 214 | } // else not changed |
199 | 215 | ||
200 | // must add it here since change will trigger event | 216 | // must add it here since change will trigger event |
201 | Profiles_LB->changeItem( NC->devicePixmap(), | 217 | Profiles_LB->changeItem( NC->devicePixmap(), |
202 | NC->name(), | 218 | NC->name(), |
203 | Profiles_LB->index( LBI ) | 219 | Profiles_LB->index( LBI ) |
204 | ); | 220 | ); |
205 | } else { | 221 | } else { |
206 | // new item | 222 | // new item |
207 | int ci = Profiles_LB->count(); | 223 | int ci = Profiles_LB->count(); |
208 | NSResources->addConnection( NC ); | 224 | NSResources->addConnection( NC ); |
209 | NC->setNumber( NC->maxConnectionNumber()+1 ); | 225 | NC->setNumber( NSResources->assignConnectionNumber() ); |
210 | Profiles_LB->insertItem( NC->devicePixmap(), NC->name() ); | 226 | Profiles_LB->insertItem( NC->devicePixmap(), NC->name() ); |
211 | Profiles_LB->setSelected( ci, TRUE ); | 227 | Profiles_LB->setSelected( ci, TRUE ); |
212 | } | 228 | } |
213 | updateProfileState( LBI ); | 229 | updateProfileState( LBI ); |
214 | } | 230 | } |
215 | } else { | 231 | } else { |
216 | // cancelled : reset connection | 232 | // cancelled : reset connection |
217 | if( LBI ) { | 233 | if( LBI ) { |
218 | NodeCollection * NC = NSResources->findConnection( LBI->text() ); | 234 | NodeCollection * NC = NSResources->findConnection( LBI->text() ); |
219 | NC->reassign(); | 235 | NC->reassign(); |
220 | } | 236 | } |
221 | } | 237 | } |
222 | break; | 238 | break; |
223 | } | 239 | } |
224 | // reenable | 240 | // reenable |
225 | UpdateTimer->start( 5000 ); | 241 | UpdateTimer->start( 5000 ); |
226 | } | 242 | } |
227 | 243 | ||
228 | void NetworkSettings::SLOT_ShowNode( QListBoxItem * LBI ) { | 244 | void NetworkSettings::SLOT_ShowNode( QListBoxItem * LBI ) { |
229 | if( LBI == 0 ) | 245 | if( LBI == 0 ) |
230 | return; | 246 | return; |
231 | 247 | ||
232 | NodeCollection * NC = NSResources->findConnection( LBI->text() ); | 248 | NodeCollection * NC = NSResources->findConnection( LBI->text() ); |
233 | 249 | ||
234 | // is button possible | 250 | // is button possible |
235 | bool EnabledPossible, OnPossible, ConnectPossible; | 251 | bool EnabledPossible, OnPossible, ConnectPossible; |
236 | // is button On or Off | 252 | // is button On or Off |
237 | bool DisabledOn, OnOn, ConnectOn; | 253 | bool DisabledOn, OnOn, ConnectOn; |
238 | 254 | ||
239 | EnabledPossible = OnPossible = ConnectPossible = 1; | 255 | EnabledPossible = OnPossible = ConnectPossible = 1; |
240 | DisabledOn = 1; | 256 | DisabledOn = 1; |
241 | OnOn = ConnectOn = 0; | 257 | OnOn = ConnectOn = 0; |
242 | 258 | ||
243 | switch( NC->state() ) { | 259 | switch( NC->state() ) { |
244 | case Unknown : | 260 | case Unknown : |
245 | // cannot occur here | 261 | // cannot occur here |
246 | break; | 262 | break; |
247 | case Unchecked : | 263 | case Unchecked : |
248 | case Unavailable : | 264 | case Unavailable : |
249 | // cannot do anything but recheck | 265 | // cannot do anything but recheck |
250 | EnabledPossible = OnPossible = ConnectPossible = 0; | 266 | EnabledPossible = OnPossible = ConnectPossible = 0; |
251 | break; | 267 | break; |
252 | case Disabled : | 268 | case Disabled : |
253 | OnPossible = ConnectPossible = 0; | 269 | OnPossible = ConnectPossible = 0; |
254 | break; | 270 | break; |
255 | case Off : | 271 | case Off : |
256 | DisabledOn = 0; | 272 | DisabledOn = 0; |
257 | break; | 273 | break; |
258 | case Available : | 274 | case Available : |
259 | OnOn = 1; | 275 | OnOn = 1; |
276 | Connect_TB->setPixmap( NSResources->getPixmap( "disconnected" ) ); | ||
260 | DisabledOn = 0; | 277 | DisabledOn = 0; |
261 | break; | 278 | break; |
262 | case IsUp : | 279 | case IsUp : |
263 | OnOn = ConnectOn = 1; | 280 | OnOn = ConnectOn = 1; |
281 | Connect_TB->setPixmap( NSResources->getPixmap( "connected" ) ); | ||
264 | DisabledOn = 0; | 282 | DisabledOn = 0; |
265 | break; | 283 | break; |
266 | } | 284 | } |
267 | 285 | ||
286 | if( ! OnOn ) { | ||
287 | Connect_TB->setPixmap( NSResources->getPixmap( "disconnected" ) ); | ||
288 | } | ||
289 | |||
268 | // set button state | 290 | // set button state |
269 | Enable_TB->setEnabled( EnabledPossible ); | 291 | Enable_TB->setEnabled( EnabledPossible ); |
270 | On_TB->setEnabled( OnPossible ); | 292 | On_TB->setEnabled( OnPossible ); |
271 | Connect_TB->setEnabled( ConnectPossible ); | 293 | Connect_TB->setEnabled( ConnectPossible ); |
272 | 294 | ||
273 | Enable_TB->setOn( DisabledOn ); | 295 | Enable_TB->setOn( DisabledOn ); |
274 | On_TB->setOn( OnOn ); | 296 | On_TB->setOn( OnOn ); |
275 | Connect_TB->setOn( ConnectOn ); | 297 | Connect_TB->setOn( ConnectOn ); |
276 | 298 | ||
277 | if( NC->description().isEmpty() ) { | 299 | if( NC->description().isEmpty() ) { |
278 | Description_LBL->setText( tr( "No description" ) ); | 300 | Description_LBL->setText( tr( "<<No description>>" ) ); |
279 | } else { | 301 | } else { |
280 | Description_LBL->setText( NC->description() ); | 302 | Description_LBL->setText( NC->description() ); |
281 | } | 303 | } |
282 | 304 | ||
283 | Profile_GB->setTitle( LBI->text() ); | 305 | Profile_GB->setTitle( LBI->text() + " : " + NC->stateName() ); |
284 | State_LBL->setText( NC->stateName() ); | ||
285 | } | 306 | } |
286 | 307 | ||
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 | } |
293 | 314 | ||
294 | void NetworkSettings::updateProfileState( QListBoxItem * LBI ) { | 315 | void NetworkSettings::updateProfileState( QListBoxItem * LBI ) { |
295 | if( LBI == Profiles_LB->item( Profiles_LB->currentItem() ) ) { | 316 | if( LBI == Profiles_LB->item( Profiles_LB->currentItem() ) ) { |
296 | SLOT_ShowNode( LBI ); | 317 | SLOT_ShowNode( LBI ); |
297 | } | 318 | } |
298 | } | 319 | } |
299 | 320 | ||
300 | void NetworkSettings::SLOT_GenerateConfig( void ) { | 321 | void NetworkSettings::SLOT_GenerateConfig( void ) { |
301 | QString S = NSD.generateSettings( TRUE ); | 322 | QString S = NSD.generateSettings( TRUE ); |
302 | 323 | ||
303 | if( ! S.isEmpty() ) { | 324 | if( ! S.isEmpty() ) { |
304 | QMessageBox::warning( | 325 | QMessageBox::warning( |
305 | 0, | 326 | 0, |
306 | tr( "Generating system configuration" ), | 327 | tr( "Generating system configuration" ), |
307 | S | 328 | S |
308 | ); | 329 | ); |
309 | } | 330 | } |
310 | } | 331 | } |
311 | 332 | ||
312 | void NetworkSettings::SLOT_Enable( void ) { | 333 | void NetworkSettings::SLOT_Enable( void ) { |
313 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); | 334 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); |
314 | QString Msg; | 335 | QString Msg; |
315 | if ( ! LBI ) | 336 | if ( ! LBI ) |
316 | return; | 337 | return; |
317 | 338 | ||
318 | NodeCollection * NC = | 339 | NodeCollection * NC = |
319 | NSResources->findConnection( LBI->text() ); | 340 | NSResources->findConnection( LBI->text() ); |
320 | 341 | ||
321 | bool rv; | 342 | bool rv; |
322 | switch( NC->state() ) { | 343 | switch( NC->state() ) { |
323 | case Disabled : | 344 | case Disabled : |
324 | Msg = tr( "Cannot enable profile" ); | 345 | Msg = tr( "Cannot enable profile" ); |
325 | rv = NC->setState( Enable ); | 346 | rv = NC->setState( Enable ); |
326 | break; | 347 | break; |
327 | default : | 348 | default : |
328 | Msg = tr( "Cannot disable profile" ); | 349 | Msg = tr( "Cannot disable profile" ); |
329 | rv = NC->setState( Disable ); | 350 | rv = NC->setState( Disable ); |
330 | break; | 351 | break; |
331 | } | 352 | } |
332 | 353 | ||
333 | if( ! rv ) { | 354 | if( ! rv ) { |
334 | QMessageBox::warning( | 355 | QMessageBox::warning( |
335 | 0, | 356 | 0, |
336 | tr( "Activating profile" ), | 357 | tr( "Activating profile" ), |
337 | Msg ); | 358 | Msg ); |
338 | return; | 359 | return; |
339 | } | 360 | } |
340 | updateProfileState( LBI ); | 361 | updateProfileState( LBI ); |
341 | } | 362 | } |
342 | 363 | ||
343 | void NetworkSettings::SLOT_On( void ) { | 364 | void NetworkSettings::SLOT_On( void ) { |
344 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); | 365 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); |
345 | 366 | ||
346 | if ( ! LBI ) | 367 | if ( ! LBI ) |
347 | return; | 368 | return; |
348 | 369 | ||
349 | NodeCollection * NC = | 370 | NodeCollection * NC = |
350 | NSResources->findConnection( LBI->text() ); | 371 | NSResources->findConnection( LBI->text() ); |
351 | 372 | ||
352 | bool rv; | 373 | bool rv; |
353 | switch( NC->state() ) { | 374 | switch( NC->state() ) { |
354 | case Off : | 375 | case Off : |
355 | // activate interface | 376 | // activate interface |
356 | rv = NC->setState( Activate ); | 377 | rv = NC->setState( Activate ); |
357 | break; | 378 | break; |
358 | case Available : // deactivate | 379 | case Available : // deactivate |
359 | case IsUp : // deactivate (will also bring down if needed) | 380 | case IsUp : // deactivate (will also bring down if needed) |
360 | rv = NC->setState( Deactivate ); | 381 | rv = NC->setState( Deactivate ); |
361 | break; | 382 | break; |
362 | default : | 383 | default : |
363 | // others no change | 384 | // others no change |
364 | return; | 385 | return; |
365 | } | 386 | } |
366 | 387 | ||
367 | if( ! rv ) { | 388 | if( ! rv ) { |
368 | QMessageBox::warning( | 389 | QMessageBox::warning( |
369 | 0, | 390 | 0, |
370 | tr( "Activating profile" ), | 391 | tr( "Activating profile" ), |
371 | tr( "Cannot enable profile" ) ); | 392 | tr( "Cannot enable profile" ) ); |
372 | return; | 393 | return; |
373 | } | 394 | } |
374 | updateProfileState( LBI ); | 395 | updateProfileState( LBI ); |
375 | } | 396 | } |
376 | 397 | ||
377 | void NetworkSettings::SLOT_Connect( void ) { | 398 | void NetworkSettings::SLOT_Connect( void ) { |
378 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); | 399 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); |
379 | 400 | ||
380 | if ( ! LBI ) | 401 | if ( ! LBI ) |
381 | return; | 402 | return; |
382 | 403 | ||
383 | NodeCollection * NC = | 404 | NodeCollection * NC = |
384 | NSResources->findConnection( LBI->text() ); | 405 | NSResources->findConnection( LBI->text() ); |
385 | 406 | ||
386 | bool rv = 1 ; | 407 | bool rv = 1 ; |
387 | switch( NC->state() ) { | 408 | switch( NC->state() ) { |
388 | case IsUp : | 409 | case IsUp : |
389 | // down interface | 410 | // down interface |
390 | rv = NC->setState( Down ); | 411 | rv = NC->setState( Down ); |
391 | break; | 412 | break; |
392 | case Available : | 413 | case Available : |
393 | // up interface | 414 | // up interface |
394 | rv = NC->setState( Up ); | 415 | rv = NC->setState( Up ); |
395 | break; | 416 | break; |
396 | case Off : | 417 | case Off : |
397 | // activate and bring up | 418 | // activate and bring up |
398 | rv = ( NC->setState( Activate ) && | 419 | rv = ( NC->setState( Activate ) && |
399 | NC->setState( Up ) ); | 420 | NC->setState( Up ) ); |
400 | break; | 421 | break; |
401 | default : | 422 | default : |
402 | // others no change | 423 | // others no change |
403 | break; | 424 | break; |
404 | } | 425 | } |
405 | 426 | ||
406 | if( ! rv ) { | 427 | if( ! rv ) { |
407 | QMessageBox::warning( | 428 | QMessageBox::warning( |
408 | 0, | 429 | 0, |
409 | tr( "Activating profile" ), | 430 | tr( "Activating profile" ), |
410 | tr( "Cannot enable profile" ) ); | 431 | tr( "Cannot enable profile" ) ); |
411 | } | 432 | } |
412 | 433 | ||
413 | // we do not update the GUI but wait for the REAL upping of the device | 434 | // we do not update the GUI but wait for the REAL upping of the device |
414 | } | 435 | } |
415 | 436 | ||
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 ) { |
434 | Profile_GB->show(); | 460 | Profile_GB->show(); |
435 | Messages_GB->hide(); | 461 | Messages_GB->hide(); |
436 | } | 462 | } |
437 | 463 | ||
438 | void NetworkSettings::SLOT_QCopMessage(const QCString &msg, const QByteArray &data) { | 464 | void NetworkSettings::SLOT_QCopMessage(const QCString &msg, const QByteArray &data) { |
439 | QDataStream stream( data, IO_ReadOnly ); | 465 | QDataStream stream( data, IO_ReadOnly ); |
440 | 466 | ||
441 | if( msg == "raise" ) { | 467 | if( msg == "raise" ) { |
442 | raise(); | 468 | raise(); |
443 | return; | 469 | return; |
444 | } /* if ( msg == "someMessage(int,int,int)" ) { | 470 | } /* if ( msg == "someMessage(int,int,int)" ) { |
445 | int a,b,c; | 471 | int a,b,c; |
446 | stream >> a >> b >> c; | 472 | stream >> a >> b >> c; |
447 | ... | 473 | ... |
448 | } */ | 474 | } */ |
449 | } | 475 | } |
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 | |||
@@ -1,52 +1,54 @@ | |||
1 | #include "nsdata.h" | 1 | #include "nsdata.h" |
2 | #include "networksettingsGUI.h" | 2 | #include "networksettingsGUI.h" |
3 | #include "resources.h" | 3 | #include "resources.h" |
4 | 4 | ||
5 | class ANetNode; | 5 | class ANetNode; |
6 | class ANetNodeInstance; | 6 | class ANetNodeInstance; |
7 | class QTimer; | 7 | class QTimer; |
8 | class QListBoxItem; | 8 | class QListBoxItem; |
9 | 9 | ||
10 | class NetworkSettings : public NetworkSettingsGUI { | 10 | class NetworkSettings : public NetworkSettingsGUI { |
11 | 11 | ||
12 | Q_OBJECT | 12 | Q_OBJECT |
13 | 13 | ||
14 | public : | 14 | public : |
15 | 15 | ||
16 | NetworkSettings( QWidget *parent=0, | 16 | NetworkSettings( QWidget *parent=0, |
17 | const char *name=0, | 17 | const char *name=0, |
18 | WFlags fl = 0 ); | 18 | WFlags fl = 0 ); |
19 | ~NetworkSettings( void ); | 19 | ~NetworkSettings( void ); |
20 | 20 | ||
21 | static QString appName( void ) | 21 | static QString appName( void ) |
22 | { return QString::fromLatin1("networksettings"); } | 22 | { return QString::fromLatin1("networksettings"); } |
23 | 23 | ||
24 | bool isModified( void ) | 24 | bool isModified( void ) |
25 | { return NSD.isModified(); } | 25 | { return NSD.isModified(); } |
26 | void setModified( bool m ) | 26 | void setModified( bool m ) |
27 | { NSD.setModified( m ); } | 27 | { NSD.setModified( m ); } |
28 | 28 | ||
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 | |||
@@ -1,20 +1,22 @@ | |||
1 | #ifndef ASFULLSETUP_H | 1 | #ifndef ASFULLSETUP_H |
2 | #define ASFULLSETUP_H | 2 | #define ASFULLSETUP_H |
3 | 3 | ||
4 | #include <netnode.h> | 4 | #include <netnode.h> |
5 | 5 | ||
6 | // pure virtual (component oriented) interface of any | 6 | // pure virtual (component oriented) interface of any |
7 | // plugin that offers a full setup | 7 | // plugin that offers a full setup |
8 | class AsFullSetup : public RuntimeInfo { | 8 | 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 | |||
@@ -1,310 +1,312 @@ | |||
1 | #include <time.h> | 1 | #include <time.h> |
2 | #include <qpe/qpeapplication.h> | 2 | #include <qpe/qpeapplication.h> |
3 | #include <qpainter.h> | 3 | #include <qpainter.h> |
4 | #include <qbitmap.h> | 4 | #include <qbitmap.h> |
5 | #include <qtextstream.h> | 5 | #include <qtextstream.h> |
6 | #include <qpixmap.h> | 6 | #include <qpixmap.h> |
7 | 7 | ||
8 | #include "resources.h" | 8 | #include "resources.h" |
9 | #include "netnode.h" | 9 | #include "netnode.h" |
10 | 10 | ||
11 | #include "asdevice.h" | 11 | #include "asdevice.h" |
12 | #include "asline.h" | 12 | #include "asline.h" |
13 | #include "asconnection.h" | 13 | #include "asconnection.h" |
14 | #include "asfullsetup.h" | 14 | #include "asfullsetup.h" |
15 | 15 | ||
16 | QString & deQuote( QString & X ) { | 16 | QString & deQuote( QString & X ) { |
17 | if( X[0] == '"' ) { | 17 | if( X[0] == '"' ) { |
18 | // remove end and trailing "" and \x -> x | 18 | // remove end and trailing "" and \x -> x |
19 | QChar R; | 19 | QChar R; |
20 | long idx; | 20 | long idx; |
21 | idx = X.length()-1; | 21 | idx = X.length()-1; |
22 | X = X.mid( 1, idx ); | 22 | X = X.mid( 1, idx ); |
23 | 23 | ||
24 | idx = 0; | 24 | idx = 0; |
25 | while( ( idx = X.find( '\\', idx ) ) >= 0 ) { | 25 | while( ( idx = X.find( '\\', idx ) ) >= 0 ) { |
26 | R = X.at( idx + 1 ); | 26 | R = X.at( idx + 1 ); |
27 | X.replace( idx, 2, &R, 1 ); | 27 | X.replace( idx, 2, &R, 1 ); |
28 | } | 28 | } |
29 | X = X.left( X.length()-1 ); | 29 | X = X.left( X.length()-1 ); |
30 | } | 30 | } |
31 | return X; | 31 | return X; |
32 | } | 32 | } |
33 | 33 | ||
34 | QString quote( QString X ) { | 34 | QString quote( QString X ) { |
35 | if( X.find( QRegExp( "[ \n\"\\\t]" ) ) >= 0 ) { | 35 | if( X.find( QRegExp( "[ \n\"\\\t]" ) ) >= 0 ) { |
36 | // need to quote this | 36 | // need to quote this |
37 | QString OutString = "\""; | 37 | QString OutString = "\""; |
38 | 38 | ||
39 | X.replace( QRegExp("\""), "\\\"" ); | 39 | X.replace( QRegExp("\""), "\\\"" ); |
40 | X.replace( QRegExp("\\"), "\\\\" ); | 40 | X.replace( QRegExp("\\"), "\\\\" ); |
41 | X.replace( QRegExp(" "), "\\ " ); | 41 | X.replace( QRegExp(" "), "\\ " ); |
42 | 42 | ||
43 | OutString += X; | 43 | OutString += X; |
44 | OutString += "\""; | 44 | OutString += "\""; |
45 | X = OutString; | 45 | X = OutString; |
46 | } | 46 | } |
47 | return X; | 47 | return X; |
48 | } | 48 | } |
49 | 49 | ||
50 | 50 | ||
51 | // | 51 | // |
52 | // | 52 | // |
53 | // ANETNODE | 53 | // ANETNODE |
54 | // | 54 | // |
55 | // | 55 | // |
56 | 56 | ||
57 | void ANetNode::saveAttributes( QTextStream & TS ) { | 57 | void ANetNode::saveAttributes( QTextStream & TS ) { |
58 | saveSpecificAttribute( TS ); | 58 | saveSpecificAttribute( TS ); |
59 | } | 59 | } |
60 | 60 | ||
61 | void ANetNode::setAttribute( QString & Attr, QString & Value ){ | 61 | void ANetNode::setAttribute( QString & Attr, QString & Value ){ |
62 | setSpecificAttribute( Attr, Value ); | 62 | setSpecificAttribute( Attr, Value ); |
63 | } | 63 | } |
64 | 64 | ||
65 | // | 65 | // |
66 | // | 66 | // |
67 | // ANETNODEINSTANCE | 67 | // ANETNODEINSTANCE |
68 | // | 68 | // |
69 | // | 69 | // |
70 | 70 | ||
71 | long ANetNodeInstance::InstanceCounter = -1; | 71 | long ANetNodeInstance::InstanceCounter = -1; |
72 | 72 | ||
73 | void ANetNodeInstance::initialize( void ) { | 73 | void ANetNodeInstance::initialize( void ) { |
74 | if( InstanceCounter == -1 ) | 74 | if( InstanceCounter == -1 ) |
75 | InstanceCounter = time(0); | 75 | InstanceCounter = time(0); |
76 | // set name | 76 | // set name |
77 | QString N; | 77 | QString N; |
78 | N.sprintf( "-%ld", InstanceCounter++ ); | 78 | N.sprintf( "-%ld", InstanceCounter++ ); |
79 | N.prepend( NodeType->name() ); | 79 | N.prepend( NodeType->name() ); |
80 | setName( N.latin1() ); | 80 | setName( N.latin1() ); |
81 | } | 81 | } |
82 | 82 | ||
83 | void ANetNodeInstance::setAttribute( QString & Attr, QString & Value ){ | 83 | void ANetNodeInstance::setAttribute( QString & Attr, QString & Value ){ |
84 | if( Attr == "name" ) { | 84 | if( Attr == "name" ) { |
85 | setName( Value.latin1() ); | 85 | setName( Value.latin1() ); |
86 | } else { | 86 | } else { |
87 | setSpecificAttribute( Attr, Value ); | 87 | setSpecificAttribute( Attr, Value ); |
88 | } | 88 | } |
89 | } | 89 | } |
90 | 90 | ||
91 | void ANetNodeInstance::saveAttributes( QTextStream & TS ) { | 91 | void ANetNodeInstance::saveAttributes( QTextStream & TS ) { |
92 | TS << "name=" << name() << endl; | 92 | TS << "name=" << name() << endl; |
93 | saveSpecificAttribute( TS ); | 93 | saveSpecificAttribute( TS ); |
94 | } | 94 | } |
95 | 95 | ||
96 | ANetNodeInstance * ANetNodeInstance::nextNode( void ) { | 96 | ANetNodeInstance * ANetNodeInstance::nextNode( void ) { |
97 | return connection()->findNext( this ); | 97 | return connection()->findNext( this ); |
98 | } | 98 | } |
99 | 99 | ||
100 | // | 100 | // |
101 | // | 101 | // |
102 | // NODECOLLECTION | 102 | // NODECOLLECTION |
103 | // | 103 | // |
104 | // | 104 | // |
105 | 105 | ||
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 | ||
116 | NodeCollection::NodeCollection( QTextStream & TS ) : | 114 | NodeCollection::NodeCollection( QTextStream & TS ) : |
117 | QList<ANetNodeInstance>() { | 115 | QList<ANetNodeInstance>() { |
118 | long idx; | 116 | long idx; |
119 | bool InError = 0; | 117 | bool InError = 0; |
120 | QString S, A, N; | 118 | QString S, A, N; |
121 | IsModified = 0; | 119 | IsModified = 0; |
122 | Index = -1; | 120 | Index = -1; |
123 | Name=""; | 121 | Name=""; |
124 | IsNew = 0; | 122 | IsNew = 0; |
125 | CurrentState = Unchecked; | 123 | CurrentState = Unchecked; |
126 | 124 | ||
127 | do { | 125 | do { |
128 | S = TS.readLine(); | 126 | S = TS.readLine(); |
129 | if( S.isEmpty() ) { | 127 | if( S.isEmpty() ) { |
130 | if( InError ) { | 128 | if( InError ) { |
131 | // remove all nodes | 129 | // remove all nodes |
132 | clear(); | 130 | clear(); |
133 | } | 131 | } |
134 | // empty line | 132 | // empty line |
135 | break; | 133 | break; |
136 | } | 134 | } |
137 | 135 | ||
138 | idx = S.find('='); | 136 | idx = S.find('='); |
139 | S.stripWhiteSpace(); | 137 | S.stripWhiteSpace(); |
140 | A = S.left( idx ); | 138 | A = S.left( idx ); |
141 | A.lower(); | 139 | A.lower(); |
142 | N = S.mid( idx+1, S.length() ); | 140 | N = S.mid( idx+1, S.length() ); |
143 | N.stripWhiteSpace(); | 141 | N.stripWhiteSpace(); |
144 | N = deQuote( N ); | 142 | N = deQuote( N ); |
145 | 143 | ||
146 | if( A == "name" ) { | 144 | if( A == "name" ) { |
147 | Name = N; | 145 | Name = N; |
148 | } else if( A == "number" ) { | 146 | } else if( A == "number" ) { |
147 | Log(( "read number %s\n", N.latin1() )); | ||
149 | setNumber( N.toLong() ); | 148 | setNumber( N.toLong() ); |
150 | } else if( A == "node" ) { | 149 | } else if( A == "node" ) { |
151 | ANetNodeInstance * NNI = NSResources->findNodeInstance( N ); | 150 | ANetNodeInstance * NNI = NSResources->findNodeInstance( N ); |
152 | if( NNI && ! InError ) { | 151 | if( NNI && ! InError ) { |
153 | append( NSResources->findNodeInstance( N ) ); | 152 | append( NSResources->findNodeInstance( N ) ); |
154 | } else { | 153 | } else { |
155 | // could not find a node type -> collection invalid | 154 | // could not find a node type -> collection invalid |
156 | InError = 1; | 155 | InError = 1; |
157 | } | 156 | } |
158 | } | 157 | } |
159 | } while( 1 ); | 158 | } while( 1 ); |
160 | } | 159 | } |
161 | 160 | ||
162 | 161 | ||
163 | NodeCollection::~NodeCollection( void ) { | 162 | NodeCollection::~NodeCollection( void ) { |
164 | } | 163 | } |
165 | 164 | ||
166 | const QString & NodeCollection::description( void ) { | 165 | const QString & NodeCollection::description( void ) { |
167 | ANetNodeInstance * NNI = getToplevel(); | 166 | ANetNodeInstance * NNI = getToplevel(); |
168 | return (NNI) ? NNI->runtime()->asFullSetup()->description() : Name; | 167 | return (NNI) ? NNI->runtime()->asFullSetup()->description() : Name; |
169 | } | 168 | } |
170 | 169 | ||
171 | void NodeCollection::append( ANetNodeInstance * NNI ) { | 170 | void NodeCollection::append( ANetNodeInstance * NNI ) { |
172 | NNI->setConnection( this ); | 171 | NNI->setConnection( this ); |
173 | QList<ANetNodeInstance>::append( NNI ); | 172 | QList<ANetNodeInstance>::append( NNI ); |
174 | } | 173 | } |
175 | 174 | ||
176 | void NodeCollection::save( QTextStream & TS ) { | 175 | void NodeCollection::save( QTextStream & TS ) { |
177 | 176 | ||
178 | TS << "name=" << quote( Name ) << endl; | 177 | TS << "name=" << quote( Name ) << endl; |
179 | TS << "number=" << number() << endl; | 178 | TS << "number=" << number() << endl; |
180 | ANetNodeInstance * NNI; | 179 | ANetNodeInstance * NNI; |
181 | for( QListIterator<ANetNodeInstance> it(*this); | 180 | for( QListIterator<ANetNodeInstance> it(*this); |
182 | it.current(); | 181 | it.current(); |
183 | ++it ) { | 182 | ++it ) { |
184 | NNI = it.current(); | 183 | NNI = it.current(); |
185 | TS << "node=" << NNI->name() << endl; | 184 | TS << "node=" << NNI->name() << endl; |
186 | } | 185 | } |
187 | TS << endl; | 186 | TS << endl; |
188 | IsNew = 0; | 187 | IsNew = 0; |
189 | } | 188 | } |
190 | 189 | ||
191 | ANetNodeInstance * NodeCollection::getToplevel( void ) { | 190 | ANetNodeInstance * NodeCollection::getToplevel( void ) { |
192 | ANetNodeInstance * NNI = 0; | 191 | ANetNodeInstance * NNI = 0; |
193 | for( QListIterator<ANetNodeInstance> it(*this); | 192 | for( QListIterator<ANetNodeInstance> it(*this); |
194 | it.current(); | 193 | it.current(); |
195 | ++it ) { | 194 | ++it ) { |
196 | NNI = it.current(); | 195 | NNI = it.current(); |
197 | if( NNI->nodeClass()->isToplevel() ) | 196 | if( NNI->nodeClass()->isToplevel() ) |
198 | break; | 197 | break; |
199 | } | 198 | } |
200 | return NNI; | 199 | return NNI; |
201 | } | 200 | } |
202 | 201 | ||
203 | ANetNodeInstance * NodeCollection::findByName( const QString & S ) { | 202 | ANetNodeInstance * NodeCollection::findByName( const QString & S ) { |
204 | ANetNodeInstance * NNI = 0; | 203 | ANetNodeInstance * NNI = 0; |
205 | for( QListIterator<ANetNodeInstance> it(*this); | 204 | for( QListIterator<ANetNodeInstance> it(*this); |
206 | it.current(); | 205 | it.current(); |
207 | ++it ) { | 206 | ++it ) { |
208 | NNI = it.current(); | 207 | NNI = it.current(); |
209 | if( NNI->name() == S ) | 208 | if( NNI->name() == S ) |
210 | break; | 209 | break; |
211 | } | 210 | } |
212 | return NNI; | 211 | return NNI; |
213 | } | 212 | } |
214 | 213 | ||
215 | ANetNodeInstance * NodeCollection::findNext( ANetNodeInstance * NNI ) { | 214 | ANetNodeInstance * NodeCollection::findNext( ANetNodeInstance * NNI ) { |
216 | ANetNodeInstance * NNNI; | 215 | ANetNodeInstance * NNNI; |
217 | 216 | ||
218 | if( ! NNI ) | 217 | if( ! NNI ) |
219 | getToplevel(); | 218 | getToplevel(); |
220 | 219 | ||
221 | for( QListIterator<ANetNodeInstance> it(*this); | 220 | for( QListIterator<ANetNodeInstance> it(*this); |
222 | it.current(); | 221 | it.current(); |
223 | ++it ) { | 222 | ++it ) { |
224 | NNNI = it.current(); | 223 | NNNI = it.current(); |
225 | if( NNNI == NNI ) { | 224 | if( NNNI == NNI ) { |
226 | ++it; | 225 | ++it; |
227 | return it.current(); | 226 | return it.current(); |
228 | } | 227 | } |
229 | } | 228 | } |
230 | return 0; // no more next | 229 | return 0; // no more next |
231 | } | 230 | } |
232 | 231 | ||
233 | int NodeCollection::compareItems( QCollection::Item I1, | 232 | int NodeCollection::compareItems( QCollection::Item I1, |
234 | QCollection::Item I2 ) { | 233 | QCollection::Item I2 ) { |
235 | ANetNodeInstance * NNI1, * NNI2; | 234 | ANetNodeInstance * NNI1, * NNI2; |
236 | NNI1 = (ANetNodeInstance *)I1; | 235 | NNI1 = (ANetNodeInstance *)I1; |
237 | NNI2 = (ANetNodeInstance *)I2; | 236 | NNI2 = (ANetNodeInstance *)I2; |
238 | return strcmp( NNI1->name(), NNI2->name() ); | 237 | return strcmp( NNI1->name(), NNI2->name() ); |
239 | } | 238 | } |
240 | 239 | ||
241 | static char * State2PixmapTbl[] = { | 240 | static char * State2PixmapTbl[] = { |
242 | "NULL", // Unchecked : no pixmap | 241 | "NULL", // Unchecked : no pixmap |
243 | "check", // Unknown | 242 | "check", // Unknown |
244 | "delete", // unavailable | 243 | "delete", // unavailable |
245 | "disabled", // disabled | 244 | "disabled", // disabled |
246 | "off", // off | 245 | "off", // off |
247 | "disconnected", // available | 246 | "disconnected", // available |
248 | "connected" // up | 247 | "connected" // up |
249 | }; | 248 | }; |
250 | 249 | ||
251 | QPixmap NodeCollection::devicePixmap( void ) { | 250 | QPixmap NodeCollection::devicePixmap( void ) { |
252 | QPixmap pm = NSResources->getPixmap( | 251 | QPixmap pm = NSResources->getPixmap( |
253 | getToplevel()->nextNode()->pixmapName()+"-large"); | 252 | getToplevel()->nextNode()->pixmapName()+"-large"); |
254 | 253 | ||
255 | QPixmap Mini = NSResources->getPixmap( device()->netNode()->pixmapName() ); | 254 | QPixmap Mini = NSResources->getPixmap( device()->netNode()->pixmapName() ); |
256 | 255 | ||
257 | QPainter painter( &pm ); | 256 | QPainter painter( &pm ); |
258 | painter.drawPixmap( pm.width()-Mini.width(), | 257 | painter.drawPixmap( pm.width()-Mini.width(), |
259 | pm.height()-Mini.height(), | 258 | pm.height()-Mini.height(), |
260 | Mini ); | 259 | Mini ); |
261 | pm.setMask( pm.createHeuristicMask( TRUE ) ); | 260 | pm.setMask( pm.createHeuristicMask( TRUE ) ); |
262 | return pm; | 261 | return pm; |
263 | } | 262 | } |
264 | 263 | ||
265 | QPixmap NodeCollection::statePixmap( State_t S) { | 264 | QPixmap NodeCollection::statePixmap( State_t S) { |
266 | return NSResources->getPixmap( State2PixmapTbl[S] ); | 265 | return NSResources->getPixmap( State2PixmapTbl[S] ); |
267 | } | 266 | } |
268 | 267 | ||
269 | QString NodeCollection::stateName( State_t S) { | 268 | QString NodeCollection::stateName( State_t S) { |
270 | switch( S ) { | 269 | switch( S ) { |
271 | case Unknown : | 270 | case Unknown : |
272 | return qApp->translate( "networksettings2", "Unknown"); | 271 | return qApp->translate( "networksettings2", "Unknown"); |
273 | case Unavailable : | 272 | case Unavailable : |
274 | return qApp->translate( "networksettings2", "Unavailable"); | 273 | return qApp->translate( "networksettings2", "Unavailable"); |
275 | case Disabled : | 274 | case Disabled : |
276 | return qApp->translate( "networksettings2", "Disabled"); | 275 | return qApp->translate( "networksettings2", "Disabled"); |
277 | case Off : | 276 | case Off : |
278 | return qApp->translate( "networksettings2", "Off"); | 277 | return qApp->translate( "networksettings2", "Off"); |
279 | case Available : | 278 | case Available : |
280 | return qApp->translate( "networksettings2", "Available"); | 279 | return qApp->translate( "networksettings2", "Available"); |
281 | case IsUp : | 280 | case IsUp : |
282 | return qApp->translate( "networksettings2", "IsUp"); | 281 | return qApp->translate( "networksettings2", "IsUp"); |
283 | case Unchecked : /* FT */ | 282 | case Unchecked : /* FT */ |
284 | default : | 283 | default : |
285 | break; | 284 | break; |
286 | } | 285 | } |
287 | return QString(""); | 286 | return QString(""); |
288 | } | 287 | } |
289 | 288 | ||
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(); |
306 | } | 308 | } |
307 | 309 | ||
308 | AsDevice * RuntimeInfo::device( void ) { | 310 | AsDevice * RuntimeInfo::device( void ) { |
309 | return netNode()->nextNode()->runtime()->device(); | 311 | return netNode()->nextNode()->runtime()->device(); |
310 | } | 312 | } |
diff --git a/noncore/settings/networksettings2/networksettings2/netnode.h b/noncore/settings/networksettings2/networksettings2/netnode.h index 5e36062..ca35c27 100644 --- a/noncore/settings/networksettings2/networksettings2/netnode.h +++ b/noncore/settings/networksettings2/networksettings2/netnode.h | |||
@@ -1,382 +1,384 @@ | |||
1 | #ifndef NETNODE_H | 1 | #ifndef NETNODE_H |
2 | #define NETNODE_H | 2 | #define NETNODE_H |
3 | 3 | ||
4 | #include <qtextstream.h> | 4 | #include <qtextstream.h> |
5 | #include <qlist.h> | 5 | #include <qlist.h> |
6 | #include <qdict.h> | 6 | #include <qdict.h> |
7 | #include <qpixmap.h> | 7 | #include <qpixmap.h> |
8 | #include <qobject.h> | 8 | #include <qobject.h> |
9 | #include <time.h> | 9 | #include <time.h> |
10 | 10 | ||
11 | #include <Utils.h> | ||
12 | |||
11 | // difference feature interfaces | 13 | // difference feature interfaces |
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> |
19 | 21 | ||
20 | class ANetNode; | 22 | class ANetNode; |
21 | class ANetNodeInstance; | 23 | class ANetNodeInstance; |
22 | class NodeCollection; | 24 | class NodeCollection; |
23 | class QTextStream; | 25 | class QTextStream; |
24 | class RuntimeInfo; | 26 | class RuntimeInfo; |
25 | class InterfaceInfo; | 27 | class InterfaceInfo; |
26 | 28 | ||
27 | extern QString & deQuote( QString & X ); | 29 | extern QString & deQuote( QString & X ); |
28 | extern QString quote( QString X ); | 30 | extern QString quote( QString X ); |
29 | 31 | ||
30 | #include "systemfile.h" | 32 | #include "systemfile.h" |
31 | 33 | ||
32 | typedef enum State { | 34 | typedef enum State { |
33 | // if we have not yet detected the state of the device | 35 | // if we have not yet detected the state of the device |
34 | Unchecked = 0, | 36 | Unchecked = 0, |
35 | // if we cannot determine the state | 37 | // if we cannot determine the state |
36 | Unknown = 1, | 38 | Unknown = 1, |
37 | // if connection cannot be established e.g. because | 39 | // if connection cannot be established e.g. because |
38 | // the hardware is not available | 40 | // the hardware is not available |
39 | Unavailable = 2, | 41 | Unavailable = 2, |
40 | // if the connection cannot be establishec but NOT | 42 | // if the connection cannot be establishec but NOT |
41 | // because it is physically impossible but because | 43 | // because it is physically impossible but because |
42 | // it has been disabled for FUNCTIONAL reasons | 44 | // it has been disabled for FUNCTIONAL reasons |
43 | Disabled = 3, | 45 | Disabled = 3, |
44 | // if connection is available to is currently down | 46 | // if connection is available to is currently down |
45 | // i.e. the corresponding hardware is not activated | 47 | // i.e. the corresponding hardware is not activated |
46 | Off = 4, | 48 | Off = 4, |
47 | // if connection is available to be used (i.e. the | 49 | // if connection is available to be used (i.e. the |
48 | // devices if fully ready to be used | 50 | // devices if fully ready to be used |
49 | Available = 5, | 51 | Available = 5, |
50 | // if connection is being used | 52 | // if connection is being used |
51 | IsUp = 6 | 53 | IsUp = 6 |
52 | } State_t; | 54 | } State_t; |
53 | 55 | ||
54 | typedef enum Action { | 56 | typedef enum Action { |
55 | // to make the device unavailable functionally | 57 | // to make the device unavailable functionally |
56 | Disable = 0, | 58 | Disable = 0, |
57 | // to make the device available functionally | 59 | // to make the device available functionally |
58 | Enable = 1, | 60 | Enable = 1, |
59 | // bring the hardware up | 61 | // bring the hardware up |
60 | Activate = 2, | 62 | Activate = 2, |
61 | // bring the hardware down | 63 | // bring the hardware down |
62 | Deactivate = 3, | 64 | Deactivate = 3, |
63 | // bring the connection up | 65 | // bring the connection up |
64 | Up = 4, | 66 | Up = 4, |
65 | // bring the connection down | 67 | // bring the connection down |
66 | Down = 5 | 68 | Down = 5 |
67 | } Action_t; | 69 | } Action_t; |
68 | 70 | ||
69 | class ANetNode : public QObject{ | 71 | class ANetNode : public QObject{ |
70 | 72 | ||
71 | public: | 73 | public: |
72 | 74 | ||
73 | typedef QArray<ANetNode *> NetNodeList; | 75 | typedef QArray<ANetNode *> NetNodeList; |
74 | 76 | ||
75 | ANetNode( const char * Name ) : QObject( 0, Name ) {} | 77 | ANetNode( const char * Name ) : QObject( 0, Name ) {} |
76 | virtual ~ANetNode(){}; | 78 | virtual ~ANetNode(){}; |
77 | 79 | ||
78 | // pixmap needed for this NetNode | 80 | // pixmap needed for this NetNode |
79 | virtual const QString pixmapName() = 0; | 81 | virtual const QString pixmapName() = 0; |
80 | 82 | ||
81 | // description for this NetNode | 83 | // description for this NetNode |
82 | virtual const QString nodeDescription() = 0; | 84 | virtual const QString nodeDescription() = 0; |
83 | 85 | ||
84 | // create a blank instance of a net node | 86 | // create a blank instance of a net node |
85 | virtual ANetNodeInstance * createInstance( void ) = 0; | 87 | virtual ANetNodeInstance * createInstance( void ) = 0; |
86 | 88 | ||
87 | // return feature this NetNode provides | 89 | // return feature this NetNode provides |
88 | virtual const char * provides( void ) = 0; | 90 | virtual const char * provides( void ) = 0; |
89 | virtual const char ** needs( void ) = 0; | 91 | virtual const char ** needs( void ) = 0; |
90 | 92 | ||
91 | // generate files specific for this node (if any) | 93 | // generate files specific for this node (if any) |
92 | virtual bool generateProperFilesFor( ANetNodeInstance * NNI ) = 0; | 94 | virtual bool generateProperFilesFor( ANetNodeInstance * NNI ) = 0; |
93 | // return TRUE if this node has data to be inserted in systemfile | 95 | // return TRUE if this node has data to be inserted in systemfile |
94 | // with name S | 96 | // with name S |
95 | virtual bool hasDataFor( const QString & S ) = 0; | 97 | virtual bool hasDataFor( const QString & S ) = 0; |
96 | // generate data specific for the device for the system file S | 98 | // generate data specific for the device for the system file S |
97 | // called only IF data was needed | 99 | // called only IF data was needed |
98 | virtual bool generateDeviceDataForCommonFile( | 100 | virtual bool generateDeviceDataForCommonFile( |
99 | SystemFile & SF, long DevNr ) = 0; | 101 | SystemFile & SF, long DevNr ) = 0; |
100 | 102 | ||
101 | // does this Node provide a Connection | 103 | // does this Node provide a Connection |
102 | bool isToplevel( void ) | 104 | bool isToplevel( void ) |
103 | { return strcmp( provides(), "fullsetup") == 0 ; } | 105 | { return strcmp( provides(), "fullsetup") == 0 ; } |
104 | 106 | ||
105 | // generate NIC name based on instance nr | 107 | // generate NIC name based on instance nr |
106 | // only relevant if node instances are devices | 108 | // only relevant if node instances are devices |
107 | virtual QString genNic( long ) | 109 | virtual QString genNic( long ) |
108 | { return QString(""); } | 110 | { return QString(""); } |
109 | 111 | ||
110 | // max number of instances for this node type | 112 | // max number of instances for this node type |
111 | // only relevant if node instances are devices | 113 | // only relevant if node instances are devices |
112 | virtual long instanceCount( void ) | 114 | virtual long instanceCount( void ) |
113 | { return 1; } | 115 | { return 1; } |
114 | 116 | ||
115 | // set the value of an attribute | 117 | // set the value of an attribute |
116 | void setAttribute( QString & Attr, QString & Value ) ; | 118 | void setAttribute( QString & Attr, QString & Value ) ; |
117 | void saveAttributes( QTextStream & TS ) ; | 119 | void saveAttributes( QTextStream & TS ) ; |
118 | 120 | ||
119 | // compiled references to 'needed' NetNodes -> needs list | 121 | // compiled references to 'needed' NetNodes -> needs list |
120 | void setAlternatives( NetNodeList * Alt ) | 122 | void setAlternatives( NetNodeList * Alt ) |
121 | { Alternatives = Alt; } | 123 | { Alternatives = Alt; } |
122 | NetNodeList & alternatives( void ) | 124 | NetNodeList & alternatives( void ) |
123 | { return *Alternatives; } | 125 | { return *Alternatives; } |
124 | 126 | ||
125 | protected : | 127 | protected : |
126 | 128 | ||
127 | NetNodeList * Alternatives; | 129 | NetNodeList * Alternatives; |
128 | 130 | ||
129 | private : | 131 | private : |
130 | 132 | ||
131 | virtual void setSpecificAttribute( QString & , QString & ) = 0; | 133 | virtual void setSpecificAttribute( QString & , QString & ) = 0; |
132 | virtual void saveSpecificAttribute( QTextStream & ) = 0; | 134 | virtual void saveSpecificAttribute( QTextStream & ) = 0; |
133 | 135 | ||
134 | }; | 136 | }; |
135 | 137 | ||
136 | class ANetNodeInstance : public QObject { | 138 | class ANetNodeInstance : public QObject { |
137 | 139 | ||
138 | public: | 140 | public: |
139 | 141 | ||
140 | ANetNodeInstance( ANetNode * NN ) : QObject() | 142 | ANetNodeInstance( ANetNode * NN ) : QObject() |
141 | { IsModified=0; NodeType = NN; IsNew = TRUE; } | 143 | { IsModified=0; NodeType = NN; IsNew = TRUE; } |
142 | virtual ~ANetNodeInstance( void ) { } | 144 | virtual ~ANetNodeInstance( void ) { } |
143 | 145 | ||
144 | virtual RuntimeInfo * runtime( void ) = 0; | 146 | virtual RuntimeInfo * runtime( void ) = 0; |
145 | 147 | ||
146 | void setConnection( NodeCollection * NC ) | 148 | void setConnection( NodeCollection * NC ) |
147 | { Connection = NC; } | 149 | { Connection = NC; } |
148 | NodeCollection * connection( void ) | 150 | NodeCollection * connection( void ) |
149 | { return Connection; } | 151 | { return Connection; } |
150 | 152 | ||
151 | // create edit widget under parent | 153 | // create edit widget under parent |
152 | virtual QWidget * edit( QWidget * parent ) = 0; | 154 | virtual QWidget * edit( QWidget * parent ) = 0; |
153 | // is given data acceptable | 155 | // is given data acceptable |
154 | virtual QString acceptable( void ) = 0; | 156 | virtual QString acceptable( void ) = 0; |
155 | 157 | ||
156 | // return data was modified | 158 | // return data was modified |
157 | void setModified( bool M ) | 159 | void setModified( bool M ) |
158 | { IsModified = M; } | 160 | { IsModified = M; } |
159 | bool isModified( void ) | 161 | bool isModified( void ) |
160 | { return IsModified; } | 162 | { return IsModified; } |
161 | 163 | ||
162 | // get data from GUI and store in node | 164 | // get data from GUI and store in node |
163 | virtual void commit( void ) = 0; | 165 | virtual void commit( void ) = 0; |
164 | 166 | ||
165 | // get next node | 167 | // get next node |
166 | ANetNodeInstance * nextNode(); | 168 | ANetNodeInstance * nextNode(); |
167 | // return NetNode this is an instance of | 169 | // return NetNode this is an instance of |
168 | ANetNode * nodeClass( void ) | 170 | ANetNode * nodeClass( void ) |
169 | { return NodeType; } | 171 | { return NodeType; } |
170 | 172 | ||
171 | // intialize am instance of a net node | 173 | // intialize am instance of a net node |
172 | void initialize( void ); | 174 | void initialize( void ); |
173 | 175 | ||
174 | // set the value of an attribute | 176 | // set the value of an attribute |
175 | void setAttribute( QString & Attr, QString & Value ) ; | 177 | void setAttribute( QString & Attr, QString & Value ) ; |
176 | void saveAttributes( QTextStream & TS ) ; | 178 | void saveAttributes( QTextStream & TS ) ; |
177 | 179 | ||
178 | // return true if node isntance is NEW and not loaded | 180 | // return true if node isntance is NEW and not loaded |
179 | void setNew( bool IsN ) | 181 | void setNew( bool IsN ) |
180 | { IsNew = IsN; } | 182 | { IsNew = IsN; } |
181 | bool isNew( void ) | 183 | bool isNew( void ) |
182 | { return IsNew; } | 184 | { return IsNew; } |
183 | 185 | ||
184 | // return description for this instance | 186 | // return description for this instance |
185 | QString & description( void ) | 187 | QString & description( void ) |
186 | { return Description; } | 188 | { return Description; } |
187 | void setDescription( const QString & S ) | 189 | void setDescription( const QString & S ) |
188 | { Description = S; } | 190 | { Description = S; } |
189 | 191 | ||
190 | // pixmap for this instance -> from NetNode | 192 | // pixmap for this instance -> from NetNode |
191 | const QString pixmapName( void ) | 193 | const QString pixmapName( void ) |
192 | { return NodeType->pixmapName(); } | 194 | { return NodeType->pixmapName(); } |
193 | 195 | ||
194 | const char * provides( void ) | 196 | const char * provides( void ) |
195 | { return NodeType->provides(); } | 197 | { return NodeType->provides(); } |
196 | 198 | ||
197 | const char ** needs( void ) | 199 | const char ** needs( void ) |
198 | { return NodeType->needs(); } | 200 | { return NodeType->needs(); } |
199 | 201 | ||
200 | // returns node specific data -> only useful for 'buddy' | 202 | // returns node specific data -> only useful for 'buddy' |
201 | virtual void * data( void ) = 0; | 203 | virtual void * data( void ) = 0; |
202 | 204 | ||
203 | // return TRUE if this node has data to be inserted in systemfile | 205 | // return TRUE if this node has data to be inserted in systemfile |
204 | // with name S | 206 | // with name S |
205 | virtual bool hasDataFor( const QString & S ) = 0; | 207 | virtual bool hasDataFor( const QString & S ) = 0; |
206 | 208 | ||
207 | // generate data specific for a profile and for the system file S | 209 | // generate data specific for a profile and for the system file S |
208 | // called only IF data was needed | 210 | // called only IF data was needed |
209 | virtual bool generateDataForCommonFile( | 211 | virtual bool generateDataForCommonFile( |
210 | SystemFile & SF, long DevNr ) = 0; | 212 | SystemFile & SF, long DevNr ) = 0; |
211 | 213 | ||
212 | protected : | 214 | protected : |
213 | 215 | ||
214 | virtual void setSpecificAttribute( QString & , QString & ) = 0; | 216 | virtual void setSpecificAttribute( QString & , QString & ) = 0; |
215 | virtual void saveSpecificAttribute( QTextStream & ) = 0; | 217 | virtual void saveSpecificAttribute( QTextStream & ) = 0; |
216 | 218 | ||
217 | ANetNode * NodeType; | 219 | ANetNode * NodeType; |
218 | // connection to which this node belongs to | 220 | // connection to which this node belongs to |
219 | NodeCollection * Connection; | 221 | NodeCollection * Connection; |
220 | QString Description; | 222 | QString Description; |
221 | bool IsModified; | 223 | bool IsModified; |
222 | bool IsNew; | 224 | bool IsNew; |
223 | 225 | ||
224 | static long InstanceCounter; | 226 | static long InstanceCounter; |
225 | }; | 227 | }; |
226 | 228 | ||
227 | class RuntimeInfo : public QObject { | 229 | class RuntimeInfo : public QObject { |
228 | 230 | ||
229 | Q_OBJECT | 231 | Q_OBJECT |
230 | 232 | ||
231 | public : | 233 | public : |
232 | 234 | ||
233 | RuntimeInfo( ANetNodeInstance * TheNNI ) | 235 | RuntimeInfo( ANetNodeInstance * TheNNI ) |
234 | { NNI = TheNNI; } | 236 | { NNI = TheNNI; } |
235 | 237 | ||
236 | // downcast implemented by specify runtime classes | 238 | // downcast implemented by specify runtime classes |
237 | virtual AsDevice * asDevice( void ) | 239 | virtual AsDevice * asDevice( void ) |
238 | { return 0; } | 240 | { return 0; } |
239 | virtual AsConnection * asConnection( void ) | 241 | virtual AsConnection * asConnection( void ) |
240 | { return 0; } | 242 | { return 0; } |
241 | virtual AsLine * asLine( void ) | 243 | virtual AsLine * asLine( void ) |
242 | { return 0; } | 244 | { return 0; } |
243 | virtual AsFullSetup * asFullSetup( void ) | 245 | virtual AsFullSetup * asFullSetup( void ) |
244 | { return 0; } | 246 | { return 0; } |
245 | 247 | ||
246 | // does this node handles this interface e.g.eth0 | 248 | // does this node handles this interface e.g.eth0 |
247 | // recurse deeper if this node cannot answer that question | 249 | // recurse deeper if this node cannot answer that question |
248 | virtual bool handlesInterface( const QString & ) | 250 | virtual bool handlesInterface( const QString & ) |
249 | { return 0; } | 251 | { return 0; } |
250 | virtual bool handlesInterface( const InterfaceInfo & ) | 252 | virtual bool handlesInterface( const InterfaceInfo & ) |
251 | { return 0; } | 253 | { return 0; } |
252 | virtual InterfaceInfo * assignedInterface( void ); | 254 | virtual InterfaceInfo * assignedInterface( void ); |
253 | virtual AsDevice * device( void ); | 255 | virtual AsDevice * device( void ); |
254 | 256 | ||
255 | ANetNodeInstance * netNode() | 257 | ANetNodeInstance * netNode() |
256 | { return NNI; } | 258 | { return NNI; } |
257 | NodeCollection * connection() | 259 | NodeCollection * connection() |
258 | { return NNI->connection(); } | 260 | { return NNI->connection(); } |
259 | 261 | ||
260 | virtual void detectState( NodeCollection * NC ) = 0; | 262 | virtual void detectState( NodeCollection * NC ) = 0; |
261 | virtual bool setState( NodeCollection * NC, Action_t A, bool Force = 0 ) = 0; | 263 | virtual bool setState( NodeCollection * NC, Action_t A, bool Force = 0 ) = 0; |
262 | virtual bool canSetState( State_t Curr, Action_t A ) = 0; | 264 | virtual bool canSetState( State_t Curr, Action_t A ) = 0; |
263 | 265 | ||
264 | signals : | 266 | signals : |
265 | 267 | ||
266 | // sent by device if state changes | 268 | // sent by device if state changes |
267 | void stateChanged( State_t S, ANetNodeInstance * NNI ); | 269 | void stateChanged( State_t S, ANetNodeInstance * NNI ); |
268 | 270 | ||
269 | protected : | 271 | protected : |
270 | 272 | ||
271 | // connection this runtime info belongs to | 273 | // connection this runtime info belongs to |
272 | ANetNodeInstance * NNI; | 274 | ANetNodeInstance * NNI; |
273 | }; | 275 | }; |
274 | 276 | ||
275 | class NodeCollection : public QList<ANetNodeInstance> { | 277 | class NodeCollection : public QList<ANetNodeInstance> { |
276 | 278 | ||
277 | public : | 279 | 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 ; } |
295 | 297 | ||
296 | bool handlesInterface( const QString & S ) { | 298 | bool handlesInterface( const QString & S ) { |
297 | return getToplevel()->runtime()->handlesInterface( S ); | 299 | return getToplevel()->runtime()->handlesInterface( S ); |
298 | } | 300 | } |
299 | 301 | ||
300 | InterfaceInfo * assignedInterface( void ) { | 302 | InterfaceInfo * assignedInterface( void ) { |
301 | return getToplevel()->runtime()->assignedInterface(); | 303 | return getToplevel()->runtime()->assignedInterface(); |
302 | } | 304 | } |
303 | 305 | ||
304 | AsDevice * device() { | 306 | AsDevice * device() { |
305 | return getToplevel()->runtime()->device(); | 307 | return getToplevel()->runtime()->device(); |
306 | } | 308 | } |
307 | 309 | ||
310 | bool triggersVPN(); | ||
311 | |||
308 | State_t state( bool Update = 0 ) | 312 | State_t state( bool Update = 0 ) |
309 | { if( CurrentState == Unchecked || Update ) { | 313 | { Log(( "%s state %d(=%d?)\n", Name.latin1(), CurrentState, |
314 | Unchecked )); | ||
315 | if( CurrentState == Unchecked || Update ) { | ||
316 | Log(( "TL %p TLR %p\n", | ||
317 | getToplevel(), | ||
318 | getToplevel()->runtime() )); | ||
310 | // need to get current state | 319 | // need to get current state |
311 | getToplevel()->runtime()->detectState( this ); | 320 | getToplevel()->runtime()->detectState( this ); |
312 | } | 321 | } |
313 | return CurrentState; | 322 | return CurrentState; |
314 | } | 323 | } |
315 | 324 | ||
316 | // get the ixmap for this device | 325 | // get the ixmap for this device |
317 | QPixmap devicePixmap( void ); | 326 | QPixmap devicePixmap( void ); |
318 | QPixmap statePixmap( State_t S ); | 327 | QPixmap statePixmap( State_t S ); |
319 | QPixmap statePixmap( bool Update = 0 ) | 328 | QPixmap statePixmap( bool Update = 0 ) |
320 | { return statePixmap( state(Update) ); } | 329 | { return statePixmap( state(Update) ); } |
321 | QString stateName( State_t ); | 330 | QString stateName( State_t ); |
322 | QString stateName( bool Update = 0 ) | 331 | QString stateName( bool Update = 0 ) |
323 | { return stateName( state(Update) ); } | 332 | { return stateName( state(Update) ); } |
324 | 333 | ||
325 | bool setState( Action_t A, bool Force =0 ) | 334 | bool setState( Action_t A, bool Force =0 ) |
326 | { return getToplevel()->runtime()->setState( this, A, Force ); } | 335 | { return getToplevel()->runtime()->setState( this, A, Force ); } |
327 | bool canSetState( Action_t A ) | 336 | bool canSetState( Action_t A ) |
328 | { return getToplevel()->runtime()->canSetState( CurrentState, A ); } | 337 | { return getToplevel()->runtime()->canSetState( CurrentState, A ); } |
329 | 338 | ||
330 | void save( QTextStream & TS ); | 339 | void save( QTextStream & TS ); |
331 | 340 | ||
332 | void append( ANetNodeInstance * NNI ); | 341 | void append( ANetNodeInstance * NNI ); |
333 | 342 | ||
334 | // makes sure that all items in the connection point to | 343 | // makes sure that all items in the connection point to |
335 | // that connectoin | 344 | // that connectoin |
336 | void reassign( void ); | 345 | void reassign( void ); |
337 | 346 | ||
338 | ANetNodeInstance * getToplevel( void ); | 347 | ANetNodeInstance * getToplevel( void ); |
339 | ANetNodeInstance * findNext( ANetNodeInstance * NNI ); | 348 | ANetNodeInstance * findNext( ANetNodeInstance * NNI ); |
340 | ANetNodeInstance * findByName( const QString & S ); | 349 | ANetNodeInstance * findByName( const QString & S ); |
341 | 350 | ||
342 | const QString & name() | 351 | const QString & name() |
343 | { return Name; } | 352 | { return Name; } |
344 | 353 | ||
345 | const QString & description( void ); | 354 | const QString & description( void ); |
346 | 355 | ||
347 | void setName( const QString & N) | 356 | void setName( const QString & N) |
348 | { Name = N; } | 357 | { Name = N; } |
349 | 358 | ||
350 | State_t currentState( void ) | 359 | State_t currentState( void ) |
351 | { return CurrentState; } | 360 | { return CurrentState; } |
352 | void setCurrentState( State_t S ) | 361 | void setCurrentState( State_t S ) |
353 | { CurrentState = S; } | 362 | { CurrentState = S; } |
354 | 363 | ||
355 | long maxConnectionNumber( void ) | ||
356 | { return MaxNr; } | ||
357 | |||
358 | static void resetMaxNr( void ) | ||
359 | { MaxNr = -1; } | ||
360 | |||
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 |
375 | bool IsNew; | 377 | bool IsNew; |
376 | // index in listbox | 378 | // index in listbox |
377 | int Index; | 379 | int Index; |
378 | bool IsModified; | 380 | bool IsModified; |
379 | 381 | ||
380 | }; | 382 | }; |
381 | 383 | ||
382 | #endif | 384 | #endif |
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 | |||
@@ -1,28 +1,28 @@ | |||
1 | TEMPLATE = lib | 1 | TEMPLATE = lib |
2 | CONFIG += qt warn_on release | 2 | CONFIG += qt warn_on release |
3 | #CONFIG += qt warn_on debug | 3 | #CONFIG += qt warn_on debug |
4 | DESTDIR = $(OPIEDIR)/lib$(PROJMAK) | 4 | DESTDIR = $(OPIEDIR)/lib$(PROJMAK) |
5 | HEADERS = netnode.h \ | 5 | HEADERS = netnode.h \ |
6 | resources.h \ | 6 | resources.h \ |
7 | system.h \ | 7 | system.h \ |
8 | asline.h \ | 8 | asline.h \ |
9 | GUIUtils.h \ | 9 | GUIUtils.h \ |
10 | asconnection.h \ | 10 | asconnection.h \ |
11 | asfullsetup.h \ | 11 | asfullsetup.h \ |
12 | systemfile.h \ | 12 | systemfile.h \ |
13 | wextensions.h \ | 13 | wextensions.h \ |
14 | asdevice.h | 14 | asdevice.h |
15 | SOURCES = netnode.cpp \ | 15 | SOURCES = netnode.cpp \ |
16 | GUIUtils.cpp \ | 16 | GUIUtils.cpp \ |
17 | system.cpp \ | 17 | system.cpp \ |
18 | systemfile.cpp \ | 18 | systemfile.cpp \ |
19 | wextensions.cpp \ | 19 | wextensions.cpp \ |
20 | resources.cpp | 20 | resources.cpp |
21 | INCLUDEPATH+= $(OPIEDIR)/include ../networksettings2 | 21 | INCLUDEPATH+= $(OPIEDIR)/include ../networksettings2 |
22 | DEPENDPATH+= $(OPIEDIR)/include | 22 | DEPENDPATH+= $(OPIEDIR)/include |
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 | |||
@@ -1,370 +1,444 @@ | |||
1 | #include <unistd.h> | 1 | #include <unistd.h> |
2 | #include <errno.h> | 2 | #include <errno.h> |
3 | #include <fcntl.h> | 3 | #include <fcntl.h> |
4 | #include <pwd.h> | 4 | #include <pwd.h> |
5 | #include <qpixmap.h> | 5 | #include <qpixmap.h> |
6 | #include <qdir.h> | 6 | #include <qdir.h> |
7 | #include <qpe/qlibrary.h> | 7 | #include <qpe/qlibrary.h> |
8 | #include <qpe/qpeapplication.h> | 8 | #include <qpe/qpeapplication.h> |
9 | #include <opie2/odebug.h> | 9 | #include <opie2/odebug.h> |
10 | #include <qtopia/resource.h> | 10 | #include <qtopia/resource.h> |
11 | 11 | ||
12 | #include "netnode.h" | 12 | #include "netnode.h" |
13 | #include "resources.h" | 13 | #include "resources.h" |
14 | 14 | ||
15 | #define PLUGINDIR "plugins/networksettings2" | 15 | #define PLUGINDIR "plugins/networksettings2" |
16 | #define ICONDIR "/pics/networksettings2/" | 16 | #define ICONDIR "/pics/networksettings2/" |
17 | 17 | ||
18 | // single resources instance | 18 | // single resources instance |
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 | ||
34 | for ( ; OuterIt.current(); ++OuterIt ) { | 36 | for ( ; OuterIt.current(); ++OuterIt ) { |
35 | // find needs list | 37 | // find needs list |
36 | ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList; | 38 | ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList; |
37 | ANetNode::NetNodeList & NNL = *(NNLP); | 39 | ANetNode::NetNodeList & NNL = *(NNLP); |
38 | 40 | ||
39 | // must iterate this way to avoid duplication pointers | 41 | // must iterate this way to avoid duplication pointers |
40 | for ( QDictIterator<NetNode_t> InnerIt( AllNodeTypes ); | 42 | for ( QDictIterator<NetNode_t> InnerIt( AllNodeTypes ); |
41 | InnerIt.current(); ++InnerIt ) { | 43 | InnerIt.current(); ++InnerIt ) { |
42 | if( InnerIt.current() == OuterIt.current() ) | 44 | if( InnerIt.current() == OuterIt.current() ) |
43 | // avoid recursive | 45 | // avoid recursive |
44 | continue; | 46 | continue; |
45 | 47 | ||
46 | const char * Provides = InnerIt.current()->NetNode->provides(); | 48 | const char * Provides = InnerIt.current()->NetNode->provides(); |
47 | NeedsRun = OuterIt.current()->NetNode->needs(); | 49 | NeedsRun = OuterIt.current()->NetNode->needs(); |
48 | for( ; *NeedsRun; NeedsRun ++ ) { | 50 | for( ; *NeedsRun; NeedsRun ++ ) { |
49 | if( strcmp( Provides, *NeedsRun ) == 0 ) { | 51 | if( strcmp( Provides, *NeedsRun ) == 0 ) { |
50 | // inner provides what outer needs | 52 | // inner provides what outer needs |
51 | NNL.resize( NNL.size() + 1 ); | 53 | NNL.resize( NNL.size() + 1 ); |
52 | NNL[NNL.size()-1] = InnerIt.current()->NetNode; | 54 | NNL[NNL.size()-1] = InnerIt.current()->NetNode; |
53 | Done = 1; // break from 2 loops | 55 | Done = 1; // break from 2 loops |
54 | break; | 56 | break; |
55 | } | 57 | } |
56 | } | 58 | } |
57 | } | 59 | } |
58 | OuterIt.current()->NetNode->setAlternatives( NNLP ); | 60 | OuterIt.current()->NetNode->setAlternatives( NNLP ); |
59 | } | 61 | } |
60 | } | 62 | } |
61 | 63 | ||
62 | // define Node types to Description map | 64 | // define Node types to Description map |
63 | NodeTypeNameMap.insert( "device", tr( "Network Device" ) ); | 65 | NodeTypeNameMap.insert( "device", tr( "Network Device" ) ); |
64 | NodeTypeNameMap.insert( "line", tr( "Character device" ) ); | 66 | NodeTypeNameMap.insert( "line", tr( "Character device" ) ); |
65 | NodeTypeNameMap.insert( "connection", tr( "IP Connection" ) ); | 67 | NodeTypeNameMap.insert( "connection", tr( "IP Connection" ) ); |
66 | NodeTypeNameMap.insert( "fullsetup", tr( "Connection Profile" ) ); | 68 | NodeTypeNameMap.insert( "fullsetup", tr( "Connection Profile" ) ); |
67 | 69 | ||
68 | NodeTypeDescriptionMap.insert( "device", | 70 | NodeTypeDescriptionMap.insert( "device", |
69 | tr( "<p>Devices that can handle IP packets</p>" ) ); | 71 | tr( "<p>Devices that can handle IP packets</p>" ) ); |
70 | NodeTypeDescriptionMap.insert( "line", | 72 | NodeTypeDescriptionMap.insert( "line", |
71 | tr( "<p>Devices that can handle single bytes</p>" ) ); | 73 | tr( "<p>Devices that can handle single bytes</p>" ) ); |
72 | NodeTypeDescriptionMap.insert( "connection", | 74 | NodeTypeDescriptionMap.insert( "connection", |
73 | tr( "<p>Nodes that provide working IP connections</p>" ) ); | 75 | tr( "<p>Nodes that provide working IP connections</p>" ) ); |
74 | NodeTypeDescriptionMap.insert( "fullsetup", | 76 | NodeTypeDescriptionMap.insert( "fullsetup", |
75 | tr( "<p>Fully configured connection profile</p>" ) ); | 77 | tr( "<p>Fully configured connection profile</p>" ) ); |
76 | 78 | ||
77 | // define system files | 79 | // define system files |
78 | addSystemFile( new SystemFile( "interfaces", "./interfaces" ) ); | 80 | addSystemFile( new SystemFile( "interfaces", "./interfaces" ) ); |
79 | 81 | ||
80 | // get access to the system | 82 | // get access to the system |
81 | TheSystem = new System(); | 83 | TheSystem = new System(); |
82 | 84 | ||
83 | detectCurrentUser(); | ||
84 | } | 85 | } |
85 | 86 | ||
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 ); |
105 | const QFileInfoList *list = d.entryInfoList(); | 118 | const QFileInfoList *list = d.entryInfoList(); |
106 | QFileInfoListIterator it( *list ); | 119 | QFileInfoListIterator it( *list ); |
107 | QFileInfo *fi; | 120 | QFileInfo *fi; |
108 | 121 | ||
109 | while ( (fi=it.current()) ) { | 122 | while ( (fi=it.current()) ) { |
110 | 123 | ||
111 | if( fi->fileName().contains(".so")){ | 124 | if( fi->fileName().contains(".so")){ |
112 | /* if loaded install translation */ | 125 | /* if loaded install translation */ |
113 | if( loadNetNode(path + "/" + fi->fileName()) ) { | 126 | if( loadNetNode(path + "/" + fi->fileName()) ) { |
114 | QTranslator *trans = new QTranslator(qApp); | 127 | QTranslator *trans = new QTranslator(qApp); |
115 | QString fn = QPEApplication::qpeDir()+ | 128 | QString fn = QPEApplication::qpeDir()+ |
116 | "/i18n/"+lang+"/"+ | 129 | "/i18n/"+lang+"/"+ |
117 | fi->fileName().left( fi->fileName().find(".") )+ | 130 | fi->fileName().left( fi->fileName().find(".") )+ |
118 | ".qm"; | 131 | ".qm"; |
119 | 132 | ||
120 | if( trans->load( fn ) ) | 133 | if( trans->load( fn ) ) |
121 | qApp->installTranslator( trans ); | 134 | qApp->installTranslator( trans ); |
122 | else | 135 | else |
123 | delete trans; | 136 | delete trans; |
124 | } | 137 | } |
125 | } | 138 | } |
126 | ++it; | 139 | ++it; |
127 | } | 140 | } |
128 | } | 141 | } |
129 | 142 | ||
143 | // used to find unique connection number | ||
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){ |
138 | 172 | ||
139 | QLibrary *lib = new QLibrary(pluginFileName); | 173 | QLibrary *lib = new QLibrary(pluginFileName); |
140 | void * res = lib->resolve(resolveString); | 174 | void * res = lib->resolve(resolveString); |
141 | if( ! res ){ | 175 | if( ! res ){ |
142 | delete lib; | 176 | delete lib; |
143 | return 0; | 177 | return 0; |
144 | } | 178 | } |
145 | 179 | ||
146 | GetNetNodeListFt_t getNetNodeList = (GetNetNodeListFt_t)res; | 180 | GetNetNodeListFt_t getNetNodeList = (GetNetNodeListFt_t)res; |
147 | 181 | ||
148 | // Try to get an object. | 182 | // Try to get an object. |
149 | QList<ANetNode> PNN; | 183 | QList<ANetNode> PNN; |
150 | 184 | ||
151 | getNetNodeList( PNN ); | 185 | getNetNodeList( PNN ); |
152 | if( PNN.isEmpty() ) { | 186 | if( PNN.isEmpty() ) { |
153 | delete lib; | 187 | delete lib; |
154 | return 0; | 188 | return 0; |
155 | } | 189 | } |
156 | 190 | ||
157 | ANetNode * NNP; | 191 | ANetNode * NNP; |
158 | for( QListIterator<ANetNode> it(PNN); | 192 | for( QListIterator<ANetNode> it(PNN); |
159 | it.current(); | 193 | it.current(); |
160 | ++it ) { | 194 | ++it ) { |
161 | NetNode_t * NN; | 195 | NetNode_t * NN; |
162 | 196 | ||
163 | NNP = it.current(); | 197 | NNP = it.current(); |
164 | NN = new NetNode_t; | 198 | NN = new NetNode_t; |
165 | NN->NetNode = NNP; | 199 | NN->NetNode = NNP; |
166 | NN->TheLibrary = lib; | 200 | NN->TheLibrary = lib; |
167 | NN->NodeCountInLib = PNN.count(); | 201 | NN->NodeCountInLib = PNN.count(); |
168 | 202 | ||
169 | // store mapping | 203 | // store mapping |
170 | printf( "Store %s\n", NN->NetNode->name() ); | ||
171 | AllNodeTypes.insert( NN->NetNode->name(), NN ); | 204 | AllNodeTypes.insert( NN->NetNode->name(), NN ); |
172 | } | 205 | } |
173 | 206 | ||
174 | return 1; | 207 | return 1; |
175 | } | 208 | } |
176 | 209 | ||
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]; |
190 | } | 225 | } |
191 | 226 | ||
192 | const QString & TheNSResources::netNode2Description( const char * s ) { | 227 | const QString & TheNSResources::netNode2Description( const char * s ) { |
193 | return NodeTypeDescriptionMap[s]; | 228 | return NodeTypeDescriptionMap[s]; |
194 | } | 229 | } |
195 | 230 | ||
196 | void TheNSResources::addConnection( NodeCollection * NC ) { | 231 | void TheNSResources::addConnection( NodeCollection * NC ) { |
197 | ANetNodeInstance * NNI; | 232 | ANetNodeInstance * NNI; |
198 | ConnectionsMap.insert( NC->name(), NC ); | 233 | ConnectionsMap.insert( NC->name(), NC ); |
199 | // add (new) nodes to NodeList | 234 | // add (new) nodes to NodeList |
200 | for( QListIterator<ANetNodeInstance> it(*NC); | 235 | for( QListIterator<ANetNodeInstance> it(*NC); |
201 | it.current(); | 236 | it.current(); |
202 | ++it ) { | 237 | ++it ) { |
203 | NNI = it.current(); | 238 | NNI = it.current(); |
204 | if( findNodeInstance( NNI->name() ) == 0 ) { | 239 | if( findNodeInstance( NNI->name() ) == 0 ) { |
205 | // new item | 240 | // new item |
206 | addNodeInstance( NNI ); | 241 | addNodeInstance( NNI ); |
207 | } | 242 | } |
208 | } | 243 | } |
209 | } | 244 | } |
210 | 245 | ||
211 | void TheNSResources::removeConnection( const QString & N ) { | 246 | void TheNSResources::removeConnection( const QString & N ) { |
212 | NodeCollection * NC = findConnection( N ); | 247 | NodeCollection * NC = findConnection( N ); |
213 | if( ! NC ) | 248 | if( ! NC ) |
214 | return; | 249 | return; |
215 | 250 | ||
216 | // delete netnodes in this connection | 251 | // delete netnodes in this connection |
217 | ANetNodeInstance * NNI; | 252 | ANetNodeInstance * NNI; |
218 | for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) { | 253 | for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) { |
219 | removeNodeInstance( NNI->name() ); | 254 | removeNodeInstance( NNI->name() ); |
220 | } | 255 | } |
221 | ConnectionsMap.remove( N ); | 256 | ConnectionsMap.remove( N ); |
222 | } | 257 | } |
223 | 258 | ||
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 | ||
250 | static EnvVar_t EV[] = { | 287 | static EnvVar_t EV[] = { |
251 | // AnEV( "HOME=" ), -> SPECIAL | 288 | // AnEV( "HOME=" ), -> SPECIAL |
252 | // AnEV( "LOGNAME=" ), -> SPECIAL | 289 | // AnEV( "LOGNAME=" ), -> SPECIAL |
253 | AnEV( "USER=" ), | 290 | AnEV( "USER=" ), |
254 | AnEV( "LD_LIBRARY_PATH=" ), | 291 | AnEV( "LD_LIBRARY_PATH=" ), |
255 | AnEV( "PATH=" ), | 292 | AnEV( "PATH=" ), |
256 | AnEV( "QTDIR=" ), | 293 | AnEV( "QTDIR=" ), |
257 | AnEV( "OPIEDIR=" ), | 294 | AnEV( "OPIEDIR=" ), |
258 | AnEV( "SHELL=" ), | 295 | AnEV( "SHELL=" ), |
259 | { NULL, 0 } | 296 | { NULL, 0 } |
260 | }; | 297 | }; |
261 | 298 | ||
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 | |||
@@ -1,128 +1,131 @@ | |||
1 | #ifndef __RESOURCES__H | 1 | #ifndef __RESOURCES__H |
2 | #define __RESOURCES__H | 2 | #define __RESOURCES__H |
3 | 3 | ||
4 | #include <qstring.h> | 4 | #include <qstring.h> |
5 | #include <qdict.h> | 5 | #include <qdict.h> |
6 | #include <qmap.h> | 6 | #include <qmap.h> |
7 | #include <qlist.h> | 7 | #include <qlist.h> |
8 | #include "netnode.h" | 8 | #include "netnode.h" |
9 | #include "systemfile.h" | 9 | #include "systemfile.h" |
10 | #include "system.h" | 10 | #include "system.h" |
11 | 11 | ||
12 | class QLibrary; | 12 | class QLibrary; |
13 | class QPixmap; | 13 | class QPixmap; |
14 | class ANetNode; | 14 | class ANetNode; |
15 | class ANetNodeInstance; | 15 | class ANetNodeInstance; |
16 | 16 | ||
17 | typedef void (*GetNetNodeListFt_t)(QList<ANetNode>& PNN ); | 17 | typedef void (*GetNetNodeListFt_t)(QList<ANetNode>& PNN ); |
18 | 18 | ||
19 | typedef struct NetNode_S { | 19 | typedef struct NetNode_S { |
20 | ANetNode * NetNode; | 20 | ANetNode * NetNode; |
21 | QLibrary * TheLibrary; | 21 | QLibrary * TheLibrary; |
22 | long NodeCountInLib; | 22 | long NodeCountInLib; |
23 | } NetNode_t; | 23 | } NetNode_t; |
24 | 24 | ||
25 | class CurrentQPEUser { | 25 | class CurrentQPEUser { |
26 | 26 | ||
27 | public : | 27 | public : |
28 | CurrentQPEUser() : UserName(), HomeDir(), EnvList() {} | 28 | CurrentQPEUser() : UserName(), HomeDir(), EnvList() {} |
29 | 29 | ||
30 | QString UserName; | 30 | QString UserName; |
31 | QString HomeDir; | 31 | QString HomeDir; |
32 | int Uid; | 32 | int Uid; |
33 | int Gid; | 33 | int Gid; |
34 | QArray<char *> EnvList; | 34 | QArray<char *> EnvList; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | typedef QDict<NetNode_t> Name2NetNode_t; | 37 | typedef QDict<NetNode_t> Name2NetNode_t; |
38 | typedef QDict<ANetNodeInstance > Name2Instance_t; | 38 | typedef QDict<ANetNodeInstance > Name2Instance_t; |
39 | typedef QDict<NodeCollection> Name2Connection_t; | 39 | typedef QDict<NodeCollection> Name2Connection_t; |
40 | typedef QDict<SystemFile> Name2SystemFile_t; | 40 | 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); |
60 | return (NNT) ? NNT->NetNode : 0; | 64 | return (NNT) ? NNT->NetNode : 0; |
61 | } | 65 | } |
62 | 66 | ||
63 | Name2SystemFile_t & systemFiles( void ) | 67 | Name2SystemFile_t & systemFiles( void ) |
64 | { return SystemFiles; } | 68 | { return SystemFiles; } |
65 | void addSystemFile( SystemFile * SF ) | 69 | void addSystemFile( SystemFile * SF ) |
66 | { SystemFiles.insert( SF->name(), SF ); } | 70 | { SystemFiles.insert( SF->name(), SF ); } |
67 | 71 | ||
68 | ANetNodeInstance * createNodeInstance( const QString & S ) | 72 | ANetNodeInstance * createNodeInstance( const QString & S ) |
69 | { ANetNodeInstance * NNI = 0; | 73 | { ANetNodeInstance * NNI = 0; |
70 | NetNode_t * NNT = AllNodeTypes[S]; | 74 | NetNode_t * NNT = AllNodeTypes[S]; |
71 | if( ! NNT ) { | 75 | if( ! NNT ) { |
72 | return 0; | 76 | return 0; |
73 | } | 77 | } |
74 | NNI = NNT->NetNode->createInstance(); | 78 | NNI = NNT->NetNode->createInstance(); |
75 | NNI->initialize(); | 79 | NNI->initialize(); |
76 | return NNI; | 80 | return NNI; |
77 | } | 81 | } |
78 | 82 | ||
79 | Name2Instance_t & netNodeInstances( void ) | 83 | Name2Instance_t & netNodeInstances( void ) |
80 | { return AllNodes; } | 84 | { return AllNodes; } |
81 | void addNodeInstance( ANetNodeInstance * I ) | 85 | void addNodeInstance( ANetNodeInstance * I ) |
82 | { AllNodes.insert( I->name(), I ); } | 86 | { AllNodes.insert( I->name(), I ); } |
83 | void removeNodeInstance( const QString & N ) | 87 | void removeNodeInstance( const QString & N ) |
84 | { AllNodes.remove( N );} | 88 | { AllNodes.remove( N );} |
85 | ANetNodeInstance * findNodeInstance( const QString & S ) | 89 | ANetNodeInstance * findNodeInstance( const QString & S ) |
86 | { return (AllNodes.find(S)!=0) ? AllNodes[S] : 0; } | 90 | { return (AllNodes.find(S)!=0) ? AllNodes[S] : 0; } |
87 | 91 | ||
88 | const QString & netNode2Name( const char * Type ); | 92 | const QString & netNode2Name( const char * Type ); |
89 | const QString & netNode2Description( const char * Type ); | 93 | const QString & netNode2Description( const char * Type ); |
90 | 94 | ||
91 | void renumberConnections( void ); | ||
92 | void addConnection( NodeCollection * NC ); | 95 | void addConnection( NodeCollection * NC ); |
93 | void removeConnection( const QString & N ); | 96 | void removeConnection( const QString & N ); |
94 | NodeCollection * findConnection( const QString & N ); | 97 | NodeCollection * findConnection( const QString & N ); |
95 | Name2Connection_t & connections( void ) | 98 | Name2Connection_t & connections( void ) |
96 | { return ConnectionsMap; } | 99 | { return ConnectionsMap; } |
97 | 100 | ||
98 | CurrentQPEUser & currentUser( void ) | 101 | CurrentQPEUser & currentUser( void ) |
99 | { return CurrentUser; } | 102 | { return CurrentUser; } |
100 | 103 | ||
101 | private : | 104 | private : |
102 | 105 | ||
103 | void detectCurrentUser( void ); | 106 | void detectCurrentUser( void ); |
104 | QString tr( const char * path ); | 107 | QString tr( const char * path ); |
105 | void findAvailableNetNodes( const QString &path ); | 108 | void findAvailableNetNodes( const QString &path ); |
106 | bool loadNetNode( | 109 | bool loadNetNode( |
107 | const QString &pluginFileName, | 110 | const QString &pluginFileName, |
108 | const QString &resolveString = "create_plugin"); | 111 | const QString &resolveString = "create_plugin"); |
109 | 112 | ||
110 | QMap< QString, QString> NodeTypeNameMap; | 113 | QMap< QString, QString> NodeTypeNameMap; |
111 | QMap< QString, QString> NodeTypeDescriptionMap; | 114 | QMap< QString, QString> NodeTypeDescriptionMap; |
112 | Name2Connection_t ConnectionsMap; | 115 | Name2Connection_t ConnectionsMap; |
113 | System * TheSystem; | 116 | System * TheSystem; |
114 | Name2SystemFile_t SystemFiles; | 117 | Name2SystemFile_t SystemFiles; |
115 | 118 | ||
116 | // all node type classes | 119 | // all node type classes |
117 | Name2NetNode_t AllNodeTypes; | 120 | Name2NetNode_t AllNodeTypes; |
118 | 121 | ||
119 | // all nodes | 122 | // all nodes |
120 | Name2Instance_t AllNodes; | 123 | Name2Instance_t AllNodes; |
121 | 124 | ||
122 | CurrentQPEUser CurrentUser; | 125 | CurrentQPEUser CurrentUser; |
123 | }; | 126 | }; |
124 | 127 | ||
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 | |||
@@ -1,355 +1,417 @@ | |||
1 | #include <sys/types.h> | 1 | #include <sys/types.h> |
2 | #include <sys/wait.h> | 2 | #include <sys/wait.h> |
3 | 3 | ||
4 | #include <net/if.h> | 4 | #include <net/if.h> |
5 | #include <net/if_arp.h> | 5 | #include <net/if_arp.h> |
6 | #include <netinet/in.h> | 6 | #include <netinet/in.h> |
7 | #include <arpa/inet.h> | 7 | #include <arpa/inet.h> |
8 | #include <sys/ioctl.h> | 8 | #include <sys/ioctl.h> |
9 | #include <sys/socket.h> | 9 | #include <sys/socket.h> |
10 | #include <stdlib.h> | 10 | #include <stdlib.h> |
11 | #include <stdio.h> | ||
11 | #include <fcntl.h> | 12 | #include <fcntl.h> |
12 | #include <errno.h> | 13 | #include <errno.h> |
13 | #include <unistd.h> | 14 | #include <unistd.h> |
14 | 15 | ||
15 | #include <qdir.h> | 16 | #include <qdir.h> |
16 | #include <qregexp.h> | 17 | #include <qregexp.h> |
17 | #include <qstringlist.h> | 18 | #include <qstringlist.h> |
18 | #include <qfile.h> | 19 | #include <qfile.h> |
19 | #include <qtextstream.h> | 20 | #include <qtextstream.h> |
21 | #include <qapplication.h> | ||
20 | 22 | ||
21 | #include "resources.h" | 23 | #include "resources.h" |
22 | #include "system.h" | 24 | #include "system.h" |
23 | 25 | ||
24 | #define PROCNETDEV "/proc/net/dev" | 26 | #define PROCNETDEV "/proc/net/dev" |
25 | 27 | ||
26 | static char Dig2Hex[] = { | 28 | static char Dig2Hex[] = { |
27 | '0', '1', '2', '3', | 29 | '0', '1', '2', '3', |
28 | '4', '5', '6', '7', | 30 | '4', '5', '6', '7', |
29 | '8', '9', 'A', 'B', | 31 | '8', '9', 'A', 'B', |
30 | 'C', 'D', 'E', 'F' | 32 | 'C', 'D', 'E', 'F' |
31 | }; | 33 | }; |
32 | 34 | ||
33 | // get HIGH nibble of byte | 35 | // get HIGH nibble of byte |
34 | #define HN(x) Dig2Hex[(((x)&0xf0)>>4)] | 36 | #define HN(x) Dig2Hex[(((x)&0xf0)>>4)] |
35 | // get LOW nibble of byte | 37 | // get LOW nibble of byte |
36 | #define LN(x) Dig2Hex[((x)&0x0f)] | 38 | #define LN(x) Dig2Hex[((x)&0x0f)] |
37 | 39 | ||
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 | } |
85 | // cannot seek on dev | 112 | // cannot seek on dev |
86 | ProcDevNet->close(); | 113 | ProcDevNet->close(); |
87 | ProcDevNet->open( IO_ReadOnly ); | 114 | ProcDevNet->open( IO_ReadOnly ); |
88 | 115 | ||
89 | QString line; | 116 | QString line; |
90 | QTextStream procTs(ProcDevNet); | 117 | QTextStream procTs(ProcDevNet); |
91 | QStringList SL; | 118 | QStringList SL; |
92 | int loc = -1; | 119 | int loc = -1; |
93 | int version; | 120 | int version; |
94 | 121 | ||
95 | procTs.readLine(); | 122 | procTs.readLine(); |
96 | line = procTs.readLine(); | 123 | line = procTs.readLine(); |
97 | // get version | 124 | // get version |
98 | if( line.find("compressed") ) | 125 | if( line.find("compressed") ) |
99 | version = 3; | 126 | version = 3; |
100 | else if( line.find( "bytes" ) ) | 127 | else if( line.find( "bytes" ) ) |
101 | version = 2; | 128 | version = 2; |
102 | else | 129 | else |
103 | version = 1; | 130 | version = 1; |
104 | while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) { | 131 | while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) { |
105 | if( (loc = line.find(":") ) == -1) { | 132 | if( (loc = line.find(":") ) == -1) { |
106 | continue; | 133 | continue; |
107 | } | 134 | } |
108 | 135 | ||
109 | if( I.Name != line.left(loc) ) | 136 | if( I.Name != line.left(loc) ) |
110 | continue; | 137 | continue; |
111 | 138 | ||
112 | // tokenize | 139 | // tokenize |
113 | SL = QStringList::split( ' ', line, FALSE ); | 140 | SL = QStringList::split( ' ', line, FALSE ); |
114 | 141 | ||
115 | // update data | 142 | // update data |
116 | switch( version ) { | 143 | switch( version ) { |
117 | case 1 : | 144 | case 1 : |
118 | I.RcvBytes = SL[1]; | 145 | I.RcvBytes = SL[1]; |
119 | I.RcvErrors = SL[3]; | 146 | I.RcvErrors = SL[3]; |
120 | I.RcvDropped = SL[4]; | 147 | I.RcvDropped = SL[4]; |
121 | I.SndBytes = SL[6]; | 148 | I.SndBytes = SL[6]; |
122 | I.SndErrors = SL[8]; | 149 | I.SndErrors = SL[8]; |
123 | I.SndDropped = SL[9]; | 150 | I.SndDropped = SL[9]; |
124 | I.Collisions = SL[11]; | 151 | I.Collisions = SL[11]; |
125 | break; | 152 | break; |
126 | case 2 : | 153 | case 2 : |
127 | I.RcvBytes = SL[1]; | 154 | I.RcvBytes = SL[1]; |
128 | I.RcvErrors = SL[3]; | 155 | I.RcvErrors = SL[3]; |
129 | I.RcvDropped = SL[4]; | 156 | I.RcvDropped = SL[4]; |
130 | I.SndBytes = SL[7]; | 157 | I.SndBytes = SL[7]; |
131 | I.SndErrors = SL[9]; | 158 | I.SndErrors = SL[9]; |
132 | I.SndDropped = SL[10]; | 159 | I.SndDropped = SL[10]; |
133 | I.Collisions = SL[12]; | 160 | I.Collisions = SL[12]; |
134 | break; | 161 | break; |
135 | case 3 : | 162 | case 3 : |
136 | I.RcvBytes = SL[1]; | 163 | I.RcvBytes = SL[1]; |
137 | I.RcvErrors = SL[3]; | 164 | I.RcvErrors = SL[3]; |
138 | I.RcvDropped = SL[4]; | 165 | I.RcvDropped = SL[4]; |
139 | I.SndBytes = SL[9]; | 166 | I.SndBytes = SL[9]; |
140 | I.SndErrors = SL[11]; | 167 | I.SndErrors = SL[11]; |
141 | I.SndDropped = SL[12]; | 168 | I.SndDropped = SL[12]; |
142 | I.Collisions = SL[14]; | 169 | I.Collisions = SL[14]; |
143 | break; | 170 | break; |
144 | } | 171 | } |
145 | break; | 172 | break; |
146 | } | 173 | } |
147 | } | 174 | } |
148 | 175 | ||
149 | // | 176 | // |
150 | // THIS UPDATES THE LIST -> INTERFACES ARE NOT DELETED BUT | 177 | // THIS UPDATES THE LIST -> INTERFACES ARE NOT DELETED BUT |
151 | // FLAGGED AS ! 'IsUp' IF NO LONGER PRESENT | 178 | // FLAGGED AS ! 'IsUp' IF NO LONGER PRESENT |
152 | // | 179 | // |
153 | 180 | ||
154 | void System::probeInterfaces( void ) { | 181 | void System::probeInterfaces( void ) { |
155 | 182 | ||
156 | // probe interfaces | 183 | // probe interfaces |
157 | int sockfd; | 184 | int sockfd; |
158 | // get list of all interfaces | 185 | // get list of all interfaces |
159 | struct ifreq ifrs; | 186 | struct ifreq ifrs; |
160 | InterfaceInfo * IFI; | 187 | InterfaceInfo * IFI; |
161 | 188 | ||
162 | // flag all as 'down' | 189 | // flag all as 'down' |
163 | for( QDictIterator<InterfaceInfo> it( ProbedInterfaces ); | 190 | for( QDictIterator<InterfaceInfo> it( ProbedInterfaces ); |
164 | it.current(); | 191 | it.current(); |
165 | ++it ) { | 192 | ++it ) { |
166 | it.current()->IsUp = 0; | 193 | it.current()->IsUp = 0; |
167 | } | 194 | } |
168 | 195 | ||
169 | sockfd = socket(PF_INET, SOCK_DGRAM, 0); | 196 | sockfd = socket(PF_INET, SOCK_DGRAM, 0); |
170 | if(sockfd == -1) | 197 | if(sockfd == -1) |
171 | return; | 198 | return; |
172 | 199 | ||
173 | // read interfaces from /proc/dev/net | 200 | // read interfaces from /proc/dev/net |
174 | // SIOCGIFCONF does not return ALL interfaces ???!? | 201 | // SIOCGIFCONF does not return ALL interfaces ???!? |
175 | ProcDevNet = new QFile(PROCNETDEV); | 202 | ProcDevNet = new QFile(PROCNETDEV); |
176 | if( ! ProcDevNet->open(IO_ReadOnly) ) { | 203 | if( ! ProcDevNet->open(IO_ReadOnly) ) { |
177 | delete ProcDevNet; | 204 | delete ProcDevNet; |
178 | ProcDevNet =0; | 205 | ProcDevNet =0; |
179 | return; | 206 | return; |
180 | } | 207 | } |
181 | 208 | ||
182 | QString line; | 209 | QString line; |
183 | QString NicName; | 210 | QString NicName; |
184 | QTextStream procTs(ProcDevNet); | 211 | QTextStream procTs(ProcDevNet); |
185 | int loc = -1; | 212 | int loc = -1; |
186 | 213 | ||
187 | procTs.readLine(); // eat a line | 214 | procTs.readLine(); // eat a line |
188 | procTs.readLine(); // eat a line | 215 | procTs.readLine(); // eat a line |
189 | while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) { | 216 | while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) { |
190 | if((loc = line.find(":")) == -1) { | 217 | if((loc = line.find(":")) == -1) { |
191 | continue; | 218 | continue; |
192 | } | 219 | } |
193 | 220 | ||
194 | NicName = line.left(loc); | 221 | NicName = line.left(loc); |
195 | 222 | ||
196 | // set name for ioctl | 223 | // set name for ioctl |
197 | strcpy( ifrs.ifr_name, NicName.latin1() ); | 224 | strcpy( ifrs.ifr_name, NicName.latin1() ); |
198 | 225 | ||
199 | if ( ! ( IFI = ProbedInterfaces.find( NicName ) ) ) { | 226 | if ( ! ( IFI = ProbedInterfaces.find( NicName ) ) ) { |
200 | // new nic | 227 | // new nic |
201 | fprintf( stderr, "NEWNIC %s\n", NicName.latin1()); | 228 | Log(("NEWNIC %s\n", NicName.latin1())); |
202 | IFI = new InterfaceInfo; | 229 | IFI = new InterfaceInfo; |
203 | IFI->Name = line.left(loc); | 230 | IFI->Name = line.left(loc); |
204 | IFI->NetNode = 0; | 231 | IFI->NetNode = 0; |
205 | ProbedInterfaces.insert( IFI->Name, IFI ); | 232 | ProbedInterfaces.insert( IFI->Name, IFI ); |
206 | 233 | ||
207 | // get dynamic info | 234 | // get dynamic info |
208 | if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) { | 235 | if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) { |
209 | IFI->IsPointToPoint = ((ifrs.ifr_flags & IFF_POINTOPOINT) == IFF_POINTOPOINT); | 236 | IFI->IsPointToPoint = ((ifrs.ifr_flags & IFF_POINTOPOINT) == IFF_POINTOPOINT); |
210 | } else { | 237 | } else { |
211 | IFI->IsPointToPoint = 0; | 238 | IFI->IsPointToPoint = 0; |
212 | } | 239 | } |
213 | 240 | ||
214 | // settings that never change | 241 | // settings that never change |
215 | IFI->DstAddress = ""; | 242 | IFI->DstAddress = ""; |
216 | 243 | ||
217 | if( IFI->IsPointToPoint ) { | 244 | if( IFI->IsPointToPoint ) { |
218 | if( ioctl(sockfd, SIOCGIFDSTADDR, &ifrs) >= 0 ) { | 245 | if( ioctl(sockfd, SIOCGIFDSTADDR, &ifrs) >= 0 ) { |
219 | IFI->DstAddress = | 246 | IFI->DstAddress = |
220 | inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_dstaddr)->sin_addr); | 247 | inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_dstaddr)->sin_addr); |
221 | } | 248 | } |
222 | } | 249 | } |
223 | 250 | ||
224 | IFI->CardType = 999999; | 251 | IFI->CardType = 999999; |
225 | IFI->MACAddress = ""; | 252 | IFI->MACAddress = ""; |
226 | 253 | ||
227 | if( ioctl(sockfd, SIOCGIFHWADDR, &ifrs) >= 0 ) { | 254 | if( ioctl(sockfd, SIOCGIFHWADDR, &ifrs) >= 0 ) { |
228 | fprintf( stderr, "%s = %d\n", IFI->Name.latin1(), | 255 | Log(("%s = %d\n", IFI->Name.latin1(), |
229 | ifrs.ifr_hwaddr.sa_family ); | 256 | ifrs.ifr_hwaddr.sa_family )); |
230 | 257 | ||
231 | IFI->CardType = ifrs.ifr_hwaddr.sa_family; | 258 | IFI->CardType = ifrs.ifr_hwaddr.sa_family; |
232 | switch( ifrs.ifr_hwaddr.sa_family ) { | 259 | switch( ifrs.ifr_hwaddr.sa_family ) { |
233 | case ARPHRD_ETHER : // regular MAC address | 260 | case ARPHRD_ETHER : // regular MAC address |
234 | // valid address -> convert to regular ::: format | 261 | // valid address -> convert to regular ::: format |
235 | // length = 6 bytes = 12 DIGITS -> 6 : | 262 | // length = 6 bytes = 12 DIGITS -> 6 : |
236 | IFI->MACAddress.sprintf( | 263 | IFI->MACAddress.sprintf( |
237 | "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c", | 264 | "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c", |
238 | HN( ifrs.ifr_hwaddr.sa_data[0] ), | 265 | HN( ifrs.ifr_hwaddr.sa_data[0] ), |
239 | LN( ifrs.ifr_hwaddr.sa_data[0] ), | 266 | LN( ifrs.ifr_hwaddr.sa_data[0] ), |
240 | HN( ifrs.ifr_hwaddr.sa_data[1] ), | 267 | HN( ifrs.ifr_hwaddr.sa_data[1] ), |
241 | LN( ifrs.ifr_hwaddr.sa_data[1] ), | 268 | LN( ifrs.ifr_hwaddr.sa_data[1] ), |
242 | HN( ifrs.ifr_hwaddr.sa_data[2] ), | 269 | HN( ifrs.ifr_hwaddr.sa_data[2] ), |
243 | LN( ifrs.ifr_hwaddr.sa_data[2] ), | 270 | LN( ifrs.ifr_hwaddr.sa_data[2] ), |
244 | HN( ifrs.ifr_hwaddr.sa_data[3] ), | 271 | HN( ifrs.ifr_hwaddr.sa_data[3] ), |
245 | LN( ifrs.ifr_hwaddr.sa_data[3] ), | 272 | LN( ifrs.ifr_hwaddr.sa_data[3] ), |
246 | HN( ifrs.ifr_hwaddr.sa_data[4] ), | 273 | HN( ifrs.ifr_hwaddr.sa_data[4] ), |
247 | LN( ifrs.ifr_hwaddr.sa_data[4] ), | 274 | LN( ifrs.ifr_hwaddr.sa_data[4] ), |
248 | HN( ifrs.ifr_hwaddr.sa_data[5] ), | 275 | HN( ifrs.ifr_hwaddr.sa_data[5] ), |
249 | LN( ifrs.ifr_hwaddr.sa_data[5] ) | 276 | LN( ifrs.ifr_hwaddr.sa_data[5] ) |
250 | ); | 277 | ); |
251 | break; | 278 | break; |
252 | #ifdef ARPHRD_IEEE1394 | 279 | #ifdef ARPHRD_IEEE1394 |
253 | case ARPHRD_IEEE1394 : // Firewire Eth address | 280 | case ARPHRD_IEEE1394 : // Firewire Eth address |
254 | IFI->MACAddress.sprintf( | 281 | IFI->MACAddress.sprintf( |
255 | "%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-00-00", | 282 | "%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-00-00", |
256 | HN( ifrs.ifr_hwaddr.sa_data[0] ), | 283 | HN( ifrs.ifr_hwaddr.sa_data[0] ), |
257 | LN( ifrs.ifr_hwaddr.sa_data[0] ), | 284 | LN( ifrs.ifr_hwaddr.sa_data[0] ), |
258 | HN( ifrs.ifr_hwaddr.sa_data[1] ), | 285 | HN( ifrs.ifr_hwaddr.sa_data[1] ), |
259 | LN( ifrs.ifr_hwaddr.sa_data[1] ), | 286 | LN( ifrs.ifr_hwaddr.sa_data[1] ), |
260 | HN( ifrs.ifr_hwaddr.sa_data[2] ), | 287 | HN( ifrs.ifr_hwaddr.sa_data[2] ), |
261 | LN( ifrs.ifr_hwaddr.sa_data[2] ), | 288 | LN( ifrs.ifr_hwaddr.sa_data[2] ), |
262 | HN( ifrs.ifr_hwaddr.sa_data[3] ), | 289 | HN( ifrs.ifr_hwaddr.sa_data[3] ), |
263 | LN( ifrs.ifr_hwaddr.sa_data[3] ), | 290 | LN( ifrs.ifr_hwaddr.sa_data[3] ), |
264 | HN( ifrs.ifr_hwaddr.sa_data[4] ), | 291 | HN( ifrs.ifr_hwaddr.sa_data[4] ), |
265 | LN( ifrs.ifr_hwaddr.sa_data[4] ), | 292 | LN( ifrs.ifr_hwaddr.sa_data[4] ), |
266 | HN( ifrs.ifr_hwaddr.sa_data[5] ), | 293 | HN( ifrs.ifr_hwaddr.sa_data[5] ), |
267 | LN( ifrs.ifr_hwaddr.sa_data[5] ), | 294 | LN( ifrs.ifr_hwaddr.sa_data[5] ), |
268 | HN( ifrs.ifr_hwaddr.sa_data[6] ), | 295 | HN( ifrs.ifr_hwaddr.sa_data[6] ), |
269 | LN( ifrs.ifr_hwaddr.sa_data[6] ), | 296 | LN( ifrs.ifr_hwaddr.sa_data[6] ), |
270 | HN( ifrs.ifr_hwaddr.sa_data[7] ), | 297 | HN( ifrs.ifr_hwaddr.sa_data[7] ), |
271 | LN( ifrs.ifr_hwaddr.sa_data[7] ), | 298 | LN( ifrs.ifr_hwaddr.sa_data[7] ), |
272 | HN( ifrs.ifr_hwaddr.sa_data[8] ), | 299 | HN( ifrs.ifr_hwaddr.sa_data[8] ), |
273 | LN( ifrs.ifr_hwaddr.sa_data[8] ), | 300 | LN( ifrs.ifr_hwaddr.sa_data[8] ), |
274 | HN( ifrs.ifr_hwaddr.sa_data[9] ), | 301 | HN( ifrs.ifr_hwaddr.sa_data[9] ), |
275 | LN( ifrs.ifr_hwaddr.sa_data[9] ), | 302 | LN( ifrs.ifr_hwaddr.sa_data[9] ), |
276 | HN( ifrs.ifr_hwaddr.sa_data[10] ), | 303 | HN( ifrs.ifr_hwaddr.sa_data[10] ), |
277 | LN( ifrs.ifr_hwaddr.sa_data[10] ), | 304 | LN( ifrs.ifr_hwaddr.sa_data[10] ), |
278 | HN( ifrs.ifr_hwaddr.sa_data[11] ), | 305 | HN( ifrs.ifr_hwaddr.sa_data[11] ), |
279 | LN( ifrs.ifr_hwaddr.sa_data[11] ), | 306 | LN( ifrs.ifr_hwaddr.sa_data[11] ), |
280 | HN( ifrs.ifr_hwaddr.sa_data[12] ), | 307 | HN( ifrs.ifr_hwaddr.sa_data[12] ), |
281 | LN( ifrs.ifr_hwaddr.sa_data[12] ), | 308 | LN( ifrs.ifr_hwaddr.sa_data[12] ), |
282 | HN( ifrs.ifr_hwaddr.sa_data[13] ), | 309 | HN( ifrs.ifr_hwaddr.sa_data[13] ), |
283 | LN( ifrs.ifr_hwaddr.sa_data[13] ) | 310 | LN( ifrs.ifr_hwaddr.sa_data[13] ) |
284 | ); | 311 | ); |
285 | break; | 312 | break; |
286 | #endif | 313 | #endif |
287 | case ARPHRD_PPP : // PPP | 314 | case ARPHRD_PPP : // PPP |
288 | break; | 315 | break; |
289 | case ARPHRD_IEEE80211 : // WLAN | 316 | case ARPHRD_IEEE80211 : // WLAN |
290 | break; | 317 | break; |
291 | case ARPHRD_IRDA : // IRDA | 318 | case ARPHRD_IRDA : // IRDA |
292 | break; | 319 | break; |
293 | } | 320 | } |
294 | } | 321 | } |
295 | } else // else already probed before -> just update | 322 | } else // else already probed before -> just update |
296 | fprintf( stderr, "OLDNIC %s\n", NicName.latin1()); | 323 | Log(("OLDNIC %s\n", NicName.latin1())); |
297 | 324 | ||
298 | // get dynamic info | 325 | // get dynamic info |
299 | if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) { | 326 | if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) { |
300 | IFI->IsUp = ((ifrs.ifr_flags & IFF_UP) == IFF_UP); | 327 | IFI->IsUp = ((ifrs.ifr_flags & IFF_UP) == IFF_UP); |
301 | IFI->HasMulticast = ((ifrs.ifr_flags & IFF_MULTICAST) == IFF_MULTICAST); | 328 | IFI->HasMulticast = ((ifrs.ifr_flags & IFF_MULTICAST) == IFF_MULTICAST); |
302 | } else { | 329 | } else { |
303 | IFI->IsUp = 0; | 330 | IFI->IsUp = 0; |
304 | IFI->HasMulticast = 0; | 331 | IFI->HasMulticast = 0; |
305 | } | 332 | } |
306 | 333 | ||
307 | if( ioctl(sockfd, SIOCGIFADDR, &ifrs) >= 0 ) { | 334 | if( ioctl(sockfd, SIOCGIFADDR, &ifrs) >= 0 ) { |
308 | IFI->Address = | 335 | IFI->Address = |
309 | inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_addr)->sin_addr); | 336 | inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_addr)->sin_addr); |
310 | } else { | 337 | } else { |
311 | IFI->Address = ""; | 338 | IFI->Address = ""; |
312 | IFI->IsUp = 0; | 339 | IFI->IsUp = 0; |
313 | } | 340 | } |
314 | if( ioctl(sockfd, SIOCGIFBRDADDR, &ifrs) >= 0 ) { | 341 | if( ioctl(sockfd, SIOCGIFBRDADDR, &ifrs) >= 0 ) { |
315 | IFI->BCastAddress = | 342 | IFI->BCastAddress = |
316 | inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_broadaddr)->sin_addr); | 343 | inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_broadaddr)->sin_addr); |
317 | } else { | 344 | } else { |
318 | IFI->BCastAddress = ""; | 345 | IFI->BCastAddress = ""; |
319 | } | 346 | } |
320 | if( ioctl(sockfd, SIOCGIFNETMASK, &ifrs) >= 0 ) { | 347 | if( ioctl(sockfd, SIOCGIFNETMASK, &ifrs) >= 0 ) { |
321 | IFI->Netmask = | 348 | IFI->Netmask = |
322 | inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_netmask)->sin_addr); | 349 | inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_netmask)->sin_addr); |
323 | } else { | 350 | } else { |
324 | IFI->Netmask = ""; | 351 | IFI->Netmask = ""; |
325 | } | 352 | } |
326 | fprintf( stderr, "NIC %s UP %d\n", NicName.latin1(), IFI->IsUp ); | 353 | Log(("NIC %s UP %d\n", NicName.latin1(), IFI->IsUp )); |
327 | } | 354 | } |
328 | } | 355 | } |
329 | 356 | ||
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 *) * |
344 | (CU.EnvList.count()+1) ); | 371 | (CU.EnvList.count()+1) ); |
345 | 372 | ||
346 | for( unsigned int i = 0 ; i < CU.EnvList.count() ; i ++ ) { | 373 | for( unsigned int i = 0 ; i < CU.EnvList.count() ; i ++ ) { |
347 | *(envp+i) = CU.EnvList[i]; | 374 | *(envp+i) = CU.EnvList[i]; |
348 | } | 375 | } |
349 | envp[CU.EnvList.count()]=NULL; | 376 | envp[CU.EnvList.count()]=NULL; |
350 | 377 | ||
351 | execve( Cmd.latin1(), argv, envp ); | 378 | execve( Cmd.latin1(), argv, envp ); |
352 | 379 | ||
353 | // if we come here, the exec was not successfull | 380 | // if we come here, the exec was not successfull |
354 | fprintf( stderr, "Could not exec : %d\n", errno ); | 381 | Log(("Could not exec : %d\n", errno )); |
382 | } | ||
383 | |||
384 | #include <stdarg.h> | ||
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,81 +1,90 @@ | |||
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 | ||
15 | InterfaceInfo() : | 17 | InterfaceInfo() : |
16 | Name(), | 18 | Name(), |
17 | MACAddress(), | 19 | MACAddress(), |
18 | BCastAddress(), | 20 | BCastAddress(), |
19 | Netmask(), | 21 | Netmask(), |
20 | DstAddress() { | 22 | DstAddress() { |
21 | } | 23 | } |
22 | 24 | ||
23 | ANetNodeInstance * assignedNode() | 25 | ANetNodeInstance * assignedNode() |
24 | { return NetNode; } | 26 | { return NetNode; } |
25 | 27 | ||
26 | void assignNode( ANetNodeInstance * NNI ) | 28 | void assignNode( ANetNodeInstance * NNI ) |
27 | { NetNode = NNI; } | 29 | { NetNode = NNI; } |
28 | 30 | ||
29 | ANetNodeInstance * NetNode; // netnode taking care of me | 31 | ANetNodeInstance * NetNode; // netnode taking care of me |
30 | QString Name; // name of interface | 32 | QString Name; // name of interface |
31 | int CardType; // type of card | 33 | int CardType; // type of card |
32 | QString MACAddress; // MAC address | 34 | QString MACAddress; // MAC address |
33 | QString Address; // IP Address | 35 | QString Address; // IP Address |
34 | QString BCastAddress; // Broadcast Address | 36 | QString BCastAddress; // Broadcast Address |
35 | QString Netmask; // Netmask | 37 | QString Netmask; // Netmask |
36 | QString DstAddress; // Peer address (if P-t-P) | 38 | QString DstAddress; // Peer address (if P-t-P) |
37 | bool IsUp; // interface is UP | 39 | bool IsUp; // interface is UP |
38 | bool HasMulticast; // Supports Multicast | 40 | bool HasMulticast; // Supports Multicast |
39 | bool IsPointToPoint; // IsPointToPoint card | 41 | bool IsPointToPoint; // IsPointToPoint card |
40 | 42 | ||
41 | QString RcvBytes; | 43 | QString RcvBytes; |
42 | QString SndBytes; | 44 | QString SndBytes; |
43 | QString RcvErrors; | 45 | QString RcvErrors; |
44 | QString SndErrors; | 46 | QString SndErrors; |
45 | QString RcvDropped; | 47 | QString RcvDropped; |
46 | QString SndDropped; | 48 | QString SndDropped; |
47 | QString Collisions; | 49 | QString Collisions; |
48 | }; | 50 | }; |
49 | 51 | ||
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; } |
59 | InterfaceInfo * interface( const QString& N ) | 63 | InterfaceInfo * interface( const QString& N ) |
60 | { return ProbedInterfaces[N]; } | 64 | { return ProbedInterfaces[N]; } |
61 | 65 | ||
62 | // exec command as root | 66 | // exec command as root |
63 | int runAsRoot( const QString & S ); | 67 | int runAsRoot( const QString & S ); |
64 | 68 | ||
65 | // exec command as user | 69 | // exec command as user |
66 | void execAsUser( QString & Cmd, char * argv[] ); | 70 | void execAsUser( QString & Cmd, char * argv[] ); |
67 | 71 | ||
68 | // refresh stats for this interface | 72 | // refresh stats for this interface |
69 | void refreshStatistics( InterfaceInfo & ); | 73 | void refreshStatistics( InterfaceInfo & ); |
70 | 74 | ||
71 | // reloads interfaces | 75 | // reloads interfaces |
72 | void probeInterfaces( void ); | 76 | void probeInterfaces( void ); |
73 | 77 | ||
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 | |||
@@ -1,630 +1,572 @@ | |||
1 | <!DOCTYPE UI><UI> | 1 | <!DOCTYPE UI><UI> |
2 | <class>NetworkSettingsGUI</class> | 2 | <class>NetworkSettingsGUI</class> |
3 | <widget> | 3 | <widget> |
4 | <class>QWidget</class> | 4 | <class>QWidget</class> |
5 | <property stdset="1"> | 5 | <property stdset="1"> |
6 | <name>name</name> | 6 | <name>name</name> |
7 | <cstring>NetworkSettingsGUI</cstring> | 7 | <cstring>NetworkSettingsGUI</cstring> |
8 | </property> | 8 | </property> |
9 | <property stdset="1"> | 9 | <property stdset="1"> |
10 | <name>geometry</name> | 10 | <name>geometry</name> |
11 | <rect> | 11 | <rect> |
12 | <x>0</x> | 12 | <x>0</x> |
13 | <y>0</y> | 13 | <y>0</y> |
14 | <width>160</width> | 14 | <width>144</width> |
15 | <height>260</height> | 15 | <height>260</height> |
16 | </rect> | 16 | </rect> |
17 | </property> | 17 | </property> |
18 | <property stdset="1"> | 18 | <property stdset="1"> |
19 | <name>caption</name> | 19 | <name>caption</name> |
20 | <string>Network Settings</string> | 20 | <string>Network Settings</string> |
21 | </property> | 21 | </property> |
22 | <property> | 22 | <property> |
23 | <name>layoutMargin</name> | 23 | <name>layoutMargin</name> |
24 | </property> | 24 | </property> |
25 | <property> | 25 | <property> |
26 | <name>layoutSpacing</name> | 26 | <name>layoutSpacing</name> |
27 | </property> | 27 | </property> |
28 | <vbox> | 28 | <vbox> |
29 | <property stdset="1"> | 29 | <property stdset="1"> |
30 | <name>margin</name> | 30 | <name>margin</name> |
31 | <number>0</number> | 31 | <number>2</number> |
32 | </property> | 32 | </property> |
33 | <property stdset="1"> | 33 | <property stdset="1"> |
34 | <name>spacing</name> | 34 | <name>spacing</name> |
35 | <number>2</number> | 35 | <number>2</number> |
36 | </property> | 36 | </property> |
37 | <widget> | 37 | <widget> |
38 | <class>QFrame</class> | 38 | <class>QFrame</class> |
39 | <property stdset="1"> | 39 | <property stdset="1"> |
40 | <name>name</name> | 40 | <name>name</name> |
41 | <cstring>Frame4</cstring> | 41 | <cstring>Frame4</cstring> |
42 | </property> | 42 | </property> |
43 | <property stdset="1"> | 43 | <property stdset="1"> |
44 | <name>sizePolicy</name> | 44 | <name>sizePolicy</name> |
45 | <sizepolicy> | 45 | <sizepolicy> |
46 | <hsizetype>7</hsizetype> | 46 | <hsizetype>7</hsizetype> |
47 | <vsizetype>0</vsizetype> | 47 | <vsizetype>0</vsizetype> |
48 | </sizepolicy> | 48 | </sizepolicy> |
49 | </property> | 49 | </property> |
50 | <property stdset="1"> | 50 | <property stdset="1"> |
51 | <name>frameShape</name> | 51 | <name>frameShape</name> |
52 | <enum>NoFrame</enum> | 52 | <enum>NoFrame</enum> |
53 | </property> | 53 | </property> |
54 | <property stdset="1"> | 54 | <property stdset="1"> |
55 | <name>frameShadow</name> | 55 | <name>frameShadow</name> |
56 | <enum>Raised</enum> | 56 | <enum>Raised</enum> |
57 | </property> | 57 | </property> |
58 | <property> | 58 | <property> |
59 | <name>layoutMargin</name> | 59 | <name>layoutMargin</name> |
60 | </property> | 60 | </property> |
61 | <property> | 61 | <property> |
62 | <name>layoutSpacing</name> | 62 | <name>layoutSpacing</name> |
63 | </property> | 63 | </property> |
64 | <hbox> | 64 | <hbox> |
65 | <property stdset="1"> | 65 | <property stdset="1"> |
66 | <name>margin</name> | 66 | <name>margin</name> |
67 | <number>0</number> | 67 | <number>0</number> |
68 | </property> | 68 | </property> |
69 | <property stdset="1"> | 69 | <property stdset="1"> |
70 | <name>spacing</name> | 70 | <name>spacing</name> |
71 | <number>1</number> | 71 | <number>1</number> |
72 | </property> | 72 | </property> |
73 | <widget> | 73 | <widget> |
74 | <class>QToolButton</class> | 74 | <class>QToolButton</class> |
75 | <property stdset="1"> | 75 | <property stdset="1"> |
76 | <name>name</name> | 76 | <name>name</name> |
77 | <cstring>Add_TB</cstring> | 77 | <cstring>Add_TB</cstring> |
78 | </property> | 78 | </property> |
79 | <property stdset="1"> | 79 | <property stdset="1"> |
80 | <name>sizePolicy</name> | 80 | <name>sizePolicy</name> |
81 | <sizepolicy> | 81 | <sizepolicy> |
82 | <hsizetype>0</hsizetype> | 82 | <hsizetype>0</hsizetype> |
83 | <vsizetype>0</vsizetype> | 83 | <vsizetype>0</vsizetype> |
84 | </sizepolicy> | 84 | </sizepolicy> |
85 | </property> | 85 | </property> |
86 | <property stdset="1"> | 86 | <property stdset="1"> |
87 | <name>text</name> | 87 | <name>text</name> |
88 | <string>...</string> | 88 | <string>...</string> |
89 | </property> | 89 | </property> |
90 | </widget> | 90 | </widget> |
91 | <widget> | 91 | <widget> |
92 | <class>QToolButton</class> | 92 | <class>QToolButton</class> |
93 | <property stdset="1"> | 93 | <property stdset="1"> |
94 | <name>name</name> | 94 | <name>name</name> |
95 | <cstring>Delete_TB</cstring> | 95 | <cstring>Delete_TB</cstring> |
96 | </property> | 96 | </property> |
97 | <property stdset="1"> | 97 | <property stdset="1"> |
98 | <name>sizePolicy</name> | 98 | <name>sizePolicy</name> |
99 | <sizepolicy> | 99 | <sizepolicy> |
100 | <hsizetype>0</hsizetype> | 100 | <hsizetype>0</hsizetype> |
101 | <vsizetype>0</vsizetype> | 101 | <vsizetype>0</vsizetype> |
102 | </sizepolicy> | 102 | </sizepolicy> |
103 | </property> | 103 | </property> |
104 | <property stdset="1"> | 104 | <property stdset="1"> |
105 | <name>text</name> | 105 | <name>text</name> |
106 | <string>...</string> | 106 | <string>...</string> |
107 | </property> | 107 | </property> |
108 | </widget> | 108 | </widget> |
109 | <widget> | 109 | <widget> |
110 | <class>QToolButton</class> | 110 | <class>QToolButton</class> |
111 | <property stdset="1"> | 111 | <property stdset="1"> |
112 | <name>name</name> | 112 | <name>name</name> |
113 | <cstring>CheckState_TB</cstring> | 113 | <cstring>CheckState_TB</cstring> |
114 | </property> | 114 | </property> |
115 | <property stdset="1"> | 115 | <property stdset="1"> |
116 | <name>sizePolicy</name> | 116 | <name>sizePolicy</name> |
117 | <sizepolicy> | 117 | <sizepolicy> |
118 | <hsizetype>0</hsizetype> | 118 | <hsizetype>0</hsizetype> |
119 | <vsizetype>0</vsizetype> | 119 | <vsizetype>0</vsizetype> |
120 | </sizepolicy> | 120 | </sizepolicy> |
121 | </property> | 121 | </property> |
122 | <property stdset="1"> | 122 | <property stdset="1"> |
123 | <name>text</name> | 123 | <name>text</name> |
124 | <string>...</string> | 124 | <string>...</string> |
125 | </property> | 125 | </property> |
126 | </widget> | 126 | </widget> |
127 | <widget> | 127 | <widget> |
128 | <class>QToolButton</class> | 128 | <class>QToolButton</class> |
129 | <property stdset="1"> | 129 | <property stdset="1"> |
130 | <name>name</name> | 130 | <name>name</name> |
131 | <cstring>GenConfig_TB</cstring> | 131 | <cstring>GenConfig_TB</cstring> |
132 | </property> | 132 | </property> |
133 | <property stdset="1"> | 133 | <property stdset="1"> |
134 | <name>sizePolicy</name> | 134 | <name>sizePolicy</name> |
135 | <sizepolicy> | 135 | <sizepolicy> |
136 | <hsizetype>0</hsizetype> | 136 | <hsizetype>0</hsizetype> |
137 | <vsizetype>0</vsizetype> | 137 | <vsizetype>0</vsizetype> |
138 | </sizepolicy> | 138 | </sizepolicy> |
139 | </property> | 139 | </property> |
140 | <property stdset="1"> | 140 | <property stdset="1"> |
141 | <name>text</name> | 141 | <name>text</name> |
142 | <string>...</string> | 142 | <string>...</string> |
143 | </property> | 143 | </property> |
144 | </widget> | 144 | </widget> |
145 | <spacer> | 145 | <spacer> |
146 | <property> | 146 | <property> |
147 | <name>name</name> | 147 | <name>name</name> |
148 | <cstring>Spacer1</cstring> | 148 | <cstring>Spacer1</cstring> |
149 | </property> | 149 | </property> |
150 | <property stdset="1"> | 150 | <property stdset="1"> |
151 | <name>orientation</name> | 151 | <name>orientation</name> |
152 | <enum>Horizontal</enum> | 152 | <enum>Horizontal</enum> |
153 | </property> | 153 | </property> |
154 | <property stdset="1"> | 154 | <property stdset="1"> |
155 | <name>sizeType</name> | 155 | <name>sizeType</name> |
156 | <enum>Expanding</enum> | 156 | <enum>Expanding</enum> |
157 | </property> | 157 | </property> |
158 | <property> | 158 | <property> |
159 | <name>sizeHint</name> | 159 | <name>sizeHint</name> |
160 | <size> | 160 | <size> |
161 | <width>20</width> | 161 | <width>20</width> |
162 | <height>20</height> | 162 | <height>20</height> |
163 | </size> | 163 | </size> |
164 | </property> | 164 | </property> |
165 | </spacer> | 165 | </spacer> |
166 | <widget> | 166 | <widget> |
167 | <class>QToolButton</class> | 167 | <class>QToolButton</class> |
168 | <property stdset="1"> | 168 | <property stdset="1"> |
169 | <name>name</name> | 169 | <name>name</name> |
170 | <cstring>Enable_TB</cstring> | 170 | <cstring>Enable_TB</cstring> |
171 | </property> | 171 | </property> |
172 | <property stdset="1"> | 172 | <property stdset="1"> |
173 | <name>sizePolicy</name> | 173 | <name>sizePolicy</name> |
174 | <sizepolicy> | 174 | <sizepolicy> |
175 | <hsizetype>0</hsizetype> | 175 | <hsizetype>0</hsizetype> |
176 | <vsizetype>0</vsizetype> | 176 | <vsizetype>0</vsizetype> |
177 | </sizepolicy> | 177 | </sizepolicy> |
178 | </property> | 178 | </property> |
179 | <property stdset="1"> | 179 | <property stdset="1"> |
180 | <name>text</name> | 180 | <name>text</name> |
181 | <string>...</string> | 181 | <string>...</string> |
182 | </property> | 182 | </property> |
183 | <property stdset="1"> | 183 | <property stdset="1"> |
184 | <name>toggleButton</name> | 184 | <name>toggleButton</name> |
185 | <bool>true</bool> | 185 | <bool>true</bool> |
186 | </property> | 186 | </property> |
187 | <property stdset="1"> | 187 | <property stdset="1"> |
188 | <name>toggleButton</name> | 188 | <name>toggleButton</name> |
189 | <bool>true</bool> | 189 | <bool>true</bool> |
190 | </property> | 190 | </property> |
191 | </widget> | 191 | </widget> |
192 | <widget> | 192 | <widget> |
193 | <class>QToolButton</class> | 193 | <class>QToolButton</class> |
194 | <property stdset="1"> | 194 | <property stdset="1"> |
195 | <name>name</name> | 195 | <name>name</name> |
196 | <cstring>On_TB</cstring> | 196 | <cstring>On_TB</cstring> |
197 | </property> | 197 | </property> |
198 | <property stdset="1"> | 198 | <property stdset="1"> |
199 | <name>sizePolicy</name> | 199 | <name>sizePolicy</name> |
200 | <sizepolicy> | 200 | <sizepolicy> |
201 | <hsizetype>0</hsizetype> | 201 | <hsizetype>0</hsizetype> |
202 | <vsizetype>0</vsizetype> | 202 | <vsizetype>0</vsizetype> |
203 | </sizepolicy> | 203 | </sizepolicy> |
204 | </property> | 204 | </property> |
205 | <property stdset="1"> | 205 | <property stdset="1"> |
206 | <name>text</name> | 206 | <name>text</name> |
207 | <string>...</string> | 207 | <string>...</string> |
208 | </property> | 208 | </property> |
209 | <property stdset="1"> | 209 | <property stdset="1"> |
210 | <name>toggleButton</name> | 210 | <name>toggleButton</name> |
211 | <bool>true</bool> | 211 | <bool>true</bool> |
212 | </property> | 212 | </property> |
213 | <property stdset="1"> | 213 | <property stdset="1"> |
214 | <name>toggleButton</name> | 214 | <name>toggleButton</name> |
215 | <bool>true</bool> | 215 | <bool>true</bool> |
216 | </property> | 216 | </property> |
217 | </widget> | 217 | </widget> |
218 | <widget> | 218 | <widget> |
219 | <class>QToolButton</class> | 219 | <class>QToolButton</class> |
220 | <property stdset="1"> | 220 | <property stdset="1"> |
221 | <name>name</name> | 221 | <name>name</name> |
222 | <cstring>Connect_TB</cstring> | 222 | <cstring>Connect_TB</cstring> |
223 | </property> | 223 | </property> |
224 | <property stdset="1"> | 224 | <property stdset="1"> |
225 | <name>sizePolicy</name> | 225 | <name>sizePolicy</name> |
226 | <sizepolicy> | 226 | <sizepolicy> |
227 | <hsizetype>0</hsizetype> | 227 | <hsizetype>0</hsizetype> |
228 | <vsizetype>0</vsizetype> | 228 | <vsizetype>0</vsizetype> |
229 | </sizepolicy> | 229 | </sizepolicy> |
230 | </property> | 230 | </property> |
231 | <property stdset="1"> | 231 | <property stdset="1"> |
232 | <name>text</name> | 232 | <name>text</name> |
233 | <string>...</string> | 233 | <string>...</string> |
234 | </property> | 234 | </property> |
235 | <property stdset="1"> | 235 | <property stdset="1"> |
236 | <name>toggleButton</name> | 236 | <name>toggleButton</name> |
237 | <bool>true</bool> | 237 | <bool>true</bool> |
238 | </property> | 238 | </property> |
239 | <property stdset="1"> | 239 | <property stdset="1"> |
240 | <name>toggleButton</name> | 240 | <name>toggleButton</name> |
241 | <bool>true</bool> | 241 | <bool>true</bool> |
242 | </property> | 242 | </property> |
243 | </widget> | 243 | </widget> |
244 | <widget> | 244 | <widget> |
245 | <class>QToolButton</class> | 245 | <class>QToolButton</class> |
246 | <property stdset="1"> | 246 | <property stdset="1"> |
247 | <name>name</name> | 247 | <name>name</name> |
248 | <cstring>Disconnect_TB</cstring> | 248 | <cstring>Disconnect_TB</cstring> |
249 | </property> | 249 | </property> |
250 | <property stdset="1"> | 250 | <property stdset="1"> |
251 | <name>sizePolicy</name> | 251 | <name>sizePolicy</name> |
252 | <sizepolicy> | 252 | <sizepolicy> |
253 | <hsizetype>0</hsizetype> | 253 | <hsizetype>0</hsizetype> |
254 | <vsizetype>0</vsizetype> | 254 | <vsizetype>0</vsizetype> |
255 | </sizepolicy> | 255 | </sizepolicy> |
256 | </property> | 256 | </property> |
257 | <property stdset="1"> | 257 | <property stdset="1"> |
258 | <name>text</name> | 258 | <name>text</name> |
259 | <string>...</string> | 259 | <string>...</string> |
260 | </property> | 260 | </property> |
261 | <property stdset="1"> | 261 | <property stdset="1"> |
262 | <name>toggleButton</name> | 262 | <name>toggleButton</name> |
263 | <bool>true</bool> | 263 | <bool>true</bool> |
264 | </property> | 264 | </property> |
265 | <property stdset="1"> | 265 | <property stdset="1"> |
266 | <name>toggleButton</name> | 266 | <name>toggleButton</name> |
267 | <bool>true</bool> | 267 | <bool>true</bool> |
268 | </property> | 268 | </property> |
269 | </widget> | 269 | </widget> |
270 | </hbox> | 270 | </hbox> |
271 | </widget> | 271 | </widget> |
272 | <widget> | 272 | <widget> |
273 | <class>QListBox</class> | 273 | <class>QListBox</class> |
274 | <property stdset="1"> | 274 | <property stdset="1"> |
275 | <name>name</name> | 275 | <name>name</name> |
276 | <cstring>Profiles_LB</cstring> | 276 | <cstring>Profiles_LB</cstring> |
277 | </property> | 277 | </property> |
278 | </widget> | 278 | </widget> |
279 | <widget> | 279 | <widget> |
280 | <class>QGroupBox</class> | 280 | <class>QGroupBox</class> |
281 | <property stdset="1"> | 281 | <property stdset="1"> |
282 | <name>name</name> | 282 | <name>name</name> |
283 | <cstring>Profile_GB</cstring> | 283 | <cstring>Profile_GB</cstring> |
284 | </property> | 284 | </property> |
285 | <property stdset="1"> | 285 | <property stdset="1"> |
286 | <name>title</name> | 286 | <name>title</name> |
287 | <string>Profile</string> | 287 | <string>Profile</string> |
288 | </property> | 288 | </property> |
289 | <property> | 289 | <property> |
290 | <name>layoutMargin</name> | 290 | <name>layoutMargin</name> |
291 | </property> | 291 | </property> |
292 | <property> | 292 | <property> |
293 | <name>layoutSpacing</name> | 293 | <name>layoutSpacing</name> |
294 | </property> | 294 | </property> |
295 | <vbox> | 295 | <vbox> |
296 | <property stdset="1"> | 296 | <property stdset="1"> |
297 | <name>margin</name> | 297 | <name>margin</name> |
298 | <number>4</number> | 298 | <number>4</number> |
299 | </property> | 299 | </property> |
300 | <property stdset="1"> | 300 | <property stdset="1"> |
301 | <name>spacing</name> | 301 | <name>spacing</name> |
302 | <number>2</number> | 302 | <number>2</number> |
303 | </property> | 303 | </property> |
304 | <widget> | 304 | <widget> |
305 | <class>QLayoutWidget</class> | ||
306 | <property stdset="1"> | ||
307 | <name>name</name> | ||
308 | <cstring>Layout3</cstring> | ||
309 | </property> | ||
310 | <hbox> | ||
311 | <property stdset="1"> | ||
312 | <name>margin</name> | ||
313 | <number>0</number> | ||
314 | </property> | ||
315 | <property stdset="1"> | ||
316 | <name>spacing</name> | ||
317 | <number>6</number> | ||
318 | </property> | ||
319 | <widget> | ||
320 | <class>QLabel</class> | ||
321 | <property stdset="1"> | ||
322 | <name>name</name> | ||
323 | <cstring>TextLabel2_2</cstring> | ||
324 | </property> | ||
325 | <property stdset="1"> | ||
326 | <name>text</name> | ||
327 | <string>State</string> | ||
328 | </property> | ||
329 | </widget> | ||
330 | <widget> | ||
331 | <class>QLabel</class> | ||
332 | <property stdset="1"> | ||
333 | <name>name</name> | ||
334 | <cstring>State_LBL</cstring> | ||
335 | </property> | ||
336 | <property stdset="1"> | ||
337 | <name>text</name> | ||
338 | <string>State</string> | ||
339 | </property> | ||
340 | <property stdset="1"> | ||
341 | <name>indent</name> | ||
342 | <number>0</number> | ||
343 | </property> | ||
344 | </widget> | ||
345 | <spacer> | ||
346 | <property> | ||
347 | <name>name</name> | ||
348 | <cstring>Spacer6_2</cstring> | ||
349 | </property> | ||
350 | <property stdset="1"> | ||
351 | <name>orientation</name> | ||
352 | <enum>Horizontal</enum> | ||
353 | </property> | ||
354 | <property stdset="1"> | ||
355 | <name>sizeType</name> | ||
356 | <enum>Expanding</enum> | ||
357 | </property> | ||
358 | <property> | ||
359 | <name>sizeHint</name> | ||
360 | <size> | ||
361 | <width>20</width> | ||
362 | <height>20</height> | ||
363 | </size> | ||
364 | </property> | ||
365 | </spacer> | ||
366 | </hbox> | ||
367 | </widget> | ||
368 | <widget> | ||
369 | <class>QLabel</class> | 305 | <class>QLabel</class> |
370 | <property stdset="1"> | 306 | <property stdset="1"> |
371 | <name>name</name> | 307 | <name>name</name> |
372 | <cstring>Description_LBL</cstring> | 308 | <cstring>Description_LBL</cstring> |
373 | </property> | 309 | </property> |
374 | <property stdset="1"> | 310 | <property stdset="1"> |
375 | <name>sizePolicy</name> | 311 | <name>sizePolicy</name> |
376 | <sizepolicy> | 312 | <sizepolicy> |
377 | <hsizetype>5</hsizetype> | 313 | <hsizetype>5</hsizetype> |
378 | <vsizetype>7</vsizetype> | 314 | <vsizetype>7</vsizetype> |
379 | </sizepolicy> | 315 | </sizepolicy> |
380 | </property> | 316 | </property> |
381 | <property stdset="1"> | 317 | <property stdset="1"> |
382 | <name>frameShape</name> | 318 | <name>frameShape</name> |
383 | <enum>NoFrame</enum> | 319 | <enum>NoFrame</enum> |
384 | </property> | 320 | </property> |
385 | <property stdset="1"> | 321 | <property stdset="1"> |
386 | <name>frameShadow</name> | 322 | <name>frameShadow</name> |
387 | <enum>Raised</enum> | 323 | <enum>Raised</enum> |
388 | </property> | 324 | </property> |
389 | <property stdset="1"> | 325 | <property stdset="1"> |
390 | <name>text</name> | 326 | <name>text</name> |
391 | <string></string> | 327 | <string></string> |
392 | </property> | 328 | </property> |
393 | <property stdset="1"> | 329 | <property stdset="1"> |
394 | <name>alignment</name> | 330 | <name>alignment</name> |
395 | <set>AlignTop|AlignLeft</set> | 331 | <set>AlignTop|AlignLeft</set> |
396 | </property> | 332 | </property> |
397 | <property> | 333 | <property> |
398 | <name>vAlign</name> | 334 | <name>vAlign</name> |
399 | </property> | 335 | </property> |
400 | </widget> | 336 | </widget> |
401 | <widget> | 337 | <widget> |
402 | <class>QLayoutWidget</class> | 338 | <class>QLayoutWidget</class> |
403 | <property stdset="1"> | 339 | <property stdset="1"> |
404 | <name>name</name> | 340 | <name>name</name> |
405 | <cstring>Layout4</cstring> | 341 | <cstring>Layout4</cstring> |
406 | </property> | 342 | </property> |
407 | <hbox> | 343 | <hbox> |
408 | <property stdset="1"> | 344 | <property stdset="1"> |
409 | <name>margin</name> | 345 | <name>margin</name> |
410 | <number>0</number> | 346 | <number>0</number> |
411 | </property> | 347 | </property> |
412 | <property stdset="1"> | 348 | <property stdset="1"> |
413 | <name>spacing</name> | 349 | <name>spacing</name> |
414 | <number>6</number> | 350 | <number>6</number> |
415 | </property> | 351 | </property> |
416 | <spacer> | 352 | <spacer> |
417 | <property> | 353 | <property> |
418 | <name>name</name> | 354 | <name>name</name> |
419 | <cstring>Spacer4</cstring> | 355 | <cstring>Spacer4</cstring> |
420 | </property> | 356 | </property> |
421 | <property stdset="1"> | 357 | <property stdset="1"> |
422 | <name>orientation</name> | 358 | <name>orientation</name> |
423 | <enum>Horizontal</enum> | 359 | <enum>Horizontal</enum> |
424 | </property> | 360 | </property> |
425 | <property stdset="1"> | 361 | <property stdset="1"> |
426 | <name>sizeType</name> | 362 | <name>sizeType</name> |
427 | <enum>Expanding</enum> | 363 | <enum>Expanding</enum> |
428 | </property> | 364 | </property> |
429 | <property> | 365 | <property> |
430 | <name>sizeHint</name> | 366 | <name>sizeHint</name> |
431 | <size> | 367 | <size> |
432 | <width>20</width> | 368 | <width>20</width> |
433 | <height>20</height> | 369 | <height>20</height> |
434 | </size> | 370 | </size> |
435 | </property> | 371 | </property> |
436 | </spacer> | 372 | </spacer> |
437 | <widget> | 373 | <widget> |
438 | <class>QPushButton</class> | 374 | <class>QPushButton</class> |
439 | <property stdset="1"> | 375 | <property stdset="1"> |
440 | <name>name</name> | 376 | <name>name</name> |
441 | <cstring>ToMessages_BUT</cstring> | 377 | <cstring>ToMessages_BUT</cstring> |
442 | </property> | 378 | </property> |
443 | <property stdset="1"> | 379 | <property stdset="1"> |
444 | <name>sizePolicy</name> | 380 | <name>sizePolicy</name> |
445 | <sizepolicy> | 381 | <sizepolicy> |
446 | <hsizetype>1</hsizetype> | 382 | <hsizetype>1</hsizetype> |
447 | <vsizetype>0</vsizetype> | 383 | <vsizetype>0</vsizetype> |
448 | </sizepolicy> | 384 | </sizepolicy> |
449 | </property> | 385 | </property> |
450 | <property stdset="1"> | 386 | <property stdset="1"> |
451 | <name>text</name> | 387 | <name>text</name> |
452 | <string>Messages ...</string> | 388 | <string>Messages ...</string> |
453 | </property> | 389 | </property> |
454 | </widget> | 390 | </widget> |
455 | </hbox> | 391 | </hbox> |
456 | </widget> | 392 | </widget> |
457 | </vbox> | 393 | </vbox> |
458 | </widget> | 394 | </widget> |
459 | <widget> | 395 | <widget> |
460 | <class>QGroupBox</class> | 396 | <class>QGroupBox</class> |
461 | <property stdset="1"> | 397 | <property stdset="1"> |
462 | <name>name</name> | 398 | <name>name</name> |
463 | <cstring>Messages_GB</cstring> | 399 | <cstring>Messages_GB</cstring> |
464 | </property> | 400 | </property> |
465 | <property stdset="1"> | 401 | <property stdset="1"> |
466 | <name>title</name> | 402 | <name>title</name> |
467 | <string>Messages</string> | 403 | <string>Messages</string> |
468 | </property> | 404 | </property> |
469 | <property> | 405 | <property> |
470 | <name>layoutMargin</name> | 406 | <name>layoutMargin</name> |
471 | </property> | 407 | </property> |
472 | <property> | 408 | <property> |
473 | <name>layoutSpacing</name> | 409 | <name>layoutSpacing</name> |
474 | </property> | 410 | </property> |
475 | <vbox> | 411 | <vbox> |
476 | <property stdset="1"> | 412 | <property stdset="1"> |
477 | <name>margin</name> | 413 | <name>margin</name> |
478 | <number>4</number> | 414 | <number>4</number> |
479 | </property> | 415 | </property> |
480 | <property stdset="1"> | 416 | <property stdset="1"> |
481 | <name>spacing</name> | 417 | <name>spacing</name> |
482 | <number>2</number> | 418 | <number>2</number> |
483 | </property> | 419 | </property> |
484 | <widget> | 420 | <widget> |
485 | <class>QListBox</class> | 421 | <class>QListBox</class> |
486 | <property stdset="1"> | 422 | <property stdset="1"> |
487 | <name>name</name> | 423 | <name>name</name> |
488 | <cstring>Mesages_LB</cstring> | 424 | <cstring>Messages_LB</cstring> |
489 | </property> | 425 | </property> |
490 | </widget> | 426 | </widget> |
491 | <widget> | 427 | <widget> |
492 | <class>QLayoutWidget</class> | 428 | <class>QLayoutWidget</class> |
493 | <property stdset="1"> | 429 | <property stdset="1"> |
494 | <name>name</name> | 430 | <name>name</name> |
495 | <cstring>Layout2</cstring> | 431 | <cstring>Layout2</cstring> |
496 | </property> | 432 | </property> |
497 | <hbox> | 433 | <hbox> |
498 | <property stdset="1"> | 434 | <property stdset="1"> |
499 | <name>margin</name> | 435 | <name>margin</name> |
500 | <number>0</number> | 436 | <number>0</number> |
501 | </property> | 437 | </property> |
502 | <property stdset="1"> | 438 | <property stdset="1"> |
503 | <name>spacing</name> | 439 | <name>spacing</name> |
504 | <number>6</number> | 440 | <number>6</number> |
505 | </property> | 441 | </property> |
506 | <spacer> | 442 | <spacer> |
507 | <property> | 443 | <property> |
508 | <name>name</name> | 444 | <name>name</name> |
509 | <cstring>Spacer3</cstring> | 445 | <cstring>Spacer3</cstring> |
510 | </property> | 446 | </property> |
511 | <property stdset="1"> | 447 | <property stdset="1"> |
512 | <name>orientation</name> | 448 | <name>orientation</name> |
513 | <enum>Horizontal</enum> | 449 | <enum>Horizontal</enum> |
514 | </property> | 450 | </property> |
515 | <property stdset="1"> | 451 | <property stdset="1"> |
516 | <name>sizeType</name> | 452 | <name>sizeType</name> |
517 | <enum>Expanding</enum> | 453 | <enum>Expanding</enum> |
518 | </property> | 454 | </property> |
519 | <property> | 455 | <property> |
520 | <name>sizeHint</name> | 456 | <name>sizeHint</name> |
521 | <size> | 457 | <size> |
522 | <width>20</width> | 458 | <width>20</width> |
523 | <height>20</height> | 459 | <height>20</height> |
524 | </size> | 460 | </size> |
525 | </property> | 461 | </property> |
526 | </spacer> | 462 | </spacer> |
527 | <widget> | 463 | <widget> |
528 | <class>QPushButton</class> | 464 | <class>QPushButton</class> |
529 | <property stdset="1"> | 465 | <property stdset="1"> |
530 | <name>name</name> | 466 | <name>name</name> |
531 | <cstring>ToProfile_BUT</cstring> | 467 | <cstring>ToProfile_BUT</cstring> |
532 | </property> | 468 | </property> |
533 | <property stdset="1"> | 469 | <property stdset="1"> |
534 | <name>text</name> | 470 | <name>text</name> |
535 | <string>Profile ...</string> | 471 | <string>Profile ...</string> |
536 | </property> | 472 | </property> |
537 | </widget> | 473 | </widget> |
538 | </hbox> | 474 | </hbox> |
539 | </widget> | 475 | </widget> |
540 | </vbox> | 476 | </vbox> |
541 | </widget> | 477 | </widget> |
542 | </vbox> | 478 | </vbox> |
543 | </widget> | 479 | </widget> |
544 | <connections> | 480 | <connections> |
545 | <connection> | 481 | <connection> |
546 | <sender>Add_TB</sender> | 482 | <sender>Add_TB</sender> |
547 | <signal>clicked()</signal> | 483 | <signal>clicked()</signal> |
548 | <receiver>NetworkSettingsGUI</receiver> | 484 | <receiver>NetworkSettingsGUI</receiver> |
549 | <slot>SLOT_AddNode()</slot> | 485 | <slot>SLOT_AddNode()</slot> |
550 | </connection> | 486 | </connection> |
551 | <connection> | 487 | <connection> |
552 | <sender>Delete_TB</sender> | 488 | <sender>Delete_TB</sender> |
553 | <signal>clicked()</signal> | 489 | <signal>clicked()</signal> |
554 | <receiver>NetworkSettingsGUI</receiver> | 490 | <receiver>NetworkSettingsGUI</receiver> |
555 | <slot>SLOT_DeleteNode()</slot> | 491 | <slot>SLOT_DeleteNode()</slot> |
556 | </connection> | 492 | </connection> |
557 | <connection> | 493 | <connection> |
558 | <sender>CheckState_TB</sender> | 494 | <sender>CheckState_TB</sender> |
559 | <signal>clicked()</signal> | 495 | <signal>clicked()</signal> |
560 | <receiver>NetworkSettingsGUI</receiver> | 496 | <receiver>NetworkSettingsGUI</receiver> |
561 | <slot>SLOT_CheckState()</slot> | 497 | <slot>SLOT_CheckState()</slot> |
562 | </connection> | 498 | </connection> |
563 | <connection> | 499 | <connection> |
564 | <sender>Enable_TB</sender> | 500 | <sender>Enable_TB</sender> |
565 | <signal>clicked()</signal> | 501 | <signal>clicked()</signal> |
566 | <receiver>NetworkSettingsGUI</receiver> | 502 | <receiver>NetworkSettingsGUI</receiver> |
567 | <slot>SLOT_Enable()</slot> | 503 | <slot>SLOT_Enable()</slot> |
568 | </connection> | 504 | </connection> |
569 | <connection> | 505 | <connection> |
570 | <sender>Connect_TB</sender> | 506 | <sender>Connect_TB</sender> |
571 | <signal>clicked()</signal> | 507 | <signal>clicked()</signal> |
572 | <receiver>NetworkSettingsGUI</receiver> | 508 | <receiver>NetworkSettingsGUI</receiver> |
573 | <slot>SLOT_Connect()</slot> | 509 | <slot>SLOT_Connect()</slot> |
574 | </connection> | 510 | </connection> |
575 | <connection> | 511 | <connection> |
576 | <sender>On_TB</sender> | 512 | <sender>On_TB</sender> |
577 | <signal>clicked()</signal> | 513 | <signal>clicked()</signal> |
578 | <receiver>NetworkSettingsGUI</receiver> | 514 | <receiver>NetworkSettingsGUI</receiver> |
579 | <slot>SLOT_On()</slot> | 515 | <slot>SLOT_On()</slot> |
580 | </connection> | 516 | </connection> |
581 | <connection> | 517 | <connection> |
582 | <sender>GenConfig_TB</sender> | 518 | <sender>GenConfig_TB</sender> |
583 | <signal>clicked()</signal> | 519 | <signal>clicked()</signal> |
584 | <receiver>NetworkSettingsGUI</receiver> | 520 | <receiver>NetworkSettingsGUI</receiver> |
585 | <slot>SLOT_GenerateConfig()</slot> | 521 | <slot>SLOT_GenerateConfig()</slot> |
586 | </connection> | 522 | </connection> |
587 | <connection> | 523 | <connection> |
588 | <sender>Profiles_LB</sender> | 524 | <sender>Profiles_LB</sender> |
589 | <signal>clicked(QListBoxItem*)</signal> | 525 | <signal>clicked(QListBoxItem*)</signal> |
590 | <receiver>NetworkSettingsGUI</receiver> | 526 | <receiver>NetworkSettingsGUI</receiver> |
591 | <slot>SLOT_ShowNode( QListBoxItem*)</slot> | 527 | <slot>SLOT_ShowNode( QListBoxItem*)</slot> |
592 | </connection> | 528 | </connection> |
593 | <connection> | 529 | <connection> |
594 | <sender>Profiles_LB</sender> | 530 | <sender>Profiles_LB</sender> |
595 | <signal>currentChanged(QListBoxItem*)</signal> | 531 | <signal>currentChanged(QListBoxItem*)</signal> |
596 | <receiver>NetworkSettingsGUI</receiver> | 532 | <receiver>NetworkSettingsGUI</receiver> |
597 | <slot>SLOT_ShowNode( QListBoxItem*)</slot> | 533 | <slot>SLOT_ShowNode( QListBoxItem*)</slot> |
598 | </connection> | 534 | </connection> |
599 | <connection> | 535 | <connection> |
600 | <sender>Profiles_LB</sender> | 536 | <sender>Profiles_LB</sender> |
601 | <signal>doubleClicked(QListBoxItem*)</signal> | 537 | <signal>doubleClicked(QListBoxItem*)</signal> |
602 | <receiver>NetworkSettingsGUI</receiver> | 538 | <receiver>NetworkSettingsGUI</receiver> |
603 | <slot>SLOT_EditNode( QListBoxItem *)</slot> | 539 | <slot>SLOT_EditNode( QListBoxItem *)</slot> |
604 | </connection> | 540 | </connection> |
605 | <connection> | 541 | <connection> |
606 | <sender>ToProfile_BUT</sender> | 542 | <sender>ToProfile_BUT</sender> |
607 | <signal>clicked()</signal> | 543 | <signal>clicked()</signal> |
608 | <receiver>NetworkSettingsGUI</receiver> | 544 | <receiver>NetworkSettingsGUI</receiver> |
609 | <slot>SLOT_ToProfile()</slot> | 545 | <slot>SLOT_ToProfile()</slot> |
610 | </connection> | 546 | </connection> |
611 | <connection> | 547 | <connection> |
612 | <sender>ToMessages_BUT</sender> | 548 | <sender>ToMessages_BUT</sender> |
613 | <signal>clicked()</signal> | 549 | <signal>clicked()</signal> |
614 | <receiver>NetworkSettingsGUI</receiver> | 550 | <receiver>NetworkSettingsGUI</receiver> |
615 | <slot>SLOT_ToMessages()</slot> | 551 | <slot>SLOT_ToMessages()</slot> |
616 | </connection> | 552 | </connection> |
553 | <connection> | ||
554 | <sender>Disconnect_TB</sender> | ||
555 | <signal>clicked()</signal> | ||
556 | <receiver>NetworkSettingsGUI</receiver> | ||
557 | <slot>SLOT_Disconnect()</slot> | ||
558 | </connection> | ||
617 | <slot access="public">SLOT_AddNode()</slot> | 559 | <slot access="public">SLOT_AddNode()</slot> |
618 | <slot access="public">SLOT_CheckState()</slot> | 560 | <slot access="public">SLOT_CheckState()</slot> |
619 | <slot access="public">SLOT_Connect()</slot> | 561 | <slot access="public">SLOT_Connect()</slot> |
620 | <slot access="public">SLOT_DeleteNode()</slot> | 562 | <slot access="public">SLOT_DeleteNode()</slot> |
621 | <slot access="public">SLOT_EditNode( QListBoxItem *)</slot> | 563 | <slot access="public">SLOT_EditNode( QListBoxItem *)</slot> |
622 | <slot access="public">SLOT_Enable()</slot> | 564 | <slot access="public">SLOT_Enable()</slot> |
623 | <slot access="public">SLOT_GenerateConfig()</slot> | 565 | <slot access="public">SLOT_GenerateConfig()</slot> |
624 | <slot access="public">SLOT_On()</slot> | 566 | <slot access="public">SLOT_On()</slot> |
625 | <slot access="public">SLOT_ShowNode( QListBoxItem*)</slot> | 567 | <slot access="public">SLOT_ShowNode( QListBoxItem*)</slot> |
626 | <slot access="public">SLOT_ToMessages()</slot> | 568 | <slot access="public">SLOT_ToMessages()</slot> |
627 | <slot access="public">SLOT_ToProfile()</slot> | 569 | <slot access="public">SLOT_ToProfile()</slot> |
628 | <slot access="public">SLOT_Disconnect()</slot> | 570 | <slot access="public">SLOT_Disconnect()</slot> |
629 | </connections> | 571 | </connections> |
630 | </UI> | 572 | </UI> |
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 | |||
@@ -1,582 +1,573 @@ | |||
1 | #include <stdlib.h> | 1 | #include <stdlib.h> |
2 | #include <qpe/qpeapplication.h> | 2 | #include <qpe/qpeapplication.h> |
3 | #include <qtextstream.h> | 3 | #include <qtextstream.h> |
4 | #include <qdir.h> | 4 | #include <qdir.h> |
5 | #include <qfile.h> | 5 | #include <qfile.h> |
6 | #include <qfileinfo.h> | 6 | #include <qfileinfo.h> |
7 | 7 | ||
8 | #include "nsdata.h" | 8 | #include "nsdata.h" |
9 | #include <asdevice.h> | 9 | #include <asdevice.h> |
10 | #include <resources.h> | 10 | #include <resources.h> |
11 | 11 | ||
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 |
29 | NetworkSettingsData::~NetworkSettingsData( void ) { | 29 | NetworkSettingsData::~NetworkSettingsData( void ) { |
30 | delete NSResources; | 30 | delete NSResources; |
31 | } | 31 | } |
32 | 32 | ||
33 | void NetworkSettingsData::loadSettings( void ) { | 33 | void NetworkSettingsData::loadSettings( void ) { |
34 | QString Line, S; | 34 | QString Line, S; |
35 | QString Attr, Value; | 35 | QString Attr, Value; |
36 | long idx; | 36 | long idx; |
37 | 37 | ||
38 | QFile F( CfgFile ); | 38 | QFile F( CfgFile ); |
39 | QTextStream TS( &F ); | 39 | QTextStream TS( &F ); |
40 | 40 | ||
41 | do { | 41 | do { |
42 | 42 | ||
43 | if( ! F.open(IO_ReadOnly) ) | 43 | if( ! F.open(IO_ReadOnly) ) |
44 | break; | 44 | break; |
45 | 45 | ||
46 | /* load the file -> | 46 | /* load the file -> |
47 | 47 | ||
48 | FORMAT : | 48 | FORMAT : |
49 | 49 | ||
50 | [NETNODETYPE] | 50 | [NETNODETYPE] |
51 | Entries ... | 51 | Entries ... |
52 | <EMPTYLINE> | 52 | <EMPTYLINE> |
53 | [connection] | 53 | [connection] |
54 | Name=Name | 54 | Name=Name |
55 | Node=Name | 55 | Node=Name |
56 | <EMPTYLINE> | 56 | <EMPTYLINE> |
57 | */ | 57 | */ |
58 | while( ! TS.atEnd() ) { | 58 | while( ! TS.atEnd() ) { |
59 | S = Line = TS.readLine(); | 59 | S = Line = TS.readLine(); |
60 | 60 | ||
61 | if ( S.isEmpty() || S[0] != '[' ) | 61 | if ( S.isEmpty() || S[0] != '[' ) |
62 | continue; | 62 | continue; |
63 | 63 | ||
64 | S = S.mid( 1, S.length()-2 ); | 64 | S = S.mid( 1, S.length()-2 ); |
65 | 65 | ||
66 | if( ! NSResources ) { | 66 | if( ! NSResources ) { |
67 | continue; | 67 | continue; |
68 | } | 68 | } |
69 | 69 | ||
70 | if( S == "connection" ) { | 70 | if( S == "connection" ) { |
71 | // load connections -> collections of nodes | 71 | // load connections -> collections of nodes |
72 | NodeCollection * NC = new NodeCollection( TS ); | 72 | NodeCollection * NC = new NodeCollection( TS ); |
73 | NSResources->addConnection( NC ); | 73 | NSResources->addConnection( NC ); |
74 | } else { | 74 | } else { |
75 | ANetNode * NN = 0; | 75 | ANetNode * NN = 0; |
76 | ANetNodeInstance* NNI = 0; | 76 | ANetNodeInstance* NNI = 0; |
77 | if( S.startsWith( "nodetype " ) ) { | 77 | if( S.startsWith( "nodetype " ) ) { |
78 | S = S.mid( 9, S.length()-9 ); | 78 | S = S.mid( 9, S.length()-9 ); |
79 | S = deQuote(S); | 79 | S = deQuote(S); |
80 | // try to find netnode | 80 | // try to find netnode |
81 | NN = NSResources->findNetNode( S ); | 81 | NN = NSResources->findNetNode( S ); |
82 | fprintf( stderr, "Node %s : %p\n", S.latin1(), NN ); | 82 | Log( ( "Node %s : %p\n", S.latin1(), NN ) ); |
83 | } else { | 83 | } else { |
84 | // try to find instance | 84 | // try to find instance |
85 | NNI = NSResources->createNodeInstance( S ); | 85 | NNI = NSResources->createNodeInstance( S ); |
86 | fprintf( stderr, "NodeInstance %s : %p\n", S.latin1(), NNI ); | 86 | Log( ( "NodeInstance %s : %p\n", S.latin1(), NNI )); |
87 | } | 87 | } |
88 | 88 | ||
89 | if( NN == 0 && NNI == 0 ) { | 89 | if( NN == 0 && NNI == 0 ) { |
90 | LeftOvers.append( Line ); | 90 | LeftOvers.append( Line ); |
91 | } | 91 | } |
92 | 92 | ||
93 | do { | 93 | do { |
94 | S = Line = TS.readLine(); | 94 | S = Line = TS.readLine(); |
95 | 95 | ||
96 | if( NN || NNI ) { | 96 | if( NN || NNI ) { |
97 | if( S.isEmpty() ) { | 97 | if( S.isEmpty() ) { |
98 | // empty line | 98 | // empty line |
99 | break; | 99 | break; |
100 | } | 100 | } |
101 | idx = S.find( '=' ); | 101 | idx = S.find( '=' ); |
102 | if( idx > 0 ) { | 102 | if( idx > 0 ) { |
103 | Attr = S.left( idx ); | 103 | Attr = S.left( idx ); |
104 | Value = S.mid( idx+1, S.length() ); | 104 | Value = S.mid( idx+1, S.length() ); |
105 | } else { | 105 | } else { |
106 | Value=""; | 106 | Value=""; |
107 | Attr = S; | 107 | Attr = S; |
108 | } | 108 | } |
109 | 109 | ||
110 | Value.stripWhiteSpace(); | 110 | Value.stripWhiteSpace(); |
111 | Attr.stripWhiteSpace(); | 111 | Attr.stripWhiteSpace(); |
112 | Attr.lower(); | 112 | Attr.lower(); |
113 | // dequote Attr | 113 | // dequote Attr |
114 | Value = deQuote(Value); | 114 | Value = deQuote(Value); |
115 | 115 | ||
116 | if( NN ) { | 116 | if( NN ) { |
117 | // set the attribute | 117 | // set the attribute |
118 | NN->setAttribute( Attr, Value ); | 118 | NN->setAttribute( Attr, Value ); |
119 | } else { | 119 | } else { |
120 | // set the attribute | 120 | // set the attribute |
121 | NNI->setAttribute( Attr, Value ); | 121 | NNI->setAttribute( Attr, Value ); |
122 | } | 122 | } |
123 | } else { | 123 | } else { |
124 | LeftOvers.append( Line ); | 124 | LeftOvers.append( Line ); |
125 | // add empty line too as delimiter | 125 | // add empty line too as delimiter |
126 | if( S.isEmpty() ) { | 126 | if( S.isEmpty() ) { |
127 | // empty line | 127 | // empty line |
128 | break; | 128 | break; |
129 | } | 129 | } |
130 | } | 130 | } |
131 | } while( 1 ); | 131 | } while( 1 ); |
132 | 132 | ||
133 | if( NNI ) { | 133 | if( NNI ) { |
134 | // loading from file -> exists | 134 | // loading from file -> exists |
135 | NNI->setNew( FALSE ); | 135 | NNI->setNew( FALSE ); |
136 | NSResources->addNodeInstance( NNI ); | 136 | NSResources->addNodeInstance( NNI ); |
137 | } | 137 | } |
138 | } | 138 | } |
139 | } | 139 | } |
140 | 140 | ||
141 | } while( 0 ); | 141 | } while( 0 ); |
142 | 142 | ||
143 | } | 143 | } |
144 | 144 | ||
145 | QString NetworkSettingsData::saveSettings( void ) { | 145 | 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 | ||
163 | QTextStream TS( &F ); | 163 | QTextStream TS( &F ); |
164 | 164 | ||
165 | // save leftovers | 165 | // save leftovers |
166 | for ( QStringList::Iterator it = LeftOvers.begin(); | 166 | for ( QStringList::Iterator it = LeftOvers.begin(); |
167 | it != LeftOvers.end(); ++it ) { | 167 | it != LeftOvers.end(); ++it ) { |
168 | TS << (*it) << endl; | 168 | TS << (*it) << endl; |
169 | } | 169 | } |
170 | 170 | ||
171 | // save global configs | 171 | // save global configs |
172 | for( QDictIterator<NetNode_t> it( NSResources->netNodes() ); | 172 | for( QDictIterator<NetNode_t> it( NSResources->netNodes() ); |
173 | it.current(); | 173 | it.current(); |
174 | ++it ) { | 174 | ++it ) { |
175 | TS << "[nodetype " | 175 | TS << "[nodetype " |
176 | << quote( QString( it.current()->NetNode->name() ) ) | 176 | << quote( QString( it.current()->NetNode->name() ) ) |
177 | << "]" | 177 | << "]" |
178 | << endl; | 178 | << endl; |
179 | 179 | ||
180 | it.current()->NetNode->saveAttributes( TS ); | 180 | it.current()->NetNode->saveAttributes( TS ); |
181 | TS << endl; | 181 | TS << endl; |
182 | } | 182 | } |
183 | 183 | ||
184 | { Name2Connection_t & M = NSResources->connections(); | 184 | { Name2Connection_t & M = NSResources->connections(); |
185 | ANetNodeInstance * NNI; | 185 | ANetNodeInstance * NNI; |
186 | 186 | ||
187 | // for all connections | 187 | // for all connections |
188 | for( QDictIterator<NodeCollection> it(M); | 188 | for( QDictIterator<NodeCollection> it(M); |
189 | it.current(); | 189 | it.current(); |
190 | ++it ) { | 190 | ++it ) { |
191 | // all nodes in those connections | 191 | // all nodes in those connections |
192 | for( QListIterator<ANetNodeInstance> nit(*(it.current())); | 192 | for( QListIterator<ANetNodeInstance> nit(*(it.current())); |
193 | nit.current(); | 193 | nit.current(); |
194 | ++nit ) { | 194 | ++nit ) { |
195 | // header | 195 | // header |
196 | NNI = nit.current(); | 196 | NNI = nit.current(); |
197 | TS << '[' | 197 | TS << '[' |
198 | << QString(NNI->nodeClass()->name()) | 198 | << QString(NNI->nodeClass()->name()) |
199 | << ']' | 199 | << ']' |
200 | << endl; | 200 | << endl; |
201 | NNI->saveAttributes( TS ); | 201 | NNI->saveAttributes( TS ); |
202 | TS << endl; | 202 | TS << endl; |
203 | } | 203 | } |
204 | 204 | ||
205 | TS << "[connection]" << endl; | 205 | TS << "[connection]" << endl; |
206 | it.current()->save(TS); | 206 | it.current()->save(TS); |
207 | } | 207 | } |
208 | } | 208 | } |
209 | 209 | ||
210 | QDir D("."); | 210 | QDir D("."); |
211 | D.rename( CfgFile + ".bup", CfgFile ); | 211 | D.rename( CfgFile + ".bup", CfgFile ); |
212 | 212 | ||
213 | // | 213 | // |
214 | // proper files AND system files regenerated | 214 | // proper files AND system files regenerated |
215 | // | 215 | // |
216 | 216 | ||
217 | setModified( 0 ); | 217 | setModified( 0 ); |
218 | return ErrS; | 218 | return ErrS; |
219 | } | 219 | } |
220 | 220 | ||
221 | QString NetworkSettingsData::generateSettings( bool ForceReq ) { | 221 | QString NetworkSettingsData::generateSettings( bool ForceReq ) { |
222 | bool ForceIt; | 222 | bool ForceIt; |
223 | QString S = ""; | 223 | QString S = ""; |
224 | 224 | ||
225 | // include own force flag | 225 | // include own force flag |
226 | ForceIt = (Force) ? 1 : ForceReq; | 226 | ForceIt = (Force) ? 1 : ForceReq; |
227 | 227 | ||
228 | if( ! ForceIt && ! isModified() ) | 228 | if( ! ForceIt && ! isModified() ) |
229 | return S; | 229 | return S; |
230 | 230 | ||
231 | // regenerate system files | 231 | // regenerate system files |
232 | fprintf( stderr, "Generating settings from %s\n", CfgFile.latin1() ); | 232 | Log( ( "Generating settings from %s\n", CfgFile.latin1() )); |
233 | 233 | ||
234 | { Name2SystemFile_t & SFM = NSResources->systemFiles(); | 234 | { Name2SystemFile_t & SFM = NSResources->systemFiles(); |
235 | Name2Connection_t & M = NSResources->connections(); | 235 | Name2Connection_t & M = NSResources->connections(); |
236 | NodeCollection * NC; | 236 | NodeCollection * NC; |
237 | ANetNodeInstance * NNI; | 237 | ANetNodeInstance * NNI; |
238 | SystemFile * SF; | 238 | SystemFile * SF; |
239 | AsDevice * CurDev; | 239 | AsDevice * CurDev; |
240 | ANetNode * CurDevNN; | 240 | ANetNode * CurDevNN; |
241 | bool needToRegenerate = ForceIt; | 241 | bool needToRegenerate = ForceIt; |
242 | 242 | ||
243 | // | 243 | // |
244 | // check if we need to generate at least one of the system files | 244 | // check if we need to generate at least one of the system files |
245 | // | 245 | // |
246 | if( ! ForceIt ) { | 246 | if( ! ForceIt ) { |
247 | for( QDictIterator<SystemFile> sfit(SFM); | 247 | for( QDictIterator<SystemFile> sfit(SFM); |
248 | sfit.current(); | 248 | sfit.current(); |
249 | ++sfit ) { | 249 | ++sfit ) { |
250 | SF = sfit.current(); | 250 | SF = sfit.current(); |
251 | 251 | ||
252 | // check if there are nodes that are modified and require | 252 | // check if there are nodes that are modified and require |
253 | // data for this system file | 253 | // data for this system file |
254 | 254 | ||
255 | // for all connections | 255 | // for all connections |
256 | for( QDictIterator<NodeCollection> ncit(M); | 256 | for( QDictIterator<NodeCollection> ncit(M); |
257 | ncit.current(); | 257 | ncit.current(); |
258 | ++ncit ) { | 258 | ++ncit ) { |
259 | NC = ncit.current(); | 259 | NC = ncit.current(); |
260 | 260 | ||
261 | if( NC->isModified() ) { | 261 | if( NC->isModified() ) { |
262 | // does this connection 'touch' this system file ? | 262 | // does this connection 'touch' this system file ? |
263 | for( QListIterator<ANetNodeInstance> cncit(*NC); | 263 | for( QListIterator<ANetNodeInstance> cncit(*NC); |
264 | cncit.current(); | 264 | cncit.current(); |
265 | ++cncit ) { | 265 | ++cncit ) { |
266 | NNI = cncit.current(); | 266 | NNI = cncit.current(); |
267 | if( ( NNI->nodeClass()->hasDataFor( SF->name() ) || | 267 | if( ( NNI->nodeClass()->hasDataFor( SF->name() ) || |
268 | NNI->hasDataFor( SF->name() ) | 268 | NNI->hasDataFor( SF->name() ) |
269 | ) && | 269 | ) && |
270 | NNI->isModified() ) { | 270 | NNI->isModified() ) { |
271 | needToRegenerate = 1; | 271 | needToRegenerate = 1; |
272 | break; | 272 | break; |
273 | } | 273 | } |
274 | } | 274 | } |
275 | } | 275 | } |
276 | if( needToRegenerate ) | 276 | if( needToRegenerate ) |
277 | break; | 277 | break; |
278 | } | 278 | } |
279 | if( needToRegenerate ) | 279 | if( needToRegenerate ) |
280 | break; | 280 | break; |
281 | } | 281 | } |
282 | } | 282 | } |
283 | 283 | ||
284 | // we cannot renumber with a FORCE request since | ||
285 | // we probably are NOT going to save the config | ||
286 | // e.g. when using --regen option | ||
287 | if( ! ForceReq && needToRegenerate ) { | ||
288 | NSResources->renumberConnections(); | ||
289 | setModified(1); | ||
290 | } | ||
291 | |||
292 | // | 284 | // |
293 | // generate files proper to each netnodeinstance | 285 | // generate files proper to each netnodeinstance |
294 | // | 286 | // |
295 | { Name2Instance_t & NNIs = NSResources->netNodeInstances(); | 287 | { Name2Instance_t & NNIs = NSResources->netNodeInstances(); |
296 | 288 | ||
297 | for( QDictIterator<ANetNodeInstance> NNIIt(NNIs); | 289 | for( QDictIterator<ANetNodeInstance> NNIIt(NNIs); |
298 | NNIIt.current(); | 290 | NNIIt.current(); |
299 | ++NNIIt | 291 | ++NNIIt |
300 | ){ | 292 | ){ |
301 | // for all nodes find those that are modified | 293 | // for all nodes find those that are modified |
302 | NNI = NNIIt.current(); | 294 | NNI = NNIIt.current(); |
303 | 295 | ||
304 | if( ForceIt || NNI->isModified() ) { | 296 | if( ForceIt || NNI->isModified() ) { |
305 | if( NNI->nodeClass()->generateProperFilesFor( NNI ) ) { | 297 | if( NNI->nodeClass()->generateProperFilesFor( NNI ) ) { |
306 | // problem generating | 298 | // problem generating |
307 | S = qApp->translate( "NetworkSettings", | 299 | S = qApp->translate( "NetworkSettings", |
308 | "<p>Cannot generate files proper to \"%1\"</p>" ). | 300 | "<p>Cannot generate files proper to \"%1\"</p>" ). |
309 | arg(NNI->nodeClass()->name()) ; | 301 | arg(NNI->nodeClass()->name()) ; |
310 | return S; | 302 | return S; |
311 | } | 303 | } |
312 | } | 304 | } |
313 | } | 305 | } |
314 | } | 306 | } |
315 | 307 | ||
316 | // | 308 | // |
317 | // generate all system files | 309 | // generate all system files |
318 | // | 310 | // |
319 | for( QDictIterator<SystemFile> sfit(SFM); | 311 | for( QDictIterator<SystemFile> sfit(SFM); |
320 | sfit.current(); | 312 | sfit.current(); |
321 | ++sfit ) { | 313 | ++sfit ) { |
322 | SF = sfit.current(); | 314 | SF = sfit.current(); |
323 | 315 | ||
324 | fprintf( stderr, "Generating %s\n", SF->name().latin1() ); | 316 | Log( ( "Generating %s\n", SF->name().latin1() )); |
325 | SF->open(); | 317 | SF->open(); |
326 | 318 | ||
327 | do { // so we can break; | 319 | do { // so we can break; |
328 | 320 | ||
329 | // global presection for this system file | 321 | // global presection for this system file |
330 | if( SF->preSection() ) { | 322 | if( SF->preSection() ) { |
331 | S = qApp->translate( "NetworkSettings", | 323 | S = qApp->translate( "NetworkSettings", |
332 | "<p>Error in preSection for file \"%1\"</p>" ). | 324 | "<p>Error in preSection for file \"%1\"</p>" ). |
333 | arg( SF->name() ); | 325 | arg( SF->name() ); |
334 | return S; | 326 | return S; |
335 | } | 327 | } |
336 | 328 | ||
337 | // find all netnodes and figure out if | 329 | // find all netnodes and figure out if |
338 | // for that node there are instances | 330 | // for that node there are instances |
339 | for( QDictIterator<NetNode_t> nnit( | 331 | for( QDictIterator<NetNode_t> nnit( |
340 | NSResources->netNodes() ); | 332 | NSResources->netNodes() ); |
341 | nnit.current(); | 333 | nnit.current(); |
342 | ++nnit ) { | 334 | ++nnit ) { |
343 | 335 | ||
344 | CurDevNN = nnit.current()->NetNode; | 336 | CurDevNN = nnit.current()->NetNode; |
345 | 337 | ||
346 | // are there instances for this netnode ? | 338 | // are there instances for this netnode ? |
347 | NNI = 0; | 339 | NNI = 0; |
348 | for( QDictIterator<ANetNodeInstance> nniit( | 340 | for( QDictIterator<ANetNodeInstance> nniit( |
349 | NSResources->netNodeInstances() ); | 341 | NSResources->netNodeInstances() ); |
350 | nniit.current(); | 342 | nniit.current(); |
351 | ++nniit ) { | 343 | ++nniit ) { |
352 | if( nniit.current()->nodeClass() == CurDevNN ) { | 344 | if( nniit.current()->nodeClass() == CurDevNN ) { |
353 | NNI = nniit.current(); | 345 | NNI = nniit.current(); |
354 | break; | 346 | break; |
355 | } | 347 | } |
356 | } | 348 | } |
357 | 349 | ||
358 | if( ! NNI ) | 350 | if( ! NNI ) |
359 | // no instances -> next netnode type | 351 | // no instances -> next netnode type |
360 | continue; | 352 | continue; |
361 | 353 | ||
362 | // has this node data for this system file ? | 354 | // has this node data for this system file ? |
363 | if( (CurDev = NNI->runtime()->asDevice() ) ) { | 355 | if( (CurDev = NNI->runtime()->asDevice() ) ) { |
364 | // generate start for this nodetype for all possible devices of this type | 356 | // generate start for this nodetype for all possible devices of this type |
365 | for( int i = 0; i < CurDevNN->instanceCount(); i ++ ) { | 357 | for( int i = 0; i < CurDevNN->instanceCount(); i ++ ) { |
366 | S = generateSystemFileNode( *SF, CurDev, NNI, i ); | 358 | S = generateSystemFileNode( *SF, CurDev, NNI, i ); |
367 | if( ! S.isEmpty() ) | 359 | if( ! S.isEmpty() ) |
368 | return S; | 360 | return S; |
369 | } | 361 | } |
370 | } else { | 362 | } else { |
371 | S = generateSystemFileNode( *SF, 0, NNI, -1 ); | 363 | S = generateSystemFileNode( *SF, 0, NNI, -1 ); |
372 | if( ! S.isEmpty() ) | 364 | if( ! S.isEmpty() ) |
373 | return S; | 365 | return S; |
374 | } | 366 | } |
375 | } | 367 | } |
376 | 368 | ||
377 | if( SF->postSection() ) { | 369 | if( SF->postSection() ) { |
378 | S = qApp->translate( "NetworkSettings", | 370 | S = qApp->translate( "NetworkSettings", |
379 | "<p>Error in postSection for file \"%1\"</p>" ). | 371 | "<p>Error in postSection for file \"%1\"</p>" ). |
380 | arg( SF->name() ); | 372 | arg( SF->name() ); |
381 | return S; | 373 | return S; |
382 | } | 374 | } |
383 | 375 | ||
384 | } while( 0 ); | 376 | } while( 0 ); |
385 | SF->close(); | 377 | SF->close(); |
386 | } | 378 | } |
387 | } | 379 | } |
388 | Force = 0; | 380 | Force = 0; |
389 | return S; | 381 | return S; |
390 | } | 382 | } |
391 | 383 | ||
392 | QList<NodeCollection> NetworkSettingsData::collectPossible( const char * Interface ) { | 384 | QList<NodeCollection> NetworkSettingsData::collectPossible( const char * Interface ) { |
393 | // collect connections that can work on top of this interface | 385 | // collect connections that can work on top of this interface |
394 | NodeCollection * NC; | 386 | NodeCollection * NC; |
395 | QList<NodeCollection> PossibleConnections; | 387 | QList<NodeCollection> PossibleConnections; |
396 | Name2Connection_t & M = NSResources->connections(); | 388 | Name2Connection_t & M = NSResources->connections(); |
397 | 389 | ||
398 | // for all connections | 390 | // for all connections |
399 | for( QDictIterator<NodeCollection> it(M); | 391 | for( QDictIterator<NodeCollection> it(M); |
400 | it.current(); | 392 | it.current(); |
401 | ++it ) { | 393 | ++it ) { |
402 | NC = it.current(); | 394 | NC = it.current(); |
403 | // check if this profile handles the requested interface | 395 | // check if this profile handles the requested interface |
404 | if( NC->handlesInterface( Interface ) && // if different Intf. | 396 | if( NC->handlesInterface( Interface ) && // if different Intf. |
405 | NC->state() != Disabled && // if not enabled | 397 | NC->state() != Disabled && // if not enabled |
406 | NC->state() != IsUp // if already used | 398 | NC->state() != IsUp // if already used |
407 | ) { | 399 | ) { |
408 | fprintf( stderr, "Append %s for %s\n", NC->name().latin1(), Interface); | 400 | Log( ( "Append %s for %s\n", NC->name().latin1(), Interface)); |
409 | PossibleConnections.append( NC ); | 401 | PossibleConnections.append( NC ); |
410 | } | 402 | } |
411 | } | 403 | } |
412 | return PossibleConnections; | 404 | return PossibleConnections; |
413 | } | 405 | } |
414 | 406 | ||
415 | 407 | ||
416 | /* | 408 | /* |
417 | Called by the system to see if interface can be brought UP | 409 | Called by the system to see if interface can be brought UP |
418 | 410 | ||
419 | if allowed, echo Interface-allowed else Interface-disallowed | 411 | if allowed, echo Interface-allowed else Interface-disallowed |
420 | */ | 412 | */ |
421 | 413 | ||
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; |
439 | } | 430 | } |
440 | 431 | ||
441 | if( NC ) { | 432 | if( NC ) { |
442 | switch( NC->state() ) { | 433 | switch( NC->state() ) { |
443 | case Unchecked : | 434 | case Unchecked : |
444 | case Unknown : | 435 | case Unknown : |
445 | case Unavailable : | 436 | case Unavailable : |
446 | case Disabled : | 437 | case Disabled : |
447 | // this profile does not allow interface to be UP | 438 | // this profile does not allow interface to be UP |
448 | // -> try others | 439 | // -> try others |
449 | break; | 440 | break; |
450 | case Off : | 441 | case Off : |
451 | // try to UP the device | 442 | // try to UP the device |
452 | if( ! NC->setState( Activate ) ) { | 443 | if( ! NC->setState( Activate ) ) { |
453 | // cannot bring device Online -> try other alters | 444 | // cannot bring device Online -> try other alters |
454 | break; | 445 | break; |
455 | } | 446 | } |
456 | // FT | 447 | // FT |
457 | case Available : | 448 | case Available : |
458 | case IsUp : // also called for 'ifdown' | 449 | case IsUp : // also called for 'ifdown' |
459 | // device is ready -> done | 450 | // device is ready -> done |
460 | printf( "%s-c%d-allowed\n", Interface, NC->number() ); | 451 | printf( "%s-c%d-allowed\n", Interface, NC->number() ); |
461 | return 0; | 452 | return 0; |
462 | } | 453 | } |
463 | } | 454 | } |
464 | 455 | ||
465 | // if we come here no alternatives are possible | 456 | // if we come here no alternatives are possible |
466 | printf( "%s-cnn-disallowed\n", Interface ); | 457 | printf( "%s-cnn-disallowed\n", Interface ); |
467 | return 0; | 458 | return 0; |
468 | } | 459 | } |
469 | 460 | ||
470 | /* | 461 | /* |
471 | Called by the system to regenerate config files | 462 | Called by the system to regenerate config files |
472 | */ | 463 | */ |
473 | 464 | ||
474 | bool NetworkSettingsData::regenerate( void ) { | 465 | bool NetworkSettingsData::regenerate( void ) { |
475 | QString S; | 466 | QString S; |
476 | // load situation | 467 | // load situation |
477 | S = generateSettings( TRUE ); | 468 | S = generateSettings( TRUE ); |
478 | if( ! S.isEmpty() ) { | 469 | if( ! S.isEmpty() ) { |
479 | fprintf( stdout, "%s\n", S.latin1() ); | 470 | fprintf( stdout, "%s\n", S.latin1() ); |
480 | return 1; | 471 | return 1; |
481 | } | 472 | } |
482 | return 0; | 473 | return 0; |
483 | } | 474 | } |
484 | 475 | ||
485 | QString NetworkSettingsData::generateSystemFileNode( | 476 | QString NetworkSettingsData::generateSystemFileNode( |
486 | SystemFile &SF, | 477 | SystemFile &SF, |
487 | AsDevice * CurDev, | 478 | AsDevice * CurDev, |
488 | ANetNodeInstance * DevNNI, | 479 | ANetNodeInstance * DevNNI, |
489 | long DevInstNr ) { | 480 | long DevInstNr ) { |
490 | 481 | ||
491 | QString S=""; | 482 | QString S=""; |
492 | ANetNode * CurDevNN = DevNNI->nodeClass(); | 483 | ANetNode * CurDevNN = DevNNI->nodeClass(); |
493 | Name2Connection_t & M = NSResources->connections(); | 484 | Name2Connection_t & M = NSResources->connections(); |
494 | 485 | ||
495 | if( SF.preDeviceSection( CurDevNN ) ) { | 486 | if( SF.preDeviceSection( CurDevNN ) ) { |
496 | S = qApp->translate( "NetworkSettings", | 487 | S = qApp->translate( "NetworkSettings", |
497 | "<p>Error in \"Pre-Device Part\" for file \"%1\" and nodetype \"%2\"</p>" ). | 488 | "<p>Error in \"Pre-Device Part\" for file \"%1\" and nodetype \"%2\"</p>" ). |
498 | arg( SF.name() ). | 489 | arg( SF.name() ). |
499 | arg( CurDevNN->name() ); | 490 | arg( CurDevNN->name() ); |
500 | return S; | 491 | return S; |
501 | } | 492 | } |
502 | 493 | ||
503 | if( CurDevNN->hasDataFor( SF.name() ) ) { | 494 | if( CurDevNN->hasDataFor( SF.name() ) ) { |
504 | if( CurDevNN->generateDeviceDataForCommonFile( SF, DevInstNr ) ) { | 495 | if( CurDevNN->generateDeviceDataForCommonFile( SF, DevInstNr ) ) { |
505 | S = qApp->translate( "NetworkSettings", | 496 | S = qApp->translate( "NetworkSettings", |
506 | "<p>Error in \"Device Part\" for file \"%1\" and node \"%2\"</p>" ). | 497 | "<p>Error in \"Device Part\" for file \"%1\" and node \"%2\"</p>" ). |
507 | arg( SF.name() ). | 498 | arg( SF.name() ). |
508 | arg( CurDevNN->name() ); | 499 | arg( CurDevNN->name() ); |
509 | return S; | 500 | return S; |
510 | } | 501 | } |
511 | } | 502 | } |
512 | 503 | ||
513 | // now generate profile specific data for all | 504 | // now generate profile specific data for all |
514 | // connections working on a device of the current | 505 | // connections working on a device of the current |
515 | // netnode type | 506 | // netnode type |
516 | for( QDictIterator<NodeCollection> ncit(M); | 507 | for( QDictIterator<NodeCollection> ncit(M); |
517 | ncit.current(); | 508 | ncit.current(); |
518 | ++ncit ) { | 509 | ++ncit ) { |
519 | NodeCollection * NC = ncit.current(); | 510 | NodeCollection * NC = ncit.current(); |
520 | 511 | ||
521 | // currenly only those connections that work on | 512 | // currenly only those connections that work on |
522 | // the current device (or on no device if no current) | 513 | // the current device (or on no device if no current) |
523 | AsDevice * Dev = NC->device(); | 514 | AsDevice * Dev = NC->device(); |
524 | 515 | ||
525 | if( CurDev ) { | 516 | if( CurDev ) { |
526 | if( CurDevNN != Dev->netNode()->nodeClass() ) { | 517 | if( CurDevNN != Dev->netNode()->nodeClass() ) { |
527 | // other device type -> later | 518 | // other device type -> later |
528 | continue; | 519 | continue; |
529 | } | 520 | } |
530 | } else { | 521 | } else { |
531 | if( Dev ) { | 522 | if( Dev ) { |
532 | // other | 523 | // other |
533 | continue; | 524 | continue; |
534 | } | 525 | } |
535 | } | 526 | } |
536 | 527 | ||
537 | // generate 'entry' | 528 | // generate 'entry' |
538 | if( SF.preNodeSection( DevNNI, DevInstNr ) ) { | 529 | if( SF.preNodeSection( DevNNI, DevInstNr ) ) { |
539 | S = qApp->translate( "NetworkSettings", | 530 | S = qApp->translate( "NetworkSettings", |
540 | "<p>Error in \"Pre-Node Part\" for file \"%1\" and node \"%2\"</p>" ). | 531 | "<p>Error in \"Pre-Node Part\" for file \"%1\" and node \"%2\"</p>" ). |
541 | arg( SF.name() ). | 532 | arg( SF.name() ). |
542 | arg( CurDevNN->name() ); | 533 | arg( CurDevNN->name() ); |
543 | return S; | 534 | return S; |
544 | } | 535 | } |
545 | 536 | ||
546 | // ask all nodes in connection | 537 | // ask all nodes in connection |
547 | for( QListIterator<ANetNodeInstance> cncit(*NC); | 538 | for( QListIterator<ANetNodeInstance> cncit(*NC); |
548 | cncit.current(); | 539 | cncit.current(); |
549 | ++cncit ) { | 540 | ++cncit ) { |
550 | ANetNodeInstance * NNI = cncit.current(); | 541 | ANetNodeInstance * NNI = cncit.current(); |
551 | 542 | ||
552 | if( NNI->hasDataFor( SF.name() ) ) { | 543 | if( NNI->hasDataFor( SF.name() ) ) { |
553 | if( NNI->generateDataForCommonFile(SF,DevInstNr) ) { | 544 | if( NNI->generateDataForCommonFile(SF,DevInstNr) ) { |
554 | S = qApp->translate( "NetworkSettings", | 545 | S = qApp->translate( "NetworkSettings", |
555 | "<p>Error in \"Node Part\" for file \"%1\" and node \"%2\"</p>" ). | 546 | "<p>Error in \"Node Part\" for file \"%1\" and node \"%2\"</p>" ). |
556 | arg( SF.name() ). | 547 | arg( SF.name() ). |
557 | arg( NNI->nodeClass()->name() ); | 548 | arg( NNI->nodeClass()->name() ); |
558 | return S; | 549 | return S; |
559 | } | 550 | } |
560 | } | 551 | } |
561 | } | 552 | } |
562 | 553 | ||
563 | if( SF.postNodeSection( DevNNI, DevInstNr ) ) { | 554 | if( SF.postNodeSection( DevNNI, DevInstNr ) ) { |
564 | S = qApp->translate( "NetworkSettings", | 555 | S = qApp->translate( "NetworkSettings", |
565 | "<p>Error in \"Post-Node Part\" for file \"%1\" and node \"%2\"</p>" ). | 556 | "<p>Error in \"Post-Node Part\" for file \"%1\" and node \"%2\"</p>" ). |
566 | arg( SF.name() ). | 557 | arg( SF.name() ). |
567 | arg( CurDevNN->name() ); | 558 | arg( CurDevNN->name() ); |
568 | return S; | 559 | return S; |
569 | } | 560 | } |
570 | SF << endl; | 561 | SF << endl; |
571 | } | 562 | } |
572 | 563 | ||
573 | if( SF.postDeviceSection( CurDevNN ) ) { | 564 | if( SF.postDeviceSection( CurDevNN ) ) { |
574 | S = qApp->translate( "NetworkSettings", | 565 | S = qApp->translate( "NetworkSettings", |
575 | "<p>Error in \"Post-Device Part\" for file \"%1\" and node \"%2\"</p>" ). | 566 | "<p>Error in \"Post-Device Part\" for file \"%1\" and node \"%2\"</p>" ). |
576 | arg( SF.name() ). | 567 | arg( SF.name() ). |
577 | arg( CurDevNN->name() ); | 568 | arg( CurDevNN->name() ); |
578 | return S; | 569 | return S; |
579 | } | 570 | } |
580 | 571 | ||
581 | return S; | 572 | return S; |
582 | } | 573 | } |
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 | |||
@@ -1,305 +1,375 @@ | |||
1 | <!DOCTYPE UI><UI> | 1 | <!DOCTYPE UI><UI> |
2 | <class>ProfileGUI</class> | 2 | <class>ProfileGUI</class> |
3 | <widget> | 3 | <widget> |
4 | <class>QWidget</class> | 4 | <class>QWidget</class> |
5 | <property stdset="1"> | 5 | <property stdset="1"> |
6 | <name>name</name> | 6 | <name>name</name> |
7 | <cstring>Profile_FRM</cstring> | 7 | <cstring>Profile_FRM</cstring> |
8 | </property> | 8 | </property> |
9 | <property stdset="1"> | 9 | <property stdset="1"> |
10 | <name>geometry</name> | 10 | <name>geometry</name> |
11 | <rect> | 11 | <rect> |
12 | <x>0</x> | 12 | <x>0</x> |
13 | <y>0</y> | 13 | <y>0</y> |
14 | <width>225</width> | 14 | <width>276</width> |
15 | <height>301</height> | 15 | <height>231</height> |
16 | </rect> | 16 | </rect> |
17 | </property> | 17 | </property> |
18 | <property stdset="1"> | 18 | <property stdset="1"> |
19 | <name>caption</name> | 19 | <name>caption</name> |
20 | <string>Profile</string> | 20 | <string>Profile</string> |
21 | </property> | 21 | </property> |
22 | <property> | 22 | <property> |
23 | <name>layoutMargin</name> | 23 | <name>layoutMargin</name> |
24 | </property> | 24 | </property> |
25 | <property> | 25 | <property> |
26 | <name>layoutSpacing</name> | 26 | <name>layoutSpacing</name> |
27 | </property> | 27 | </property> |
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>0</number> |
32 | </property> | 32 | </property> |
33 | <property stdset="1"> | 33 | <property stdset="1"> |
34 | <name>spacing</name> | 34 | <name>spacing</name> |
35 | <number>0</number> | 35 | <number>0</number> |
36 | </property> | 36 | </property> |
37 | <widget> | 37 | <widget> |
38 | <class>QTabWidget</class> | 38 | <class>QTabWidget</class> |
39 | <property stdset="1"> | 39 | <property stdset="1"> |
40 | <name>name</name> | 40 | <name>name</name> |
41 | <cstring>TabWidget6</cstring> | 41 | <cstring>TabWidget6</cstring> |
42 | </property> | 42 | </property> |
43 | <property> | 43 | <property> |
44 | <name>layoutMargin</name> | 44 | <name>layoutMargin</name> |
45 | </property> | 45 | </property> |
46 | <property> | 46 | <property> |
47 | <name>layoutSpacing</name> | 47 | <name>layoutSpacing</name> |
48 | </property> | 48 | </property> |
49 | <widget> | 49 | <widget> |
50 | <class>QWidget</class> | 50 | <class>QWidget</class> |
51 | <property stdset="1"> | 51 | <property stdset="1"> |
52 | <name>name</name> | 52 | <name>name</name> |
53 | <cstring>tab</cstring> | 53 | <cstring>tab</cstring> |
54 | </property> | 54 | </property> |
55 | <attribute> | 55 | <attribute> |
56 | <name>title</name> | 56 | <name>title</name> |
57 | <string>Setup</string> | 57 | <string>Setup</string> |
58 | </attribute> | 58 | </attribute> |
59 | <vbox> | 59 | <vbox> |
60 | <property stdset="1"> | 60 | <property stdset="1"> |
61 | <name>margin</name> | 61 | <name>margin</name> |
62 | <number>2</number> | 62 | <number>1</number> |
63 | </property> | 63 | </property> |
64 | <property stdset="1"> | 64 | <property stdset="1"> |
65 | <name>spacing</name> | 65 | <name>spacing</name> |
66 | <number>0</number> | 66 | <number>2</number> |
67 | </property> | 67 | </property> |
68 | <widget> | 68 | <widget> |
69 | <class>QCheckBox</class> | 69 | <class>QLayoutWidget</class> |
70 | <property stdset="1"> | ||
71 | <name>name</name> | ||
72 | <cstring>Automatic_CB</cstring> | ||
73 | </property> | ||
74 | <property stdset="1"> | ||
75 | <name>text</name> | ||
76 | <string>Start automatically</string> | ||
77 | </property> | ||
78 | </widget> | ||
79 | <widget> | ||
80 | <class>QCheckBox</class> | ||
81 | <property stdset="1"> | ||
82 | <name>name</name> | ||
83 | <cstring>Confirm_CB</cstring> | ||
84 | </property> | ||
85 | <property stdset="1"> | ||
86 | <name>enabled</name> | ||
87 | <bool>true</bool> | ||
88 | </property> | ||
89 | <property stdset="1"> | ||
90 | <name>text</name> | ||
91 | <string>Confirm before start</string> | ||
92 | </property> | ||
93 | <property> | ||
94 | <name>layoutMargin</name> | ||
95 | </property> | ||
96 | </widget> | ||
97 | <widget> | ||
98 | <class>QCheckBox</class> | ||
99 | <property stdset="1"> | 70 | <property stdset="1"> |
100 | <name>name</name> | 71 | <name>name</name> |
101 | <cstring>Disabled_CB</cstring> | 72 | <cstring>Layout8</cstring> |
102 | </property> | ||
103 | <property stdset="1"> | ||
104 | <name>enabled</name> | ||
105 | <bool>true</bool> | ||
106 | </property> | ||
107 | <property stdset="1"> | ||
108 | <name>text</name> | ||
109 | <string>Disabled</string> | ||
110 | </property> | ||
111 | <property> | ||
112 | <name>layoutMargin</name> | ||
113 | </property> | 73 | </property> |
74 | <grid> | ||
75 | <property stdset="1"> | ||
76 | <name>margin</name> | ||
77 | <number>0</number> | ||
78 | </property> | ||
79 | <property stdset="1"> | ||
80 | <name>spacing</name> | ||
81 | <number>6</number> | ||
82 | </property> | ||
83 | <widget row="0" column="0" rowspan="2" colspan="1" > | ||
84 | <class>QGroupBox</class> | ||
85 | <property stdset="1"> | ||
86 | <name>name</name> | ||
87 | <cstring>GroupBox1</cstring> | ||
88 | </property> | ||
89 | <property stdset="1"> | ||
90 | <name>title</name> | ||
91 | <string>Start</string> | ||
92 | </property> | ||
93 | <vbox> | ||
94 | <property stdset="1"> | ||
95 | <name>margin</name> | ||
96 | <number>11</number> | ||
97 | </property> | ||
98 | <property stdset="1"> | ||
99 | <name>spacing</name> | ||
100 | <number>6</number> | ||
101 | </property> | ||
102 | <widget> | ||
103 | <class>QCheckBox</class> | ||
104 | <property stdset="1"> | ||
105 | <name>name</name> | ||
106 | <cstring>Automatic_CB</cstring> | ||
107 | </property> | ||
108 | <property stdset="1"> | ||
109 | <name>text</name> | ||
110 | <string>Automatically</string> | ||
111 | </property> | ||
112 | </widget> | ||
113 | <widget> | ||
114 | <class>QCheckBox</class> | ||
115 | <property stdset="1"> | ||
116 | <name>name</name> | ||
117 | <cstring>Confirm_CB</cstring> | ||
118 | </property> | ||
119 | <property stdset="1"> | ||
120 | <name>enabled</name> | ||
121 | <bool>true</bool> | ||
122 | </property> | ||
123 | <property stdset="1"> | ||
124 | <name>text</name> | ||
125 | <string>Ask</string> | ||
126 | </property> | ||
127 | <property> | ||
128 | <name>layoutMargin</name> | ||
129 | </property> | ||
130 | </widget> | ||
131 | <widget> | ||
132 | <class>QCheckBox</class> | ||
133 | <property stdset="1"> | ||
134 | <name>name</name> | ||
135 | <cstring>Disabled_CB</cstring> | ||
136 | </property> | ||
137 | <property stdset="1"> | ||
138 | <name>enabled</name> | ||
139 | <bool>true</bool> | ||
140 | </property> | ||
141 | <property stdset="1"> | ||
142 | <name>text</name> | ||
143 | <string>Disabled</string> | ||
144 | </property> | ||
145 | <property> | ||
146 | <name>layoutMargin</name> | ||
147 | </property> | ||
148 | </widget> | ||
149 | </vbox> | ||
150 | </widget> | ||
151 | <widget row="0" column="1" > | ||
152 | <class>QCheckBox</class> | ||
153 | <property stdset="1"> | ||
154 | <name>name</name> | ||
155 | <cstring>TriggersVPN_CB</cstring> | ||
156 | </property> | ||
157 | <property stdset="1"> | ||
158 | <name>text</name> | ||
159 | <string>Trigger VPN</string> | ||
160 | </property> | ||
161 | </widget> | ||
162 | <spacer row="1" column="1" > | ||
163 | <property> | ||
164 | <name>name</name> | ||
165 | <cstring>Spacer8</cstring> | ||
166 | </property> | ||
167 | <property stdset="1"> | ||
168 | <name>orientation</name> | ||
169 | <enum>Vertical</enum> | ||
170 | </property> | ||
171 | <property stdset="1"> | ||
172 | <name>sizeType</name> | ||
173 | <enum>Expanding</enum> | ||
174 | </property> | ||
175 | <property> | ||
176 | <name>sizeHint</name> | ||
177 | <size> | ||
178 | <width>20</width> | ||
179 | <height>20</height> | ||
180 | </size> | ||
181 | </property> | ||
182 | </spacer> | ||
183 | </grid> | ||
114 | </widget> | 184 | </widget> |
115 | <widget> | 185 | <widget> |
116 | <class>QLabel</class> | 186 | <class>QLabel</class> |
117 | <property stdset="1"> | 187 | <property stdset="1"> |
118 | <name>name</name> | 188 | <name>name</name> |
119 | <cstring>TextLabel3</cstring> | 189 | <cstring>TextLabel3</cstring> |
120 | </property> | 190 | </property> |
121 | <property stdset="1"> | 191 | <property stdset="1"> |
122 | <name>text</name> | 192 | <name>text</name> |
123 | <string>Description</string> | 193 | <string>Description</string> |
124 | </property> | 194 | </property> |
125 | </widget> | 195 | </widget> |
126 | <widget> | 196 | <widget> |
127 | <class>QMultiLineEdit</class> | 197 | <class>QMultiLineEdit</class> |
128 | <property stdset="1"> | 198 | <property stdset="1"> |
129 | <name>name</name> | 199 | <name>name</name> |
130 | <cstring>Description_LE</cstring> | 200 | <cstring>Description_LE</cstring> |
131 | </property> | 201 | </property> |
132 | </widget> | 202 | </widget> |
133 | </vbox> | 203 | </vbox> |
134 | </widget> | 204 | </widget> |
135 | <widget> | 205 | <widget> |
136 | <class>QWidget</class> | 206 | <class>QWidget</class> |
137 | <property stdset="1"> | 207 | <property stdset="1"> |
138 | <name>name</name> | 208 | <name>name</name> |
139 | <cstring>tab</cstring> | 209 | <cstring>tab</cstring> |
140 | </property> | 210 | </property> |
141 | <attribute> | 211 | <attribute> |
142 | <name>title</name> | 212 | <name>title</name> |
143 | <string>State</string> | 213 | <string>State</string> |
144 | </attribute> | 214 | </attribute> |
145 | <vbox> | 215 | <vbox> |
146 | <property stdset="1"> | 216 | <property stdset="1"> |
147 | <name>margin</name> | 217 | <name>margin</name> |
148 | <number>0</number> | 218 | <number>0</number> |
149 | </property> | 219 | </property> |
150 | <property stdset="1"> | 220 | <property stdset="1"> |
151 | <name>spacing</name> | 221 | <name>spacing</name> |
152 | <number>2</number> | 222 | <number>2</number> |
153 | </property> | 223 | </property> |
154 | <widget> | 224 | <widget> |
155 | <class>QFrame</class> | 225 | <class>QFrame</class> |
156 | <property stdset="1"> | 226 | <property stdset="1"> |
157 | <name>name</name> | 227 | <name>name</name> |
158 | <cstring>Frame73</cstring> | 228 | <cstring>Frame73</cstring> |
159 | </property> | 229 | </property> |
160 | <property stdset="1"> | 230 | <property stdset="1"> |
161 | <name>sizePolicy</name> | 231 | <name>sizePolicy</name> |
162 | <sizepolicy> | 232 | <sizepolicy> |
163 | <hsizetype>7</hsizetype> | 233 | <hsizetype>7</hsizetype> |
164 | <vsizetype>5</vsizetype> | 234 | <vsizetype>5</vsizetype> |
165 | </sizepolicy> | 235 | </sizepolicy> |
166 | </property> | 236 | </property> |
167 | <property stdset="1"> | 237 | <property stdset="1"> |
168 | <name>frameShape</name> | 238 | <name>frameShape</name> |
169 | <enum>NoFrame</enum> | 239 | <enum>NoFrame</enum> |
170 | </property> | 240 | </property> |
171 | <property stdset="1"> | 241 | <property stdset="1"> |
172 | <name>frameShadow</name> | 242 | <name>frameShadow</name> |
173 | <enum>Plain</enum> | 243 | <enum>Plain</enum> |
174 | </property> | 244 | </property> |
175 | <property> | 245 | <property> |
176 | <name>layoutMargin</name> | 246 | <name>layoutMargin</name> |
177 | </property> | 247 | </property> |
178 | <property> | 248 | <property> |
179 | <name>layoutSpacing</name> | 249 | <name>layoutSpacing</name> |
180 | </property> | 250 | </property> |
181 | <hbox> | 251 | <hbox> |
182 | <property stdset="1"> | 252 | <property stdset="1"> |
183 | <name>margin</name> | 253 | <name>margin</name> |
184 | <number>2</number> | 254 | <number>2</number> |
185 | </property> | 255 | </property> |
186 | <property stdset="1"> | 256 | <property stdset="1"> |
187 | <name>spacing</name> | 257 | <name>spacing</name> |
188 | <number>0</number> | 258 | <number>0</number> |
189 | </property> | 259 | </property> |
190 | <widget> | 260 | <widget> |
191 | <class>QLabel</class> | 261 | <class>QLabel</class> |
192 | <property stdset="1"> | 262 | <property stdset="1"> |
193 | <name>name</name> | 263 | <name>name</name> |
194 | <cstring>InterfaceName_LBL</cstring> | 264 | <cstring>InterfaceName_LBL</cstring> |
195 | </property> | 265 | </property> |
196 | <property stdset="1"> | 266 | <property stdset="1"> |
197 | <name>font</name> | 267 | <name>font</name> |
198 | <font> | 268 | <font> |
199 | <underline>1</underline> | 269 | <underline>1</underline> |
200 | </font> | 270 | </font> |
201 | </property> | 271 | </property> |
202 | <property stdset="1"> | 272 | <property stdset="1"> |
203 | <name>text</name> | 273 | <name>text</name> |
204 | <string>eth0</string> | 274 | <string>eth0</string> |
205 | </property> | 275 | </property> |
206 | </widget> | 276 | </widget> |
207 | <widget> | 277 | <widget> |
208 | <class>QLabel</class> | 278 | <class>QLabel</class> |
209 | <property stdset="1"> | 279 | <property stdset="1"> |
210 | <name>name</name> | 280 | <name>name</name> |
211 | <cstring>InterfaceOptions_LBL</cstring> | 281 | <cstring>InterfaceOptions_LBL</cstring> |
212 | </property> | 282 | </property> |
213 | <property stdset="1"> | 283 | <property stdset="1"> |
214 | <name>sizePolicy</name> | 284 | <name>sizePolicy</name> |
215 | <sizepolicy> | 285 | <sizepolicy> |
216 | <hsizetype>7</hsizetype> | 286 | <hsizetype>7</hsizetype> |
217 | <vsizetype>1</vsizetype> | 287 | <vsizetype>1</vsizetype> |
218 | </sizepolicy> | 288 | </sizepolicy> |
219 | </property> | 289 | </property> |
220 | <property stdset="1"> | 290 | <property stdset="1"> |
221 | <name>font</name> | 291 | <name>font</name> |
222 | <font> | 292 | <font> |
223 | <underline>1</underline> | 293 | <underline>1</underline> |
224 | </font> | 294 | </font> |
225 | </property> | 295 | </property> |
226 | <property stdset="1"> | 296 | <property stdset="1"> |
227 | <name>text</name> | 297 | <name>text</name> |
228 | <string>(Multicast, Up)</string> | 298 | <string>(Multicast, Up)</string> |
229 | </property> | 299 | </property> |
230 | <property stdset="1"> | 300 | <property stdset="1"> |
231 | <name>indent</name> | 301 | <name>indent</name> |
232 | <number>0</number> | 302 | <number>0</number> |
233 | </property> | 303 | </property> |
234 | </widget> | 304 | </widget> |
235 | </hbox> | 305 | </hbox> |
236 | </widget> | 306 | </widget> |
237 | <widget> | 307 | <widget> |
238 | <class>QFrame</class> | 308 | <class>QFrame</class> |
239 | <property stdset="1"> | 309 | <property stdset="1"> |
240 | <name>name</name> | 310 | <name>name</name> |
241 | <cstring>Interface_GB</cstring> | 311 | <cstring>Interface_GB</cstring> |
242 | </property> | 312 | </property> |
243 | <property stdset="1"> | 313 | <property stdset="1"> |
244 | <name>enabled</name> | 314 | <name>enabled</name> |
245 | <bool>true</bool> | 315 | <bool>true</bool> |
246 | </property> | 316 | </property> |
247 | <property stdset="1"> | 317 | <property stdset="1"> |
248 | <name>sizePolicy</name> | 318 | <name>sizePolicy</name> |
249 | <sizepolicy> | 319 | <sizepolicy> |
250 | <hsizetype>7</hsizetype> | 320 | <hsizetype>7</hsizetype> |
251 | <vsizetype>5</vsizetype> | 321 | <vsizetype>5</vsizetype> |
252 | </sizepolicy> | 322 | </sizepolicy> |
253 | </property> | 323 | </property> |
254 | <property stdset="1"> | 324 | <property stdset="1"> |
255 | <name>frameShape</name> | 325 | <name>frameShape</name> |
256 | <enum>NoFrame</enum> | 326 | <enum>NoFrame</enum> |
257 | </property> | 327 | </property> |
258 | <property stdset="1"> | 328 | <property stdset="1"> |
259 | <name>frameShadow</name> | 329 | <name>frameShadow</name> |
260 | <enum>Raised</enum> | 330 | <enum>Raised</enum> |
261 | </property> | 331 | </property> |
262 | <property> | 332 | <property> |
263 | <name>layoutMargin</name> | 333 | <name>layoutMargin</name> |
264 | </property> | 334 | </property> |
265 | <property> | 335 | <property> |
266 | <name>layoutSpacing</name> | 336 | <name>layoutSpacing</name> |
267 | </property> | 337 | </property> |
268 | <grid> | 338 | <grid> |
269 | <property stdset="1"> | 339 | <property stdset="1"> |
270 | <name>margin</name> | 340 | <name>margin</name> |
271 | <number>2</number> | 341 | <number>2</number> |
272 | </property> | 342 | </property> |
273 | <property stdset="1"> | 343 | <property stdset="1"> |
274 | <name>spacing</name> | 344 | <name>spacing</name> |
275 | <number>1</number> | 345 | <number>1</number> |
276 | </property> | 346 | </property> |
277 | <widget row="0" column="2" > | 347 | <widget row="0" column="2" > |
278 | <class>QLabel</class> | 348 | <class>QLabel</class> |
279 | <property stdset="1"> | 349 | <property stdset="1"> |
280 | <name>name</name> | 350 | <name>name</name> |
281 | <cstring>TextLabel4_2_3</cstring> | 351 | <cstring>TextLabel4_2_3</cstring> |
282 | </property> | 352 | </property> |
283 | <property stdset="1"> | 353 | <property stdset="1"> |
284 | <name>enabled</name> | 354 | <name>enabled</name> |
285 | <bool>true</bool> | 355 | <bool>true</bool> |
286 | </property> | 356 | </property> |
287 | <property stdset="1"> | 357 | <property stdset="1"> |
288 | <name>sizePolicy</name> | 358 | <name>sizePolicy</name> |
289 | <sizepolicy> | 359 | <sizepolicy> |
290 | <hsizetype>0</hsizetype> | 360 | <hsizetype>0</hsizetype> |
291 | <vsizetype>1</vsizetype> | 361 | <vsizetype>1</vsizetype> |
292 | </sizepolicy> | 362 | </sizepolicy> |
293 | </property> | 363 | </property> |
294 | <property stdset="1"> | 364 | <property stdset="1"> |
295 | <name>frameShape</name> | 365 | <name>frameShape</name> |
296 | <enum>NoFrame</enum> | 366 | <enum>NoFrame</enum> |
297 | </property> | 367 | </property> |
298 | <property stdset="1"> | 368 | <property stdset="1"> |
299 | <name>frameShadow</name> | 369 | <name>frameShadow</name> |
300 | <enum>Raised</enum> | 370 | <enum>Raised</enum> |
301 | </property> | 371 | </property> |
302 | <property stdset="1"> | 372 | <property stdset="1"> |
303 | <name>text</name> | 373 | <name>text</name> |
304 | <string>Subnet Mask</string> | 374 | <string>Subnet Mask</string> |
305 | </property> | 375 | </property> |
diff --git a/noncore/settings/networksettings2/profile/profile_NNI.cpp b/noncore/settings/networksettings2/profile/profile_NNI.cpp index 5b54aa4..cb52b2a 100644 --- a/noncore/settings/networksettings2/profile/profile_NNI.cpp +++ b/noncore/settings/networksettings2/profile/profile_NNI.cpp | |||
@@ -1,54 +1,58 @@ | |||
1 | #include "profileedit.h" | 1 | #include "profileedit.h" |
2 | #include "profile_NNI.h" | 2 | #include "profile_NNI.h" |
3 | #include "profile_NN.h" | 3 | #include "profile_NN.h" |
4 | 4 | ||
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 | } |
39 | 43 | ||
40 | QString AProfile::acceptable( void ) { | 44 | QString AProfile::acceptable( void ) { |
41 | return ( GUI ) ? GUI->acceptable( ) : QString(); | 45 | return ( GUI ) ? GUI->acceptable( ) : QString(); |
42 | } | 46 | } |
43 | 47 | ||
44 | void AProfile::commit( void ) { | 48 | void AProfile::commit( void ) { |
45 | if( GUI && GUI->commit( Data ) ) | 49 | if( GUI && GUI->commit( Data ) ) |
46 | setModified( 1 ); | 50 | setModified( 1 ); |
47 | } | 51 | } |
48 | 52 | ||
49 | bool AProfile::generateDataForCommonFile( | 53 | bool AProfile::generateDataForCommonFile( |
50 | SystemFile & , | 54 | SystemFile & , |
51 | long) { | 55 | long) { |
52 | return 1; | 56 | return 1; |
53 | } | 57 | } |
54 | 58 | ||
diff --git a/noncore/settings/networksettings2/profile/profiledata.h b/noncore/settings/networksettings2/profile/profiledata.h index b4168e2..246d50c 100644 --- a/noncore/settings/networksettings2/profile/profiledata.h +++ b/noncore/settings/networksettings2/profile/profiledata.h | |||
@@ -1,15 +1,16 @@ | |||
1 | #ifndef PROFILE_DATA_H | 1 | #ifndef PROFILE_DATA_H |
2 | #define PROFILE_DATA_H | 2 | #define PROFILE_DATA_H |
3 | 3 | ||
4 | #include <qstring.h> | 4 | #include <qstring.h> |
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 | |||
@@ -1,96 +1,98 @@ | |||
1 | #include <qlabel.h> | 1 | #include <qlabel.h> |
2 | #include <qframe.h> | 2 | #include <qframe.h> |
3 | #include <qcheckbox.h> | 3 | #include <qcheckbox.h> |
4 | #include <qmultilineedit.h> | 4 | #include <qmultilineedit.h> |
5 | #include <qcheckbox.h> | 5 | #include <qcheckbox.h> |
6 | 6 | ||
7 | #include <GUIUtils.h> | 7 | #include <GUIUtils.h> |
8 | #include <asdevice.h> | 8 | #include <asdevice.h> |
9 | #include <resources.h> | 9 | #include <resources.h> |
10 | 10 | ||
11 | #include "profileedit.h" | 11 | #include "profileedit.h" |
12 | 12 | ||
13 | ProfileEdit::ProfileEdit( QWidget * Parent, ANetNodeInstance * TNNI ) : | 13 | ProfileEdit::ProfileEdit( QWidget * Parent, ANetNodeInstance * TNNI ) : |
14 | ProfileGUI( Parent ), RefreshTimer(this) { | 14 | ProfileGUI( Parent ), RefreshTimer(this) { |
15 | InterfaceInfo * II; | 15 | InterfaceInfo * II; |
16 | 16 | ||
17 | NNI = TNNI; | 17 | NNI = TNNI; |
18 | Dev = NNI->runtime()->device(); | 18 | Dev = NNI->runtime()->device(); |
19 | if( ( II = Dev->assignedInterface() ) ) { | 19 | if( ( II = Dev->assignedInterface() ) ) { |
20 | 20 | ||
21 | Refresh_CB->setEnabled( TRUE ); | 21 | Refresh_CB->setEnabled( TRUE ); |
22 | Snd_GB->setEnabled( TRUE ); | 22 | Snd_GB->setEnabled( TRUE ); |
23 | Rcv_GB->setEnabled( TRUE ); | 23 | Rcv_GB->setEnabled( TRUE ); |
24 | Collisions_FRM->setEnabled( TRUE ); | 24 | Collisions_FRM->setEnabled( TRUE ); |
25 | 25 | ||
26 | // show current content | 26 | // show current content |
27 | SLOT_Refresh(); | 27 | SLOT_Refresh(); |
28 | 28 | ||
29 | // fill in static data | 29 | // fill in static data |
30 | InterfaceName_LBL->setText( II->Name ); | 30 | InterfaceName_LBL->setText( II->Name ); |
31 | IPAddress_LBL->setText( II->Address ); | 31 | IPAddress_LBL->setText( II->Address ); |
32 | SubnetMask_LBL->setText( II->Netmask ); | 32 | SubnetMask_LBL->setText( II->Netmask ); |
33 | Broadcast_LBL->setText( II->BCastAddress ); | 33 | Broadcast_LBL->setText( II->BCastAddress ); |
34 | MACAddress_LBL->setText( II->MACAddress ); | 34 | MACAddress_LBL->setText( II->MACAddress ); |
35 | if( II->IsPointToPoint ) { | 35 | if( II->IsPointToPoint ) { |
36 | PointToPoint_LBL->setText( II->DstAddress ); | 36 | PointToPoint_LBL->setText( II->DstAddress ); |
37 | } | 37 | } |
38 | QString S; | 38 | QString S; |
39 | InterfaceName_LBL->setText( II->Name ); | 39 | InterfaceName_LBL->setText( II->Name ); |
40 | if( II->HasMulticast ) { | 40 | if( II->HasMulticast ) { |
41 | S += "Multicast"; | 41 | S += "Multicast"; |
42 | } | 42 | } |
43 | if( ! S.isEmpty() ) { | 43 | if( ! S.isEmpty() ) { |
44 | S.prepend( " : " ); | 44 | S.prepend( " : " ); |
45 | } | 45 | } |
46 | InterfaceOptions_LBL->setText( S ); | 46 | InterfaceOptions_LBL->setText( S ); |
47 | 47 | ||
48 | connect( &RefreshTimer, SIGNAL( timeout() ), | 48 | connect( &RefreshTimer, SIGNAL( timeout() ), |
49 | this, SLOT( SLOT_Refresh() ) ); | 49 | this, SLOT( SLOT_Refresh() ) ); |
50 | } | 50 | } |
51 | 51 | ||
52 | } | 52 | } |
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(); |
79 | NSResources->system().refreshStatistics( *II ); | 81 | NSResources->system().refreshStatistics( *II ); |
80 | RcvBytes_LBL->setText( II->RcvBytes ); | 82 | RcvBytes_LBL->setText( II->RcvBytes ); |
81 | SndBytes_LBL->setText( II->SndBytes ); | 83 | SndBytes_LBL->setText( II->SndBytes ); |
82 | RcvErrors_LBL->setText( II->RcvErrors ); | 84 | RcvErrors_LBL->setText( II->RcvErrors ); |
83 | SndErrors_LBL->setText( II->SndErrors ); | 85 | SndErrors_LBL->setText( II->SndErrors ); |
84 | RcvDropped_LBL->setText( II->RcvDropped ); | 86 | RcvDropped_LBL->setText( II->RcvDropped ); |
85 | SndDropped_LBL->setText( II->SndDropped ); | 87 | SndDropped_LBL->setText( II->SndDropped ); |
86 | Collisions_LBL->setText( II->Collisions ); | 88 | Collisions_LBL->setText( II->Collisions ); |
87 | } | 89 | } |
88 | 90 | ||
89 | void ProfileEdit::SLOT_AutoRefresh( bool ar ) { | 91 | void ProfileEdit::SLOT_AutoRefresh( bool ar ) { |
90 | if( ar ) { | 92 | if( ar ) { |
91 | RefreshTimer.start( 1000 ); | 93 | RefreshTimer.start( 1000 ); |
92 | SLOT_Refresh(); | 94 | SLOT_Refresh(); |
93 | } else { | 95 | } else { |
94 | RefreshTimer.stop(); | 96 | RefreshTimer.stop(); |
95 | } | 97 | } |
96 | } | 98 | } |
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,65 +1,67 @@ | |||
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 |
24 | // ... but request deeper | 26 | // ... but request deeper |
25 | NNNI->runtime()->detectState(NC); | 27 | NNNI->runtime()->detectState(NC); |
26 | } | 28 | } |
27 | return 1; | 29 | return 1; |
28 | case Disable : | 30 | case Disable : |
29 | switch( NC->currentState() ) { | 31 | switch( NC->currentState() ) { |
30 | case IsUp : | 32 | case IsUp : |
31 | case Available : | 33 | case Available : |
32 | // bring Deactivate (will bring down) | 34 | // bring Deactivate (will bring down) |
33 | if( ! NNNI->runtime()->setState(NC, Deactivate) ) | 35 | if( ! NNNI->runtime()->setState(NC, Deactivate) ) |
34 | return 0; | 36 | return 0; |
35 | default : | 37 | default : |
36 | break; | 38 | break; |
37 | } | 39 | } |
38 | Data->Disabled = 1; | 40 | Data->Disabled = 1; |
39 | NC->setCurrentState( Disabled ); | 41 | NC->setCurrentState( Disabled ); |
40 | return 1; | 42 | return 1; |
41 | default : | 43 | default : |
42 | break; | 44 | break; |
43 | } | 45 | } |
44 | return NNNI->runtime()->setState(NC, A); | 46 | return NNNI->runtime()->setState(NC, A, F ); |
45 | } | 47 | } |
46 | 48 | ||
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 |
53 | return 1; | 55 | return 1; |
54 | default : | 56 | default : |
55 | break; | 57 | break; |
56 | } | 58 | } |
57 | RI = netNode()->nextNode()->runtime(); | 59 | RI = netNode()->nextNode()->runtime(); |
58 | return ( Curr != Disabled ) ? | 60 | return ( Curr != Disabled ) ? |
59 | RI->canSetState(Curr, A) : 0; | 61 | RI->canSetState(Curr, A) : 0; |
60 | } | 62 | } |
61 | 63 | ||
62 | bool ProfileRun::handlesInterface( const QString & S ) { | 64 | bool ProfileRun::handlesInterface( const QString & S ) { |
63 | // donno -> pass deeper | 65 | // donno -> pass deeper |
64 | return netNode()->nextNode()->runtime()->handlesInterface(S); | 66 | return netNode()->nextNode()->runtime()->handlesInterface(S); |
65 | } | 67 | } |
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 | |||
@@ -1,31 +1,35 @@ | |||
1 | #ifndef PROFILERUN_H | 1 | #ifndef PROFILERUN_H |
2 | #define PROFILERUN_H | 2 | #define PROFILERUN_H |
3 | 3 | ||
4 | #include <asfullsetup.h> | 4 | #include <asfullsetup.h> |
5 | #include "profiledata.h" | 5 | #include "profiledata.h" |
6 | 6 | ||
7 | class ProfileRun : public AsFullSetup { | 7 | class ProfileRun : public AsFullSetup { |
8 | 8 | ||
9 | public : | 9 | public : |
10 | 10 | ||
11 | ProfileRun( ANetNodeInstance * NNI, ProfileData & D ) : | 11 | ProfileRun( ANetNodeInstance * NNI, ProfileData & D ) : |
12 | AsFullSetup( NNI ) | 12 | AsFullSetup( NNI ) |
13 | { Data = &D; } | 13 | { Data = &D; } |
14 | 14 | ||
15 | void detectState( NodeCollection * NC ); | 15 | void detectState( NodeCollection * NC ); |
16 | bool setState( NodeCollection * NC, Action_t A, bool ); | 16 | bool setState( NodeCollection * NC, Action_t A, bool ); |
17 | bool canSetState( State_t Curr, Action_t A ); | 17 | bool canSetState( State_t Curr, Action_t A ); |
18 | 18 | ||
19 | bool handlesInterface( const QString & I ); | 19 | bool handlesInterface( const QString & I ); |
20 | 20 | ||
21 | virtual const QString & description( void ) | 21 | virtual const QString & description( void ) |
22 | { return Data->Description; } | 22 | { return Data->Description; } |
23 | 23 | ||
24 | virtual AsFullSetup * asFullSetup( void ) | 24 | virtual AsFullSetup * asFullSetup( void ) |
25 | { return (AsFullSetup *)this; } | 25 | { return (AsFullSetup *)this; } |
26 | |||
27 | virtual bool triggersVPN( void ) | ||
28 | { return Data->TriggerVPN; } | ||
29 | |||
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 | |||
@@ -1,176 +1,178 @@ | |||
1 | #include <qfile.h> | 1 | #include <qfile.h> |
2 | #include <qfileinfo.h> | 2 | #include <qfileinfo.h> |
3 | #include <qtextstream.h> | 3 | #include <qtextstream.h> |
4 | #include <resources.h> | 4 | #include <resources.h> |
5 | #include "usbrun.h" | 5 | #include "usbrun.h" |
6 | 6 | ||
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 | } |
46 | 48 | ||
47 | // nothing (valid) assigned to us | 49 | // nothing (valid) assigned to us |
48 | assignInterface( 0 ); | 50 | assignInterface( 0 ); |
49 | 51 | ||
50 | // find possible interface | 52 | // find possible interface |
51 | for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); | 53 | for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); |
52 | It.current(); | 54 | It.current(); |
53 | ++It ) { | 55 | ++It ) { |
54 | Run = It.current(); | 56 | Run = It.current(); |
55 | 57 | ||
56 | fprintf( stderr, "%s %d %d=%d %d\n", | 58 | Log(("%s %d %d=%d %d\n", |
57 | Run->Name.latin1(), | 59 | Run->Name.latin1(), |
58 | handlesInterface( Run->Name ), | 60 | handlesInterface( Run->Name ), |
59 | Run->CardType, ARPHRD_ETHER, | 61 | Run->CardType, ARPHRD_ETHER, |
60 | ! Run->IsUp ); | 62 | ! Run->IsUp )); |
61 | 63 | ||
62 | if( handlesInterface( Run->Name ) && | 64 | if( handlesInterface( Run->Name ) && |
63 | Run->CardType == ARPHRD_ETHER && | 65 | Run->CardType == ARPHRD_ETHER && |
64 | ! Run->IsUp | 66 | ! Run->IsUp |
65 | ) { | 67 | ) { |
66 | fprintf( stderr, "Released(OFF)\n" ); | 68 | Log(("Released(OFF)\n" )); |
67 | // proper type, and Not UP -> free | 69 | // proper type, and Not UP -> free |
68 | NC->setCurrentState( Off ); | 70 | NC->setCurrentState( Off ); |
69 | return; | 71 | return; |
70 | } | 72 | } |
71 | } | 73 | } |
72 | // no free found | 74 | // no free found |
73 | fprintf( stderr, "UNA\n" ); | 75 | Log(("UNA\n" )); |
74 | 76 | ||
75 | NC->setCurrentState( Unavailable ); | 77 | NC->setCurrentState( Unavailable ); |
76 | } | 78 | } |
77 | 79 | ||
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 ) { |
82 | case Activate : | 84 | case Activate : |
83 | { | 85 | { |
84 | if( NC->currentState() != Off ) { | 86 | if( NC->currentState() != Off ) { |
85 | return 0; | 87 | return 0; |
86 | } | 88 | } |
87 | InterfaceInfo * N = getInterface(); | 89 | InterfaceInfo * N = getInterface(); |
88 | if( ! N ) { | 90 | if( ! N ) { |
89 | // no interface available | 91 | // no interface available |
90 | NC->setCurrentState( Unavailable ); | 92 | NC->setCurrentState( Unavailable ); |
91 | return 0; | 93 | return 0; |
92 | } | 94 | } |
93 | // because we were OFF the interface | 95 | // because we were OFF the interface |
94 | // we get back is NOT assigned | 96 | // we get back is NOT assigned |
95 | N->assignNode( netNode() ); | 97 | N->assignNode( netNode() ); |
96 | assignInterface( N ); | 98 | assignInterface( N ); |
97 | fprintf( stderr, "Assing %p\n", N ); | 99 | Log(("Assing %p\n", N )); |
98 | NC->setCurrentState( Available ); | 100 | NC->setCurrentState( Available ); |
99 | return 1; | 101 | return 1; |
100 | } | 102 | } |
101 | case Deactivate : | 103 | case Deactivate : |
102 | if( NC->currentState() == IsUp ) { | 104 | if( NC->currentState() == IsUp ) { |
103 | // bring down first | 105 | // bring down first |
104 | if( ! connection()->setState( Down ) ) | 106 | if( ! connection()->setState( Down ) ) |
105 | // could not ... | 107 | // could not ... |
106 | return 0; | 108 | return 0; |
107 | } else if( NC->currentState() != Available ) { | 109 | } else if( NC->currentState() != Available ) { |
108 | return 1; | 110 | return 1; |
109 | } | 111 | } |
110 | assignedInterface()->assignNode( 0 ); // release | 112 | assignedInterface()->assignNode( 0 ); // release |
111 | assignInterface( 0 ); | 113 | assignInterface( 0 ); |
112 | NC->setCurrentState( Off ); | 114 | NC->setCurrentState( Off ); |
113 | return 1; | 115 | return 1; |
114 | default : | 116 | default : |
115 | // FT | 117 | // FT |
116 | break; | 118 | break; |
117 | } | 119 | } |
118 | return 0; | 120 | return 0; |
119 | } | 121 | } |
120 | 122 | ||
121 | bool USBRun::canSetState( State_t Curr, Action_t A ) { | 123 | bool USBRun::canSetState( State_t Curr, Action_t A ) { |
122 | // we only handle up down activate and deactivate | 124 | // we only handle up down activate and deactivate |
123 | switch( A ) { | 125 | switch( A ) { |
124 | case Activate : | 126 | case Activate : |
125 | { // at least available | 127 | { // at least available |
126 | if( Curr == Available ) { | 128 | if( Curr == Available ) { |
127 | return 1; | 129 | return 1; |
128 | } | 130 | } |
129 | // or we can make one available | 131 | // or we can make one available |
130 | InterfaceInfo * N = getInterface(); | 132 | InterfaceInfo * N = getInterface(); |
131 | if( ! N || N->assignedNode() != 0 ) { | 133 | if( ! N || N->assignedNode() != 0 ) { |
132 | // non available or assigned | 134 | // non available or assigned |
133 | return 0; | 135 | return 0; |
134 | } | 136 | } |
135 | return 1; | 137 | return 1; |
136 | } | 138 | } |
137 | case Deactivate : | 139 | case Deactivate : |
138 | return ( Curr >= Available ); | 140 | return ( Curr >= Available ); |
139 | default : | 141 | default : |
140 | // FT | 142 | // FT |
141 | break; | 143 | break; |
142 | } | 144 | } |
143 | return 0; | 145 | return 0; |
144 | } | 146 | } |
145 | 147 | ||
146 | // get interface that is free or assigned to us | 148 | // get interface that is free or assigned to us |
147 | InterfaceInfo * USBRun::getInterface( void ) { | 149 | InterfaceInfo * USBRun::getInterface( void ) { |
148 | 150 | ||
149 | System & S = NSResources->system(); | 151 | System & S = NSResources->system(); |
150 | InterfaceInfo * best = 0, * Run; | 152 | InterfaceInfo * best = 0, * Run; |
151 | QRegExp R( "usb[0-9abcdef]" ); | 153 | QRegExp R( "usb[0-9abcdef]" ); |
152 | 154 | ||
153 | for( QDictIterator<InterfaceInfo> It(S.interfaces()); | 155 | for( QDictIterator<InterfaceInfo> It(S.interfaces()); |
154 | It.current(); | 156 | It.current(); |
155 | ++It ) { | 157 | ++It ) { |
156 | Run = It.current(); | 158 | Run = It.current(); |
157 | if( handlesInterface( Run->Name ) && | 159 | if( handlesInterface( Run->Name ) && |
158 | Run->CardType == ARPHRD_ETHER | 160 | Run->CardType == ARPHRD_ETHER |
159 | ) { | 161 | ) { |
160 | // this is a USB card | 162 | // this is a USB card |
161 | if( Run->assignedNode() == netNode() ) { | 163 | if( Run->assignedNode() == netNode() ) { |
162 | // assigned to us | 164 | // assigned to us |
163 | return Run; | 165 | return Run; |
164 | } else if( Run->assignedNode() == 0 ) { | 166 | } else if( Run->assignedNode() == 0 ) { |
165 | // free | 167 | // free |
166 | best = Run; | 168 | best = Run; |
167 | } | 169 | } |
168 | } | 170 | } |
169 | } | 171 | } |
170 | return best; // can be 0 | 172 | return best; // can be 0 |
171 | } | 173 | } |
172 | 174 | ||
173 | bool USBRun::handlesInterface( const QString & S ) { | 175 | bool USBRun::handlesInterface( const QString & S ) { |
174 | return Pat.match( S ) >= 0; | 176 | return Pat.match( S ) >= 0; |
175 | } | 177 | } |
176 | 178 | ||