summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings2
Unidiff
Diffstat (limited to 'noncore/settings/networksettings2') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NN.cpp21
-rw-r--r--noncore/settings/networksettings2/cable/cable_NN.cpp19
-rw-r--r--noncore/settings/networksettings2/editconnection.cpp5
-rw-r--r--noncore/settings/networksettings2/gprs/GPRS_NN.cpp19
-rw-r--r--noncore/settings/networksettings2/irda/irda_NN.cpp19
-rw-r--r--noncore/settings/networksettings2/lancard/lancard_NN.cpp19
-rw-r--r--noncore/settings/networksettings2/modem/modem_NN.cpp19
-rw-r--r--noncore/settings/networksettings2/network/network_NN.cpp19
-rw-r--r--noncore/settings/networksettings2/networksettings.cpp4
-rw-r--r--noncore/settings/networksettings2/networksettings2/netnode.cpp37
-rw-r--r--noncore/settings/networksettings2/networksettings2/netnode.h48
-rw-r--r--noncore/settings/networksettings2/networksettings2/netnodeinterface.h18
-rw-r--r--noncore/settings/networksettings2/networksettings2/resources.cpp171
-rw-r--r--noncore/settings/networksettings2/networksettings2/resources.h60
-rw-r--r--noncore/settings/networksettings2/nsdata.cpp152
-rw-r--r--noncore/settings/networksettings2/ppp/ppp_NN.cpp19
-rw-r--r--noncore/settings/networksettings2/profile/profile_NN.cpp19
-rw-r--r--noncore/settings/networksettings2/usb/usb_NN.cpp19
-rw-r--r--noncore/settings/networksettings2/usb/usbrun.cpp15
-rw-r--r--noncore/settings/networksettings2/vpn/vpn_NN.cpp19
-rw-r--r--noncore/settings/networksettings2/wlan/wlan_NN.cpp19
21 files changed, 222 insertions, 518 deletions
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NN.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NN.cpp
index 5e4d951..5c2b8b2 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NN.cpp
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NN.cpp
@@ -1,94 +1,75 @@
1#include "bluetoothBNEP_NN.h" 1#include "bluetoothBNEP_NN.h"
2#include "bluetoothBNEP_NNI.h" 2#include "bluetoothBNEP_NNI.h"
3#include "bluetoothRFCOMM_NNI.h" 3#include "bluetoothRFCOMM_NNI.h"
4 4
5#ifndef MYPLUGIN
6
7#include "netnodeinterface.h" 5#include "netnodeinterface.h"
8 6
9#endif
10
11// 7//
12// 8//
13// BLUETOOTH PAN/NAP node 9// BLUETOOTH PAN/NAP node
14// 10//
15// 11//
16 12
17static const char * BluetoothBNEPNeeds[] = 13static const char * BluetoothBNEPNeeds[] =
18 { 0 14 { 0
19 }; 15 };
20 16
21static const char * BluetoothBNEPProvides[] = 17static const char * BluetoothBNEPProvides[] =
22 { "device", 18 { "device",
23 0 19 0
24 }; 20 };
25 21
26/** 22/**
27 * Constructor, find all of the possible interfaces 23 * Constructor, find all of the possible interfaces
28 */ 24 */
29BluetoothBNEPNetNode::BluetoothBNEPNetNode() : 25BluetoothBNEPNetNode::BluetoothBNEPNetNode() :
30 ANetNode(tr("Bluetooth PAN/NAP")) { 26 ANetNode(tr("Bluetooth PAN/NAP")) {
31 InstanceCount = 7; // default 27 InstanceCount = 7; // default
32} 28}
33 29
34/** 30/**
35 * Delete any interfaces that we own. 31 * Delete any interfaces that we own.
36 */ 32 */
37BluetoothBNEPNetNode::~BluetoothBNEPNetNode(){ 33BluetoothBNEPNetNode::~BluetoothBNEPNetNode(){
38} 34}
39 35
40const QString BluetoothBNEPNetNode::nodeDescription(){ 36const QString BluetoothBNEPNetNode::nodeDescription(){
41 return tr("\ 37 return tr("\
42<p>Sets up a bluetooth link using the bluetooth Network profile.</p>\ 38<p>Sets up a bluetooth link using the bluetooth Network profile.</p>\
43<p>Use this to connect two computing devices.</p>\ 39<p>Use this to connect two computing devices.</p>\
44" 40"
45); 41);
46} 42}
47 43
48ANetNodeInstance * BluetoothBNEPNetNode::createInstance( void ) { 44ANetNodeInstance * BluetoothBNEPNetNode::createInstance( void ) {
49 return new ABluetoothBNEP( this ); 45 return new ABluetoothBNEP( this );
50} 46}
51 47
52const char ** BluetoothBNEPNetNode::needs( void ) { 48const char ** BluetoothBNEPNetNode::needs( void ) {
53 return BluetoothBNEPNeeds; 49 return BluetoothBNEPNeeds;
54} 50}
55 51
56const char ** BluetoothBNEPNetNode::provides( void ) { 52const char ** BluetoothBNEPNetNode::provides( void ) {
57 return BluetoothBNEPProvides; 53 return BluetoothBNEPProvides;
58} 54}
59 55
60QString BluetoothBNEPNetNode::genNic( long nr ) { 56QString BluetoothBNEPNetNode::genNic( long nr ) {
61 QString S; 57 QString S;
62 return S.sprintf( "bnep%ld", nr ); 58 return S.sprintf( "bnep%ld", nr );
63} 59}
64 60
65 61
66void BluetoothBNEPNetNode::setSpecificAttribute( QString & A, QString & V ) { 62void BluetoothBNEPNetNode::setSpecificAttribute( QString & A, QString & V ) {
67 if( A == "interfacecount" ) { 63 if( A == "interfacecount" ) {
68 InstanceCount = V.toLong(); 64 InstanceCount = V.toLong();
69 } 65 }
70} 66}
71 67
72void BluetoothBNEPNetNode::saveSpecificAttribute( QTextStream & TS) { 68void BluetoothBNEPNetNode::saveSpecificAttribute( QTextStream & TS) {
73 TS << "interfacecount=" 69 TS << "interfacecount="
74 << InstanceCount 70 << InstanceCount
75 << endl; 71 << endl;
76} 72}
77 73
78#ifndef MYPLUGIN
79
80extern "C" {
81// create plugin registers both BT functions
82void create_plugin( QList<ANetNode> & PNN ) {
83 PNN.append( new BluetoothBNEPNetNode() );
84 PNN.append( new BluetoothRFCOMMNetNode() );
85}
86
87#else
88
89typedef Opie::Core::MakeTypelist<BluetoothBNEPNetNode, BluetoothRFCOMMNetNode>::Result BluetoothTypes; 74typedef Opie::Core::MakeTypelist<BluetoothBNEPNetNode, BluetoothRFCOMMNetNode>::Result BluetoothTypes;
90OPIE_NS2_PLUGIN( NetNodeInterface<BluetoothTypes> ) 75OPIE_NS2_PLUGIN( NetNodeInterface_T<BluetoothTypes> )
91
92#endif
93
94}
diff --git a/noncore/settings/networksettings2/cable/cable_NN.cpp b/noncore/settings/networksettings2/cable/cable_NN.cpp
index 20299e4..58237a1 100644
--- a/noncore/settings/networksettings2/cable/cable_NN.cpp
+++ b/noncore/settings/networksettings2/cable/cable_NN.cpp
@@ -1,69 +1,52 @@
1#include "cable_NN.h" 1#include "cable_NN.h"
2#include "cable_NNI.h" 2#include "cable_NNI.h"
3 3
4#ifndef MYPLUGIN
5
6#include "netnodeinterface.h" 4#include "netnodeinterface.h"
7 5
8#endif
9
10static const char * CableNeeds[] = 6static const char * CableNeeds[] =
11 { 0 7 { 0
12 }; 8 };
13 9
14static const char * CableProvides[] = 10static const char * CableProvides[] =
15 { "line", 11 { "line",
16 0 12 0
17 }; 13 };
18 14
19/** 15/**
20 * Constructor, find all of the possible interfaces 16 * Constructor, find all of the possible interfaces
21 */ 17 */
22CableNetNode::CableNetNode() : ANetNode(tr("Cable Connection")) { 18CableNetNode::CableNetNode() : ANetNode(tr("Cable Connection")) {
23} 19}
24 20
25/** 21/**
26 * Delete any interfaces that we own. 22 * Delete any interfaces that we own.
27 */ 23 */
28CableNetNode::~CableNetNode(){ 24CableNetNode::~CableNetNode(){
29} 25}
30 26
31const QString CableNetNode::nodeDescription(){ 27const QString CableNetNode::nodeDescription(){
32 return tr("\ 28 return tr("\
33<p>Sets up a wired serial or parallel.</p>\ 29<p>Sets up a wired serial or parallel.</p>\
34" 30"
35); 31);
36} 32}
37 33
38ANetNodeInstance * CableNetNode::createInstance( void ) { 34ANetNodeInstance * CableNetNode::createInstance( void ) {
39 return new ACable( this ); 35 return new ACable( this );
40} 36}
41 37
42const char ** CableNetNode::needs( void ) { 38const char ** CableNetNode::needs( void ) {
43 return CableNeeds; 39 return CableNeeds;
44} 40}
45 41
46const char ** CableNetNode::provides( void ) { 42const char ** CableNetNode::provides( void ) {
47 return CableProvides; 43 return CableProvides;
48} 44}
49 45
50void CableNetNode::setSpecificAttribute( QString & , QString & ) { 46void CableNetNode::setSpecificAttribute( QString & , QString & ) {
51} 47}
52 48
53void CableNetNode::saveSpecificAttribute( QTextStream & ) { 49void CableNetNode::saveSpecificAttribute( QTextStream & ) {
54} 50}
55 51
56#ifdef MYPLUGIN 52OPIE_NS2_PLUGIN( NetNodeInterface_T<CableNetNode> )
57
58extern "C" {
59void create_plugin( QList<ANetNode> & PNN ) {
60 PNN.append( new CableNetNode() );
61}
62
63#else
64
65OPIE_NS2_PLUGIN( NetNodeInterface<CableNetNode> )
66
67#endif
68
69}
diff --git a/noncore/settings/networksettings2/editconnection.cpp b/noncore/settings/networksettings2/editconnection.cpp
index 3f8a53f..0c3ead6 100644
--- a/noncore/settings/networksettings2/editconnection.cpp
+++ b/noncore/settings/networksettings2/editconnection.cpp
@@ -276,101 +276,100 @@ void EditConnection::setConnection( NodeCollection * NC ) {
276 } 276 }
277} 277}
278 278
279// get result of editing (either new OR updated collection 279// get result of editing (either new OR updated collection
280NodeCollection * EditConnection::connection( void ) { 280NodeCollection * EditConnection::connection( void ) {
281 281
282 if( SelectedNodes == 0 ) { 282 if( SelectedNodes == 0 ) {
283 // new collection 283 // new collection
284 SelectedNodes = new NodeCollection; 284 SelectedNodes = new NodeCollection;
285 } 285 }
286 286
287 // clean out old entries 287 // clean out old entries
288 SelectedNodes->clear(); 288 SelectedNodes->clear();
289 289
290 // transfer 290 // transfer
291 for( QListIterator<ANetNodeInstance> it(TmpCollection); 291 for( QListIterator<ANetNodeInstance> it(TmpCollection);
292 it.current(); 292 it.current();
293 ++it ) { 293 ++it ) {
294 SelectedNodes->append( it.current() ); 294 SelectedNodes->append( it.current() );
295 } 295 }
296 296
297 if( TmpCollection.isModified() ) 297 if( TmpCollection.isModified() )
298 SelectedNodes->setModified( 1 ); 298 SelectedNodes->setModified( 1 );
299 299
300 if( SelectedNodes->name() != Name_LE->text() ) { 300 if( SelectedNodes->name() != Name_LE->text() ) {
301 SelectedNodes->setName( Name_LE->text() ); 301 SelectedNodes->setName( Name_LE->text() );
302 SelectedNodes->setModified( 1 ); 302 SelectedNodes->setModified( 1 );
303 } 303 }
304 304
305 return SelectedNodes; 305 return SelectedNodes;
306} 306}
307 307
308// Build device tree -> start 308// Build device tree -> start
309void EditConnection::buildFullTree( void ) { 309void EditConnection::buildFullTree( void ) {
310 ANetNode * NN; 310 ANetNode * NN;
311 311
312 // toplevel item 312 // toplevel item
313 MyQCheckListItem * TheTop = new MyQCheckListItem( 313 MyQCheckListItem * TheTop = new MyQCheckListItem(
314 Nodes_LV, 314 Nodes_LV,
315 NSResources->netNode2Name("fullsetup"), 315 NSResources->netNode2Name("fullsetup"),
316 QCheckListItem::Controller ); 316 QCheckListItem::Controller );
317 TheTop->setOpen( TRUE ); 317 TheTop->setOpen( TRUE );
318 Description_LBL->setText( 318 Description_LBL->setText(
319 NSResources->netNode2Description( "fullsetup" ) ); 319 NSResources->netNode2Description( "fullsetup" ) );
320 Nodes_LV->setSelected( TheTop, TRUE ); 320 Nodes_LV->setSelected( TheTop, TRUE );
321 321
322 // find all Nodes that are toplevel nodes -> ie provide 322 // find all Nodes that are toplevel nodes -> ie provide
323 // TCP/IP Connection 323 // TCP/IP Connection
324 for( QDictIterator<NetNode_t> Iter(NSResources->netNodes()); 324 for( QDictIterator<ANetNode> Iter(NSResources->netNodes());
325 Iter.current(); 325 Iter.current();
326 ++Iter ) { 326 ++Iter ) {
327 327 NN = Iter.current();
328 NN = Iter.current()->NetNode;
329 328
330 if( ! NN->isToplevel() ) { 329 if( ! NN->isToplevel() ) {
331 continue; 330 continue;
332 } 331 }
333 332
334 MyQCheckListItem * it = new MyQCheckListItem( TheTop, 333 MyQCheckListItem * it = new MyQCheckListItem( TheTop,
335 NN->name(), 334 NN->name(),
336 QCheckListItem::RadioButton ); 335 QCheckListItem::RadioButton );
337 it->setPixmap( 0, 336 it->setPixmap( 0,
338 NSResources->getPixmap( NN->pixmapName() ) 337 NSResources->getPixmap( NN->pixmapName() )
339 ); 338 );
340 // remember that this node maps to this listitem 339 // remember that this node maps to this listitem
341 Mapping->insert( it, NN ); 340 Mapping->insert( it, NN );
342 buildSubTree( it, NN ); 341 buildSubTree( it, NN );
343 } 342 }
344} 343}
345 344
346// Build device tree -> help function 345// Build device tree -> help function
347void EditConnection::buildSubTree( QListViewItem * it, ANetNode *NN ) { 346void EditConnection::buildSubTree( QListViewItem * it, ANetNode *NN ) {
348 ANetNode::NetNodeList & NNL = NN->alternatives(); 347 ANetNode::NetNodeList & NNL = NN->alternatives();
349 348
350 if( NNL.size() > 1 ) { 349 if( NNL.size() > 1 ) {
351 // this node has alternatives -> needs radio buttons 350 // this node has alternatives -> needs radio buttons
352 it = new MyQCheckListItem( 351 it = new MyQCheckListItem(
353 it, 352 it,
354 NSResources->netNode2Name(NN->needs()[0]), 353 NSResources->netNode2Name(NN->needs()[0]),
355 QCheckListItem::Controller ); 354 QCheckListItem::Controller );
356 it->setSelectable( FALSE ); 355 it->setSelectable( FALSE );
357 } 356 }
358 357
359 for ( unsigned int i=0; i < NNL.size(); i++ ) { 358 for ( unsigned int i=0; i < NNL.size(); i++ ) {
360 QListViewItem * CI; 359 QListViewItem * CI;
361 if( NNL.size() > 1 ) { 360 if( NNL.size() > 1 ) {
362 // generate radio buttons 361 // generate radio buttons
363 CI = new MyQCheckListItem( 362 CI = new MyQCheckListItem(
364 (QCheckListItem *)it, 363 (QCheckListItem *)it,
365 NNL[i]->name(), QCheckListItem::RadioButton ); 364 NNL[i]->name(), QCheckListItem::RadioButton );
366 // remember that this node maps to this listitem 365 // remember that this node maps to this listitem
367 CI->setPixmap( 0, NSResources->getPixmap( NNL[i]->pixmapName() ) ); 366 CI->setPixmap( 0, NSResources->getPixmap( NNL[i]->pixmapName() ) );
368 Mapping->insert( CI, NNL[i] ); 367 Mapping->insert( CI, NNL[i] );
369 CI->setSelectable( FALSE ); 368 CI->setSelectable( FALSE );
370 } else { 369 } else {
371 // Single item 370 // Single item
372 CI = new MyQListViewItem( it, NNL[i]->name() ); 371 CI = new MyQListViewItem( it, NNL[i]->name() );
373 // remember that this node maps to this listitem 372 // remember that this node maps to this listitem
374 Mapping->insert( CI, NNL[i] ); 373 Mapping->insert( CI, NNL[i] );
375 CI->setSelectable( FALSE ); 374 CI->setSelectable( FALSE );
376 CI->setPixmap( 0, NSResources->getPixmap( NNL[i]->pixmapName() ) ); 375 CI->setPixmap( 0, NSResources->getPixmap( NNL[i]->pixmapName() ) );
diff --git a/noncore/settings/networksettings2/gprs/GPRS_NN.cpp b/noncore/settings/networksettings2/gprs/GPRS_NN.cpp
index 4415739..e9553a6 100644
--- a/noncore/settings/networksettings2/gprs/GPRS_NN.cpp
+++ b/noncore/settings/networksettings2/gprs/GPRS_NN.cpp
@@ -1,95 +1,78 @@
1#include <resources.h> 1#include <resources.h>
2#include <qpe/qpeapplication.h> 2#include <qpe/qpeapplication.h>
3#include <netnode.h> 3#include <netnode.h>
4#include "GPRS_NN.h" 4#include "GPRS_NN.h"
5#include "GPRS_NNI.h" 5#include "GPRS_NNI.h"
6 6
7#ifndef MYPLUGIN
8
9#include "netnodeinterface.h" 7#include "netnodeinterface.h"
10 8
11#endif
12
13static const char * GPRSNeeds[] = 9static const char * GPRSNeeds[] =
14 { "GPRS", 10 { "GPRS",
15 0 11 0
16 }; 12 };
17 13
18static const char * GPRSProvides[] = 14static const char * GPRSProvides[] =
19 { "connection", 15 { "connection",
20 0 16 0
21 }; 17 };
22 18
23/** 19/**
24 * Constructor, find all of the possible interfaces 20 * Constructor, find all of the possible interfaces
25 */ 21 */
26GPRSNetNode::GPRSNetNode() : ANetNode(tr("GPRS capable device")) { 22GPRSNetNode::GPRSNetNode() : ANetNode(tr("GPRS capable device")) {
27 NSResources->addSystemFile( 23 NSResources->addSystemFile(
28 "pap-secrets", "/etc/ppp/pap-secrets", 0 ); 24 "pap-secrets", "/etc/ppp/pap-secrets", 0 );
29} 25}
30 26
31/** 27/**
32 * Delete any interfaces that we own. 28 * Delete any interfaces that we own.
33 */ 29 */
34GPRSNetNode::~GPRSNetNode(){ 30GPRSNetNode::~GPRSNetNode(){
35} 31}
36 32
37const QString GPRSNetNode::nodeDescription(){ 33const QString GPRSNetNode::nodeDescription(){
38 return tr("\ 34 return tr("\
39<p>provides access to a GPRS capable device.</p>\ 35<p>provides access to a GPRS capable device.</p>\
40" 36"
41); 37);
42} 38}
43 39
44ANetNodeInstance * GPRSNetNode::createInstance( void ) { 40ANetNodeInstance * GPRSNetNode::createInstance( void ) {
45 return new AGPRSDevice( this ); 41 return new AGPRSDevice( this );
46} 42}
47 43
48bool GPRSNetNode::hasDataForFile( SystemFile & S ) { 44bool GPRSNetNode::hasDataForFile( SystemFile & S ) {
49 return S.name() == "pap-secrets"; 45 return S.name() == "pap-secrets";
50} 46}
51 47
52short GPRSNetNode::generateFile( SystemFile & , 48short GPRSNetNode::generateFile( SystemFile & ,
53 ANetNodeInstance * , 49 ANetNodeInstance * ,
54 long ) { 50 long ) {
55 51
56 return 0; 52 return 0;
57} 53}
58 54
59const char ** GPRSNetNode::needs( void ) { 55const char ** GPRSNetNode::needs( void ) {
60 return GPRSNeeds; 56 return GPRSNeeds;
61} 57}
62 58
63const char ** GPRSNetNode::provides( void ) { 59const char ** GPRSNetNode::provides( void ) {
64 return GPRSProvides; 60 return GPRSProvides;
65} 61}
66 62
67void GPRSNetNode::setSpecificAttribute( QString & , QString & ) { 63void GPRSNetNode::setSpecificAttribute( QString & , QString & ) {
68} 64}
69 65
70void GPRSNetNode::saveSpecificAttribute( QTextStream & ) { 66void GPRSNetNode::saveSpecificAttribute( QTextStream & ) {
71} 67}
72 68
73QStringList GPRSNetNode::properFiles( void ) { 69QStringList GPRSNetNode::properFiles( void ) {
74 QStringList SL; 70 QStringList SL;
75 71
76 SL << "peers"; 72 SL << "peers";
77 SL << "chatscripts"; 73 SL << "chatscripts";
78 SL << "extra"; 74 SL << "extra";
79 return SL; 75 return SL;
80} 76}
81 77
82#ifdef MYPLUGIN 78OPIE_NS2_PLUGIN( NetNodeInterface_T<GPRSNetNode> )
83
84extern "C" {
85void create_plugin( QList<ANetNode> & PNN ) {
86 PNN.append( new GPRSNetNode() );
87}
88
89#else
90
91OPIE_NS2_PLUGIN( NetNodeInterface<GPRSNetNode> )
92
93#endif
94
95}
diff --git a/noncore/settings/networksettings2/irda/irda_NN.cpp b/noncore/settings/networksettings2/irda/irda_NN.cpp
index 6858157..a1ed686 100644
--- a/noncore/settings/networksettings2/irda/irda_NN.cpp
+++ b/noncore/settings/networksettings2/irda/irda_NN.cpp
@@ -1,69 +1,52 @@
1#include "irda_NN.h" 1#include "irda_NN.h"
2#include "irda_NNI.h" 2#include "irda_NNI.h"
3 3
4#ifndef MYPLUGIN
5
6#include "netnodeinterface.h" 4#include "netnodeinterface.h"
7 5
8#endif
9
10static const char * IRDANeeds[] = 6static const char * IRDANeeds[] =
11 { 0 7 { 0
12 }; 8 };
13 9
14static const char * IRDAProvides[] = 10static const char * IRDAProvides[] =
15 { "line", 11 { "line",
16 0 12 0
17 }; 13 };
18 14
19/** 15/**
20 * Constructor, find all of the possible interfaces 16 * Constructor, find all of the possible interfaces
21 */ 17 */
22IRDANetNode::IRDANetNode() : ANetNode(tr("Infrared link")) { 18IRDANetNode::IRDANetNode() : ANetNode(tr("Infrared link")) {
23} 19}
24 20
25/** 21/**
26 * Delete any interfaces that we own. 22 * Delete any interfaces that we own.
27 */ 23 */
28IRDANetNode::~IRDANetNode(){ 24IRDANetNode::~IRDANetNode(){
29} 25}
30 26
31const QString IRDANetNode::nodeDescription(){ 27const QString IRDANetNode::nodeDescription(){
32 return tr("\ 28 return tr("\
33<p>Sets up a infra red serial link.</p>\ 29<p>Sets up a infra red serial link.</p>\
34" 30"
35); 31);
36} 32}
37 33
38ANetNodeInstance * IRDANetNode::createInstance( void ) { 34ANetNodeInstance * IRDANetNode::createInstance( void ) {
39 return new AIRDA( this ); 35 return new AIRDA( this );
40} 36}
41 37
42const char ** IRDANetNode::needs( void ) { 38const char ** IRDANetNode::needs( void ) {
43 return IRDANeeds; 39 return IRDANeeds;
44} 40}
45 41
46const char ** IRDANetNode::provides( void ) { 42const char ** IRDANetNode::provides( void ) {
47 return IRDAProvides; 43 return IRDAProvides;
48} 44}
49 45
50void IRDANetNode::setSpecificAttribute( QString & , QString & ) { 46void IRDANetNode::setSpecificAttribute( QString & , QString & ) {
51} 47}
52 48
53void IRDANetNode::saveSpecificAttribute( QTextStream & ) { 49void IRDANetNode::saveSpecificAttribute( QTextStream & ) {
54} 50}
55 51
56#ifdef MYPLUGIN 52OPIE_NS2_PLUGIN( NetNodeInterface_T<IRDANetNode> )
57
58extern "C" {
59void create_plugin( QList<ANetNode> & PNN ) {
60 PNN.append( new IRDANetNode() );
61}
62
63#else
64
65OPIE_NS2_PLUGIN( NetNodeInterface<IRDANetNode> )
66
67#endif
68
69}
diff --git a/noncore/settings/networksettings2/lancard/lancard_NN.cpp b/noncore/settings/networksettings2/lancard/lancard_NN.cpp
index fce3d29..520516c 100644
--- a/noncore/settings/networksettings2/lancard/lancard_NN.cpp
+++ b/noncore/settings/networksettings2/lancard/lancard_NN.cpp
@@ -1,92 +1,75 @@
1#include "lancard_NN.h" 1#include "lancard_NN.h"
2#include "lancard_NNI.h" 2#include "lancard_NNI.h"
3 3
4#ifndef MYPLUGIN
5
6#include "netnodeinterface.h" 4#include "netnodeinterface.h"
7 5
8#endif
9
10static const char * LanCardNeeds[] = 6static const char * LanCardNeeds[] =
11 { 0 7 { 0
12 }; 8 };
13 9
14static const char * LanCardProvides[] = 10static const char * LanCardProvides[] =
15 { "device", 11 { "device",
16 0 12 0
17 }; 13 };
18 14
19/** 15/**
20 * Constructor, find all of the possible interfaces 16 * Constructor, find all of the possible interfaces
21 */ 17 */
22LanCardNetNode::LanCardNetNode() : ANetNode(tr("LAN card")), NICMACAddresses() { 18LanCardNetNode::LanCardNetNode() : ANetNode(tr("LAN card")), NICMACAddresses() {
23 InstanceCount = 2; 19 InstanceCount = 2;
24} 20}
25 21
26/** 22/**
27 * Delete any interfaces that we own. 23 * Delete any interfaces that we own.
28 */ 24 */
29LanCardNetNode::~LanCardNetNode(){ 25LanCardNetNode::~LanCardNetNode(){
30} 26}
31 27
32const QString LanCardNetNode::nodeDescription(){ 28const QString LanCardNetNode::nodeDescription(){
33 return tr("\ 29 return tr("\
34<p>Sets up a wired regular LAN card.</p>\ 30<p>Sets up a wired regular LAN card.</p>\
35<p>Use this to set up 10/100/1000 MBit LAN cards.</p>\ 31<p>Use this to set up 10/100/1000 MBit LAN cards.</p>\
36" 32"
37); 33);
38} 34}
39 35
40ANetNodeInstance * LanCardNetNode::createInstance( void ) { 36ANetNodeInstance * LanCardNetNode::createInstance( void ) {
41 return new ALanCard( this ); 37 return new ALanCard( this );
42} 38}
43 39
44 40
45const char ** LanCardNetNode::needs( void ) { 41const char ** LanCardNetNode::needs( void ) {
46 return LanCardNeeds; 42 return LanCardNeeds;
47} 43}
48 44
49const char ** LanCardNetNode::provides( void ) { 45const char ** LanCardNetNode::provides( void ) {
50 return LanCardProvides; 46 return LanCardProvides;
51} 47}
52 48
53QString LanCardNetNode::genNic( long nr ) { 49QString LanCardNetNode::genNic( long nr ) {
54 QString S; 50 QString S;
55 return S.sprintf( "eth%ld", nr ); 51 return S.sprintf( "eth%ld", nr );
56} 52}
57 53
58void LanCardNetNode::setSpecificAttribute( QString & A, QString & V ) { 54void LanCardNetNode::setSpecificAttribute( QString & A, QString & V ) {
59 if( A == "interfacecount" ) { 55 if( A == "interfacecount" ) {
60 InstanceCount = V.toLong(); 56 InstanceCount = V.toLong();
61 } else if ( A == "macaddress" ) { 57 } else if ( A == "macaddress" ) {
62 NICMACAddresses.append( V ); 58 NICMACAddresses.append( V );
63 } 59 }
64} 60}
65 61
66void LanCardNetNode::saveSpecificAttribute( QTextStream & TS) { 62void LanCardNetNode::saveSpecificAttribute( QTextStream & TS) {
67 TS << "interfacecount=" 63 TS << "interfacecount="
68 << InstanceCount 64 << InstanceCount
69 << endl; 65 << endl;
70 for( QStringList::Iterator it = NICMACAddresses.begin(); 66 for( QStringList::Iterator it = NICMACAddresses.begin();
71 it != NICMACAddresses.end(); 67 it != NICMACAddresses.end();
72 ++it ) { 68 ++it ) {
73 TS << "macaddress=" 69 TS << "macaddress="
74 << (*it) 70 << (*it)
75 << endl; 71 << endl;
76 } 72 }
77} 73}
78 74
79#ifdef MYPLUGIN 75OPIE_NS2_PLUGIN( NetNodeInterface_T<LanCardNetNode> )
80
81extern "C" {
82void create_plugin( QList<ANetNode> & PNN ) {
83 PNN.append( new LanCardNetNode() );
84}
85
86#else
87
88OPIE_NS2_PLUGIN( NetNodeInterface<LanCardNetNode> )
89
90#endif
91
92}
diff --git a/noncore/settings/networksettings2/modem/modem_NN.cpp b/noncore/settings/networksettings2/modem/modem_NN.cpp
index c7f6e78..e91b45a 100644
--- a/noncore/settings/networksettings2/modem/modem_NN.cpp
+++ b/noncore/settings/networksettings2/modem/modem_NN.cpp
@@ -1,70 +1,53 @@
1#include "modem_NN.h" 1#include "modem_NN.h"
2#include "modem_NNI.h" 2#include "modem_NNI.h"
3 3
4#ifndef MYPLUGIN
5
6#include "netnodeinterface.h" 4#include "netnodeinterface.h"
7 5
8#endif
9
10static const char * ModemNeeds[] = 6static const char * ModemNeeds[] =
11 { "line", 7 { "line",
12 0 8 0
13 }; 9 };
14static const char * ModemProvides[] = 10static const char * ModemProvides[] =
15 { "modem", 11 { "modem",
16 0 12 0
17 }; 13 };
18 14
19/** 15/**
20 * Constructor, find all of the possible interfaces 16 * Constructor, find all of the possible interfaces
21 */ 17 */
22ModemNetNode::ModemNetNode() : ANetNode(tr("Dialup modem")) { 18ModemNetNode::ModemNetNode() : ANetNode(tr("Dialup modem")) {
23} 19}
24 20
25/** 21/**
26 * Delete any interfaces that we own. 22 * Delete any interfaces that we own.
27 */ 23 */
28ModemNetNode::~ModemNetNode(){ 24ModemNetNode::~ModemNetNode(){
29} 25}
30 26
31const QString ModemNetNode::nodeDescription(){ 27const QString ModemNetNode::nodeDescription(){
32 return tr("\ 28 return tr("\
33<p>Sets up a dialing procedures.</p>\ 29<p>Sets up a dialing procedures.</p>\
34<p>Use this to dial up over modems, ISDN, GSM, ...</p>\ 30<p>Use this to dial up over modems, ISDN, GSM, ...</p>\
35" 31"
36); 32);
37} 33}
38 34
39ANetNodeInstance * ModemNetNode::createInstance( void ) { 35ANetNodeInstance * ModemNetNode::createInstance( void ) {
40 return new AModem( this ); 36 return new AModem( this );
41} 37}
42 38
43const char ** ModemNetNode::needs( void ) { 39const char ** ModemNetNode::needs( void ) {
44 return ModemNeeds; 40 return ModemNeeds;
45} 41}
46 42
47const char ** ModemNetNode::provides( void ) { 43const char ** ModemNetNode::provides( void ) {
48 return ModemProvides; 44 return ModemProvides;
49} 45}
50 46
51void ModemNetNode::setSpecificAttribute( QString & , QString & ) { 47void ModemNetNode::setSpecificAttribute( QString & , QString & ) {
52} 48}
53 49
54void ModemNetNode::saveSpecificAttribute( QTextStream & ) { 50void ModemNetNode::saveSpecificAttribute( QTextStream & ) {
55} 51}
56 52
57#ifdef MYPLUGIN 53OPIE_NS2_PLUGIN( NetNodeInterface_T<ModemNetNode> )
58
59extern "C" {
60void create_plugin( QList<ANetNode> & PNN ) {
61 PNN.append( new ModemNetNode() );
62}
63
64#else
65
66OPIE_NS2_PLUGIN( NetNodeInterface<ModemNetNode> )
67
68#endif
69
70}
diff --git a/noncore/settings/networksettings2/network/network_NN.cpp b/noncore/settings/networksettings2/network/network_NN.cpp
index 82d0c29..2fa31bd 100644
--- a/noncore/settings/networksettings2/network/network_NN.cpp
+++ b/noncore/settings/networksettings2/network/network_NN.cpp
@@ -1,112 +1,95 @@
1#include <qpe/qpeapplication.h> 1#include <qpe/qpeapplication.h>
2#include <resources.h> 2#include <resources.h>
3#include <netnode.h> 3#include <netnode.h>
4#include "network_NN.h" 4#include "network_NN.h"
5#include "network_NNI.h" 5#include "network_NNI.h"
6 6
7#ifndef MYPLUGIN
8
9#include "netnodeinterface.h" 7#include "netnodeinterface.h"
10 8
11#endif
12
13static const char * NetworkNeeds[] = 9static const char * NetworkNeeds[] =
14 { "device", 10 { "device",
15 0 11 0
16 }; 12 };
17 13
18static const char * NetworkProvides[] = 14static const char * NetworkProvides[] =
19 { "connection", 15 { "connection",
20 0 16 0
21 }; 17 };
22 18
23/** 19/**
24 * Constructor, find all of the possible interfaces 20 * Constructor, find all of the possible interfaces
25 */ 21 */
26NetworkNetNode::NetworkNetNode() : ANetNode(tr("IP Configuration")) { 22NetworkNetNode::NetworkNetNode() : ANetNode(tr("IP Configuration")) {
27 23
28 NSResources->addSystemFile( 24 NSResources->addSystemFile(
29 "interfaces", "/etc/network/interfaces", 1 ); 25 "interfaces", "/etc/network/interfaces", 1 );
30} 26}
31 27
32/** 28/**
33 * Delete any interfaces that we own. 29 * Delete any interfaces that we own.
34 */ 30 */
35NetworkNetNode::~NetworkNetNode(){ 31NetworkNetNode::~NetworkNetNode(){
36} 32}
37 33
38const QString NetworkNetNode::nodeDescription(){ 34const QString NetworkNetNode::nodeDescription(){
39 return tr("\ 35 return tr("\
40<p>Sets up TCP/IP options.</p>\ 36<p>Sets up TCP/IP options.</p>\
41<p>Use this to configure the TCP/IP protocol</p>\ 37<p>Use this to configure the TCP/IP protocol</p>\
42" 38"
43); 39);
44} 40}
45 41
46ANetNodeInstance * NetworkNetNode::createInstance( void ) { 42ANetNodeInstance * NetworkNetNode::createInstance( void ) {
47 return new ANetwork( this ); 43 return new ANetwork( this );
48} 44}
49 45
50bool NetworkNetNode::hasDataForFile( SystemFile & S ) { 46bool NetworkNetNode::hasDataForFile( SystemFile & S ) {
51 return S.name() == "interfaces"; 47 return S.name() == "interfaces";
52} 48}
53 49
54short NetworkNetNode::generateFile( SystemFile & SF, 50short NetworkNetNode::generateFile( SystemFile & SF,
55 ANetNodeInstance * NNI, 51 ANetNodeInstance * NNI,
56 long DevNr ) { 52 long DevNr ) {
57 53
58 if( DevNr < 0 ) { 54 if( DevNr < 0 ) {
59 // generate device specific but common part 55 // generate device specific but common part
60 return 1; 56 return 1;
61 } 57 }
62 58
63 QString NIC = NNI->runtime()->device()->netNode()->nodeClass()->genNic( DevNr ); 59 QString NIC = NNI->runtime()->device()->netNode()->nodeClass()->genNic( DevNr );
64 60
65 if( SF.name() == "interfaces" ) { 61 if( SF.name() == "interfaces" ) {
66 Log(("Generate entry for %s in %s\n", NIC.latin1(), SF.name().latin1() )); 62 Log(("Generate entry for %s in %s\n", NIC.latin1(), SF.name().latin1() ));
67 // generate mapping stanza for this interface 63 // generate mapping stanza for this interface
68 SF << "# check if " 64 SF << "# check if "
69 << NIC 65 << NIC
70 << " can be brought UP" 66 << " can be brought UP"
71 << endl; 67 << endl;
72 SF << "mapping " 68 SF << "mapping "
73 << NIC 69 << NIC
74 << endl; 70 << endl;
75 SF << " script " 71 SF << " script "
76 << QPEApplication::qpeDir() 72 << QPEApplication::qpeDir()
77 << "bin/networksettings2-request" 73 << "bin/networksettings2-request"
78 << endl 74 << endl
79 << endl; 75 << endl;
80 return 0; 76 return 0;
81 } 77 }
82 return 1; 78 return 1;
83} 79}
84 80
85const char ** NetworkNetNode::needs( void ) { 81const char ** NetworkNetNode::needs( void ) {
86 return NetworkNeeds; 82 return NetworkNeeds;
87} 83}
88 84
89const char ** NetworkNetNode::provides( void ) { 85const char ** NetworkNetNode::provides( void ) {
90 return NetworkProvides; 86 return NetworkProvides;
91} 87}
92 88
93void NetworkNetNode::setSpecificAttribute( QString & , QString & ) { 89void NetworkNetNode::setSpecificAttribute( QString & , QString & ) {
94} 90}
95 91
96void NetworkNetNode::saveSpecificAttribute( QTextStream & ) { 92void NetworkNetNode::saveSpecificAttribute( QTextStream & ) {
97} 93}
98 94
99#ifdef MYPLUGIN 95OPIE_NS2_PLUGIN( NetNodeInterface_T<NetworkNetNode> )
100
101extern "C" {
102void create_plugin( QList<ANetNode> & PNN ) {
103 PNN.append( new NetworkNetNode() );
104}
105
106#else
107
108OPIE_NS2_PLUGIN( NetNodeInterface<NetworkNetNode> )
109
110#endif
111
112}
diff --git a/noncore/settings/networksettings2/networksettings.cpp b/noncore/settings/networksettings2/networksettings.cpp
index dca6631..9680a96 100644
--- a/noncore/settings/networksettings2/networksettings.cpp
+++ b/noncore/settings/networksettings2/networksettings.cpp
@@ -192,108 +192,108 @@ void NetworkSettings::SLOT_DeleteNode( void ) {
192 tr( "Removing profile" ), 192 tr( "Removing profile" ),
193 tr( "Remove selected profile ?" ), 193 tr( "Remove selected profile ?" ),
194 1, 0 ) == 1 ) { 194 1, 0 ) == 1 ) {
195 NSResources->removeConnection( LBI->text() ); 195 NSResources->removeConnection( LBI->text() );
196 delete LBI; 196 delete LBI;
197 NSD.setModified( 1 ); 197 NSD.setModified( 1 );
198 } 198 }
199} 199}
200 200
201void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { 201void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) {
202 QString OldName = ""; 202 QString OldName = "";
203 203
204 EditConnection EC( this ); 204 EditConnection EC( this );
205 205
206 if( LBI ) { 206 if( LBI ) {
207 NodeCollection * NC = NSResources->findConnection( LBI->text() ); 207 NodeCollection * NC = NSResources->findConnection( LBI->text() );
208 if( ! NC ) { 208 if( ! NC ) {
209 return; 209 return;
210 } 210 }
211 OldName = NC->name(); 211 OldName = NC->name();
212 EC.setConnection( NC ); 212 EC.setConnection( NC );
213 } 213 }
214 214
215 EC.showMaximized(); 215 EC.showMaximized();
216 // disable refresh timer 216 // disable refresh timer
217 UpdateTimer->stop(); 217 UpdateTimer->stop();
218 218
219 // we need to retry 219 // we need to retry
220 while( 1 ) { 220 while( 1 ) {
221 if( EC.exec() == QDialog::Accepted ) { 221 if( EC.exec() == QDialog::Accepted ) {
222 // toplevel item -> store 222 // toplevel item -> store
223 NodeCollection * NC = EC.connection(); 223 NodeCollection * NC = EC.connection();
224 if( NC->isModified() ) { 224 if( NC->isModified() ) {
225 if( LBI ) { 225 if( LBI ) {
226 if( NC->name() != OldName ) { 226 if( NC->name() != OldName ) {
227 // find if new name is free 227 // find if new name is free
228 NodeCollection * LCN = NSResources->findConnection( 228 NodeCollection * LCN = NSResources->findConnection(
229 NC->name() ); 229 NC->name() );
230 if( LCN ) { 230 if( LCN ) {
231 QMessageBox::warning( 231 QMessageBox::warning(
232 0, 232 0,
233 tr( "In System Config" ), 233 tr( "In System Config" ),
234 tr( "Name %1 already exists" ).arg(NC->name()) 234 tr( "Name %1 already exists" ).arg(NC->name())
235 ); 235 );
236 continue; // restart exec 236 continue; // restart exec
237 } // else new name 237 } // else new name
238 // new name -> remove item 238 // new name -> remove item
239 NSResources->removeConnection( OldName ); 239 NSResources->removeConnection( OldName );
240 NSResources->addConnection( NC ); 240 NSResources->addConnection( NC, 0 );
241 } // else not changed 241 } // else not changed
242 242
243 // must add it here since change will trigger event 243 // must add it here since change will trigger event
244 Profiles_LB->changeItem( NC->devicePixmap(), 244 Profiles_LB->changeItem( NC->devicePixmap(),
245 NC->name(), 245 NC->name(),
246 Profiles_LB->index( LBI ) 246 Profiles_LB->index( LBI )
247 ); 247 );
248 } else { 248 } else {
249 // new item 249 // new item
250 int ci = Profiles_LB->count(); 250 int ci = Profiles_LB->count();
251 NSResources->addConnection( NC ); 251 NSResources->addConnection( NC, 0 );
252 NC->setNumber( NSResources->assignConnectionNumber() ); 252 NC->setNumber( NSResources->assignConnectionNumber() );
253 Profiles_LB->insertItem( NC->devicePixmap(), NC->name() ); 253 Profiles_LB->insertItem( NC->devicePixmap(), NC->name() );
254 Profiles_LB->setSelected( ci, TRUE ); 254 Profiles_LB->setSelected( ci, TRUE );
255 } 255 }
256 updateProfileState( LBI ); 256 updateProfileState( LBI );
257 } 257 }
258 } else { 258 } else {
259 // cancelled : reset connection 259 // cancelled : reset connection
260 if( LBI ) { 260 if( LBI ) {
261 NodeCollection * NC = NSResources->findConnection( LBI->text() ); 261 NodeCollection * NC = NSResources->findConnection( LBI->text() );
262 NC->reassign(); 262 NC->reassign();
263 } 263 }
264 } 264 }
265 break; 265 break;
266 } 266 }
267 // reenable 267 // reenable
268 UpdateTimer->start( 5000 ); 268 UpdateTimer->start( 5000 );
269} 269}
270 270
271void NetworkSettings::SLOT_ShowNode( QListBoxItem * LBI ) { 271void NetworkSettings::SLOT_ShowNode( QListBoxItem * LBI ) {
272 if( LBI == 0 ) 272 if( LBI == 0 )
273 return; 273 return;
274 274
275 NodeCollection * NC = NSResources->findConnection( LBI->text() ); 275 NodeCollection * NC = NSResources->findConnection( LBI->text() );
276 276
277 if( NC->description().isEmpty() ) { 277 if( NC->description().isEmpty() ) {
278 Description_LBL->setText( tr( "<<No description>>" ) ); 278 Description_LBL->setText( tr( "<<No description>>" ) );
279 } else { 279 } else {
280 Description_LBL->setText( NC->description() ); 280 Description_LBL->setText( NC->description() );
281 } 281 }
282 282
283 Profile_GB->setTitle( LBI->text() + " : " + NC->stateName() ); 283 Profile_GB->setTitle( LBI->text() + " : " + NC->stateName() );
284 284
285 bool FrmActive = 1; 285 bool FrmActive = 1;
286 bool IsEnabled = 1; 286 bool IsEnabled = 1;
287 int leds = 0; 287 int leds = 0;
288 288
289 owarn << "State " << NC->state() << oendl; 289 owarn << "State " << NC->state() << oendl;
290 switch( NC->state() ) { 290 switch( NC->state() ) {
291 case Disabled : // no further work 291 case Disabled : // no further work
292 IsEnabled = 0; 292 IsEnabled = 0;
293 FrmActive = 0; 293 FrmActive = 0;
294 owarn << "LEds " << leds << oendl; 294 owarn << "LEds " << leds << oendl;
295 break; 295 break;
296 case Unknown : 296 case Unknown :
297 case Unchecked : 297 case Unchecked :
298 case Unavailable : 298 case Unavailable :
299 FrmActive = 0; 299 FrmActive = 0;
diff --git a/noncore/settings/networksettings2/networksettings2/netnode.cpp b/noncore/settings/networksettings2/networksettings2/netnode.cpp
index f8f2d1e..f00e0b3 100644
--- a/noncore/settings/networksettings2/networksettings2/netnode.cpp
+++ b/noncore/settings/networksettings2/networksettings2/netnode.cpp
@@ -96,200 +96,207 @@ bool ANetNode::openFile( SystemFile & SF,
96// 96//
97// 97//
98// ANETNODEINSTANCE 98// ANETNODEINSTANCE
99// 99//
100// 100//
101 101
102long ANetNodeInstance::InstanceCounter = -1; 102long ANetNodeInstance::InstanceCounter = -1;
103 103
104void ANetNodeInstance::initialize( void ) { 104void ANetNodeInstance::initialize( void ) {
105 if( InstanceCounter == -1 ) 105 if( InstanceCounter == -1 )
106 InstanceCounter = time(0); 106 InstanceCounter = time(0);
107 // set name 107 // set name
108 QString N; 108 QString N;
109 N.sprintf( "-%ld", InstanceCounter++ ); 109 N.sprintf( "-%ld", InstanceCounter++ );
110 N.prepend( NodeType->name() ); 110 N.prepend( NodeType->name() );
111 setName( N.latin1() ); 111 setName( N.latin1() );
112} 112}
113 113
114void ANetNodeInstance::setAttribute( QString & Attr, QString & Value ){ 114void ANetNodeInstance::setAttribute( QString & Attr, QString & Value ){
115 if( Attr == "__name" ) { 115 if( Attr == "__name" ) {
116 setName( Value.latin1() ); 116 setName( Value.latin1() );
117 } else { 117 } else {
118 setSpecificAttribute( Attr, Value ); 118 setSpecificAttribute( Attr, Value );
119 } 119 }
120} 120}
121 121
122void ANetNodeInstance::saveAttributes( QTextStream & TS ) { 122void ANetNodeInstance::saveAttributes( QTextStream & TS ) {
123 TS << "__name=" << name() << endl; 123 TS << "__name=" << name() << endl;
124 saveSpecificAttribute( TS ); 124 saveSpecificAttribute( TS );
125} 125}
126 126
127ANetNodeInstance * ANetNodeInstance::nextNode( void ) { 127ANetNodeInstance * ANetNodeInstance::nextNode( void ) {
128 return connection()->findNext( this ); 128 return connection()->findNext( this );
129} 129}
130 130
131// 131//
132// 132//
133// NODECOLLECTION 133// NODECOLLECTION
134// 134//
135// 135//
136 136
137NodeCollection::NodeCollection( void ) : QList<ANetNodeInstance>() { 137NodeCollection::NodeCollection( void ) : QList<ANetNodeInstance>() {
138 IsModified = 0; 138 IsModified = 0;
139 Index = -1; 139 Index = -1;
140 Name=""; 140 Name="";
141 IsNew = 1; 141 IsNew = 1;
142 CurrentState = Unchecked; 142 CurrentState = Unchecked;
143 AssignedInterface = 0; 143 AssignedInterface = 0;
144 Number = -1;
145 Done = 0;
144} 146}
145 147
146NodeCollection::NodeCollection( QTextStream & TS ) : 148NodeCollection::NodeCollection( QTextStream & TS, bool & Dangling ) :
147 QList<ANetNodeInstance>() { 149 QList<ANetNodeInstance>() {
148 long idx; 150 long idx;
149 bool InError = 0;
150 QString S, A, N; 151 QString S, A, N;
152
153 Number = -1;
154 Done = 0;
151 IsModified = 0; 155 IsModified = 0;
152 Index = -1; 156 Index = -1;
153 Name=""; 157 Name="";
154 IsNew = 0; 158 IsNew = 0;
155 AssignedInterface = 0; 159 AssignedInterface = 0;
156 CurrentState = Unchecked; 160 CurrentState = Unchecked;
157 161
162 Dangling = 0; // by default node collection is ok
163
158 do { 164 do {
159 S = TS.readLine(); 165 S = TS.readLine();
160 if( S.isEmpty() ) { 166 if( S.isEmpty() ) {
161 if( InError ) {
162 // remove all nodes
163 clear();
164 }
165 // empty line 167 // empty line
166 break; 168 break;
167 } 169 }
168 170
169 idx = S.find('='); 171 idx = S.find('=');
170 S.stripWhiteSpace(); 172 S.stripWhiteSpace();
171 A = S.left( idx ); 173 A = S.left( idx );
172 A.lower(); 174 A.lower();
173 N = S.mid( idx+1, S.length() ); 175 N = S.mid( idx+1, S.length() );
174 N.stripWhiteSpace(); 176 N.stripWhiteSpace();
175 N = deQuote( N ); 177 N = deQuote( N );
176 178
177 if( A == "name" ) { 179 if( A == "name" ) {
178 Name = N; 180 Name = N;
179 } else if( A == "number" ) { 181 } else if( A == "number" ) {
180 setNumber( N.toLong() ); 182 setNumber( N.toLong() );
181 } else if( A == "node" ) { 183 } else if( A == "node" ) {
182 ANetNodeInstance * NNI = NSResources->findNodeInstance( N ); 184 ANetNodeInstance * NNI = NSResources->findNodeInstance( N );
183 Log(( "Find node %s : %p\n", N.latin1(), NNI )); 185 Log(( "Find node %s : %p\n", N.latin1(), NNI ));
184 if( NNI && ! InError ) { 186 if( NNI ) {
185 append( NNI ); 187 append( NNI );
186 } else { 188 } else {
187 // could not find a node type -> collection invalid 189 // could not find a node type -> collection invalid
188 InError = 1; 190 Log(( "Node %s missing -> connection dangling\n",
191 N.latin1() ));
192 // create placeholder for this dangling NNI
193 NNI = new ErrorNNI( N );
194 Dangling = 1;
189 } 195 }
190 } 196 }
191 } while( 1 ); 197 } while( 1 );
192 198
193 Log(( "Profile number %s : %d nodes\n", 199 Log(( "Profile number %s : %d nodes\n",
194 Name.latin1(), count() )); 200 Name.latin1(), count() ));
195} 201}
196 202
197
198NodeCollection::~NodeCollection( void ) { 203NodeCollection::~NodeCollection( void ) {
199} 204}
200 205
201const QString & NodeCollection::description( void ) { 206const QString & NodeCollection::description( void ) {
202 ANetNodeInstance * NNI = getToplevel(); 207 ANetNodeInstance * NNI = getToplevel();
203 return (NNI) ? NNI->runtime()->description() : Name; 208 return (NNI) ? NNI->runtime()->description() : Name;
204} 209}
205 210
206void NodeCollection::append( ANetNodeInstance * NNI ) { 211void NodeCollection::append( ANetNodeInstance * NNI ) {
207 NNI->setConnection( this ); 212 NNI->setConnection( this );
208 QList<ANetNodeInstance>::append( NNI ); 213 QList<ANetNodeInstance>::append( NNI );
209} 214}
210 215
211void NodeCollection::save( QTextStream & TS ) { 216void NodeCollection::save( QTextStream & TS ) {
212 217
213 TS << "name=" << quote( Name ) << endl; 218 TS << "name=" << quote( Name ) << endl;
214 TS << "number=" << number() << endl; 219 TS << "number=" << number() << endl;
215 ANetNodeInstance * NNI; 220 ANetNodeInstance * NNI;
216 for( QListIterator<ANetNodeInstance> it(*this); 221 for( QListIterator<ANetNodeInstance> it(*this);
217 it.current(); 222 it.current();
218 ++it ) { 223 ++it ) {
219 NNI = it.current(); 224 NNI = it.current();
220 TS << "node=" << NNI->name() << endl; 225 TS << "node=" << NNI->name() << endl;
221 } 226 }
222 TS << endl; 227 TS << endl;
223 IsNew = 0; 228 IsNew = 0;
224} 229}
225 230
226ANetNodeInstance * NodeCollection::getToplevel( void ) { 231ANetNodeInstance * NodeCollection::getToplevel( void ) {
227 ANetNodeInstance * NNI = 0; 232 ANetNodeInstance * NNI = 0;
228 for( QListIterator<ANetNodeInstance> it(*this); 233 for( QListIterator<ANetNodeInstance> it(*this);
229 it.current(); 234 it.current();
230 ++it ) { 235 ++it ) {
231 NNI = it.current(); 236 NNI = it.current();
232 if( NNI->nodeClass()->isToplevel() ) 237 if( NNI->nodeClass()->isToplevel() ) {
233 break; 238 return NNI;
239 }
234 } 240 }
235 return NNI; 241 return 0;
236} 242}
237 243
238ANetNodeInstance * NodeCollection::findByName( const QString & S ) { 244ANetNodeInstance * NodeCollection::findByName( const QString & S ) {
239 ANetNodeInstance * NNI = 0; 245 ANetNodeInstance * NNI = 0;
240 for( QListIterator<ANetNodeInstance> it(*this); 246 for( QListIterator<ANetNodeInstance> it(*this);
241 it.current(); 247 it.current();
242 ++it ) { 248 ++it ) {
243 NNI = it.current(); 249 NNI = it.current();
244 if( NNI->name() == S ) 250 if( NNI->name() == S ) {
245 break; 251 return NNI;
252 }
246 } 253 }
247 return NNI; 254 return 0;
248} 255}
249 256
250ANetNodeInstance * NodeCollection::findNext( ANetNodeInstance * NNI ) { 257ANetNodeInstance * NodeCollection::findNext( ANetNodeInstance * NNI ) {
251 ANetNodeInstance * NNNI; 258 ANetNodeInstance * NNNI;
252 259
253 if( ! NNI ) 260 if( ! NNI )
254 getToplevel(); 261 getToplevel();
255 262
256 for( QListIterator<ANetNodeInstance> it(*this); 263 for( QListIterator<ANetNodeInstance> it(*this);
257 it.current(); 264 it.current();
258 ++it ) { 265 ++it ) {
259 NNNI = it.current(); 266 NNNI = it.current();
260 if( NNNI == NNI ) { 267 if( NNNI == NNI ) {
261 ++it; 268 ++it;
262 return it.current(); 269 return it.current();
263 } 270 }
264 } 271 }
265 return 0; // no more next 272 return 0; // no more next
266} 273}
267 274
268int NodeCollection::compareItems( QCollection::Item I1, 275int NodeCollection::compareItems( QCollection::Item I1,
269 QCollection::Item I2 ) { 276 QCollection::Item I2 ) {
270 ANetNodeInstance * NNI1, * NNI2; 277 ANetNodeInstance * NNI1, * NNI2;
271 NNI1 = (ANetNodeInstance *)I1; 278 NNI1 = (ANetNodeInstance *)I1;
272 NNI2 = (ANetNodeInstance *)I2; 279 NNI2 = (ANetNodeInstance *)I2;
273 return strcmp( NNI1->name(), NNI2->name() ); 280 return strcmp( NNI1->name(), NNI2->name() );
274} 281}
275 282
276static char * State2PixmapTbl[] = { 283static char * State2PixmapTbl[] = {
277 "NULL", // Unchecked : no pixmap 284 "NULL", // Unchecked : no pixmap
278 "check", // Unknown 285 "check", // Unknown
279 "delete", // unavailable 286 "delete", // unavailable
280 "disabled", // disabled 287 "disabled", // disabled
281 "off", // off 288 "off", // off
282 "disconnected", // available 289 "disconnected", // available
283 "connected" // up 290 "connected" // up
284}; 291};
285 292
286QPixmap NodeCollection::devicePixmap( void ) { 293QPixmap NodeCollection::devicePixmap( void ) {
287 QPixmap pm = NSResources->getPixmap( 294 QPixmap pm = NSResources->getPixmap(
288 getToplevel()->nextNode()->pixmapName()+"-large"); 295 getToplevel()->nextNode()->pixmapName()+"-large");
289 296
290 QPixmap Mini = NSResources->getPixmap( 297 QPixmap Mini = NSResources->getPixmap(
291 device()->netNode()->pixmapName() ); 298 device()->netNode()->pixmapName() );
292 299
293 if( pm.isNull() || Mini.isNull() ) 300 if( pm.isNull() || Mini.isNull() )
294 return Resource::loadPixmap("Unknown"); 301 return Resource::loadPixmap("Unknown");
295 302
diff --git a/noncore/settings/networksettings2/networksettings2/netnode.h b/noncore/settings/networksettings2/networksettings2/netnode.h
index 4626381..151d546 100644
--- a/noncore/settings/networksettings2/networksettings2/netnode.h
+++ b/noncore/settings/networksettings2/networksettings2/netnode.h
@@ -274,102 +274,144 @@ public:
274 { ANetNodeInstance * NNI = nextNode(); 274 { ANetNodeInstance * NNI = nextNode();
275 return (NNI) ? NNI->generateFileEmbedded( SF, DevNr ) : 1; 275 return (NNI) ? NNI->generateFileEmbedded( SF, DevNr ) : 1;
276 } 276 }
277 277
278 // generate code specific for this node 278 // generate code specific for this node
279 // (or find the first node that does) 279 // (or find the first node that does)
280 virtual short generateFile( SystemFile & SF, 280 virtual short generateFile( SystemFile & SF,
281 long DevNr ) 281 long DevNr )
282 { ANetNodeInstance * NNI = nextNode(); 282 { ANetNodeInstance * NNI = nextNode();
283 return (NNI) ? NNI->generateFile( SF, DevNr ) : 1; 283 return (NNI) ? NNI->generateFile( SF, DevNr ) : 1;
284 } 284 }
285 285
286 // return true if this node instance is triggered by this trigger 286 // return true if this node instance is triggered by this trigger
287 // could be delegated to deeper instances 287 // could be delegated to deeper instances
288 virtual bool triggeredBy( const QString & ) 288 virtual bool triggeredBy( const QString & )
289 { return 0; } 289 { return 0; }
290 290
291 // 291 //
292 // 292 //
293 // Pure virtual functions 293 // Pure virtual functions
294 // 294 //
295 // 295 //
296 296
297 // return runtime information for this node 297 // return runtime information for this node
298 virtual RuntimeInfo * runtime( void ) = 0; 298 virtual RuntimeInfo * runtime( void ) = 0;
299 299
300 // create edit widget under parent 300 // create edit widget under parent
301 virtual QWidget * edit( QWidget * parent ) = 0; 301 virtual QWidget * edit( QWidget * parent ) = 0;
302 302
303 // is given data acceptable 303 // is given data acceptable
304 virtual QString acceptable( void ) = 0; 304 virtual QString acceptable( void ) = 0;
305 305
306 // get data from GUI and store in node 306 // get data from GUI and store in node
307 virtual void commit( void ) = 0; 307 virtual void commit( void ) = 0;
308 308
309 // returns node specific data -> only useful for 'buddy' 309 // returns node specific data -> only useful for 'buddy'
310 virtual void * data( void ) = 0; 310 virtual void * data( void ) = 0;
311 311
312protected : 312protected :
313 313
314 virtual void setSpecificAttribute( QString & , QString & ) = 0; 314 virtual void setSpecificAttribute( QString & , QString & ) = 0;
315 virtual void saveSpecificAttribute( QTextStream & ) = 0; 315 virtual void saveSpecificAttribute( QTextStream & ) = 0;
316 316
317 ANetNode * NodeType; 317 ANetNode * NodeType;
318 // connection to which this node belongs to 318 // connection to which this node belongs to
319 NodeCollection * Connection; 319 NodeCollection * Connection;
320 QString Description; 320 QString Description;
321 bool IsModified; 321 bool IsModified;
322 // true if this nodeinstance was just created (and not
323 // loaded from file
322 bool IsNew; 324 bool IsNew;
323 int Done; 325 int Done;
324 326
325 static long InstanceCounter; 327 static long InstanceCounter;
326}; 328};
327 329
330class ErrorNNI: public ANetNodeInstance {
331
332public:
333
334 ErrorNNI( const QString & _Name ) : ANetNodeInstance( 0 ) {
335 setName( _Name.latin1() );
336 }
337
338 RuntimeInfo * runtime( void ) {
339 return 0;
340 }
341
342 // create edit widget under parent
343 QWidget * edit( QWidget * parent ) {
344 return 0;
345 }
346
347 // is given data acceptable
348 QString acceptable( void ) {
349 return QString();
350 }
351
352 // get data from GUI and store in node
353 void commit( void ) {
354 }
355
356 // returns node specific data -> only useful for 'buddy'
357 void * data( void ) {
358 return 0;
359 }
360
361protected :
362
363 void setSpecificAttribute( QString & , QString & ) {
364 }
365
366 void saveSpecificAttribute( QTextStream & ) {
367 }
368};
369
328class RuntimeInfo : public QObject { 370class RuntimeInfo : public QObject {
329 371
330 Q_OBJECT 372 Q_OBJECT
331 373
332public : 374public :
333 375
334 RuntimeInfo( ANetNodeInstance * TheNNI ) 376 RuntimeInfo( ANetNodeInstance * TheNNI )
335 { NNI = TheNNI; } 377 { NNI = TheNNI; }
336 378
337 // 379 //
338 // 380 //
339 // methods to be overloaded by connection capable 381 // methods to be overloaded by connection capable
340 // runtimes 382 // runtimes
341 // 383 //
342 // 384 //
343 385
344 386
345 // 387 //
346 // 388 //
347 // methods to be overloaded by device capable 389 // methods to be overloaded by device capable
348 // runtimes 390 // runtimes
349 // 391 //
350 // 392 //
351 393
352 // does this node handles this interface e.g.eth0 394 // does this node handles this interface e.g.eth0
353 // recurse deeper if this node cannot answer that question 395 // recurse deeper if this node cannot answer that question
354 virtual bool handlesInterface( const QString & S ) { 396 virtual bool handlesInterface( const QString & S ) {
355 RuntimeInfo * RI = device(); 397 RuntimeInfo * RI = device();
356 if( RI ) { 398 if( RI ) {
357 return RI->handlesInterface( S ); 399 return RI->handlesInterface( S );
358 } 400 }
359 return 0; 401 return 0;
360 } 402 }
361 bool handlesInterface( const InterfaceInfo & I ) { 403 bool handlesInterface( const InterfaceInfo & I ) {
362 RuntimeInfo * RI = device(); 404 RuntimeInfo * RI = device();
363 if( RI ) { 405 if( RI ) {
364 return RI->handlesInterface( I ); 406 return RI->handlesInterface( I );
365 } 407 }
366 return 0; 408 return 0;
367 } 409 }
368 410
369 // 411 //
370 // 412 //
371 // methods to be overloaded by full setup capable 413 // methods to be overloaded by full setup capable
372 // runtimes 414 // runtimes
373 // 415 //
374 // 416 //
375 417
@@ -423,97 +465,97 @@ public :
423 { RuntimeInfo * RI = nextNode(); 465 { RuntimeInfo * RI = nextNode();
424 return (RI) ? RI->line() : 0; 466 return (RI) ? RI->line() : 0;
425 } 467 }
426 468
427 // return the node that offers full setup capability 469 // return the node that offers full setup capability
428 virtual RuntimeInfo * fullSetup( void ) 470 virtual RuntimeInfo * fullSetup( void )
429 { RuntimeInfo * RI = nextNode(); 471 { RuntimeInfo * RI = nextNode();
430 return (RI) ? RI->fullSetup() : 0; 472 return (RI) ? RI->fullSetup() : 0;
431 } 473 }
432 474
433 inline ANetNodeInstance * netNode() 475 inline ANetNodeInstance * netNode()
434 { return NNI; } 476 { return NNI; }
435 477
436 inline NodeCollection * nodeCollection() 478 inline NodeCollection * nodeCollection()
437 { return NNI->connection(); } 479 { return NNI->connection(); }
438 480
439 virtual State_t detectState( void ) = 0; 481 virtual State_t detectState( void ) = 0;
440 // public API to set the state 482 // public API to set the state
441 virtual QString setState( NodeCollection * NC, 483 virtual QString setState( NodeCollection * NC,
442 Action_t A, 484 Action_t A,
443 bool Force = 0 ); 485 bool Force = 0 );
444 486
445 inline RuntimeInfo * nextNode( void ) { 487 inline RuntimeInfo * nextNode( void ) {
446 ANetNodeInstance * NNI = netNode()->nextNode(); 488 ANetNodeInstance * NNI = netNode()->nextNode();
447 return (NNI) ? NNI->runtime() : 0; 489 return (NNI) ? NNI->runtime() : 0;
448 } 490 }
449 491
450signals : 492signals :
451 493
452 // sent by device if state changes 494 // sent by device if state changes
453 void stateChanged( State_t S, ANetNodeInstance * NNI ); 495 void stateChanged( State_t S, ANetNodeInstance * NNI );
454 496
455protected : 497protected :
456 498
457 // set state of this node (private API) 499 // set state of this node (private API)
458 virtual QString setMyState( NodeCollection * NC, 500 virtual QString setMyState( NodeCollection * NC,
459 Action_t A, 501 Action_t A,
460 bool Force = 0 ) = 0; 502 bool Force = 0 ) = 0;
461 503
462 // connection this runtime info belongs to 504 // connection this runtime info belongs to
463 ANetNodeInstance * NNI; 505 ANetNodeInstance * NNI;
464}; 506};
465 507
466class NodeCollection : public QList<ANetNodeInstance> { 508class NodeCollection : public QList<ANetNodeInstance> {
467 509
468public : 510public :
469 511
470 NodeCollection( void ); 512 NodeCollection( void );
471 NodeCollection( QTextStream & TS ); 513 NodeCollection( QTextStream & TS, bool & Dangling );
472 ~NodeCollection( void ); 514 ~NodeCollection( void );
473 515
474 inline int done( void ) 516 inline int done( void )
475 { return Done; } 517 { return Done; }
476 inline void setDone( int D ) 518 inline void setDone( int D )
477 { Done = D; } 519 { Done = D; }
478 520
479 inline int number( void ) 521 inline int number( void )
480 { return Number; } 522 { return Number; }
481 inline void setNumber( int i ) 523 inline void setNumber( int i )
482 { Number = i; } 524 { Number = i; }
483 inline bool isNew( void ) 525 inline bool isNew( void )
484 { return IsNew; } 526 { return IsNew; }
485 inline void setNew( bool N ) 527 inline void setNew( bool N )
486 { IsNew = N ; } 528 { IsNew = N ; }
487 inline bool isModified( void ) 529 inline bool isModified( void )
488 { return IsModified; } 530 { return IsModified; }
489 inline void setModified( bool N ) 531 inline void setModified( bool N )
490 { IsModified = N ; } 532 { IsModified = N ; }
491 533
492 inline bool handlesInterface( const QString & S ) { 534 inline bool handlesInterface( const QString & S ) {
493 return getToplevel()->runtime()->handlesInterface( S ); 535 return getToplevel()->runtime()->handlesInterface( S );
494 } 536 }
495 537
496 // return the interface in the OS that is assigned to 538 // return the interface in the OS that is assigned to
497 // this device 539 // this device
498 inline InterfaceInfo * assignedInterface( void ) { 540 inline InterfaceInfo * assignedInterface( void ) {
499 return AssignedInterface; 541 return AssignedInterface;
500 } 542 }
501 543
502 // assign the interface to this device 544 // assign the interface to this device
503 inline void assignInterface( InterfaceInfo * NI ) { 545 inline void assignInterface( InterfaceInfo * NI ) {
504 if( NI == 0 ) { 546 if( NI == 0 ) {
505 if( AssignedInterface ) { 547 if( AssignedInterface ) {
506 AssignedInterface->assignConnection( 0 ); 548 AssignedInterface->assignConnection( 0 );
507 } 549 }
508 } 550 }
509 AssignedInterface = NI; 551 AssignedInterface = NI;
510 if( AssignedInterface ) { 552 if( AssignedInterface ) {
511 AssignedInterface->assignConnection( this ); 553 AssignedInterface->assignConnection( this );
512 } 554 }
513 } 555 }
514 556
515 inline RuntimeInfo * device() { 557 inline RuntimeInfo * device() {
516 return getToplevel()->runtime()->device(); 558 return getToplevel()->runtime()->device();
517 } 559 }
518 560
519 const QStringList & triggers(); 561 const QStringList & triggers();
@@ -540,57 +582,57 @@ public :
540 void reassign( void ); 582 void reassign( void );
541 583
542 ANetNodeInstance * getToplevel( void ); 584 ANetNodeInstance * getToplevel( void );
543 ANetNodeInstance * findNext( ANetNodeInstance * NNI ); 585 ANetNodeInstance * findNext( ANetNodeInstance * NNI );
544 ANetNodeInstance * findByName( const QString & S ); 586 ANetNodeInstance * findByName( const QString & S );
545 587
546 inline const QString & name() 588 inline const QString & name()
547 { return Name; } 589 { return Name; }
548 590
549 const QString & description( void ); 591 const QString & description( void );
550 592
551 inline void setName( const QString & N) 593 inline void setName( const QString & N)
552 { Name = N; } 594 { Name = N; }
553 595
554 inline State_t currentState( void ) 596 inline State_t currentState( void )
555 { return CurrentState; } 597 { return CurrentState; }
556 inline void setCurrentState( State_t S ) 598 inline void setCurrentState( State_t S )
557 { CurrentState = S; } 599 { CurrentState = S; }
558 600
559 // return TRUE if this node can have data to be inserted in 601 // return TRUE if this node can have data to be inserted in
560 // file identified by S 602 // file identified by S
561 bool hasDataForFile( SystemFile & S ); 603 bool hasDataForFile( SystemFile & S );
562 ANetNodeInstance * firstWithDataForFile( SystemFile & ); 604 ANetNodeInstance * firstWithDataForFile( SystemFile & );
563 605
564 // generate items for this file -> toplevel call 606 // generate items for this file -> toplevel call
565 short generateFile( SystemFile & SF, 607 short generateFile( SystemFile & SF,
566 long DN // device number 608 long DN // device number
567 ) 609 )
568 { return getToplevel()->generateFile( SF, DN ); } 610 { return getToplevel()->generateFile( SF, DN ); }
569 611
570 bool triggeredBy( const QString & Trigger ) 612 bool triggeredBy( const QString & Trigger )
571 { return getToplevel()->triggeredBy( Trigger ); } 613 { return getToplevel()->triggeredBy( Trigger ); }
572 614
573private : 615private :
574 616
575 int compareItems ( QCollection::Item item1, 617 int compareItems ( QCollection::Item item1,
576 QCollection::Item item2 ); 618 QCollection::Item item2 );
577 619
578 long Number; 620 long Number;
579 621
580 // state of this connection 622 // state of this connection
581 State_t CurrentState; 623 State_t CurrentState;
582 624
583 QString Name; 625 QString Name;
584 // true if this collection was just created (and not 626 // true if this collection was just created (and not
585 // loaded from file 627 // loaded from file
586 bool IsNew; 628 bool IsNew;
587 // index in listbox 629 // index in listbox
588 int Index; 630 int Index;
589 bool IsModified; 631 bool IsModified;
590 int Done; 632 int Done;
591 633
592 InterfaceInfo * AssignedInterface; 634 InterfaceInfo * AssignedInterface;
593 635
594}; 636};
595 637
596#endif 638#endif
diff --git a/noncore/settings/networksettings2/networksettings2/netnodeinterface.h b/noncore/settings/networksettings2/networksettings2/netnodeinterface.h
index 34f3bb5..06d1548 100644
--- a/noncore/settings/networksettings2/networksettings2/netnodeinterface.h
+++ b/noncore/settings/networksettings2/networksettings2/netnodeinterface.h
@@ -33,107 +33,117 @@
33#define ANET_NODE_INTERFACE_H 33#define ANET_NODE_INTERFACE_H
34 34
35#include <opie2/oapplicationfactory.h> 35#include <opie2/oapplicationfactory.h>
36#include <qpe/qcom.h> 36#include <qpe/qcom.h>
37 37
38// {A215A785-FB73-4F74-84B0-053BCC77DB87} 38// {A215A785-FB73-4F74-84B0-053BCC77DB87}
39#ifndef IID_NetworkSettings2 39#ifndef IID_NetworkSettings2
40 40
41#define IID_NetworkSettings2 QUuid( 0xa215a785, 0xfb73, 0x4f74, 0x84, 0xb0, 0x05, 0x3b, 0xcc, 0x77, 0xdb, 0x87) 41#define IID_NetworkSettings2 QUuid( 0xa215a785, 0xfb73, 0x4f74, 0x84, 0xb0, 0x05, 0x3b, 0xcc, 0x77, 0xdb, 0x87)
42 42
43#endif 43#endif
44 44
45 45
46 46
47/** 47/**
48 * Multiple Types 48 * Multiple Types
49 */ 49 */
50template <class Node > 50template <class Node >
51struct NS2PrivateFactory { 51struct NS2PrivateFactory {
52 52
53 inline static void createPlugins( QList<ANetNode> & PNN) { 53 inline static void createPlugins( QList<ANetNode> & PNN) {
54 PNN.append( new Node()); 54 PNN.append( new Node());
55 } 55 }
56 56
57}; 57};
58 58
59/* 59/*
60 * Stop recursion here 60 * Stop recursion here
61 */ 61 */
62template <> 62template <>
63struct NS2PrivateFactory<Opie::Core::NullType> { 63struct NS2PrivateFactory<Opie::Core::NullType> {
64 64
65 inline static void createPlugins( QList<ANetNode> &) { 65 inline static void createPlugins( QList<ANetNode> &) {
66 66
67 } 67 }
68 68
69}; 69};
70 70
71template <class Node, class Tail> 71template <class Node, class Tail>
72struct NS2PrivateFactory<Opie::Core::Typelist<Node, Tail> > { 72struct NS2PrivateFactory<Opie::Core::Typelist<Node, Tail> > {
73 73
74 inline static void createPlugins( QList<ANetNode> & PNN ) { 74 inline static void createPlugins( QList<ANetNode> & PNN ) {
75 NS2PrivateFactory<Node>::createPlugins(PNN); 75 NS2PrivateFactory<Node>::createPlugins(PNN);
76 NS2PrivateFactory<Tail>::createPlugins(PNN); 76 NS2PrivateFactory<Tail>::createPlugins(PNN);
77 } 77 }
78 78
79}; 79};
80 80
81class NetNodeInterface : public QUnknownInterface {
82
83public :
84
85 virtual QRESULT queryInterface( const QUuid& uuid,
86 QUnknownInterface **iface ) = 0;
87
88 virtual void create_plugin( QList<ANetNode> & PNN ) = 0;
89};
90
81template<class Node> 91template<class Node>
82struct NetNodeInterface : public QUnknownInterface { 92struct NetNodeInterface_T : public NetNodeInterface {
83 93
84 QRESULT queryInterface(const QUuid& uuid, QUnknownInterface **iface) { 94 QRESULT queryInterface(const QUuid& uuid, QUnknownInterface **iface) {
85 *iface = 0; 95 *iface = 0;
86 96
87 if( uuid == IID_QUnknown ) 97 if( uuid == IID_QUnknown )
88 *iface = this; 98 *iface = this;
89 else if( uuid == IID_NetworkSettings2 ) 99 else if( uuid == IID_NetworkSettings2 )
90 *iface = this; 100 *iface = this;
91 else 101 else
92 return QS_FALSE; 102 return QS_FALSE;
93 103
94 (*iface)->addRef(); 104 (*iface)->addRef();
95 105
96 return QS_OK; 106 return QS_OK;
97 107
98 } 108 }
99 109
100 void create_plugin( QList<ANetNode> & PNN ) { 110 void create_plugin( QList<ANetNode> & PNN ) {
101 111
102 PNN.append( new Node()); 112 PNN.append( new Node());
103 113
104 } 114 }
105 115
106 Q_REFCOUNT 116 Q_REFCOUNT
107}; 117};
108 118
109template<class Node, class Tail> 119template<class Node, class Tail>
110struct NetNodeInterface<Opie::Core::Typelist<Node, Tail> > 120struct NetNodeInterface_T<Opie::Core::Typelist<Node, Tail> >
111 : public QUnknownInterface { 121 : public NetNodeInterface {
112 122
113 QRESULT queryInterface( const QUuid& uuid, 123 QRESULT queryInterface( const QUuid& uuid,
114 QUnknownInterface **iface) { 124 QUnknownInterface **iface) {
115 125
116 *iface = 0; 126 *iface = 0;
117 127
118 if( uuid == IID_QUnknown ) *iface = this; 128 if( uuid == IID_QUnknown ) *iface = this;
119 else if( uuid == IID_NetworkSettings2 ) *iface = this; 129 else if( uuid == IID_NetworkSettings2 ) *iface = this;
120 else return QS_FALSE; 130 else return QS_FALSE;
121 131
122 (*iface)->addRef(); 132 (*iface)->addRef();
123 return QS_OK; 133 return QS_OK;
124 134
125 } 135 }
126 136
127 void create_plugin( QList<ANetNode> & PNN ) { 137 void create_plugin( QList<ANetNode> & PNN ) {
128 NS2PrivateFactory<Opie::Core::Typelist<Node,Tail> >::createPlugin( PNN ); 138 NS2PrivateFactory<Opie::Core::Typelist<Node,Tail> >::createPlugins( PNN );
129 } 139 }
130 140
131 Q_REFCOUNT 141 Q_REFCOUNT
132 142
133}; 143};
134 144
135#define OPIE_NS2_PLUGIN( factory ) \ 145#define OPIE_NS2_PLUGIN( factory ) \
136 Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( factory) } 146 Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( factory) }
137 147
138#endif 148#endif
139 149
diff --git a/noncore/settings/networksettings2/networksettings2/resources.cpp b/noncore/settings/networksettings2/networksettings2/resources.cpp
index 79d41ea..3479abb 100644
--- a/noncore/settings/networksettings2/networksettings2/resources.cpp
+++ b/noncore/settings/networksettings2/networksettings2/resources.cpp
@@ -1,465 +1,334 @@
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 <qmessagebox.h> 7#include <qmessagebox.h>
8 8
9#include <qpe/qlibrary.h> 9#include <qpe/qlibrary.h>
10#include <qpe/qpeapplication.h> 10#include <qpe/qpeapplication.h>
11 11
12#include <opie2/odebug.h> 12#include <opie2/odebug.h>
13#include <opie2/opluginloader.h> 13#include <opie2/opluginloader.h>
14 14
15#include <qtopia/resource.h> 15#include <qtopia/resource.h>
16 16
17#include "netnode.h" 17#include "netnode.h"
18#include "resources.h" 18#include "resources.h"
19#include "netnodeinterface.h" 19#include "netnodeinterface.h"
20 20
21#define PLUGINDIR "plugins/networksettings2" 21#define PLUGINDIR "plugins/networksettings2"
22#define ICONDIR "/pics/networksettings2/" 22#define ICONDIR "/pics/networksettings2/"
23 23
24// single resources instance 24// single resources instance
25TheNSResources * _NSResources = 0; 25TheNSResources * _NSResources = 0;
26 26
27TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), 27TheNSResources::TheNSResources( void ) : NodeTypeNameMap(),
28 ConnectionsMap() { 28 ConnectionsMap(), DanglingConnectionsMap() {
29 29
30 _NSResources = this; 30 _NSResources = this;
31 31
32 detectCurrentUser(); 32 detectCurrentUser();
33 33
34 // load available netnodes 34 // load available netnodes
35 35
36#ifdef MYPLUGIN
37
38 findAvailableNetNodes(QPEApplication::qpeDir() + PLUGINDIR );
39
40 // compile provides and needs lists
41 { const char ** NeedsRun;
42 QDictIterator<NetNode_t> OuterIt( AllNodeTypes );
43 bool Done;
44
45 for ( ; OuterIt.current(); ++OuterIt ) {
46 // find needs list
47 ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList;
48 ANetNode::NetNodeList & NNL = *(NNLP);
49
50 // must iterate this way to avoid duplication pointers
51 for ( QDictIterator<NetNode_t> InnerIt( AllNodeTypes );
52 InnerIt.current(); ++InnerIt ) {
53 if( InnerIt.current() == OuterIt.current() )
54 // avoid recursive
55 continue;
56
57 const char ** Provides = InnerIt.current()->NetNode->provides();
58 NeedsRun = OuterIt.current()->NetNode->needs();
59
60 for( ; *NeedsRun; NeedsRun ++ ) {
61 const char ** PRun;
62 PRun = Provides;
63 for( ; *PRun; PRun ++ ) {
64 if( strcmp( *PRun, *NeedsRun ) == 0 ) {
65 // inner provides what outer needs
66 NNL.resize( NNL.size() + 1 );
67 NNL[NNL.size()-1] = InnerIt.current()->NetNode;
68 Done = 1; // break from 2 loops
69 break;
70 }
71 }
72 }
73 }
74 OuterIt.current()->NetNode->setAlternatives( NNLP );
75 }
76 }
77
78#else
79
80 Plugins = 0; 36 Plugins = 0;
81 findAvailableNetNodes(); 37 findAvailableNetNodes();
82 38
83 // compile provides and needs lists 39 // compile provides and needs lists
84 { const char ** NeedsRun; 40 { const char ** NeedsRun;
85 QDictIterator<ANetNode> OuterIt( AllNodeTypes ); 41 QDictIterator<ANetNode> OuterIt( AllNodeTypes );
86 bool Done; 42 bool Done;
87 43
88 for ( ; OuterIt.current(); ++OuterIt ) { 44 for ( ; OuterIt.current(); ++OuterIt ) {
89 // find needs list 45 // find needs list
90 ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList; 46 ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList;
91 ANetNode::NetNodeList & NNL = *(NNLP); 47 ANetNode::NetNodeList & NNL = *(NNLP);
92 48
93 // must iterate this way to avoid duplication pointers 49 // must iterate this way to avoid duplication pointers
94 for ( QDictIterator<ANetNode> InnerIt( AllNodeTypes ); 50 for ( QDictIterator<ANetNode> InnerIt( AllNodeTypes );
95 InnerIt.current(); ++InnerIt ) { 51 InnerIt.current(); ++InnerIt ) {
96 52
97 if( InnerIt.current() == OuterIt.current() ) 53 if( InnerIt.current() == OuterIt.current() )
98 // avoid recursive 54 // avoid recursive
99 continue; 55 continue;
100 56
101 const char ** Provides = InnerIt.current()->provides(); 57 const char ** Provides = InnerIt.current()->provides();
102 NeedsRun = OuterIt.current()->needs(); 58 NeedsRun = OuterIt.current()->needs();
103 59
104 for( ; *NeedsRun; NeedsRun ++ ) { 60 for( ; *NeedsRun; NeedsRun ++ ) {
105 const char ** PRun; 61 const char ** PRun;
106 PRun = Provides; 62 PRun = Provides;
107 for( ; *PRun; PRun ++ ) { 63 for( ; *PRun; PRun ++ ) {
108 if( strcmp( *PRun, *NeedsRun ) == 0 ) { 64 if( strcmp( *PRun, *NeedsRun ) == 0 ) {
109 // inner provides what outer needs 65 // inner provides what outer needs
110 NNL.resize( NNL.size() + 1 ); 66 NNL.resize( NNL.size() + 1 );
111 NNL[NNL.size()-1] = InnerIt.current(); 67 NNL[NNL.size()-1] = InnerIt.current();
112 Done = 1; // break from 2 loops 68 Done = 1; // break from 2 loops
113 break; 69 break;
114 } 70 }
115 } 71 }
116 } 72 }
117 } 73 }
118 OuterIt.current()->setAlternatives( NNLP ); 74 OuterIt.current()->setAlternatives( NNLP );
119 } 75 }
120 } 76 }
121 77
122#endif
123
124 // define built in Node types to Description map 78 // define built in Node types to Description map
125 addNodeType( "device", tr( "Network Device" ), 79 addNodeType( "device", tr( "Network Device" ),
126 tr( "<p>Devices that can handle IP packets</p>" ) ); 80 tr( "<p>Devices that can handle IP packets</p>" ) );
127 addNodeType( "line", tr( "Character device" ), 81 addNodeType( "line", tr( "Character device" ),
128 tr( "<p>Devices that can handle single bytes</p>" ) ); 82 tr( "<p>Devices that can handle single bytes</p>" ) );
129 addNodeType( "connection", tr( "IP Connection" ), 83 addNodeType( "connection", tr( "IP Connection" ),
130 tr( "<p>Nodes that provide working IP connections</p>" ) ); 84 tr( "<p>Nodes that provide working IP connections</p>" ) );
131 addNodeType( "fullsetup", tr( "Connection Profile" ), 85 addNodeType( "fullsetup", tr( "Connection Profile" ),
132 tr( "<p>Fully configured connection profile</p>" ) ); 86 tr( "<p>Fully configured connection profile</p>" ) );
133 addNodeType( "GPRS", tr( "Connection to GPRS device" ), 87 addNodeType( "GPRS", tr( "Connection to GPRS device" ),
134 tr( "<p>Connection to a GPRS capable device</p>" ) ); 88 tr( "<p>Connection to a GPRS capable device</p>" ) );
135 89
136 // get access to the system 90 // get access to the system
137 TheSystem = new System(); 91 TheSystem = new System();
138 92
139} 93}
140 94
141TheNSResources::~TheNSResources( void ) { 95TheNSResources::~TheNSResources( void ) {
142 96
143#ifndef MYPLUGINS
144 if( Plugins ) { 97 if( Plugins ) {
145 delete Plugins; 98 delete Plugins;
146 delete PluginManager; 99 delete PluginManager;
147 } 100 }
148#endif
149 delete TheSystem; 101 delete TheSystem;
150 102
151} 103}
152 104
153void TheNSResources::addNodeType( const QString & ID, 105void TheNSResources::addNodeType( const QString & ID,
154 const QString & Name, 106 const QString & Name,
155 const QString & Descr ) { 107 const QString & Descr ) {
156 if( NodeTypeNameMap[ID].isEmpty() ) { 108 if( NodeTypeNameMap[ID].isEmpty() ) {
157 NodeTypeNameMap.insert( ID, Name ); 109 NodeTypeNameMap.insert( ID, Name );
158 NodeTypeDescriptionMap.insert( ID, Descr ); 110 NodeTypeDescriptionMap.insert( ID, Descr );
159 } 111 }
160} 112}
161 113
162void TheNSResources::addSystemFile( const QString & ID, 114void TheNSResources::addSystemFile( const QString & ID,
163 const QString & P, 115 const QString & P,
164 bool KDI ) { 116 bool KDI ) {
165 if( ! SystemFiles.find( ID ) ) { 117 if( ! SystemFiles.find( ID ) ) {
166 // new system file 118 // new system file
167 SystemFiles.insert( ID, new SystemFile( ID, P, KDI ) ); 119 SystemFiles.insert( ID, new SystemFile( ID, P, KDI ) );
168 } // else existed 120 } // else existed
169} 121}
170 122
171void TheNSResources::busy( bool ) { 123void TheNSResources::busy( bool ) {
172/* 124/*
173 if( B ) { 125 if( B ) {
174 ShowWait->show(); 126 ShowWait->show();
175 qApp->process 127 qApp->process
176 } else { 128 } else {
177 ShowWait->hide(); 129 ShowWait->hide();
178 } 130 }
179*/ 131*/
180} 132}
181 133
182#ifdef MYPLUGIN
183/**
184 * Load all modules that are found in the path
185 * @param path a directory that is scaned for any plugins that can be loaded
186 * and attempts to load them
187 */
188void TheNSResources::findAvailableNetNodes(const QString &path){
189
190 Log(("Locate plugins in %s\n", path.latin1() ));
191 QDir d(path);
192 if(!d.exists())
193 return;
194
195 QString lang = ::getenv("LANG");
196
197 // Don't want sym links
198 d.setFilter( QDir::Files | QDir::NoSymLinks );
199 const QFileInfoList *list = d.entryInfoList();
200 QFileInfoListIterator it( *list );
201 QFileInfo *fi;
202
203 while ( (fi=it.current()) ) {
204
205 if( fi->fileName().contains(".so")){
206 /* if loaded install translation */
207 if( loadNetNode(path + "/" + fi->fileName()) ) {
208 Log(( "Loading plugin %s\n", fi->fileName().latin1()));
209 QTranslator *trans = new QTranslator(qApp);
210 QString fn = QPEApplication::qpeDir()+
211 "/i18n/"+lang+"/"+
212 fi->fileName().left( fi->fileName().find(".") )+
213 ".qm";
214
215 if( trans->load( fn ) )
216 qApp->installTranslator( trans );
217 else
218 delete trans;
219 } else {
220 Log(( "Error loading plugin %s\n", fi->fileName().latin1()));
221 }
222 }
223 ++it;
224 }
225}
226
227/**
228 * Attempt to load a function and resolve a function.
229 * @param pluginFileName - the name of the file in which to attempt to load
230 * @param resolveString - function pointer to resolve
231 * @return true of loading is successful
232 */
233bool TheNSResources::loadNetNode(
234 const QString &pluginFileName, const QString &resolveString){
235
236 QLibrary *lib = new QLibrary(pluginFileName);
237 void * res = lib->resolve(resolveString);
238 if( ! res ){
239 delete lib;
240 return 0;
241 }
242
243 GetNetNodeListFt_t getNetNodeList = (GetNetNodeListFt_t)res;
244
245 // Try to get an object.
246 QList<ANetNode> PNN;
247
248 getNetNodeList( PNN );
249 if( PNN.isEmpty() ) {
250 delete lib;
251 return 0;
252 }
253
254 ANetNode * NNP;
255 for( QListIterator<ANetNode> it(PNN);
256 it.current();
257 ++it ) {
258 NetNode_t * NN;
259
260 NNP = it.current();
261 NN = new NetNode_t;
262 NN->NetNode = NNP;
263 NN->TheLibrary = lib;
264 NN->NodeCountInLib = PNN.count();
265
266 // store mapping
267 AllNodeTypes.insert( NN->NetNode->name(), NN );
268 }
269
270 return 1;
271}
272
273#else
274
275void TheNSResources::findAvailableNetNodes( void ){ 134void TheNSResources::findAvailableNetNodes( void ){
276 135
277 Plugins = new OPluginLoader( "networksettings2" ); 136 Plugins = new OPluginLoader( "networksettings2" );
278 Plugins->setAutoDelete( true ); 137 Plugins->setAutoDelete( true );
279 138
280 PluginManager = new OPluginManager( Plugins ); 139 PluginManager = new OPluginManager( Plugins );
281 PluginManager->load(); 140 PluginManager->load();
282 141
283 if( Plugins->isInSafeMode() ) { 142 if( Plugins->isInSafeMode() ) {
284 QMessageBox::information( 143 QMessageBox::information(
285 0, 144 0,
286 tr( "Today Error"), 145 tr( "Today Error"),
287 tr( "<qt>The plugin '%1' caused Today to crash." 146 tr( "<qt>The plugin '%1' caused Today to crash."
288 " It could be that the plugin is not properly" 147 " It could be that the plugin is not properly"
289 " installed.<br>Today tries to continue loading" 148 " installed.<br>Today tries to continue loading"
290 " plugins.</qt>" ) 149 " plugins.</qt>" )
291 .arg( PluginManager->crashedPlugin().name())); 150 .arg( PluginManager->crashedPlugin().name()));
292 } 151 }
293 152
294 // Get All Plugins 153 // Get All Plugins
295 OPluginLoader::List allplugins = Plugins->filtered(); 154 OPluginLoader::List allplugins = Plugins->filtered();
155 QString lang = ::getenv("LANG");
296 156
297 for( OPluginLoader::List::Iterator it = allplugins.begin(); 157 for( OPluginLoader::List::Iterator it = allplugins.begin();
298 it != allplugins.end(); 158 it != allplugins.end();
299 ++it ) { 159 ++it ) {
300 160
301 // check if this plugin supports the proper interface 161 // check if this plugin supports the proper interface
302 NetNodeInterface * interface = 162 NetNodeInterface * interface =
303 Plugins->load<NetNodeInterface>( *it, IID_NetworkSettings2 ); 163 Plugins->load<NetNodeInterface>( *it, IID_NetworkSettings2 );
304 164
305 if( ! interface ) { 165 if( ! interface ) {
306 Log(( "Plugin %s from %s does not support proper interface\n", 166 Log(( "Plugin %s from %s does not support proper interface\n",
307 it->name().latin1(), it->path().latin1() )); 167 (*it).name().latin1(), (*it).path().latin1() ));
308 continue; 168 continue;
309 } 169 }
310 170
311 // add the nodes in this plugin to the dictionary 171 // add the nodes in this plugin to the dictionary
312 { QList<ANetNode> PNN; 172 { QList<ANetNode> PNN;
313 173
314 interface->create_plugin( PNN ); 174 interface->create_plugin( PNN );
315 175
316 if( PNN.isEmpty() ) { 176 if( PNN.isEmpty() ) {
317 Log(( "Plugin %s from %s does offer any nodes\n", 177 Log(( "Plugin %s from %s does offer any nodes\n",
318 it->name().latin1(), it->path().latin1() )); 178 (*it).name().latin1(), (*it).path().latin1() ));
319 delete interface; 179 delete interface;
320 continue; 180 continue;
321 } 181 }
322 182
323 // merge this node with global node 183 // merge this node with global node
324 for( QListIterator<ANetNode> it(PNN); 184 for( QListIterator<ANetNode> it(PNN);
325 it.current(); 185 it.current();
326 ++it ) { 186 ++it ) {
327 AllNodeTypes.insert( it->current()->name(), it->current() ); 187 AllNodeTypes.insert( it.current()->name(), it.current() );
328 } 188 }
329 } 189 }
330 190
331 // load the translation 191 // load the translation
332 QTranslator *trans = new QTranslator(qApp); 192 QTranslator *trans = new QTranslator(qApp);
333 QString fn = QPEApplication::qpeDir()+ 193 QString fn = QPEApplication::qpeDir()+
334 "/i18n/"+lang+"/"+ it->name() + ".qm"; 194 "/i18n/"+lang+"/"+ (*it).name() + ".qm";
335 195
336 if( trans->load( fn ) ) 196 if( trans->load( fn ) )
337 qApp->installTranslator( trans ); 197 qApp->installTranslator( trans );
338 else 198 else
339 delete trans; 199 delete trans;
340 } 200 }
341 201
342} 202}
343 203
344#endif
345
346// used to find unique connection number 204// used to find unique connection number
347int TheNSResources::assignConnectionNumber( void ) { 205int TheNSResources::assignConnectionNumber( void ) {
348 bool found = 1; 206 bool found = 1;
349 for( int trial = 0; ; trial ++ ) { 207 for( int trial = 0; ; trial ++ ) {
350 found = 1; 208 found = 1;
351 for( QDictIterator<NodeCollection> it(ConnectionsMap); 209 for( QDictIterator<NodeCollection> it(ConnectionsMap);
352 it.current(); 210 it.current();
353 ++it ) { 211 ++it ) {
354 if( it.current()->number() == trial ) { 212 if( it.current()->number() == trial ) {
355 found = 0; 213 found = 0;
356 break; 214 break;
357 } 215 }
358 } 216 }
359 217
360 if( found ) { 218 if( found ) {
361 Log(("Assign profile number %d\n", trial )); 219 Log(("Assign profile number %d\n", trial ));
362 return trial; 220 return trial;
363 } 221 }
364 } 222 }
365} 223}
366 224
367QPixmap TheNSResources::getPixmap( const QString & QS ) { 225QPixmap TheNSResources::getPixmap( const QString & QS ) {
368 QPixmap P; 226 QPixmap P;
369 QString S("networksettings2/"); 227 QString S("networksettings2/");
370 S += QS; 228 S += QS;
371 P = Resource::loadPixmap( S ); 229 P = Resource::loadPixmap( S );
372 if( P.isNull() ) { 230 if( P.isNull() ) {
373 Log(( "Cannot load %s\n", S.latin1() )); 231 Log(( "Cannot load %s\n", S.latin1() ));
374 } 232 }
375 return ( P.isNull() ) ? QPixmap() : P; 233 return ( P.isNull() ) ? QPixmap() : P;
376} 234}
377 235
378QString TheNSResources::tr( const char * s ) { 236QString TheNSResources::tr( const char * s ) {
379 return qApp->translate( "resource", s ); 237 return qApp->translate( "resource", s );
380} 238}
381 239
382const QString & TheNSResources::netNode2Name( const char * s ) { 240const QString & TheNSResources::netNode2Name( const char * s ) {
383 return NodeTypeNameMap[s]; 241 return NodeTypeNameMap[s];
384} 242}
385 243
386const QString & TheNSResources::netNode2Description( const char * s ) { 244const QString & TheNSResources::netNode2Description( const char * s ) {
387 return NodeTypeDescriptionMap[s]; 245 return NodeTypeDescriptionMap[s];
388} 246}
389 247
390void TheNSResources::addConnection( NodeCollection * NC ) { 248void TheNSResources::addConnection( NodeCollection * NC, bool Dangling ) {
391 ANetNodeInstance * NNI; 249 ANetNodeInstance * NNI;
392 ConnectionsMap.insert( NC->name(), NC ); 250 if( Dangling ) {
251 DanglingConnectionsMap.insert( NC->name(), NC );
252 } else {
253 ConnectionsMap.insert( NC->name(), NC );
254 }
255
393 // add (new) nodes to NodeList 256 // add (new) nodes to NodeList
394 for( QListIterator<ANetNodeInstance> it(*NC); 257 for( QListIterator<ANetNodeInstance> it(*NC);
395 it.current(); 258 it.current();
396 ++it ) { 259 ++it ) {
397 NNI = it.current(); 260 NNI = it.current();
398 if( findNodeInstance( NNI->name() ) == 0 ) { 261 if( findNodeInstance( NNI->name() ) == 0 ) {
399 // new item 262 // new item
400 addNodeInstance( NNI ); 263 addNodeInstance( NNI );
401 } 264 }
402 } 265 }
403} 266}
404 267
405void TheNSResources::removeConnection( const QString & N ) { 268void TheNSResources::removeConnection( const QString & N ) {
406 NodeCollection * NC = findConnection( N ); 269 NodeCollection * NC = findConnection( N );
407 if( ! NC ) 270 if( ! NC )
408 return; 271 return;
409 272
410 // delete netnodes in this connection 273 // delete netnodes in this connection
411 ANetNodeInstance * NNI; 274 ANetNodeInstance * NNI;
412 for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) { 275 for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) {
413 removeNodeInstance( NNI->name() ); 276 removeNodeInstance( NNI->name() );
414 } 277 }
415 ConnectionsMap.remove( N ); 278 if( ConnectionsMap.find( N ) ) {
279 ConnectionsMap.remove( N );
280 } else {
281 DanglingConnectionsMap.remove( N );
282 }
283
416} 284}
417 285
286// dangling connections are filtered out
418NodeCollection * TheNSResources::findConnection( const QString & S ) { 287NodeCollection * TheNSResources::findConnection( const QString & S ) {
419 return ConnectionsMap[ S ]; 288 return ConnectionsMap[ S ];
420} 289}
421 290
422NodeCollection * TheNSResources::getConnection( int nr ) { 291NodeCollection * TheNSResources::getConnection( int nr ) {
423 for( QDictIterator<NodeCollection> it(ConnectionsMap); 292 for( QDictIterator<NodeCollection> it(ConnectionsMap);
424 it.current(); 293 it.current();
425 ++it ) { 294 ++it ) {
426 if( it.current()->number() == nr ) { 295 if( it.current()->number() == nr ) {
427 return it.current(); 296 return it.current();
428 } 297 }
429 } 298 }
430 return 0; 299 return 0;
431} 300}
432/* 301/*
433void TheNSResources::renumberConnections( void ) { 302void TheNSResources::renumberConnections( void ) {
434 Name2Connection_t & M = NSResources->connections(); 303 Name2Connection_t & M = NSResources->connections();
435 NodeCollection * NC; 304 NodeCollection * NC;
436 305
437 // for all connections 306 // for all connections
438 NodeCollection::resetMaxNr(); 307 NodeCollection::resetMaxNr();
439 for( QDictIterator<NodeCollection> it(M); 308 for( QDictIterator<NodeCollection> it(M);
440 it.current(); 309 it.current();
441 ++it ) { 310 ++it ) {
442 NC = it.current(); 311 NC = it.current();
443 NC->setNumber( NC->maxConnectionNumber()+1 ); 312 NC->setNumber( NC->maxConnectionNumber()+1 );
444 NC->setModified( 1 ); 313 NC->setModified( 1 );
445 } 314 }
446} 315}
447*/ 316*/
448 317
449typedef struct EnvVars { 318typedef struct EnvVars {
450 char * Name; 319 char * Name;
451 int Len; 320 int Len;
452} EnvVar_t; 321} EnvVar_t;
453 322
454#define AnEV(x) x, sizeof(x)-1 323#define AnEV(x) x, sizeof(x)-1
455 324
456static EnvVar_t EV[] = { 325static EnvVar_t EV[] = {
457 AnEV( "HOME" ), 326 AnEV( "HOME" ),
458 AnEV( "LOGNAME" ), 327 AnEV( "LOGNAME" ),
459 AnEV( "USER" ), 328 AnEV( "USER" ),
460 AnEV( "LD_LIBRARY_PATH" ), 329 AnEV( "LD_LIBRARY_PATH" ),
461 AnEV( "PATH" ), 330 AnEV( "PATH" ),
462 AnEV( "QTDIR" ), 331 AnEV( "QTDIR" ),
463 AnEV( "OPIEDIR" ), 332 AnEV( "OPIEDIR" ),
464 AnEV( "SHELL" ), 333 AnEV( "SHELL" ),
465 { NULL, 0 } 334 { NULL, 0 }
diff --git a/noncore/settings/networksettings2/networksettings2/resources.h b/noncore/settings/networksettings2/networksettings2/resources.h
index 421a433..b27cda1 100644
--- a/noncore/settings/networksettings2/networksettings2/resources.h
+++ b/noncore/settings/networksettings2/networksettings2/resources.h
@@ -1,183 +1,153 @@
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
12class QLibrary; 12class QLibrary;
13class QPixmap; 13class QPixmap;
14class ANetNode; 14class ANetNode;
15class ANetNodeInstance; 15class ANetNodeInstance;
16 16
17namespace Opie { 17namespace Opie {
18 namespace Core { 18 namespace Core {
19 class OPluginLoader; 19 class OPluginLoader;
20 class OPluginManager; 20 class OPluginManager;
21 } 21 }
22} 22}
23 23
24typedef void (*GetNetNodeListFt_t)(QList<ANetNode>& PNN ); 24typedef void (*GetNetNodeListFt_t)(QList<ANetNode>& PNN );
25 25
26class CurrentQPEUser { 26class CurrentQPEUser {
27 27
28public : 28public :
29 CurrentQPEUser() : UserName(), HomeDir(), EnvList() {} 29 CurrentQPEUser() : UserName(), HomeDir(), EnvList() {}
30 30
31 inline bool known( void ) 31 inline bool known( void )
32 { return ! HomeDir.isEmpty() && ! UserName.isEmpty(); } 32 { return ! HomeDir.isEmpty() && ! UserName.isEmpty(); }
33 33
34 QString UserName; 34 QString UserName;
35 QString HomeDir; 35 QString HomeDir;
36 int Uid; 36 int Uid;
37 int Gid; 37 int Gid;
38 QArray<char *> EnvList; 38 QArray<char *> EnvList;
39}; 39};
40 40
41#ifdef MYPLUGIN
42
43typedef struct NetNode_S {
44 ANetNode * NetNode;
45 QLibrary * TheLibrary;
46 long NodeCountInLib;
47} NetNode_t;
48typedef QDict<NetNode_t> Name2NetNode_t;
49
50#else
51
52typedef QDict<ANetNode> Name2NetNode_t; 41typedef QDict<ANetNode> Name2NetNode_t;
53
54#endif
55
56typedef QDict<ANetNodeInstance > Name2Instance_t; 42typedef QDict<ANetNodeInstance > Name2Instance_t;
57typedef QDict<NodeCollection> Name2Connection_t; 43typedef QDict<NodeCollection> Name2Connection_t;
58typedef QDict<SystemFile> Name2SystemFile_t; 44typedef QDict<SystemFile> Name2SystemFile_t;
59 45
60class TheNSResources { 46class TheNSResources {
61 47
62public : 48public :
63 49
64 TheNSResources( void ); 50 TheNSResources( void );
65 ~TheNSResources( ); 51 ~TheNSResources( );
66 52
67 // give busy feedback 53 // give busy feedback
68 void busy( bool B ); 54 void busy( bool B );
69 55
70 System & system() 56 System & system()
71 { return *TheSystem; } 57 { return *TheSystem; }
72 58
73 int assignConnectionNumber(void); 59 int assignConnectionNumber(void);
74 QPixmap getPixmap( const QString & Name ); 60 QPixmap getPixmap( const QString & Name );
75 61
76 Name2NetNode_t & netNodes( void ) 62 Name2NetNode_t & netNodes( void )
77 { return AllNodeTypes; } 63 { return AllNodeTypes; }
78 bool netNodeExists( const QString & X ) 64 bool netNodeExists( const QString & X )
79 { return AllNodeTypes.find(X)!=0; } 65 { return AllNodeTypes.find(X)!=0; }
80#ifdef MYPLUGIN
81 ANetNode * findNetNode( const QString & N )
82 { NetNode_t * NNT = AllNodeTypes.find(N);
83 return (NNT) ? NNT->NetNode : 0;
84 }
85#else
86 ANetNode * findNetNode( const QString & N ) 66 ANetNode * findNetNode( const QString & N )
87 { return AllNodeTypes.find(N); 67 { return AllNodeTypes.find(N);
88 } 68 }
89#endif
90 // define new plugin (=node) 69 // define new plugin (=node)
91 void addNodeType( const QString & ID, 70 void addNodeType( const QString & ID,
92 const QString & LongName, 71 const QString & LongName,
93 const QString & Description ); 72 const QString & Description );
94 73
95 Name2SystemFile_t & systemFiles( void ) 74 Name2SystemFile_t & systemFiles( void )
96 { return SystemFiles; } 75 { return SystemFiles; }
97 void addSystemFile( const QString & ID, 76 void addSystemFile( const QString & ID,
98 const QString & P, 77 const QString & P,
99 bool KDI ); 78 bool KDI );
100 79
101 ANetNodeInstance * createNodeInstance( const QString & S ) 80 ANetNodeInstance * createNodeInstance( const QString & S )
102 { ANetNodeInstance * NNI = 0; 81 { ANetNode * NN = findNetNode( S );
103 printf( "Find node type %s\n", S.latin1() ); 82
104#ifdef MYPLUGIN 83 Log(( "Find node type %s : %p\n", S.latin1(), NN ));
105 NetNode_t * NNT = AllNodeTypes[S]; 84
106 if( ! NNT ) { 85 if( NN == 0 )
107 return 0; 86 // type of this instance not found
108 }
109 NNI = NNT->NetNode->createInstance();
110#else
111 ANetNode * NNT = AllNodeTypes[S];
112 if( ! NNT ) {
113 return 0; 87 return 0;
114 } 88
115 NNI = NNT->createInstance(); 89 ANetNodeInstance * NNI = NN->createInstance();
116#endif
117 NNI->initialize(); 90 NNI->initialize();
118 return NNI; 91 return NNI;
119 } 92 }
120 93
121 Name2Instance_t & netNodeInstances( void ) 94 Name2Instance_t & netNodeInstances( void )
122 { return AllNodes; } 95 { return AllNodes; }
123 void addNodeInstance( ANetNodeInstance * I ) 96 void addNodeInstance( ANetNodeInstance * I )
124 { AllNodes.insert( I->name(), I ); } 97 { AllNodes.insert( I->name(), I ); }
125 void removeNodeInstance( const QString & N ) 98 void removeNodeInstance( const QString & N )
126 { AllNodes.remove( N );} 99 { AllNodes.remove( N );}
127 ANetNodeInstance * findNodeInstance( const QString & S ) 100 ANetNodeInstance * findNodeInstance( const QString & S )
128 { return AllNodes[S]; } 101 { return AllNodes[S]; }
129 102
130 const QString & netNode2Name( const char * Type ); 103 const QString & netNode2Name( const char * Type );
131 const QString & netNode2Description( const char * Type ); 104 const QString & netNode2Description( const char * Type );
132 105
133 void addConnection( NodeCollection * NC ); 106 void addConnection( NodeCollection * NC, bool Dangling );
134 void removeConnection( const QString & N ); 107 void removeConnection( const QString & N );
135 NodeCollection * findConnection( const QString & N ); 108 NodeCollection * findConnection( const QString & N );
136 NodeCollection * getConnection( int nr ); 109 NodeCollection * getConnection( int nr );
137 Name2Connection_t & connections( void ) 110 Name2Connection_t & connections( void )
138 { return ConnectionsMap; } 111 { return ConnectionsMap; }
112 Name2Connection_t & danglingConnections( void )
113 { return ConnectionsMap; }
139 114
140 inline bool userKnown( void ) 115 inline bool userKnown( void )
141 { return CurrentUser.known(); } 116 { return CurrentUser.known(); }
142 CurrentQPEUser & currentUser( void ) 117 CurrentQPEUser & currentUser( void )
143 { return CurrentUser; } 118 { return CurrentUser; }
144 119
145private : 120private :
146 121
147 void detectCurrentUser( void ); 122 void detectCurrentUser( void );
148 QString tr( const char * path ); 123 QString tr( const char * path );
149 124
150#ifdef MYPLUGIN
151 void findAvailableNetNodes( const QString &path );
152 bool loadNetNode(
153 const QString &pluginFileName,
154 const QString &resolveString = "create_plugin");
155#else
156 void findAvailableNetNodes( void ); 125 void findAvailableNetNodes( void );
157#endif
158 126
159 QMap< QString, QString> NodeTypeNameMap; 127 QMap< QString, QString> NodeTypeNameMap;
160 QMap< QString, QString> NodeTypeDescriptionMap; 128 QMap< QString, QString> NodeTypeDescriptionMap;
129 // list of connections that are valid
161 Name2Connection_t ConnectionsMap; 130 Name2Connection_t ConnectionsMap;
131 // list of connection configurations that are not valid
132 // e.g. because plugins are missing
133 Name2Connection_t DanglingConnectionsMap;
162 System * TheSystem; 134 System * TheSystem;
163 Name2SystemFile_t SystemFiles; 135 Name2SystemFile_t SystemFiles;
164 136
165 // all node type classes 137 // all node type classes
166 Name2NetNode_t AllNodeTypes; 138 Name2NetNode_t AllNodeTypes;
167 139
168 // all nodes 140 // all nodes
169 Name2Instance_t AllNodes; 141 Name2Instance_t AllNodes;
170 142
171 CurrentQPEUser CurrentUser; 143 CurrentQPEUser CurrentUser;
172 144
173#ifndef MYPLUGIN
174 Opie::Core::OPluginLoader * Plugins; 145 Opie::Core::OPluginLoader * Plugins;
175 Opie::Core::OPluginManager * PluginManager; 146 Opie::Core::OPluginManager * PluginManager;
176#endif
177 147
178}; 148};
179 149
180extern TheNSResources * _NSResources; 150extern TheNSResources * _NSResources;
181#define NSResources _NSResources 151#define NSResources _NSResources
182 152
183#endif 153#endif
diff --git a/noncore/settings/networksettings2/nsdata.cpp b/noncore/settings/networksettings2/nsdata.cpp
index 698a941..d76353a 100644
--- a/noncore/settings/networksettings2/nsdata.cpp
+++ b/noncore/settings/networksettings2/nsdata.cpp
@@ -71,277 +71,295 @@ NetworkSettingsData::NetworkSettingsData( void ) {
71} 71}
72 72
73// saving is done by caller 73// saving is done by caller
74NetworkSettingsData::~NetworkSettingsData( void ) { 74NetworkSettingsData::~NetworkSettingsData( void ) {
75 delete NSResources; 75 delete NSResources;
76} 76}
77 77
78void NetworkSettingsData::loadSettings( void ) { 78void NetworkSettingsData::loadSettings( void ) {
79 QString Line, S; 79 QString Line, S;
80 QString Attr, Value; 80 QString Attr, Value;
81 long idx; 81 long idx;
82 82
83 QFile F( CfgFile ); 83 QFile F( CfgFile );
84 QTextStream TS( &F ); 84 QTextStream TS( &F );
85 85
86 ForceModified = 0; 86 ForceModified = 0;
87 87
88 do { 88 do {
89 89
90 if( ! F.open(IO_ReadOnly) ) 90 if( ! F.open(IO_ReadOnly) )
91 break; 91 break;
92 92
93 /* load the file -> 93 /* load the file ->
94 94
95 FORMAT : 95 FORMAT :
96 96
97 [NETNODETYPE] 97 [NETNODETYPE]
98 Entries ... 98 Entries ...
99 <EMPTYLINE> 99 <EMPTYLINE>
100 [connection] 100 [connection]
101 Name=Name 101 Name=Name
102 Node=Name 102 Node=Name
103 <EMPTYLINE> 103 <EMPTYLINE>
104 */ 104 */
105 while( ! TS.atEnd() ) { 105 while( ! TS.atEnd() ) {
106 S = Line = TS.readLine(); 106 S = Line = TS.readLine();
107 107
108 if ( S.isEmpty() || S[0] != '[' ) 108 if ( S.isEmpty() || S[0] != '[' )
109 continue; 109 continue;
110 110
111 S = S.mid( 1, S.length()-2 ); 111 S = S.mid( 1, S.length()-2 );
112 112
113 if( ! NSResources ) { 113 if( ! NSResources ) {
114 continue; 114 continue;
115 } 115 }
116 116
117 if( S == "connection" ) { 117 if( S == "connection" ) {
118 // load connections -> collections of nodes 118 // load connections -> collections of nodes
119 NodeCollection * NC = new NodeCollection( TS ); 119 bool Dangling;
120 NSResources->addConnection( NC ); 120 NodeCollection * NC = new NodeCollection( TS, Dangling );
121 NSResources->addConnection( NC, Dangling );
121 } else { 122 } else {
122 ANetNode * NN = 0; 123 ANetNode * NN = 0;
123 ANetNodeInstance* NNI = 0; 124 ANetNodeInstance* NNI = 0;
124 if( S.startsWith( "nodetype " ) ) { 125 if( S.startsWith( "nodetype " ) ) {
125 S = S.mid( 9, S.length()-9 ); 126 S = S.mid( 9, S.length()-9 );
126 S = deQuote(S); 127 S = deQuote(S);
127 // try to find netnode 128 // try to find netnode
128 NN = NSResources->findNetNode( S ); 129 NN = NSResources->findNetNode( S );
129 } else { 130 } else {
130 // try to find instance 131 // try to find instance
131 NNI = NSResources->createNodeInstance( S ); 132 NNI = NSResources->createNodeInstance( S );
132 } 133 }
133 134
134 if( NN == 0 && NNI == 0 ) { 135 if( NN == 0 && NNI == 0 ) {
135 LeftOvers.append( Line ); 136 LeftOvers.append( Line );
136 } 137 do {
138 Line = TS.readLine();
139 // store even delimiter
140 LeftOvers.append( Line );
141 } while ( ! Line.isEmpty() );
142
143 //next section
144 continue;
145 }
137 146
147 // read entries of this section
138 do { 148 do {
139 S = Line = TS.readLine(); 149 S = Line = TS.readLine();
140 150
141 if( NN || NNI ) { 151 if( S.isEmpty() ) {
142 if( S.isEmpty() ) { 152 // empty line
143 // empty line 153 break;
144 break; 154 }
145 } 155 idx = S.find( '=' );
146 idx = S.find( '=' ); 156 if( idx > 0 ) {
147 if( idx > 0 ) { 157 Attr = S.left( idx );
148 Attr = S.left( idx ); 158 Value = S.mid( idx+1, S.length() );
149 Value = S.mid( idx+1, S.length() ); 159 } else {
150 } else { 160 Value="";
151 Value=""; 161 Attr = S;
152 Attr = S; 162 }
153 }
154 163
155 Value.stripWhiteSpace(); 164 Value.stripWhiteSpace();
156 Attr.stripWhiteSpace(); 165 Attr.stripWhiteSpace();
157 Attr.lower(); 166 Attr.lower();
158 // dequote Attr 167 // dequote Attr
159 Value = deQuote(Value); 168 Value = deQuote(Value);
160 169
161 if( NN ) { 170 if( NN ) {
162 // set the attribute 171 // set the attribute
163 NN->setAttribute( Attr, Value ); 172 NN->setAttribute( Attr, Value );
164 } else {
165 // set the attribute
166 NNI->setAttribute( Attr, Value );
167 }
168 } else { 173 } else {
169 LeftOvers.append( Line ); 174 // set the attribute
170 // add empty line too as delimiter 175 NNI->setAttribute( Attr, Value );
171 if( S.isEmpty() ) {
172 // empty line
173 break;
174 }
175 } 176 }
176 } while( 1 ); 177 } while( 1 );
177 178
178 if( NNI ) { 179 if( NNI ) {
179 // loading from file -> exists 180 // loading from file -> exists
180 Log( ( "NodeInstance %s : %p\n", NNI->name(), NNI )); 181 Log( ( "NodeInstance %s : %p\n", NNI->name(), NNI ));
181 NNI->setNew( FALSE ); 182 NNI->setNew( FALSE );
182 NSResources->addNodeInstance( NNI ); 183 NSResources->addNodeInstance( NNI );
183 } 184 }
185
184 if( NN ) { 186 if( NN ) {
185 Log( ( "Node %s : %p\n", NN->name(), NN ) ); 187 Log( ( "Node %s : %p\n", NN->name(), NN ) );
186 } 188 }
187 } 189 }
188 } 190 }
189 191
190 } while( 0 ); 192 } while( 0 );
191 193
192} 194}
193 195
194QString NetworkSettingsData::saveSettings( void ) { 196QString NetworkSettingsData::saveSettings( void ) {
195 QString ErrS = ""; 197 QString ErrS = "";
196 198
197 if( ! isModified() ) 199 if( ! isModified() )
198 return ErrS; 200 return ErrS;
199 201
200 QString S; 202 QString S;
201 QFile F( CfgFile + ".bup" ); 203 QFile F( CfgFile + ".bup" );
202 204
203 Log( ( "Saving settings to %s\n", CfgFile.latin1() )); 205 Log( ( "Saving settings to %s\n", CfgFile.latin1() ));
204 if( ! F.open( IO_WriteOnly | IO_Truncate ) ) { 206 if( ! F.open( IO_WriteOnly | IO_Truncate ) ) {
205 ErrS = qApp->translate( "NetworkSettings", 207 ErrS = qApp->translate( "NetworkSettings",
206 "<p>Could not save setup to \"%1\" !</p>" ). 208 "<p>Could not save setup to \"%1\" !</p>" ).
207 arg(CfgFile); 209 arg(CfgFile);
208 // problem 210 // problem
209 return ErrS; 211 return ErrS;
210 } 212 }
211 213
212 QTextStream TS( &F ); 214 QTextStream TS( &F );
213 215
214 // save leftovers
215 for ( QStringList::Iterator it = LeftOvers.begin();
216 it != LeftOvers.end(); ++it ) {
217 TS << (*it) << endl;
218 }
219
220 // save global configs 216 // save global configs
221 for( QDictIterator<NetNode_t> it( NSResources->netNodes() ); 217 for( QDictIterator<ANetNode> it( NSResources->netNodes() );
222 it.current(); 218 it.current();
223 ++it ) { 219 ++it ) {
224 TS << "[nodetype " 220 TS << "[nodetype "
225 << quote( QString( it.current()->NetNode->name() ) ) 221 << quote( QString( it.current()->name() ) )
226 << "]" 222 << "]"
227 << endl; 223 << endl;
228 224
229 it.current()->NetNode->saveAttributes( TS ); 225 it.current()->saveAttributes( TS );
230 TS << endl; 226 TS << endl;
231 } 227 }
232 228
229 // save leftovers
230 for ( QStringList::Iterator it = LeftOvers.begin();
231 it != LeftOvers.end(); ++it ) {
232 TS << (*it) << endl;
233 }
234
235 // save all netnode instances
236 { ANetNodeInstance * NNI;
237 for( QDictIterator<ANetNodeInstance> nit(
238 NSResources->netNodeInstances());
239 nit.current();
240 ++nit ) {
241 // header
242 NNI = nit.current();
243 TS << '['
244 << QString(NNI->nodeClass()->name())
245 << ']'
246 << endl;
247 NNI->saveAttributes( TS );
248 TS << endl;
249 }
250 }
251
252 // good connections
233 { Name2Connection_t & M = NSResources->connections(); 253 { Name2Connection_t & M = NSResources->connections();
234 ANetNodeInstance * NNI;
235 254
236 // for all connections 255 // for all connections
237 for( QDictIterator<NodeCollection> it(M); 256 for( QDictIterator<NodeCollection> it(M);
238 it.current(); 257 it.current();
239 ++it ) { 258 ++it ) {
240 // all nodes in those connections 259 TS << "[connection]" << endl;
241 for( QListIterator<ANetNodeInstance> nit(*(it.current())); 260 it.current()->save(TS);
242 nit.current(); 261 }
243 ++nit ) { 262 }
244 // header
245 NNI = nit.current();
246 TS << '['
247 << QString(NNI->nodeClass()->name())
248 << ']'
249 << endl;
250 NNI->saveAttributes( TS );
251 TS << endl;
252 }
253 263
264 // save dangling connections
265 { Name2Connection_t & M = NSResources->danglingConnections();
266
267 // for all connections
268 for( QDictIterator<NodeCollection> it(M);
269 it.current();
270 ++it ) {
254 TS << "[connection]" << endl; 271 TS << "[connection]" << endl;
255 it.current()->save(TS); 272 it.current()->save(TS);
256 } 273 }
257 } 274 }
258 275
259 QDir D("."); 276 QDir D(".");
260 D.rename( CfgFile + ".bup", CfgFile ); 277 D.rename( CfgFile + ".bup", CfgFile );
261 278
262 // 279 //
263 // proper files AND system files regenerated 280 // proper files AND system files regenerated
264 // 281 //
265 282
266 283
267 for( QDictIterator<NodeCollection> it(NSResources->connections()); 284 for( QDictIterator<NodeCollection> it(NSResources->connections());
268 it.current(); 285 it.current();
269 ++it ) { 286 ++it ) {
270 it.current()->setModified( 0 ); 287 it.current()->setModified( 0 );
271 } 288 }
272 289
273 return ErrS; 290 return ErrS;
274} 291}
275 292
276QString NetworkSettingsData::generateSettings( void ) { 293QString NetworkSettingsData::generateSettings( void ) {
277 QString S = ""; 294 QString S = "";
278 Name2SystemFile_t & SFM = NSResources->systemFiles(); 295 Name2SystemFile_t & SFM = NSResources->systemFiles();
279 Name2Connection_t & M = NSResources->connections(); 296 Name2Connection_t & M = NSResources->connections();
280 NodeCollection * NC; 297 NodeCollection * NC;
281 ANetNodeInstance * NNI; 298 ANetNodeInstance * NNI;
282 ANetNodeInstance * FirstWithData; 299 ANetNodeInstance * FirstWithData;
283 RuntimeInfo * CurDev; 300 RuntimeInfo * CurDev;
284 ANetNode * NN, * CurDevNN = 0; 301 ANetNode * NN, * CurDevNN = 0;
285 long NoOfDevs; 302 long NoOfDevs;
286 long DevCtStart; 303 long DevCtStart;
287 bool needToGenerate; 304 bool needToGenerate;
288 305
289 // regenerate system files 306 // regenerate system files
290 Log( ( "Generating settings from %s\n", CfgFile.latin1() )); 307 Log( ( "Generating settings from %s\n", CfgFile.latin1() ));
291 308
292 for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); 309 for( QDictIterator<ANetNode> nnit( NSResources->netNodes() );
293 nnit.current(); 310 nnit.current();
294 ++nnit ) { 311 ++nnit ) {
295 { QStringList SL; 312 bool FirstItem = 1;
296 bool FirstItem = 1; 313 bool Generated = 0;
297 bool Generated = 0;
298 314
299 CurDevNN = nnit.current()->NetNode; 315 CurDevNN = nnit.current();
316
317 { QStringList SL;
300 SL = CurDevNN->properFiles(); 318 SL = CurDevNN->properFiles();
301 319
302 for ( QStringList::Iterator it = SL.begin(); 320 for ( QStringList::Iterator it = SL.begin();
303 it != SL.end(); 321 it != SL.end();
304 ++it ) { 322 ++it ) {
305 323
306 Generated = 0; 324 Generated = 0;
307 FirstItem = 1; 325 FirstItem = 1;
308 // iterate over NNI's of this class 326 // iterate over NNI's of this class
309 for( QDictIterator<ANetNodeInstance> nniit( 327 for( QDictIterator<ANetNodeInstance> nniit(
310 NSResources->netNodeInstances() ); 328 NSResources->netNodeInstances() );
311 nniit.current(); 329 nniit.current();
312 ++nniit ) { 330 ++nniit ) {
313 if( nniit.current()->nodeClass() != CurDevNN ) 331 if( nniit.current()->nodeClass() != CurDevNN )
314 // different class 332 // different class
315 continue; 333 continue;
316 334
317 // open proper file 335 // open proper file
318 { SystemFile SF( (*it) ); 336 { SystemFile SF( (*it) );
319 337
320 if( ! CurDevNN->openFile( SF, nniit.current()) ) { 338 if( ! CurDevNN->openFile( SF, nniit.current()) ) {
321 // cannot open 339 // cannot open
322 S = qApp->translate( "NetworkSettings", 340 S = qApp->translate( "NetworkSettings",
323 "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). 341 "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ).
324 arg( (*it) ).arg( CurDevNN->name() ); 342 arg( (*it) ).arg( CurDevNN->name() );
325 return S; 343 return S;
326 } 344 }
327 345
328 if( ! SF.open() ) { 346 if( ! SF.open() ) {
329 S = qApp->translate( "NetworkSettings", 347 S = qApp->translate( "NetworkSettings",
330 "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). 348 "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ).
331 arg( (*it) ).arg( CurDevNN->name() ); 349 arg( (*it) ).arg( CurDevNN->name() );
332 return S; 350 return S;
333 } 351 }
334 352
335 // preamble on first 353 // preamble on first
336 if( FirstItem ) { 354 if( FirstItem ) {
337 if( CurDevNN->generatePreamble( SF ) == 2 ) { 355 if( CurDevNN->generatePreamble( SF ) == 2 ) {
338 S = qApp->translate( "NetworkSettings", 356 S = qApp->translate( "NetworkSettings",
339 "<p>Error in section \"preamble\" for proper file \"%1\" and node \"%2\"</p>" ). 357 "<p>Error in section \"preamble\" for proper file \"%1\" and node \"%2\"</p>" ).
340 arg( (*it) ). 358 arg( (*it) ).
341 arg( CurDevNN->name() ); 359 arg( CurDevNN->name() );
342 return S; 360 return S;
343 } 361 }
344 } 362 }
345 FirstItem = 0; 363 FirstItem = 0;
346 Generated = 1; 364 Generated = 1;
347 365
@@ -350,126 +368,126 @@ QString NetworkSettingsData::generateSettings( void ) {
350 S = qApp->translate( "NetworkSettings", 368 S = qApp->translate( "NetworkSettings",
351 "<p>Error in section for node \"%1\" for proper file \"%2\" and node class \"%3\"</p>" ). 369 "<p>Error in section for node \"%1\" for proper file \"%2\" and node class \"%3\"</p>" ).
352 arg( nniit.current()->name() ). 370 arg( nniit.current()->name() ).
353 arg( (*it) ). 371 arg( (*it) ).
354 arg( CurDevNN->name() ); 372 arg( CurDevNN->name() );
355 return S; 373 return S;
356 } 374 }
357 } 375 }
358 } 376 }
359 377
360 if( Generated ) { 378 if( Generated ) {
361 SystemFile SF( (*it) ); 379 SystemFile SF( (*it) );
362 380
363 if( CurDevNN->openFile( SF, 0 ) && 381 if( CurDevNN->openFile( SF, 0 ) &&
364 ! SF.path().isEmpty() 382 ! SF.path().isEmpty()
365 ) { 383 ) {
366 384
367 if( ! SF.open() ) { 385 if( ! SF.open() ) {
368 S = qApp->translate( "NetworkSettings", 386 S = qApp->translate( "NetworkSettings",
369 "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). 387 "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ).
370 arg( (*it) ).arg( CurDevNN->name() ); 388 arg( (*it) ).arg( CurDevNN->name() );
371 return S; 389 return S;
372 } 390 }
373 391
374 if( CurDevNN->generatePostamble( SF ) == 2 ) { 392 if( CurDevNN->generatePostamble( SF ) == 2 ) {
375 S = qApp->translate( "NetworkSettings", 393 S = qApp->translate( "NetworkSettings",
376 "<p>Error in section \"postamble\" for proper file \"%1\" and node \"%2\"</p>" ). 394 "<p>Error in section \"postamble\" for proper file \"%1\" and node \"%2\"</p>" ).
377 arg( (*it) ). 395 arg( (*it) ).
378 arg( CurDevNN->name() ); 396 arg( CurDevNN->name() );
379 return S; 397 return S;
380 } 398 }
381 } // no postamble 399 } // no postamble
382 } 400 }
383 } 401 }
384 } 402 }
385 } 403 }
386 404
387 // 405 //
388 // generate all registered files 406 // generate all registered files
389 // 407 //
390 for( QDictIterator<SystemFile> sfit(SFM); 408 for( QDictIterator<SystemFile> sfit(SFM);
391 sfit.current(); 409 sfit.current();
392 ++sfit ) { 410 ++sfit ) {
393 SystemFile * SF; 411 SystemFile * SF;
394 412
395 SF = sfit.current(); 413 SF = sfit.current();
396 414
397 // reset all 415 // reset all
398 for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); 416 for( QDictIterator<ANetNode> nnit( NSResources->netNodes() );
399 nnit.current(); 417 nnit.current();
400 ++nnit ) { 418 ++nnit ) {
401 nnit.current()->NetNode->setDone(0); 419 nnit.current()->setDone(0);
402 } 420 }
403 421
404 for( QDictIterator<ANetNodeInstance> nniit( 422 for( QDictIterator<ANetNodeInstance> nniit(
405 NSResources->netNodeInstances() ); 423 NSResources->netNodeInstances() );
406 nniit.current(); 424 nniit.current();
407 ++nniit ) { 425 ++nniit ) {
408 nniit.current()->setDone(0); 426 nniit.current()->setDone(0);
409 } 427 }
410 428
411 for( QDictIterator<NodeCollection> ncit(M); 429 for( QDictIterator<NodeCollection> ncit(M);
412 ncit.current(); 430 ncit.current();
413 ++ncit ) { 431 ++ncit ) {
414 ncit.current()->setDone(0); 432 ncit.current()->setDone(0);
415 } 433 }
416 434
417 Log( ( "Generating system file %s\n", SF->name().latin1() )); 435 Log( ( "Generating system file %s\n", SF->name().latin1() ));
418 436
419 needToGenerate = 0; 437 needToGenerate = 0;
420 438
421 // are there netnodes that have instances and need 439 // are there netnodes that have instances and need
422 // to write data in this system file ? 440 // to write data in this system file ?
423 for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); 441 for( QDictIterator<ANetNode> nnit( NSResources->netNodes() );
424 ! needToGenerate && nnit.current(); 442 ! needToGenerate && nnit.current();
425 ++nnit ) { 443 ++nnit ) {
426 444
427 NN = nnit.current()->NetNode; 445 NN = nnit.current();
428 446
429 if( NN->hasDataForFile( *SF ) ) { 447 if( NN->hasDataForFile( *SF ) ) {
430 // netnode can have data 448 // netnode can have data
431 449
432 // are there instances of this node ? 450 // are there instances of this node ?
433 for( QDictIterator<ANetNodeInstance> nniit( 451 for( QDictIterator<ANetNodeInstance> nniit(
434 NSResources->netNodeInstances() ); 452 NSResources->netNodeInstances() );
435 ! needToGenerate && nniit.current(); 453 ! needToGenerate && nniit.current();
436 ++nniit ) { 454 ++nniit ) {
437 if( nniit.current()->nodeClass() == NN ) { 455 if( nniit.current()->nodeClass() == NN ) {
438 // yes 456 // yes
439 Log(("Node %s has data\n", 457 Log(("Node %s has data\n",
440 nniit.current()->name() )); 458 nniit.current()->name() ));
441 needToGenerate = 1; 459 needToGenerate = 1;
442 break; 460 break;
443 } 461 }
444 } 462 }
445 } 463 }
446 } 464 }
447 465
448 if( ! needToGenerate ) { 466 if( ! needToGenerate ) {
449 // no instances found that might need to write data 467 // no instances found that might need to write data
450 // in this systemfile 468 // in this systemfile
451 Log(("No nodes for systemfile %s\n", SF->name().latin1() )); 469 Log(("No nodes for systemfile %s\n", SF->name().latin1() ));
452 continue; 470 continue;
453 } 471 }
454 472
455 // ok generate this system file 473 // ok generate this system file
456 if( ! SF->open() ) { 474 if( ! SF->open() ) {
457 S = qApp->translate( "NetworkSettings", 475 S = qApp->translate( "NetworkSettings",
458 "<p>Cannot open system file \"%1\"</p>" ). 476 "<p>Cannot open system file \"%1\"</p>" ).
459 arg( SF->name() ); 477 arg( SF->name() );
460 return S; 478 return S;
461 } 479 }
462 480
463 // global presection for this system file 481 // global presection for this system file
464 if( ! SF->preSection() ) { 482 if( ! SF->preSection() ) {
465 S = qApp->translate( "NetworkSettings", 483 S = qApp->translate( "NetworkSettings",
466 "<p>Error in section \"Preamble\" for file \"%1\"</p>" ). 484 "<p>Error in section \"Preamble\" for file \"%1\"</p>" ).
467 arg( SF->name() ); 485 arg( SF->name() );
468 return S; 486 return S;
469 } 487 }
470 488
471 // find connections that want to write to this file 489 // find connections that want to write to this file
472 for( QDictIterator<NodeCollection> ncit(M); 490 for( QDictIterator<NodeCollection> ncit(M);
473 ncit.current(); 491 ncit.current();
474 ++ncit ) { 492 ++ncit ) {
475 493
diff --git a/noncore/settings/networksettings2/ppp/ppp_NN.cpp b/noncore/settings/networksettings2/ppp/ppp_NN.cpp
index bd13ab9..8c15e9c 100644
--- a/noncore/settings/networksettings2/ppp/ppp_NN.cpp
+++ b/noncore/settings/networksettings2/ppp/ppp_NN.cpp
@@ -1,100 +1,83 @@
1#include <qfile.h> 1#include <qfile.h>
2#include <resources.h> 2#include <resources.h>
3#include <qtextstream.h> 3#include <qtextstream.h>
4#include "ppp_NN.h" 4#include "ppp_NN.h"
5#include "ppp_NNI.h" 5#include "ppp_NNI.h"
6 6
7#ifndef MYPLUGIN
8
9#include "netnodeinterface.h" 7#include "netnodeinterface.h"
10 8
11#endif
12
13QStringList * PPPNetNode::ProperFiles = 0; 9QStringList * PPPNetNode::ProperFiles = 0;
14 10
15static const char * PPPNeeds[] = 11static const char * PPPNeeds[] =
16 { "modem", 12 { "modem",
17 0 13 0
18 }; 14 };
19 15
20static const char * PPPProvides[] = 16static const char * PPPProvides[] =
21 { "connection", 17 { "connection",
22 0 18 0
23 }; 19 };
24 20
25/** 21/**
26 * Constructor, find all of the possible interfaces 22 * Constructor, find all of the possible interfaces
27 */ 23 */
28PPPNetNode::PPPNetNode() : ANetNode(tr("PPP Connection")) { 24PPPNetNode::PPPNetNode() : ANetNode(tr("PPP Connection")) {
29 25
30 NSResources->addSystemFile( 26 NSResources->addSystemFile(
31 "pap-secrets", "/etc/ppp/pap-secrets", 0 ); 27 "pap-secrets", "/etc/ppp/pap-secrets", 0 );
32 NSResources->addSystemFile( 28 NSResources->addSystemFile(
33 "chap-secrets", "/etc/ppp/chap-secrets", 0 ); 29 "chap-secrets", "/etc/ppp/chap-secrets", 0 );
34} 30}
35 31
36/** 32/**
37 * Delete any interfaces that we own. 33 * Delete any interfaces that we own.
38 */ 34 */
39PPPNetNode::~PPPNetNode(){ 35PPPNetNode::~PPPNetNode(){
40} 36}
41 37
42const QString PPPNetNode::nodeDescription(){ 38const QString PPPNetNode::nodeDescription(){
43 return tr("\ 39 return tr("\
44<p>Sets up IP using PPP.</p>\ 40<p>Sets up IP using PPP.</p>\
45<p>Use this for dialup devices or serial setups</p>\ 41<p>Use this for dialup devices or serial setups</p>\
46" 42"
47); 43);
48} 44}
49 45
50ANetNodeInstance * PPPNetNode::createInstance( void ) { 46ANetNodeInstance * PPPNetNode::createInstance( void ) {
51 return new APPP( this ); 47 return new APPP( this );
52} 48}
53 49
54const char ** PPPNetNode::needs( void ) { 50const char ** PPPNetNode::needs( void ) {
55 return PPPNeeds; 51 return PPPNeeds;
56} 52}
57 53
58const char ** PPPNetNode::provides( void ) { 54const char ** PPPNetNode::provides( void ) {
59 return PPPProvides; 55 return PPPProvides;
60} 56}
61 57
62QStringList PPPNetNode::properFiles( void ) { 58QStringList PPPNetNode::properFiles( void ) {
63 QStringList SL; 59 QStringList SL;
64 SL << "peers" << "chatscripts"; 60 SL << "peers" << "chatscripts";
65 return SL; 61 return SL;
66} 62}
67 63
68// need to generate : 64// need to generate :
69// /etc/ppp/pap-secrets 65// /etc/ppp/pap-secrets
70// /etc/ppp/pap-secrets 66// /etc/ppp/pap-secrets
71bool PPPNetNode::hasDataForFile( SystemFile & S ) { 67bool PPPNetNode::hasDataForFile( SystemFile & S ) {
72 return S.name() == "pap-secrets" || 68 return S.name() == "pap-secrets" ||
73 S.name() == "chap-secrets" ; 69 S.name() == "chap-secrets" ;
74} 70}
75 71
76QString PPPNetNode::genNic( long NicNr ) { 72QString PPPNetNode::genNic( long NicNr ) {
77 QString S; 73 QString S;
78 return S.sprintf( "ppp%ld", NicNr ); 74 return S.sprintf( "ppp%ld", NicNr );
79} 75}
80 76
81void PPPNetNode::setSpecificAttribute( QString & , QString & ) { 77void PPPNetNode::setSpecificAttribute( QString & , QString & ) {
82} 78}
83 79
84void PPPNetNode::saveSpecificAttribute( QTextStream & ) { 80void PPPNetNode::saveSpecificAttribute( QTextStream & ) {
85} 81}
86 82
87#ifdef MYPLUGIN 83OPIE_NS2_PLUGIN( NetNodeInterface_T<PPPNetNode> )
88
89extern "C" {
90void create_plugin( QList<ANetNode> & PNN ) {
91 PNN.append( new PPPNetNode() );
92}
93
94#else
95
96OPIE_NS2_PLUGIN( NetNodeInterface<PPPNetNode> )
97
98#endif
99
100}
diff --git a/noncore/settings/networksettings2/profile/profile_NN.cpp b/noncore/settings/networksettings2/profile/profile_NN.cpp
index 6028ea5..1e6912e 100644
--- a/noncore/settings/networksettings2/profile/profile_NN.cpp
+++ b/noncore/settings/networksettings2/profile/profile_NN.cpp
@@ -1,75 +1,58 @@
1#include <resources.h> 1#include <resources.h>
2#include "profile_NN.h" 2#include "profile_NN.h"
3#include "profile_NNI.h" 3#include "profile_NNI.h"
4 4
5#ifndef MYPLUGIN
6
7#include "netnodeinterface.h" 5#include "netnodeinterface.h"
8 6
9#endif
10
11static const char * ProfileNeeds[] = 7static const char * ProfileNeeds[] =
12 { "connection", 8 { "connection",
13 0 9 0
14 }; 10 };
15static const char * ProfileProvides[] = 11static const char * ProfileProvides[] =
16 { "fullsetup", 12 { "fullsetup",
17 0 13 0
18 }; 14 };
19 15
20/** 16/**
21 * Constructor, find all of the possible interfaces 17 * Constructor, find all of the possible interfaces
22 */ 18 */
23ProfileNetNode::ProfileNetNode() : ANetNode( tr("Regular connection profile")) { 19ProfileNetNode::ProfileNetNode() : ANetNode( tr("Regular connection profile")) {
24 20
25 NSResources->addSystemFile( 21 NSResources->addSystemFile(
26 "interfaces", "/etc/network/interfaces", 1 ); 22 "interfaces", "/etc/network/interfaces", 1 );
27 23
28} 24}
29 25
30/** 26/**
31 * Delete any interfaces that we own. 27 * Delete any interfaces that we own.
32 */ 28 */
33ProfileNetNode::~ProfileNetNode(){ 29ProfileNetNode::~ProfileNetNode(){
34} 30}
35 31
36const QString ProfileNetNode::nodeDescription(){ 32const QString ProfileNetNode::nodeDescription(){
37 return tr("\ 33 return tr("\
38<p>Define use of an IP connection.</p>\ 34<p>Define use of an IP connection.</p>\
39<p>Configure if and when this connection needs to be established</p>\ 35<p>Configure if and when this connection needs to be established</p>\
40" 36"
41); 37);
42} 38}
43 39
44ANetNodeInstance * ProfileNetNode::createInstance( void ) { 40ANetNodeInstance * ProfileNetNode::createInstance( void ) {
45 return new AProfile( this ); 41 return new AProfile( this );
46} 42}
47 43
48const char ** ProfileNetNode::needs( void ) { 44const char ** ProfileNetNode::needs( void ) {
49 return ProfileNeeds; 45 return ProfileNeeds;
50} 46}
51 47
52const char ** ProfileNetNode::provides( void ) { 48const char ** ProfileNetNode::provides( void ) {
53 return ProfileProvides; 49 return ProfileProvides;
54} 50}
55 51
56void ProfileNetNode::setSpecificAttribute( QString & , QString & ) { 52void ProfileNetNode::setSpecificAttribute( QString & , QString & ) {
57} 53}
58 54
59void ProfileNetNode::saveSpecificAttribute( QTextStream & ) { 55void ProfileNetNode::saveSpecificAttribute( QTextStream & ) {
60} 56}
61 57
62#ifdef MYPLUGIN 58OPIE_NS2_PLUGIN( NetNodeInterface_T<ProfileNetNode> )
63
64extern "C" {
65void create_plugin( QList<ANetNode> & PNN ) {
66 PNN.append( new ProfileNetNode() );
67}
68
69#else
70
71OPIE_NS2_PLUGIN( NetNodeInterface<ProfileNetNode> )
72
73#endif
74
75}
diff --git a/noncore/settings/networksettings2/usb/usb_NN.cpp b/noncore/settings/networksettings2/usb/usb_NN.cpp
index 9c07b82..6d90ae0 100644
--- a/noncore/settings/networksettings2/usb/usb_NN.cpp
+++ b/noncore/settings/networksettings2/usb/usb_NN.cpp
@@ -1,77 +1,60 @@
1#include <resources.h> 1#include <resources.h>
2#include "usb_NN.h" 2#include "usb_NN.h"
3#include "usb_NNI.h" 3#include "usb_NNI.h"
4 4
5#ifndef MYPLUGIN
6
7#include "netnodeinterface.h" 5#include "netnodeinterface.h"
8 6
9#endif
10
11static const char * USBNeeds[] = 7static const char * USBNeeds[] =
12 { 0 8 { 0
13 }; 9 };
14 10
15static const char * USBProvides[] = 11static const char * USBProvides[] =
16 { "device", 12 { "device",
17 0 13 0
18 }; 14 };
19 15
20/** 16/**
21 * Constructor, find all of the possible interfaces 17 * Constructor, find all of the possible interfaces
22 */ 18 */
23USBNetNode::USBNetNode() : ANetNode(tr("USB Cable Connect")) { 19USBNetNode::USBNetNode() : ANetNode(tr("USB Cable Connect")) {
24 NSResources->addSystemFile( 20 NSResources->addSystemFile(
25 "interfaces", "/etc/network/interfaces", 1 ); 21 "interfaces", "/etc/network/interfaces", 1 );
26} 22}
27 23
28/** 24/**
29 * Delete any interfaces that we own. 25 * Delete any interfaces that we own.
30 */ 26 */
31USBNetNode::~USBNetNode(){ 27USBNetNode::~USBNetNode(){
32} 28}
33 29
34const QString USBNetNode::nodeDescription(){ 30const QString USBNetNode::nodeDescription(){
35 return tr("\ 31 return tr("\
36<p>Configure Ethernet over USB.</p>\ 32<p>Configure Ethernet over USB.</p>\
37<p>Use this for a computer to computer USB cable connection</p>\ 33<p>Use this for a computer to computer USB cable connection</p>\
38" 34"
39); 35);
40} 36}
41 37
42ANetNodeInstance * USBNetNode::createInstance( void ) { 38ANetNodeInstance * USBNetNode::createInstance( void ) {
43 return new AUSB( this ); 39 return new AUSB( this );
44} 40}
45 41
46const char ** USBNetNode::needs( void ) { 42const char ** USBNetNode::needs( void ) {
47 return USBNeeds; 43 return USBNeeds;
48} 44}
49 45
50const char ** USBNetNode::provides( void ) { 46const char ** USBNetNode::provides( void ) {
51 return USBProvides; 47 return USBProvides;
52} 48}
53 49
54QString USBNetNode::genNic( long ) { 50QString USBNetNode::genNic( long ) {
55 return QString( "usbf" ); 51 return QString( "usbf" );
56} 52}
57 53
58void USBNetNode::setSpecificAttribute( QString & , QString & ) { 54void USBNetNode::setSpecificAttribute( QString & , QString & ) {
59} 55}
60 56
61void USBNetNode::saveSpecificAttribute( QTextStream & ) { 57void USBNetNode::saveSpecificAttribute( QTextStream & ) {
62} 58}
63 59
64#ifdef MYPLUGIN 60OPIE_NS2_PLUGIN( NetNodeInterface_T<USBNetNode> )
65
66extern "C" {
67void create_plugin( QList<ANetNode> & PNN ) {
68 PNN.append( new USBNetNode() );
69}
70
71#else
72
73OPIE_NS2_PLUGIN( NetNodeInterface<USBNetNode> )
74
75#endif
76
77}
diff --git a/noncore/settings/networksettings2/usb/usbrun.cpp b/noncore/settings/networksettings2/usb/usbrun.cpp
index 0a46642..eb439c1 100644
--- a/noncore/settings/networksettings2/usb/usbrun.cpp
+++ b/noncore/settings/networksettings2/usb/usbrun.cpp
@@ -1,124 +1,119 @@
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
7State_t USBRun::detectState( void ) { 7State_t USBRun::detectState( void ) {
8
8 // unavailable : no card found 9 // unavailable : no card found
9 // available : card found and assigned to us or free 10 // available : card found and assigned to us or free
10 // up : card found and assigned to us and up 11 // up : card found and assigned to us and up
12
11 NodeCollection * NC = nodeCollection(); 13 NodeCollection * NC = nodeCollection();
12 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number()); 14 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number());
13 System & Sys = NSResources->system(); 15 System & Sys = NSResources->system();
14 InterfaceInfo * Run; 16 InterfaceInfo * Run;
15 QFile F( S ); 17 QFile F( S );
16 Log(("Detecting for %s\n", NC->name().latin1() )); 18 Log(("Detecting for %s\n", NC->name().latin1() ));
17 19
18 if( F.open( IO_ReadOnly ) ) { 20 if( F.open( IO_ReadOnly ) ) {
19 // could open file -> read interface and assign 21 // could open file -> read interface and assign
20 QString X; 22 QString X;
21 QTextStream TS(&F); 23 QTextStream TS(&F);
22 X = TS.readLine(); 24 X = TS.readLine();
23 Log(("%s exists\n", S.latin1() )); 25 Log(("%s exists\n", S.latin1() ));
24 // find interface 26 // find interface
25 if( handlesInterface( X ) ) { 27 if( handlesInterface( X ) ) {
26 for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); 28 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
27 It.current(); 29 It.current();
28 ++It ) { 30 ++It ) {
29 Run = It.current(); 31 Run = It.current();
30 if( X == Run->Name ) { 32 if( X == Run->Name ) {
31 NC->assignInterface( Run ); 33 NC->assignInterface( Run );
32 return IsUp; 34 return IsUp;
33 } 35 }
34 } 36 }
35 } 37 }
36 } 38 }
37 39
38 Log(("Assigned %p\n", NC->assignedInterface() )); 40 Log(("Assigned %p\n", NC->assignedInterface() ));
39 if( ( Run = NC->assignedInterface() ) ) { 41 if( ( Run = NC->assignedInterface() ) ) {
40 // we already have an interface assigned -> still present ? 42 // we already have an interface assigned -> still present ?
41 if( ! Run->IsUp ) { 43 if( ! Run->IsUp ) {
42 // usb is still free -> keep assignment 44 // usb is still free -> keep assignment
43 return Available; 45 return Available;
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 NC->assignInterface( 0 ); 50 NC->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 Log(("%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 // proper type, and Not UP -> free 68 // proper type, and Not UP -> free
67 return Off; 69 // usb cables are currently always available when requested
70 // until we can detect if we are plugged in
71 return Available;
68 } 72 }
69 } 73 }
70 74
71 return Unavailable; 75 return Unavailable;
72} 76}
73 77
74QString USBRun::setMyState( NodeCollection * NC, Action_t A, bool ) { 78QString USBRun::setMyState( NodeCollection * NC, Action_t A, bool ) {
75 79
76 // nothing needs to be done to 'activate' or 'deactivate' 80 // nothing needs to be done to 'activate' or 'deactivate'
77 // a cable 81 // a cable
78
79 // perhaps (later) we can figure out if the device is IN the
80 // cradle
81 if( A == Activate ) {
82 NC->setCurrentState( Available );
83 } else if ( A == Deactivate ) {
84 NC->setCurrentState( Unavailable );
85 }
86
87 return QString(); 82 return QString();
88} 83}
89 84
90// get interface that is free or assigned to us 85// get interface that is free or assigned to us
91InterfaceInfo * USBRun::getInterface( void ) { 86InterfaceInfo * USBRun::getInterface( void ) {
92 87
93 System & S = NSResources->system(); 88 System & S = NSResources->system();
94 InterfaceInfo * best = 0, * Run; 89 InterfaceInfo * best = 0, * Run;
95 QRegExp R( "usb[0-9abcdef]" ); 90 QRegExp R( "usb[0-9abcdef]" );
96 91
97 for( QDictIterator<InterfaceInfo> It(S.interfaces()); 92 for( QDictIterator<InterfaceInfo> It(S.interfaces());
98 It.current(); 93 It.current();
99 ++It ) { 94 ++It ) {
100 Run = It.current(); 95 Run = It.current();
101 if( handlesInterface( Run->Name ) && 96 if( handlesInterface( Run->Name ) &&
102 Run->CardType == ARPHRD_ETHER 97 Run->CardType == ARPHRD_ETHER
103 ) { 98 ) {
104 // this is a USB card 99 // this is a USB card
105 if( Run->assignedConnection() == netNode()->connection() ) { 100 if( Run->assignedConnection() == netNode()->connection() ) {
106 // assigned to us 101 // assigned to us
107 return Run; 102 return Run;
108 } else if( Run->assignedConnection() == 0 ) { 103 } else if( Run->assignedConnection() == 0 ) {
109 // free 104 // free
110 best = Run; 105 best = Run;
111 } 106 }
112 } 107 }
113 } 108 }
114 return best; // can be 0 109 return best; // can be 0
115} 110}
116 111
117bool USBRun::handlesInterface( const QString & S ) { 112bool USBRun::handlesInterface( const QString & S ) {
118 return Pat.match( S ) >= 0; 113 return Pat.match( S ) >= 0;
119} 114}
120 115
121bool USBRun::handlesInterface( InterfaceInfo * I ) { 116bool USBRun::handlesInterface( InterfaceInfo * I ) {
122 return handlesInterface( I->Name ); 117 return handlesInterface( I->Name );
123} 118}
124 119
diff --git a/noncore/settings/networksettings2/vpn/vpn_NN.cpp b/noncore/settings/networksettings2/vpn/vpn_NN.cpp
index 6dd5332..96e9df2 100644
--- a/noncore/settings/networksettings2/vpn/vpn_NN.cpp
+++ b/noncore/settings/networksettings2/vpn/vpn_NN.cpp
@@ -1,69 +1,52 @@
1#include "vpn_NN.h" 1#include "vpn_NN.h"
2#include "vpn_NNI.h" 2#include "vpn_NNI.h"
3 3
4#ifndef MYPLUGIN
5
6#include "netnodeinterface.h" 4#include "netnodeinterface.h"
7 5
8#endif
9
10static const char * VPNNeeds[] = 6static const char * VPNNeeds[] =
11 { 0 7 { 0
12 }; 8 };
13 9
14static const char * VPNProvides[] = 10static const char * VPNProvides[] =
15 { "connection", 11 { "connection",
16 0 12 0
17 }; 13 };
18/** 14/**
19 * Constructor, find all of the possible interfaces 15 * Constructor, find all of the possible interfaces
20 */ 16 */
21VPNNetNode::VPNNetNode() : ANetNode(tr("VPN Connection")) { 17VPNNetNode::VPNNetNode() : ANetNode(tr("VPN Connection")) {
22} 18}
23 19
24/** 20/**
25 * Delete any interfaces that we own. 21 * Delete any interfaces that we own.
26 */ 22 */
27VPNNetNode::~VPNNetNode(){ 23VPNNetNode::~VPNNetNode(){
28} 24}
29 25
30const QString VPNNetNode::nodeDescription(){ 26const QString VPNNetNode::nodeDescription(){
31 return tr("\ 27 return tr("\
32<p>Configure private IP connection.</p>\ 28<p>Configure private IP connection.</p>\
33<p>Defines Secure tunnels over non secure IP sessions</p>\ 29<p>Defines Secure tunnels over non secure IP sessions</p>\
34" 30"
35); 31);
36} 32}
37 33
38ANetNodeInstance * VPNNetNode::createInstance( void ) { 34ANetNodeInstance * VPNNetNode::createInstance( void ) {
39 return new AVPN( this ); 35 return new AVPN( this );
40} 36}
41 37
42const char ** VPNNetNode::needs( void ) { 38const char ** VPNNetNode::needs( void ) {
43 return VPNNeeds; 39 return VPNNeeds;
44} 40}
45 41
46const char ** VPNNetNode::provides( void ) { 42const char ** VPNNetNode::provides( void ) {
47 return VPNProvides; 43 return VPNProvides;
48} 44}
49 45
50void VPNNetNode::setSpecificAttribute( QString & , QString & ) { 46void VPNNetNode::setSpecificAttribute( QString & , QString & ) {
51} 47}
52 48
53void VPNNetNode::saveSpecificAttribute( QTextStream & ) { 49void VPNNetNode::saveSpecificAttribute( QTextStream & ) {
54} 50}
55 51
56#ifdef MYPLUGIN 52OPIE_NS2_PLUGIN( NetNodeInterface_T<VPNNetNode> )
57
58extern "C" {
59void create_plugin( QList<ANetNode> & PNN ) {
60 PNN.append( new VPNNetNode() );
61}
62
63#else
64
65OPIE_NS2_PLUGIN( NetNodeInterface<VPNNetNode> )
66
67#endif
68
69}
diff --git a/noncore/settings/networksettings2/wlan/wlan_NN.cpp b/noncore/settings/networksettings2/wlan/wlan_NN.cpp
index c56da06..f7745be 100644
--- a/noncore/settings/networksettings2/wlan/wlan_NN.cpp
+++ b/noncore/settings/networksettings2/wlan/wlan_NN.cpp
@@ -1,85 +1,68 @@
1#include <resources.h> 1#include <resources.h>
2#include "wlan_NN.h" 2#include "wlan_NN.h"
3#include "wlan_NNI.h" 3#include "wlan_NNI.h"
4 4
5#ifndef MYPLUGIN
6
7#include "netnodeinterface.h" 5#include "netnodeinterface.h"
8 6
9#endif
10
11static const char * WLanNeeds[] = 7static const char * WLanNeeds[] =
12 { 0 8 { 0
13 }; 9 };
14 10
15static const char * WLanProvides[] = 11static const char * WLanProvides[] =
16 { "device", 12 { "device",
17 0 13 0
18 }; 14 };
19 15
20/** 16/**
21 * Constructor, find all of the possible interfaces 17 * Constructor, find all of the possible interfaces
22 */ 18 */
23WLanNetNode::WLanNetNode() : ANetNode(tr("WLan Device")) { 19WLanNetNode::WLanNetNode() : ANetNode(tr("WLan Device")) {
24 NSResources->addSystemFile( 20 NSResources->addSystemFile(
25 "interfaces", "/etc/network/interfaces", 1 ); 21 "interfaces", "/etc/network/interfaces", 1 );
26 InstanceCount = 2; 22 InstanceCount = 2;
27} 23}
28 24
29/** 25/**
30 * Delete any interfaces that we own. 26 * Delete any interfaces that we own.
31 */ 27 */
32WLanNetNode::~WLanNetNode(){ 28WLanNetNode::~WLanNetNode(){
33} 29}
34 30
35const QString WLanNetNode::nodeDescription(){ 31const QString WLanNetNode::nodeDescription(){
36 return tr("\ 32 return tr("\
37<p>Configure Wi/Fi or WLan network cards.</p>\ 33<p>Configure Wi/Fi or WLan network cards.</p>\
38<p>Defines Wireless options for those cards</p>\ 34<p>Defines Wireless options for those cards</p>\
39" 35"
40); 36);
41} 37}
42 38
43ANetNodeInstance * WLanNetNode::createInstance( void ) { 39ANetNodeInstance * WLanNetNode::createInstance( void ) {
44 return new AWLan( this ); 40 return new AWLan( this );
45} 41}
46 42
47const char ** WLanNetNode::needs( void ) { 43const char ** WLanNetNode::needs( void ) {
48 return WLanNeeds; 44 return WLanNeeds;
49} 45}
50 46
51const char ** WLanNetNode::provides( void ) { 47const char ** WLanNetNode::provides( void ) {
52 return WLanProvides; 48 return WLanProvides;
53} 49}
54 50
55QString WLanNetNode::genNic( long nr ) { 51QString WLanNetNode::genNic( long nr ) {
56 QString S; 52 QString S;
57 return S.sprintf( "wlan%ld", nr ); 53 return S.sprintf( "wlan%ld", nr );
58} 54}
59 55
60void WLanNetNode::setSpecificAttribute( QString & A, QString & V ) { 56void WLanNetNode::setSpecificAttribute( QString & A, QString & V ) {
61 if( A == "interfacecount" ) { 57 if( A == "interfacecount" ) {
62 InstanceCount = V.toLong(); 58 InstanceCount = V.toLong();
63 } 59 }
64} 60}
65 61
66void WLanNetNode::saveSpecificAttribute( QTextStream & TS ) { 62void WLanNetNode::saveSpecificAttribute( QTextStream & TS ) {
67 TS << "interfacecount=" 63 TS << "interfacecount="
68 << InstanceCount 64 << InstanceCount
69 << endl; 65 << endl;
70} 66}
71 67
72#ifdef MYPLUGIN 68OPIE_NS2_PLUGIN( NetNodeInterface_T<WLanNetNode> )
73
74extern "C" {
75void create_plugin( QList<ANetNode> & PNN ) {
76 PNN.append( new WLanNetNode() );
77}
78
79#else
80
81OPIE_NS2_PLUGIN( NetNodeInterface<WLanNetNode> )
82
83#endif
84
85}