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,14 +1,10 @@ #include "bluetoothBNEP_NN.h" #include "bluetoothBNEP_NNI.h" #include "bluetoothRFCOMM_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - // // // BLUETOOTH PAN/NAP node // @@ -74,21 +70,6 @@ void BluetoothBNEPNetNode::saveSpecificAttribute( QTextStream & TS) { << InstanceCount << endl; } -#ifndef MYPLUGIN - -extern "C" { -// create plugin registers both BT functions -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new BluetoothBNEPNetNode() ); - PNN.append( new BluetoothRFCOMMNetNode() ); -} - -#else - typedef Opie::Core::MakeTypelist<BluetoothBNEPNetNode, BluetoothRFCOMMNetNode>::Result BluetoothTypes; -OPIE_NS2_PLUGIN( NetNodeInterface<BluetoothTypes> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<BluetoothTypes> ) 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,13 +1,9 @@ #include "cable_NN.h" #include "cable_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * CableNeeds[] = { 0 }; @@ -52,18 +48,5 @@ void CableNetNode::setSpecificAttribute( QString & , QString & ) { void CableNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new CableNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<CableNetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<CableNetNode> ) 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 @@ -320,13 +320,12 @@ void EditConnection::buildFullTree( void ) { Nodes_LV->setSelected( TheTop, TRUE ); // find all Nodes that are toplevel nodes -> ie provide // TCP/IP Connection - for( QDictIterator<NetNode_t> Iter(NSResources->netNodes()); + for( QDictIterator<ANetNode> Iter(NSResources->netNodes()); Iter.current(); ++Iter ) { - - NN = Iter.current()->NetNode; + NN = Iter.current(); if( ! NN->isToplevel() ) { continue; } 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 @@ -3,14 +3,10 @@ #include <netnode.h> #include "GPRS_NN.h" #include "GPRS_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * GPRSNeeds[] = { "GPRS", 0 }; @@ -78,18 +74,5 @@ QStringList GPRSNetNode::properFiles( void ) { SL << "extra"; return SL; } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new GPRSNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<GPRSNetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<GPRSNetNode> ) 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,13 +1,9 @@ #include "irda_NN.h" #include "irda_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * IRDANeeds[] = { 0 }; @@ -52,18 +48,5 @@ void IRDANetNode::setSpecificAttribute( QString & , QString & ) { void IRDANetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new IRDANetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<IRDANetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<IRDANetNode> ) 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,13 +1,9 @@ #include "lancard_NN.h" #include "lancard_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * LanCardNeeds[] = { 0 }; @@ -75,18 +71,5 @@ void LanCardNetNode::saveSpecificAttribute( QTextStream & TS) { << endl; } } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new LanCardNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<LanCardNetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<LanCardNetNode> ) 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,13 +1,9 @@ #include "modem_NN.h" #include "modem_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * ModemNeeds[] = { "line", 0 }; @@ -53,18 +49,5 @@ void ModemNetNode::setSpecificAttribute( QString & , QString & ) { void ModemNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new ModemNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<ModemNetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<ModemNetNode> ) 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 @@ -3,14 +3,10 @@ #include <netnode.h> #include "network_NN.h" #include "network_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * NetworkNeeds[] = { "device", 0 }; @@ -95,18 +91,5 @@ void NetworkNetNode::setSpecificAttribute( QString & , QString & ) { void NetworkNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new NetworkNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<NetworkNetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<NetworkNetNode> ) 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 @@ -236,9 +236,9 @@ void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { continue; // restart exec } // else new name // new name -> remove item NSResources->removeConnection( OldName ); - NSResources->addConnection( NC ); + NSResources->addConnection( NC, 0 ); } // else not changed // must add it here since change will trigger event Profiles_LB->changeItem( NC->devicePixmap(), @@ -247,9 +247,9 @@ void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { ); } else { // new item int ci = Profiles_LB->count(); - NSResources->addConnection( NC ); + NSResources->addConnection( NC, 0 ); NC->setNumber( NSResources->assignConnectionNumber() ); Profiles_LB->insertItem( NC->devicePixmap(), NC->name() ); Profiles_LB->setSelected( ci, TRUE ); } 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 @@ -140,29 +140,31 @@ NodeCollection::NodeCollection( void ) : QList<ANetNodeInstance>() { Name=""; IsNew = 1; CurrentState = Unchecked; AssignedInterface = 0; + Number = -1; + Done = 0; } -NodeCollection::NodeCollection( QTextStream & TS ) : +NodeCollection::NodeCollection( QTextStream & TS, bool & Dangling ) : QList<ANetNodeInstance>() { long idx; - bool InError = 0; QString S, A, N; + + Number = -1; + Done = 0; IsModified = 0; Index = -1; Name=""; IsNew = 0; AssignedInterface = 0; CurrentState = Unchecked; + Dangling = 0; // by default node collection is ok + do { S = TS.readLine(); if( S.isEmpty() ) { - if( InError ) { - // remove all nodes - clear(); - } // empty line break; } @@ -180,22 +182,25 @@ NodeCollection::NodeCollection( QTextStream & TS ) : setNumber( N.toLong() ); } else if( A == "node" ) { ANetNodeInstance * NNI = NSResources->findNodeInstance( N ); Log(( "Find node %s : %p\n", N.latin1(), NNI )); - if( NNI && ! InError ) { + if( NNI ) { append( NNI ); } else { // could not find a node type -> collection invalid - InError = 1; + Log(( "Node %s missing -> connection dangling\n", + N.latin1() )); + // create placeholder for this dangling NNI + NNI = new ErrorNNI( N ); + Dangling = 1; } } } while( 1 ); Log(( "Profile number %s : %d nodes\n", Name.latin1(), count() )); } - NodeCollection::~NodeCollection( void ) { } const QString & NodeCollection::description( void ) { @@ -228,24 +233,26 @@ ANetNodeInstance * NodeCollection::getToplevel( void ) { for( QListIterator<ANetNodeInstance> it(*this); it.current(); ++it ) { NNI = it.current(); - if( NNI->nodeClass()->isToplevel() ) - break; + if( NNI->nodeClass()->isToplevel() ) { + return NNI; + } } - return NNI; + return 0; } ANetNodeInstance * NodeCollection::findByName( const QString & S ) { ANetNodeInstance * NNI = 0; for( QListIterator<ANetNodeInstance> it(*this); it.current(); ++it ) { NNI = it.current(); - if( NNI->name() == S ) - break; + if( NNI->name() == S ) { + return NNI; + } } - return NNI; + return 0; } ANetNodeInstance * NodeCollection::findNext( ANetNodeInstance * NNI ) { ANetNodeInstance * NNNI; 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 @@ -318,14 +318,56 @@ protected : // connection to which this node belongs to NodeCollection * Connection; QString Description; bool IsModified; + // true if this nodeinstance was just created (and not + // loaded from file bool IsNew; int Done; static long InstanceCounter; }; +class ErrorNNI: public ANetNodeInstance { + +public: + + ErrorNNI( const QString & _Name ) : ANetNodeInstance( 0 ) { + setName( _Name.latin1() ); + } + + RuntimeInfo * runtime( void ) { + return 0; + } + + // create edit widget under parent + QWidget * edit( QWidget * parent ) { + return 0; + } + + // is given data acceptable + QString acceptable( void ) { + return QString(); + } + + // get data from GUI and store in node + void commit( void ) { + } + + // returns node specific data -> only useful for 'buddy' + void * data( void ) { + return 0; + } + +protected : + + void setSpecificAttribute( QString & , QString & ) { + } + + void saveSpecificAttribute( QTextStream & ) { + } +}; + class RuntimeInfo : public QObject { Q_OBJECT @@ -467,9 +509,9 @@ class NodeCollection : public QList<ANetNodeInstance> { public : NodeCollection( void ); - NodeCollection( QTextStream & TS ); + NodeCollection( QTextStream & TS, bool & Dangling ); ~NodeCollection( void ); inline int done( void ) { return Done; } @@ -584,11 +626,11 @@ private : // true if this collection was just created (and not // loaded from file bool IsNew; // index in listbox - int Index; + int Index; bool IsModified; - int Done; + int Done; InterfaceInfo * AssignedInterface; }; 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 @@ -77,10 +77,20 @@ struct NS2PrivateFactory<Opie::Core::Typelist<Node, Tail> > { } }; +class NetNodeInterface : public QUnknownInterface { + +public : + + virtual QRESULT queryInterface( const QUuid& uuid, + QUnknownInterface **iface ) = 0; + + virtual void create_plugin( QList<ANetNode> & PNN ) = 0; +}; + template<class Node> -struct NetNodeInterface : public QUnknownInterface { +struct NetNodeInterface_T : public NetNodeInterface { QRESULT queryInterface(const QUuid& uuid, QUnknownInterface **iface) { *iface = 0; @@ -106,10 +116,10 @@ struct NetNodeInterface : public QUnknownInterface { Q_REFCOUNT }; template<class Node, class Tail> -struct NetNodeInterface<Opie::Core::Typelist<Node, Tail> > - : public QUnknownInterface { +struct NetNodeInterface_T<Opie::Core::Typelist<Node, Tail> > + : public NetNodeInterface { QRESULT queryInterface( const QUuid& uuid, QUnknownInterface **iface) { @@ -124,9 +134,9 @@ struct NetNodeInterface<Opie::Core::Typelist<Node, Tail> > } void create_plugin( QList<ANetNode> & PNN ) { - NS2PrivateFactory<Opie::Core::Typelist<Node,Tail> >::createPlugin( PNN ); + NS2PrivateFactory<Opie::Core::Typelist<Node,Tail> >::createPlugins( PNN ); } Q_REFCOUNT 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 @@ -24,60 +24,16 @@ // single resources instance TheNSResources * _NSResources = 0; TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), - ConnectionsMap() { + ConnectionsMap(), DanglingConnectionsMap() { _NSResources = this; detectCurrentUser(); // load available netnodes -#ifdef MYPLUGIN - - findAvailableNetNodes(QPEApplication::qpeDir() + PLUGINDIR ); - - // compile provides and needs lists - { const char ** NeedsRun; - QDictIterator<NetNode_t> OuterIt( AllNodeTypes ); - bool Done; - - for ( ; OuterIt.current(); ++OuterIt ) { - // find needs list - ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList; - ANetNode::NetNodeList & NNL = *(NNLP); - - // must iterate this way to avoid duplication pointers - for ( QDictIterator<NetNode_t> InnerIt( AllNodeTypes ); - InnerIt.current(); ++InnerIt ) { - if( InnerIt.current() == OuterIt.current() ) - // avoid recursive - continue; - - const char ** Provides = InnerIt.current()->NetNode->provides(); - NeedsRun = OuterIt.current()->NetNode->needs(); - - for( ; *NeedsRun; NeedsRun ++ ) { - const char ** PRun; - PRun = Provides; - for( ; *PRun; PRun ++ ) { - if( strcmp( *PRun, *NeedsRun ) == 0 ) { - // inner provides what outer needs - NNL.resize( NNL.size() + 1 ); - NNL[NNL.size()-1] = InnerIt.current()->NetNode; - Done = 1; // break from 2 loops - break; - } - } - } - } - OuterIt.current()->NetNode->setAlternatives( NNLP ); - } - } - -#else - Plugins = 0; findAvailableNetNodes(); // compile provides and needs lists @@ -118,10 +74,8 @@ TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), OuterIt.current()->setAlternatives( NNLP ); } } -#endif - // define built in Node types to Description map addNodeType( "device", tr( "Network Device" ), tr( "<p>Devices that can handle IP packets</p>" ) ); addNodeType( "line", tr( "Character device" ), @@ -139,14 +93,12 @@ TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), } TheNSResources::~TheNSResources( void ) { -#ifndef MYPLUGINS if( Plugins ) { delete Plugins; delete PluginManager; } -#endif delete TheSystem; } @@ -178,101 +130,8 @@ void TheNSResources::busy( bool ) { } */ } -#ifdef MYPLUGIN -/** - * Load all modules that are found in the path - * @param path a directory that is scaned for any plugins that can be loaded - * and attempts to load them - */ -void TheNSResources::findAvailableNetNodes(const QString &path){ - - Log(("Locate plugins in %s\n", path.latin1() )); - QDir d(path); - if(!d.exists()) - return; - - QString lang = ::getenv("LANG"); - - // Don't want sym links - d.setFilter( QDir::Files | QDir::NoSymLinks ); - const QFileInfoList *list = d.entryInfoList(); - QFileInfoListIterator it( *list ); - QFileInfo *fi; - - while ( (fi=it.current()) ) { - - if( fi->fileName().contains(".so")){ - /* if loaded install translation */ - if( loadNetNode(path + "/" + fi->fileName()) ) { - Log(( "Loading plugin %s\n", fi->fileName().latin1())); - QTranslator *trans = new QTranslator(qApp); - QString fn = QPEApplication::qpeDir()+ - "/i18n/"+lang+"/"+ - fi->fileName().left( fi->fileName().find(".") )+ - ".qm"; - - if( trans->load( fn ) ) - qApp->installTranslator( trans ); - else - delete trans; - } else { - Log(( "Error loading plugin %s\n", fi->fileName().latin1())); - } - } - ++it; - } -} - -/** - * Attempt to load a function and resolve a function. - * @param pluginFileName - the name of the file in which to attempt to load - * @param resolveString - function pointer to resolve - * @return true of loading is successful - */ -bool TheNSResources::loadNetNode( - const QString &pluginFileName, const QString &resolveString){ - - QLibrary *lib = new QLibrary(pluginFileName); - void * res = lib->resolve(resolveString); - if( ! res ){ - delete lib; - return 0; - } - - GetNetNodeListFt_t getNetNodeList = (GetNetNodeListFt_t)res; - - // Try to get an object. - QList<ANetNode> PNN; - - getNetNodeList( PNN ); - if( PNN.isEmpty() ) { - delete lib; - return 0; - } - - ANetNode * NNP; - for( QListIterator<ANetNode> it(PNN); - it.current(); - ++it ) { - NetNode_t * NN; - - NNP = it.current(); - NN = new NetNode_t; - NN->NetNode = NNP; - NN->TheLibrary = lib; - NN->NodeCountInLib = PNN.count(); - - // store mapping - AllNodeTypes.insert( NN->NetNode->name(), NN ); - } - - return 1; -} - -#else - void TheNSResources::findAvailableNetNodes( void ){ Plugins = new OPluginLoader( "networksettings2" ); Plugins->setAutoDelete( true ); @@ -292,8 +151,9 @@ void TheNSResources::findAvailableNetNodes( void ){ } // Get All Plugins OPluginLoader::List allplugins = Plugins->filtered(); + QString lang = ::getenv("LANG"); for( OPluginLoader::List::Iterator it = allplugins.begin(); it != allplugins.end(); ++it ) { @@ -303,9 +163,9 @@ void TheNSResources::findAvailableNetNodes( void ){ Plugins->load<NetNodeInterface>( *it, IID_NetworkSettings2 ); if( ! interface ) { Log(( "Plugin %s from %s does not support proper interface\n", - it->name().latin1(), it->path().latin1() )); + (*it).name().latin1(), (*it).path().latin1() )); continue; } // add the nodes in this plugin to the dictionary @@ -314,25 +174,25 @@ void TheNSResources::findAvailableNetNodes( void ){ interface->create_plugin( PNN ); if( PNN.isEmpty() ) { Log(( "Plugin %s from %s does offer any nodes\n", - it->name().latin1(), it->path().latin1() )); + (*it).name().latin1(), (*it).path().latin1() )); delete interface; continue; } // merge this node with global node for( QListIterator<ANetNode> it(PNN); it.current(); ++it ) { - AllNodeTypes.insert( it->current()->name(), it->current() ); + AllNodeTypes.insert( it.current()->name(), it.current() ); } } // load the translation QTranslator *trans = new QTranslator(qApp); QString fn = QPEApplication::qpeDir()+ - "/i18n/"+lang+"/"+ it->name() + ".qm"; + "/i18n/"+lang+"/"+ (*it).name() + ".qm"; if( trans->load( fn ) ) qApp->installTranslator( trans ); else @@ -340,10 +200,8 @@ void TheNSResources::findAvailableNetNodes( void ){ } } -#endif - // used to find unique connection number int TheNSResources::assignConnectionNumber( void ) { bool found = 1; for( int trial = 0; ; trial ++ ) { @@ -386,11 +244,16 @@ const QString & TheNSResources::netNode2Name( const char * s ) { const QString & TheNSResources::netNode2Description( const char * s ) { return NodeTypeDescriptionMap[s]; } -void TheNSResources::addConnection( NodeCollection * NC ) { +void TheNSResources::addConnection( NodeCollection * NC, bool Dangling ) { ANetNodeInstance * NNI; - ConnectionsMap.insert( NC->name(), NC ); + if( Dangling ) { + DanglingConnectionsMap.insert( NC->name(), NC ); + } else { + ConnectionsMap.insert( NC->name(), NC ); + } + // add (new) nodes to NodeList for( QListIterator<ANetNodeInstance> it(*NC); it.current(); ++it ) { @@ -411,11 +274,17 @@ void TheNSResources::removeConnection( const QString & N ) { ANetNodeInstance * NNI; for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) { removeNodeInstance( NNI->name() ); } - ConnectionsMap.remove( N ); + if( ConnectionsMap.find( N ) ) { + ConnectionsMap.remove( N ); + } else { + DanglingConnectionsMap.remove( N ); + } + } +// dangling connections are filtered out NodeCollection * TheNSResources::findConnection( const QString & S ) { return ConnectionsMap[ S ]; } 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 @@ -37,23 +37,9 @@ public : int Gid; QArray<char *> EnvList; }; -#ifdef MYPLUGIN - -typedef struct NetNode_S { - ANetNode * NetNode; - QLibrary * TheLibrary; - long NodeCountInLib; -} NetNode_t; -typedef QDict<NetNode_t> Name2NetNode_t; - -#else - typedef QDict<ANetNode> Name2NetNode_t; - -#endif - typedef QDict<ANetNodeInstance > Name2Instance_t; typedef QDict<NodeCollection> Name2Connection_t; typedef QDict<SystemFile> Name2SystemFile_t; @@ -76,18 +62,11 @@ public : Name2NetNode_t & netNodes( void ) { return AllNodeTypes; } bool netNodeExists( const QString & X ) { return AllNodeTypes.find(X)!=0; } -#ifdef MYPLUGIN - ANetNode * findNetNode( const QString & N ) - { NetNode_t * NNT = AllNodeTypes.find(N); - return (NNT) ? NNT->NetNode : 0; - } -#else ANetNode * findNetNode( const QString & N ) { return AllNodeTypes.find(N); } -#endif // define new plugin (=node) void addNodeType( const QString & ID, const QString & LongName, const QString & Description ); @@ -98,23 +77,17 @@ public : const QString & P, bool KDI ); ANetNodeInstance * createNodeInstance( const QString & S ) - { ANetNodeInstance * NNI = 0; - printf( "Find node type %s\n", S.latin1() ); -#ifdef MYPLUGIN - NetNode_t * NNT = AllNodeTypes[S]; - if( ! NNT ) { - return 0; - } - NNI = NNT->NetNode->createInstance(); -#else - ANetNode * NNT = AllNodeTypes[S]; - if( ! NNT ) { + { ANetNode * NN = findNetNode( S ); + + Log(( "Find node type %s : %p\n", S.latin1(), NN )); + + if( NN == 0 ) + // type of this instance not found return 0; - } - NNI = NNT->createInstance(); -#endif + + ANetNodeInstance * NNI = NN->createInstance(); NNI->initialize(); return NNI; } @@ -129,14 +102,16 @@ public : const QString & netNode2Name( const char * Type ); const QString & netNode2Description( const char * Type ); - void addConnection( NodeCollection * NC ); + void addConnection( NodeCollection * NC, bool Dangling ); void removeConnection( const QString & N ); NodeCollection * findConnection( const QString & N ); NodeCollection * getConnection( int nr ); Name2Connection_t & connections( void ) { return ConnectionsMap; } + Name2Connection_t & danglingConnections( void ) + { return ConnectionsMap; } inline bool userKnown( void ) { return CurrentUser.known(); } CurrentQPEUser & currentUser( void ) @@ -146,20 +121,17 @@ private : void detectCurrentUser( void ); QString tr( const char * path ); -#ifdef MYPLUGIN - void findAvailableNetNodes( const QString &path ); - bool loadNetNode( - const QString &pluginFileName, - const QString &resolveString = "create_plugin"); -#else void findAvailableNetNodes( void ); -#endif QMap< QString, QString> NodeTypeNameMap; QMap< QString, QString> NodeTypeDescriptionMap; + // list of connections that are valid Name2Connection_t ConnectionsMap; + // list of connection configurations that are not valid + // e.g. because plugins are missing + Name2Connection_t DanglingConnectionsMap; System * TheSystem; Name2SystemFile_t SystemFiles; // all node type classes @@ -169,12 +141,10 @@ private : Name2Instance_t AllNodes; CurrentQPEUser CurrentUser; -#ifndef MYPLUGIN Opie::Core::OPluginLoader * Plugins; Opie::Core::OPluginManager * PluginManager; -#endif }; extern TheNSResources * _NSResources; 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 @@ -115,10 +115,11 @@ void NetworkSettingsData::loadSettings( void ) { } if( S == "connection" ) { // load connections -> collections of nodes - NodeCollection * NC = new NodeCollection( TS ); - NSResources->addConnection( NC ); + bool Dangling; + NodeCollection * NC = new NodeCollection( TS, Dangling ); + NSResources->addConnection( NC, Dangling ); } else { ANetNode * NN = 0; ANetNodeInstance* NNI = 0; if( S.startsWith( "nodetype " ) ) { @@ -132,47 +133,47 @@ void NetworkSettingsData::loadSettings( void ) { } if( NN == 0 && NNI == 0 ) { LeftOvers.append( Line ); - } + do { + Line = TS.readLine(); + // store even delimiter + LeftOvers.append( Line ); + } while ( ! Line.isEmpty() ); + + //next section + continue; + } + // read entries of this section do { S = Line = TS.readLine(); - if( NN || NNI ) { - if( S.isEmpty() ) { - // empty line - break; - } - idx = S.find( '=' ); - if( idx > 0 ) { - Attr = S.left( idx ); - Value = S.mid( idx+1, S.length() ); - } else { - Value=""; - Attr = S; - } + if( S.isEmpty() ) { + // empty line + break; + } + idx = S.find( '=' ); + if( idx > 0 ) { + Attr = S.left( idx ); + Value = S.mid( idx+1, S.length() ); + } else { + Value=""; + Attr = S; + } - Value.stripWhiteSpace(); - Attr.stripWhiteSpace(); - Attr.lower(); - // dequote Attr - Value = deQuote(Value); - - if( NN ) { - // set the attribute - NN->setAttribute( Attr, Value ); - } else { - // set the attribute - NNI->setAttribute( Attr, Value ); - } + Value.stripWhiteSpace(); + Attr.stripWhiteSpace(); + Attr.lower(); + // dequote Attr + Value = deQuote(Value); + + if( NN ) { + // set the attribute + NN->setAttribute( Attr, Value ); } else { - LeftOvers.append( Line ); - // add empty line too as delimiter - if( S.isEmpty() ) { - // empty line - break; - } + // set the attribute + NNI->setAttribute( Attr, Value ); } } while( 1 ); if( NNI ) { @@ -180,8 +181,9 @@ void NetworkSettingsData::loadSettings( void ) { Log( ( "NodeInstance %s : %p\n", NNI->name(), NNI )); NNI->setNew( FALSE ); NSResources->addNodeInstance( NNI ); } + if( NN ) { Log( ( "Node %s : %p\n", NN->name(), NN ) ); } } @@ -210,48 +212,63 @@ QString NetworkSettingsData::saveSettings( void ) { } QTextStream TS( &F ); - // save leftovers - for ( QStringList::Iterator it = LeftOvers.begin(); - it != LeftOvers.end(); ++it ) { - TS << (*it) << endl; - } - // save global configs - for( QDictIterator<NetNode_t> it( NSResources->netNodes() ); + for( QDictIterator<ANetNode> it( NSResources->netNodes() ); it.current(); ++it ) { TS << "[nodetype " - << quote( QString( it.current()->NetNode->name() ) ) + << quote( QString( it.current()->name() ) ) << "]" << endl; - it.current()->NetNode->saveAttributes( TS ); + it.current()->saveAttributes( TS ); TS << endl; } + // save leftovers + for ( QStringList::Iterator it = LeftOvers.begin(); + it != LeftOvers.end(); ++it ) { + TS << (*it) << endl; + } + + // save all netnode instances + { ANetNodeInstance * NNI; + for( QDictIterator<ANetNodeInstance> nit( + NSResources->netNodeInstances()); + nit.current(); + ++nit ) { + // header + NNI = nit.current(); + TS << '[' + << QString(NNI->nodeClass()->name()) + << ']' + << endl; + NNI->saveAttributes( TS ); + TS << endl; + } + } + + // good connections { Name2Connection_t & M = NSResources->connections(); - ANetNodeInstance * NNI; // for all connections for( QDictIterator<NodeCollection> it(M); it.current(); ++it ) { - // all nodes in those connections - for( QListIterator<ANetNodeInstance> nit(*(it.current())); - nit.current(); - ++nit ) { - // header - NNI = nit.current(); - TS << '[' - << QString(NNI->nodeClass()->name()) - << ']' - << endl; - NNI->saveAttributes( TS ); - TS << endl; - } + TS << "[connection]" << endl; + it.current()->save(TS); + } + } + // save dangling connections + { Name2Connection_t & M = NSResources->danglingConnections(); + + // for all connections + for( QDictIterator<NodeCollection> it(M); + it.current(); + ++it ) { TS << "[connection]" << endl; it.current()->save(TS); } } @@ -288,16 +305,17 @@ QString NetworkSettingsData::generateSettings( void ) { // regenerate system files Log( ( "Generating settings from %s\n", CfgFile.latin1() )); - for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); + for( QDictIterator<ANetNode> nnit( NSResources->netNodes() ); nnit.current(); ++nnit ) { - { QStringList SL; - bool FirstItem = 1; - bool Generated = 0; + bool FirstItem = 1; + bool Generated = 0; - CurDevNN = nnit.current()->NetNode; + CurDevNN = nnit.current(); + + { QStringList SL; SL = CurDevNN->properFiles(); for ( QStringList::Iterator it = SL.begin(); it != SL.end(); @@ -394,12 +412,12 @@ QString NetworkSettingsData::generateSettings( void ) { SF = sfit.current(); // reset all - for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); + for( QDictIterator<ANetNode> nnit( NSResources->netNodes() ); nnit.current(); ++nnit ) { - nnit.current()->NetNode->setDone(0); + nnit.current()->setDone(0); } for( QDictIterator<ANetNodeInstance> nniit( NSResources->netNodeInstances() ); @@ -419,13 +437,13 @@ QString NetworkSettingsData::generateSettings( void ) { needToGenerate = 0; // are there netnodes that have instances and need // to write data in this system file ? - for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); + for( QDictIterator<ANetNode> nnit( NSResources->netNodes() ); ! needToGenerate && nnit.current(); ++nnit ) { - NN = nnit.current()->NetNode; + NN = nnit.current(); if( NN->hasDataForFile( *SF ) ) { // netnode can have data 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 @@ -3,14 +3,10 @@ #include <qtextstream.h> #include "ppp_NN.h" #include "ppp_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - QStringList * PPPNetNode::ProperFiles = 0; static const char * PPPNeeds[] = { "modem", @@ -83,18 +79,5 @@ void PPPNetNode::setSpecificAttribute( QString & , QString & ) { void PPPNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new PPPNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<PPPNetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<PPPNetNode> ) 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,14 +1,10 @@ #include <resources.h> #include "profile_NN.h" #include "profile_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * ProfileNeeds[] = { "connection", 0 }; @@ -58,18 +54,5 @@ void ProfileNetNode::setSpecificAttribute( QString & , QString & ) { void ProfileNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new ProfileNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<ProfileNetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<ProfileNetNode> ) 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,14 +1,10 @@ #include <resources.h> #include "usb_NN.h" #include "usb_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * USBNeeds[] = { 0 }; @@ -60,18 +56,5 @@ void USBNetNode::setSpecificAttribute( QString & , QString & ) { void USBNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new USBNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<USBNetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<USBNetNode> ) 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 @@ -4,11 +4,13 @@ #include <resources.h> #include "usbrun.h" State_t USBRun::detectState( void ) { + // unavailable : no card found // available : card found and assigned to us or free // up : card found and assigned to us and up + NodeCollection * NC = nodeCollection(); QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number()); System & Sys = NSResources->system(); InterfaceInfo * Run; @@ -63,9 +65,11 @@ State_t USBRun::detectState( void ) { Run->CardType == ARPHRD_ETHER && ! Run->IsUp ) { // proper type, and Not UP -> free - return Off; + // usb cables are currently always available when requested + // until we can detect if we are plugged in + return Available; } } return Unavailable; @@ -74,17 +78,8 @@ State_t USBRun::detectState( void ) { QString USBRun::setMyState( NodeCollection * NC, Action_t A, bool ) { // nothing needs to be done to 'activate' or 'deactivate' // a cable - - // perhaps (later) we can figure out if the device is IN the - // cradle - if( A == Activate ) { - NC->setCurrentState( Available ); - } else if ( A == Deactivate ) { - NC->setCurrentState( Unavailable ); - } - return QString(); } // get interface that is free or assigned to us 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,13 +1,9 @@ #include "vpn_NN.h" #include "vpn_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * VPNNeeds[] = { 0 }; @@ -52,18 +48,5 @@ void VPNNetNode::setSpecificAttribute( QString & , QString & ) { void VPNNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new VPNNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<VPNNetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<VPNNetNode> ) 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,14 +1,10 @@ #include <resources.h> #include "wlan_NN.h" #include "wlan_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * WLanNeeds[] = { 0 }; @@ -68,18 +64,5 @@ void WLanNetNode::saveSpecificAttribute( QTextStream & TS ) { << InstanceCount << endl; } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList<ANetNode> & PNN ) { - PNN.append( new WLanNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface<WLanNetNode> ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T<WLanNetNode> ) |