From b4eced64efad35beeb2004243ca26bf7eb20eaba Mon Sep 17 00:00:00 2001 From: wimpie Date: Fri, 07 Jan 2005 15:23:23 +0000 Subject: All NS2 libraries are now properly working plugins --- 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 @@ -2,12 +2,8 @@ #include "bluetoothBNEP_NNI.h" #include "bluetoothRFCOMM_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - // // // BLUETOOTH PAN/NAP node @@ -75,20 +71,5 @@ void BluetoothBNEPNetNode::saveSpecificAttribute( QTextStream & TS) { << endl; } -#ifndef MYPLUGIN - -extern "C" { -// create plugin registers both BT functions -void create_plugin( QList & PNN ) { - PNN.append( new BluetoothBNEPNetNode() ); - PNN.append( new BluetoothRFCOMMNetNode() ); -} - -#else - typedef Opie::Core::MakeTypelist::Result BluetoothTypes; -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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,12 +1,8 @@ #include "cable_NN.h" #include "cable_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * CableNeeds[] = { 0 }; @@ -53,17 +49,4 @@ void CableNetNode::setSpecificAttribute( QString & , QString & ) { void CableNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new CableNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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 @@ -321,11 +321,10 @@ void EditConnection::buildFullTree( void ) { // find all Nodes that are toplevel nodes -> ie provide // TCP/IP Connection - for( QDictIterator Iter(NSResources->netNodes()); + for( QDictIterator 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 @@ -4,12 +4,8 @@ #include "GPRS_NN.h" #include "GPRS_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * GPRSNeeds[] = { "GPRS", 0 @@ -79,17 +75,4 @@ QStringList GPRSNetNode::properFiles( void ) { return SL; } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new GPRSNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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,12 +1,8 @@ #include "irda_NN.h" #include "irda_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * IRDANeeds[] = { 0 }; @@ -53,17 +49,4 @@ void IRDANetNode::setSpecificAttribute( QString & , QString & ) { void IRDANetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new IRDANetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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,12 +1,8 @@ #include "lancard_NN.h" #include "lancard_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * LanCardNeeds[] = { 0 }; @@ -76,17 +72,4 @@ void LanCardNetNode::saveSpecificAttribute( QTextStream & TS) { } } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new LanCardNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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,12 +1,8 @@ #include "modem_NN.h" #include "modem_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * ModemNeeds[] = { "line", 0 @@ -54,17 +50,4 @@ void ModemNetNode::setSpecificAttribute( QString & , QString & ) { void ModemNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new ModemNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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 @@ -4,12 +4,8 @@ #include "network_NN.h" #include "network_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * NetworkNeeds[] = { "device", 0 @@ -96,17 +92,4 @@ void NetworkNetNode::setSpecificAttribute( QString & , QString & ) { void NetworkNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new NetworkNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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 @@ -237,7 +237,7 @@ void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { } // 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 @@ -248,7 +248,7 @@ 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 @@ -141,13 +141,17 @@ NodeCollection::NodeCollection( void ) : QList() { IsNew = 1; CurrentState = Unchecked; AssignedInterface = 0; + Number = -1; + Done = 0; } -NodeCollection::NodeCollection( QTextStream & TS ) : +NodeCollection::NodeCollection( QTextStream & TS, bool & Dangling ) : QList() { long idx; - bool InError = 0; QString S, A, N; + + Number = -1; + Done = 0; IsModified = 0; Index = -1; Name=""; @@ -155,13 +159,11 @@ NodeCollection::NodeCollection( QTextStream & TS ) : 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; } @@ -181,11 +183,15 @@ NodeCollection::NodeCollection( QTextStream & TS ) : } 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 ); @@ -194,7 +200,6 @@ NodeCollection::NodeCollection( QTextStream & TS ) : Name.latin1(), count() )); } - NodeCollection::~NodeCollection( void ) { } @@ -229,10 +234,11 @@ ANetNodeInstance * NodeCollection::getToplevel( void ) { 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 ) { @@ -241,10 +247,11 @@ ANetNodeInstance * NodeCollection::findByName( const QString & S ) { 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 ) { 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 @@ -319,12 +319,54 @@ protected : 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 @@ -468,7 +510,7 @@ class NodeCollection : public QList { public : NodeCollection( void ); - NodeCollection( QTextStream & TS ); + NodeCollection( QTextStream & TS, bool & Dangling ); ~NodeCollection( void ); inline int done( void ) @@ -585,9 +627,9 @@ private : // 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 @@ -78,8 +78,18 @@ struct NS2PrivateFactory > { }; +class NetNodeInterface : public QUnknownInterface { + +public : + + virtual QRESULT queryInterface( const QUuid& uuid, + QUnknownInterface **iface ) = 0; + + virtual void create_plugin( QList & PNN ) = 0; +}; + template -struct NetNodeInterface : public QUnknownInterface { +struct NetNodeInterface_T : public NetNodeInterface { QRESULT queryInterface(const QUuid& uuid, QUnknownInterface **iface) { *iface = 0; @@ -107,8 +117,8 @@ struct NetNodeInterface : public QUnknownInterface { }; template -struct NetNodeInterface > - : public QUnknownInterface { +struct NetNodeInterface_T > + : public NetNodeInterface { QRESULT queryInterface( const QUuid& uuid, QUnknownInterface **iface) { @@ -125,7 +135,7 @@ struct NetNodeInterface > } void create_plugin( QList & PNN ) { - NS2PrivateFactory >::createPlugin( PNN ); + NS2PrivateFactory >::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 @@ -25,7 +25,7 @@ TheNSResources * _NSResources = 0; TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), - ConnectionsMap() { + ConnectionsMap(), DanglingConnectionsMap() { _NSResources = this; @@ -33,50 +33,6 @@ TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), // load available netnodes -#ifdef MYPLUGIN - - findAvailableNetNodes(QPEApplication::qpeDir() + PLUGINDIR ); - - // compile provides and needs lists - { const char ** NeedsRun; - QDictIterator 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 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(); @@ -119,8 +75,6 @@ TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), } } -#endif - // define built in Node types to Description map addNodeType( "device", tr( "Network Device" ), tr( "

Devices that can handle IP packets

" ) ); @@ -140,12 +94,10 @@ TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), TheNSResources::~TheNSResources( void ) { -#ifndef MYPLUGINS if( Plugins ) { delete Plugins; delete PluginManager; } -#endif delete TheSystem; } @@ -179,99 +131,6 @@ 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 PNN; - - getNetNodeList( PNN ); - if( PNN.isEmpty() ) { - delete lib; - return 0; - } - - ANetNode * NNP; - for( QListIterator 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" ); @@ -293,6 +152,7 @@ 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(); @@ -304,7 +164,7 @@ void TheNSResources::findAvailableNetNodes( void ){ 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; } @@ -315,7 +175,7 @@ void TheNSResources::findAvailableNetNodes( void ){ 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; } @@ -324,14 +184,14 @@ void TheNSResources::findAvailableNetNodes( void ){ for( QListIterator 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 ); @@ -341,8 +201,6 @@ void TheNSResources::findAvailableNetNodes( void ){ } -#endif - // used to find unique connection number int TheNSResources::assignConnectionNumber( void ) { bool found = 1; @@ -387,9 +245,14 @@ 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 it(*NC); it.current(); @@ -412,9 +275,15 @@ void TheNSResources::removeConnection( const QString & N ) { 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 @@ -38,21 +38,7 @@ public : QArray EnvList; }; -#ifdef MYPLUGIN - -typedef struct NetNode_S { - ANetNode * NetNode; - QLibrary * TheLibrary; - long NodeCountInLib; -} NetNode_t; -typedef QDict Name2NetNode_t; - -#else - typedef QDict Name2NetNode_t; - -#endif - typedef QDict Name2Instance_t; typedef QDict Name2Connection_t; typedef QDict Name2SystemFile_t; @@ -77,16 +63,9 @@ public : { 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, @@ -99,21 +78,15 @@ public : 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; } @@ -130,12 +103,14 @@ 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(); } @@ -147,18 +122,15 @@ 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; @@ -170,10 +142,8 @@ private : CurrentQPEUser CurrentUser; -#ifndef MYPLUGIN Opie::Core::OPluginLoader * Plugins; Opie::Core::OPluginManager * PluginManager; -#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 @@ -116,8 +116,9 @@ 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; @@ -133,45 +134,45 @@ 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 ); @@ -181,6 +182,7 @@ void NetworkSettingsData::loadSettings( void ) { NNI->setNew( FALSE ); NSResources->addNodeInstance( NNI ); } + if( NN ) { Log( ( "Node %s : %p\n", NN->name(), NN ) ); } @@ -211,46 +213,61 @@ 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 it( NSResources->netNodes() ); + for( QDictIterator 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 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 it(M); it.current(); ++it ) { - // all nodes in those connections - for( QListIterator 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 it(M); + it.current(); + ++it ) { TS << "[connection]" << endl; it.current()->save(TS); } @@ -289,14 +306,15 @@ QString NetworkSettingsData::generateSettings( void ) { // regenerate system files Log( ( "Generating settings from %s\n", CfgFile.latin1() )); - for( QDictIterator nnit( NSResources->netNodes() ); + for( QDictIterator 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(); @@ -395,10 +413,10 @@ QString NetworkSettingsData::generateSettings( void ) { SF = sfit.current(); // reset all - for( QDictIterator nnit( NSResources->netNodes() ); + for( QDictIterator nnit( NSResources->netNodes() ); nnit.current(); ++nnit ) { - nnit.current()->NetNode->setDone(0); + nnit.current()->setDone(0); } for( QDictIterator nniit( @@ -420,11 +438,11 @@ QString NetworkSettingsData::generateSettings( void ) { // are there netnodes that have instances and need // to write data in this system file ? - for( QDictIterator nnit( NSResources->netNodes() ); + for( QDictIterator 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 @@ -4,12 +4,8 @@ #include "ppp_NN.h" #include "ppp_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - QStringList * PPPNetNode::ProperFiles = 0; static const char * PPPNeeds[] = @@ -84,17 +80,4 @@ void PPPNetNode::setSpecificAttribute( QString & , QString & ) { void PPPNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new PPPNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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 @@ -2,12 +2,8 @@ #include "profile_NN.h" #include "profile_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * ProfileNeeds[] = { "connection", 0 @@ -59,17 +55,4 @@ void ProfileNetNode::setSpecificAttribute( QString & , QString & ) { void ProfileNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new ProfileNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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 @@ -2,12 +2,8 @@ #include "usb_NN.h" #include "usb_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * USBNeeds[] = { 0 }; @@ -61,17 +57,4 @@ void USBNetNode::setSpecificAttribute( QString & , QString & ) { void USBNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new USBNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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 @@ -5,9 +5,11 @@ #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(); @@ -64,7 +66,9 @@ State_t USBRun::detectState( void ) { ! 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; } } @@ -75,15 +79,6 @@ 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(); } 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,12 +1,8 @@ #include "vpn_NN.h" #include "vpn_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * VPNNeeds[] = { 0 }; @@ -53,17 +49,4 @@ void VPNNetNode::setSpecificAttribute( QString & , QString & ) { void VPNNetNode::saveSpecificAttribute( QTextStream & ) { } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new VPNNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) 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 @@ -2,12 +2,8 @@ #include "wlan_NN.h" #include "wlan_NNI.h" -#ifndef MYPLUGIN - #include "netnodeinterface.h" -#endif - static const char * WLanNeeds[] = { 0 }; @@ -69,17 +65,4 @@ void WLanNetNode::saveSpecificAttribute( QTextStream & TS ) { << endl; } -#ifdef MYPLUGIN - -extern "C" { -void create_plugin( QList & PNN ) { - PNN.append( new WLanNetNode() ); -} - -#else - -OPIE_NS2_PLUGIN( NetNodeInterface ) - -#endif - -} +OPIE_NS2_PLUGIN( NetNodeInterface_T ) -- cgit v0.9.0.2