author | wimpie <wimpie> | 2004-08-19 21:48:46 (UTC) |
---|---|---|
committer | wimpie <wimpie> | 2004-08-19 21:48:46 (UTC) |
commit | 45616f57d3871827a247c1962e7c88699d111002 (patch) (unidiff) | |
tree | 7ad9cbe10eb624cb08a7a41944e59f0371547517 | |
parent | f58fb0a08321b6d8a9ce1bac2ce4b7eb67c27347 (diff) | |
download | opie-45616f57d3871827a247c1962e7c88699d111002.zip opie-45616f57d3871827a247c1962e7c88699d111002.tar.gz opie-45616f57d3871827a247c1962e7c88699d111002.tar.bz2 |
Network_NN.cpp : had to generate full path to networksettings since
ifup (when run from hotplug) does not know about QPEDIR ...
main.cpp : a bit more logging
nsdata.cpp resources : optimized user detection code, report error
when user could not be detected (instead of gracefull crash)
5 files changed, 77 insertions, 58 deletions
diff --git a/noncore/settings/networksettings2/main.cpp b/noncore/settings/networksettings2/main.cpp index 200e31b..9004d19 100644 --- a/noncore/settings/networksettings2/main.cpp +++ b/noncore/settings/networksettings2/main.cpp | |||
@@ -1,147 +1,151 @@ | |||
1 | #include "nsdata.h" | 1 | #include "nsdata.h" |
2 | #include "activateprofile.h" | 2 | #include "activateprofile.h" |
3 | #include "activatevpn.h" | 3 | #include "activatevpn.h" |
4 | #include "networksettings.h" | 4 | #include "networksettings.h" |
5 | 5 | ||
6 | #include <qpe/qpeapplication.h> | 6 | #include <qpe/qpeapplication.h> |
7 | 7 | ||
8 | #include <opie2/oapplicationfactory.h> | 8 | #include <opie2/oapplicationfactory.h> |
9 | using namespace Opie::Core; | 9 | using namespace Opie::Core; |
10 | 10 | ||
11 | #ifdef GONE | 11 | #ifdef GONE |
12 | 12 | ||
13 | OPIE_EXPORT_APP( OApplicationFactory<NetworkSettings> ) | 13 | OPIE_EXPORT_APP( OApplicationFactory<NetworkSettings> ) |
14 | 14 | ||
15 | #else | 15 | #else |
16 | 16 | ||
17 | // just standard GUI | 17 | // just standard GUI |
18 | #define ACT_GUI 0 | 18 | #define ACT_GUI 0 |
19 | // used by interfaces to request for allow of up/down | 19 | // used by interfaces to request for allow of up/down |
20 | #define ACT_REQUEST 1 | 20 | #define ACT_REQUEST 1 |
21 | // regenerate config files | 21 | // regenerate config files |
22 | #define ACT_REGEN 2 | 22 | #define ACT_REGEN 2 |
23 | // used by interfaces to request user prompt | 23 | // used by interfaces to request user prompt |
24 | #define ACT_PROMPT 3 | 24 | #define ACT_PROMPT 3 |
25 | // used by interfaces to trigger VPN | 25 | // used by interfaces to trigger VPN |
26 | #define ACT_VPN 4 | 26 | #define ACT_VPN 4 |
27 | 27 | ||
28 | int main( int argc, char * argv[] ) { | 28 | int main( int argc, char * argv[] ) { |
29 | int rv = 0; | 29 | int rv = 0; |
30 | int Action = ACT_GUI; | 30 | int Action = ACT_GUI; |
31 | // could be overruled by -qws | 31 | // could be overruled by -qws |
32 | QApplication::Type GuiType = QApplication::GuiClient; | 32 | QApplication::Type GuiType = QApplication::GuiClient; |
33 | 33 | ||
34 | #ifdef _WS_QWS_ | 34 | #ifdef _WS_QWS_ |
35 | QPEApplication * TheApp; | 35 | QPEApplication * TheApp; |
36 | #else | 36 | #else |
37 | QApplication * TheApp; | 37 | QApplication * TheApp; |
38 | #endif | 38 | #endif |
39 | 39 | ||
40 | for ( int i = 1; i < argc; i ++ ) { | 40 | for ( int i = 1; i < argc; i ++ ) { |
41 | int rmv; | 41 | int rmv; |
42 | rmv = 0; | 42 | rmv = 0; |
43 | if( strcmp( argv[i], "--regen" ) == 0 ) { | 43 | if( strcmp( argv[i], "--regen" ) == 0 ) { |
44 | Action = ACT_REGEN; | 44 | Action = ACT_REGEN; |
45 | GuiType = QApplication::Tty; | 45 | GuiType = QApplication::Tty; |
46 | rmv = 1; | 46 | rmv = 1; |
47 | } else if( strcmp( argv[i], "--prompt" ) == 0 ) { | 47 | } else if( strcmp( argv[i], "--prompt" ) == 0 ) { |
48 | Action = ACT_PROMPT; | 48 | Action = ACT_PROMPT; |
49 | rmv = 1; | 49 | rmv = 1; |
50 | } else if( strcmp( argv[i], "--triggervpn" ) == 0 ) { | 50 | } else if( strcmp( argv[i], "--triggervpn" ) == 0 ) { |
51 | Action = ACT_VPN; | 51 | Action = ACT_VPN; |
52 | rmv = 1; | 52 | rmv = 1; |
53 | } | 53 | } |
54 | if( rmv ) { | 54 | if( rmv ) { |
55 | memmove( argv+i, argv+i+rmv, | 55 | memmove( argv+i, argv+i+rmv, |
56 | sizeof( char * ) * (argc-i-rmv) ); | 56 | sizeof( char * ) * (argc-i-rmv) ); |
57 | i --; | 57 | i --; |
58 | argc -= rmv; | 58 | argc -= rmv; |
59 | } | 59 | } |
60 | } | 60 | } |
61 | 61 | ||
62 | if( strstr( argv[0], "-request" ) ) { | 62 | if( strstr( argv[0], "-request" ) ) { |
63 | // called from system to request something | 63 | // called from system to request something |
64 | GuiType = QApplication::Tty; | 64 | GuiType = QApplication::Tty; |
65 | Action = ACT_REQUEST; | 65 | Action = ACT_REQUEST; |
66 | Log(("Request : %s\n", argv[1] )); | 66 | Log(("Request : %s\n", argv[1] )); |
67 | } | 67 | } |
68 | 68 | ||
69 | // Start Qt | 69 | // Start Qt |
70 | #ifdef _WS_QWS_ | 70 | #ifdef _WS_QWS_ |
71 | // because QPEApplication does not handle GuiType well | 71 | // because QPEApplication does not handle GuiType well |
72 | if( GuiType == QApplication::Tty ) { | 72 | if( GuiType == QApplication::Tty ) { |
73 | // this cast is NOT correct but we do not use | 73 | // this cast is NOT correct but we do not use |
74 | // TheApp anymore ... | 74 | // TheApp anymore ... |
75 | TheApp = (QPEApplication *)new QApplication( argc, argv, GuiType ); | 75 | TheApp = (QPEApplication *)new QApplication( argc, argv, GuiType ); |
76 | } else { | 76 | } else { |
77 | TheApp = new QPEApplication( argc, argv, GuiType ); | 77 | TheApp = new QPEApplication( argc, argv, GuiType ); |
78 | } | 78 | } |
79 | #else | 79 | #else |
80 | TheApp = new QApplication( argc, argv, GuiType ); | 80 | TheApp = new QApplication( argc, argv, GuiType ); |
81 | #endif | 81 | #endif |
82 | 82 | ||
83 | // init qt with app widget | 83 | // init qt with app widget |
84 | 84 | ||
85 | switch( Action ) { | 85 | switch( Action ) { |
86 | case ACT_REQUEST : | 86 | case ACT_REQUEST : |
87 | { NetworkSettingsData NS; | 87 | { NetworkSettingsData NS; |
88 | if( NS.canStart( argv[1] ) ) { | 88 | if( NS.canStart( argv[1] ) ) { |
89 | QString S; | 89 | QString S; |
90 | S.sprintf( QPEApplication::qpeDir()+ | 90 | S.sprintf( QPEApplication::qpeDir()+ |
91 | "/bin/networksettings2" ); | 91 | "/bin/networksettings2" ); |
92 | char * MyArgv[4]; | 92 | char * MyArgv[4]; |
93 | MyArgv[0] = "networksettings2"; | 93 | MyArgv[0] = "networksettings2"; |
94 | MyArgv[1] = "--prompt"; | 94 | MyArgv[1] = "--prompt"; |
95 | MyArgv[2] = argv[1]; | 95 | MyArgv[2] = argv[1]; |
96 | MyArgv[3] = NULL; | 96 | MyArgv[3] = NULL; |
97 | NSResources->system().execAsUser( S, MyArgv ); | 97 | NSResources->system().execAsUser( S, MyArgv ); |
98 | Log(("FAILED %s-cNN-allowed\n", argv[1] )); | ||
98 | // if we come here , failed | 99 | // if we come here , failed |
99 | printf( "%s-cNN-disallowed", argv[1] ); | 100 | printf( "%s-cNN-disallowed", argv[1] ); |
100 | } | 101 | } |
101 | } | 102 | } |
102 | break; | 103 | break; |
103 | case ACT_REGEN : | 104 | case ACT_REGEN : |
104 | { NetworkSettingsData NS; | 105 | { NetworkSettingsData NS; |
105 | // regen returns 0 if OK | 106 | // regen returns 0 if OK |
106 | rv = (NS.regenerate()) ? 1 : 0; | 107 | rv = (NS.regenerate()) ? 1 : 0; |
107 | } | 108 | } |
108 | break; | 109 | break; |
109 | case ACT_PROMPT : | 110 | case ACT_PROMPT : |
110 | { ActivateProfile AP(argv[1]); | 111 | { ActivateProfile AP(argv[1]); |
111 | if( AP.exec() == QDialog::Accepted ) { | 112 | if( AP.exec() == QDialog::Accepted ) { |
113 | Log(("%s-c%ld-allowed\n", | ||
114 | argv[1], AP.selectedProfile() )); | ||
112 | printf( "%s-c%ld-allowed", argv[1], AP.selectedProfile() ); | 115 | printf( "%s-c%ld-allowed", argv[1], AP.selectedProfile() ); |
113 | } else { | 116 | } else { |
117 | Log(("%s-c%NN-disallowed\n", argv[1] )); | ||
114 | printf( "%s-cNN-disallowed", argv[1] ); | 118 | printf( "%s-cNN-disallowed", argv[1] ); |
115 | } | 119 | } |
116 | } | 120 | } |
117 | break; | 121 | break; |
118 | case ACT_VPN : | 122 | case ACT_VPN : |
119 | { ActivateVPN AVPN; | 123 | { ActivateVPN AVPN; |
120 | AVPN.exec(); | 124 | AVPN.exec(); |
121 | } | 125 | } |
122 | break; | 126 | break; |
123 | case ACT_GUI : | 127 | case ACT_GUI : |
124 | { QWidget * W = new NetworkSettings(0); | 128 | { QWidget * W = new NetworkSettings(0); |
125 | TheApp->setMainWidget( W ); | 129 | TheApp->setMainWidget( W ); |
126 | W->show(); | 130 | W->show(); |
127 | #ifdef _WS_QWS_ | 131 | #ifdef _WS_QWS_ |
128 | W->showMaximized(); | 132 | W->showMaximized(); |
129 | #else | 133 | #else |
130 | W->resize( W->sizeHint() ); | 134 | W->resize( W->sizeHint() ); |
131 | #endif | 135 | #endif |
132 | rv = TheApp->exec(); | 136 | rv = TheApp->exec(); |
133 | delete W; | 137 | delete W; |
134 | } | 138 | } |
135 | break; | 139 | break; |
136 | } | 140 | } |
137 | 141 | ||
138 | LogClose(); | 142 | LogClose(); |
139 | 143 | ||
140 | return rv; | 144 | return rv; |
141 | } | 145 | } |
142 | 146 | ||
143 | #endif | 147 | #endif |
144 | 148 | ||
145 | 149 | ||
146 | // main.cpp | 150 | // main.cpp |
147 | 151 | ||
diff --git a/noncore/settings/networksettings2/network/network_NN.cpp b/noncore/settings/networksettings2/network/network_NN.cpp index 1feffdb..b5c41bf 100644 --- a/noncore/settings/networksettings2/network/network_NN.cpp +++ b/noncore/settings/networksettings2/network/network_NN.cpp | |||
@@ -1,82 +1,85 @@ | |||
1 | #include <qpe/qpeapplication.h> | ||
1 | #include <asdevice.h> | 2 | #include <asdevice.h> |
2 | #include "network_NN.h" | 3 | #include "network_NN.h" |
3 | #include "network_NNI.h" | 4 | #include "network_NNI.h" |
4 | 5 | ||
5 | static const char * NetworkNeeds[] = | 6 | static const char * NetworkNeeds[] = |
6 | { "device", | 7 | { "device", |
7 | 0 | 8 | 0 |
8 | }; | 9 | }; |
9 | 10 | ||
10 | /** | 11 | /** |
11 | * Constructor, find all of the possible interfaces | 12 | * Constructor, find all of the possible interfaces |
12 | */ | 13 | */ |
13 | NetworkNetNode::NetworkNetNode() : ANetNode(tr("IP Configuration")) { | 14 | NetworkNetNode::NetworkNetNode() : ANetNode(tr("IP Configuration")) { |
14 | } | 15 | } |
15 | 16 | ||
16 | /** | 17 | /** |
17 | * Delete any interfaces that we own. | 18 | * Delete any interfaces that we own. |
18 | */ | 19 | */ |
19 | NetworkNetNode::~NetworkNetNode(){ | 20 | NetworkNetNode::~NetworkNetNode(){ |
20 | } | 21 | } |
21 | 22 | ||
22 | const QString NetworkNetNode::nodeDescription(){ | 23 | const QString NetworkNetNode::nodeDescription(){ |
23 | return tr("\ | 24 | return tr("\ |
24 | <p>Sets up TCP/IP options.</p>\ | 25 | <p>Sets up TCP/IP options.</p>\ |
25 | <p>Use this to configure the TCP/IP protocol</p>\ | 26 | <p>Use this to configure the TCP/IP protocol</p>\ |
26 | " | 27 | " |
27 | ); | 28 | ); |
28 | } | 29 | } |
29 | 30 | ||
30 | ANetNodeInstance * NetworkNetNode::createInstance( void ) { | 31 | ANetNodeInstance * NetworkNetNode::createInstance( void ) { |
31 | return new ANetwork( this ); | 32 | return new ANetwork( this ); |
32 | } | 33 | } |
33 | 34 | ||
34 | bool NetworkNetNode::hasDataForFile( const QString & S ) { | 35 | bool NetworkNetNode::hasDataForFile( const QString & S ) { |
35 | return S == "interfaces"; | 36 | return S == "interfaces"; |
36 | } | 37 | } |
37 | 38 | ||
38 | short NetworkNetNode::generateFile( const QString & ID, | 39 | short NetworkNetNode::generateFile( const QString & ID, |
39 | const QString & , | 40 | const QString & , |
40 | QTextStream & TS, | 41 | QTextStream & TS, |
41 | ANetNodeInstance * NNI, | 42 | ANetNodeInstance * NNI, |
42 | long DevNr ) { | 43 | long DevNr ) { |
43 | 44 | ||
44 | QString NIC = NNI->runtime()->device()->netNode()->nodeClass()->genNic( DevNr ); | 45 | QString NIC = NNI->runtime()->device()->netNode()->nodeClass()->genNic( DevNr ); |
45 | 46 | ||
46 | if( ID == "interfaces" ) { | 47 | if( ID == "interfaces" ) { |
47 | Log(("Generate entry for %s in %s\n", NIC.latin1(), ID.latin1() )); | 48 | Log(("Generate entry for %s in %s\n", NIC.latin1(), ID.latin1() )); |
48 | // generate mapping stanza for this interface | 49 | // generate mapping stanza for this interface |
49 | TS << "# check if " | 50 | TS << "# check if " |
50 | << NIC | 51 | << NIC |
51 | << " can be brought UP" | 52 | << " can be brought UP" |
52 | << endl; | 53 | << endl; |
53 | TS << "mapping " | 54 | TS << "mapping " |
54 | << NIC | 55 | << NIC |
55 | << endl; | 56 | << endl; |
56 | TS << " script networksettings2-request" | 57 | TS << " script " |
58 | << QPEApplication::qpeDir() | ||
59 | << "/bin/networksettings2-request" | ||
57 | << endl | 60 | << endl |
58 | << endl; | 61 | << endl; |
59 | return 0; | 62 | return 0; |
60 | } | 63 | } |
61 | return 1; | 64 | return 1; |
62 | } | 65 | } |
63 | 66 | ||
64 | const char ** NetworkNetNode::needs( void ) { | 67 | const char ** NetworkNetNode::needs( void ) { |
65 | return NetworkNeeds; | 68 | return NetworkNeeds; |
66 | } | 69 | } |
67 | 70 | ||
68 | const char * NetworkNetNode::provides( void ) { | 71 | const char * NetworkNetNode::provides( void ) { |
69 | return "connection"; | 72 | return "connection"; |
70 | } | 73 | } |
71 | 74 | ||
72 | void NetworkNetNode::setSpecificAttribute( QString & , QString & ) { | 75 | void NetworkNetNode::setSpecificAttribute( QString & , QString & ) { |
73 | } | 76 | } |
74 | 77 | ||
75 | void NetworkNetNode::saveSpecificAttribute( QTextStream & ) { | 78 | void NetworkNetNode::saveSpecificAttribute( QTextStream & ) { |
76 | } | 79 | } |
77 | 80 | ||
78 | extern "C" { | 81 | extern "C" { |
79 | void create_plugin( QList<ANetNode> & PNN ) { | 82 | void create_plugin( QList<ANetNode> & PNN ) { |
80 | PNN.append( new NetworkNetNode() ); | 83 | PNN.append( new NetworkNetNode() ); |
81 | } | 84 | } |
82 | } | 85 | } |
diff --git a/noncore/settings/networksettings2/networksettings2/resources.cpp b/noncore/settings/networksettings2/networksettings2/resources.cpp index 7ece817..2f17693 100644 --- a/noncore/settings/networksettings2/networksettings2/resources.cpp +++ b/noncore/settings/networksettings2/networksettings2/resources.cpp | |||
@@ -1,453 +1,450 @@ | |||
1 | #include <unistd.h> | 1 | #include <unistd.h> |
2 | #include <errno.h> | 2 | #include <errno.h> |
3 | #include <fcntl.h> | 3 | #include <fcntl.h> |
4 | #include <pwd.h> | 4 | #include <pwd.h> |
5 | #include <qpixmap.h> | 5 | #include <qpixmap.h> |
6 | #include <qdir.h> | 6 | #include <qdir.h> |
7 | #include <qpe/qlibrary.h> | 7 | #include <qpe/qlibrary.h> |
8 | #include <qpe/qpeapplication.h> | 8 | #include <qpe/qpeapplication.h> |
9 | #include <opie2/odebug.h> | 9 | #include <opie2/odebug.h> |
10 | #include <qtopia/resource.h> | 10 | #include <qtopia/resource.h> |
11 | 11 | ||
12 | #include "netnode.h" | 12 | #include "netnode.h" |
13 | #include "resources.h" | 13 | #include "resources.h" |
14 | 14 | ||
15 | #define PLUGINDIR "plugins/networksettings2" | 15 | #define PLUGINDIR "plugins/networksettings2" |
16 | #define ICONDIR "/pics/networksettings2/" | 16 | #define ICONDIR "/pics/networksettings2/" |
17 | 17 | ||
18 | // single resources instance | 18 | // single resources instance |
19 | TheNSResources * _NSResources = 0; | 19 | TheNSResources * _NSResources = 0; |
20 | 20 | ||
21 | TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), | 21 | TheNSResources::TheNSResources( void ) : NodeTypeNameMap(), |
22 | ConnectionsMap() { | 22 | ConnectionsMap() { |
23 | 23 | ||
24 | _NSResources = this; | 24 | _NSResources = this; |
25 | 25 | ||
26 | detectCurrentUser(); | 26 | detectCurrentUser(); |
27 | 27 | ||
28 | // load available netnodes | 28 | // load available netnodes |
29 | findAvailableNetNodes(QPEApplication::qpeDir() + PLUGINDIR ); | 29 | findAvailableNetNodes(QPEApplication::qpeDir() + PLUGINDIR ); |
30 | 30 | ||
31 | // compile provides and needs lists | 31 | // compile provides and needs lists |
32 | { const char ** NeedsRun; | 32 | { const char ** NeedsRun; |
33 | QDictIterator<NetNode_t> OuterIt( AllNodeTypes ); | 33 | QDictIterator<NetNode_t> OuterIt( AllNodeTypes ); |
34 | bool Done; | 34 | bool Done; |
35 | 35 | ||
36 | for ( ; OuterIt.current(); ++OuterIt ) { | 36 | for ( ; OuterIt.current(); ++OuterIt ) { |
37 | // find needs list | 37 | // find needs list |
38 | ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList; | 38 | ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList; |
39 | ANetNode::NetNodeList & NNL = *(NNLP); | 39 | ANetNode::NetNodeList & NNL = *(NNLP); |
40 | 40 | ||
41 | // must iterate this way to avoid duplication pointers | 41 | // must iterate this way to avoid duplication pointers |
42 | for ( QDictIterator<NetNode_t> InnerIt( AllNodeTypes ); | 42 | for ( QDictIterator<NetNode_t> InnerIt( AllNodeTypes ); |
43 | InnerIt.current(); ++InnerIt ) { | 43 | InnerIt.current(); ++InnerIt ) { |
44 | if( InnerIt.current() == OuterIt.current() ) | 44 | if( InnerIt.current() == OuterIt.current() ) |
45 | // avoid recursive | 45 | // avoid recursive |
46 | continue; | 46 | continue; |
47 | 47 | ||
48 | const char * Provides = InnerIt.current()->NetNode->provides(); | 48 | const char * Provides = InnerIt.current()->NetNode->provides(); |
49 | NeedsRun = OuterIt.current()->NetNode->needs(); | 49 | NeedsRun = OuterIt.current()->NetNode->needs(); |
50 | for( ; *NeedsRun; NeedsRun ++ ) { | 50 | for( ; *NeedsRun; NeedsRun ++ ) { |
51 | if( strcmp( Provides, *NeedsRun ) == 0 ) { | 51 | if( strcmp( Provides, *NeedsRun ) == 0 ) { |
52 | // inner provides what outer needs | 52 | // inner provides what outer needs |
53 | NNL.resize( NNL.size() + 1 ); | 53 | NNL.resize( NNL.size() + 1 ); |
54 | NNL[NNL.size()-1] = InnerIt.current()->NetNode; | 54 | NNL[NNL.size()-1] = InnerIt.current()->NetNode; |
55 | Done = 1; // break from 2 loops | 55 | Done = 1; // break from 2 loops |
56 | break; | 56 | break; |
57 | } | 57 | } |
58 | } | 58 | } |
59 | } | 59 | } |
60 | OuterIt.current()->NetNode->setAlternatives( NNLP ); | 60 | OuterIt.current()->NetNode->setAlternatives( NNLP ); |
61 | } | 61 | } |
62 | } | 62 | } |
63 | 63 | ||
64 | // define Node types to Description map | 64 | // define Node types to Description map |
65 | NodeTypeNameMap.insert( "device", tr( "Network Device" ) ); | 65 | NodeTypeNameMap.insert( "device", tr( "Network Device" ) ); |
66 | NodeTypeNameMap.insert( "line", tr( "Character device" ) ); | 66 | NodeTypeNameMap.insert( "line", tr( "Character device" ) ); |
67 | NodeTypeNameMap.insert( "connection", tr( "IP Connection" ) ); | 67 | NodeTypeNameMap.insert( "connection", tr( "IP Connection" ) ); |
68 | NodeTypeNameMap.insert( "fullsetup", tr( "Connection Profile" ) ); | 68 | NodeTypeNameMap.insert( "fullsetup", tr( "Connection Profile" ) ); |
69 | 69 | ||
70 | NodeTypeDescriptionMap.insert( "device", | 70 | NodeTypeDescriptionMap.insert( "device", |
71 | tr( "<p>Devices that can handle IP packets</p>" ) ); | 71 | tr( "<p>Devices that can handle IP packets</p>" ) ); |
72 | NodeTypeDescriptionMap.insert( "line", | 72 | NodeTypeDescriptionMap.insert( "line", |
73 | tr( "<p>Devices that can handle single bytes</p>" ) ); | 73 | tr( "<p>Devices that can handle single bytes</p>" ) ); |
74 | NodeTypeDescriptionMap.insert( "connection", | 74 | NodeTypeDescriptionMap.insert( "connection", |
75 | tr( "<p>Nodes that provide working IP connections</p>" ) ); | 75 | tr( "<p>Nodes that provide working IP connections</p>" ) ); |
76 | NodeTypeDescriptionMap.insert( "fullsetup", | 76 | NodeTypeDescriptionMap.insert( "fullsetup", |
77 | tr( "<p>Fully configured connection profile</p>" ) ); | 77 | tr( "<p>Fully configured connection profile</p>" ) ); |
78 | 78 | ||
79 | // define system files | 79 | // define system files |
80 | addSystemFile( "interfaces", "/tmp/interfaces", 1 ); | 80 | addSystemFile( "interfaces", "/tmp/interfaces", 1 ); |
81 | 81 | ||
82 | // get access to the system | 82 | // get access to the system |
83 | TheSystem = new System(); | 83 | TheSystem = new System(); |
84 | 84 | ||
85 | } | 85 | } |
86 | 86 | ||
87 | TheNSResources::~TheNSResources( void ) { | 87 | TheNSResources::~TheNSResources( void ) { |
88 | delete TheSystem; | 88 | delete TheSystem; |
89 | } | 89 | } |
90 | 90 | ||
91 | void TheNSResources::addSystemFile( const QString & ID, | 91 | void TheNSResources::addSystemFile( const QString & ID, |
92 | const QString & P, | 92 | const QString & P, |
93 | bool KDI ) { | 93 | bool KDI ) { |
94 | if( ! SystemFiles.find( ID ) ) { | 94 | if( ! SystemFiles.find( ID ) ) { |
95 | // new system file | 95 | // new system file |
96 | SystemFiles.insert( ID, new SystemFile( ID, P, KDI ) ); | 96 | SystemFiles.insert( ID, new SystemFile( ID, P, KDI ) ); |
97 | } // else existed | 97 | } // else existed |
98 | } | 98 | } |
99 | 99 | ||
100 | void TheNSResources::busy( bool ) { | 100 | void TheNSResources::busy( bool ) { |
101 | /* | 101 | /* |
102 | if( B ) { | 102 | if( B ) { |
103 | ShowWait->show(); | 103 | ShowWait->show(); |
104 | qApp->process | 104 | qApp->process |
105 | } else { | 105 | } else { |
106 | ShowWait->hide(); | 106 | ShowWait->hide(); |
107 | } | 107 | } |
108 | */ | 108 | */ |
109 | } | 109 | } |
110 | 110 | ||
111 | /** | 111 | /** |
112 | * Load all modules that are found in the path | 112 | * Load all modules that are found in the path |
113 | * @param path a directory that is scaned for any plugins that can be loaded | 113 | * @param path a directory that is scaned for any plugins that can be loaded |
114 | * and attempts to load them | 114 | * and attempts to load them |
115 | */ | 115 | */ |
116 | void TheNSResources::findAvailableNetNodes(const QString &path){ | 116 | void TheNSResources::findAvailableNetNodes(const QString &path){ |
117 | 117 | ||
118 | Log(("Locate plugins in %s\n", path.latin1() )); | 118 | Log(("Locate plugins in %s\n", path.latin1() )); |
119 | QDir d(path); | 119 | QDir d(path); |
120 | if(!d.exists()) | 120 | if(!d.exists()) |
121 | return; | 121 | return; |
122 | 122 | ||
123 | QString lang = ::getenv("LANG"); | 123 | QString lang = ::getenv("LANG"); |
124 | 124 | ||
125 | // Don't want sym links | 125 | // Don't want sym links |
126 | d.setFilter( QDir::Files | QDir::NoSymLinks ); | 126 | d.setFilter( QDir::Files | QDir::NoSymLinks ); |
127 | const QFileInfoList *list = d.entryInfoList(); | 127 | const QFileInfoList *list = d.entryInfoList(); |
128 | QFileInfoListIterator it( *list ); | 128 | QFileInfoListIterator it( *list ); |
129 | QFileInfo *fi; | 129 | QFileInfo *fi; |
130 | 130 | ||
131 | while ( (fi=it.current()) ) { | 131 | while ( (fi=it.current()) ) { |
132 | 132 | ||
133 | if( fi->fileName().contains(".so")){ | 133 | if( fi->fileName().contains(".so")){ |
134 | /* if loaded install translation */ | 134 | /* if loaded install translation */ |
135 | if( loadNetNode(path + "/" + fi->fileName()) ) { | 135 | if( loadNetNode(path + "/" + fi->fileName()) ) { |
136 | QTranslator *trans = new QTranslator(qApp); | 136 | QTranslator *trans = new QTranslator(qApp); |
137 | QString fn = QPEApplication::qpeDir()+ | 137 | QString fn = QPEApplication::qpeDir()+ |
138 | "/i18n/"+lang+"/"+ | 138 | "/i18n/"+lang+"/"+ |
139 | fi->fileName().left( fi->fileName().find(".") )+ | 139 | fi->fileName().left( fi->fileName().find(".") )+ |
140 | ".qm"; | 140 | ".qm"; |
141 | 141 | ||
142 | if( trans->load( fn ) ) | 142 | if( trans->load( fn ) ) |
143 | qApp->installTranslator( trans ); | 143 | qApp->installTranslator( trans ); |
144 | else | 144 | else |
145 | delete trans; | 145 | delete trans; |
146 | } | 146 | } |
147 | } | 147 | } |
148 | ++it; | 148 | ++it; |
149 | } | 149 | } |
150 | } | 150 | } |
151 | 151 | ||
152 | // used to find unique connection number | 152 | // used to find unique connection number |
153 | int TheNSResources::assignConnectionNumber( void ) { | 153 | int TheNSResources::assignConnectionNumber( void ) { |
154 | bool found = 1; | 154 | bool found = 1; |
155 | for( int trial = 0; ; trial ++ ) { | 155 | for( int trial = 0; ; trial ++ ) { |
156 | found = 1; | 156 | found = 1; |
157 | for( QDictIterator<NodeCollection> it(ConnectionsMap); | 157 | for( QDictIterator<NodeCollection> it(ConnectionsMap); |
158 | it.current(); | 158 | it.current(); |
159 | ++it ) { | 159 | ++it ) { |
160 | if( it.current()->number() == trial ) { | 160 | if( it.current()->number() == trial ) { |
161 | found = 0; | 161 | found = 0; |
162 | break; | 162 | break; |
163 | } | 163 | } |
164 | } | 164 | } |
165 | 165 | ||
166 | if( found ) { | 166 | if( found ) { |
167 | Log(("Assign profile number %d\n", trial )); | 167 | Log(("Assign profile number %d\n", trial )); |
168 | return trial; | 168 | return trial; |
169 | } | 169 | } |
170 | } | 170 | } |
171 | } | 171 | } |
172 | 172 | ||
173 | /** | 173 | /** |
174 | * Attempt to load a function and resolve a function. | 174 | * Attempt to load a function and resolve a function. |
175 | * @param pluginFileName - the name of the file in which to attempt to load | 175 | * @param pluginFileName - the name of the file in which to attempt to load |
176 | * @param resolveString - function pointer to resolve | 176 | * @param resolveString - function pointer to resolve |
177 | * @return true of loading is successful | 177 | * @return true of loading is successful |
178 | */ | 178 | */ |
179 | bool TheNSResources::loadNetNode( | 179 | bool TheNSResources::loadNetNode( |
180 | const QString &pluginFileName, const QString &resolveString){ | 180 | const QString &pluginFileName, const QString &resolveString){ |
181 | 181 | ||
182 | QLibrary *lib = new QLibrary(pluginFileName); | 182 | QLibrary *lib = new QLibrary(pluginFileName); |
183 | void * res = lib->resolve(resolveString); | 183 | void * res = lib->resolve(resolveString); |
184 | if( ! res ){ | 184 | if( ! res ){ |
185 | delete lib; | 185 | delete lib; |
186 | return 0; | 186 | return 0; |
187 | } | 187 | } |
188 | 188 | ||
189 | GetNetNodeListFt_t getNetNodeList = (GetNetNodeListFt_t)res; | 189 | GetNetNodeListFt_t getNetNodeList = (GetNetNodeListFt_t)res; |
190 | 190 | ||
191 | // Try to get an object. | 191 | // Try to get an object. |
192 | QList<ANetNode> PNN; | 192 | QList<ANetNode> PNN; |
193 | 193 | ||
194 | getNetNodeList( PNN ); | 194 | getNetNodeList( PNN ); |
195 | if( PNN.isEmpty() ) { | 195 | if( PNN.isEmpty() ) { |
196 | delete lib; | 196 | delete lib; |
197 | return 0; | 197 | return 0; |
198 | } | 198 | } |
199 | 199 | ||
200 | ANetNode * NNP; | 200 | ANetNode * NNP; |
201 | for( QListIterator<ANetNode> it(PNN); | 201 | for( QListIterator<ANetNode> it(PNN); |
202 | it.current(); | 202 | it.current(); |
203 | ++it ) { | 203 | ++it ) { |
204 | NetNode_t * NN; | 204 | NetNode_t * NN; |
205 | 205 | ||
206 | NNP = it.current(); | 206 | NNP = it.current(); |
207 | NN = new NetNode_t; | 207 | NN = new NetNode_t; |
208 | NN->NetNode = NNP; | 208 | NN->NetNode = NNP; |
209 | NN->TheLibrary = lib; | 209 | NN->TheLibrary = lib; |
210 | NN->NodeCountInLib = PNN.count(); | 210 | NN->NodeCountInLib = PNN.count(); |
211 | 211 | ||
212 | // store mapping | 212 | // store mapping |
213 | AllNodeTypes.insert( NN->NetNode->name(), NN ); | 213 | AllNodeTypes.insert( NN->NetNode->name(), NN ); |
214 | } | 214 | } |
215 | 215 | ||
216 | return 1; | 216 | return 1; |
217 | } | 217 | } |
218 | 218 | ||
219 | QPixmap TheNSResources::getPixmap( const QString & QS ) { | 219 | QPixmap TheNSResources::getPixmap( const QString & QS ) { |
220 | QPixmap P; | 220 | QPixmap P; |
221 | QString S("networksettings2/"); | 221 | QString S("networksettings2/"); |
222 | S += QS; | 222 | S += QS; |
223 | Log(("%s\n", S.latin1() )); | 223 | Log(("%s\n", S.latin1() )); |
224 | P = Resource::loadPixmap( S ); | 224 | P = Resource::loadPixmap( S ); |
225 | return ( P.isNull() ) ? QPixmap() : P; | 225 | return ( P.isNull() ) ? QPixmap() : P; |
226 | } | 226 | } |
227 | 227 | ||
228 | QString TheNSResources::tr( const char * s ) { | 228 | QString TheNSResources::tr( const char * s ) { |
229 | return qApp->translate( "resource", s ); | 229 | return qApp->translate( "resource", s ); |
230 | } | 230 | } |
231 | 231 | ||
232 | const QString & TheNSResources::netNode2Name( const char * s ) { | 232 | const QString & TheNSResources::netNode2Name( const char * s ) { |
233 | return NodeTypeNameMap[s]; | 233 | return NodeTypeNameMap[s]; |
234 | } | 234 | } |
235 | 235 | ||
236 | const QString & TheNSResources::netNode2Description( const char * s ) { | 236 | const QString & TheNSResources::netNode2Description( const char * s ) { |
237 | return NodeTypeDescriptionMap[s]; | 237 | return NodeTypeDescriptionMap[s]; |
238 | } | 238 | } |
239 | 239 | ||
240 | void TheNSResources::addConnection( NodeCollection * NC ) { | 240 | void TheNSResources::addConnection( NodeCollection * NC ) { |
241 | ANetNodeInstance * NNI; | 241 | ANetNodeInstance * NNI; |
242 | ConnectionsMap.insert( NC->name(), NC ); | 242 | ConnectionsMap.insert( NC->name(), NC ); |
243 | // add (new) nodes to NodeList | 243 | // add (new) nodes to NodeList |
244 | for( QListIterator<ANetNodeInstance> it(*NC); | 244 | for( QListIterator<ANetNodeInstance> it(*NC); |
245 | it.current(); | 245 | it.current(); |
246 | ++it ) { | 246 | ++it ) { |
247 | NNI = it.current(); | 247 | NNI = it.current(); |
248 | if( findNodeInstance( NNI->name() ) == 0 ) { | 248 | if( findNodeInstance( NNI->name() ) == 0 ) { |
249 | // new item | 249 | // new item |
250 | addNodeInstance( NNI ); | 250 | addNodeInstance( NNI ); |
251 | } | 251 | } |
252 | } | 252 | } |
253 | } | 253 | } |
254 | 254 | ||
255 | void TheNSResources::removeConnection( const QString & N ) { | 255 | void TheNSResources::removeConnection( const QString & N ) { |
256 | NodeCollection * NC = findConnection( N ); | 256 | NodeCollection * NC = findConnection( N ); |
257 | if( ! NC ) | 257 | if( ! NC ) |
258 | return; | 258 | return; |
259 | 259 | ||
260 | // delete netnodes in this connection | 260 | // delete netnodes in this connection |
261 | ANetNodeInstance * NNI; | 261 | ANetNodeInstance * NNI; |
262 | for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) { | 262 | for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) { |
263 | removeNodeInstance( NNI->name() ); | 263 | removeNodeInstance( NNI->name() ); |
264 | } | 264 | } |
265 | ConnectionsMap.remove( N ); | 265 | ConnectionsMap.remove( N ); |
266 | } | 266 | } |
267 | 267 | ||
268 | NodeCollection * TheNSResources::findConnection( const QString & S ) { | 268 | NodeCollection * TheNSResources::findConnection( const QString & S ) { |
269 | return ConnectionsMap[ S ]; | 269 | return ConnectionsMap[ S ]; |
270 | } | 270 | } |
271 | 271 | ||
272 | /* | 272 | /* |
273 | void TheNSResources::renumberConnections( void ) { | 273 | void TheNSResources::renumberConnections( void ) { |
274 | Name2Connection_t & M = NSResources->connections(); | 274 | Name2Connection_t & M = NSResources->connections(); |
275 | NodeCollection * NC; | 275 | NodeCollection * NC; |
276 | 276 | ||
277 | // for all connections | 277 | // for all connections |
278 | NodeCollection::resetMaxNr(); | 278 | NodeCollection::resetMaxNr(); |
279 | for( QDictIterator<NodeCollection> it(M); | 279 | for( QDictIterator<NodeCollection> it(M); |
280 | it.current(); | 280 | it.current(); |
281 | ++it ) { | 281 | ++it ) { |
282 | NC = it.current(); | 282 | NC = it.current(); |
283 | NC->setNumber( NC->maxConnectionNumber()+1 ); | 283 | NC->setNumber( NC->maxConnectionNumber()+1 ); |
284 | NC->setModified( 1 ); | 284 | NC->setModified( 1 ); |
285 | } | 285 | } |
286 | } | 286 | } |
287 | */ | 287 | */ |
288 | 288 | ||
289 | typedef struct EnvVars { | 289 | typedef struct EnvVars { |
290 | char * Name; | 290 | char * Name; |
291 | int Len; | 291 | int Len; |
292 | } EnvVar_t; | 292 | } EnvVar_t; |
293 | 293 | ||
294 | #define AnEV(x) x, sizeof(x)-1 | 294 | #define AnEV(x) x, sizeof(x)-1 |
295 | 295 | ||
296 | static EnvVar_t EV[] = { | 296 | static EnvVar_t EV[] = { |
297 | // AnEV( "HOME=" ), -> SPECIAL | 297 | AnEV( "HOME" ), |
298 | // AnEV( "LOGNAME=" ), -> SPECIAL | 298 | AnEV( "LOGNAME" ), |
299 | AnEV( "USER=" ), | 299 | AnEV( "USER" ), |
300 | AnEV( "LD_LIBRARY_PATH=" ), | 300 | AnEV( "LD_LIBRARY_PATH" ), |
301 | AnEV( "PATH=" ), | 301 | AnEV( "PATH" ), |
302 | AnEV( "QTDIR=" ), | 302 | AnEV( "QTDIR" ), |
303 | AnEV( "OPIEDIR=" ), | 303 | AnEV( "OPIEDIR" ), |
304 | AnEV( "SHELL=" ), | 304 | AnEV( "SHELL" ), |
305 | { NULL, 0 } | 305 | { NULL, 0 } |
306 | }; | 306 | }; |
307 | 307 | ||
308 | void TheNSResources::detectCurrentUser( void ) { | 308 | void TheNSResources::detectCurrentUser( void ) { |
309 | // find current running qpe | 309 | // find current running qpe |
310 | QString QPEEnvFile = ""; | 310 | QString QPEEnvFile = ""; |
311 | 311 | ||
312 | CurrentUser.UserName = ""; | ||
313 | CurrentUser.HomeDir = ""; | ||
314 | |||
312 | if( getenv( "OPIEDIR" ) == 0 ) { | 315 | if( getenv( "OPIEDIR" ) == 0 ) { |
313 | // nothing known | 316 | // nothing known |
314 | { // open proc dir and find all dirs in it | 317 | { // open proc dir and find all dirs in it |
315 | QRegExp R("[0-9]+"); | 318 | QRegExp R("[0-9]+"); |
316 | QDir ProcDir( "/proc" ); | 319 | QDir ProcDir( "/proc" ); |
317 | QFileInfo FI; | 320 | QFileInfo FI; |
318 | QStringList EL = ProcDir.entryList( QDir::Dirs ); | 321 | QStringList EL = ProcDir.entryList( QDir::Dirs ); |
319 | 322 | ||
320 | // print it out | 323 | // print it out |
321 | for ( QStringList::Iterator it = EL.begin(); | 324 | for ( QStringList::Iterator it = EL.begin(); |
322 | it != EL.end(); | 325 | it != EL.end(); |
323 | ++it ) { | 326 | ++it ) { |
324 | if( R.match( (*it) ) >= 0 ) { | 327 | if( R.match( (*it) ) >= 0 ) { |
325 | QString S = ProcDir.path()+"/"+ (*it); | 328 | QString S = ProcDir.path()+"/"+ (*it); |
326 | S.append( "/exe" ); | 329 | S.append( "/exe" ); |
327 | FI.setFile( S ); | 330 | FI.setFile( S ); |
328 | // get the link | 331 | // get the link |
329 | S = FI.readLink(); | 332 | S = FI.readLink(); |
330 | if( S.right( 8 ) == "/bin/qpe" ) { | 333 | if( S.right( 8 ) == "/bin/qpe" ) { |
331 | // found running qpe | 334 | // found running qpe |
332 | QPEEnvFile.sprintf( ProcDir.path()+ "/" + (*it) + "/environ" ); | 335 | QPEEnvFile.sprintf( ProcDir.path()+ "/" + (*it) + "/environ" ); |
333 | break; | 336 | break; |
334 | } | 337 | } |
335 | } | 338 | } |
336 | } | 339 | } |
337 | } | 340 | } |
338 | 341 | ||
339 | if( QPEEnvFile.isEmpty() ) { | 342 | if( QPEEnvFile.isEmpty() ) { |
340 | // could not find qpe | 343 | // could not find qpe |
341 | Log(("Could not find qpe\n" )); | 344 | Log(("Could not find qpe\n" )); |
342 | return; | 345 | return; |
343 | } | 346 | } |
344 | 347 | ||
345 | // FI now contains path ProcDir to the cmd dir | 348 | // FI now contains path ProcDir to the cmd dir |
346 | { char * Buf = 0; | 349 | { char * Buf = 0; |
347 | char TB[1024]; | 350 | char TB[1024]; |
348 | long BufSize = 0; | 351 | long BufSize = 0; |
349 | int fd; | 352 | int fd; |
350 | int rd; | 353 | int rd; |
351 | 354 | ||
352 | fd = open( QPEEnvFile.latin1(), O_RDONLY ); | 355 | fd = open( QPEEnvFile.latin1(), O_RDONLY ); |
353 | if( fd < 0 ) { | 356 | if( fd < 0 ) { |
354 | Log(("Could not open %s : %d\n", | 357 | Log(("Could not open %s : %d\n", |
355 | QPEEnvFile.latin1(), errno )); | 358 | QPEEnvFile.latin1(), errno )); |
356 | return; | 359 | return; |
357 | } | 360 | } |
358 | 361 | ||
359 | while( (rd = read( fd, TB, sizeof(TB) ) ) > 0 ) { | 362 | while( (rd = read( fd, TB, sizeof(TB) ) ) > 0 ) { |
360 | Buf = (char *)realloc( Buf, BufSize+rd ); | 363 | Buf = (char *)realloc( Buf, BufSize+rd ); |
361 | memcpy( Buf+BufSize, TB, rd ); | 364 | memcpy( Buf+BufSize, TB, rd ); |
362 | BufSize += rd; | 365 | BufSize += rd; |
363 | } | 366 | } |
364 | 367 | ||
365 | char * Data = Buf; | 368 | char * Data = Buf; |
366 | char * DataEnd = Data+BufSize-1; | 369 | char * DataEnd = Data+BufSize-1; |
367 | 370 | ||
368 | // get env items out of list | 371 | // get env items out of list |
369 | while( Data < DataEnd ) { | 372 | while( Data < DataEnd ) { |
370 | if( strncmp( Data, "LOGNAME=", 8 ) == 0 ) { | ||
371 | CurrentUser.UserName = Data+8; | ||
372 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | ||
373 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = | ||
374 | strdup( Data ); | ||
375 | } else if( strncmp( Data, "HOME=", 5 ) == 0 ) { | ||
376 | CurrentUser.HomeDir = Data+5; | ||
377 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | ||
378 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = | ||
379 | strdup( Data ); | ||
380 | } else { | ||
381 | EnvVar_t * Run = EV; | ||
382 | while( Run->Name ) { | ||
383 | if( strncmp( Data, Run->Name, Run->Len ) == 0 ) { | ||
384 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | ||
385 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = | ||
386 | strdup( Data ); | ||
387 | // put OPIEDIR in env | ||
388 | if( strcmp( Run->Name, "OPIEDIR=" ) == 0 ) { | ||
389 | putenv( CurrentUser.EnvList[CurrentUser.EnvList.size()-1] ); | ||
390 | 373 | ||
391 | } | 374 | EnvVar_t * Run = EV; |
392 | break; | 375 | while( Run->Name ) { |
376 | if( strncmp( Data, Run->Name, Run->Len ) == 0 && | ||
377 | Data[Run->Len] == '=' | ||
378 | ) { | ||
379 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | ||
380 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = | ||
381 | strdup( Data ); | ||
382 | |||
383 | if( strcmp( Run->Name, "OPIEDIR" ) == 0 ) { | ||
384 | // put OPIEDIR in env | ||
385 | putenv( CurrentUser.EnvList[CurrentUser.EnvList.size()-1] ); | ||
386 | } else if( strcmp( Run->Name, "HOME" ) == 0 ) { | ||
387 | CurrentUser.HomeDir = Data+5; | ||
388 | } else if( strcmp( Run->Name, "LOGNAME" ) == 0 ) { | ||
389 | CurrentUser.UserName = Data+8; | ||
393 | } | 390 | } |
394 | Run ++; | 391 | break; |
395 | } | 392 | } |
393 | Run ++; | ||
396 | } | 394 | } |
397 | 395 | ||
398 | Data += strlen( Data )+1; | 396 | Data += strlen( Data )+1; |
399 | } | 397 | } |
400 | 398 | ||
401 | free( Buf ); | 399 | free( Buf ); |
402 | 400 | ||
403 | if( ! CurrentUser.UserName.isEmpty() ) { | 401 | if( ! CurrentUser.UserName.isEmpty() ) { |
404 | // find user info | 402 | // find user info |
405 | struct passwd pwd; | 403 | struct passwd pwd; |
406 | struct passwd * pwdres; | 404 | struct passwd * pwdres; |
407 | 405 | ||
408 | if( getpwnam_r( CurrentUser.UserName.latin1(), | 406 | if( getpwnam_r( CurrentUser.UserName.latin1(), |
409 | &pwd, TB, sizeof(TB), &pwdres ) || | 407 | &pwd, TB, sizeof(TB), &pwdres ) || |
410 | pwdres == 0 ) { | 408 | pwdres == 0 ) { |
411 | Log(("Could not determine user %s : %d\n", | 409 | Log(("Could not determine user %s : %d\n", |
412 | CurrentUser.UserName.latin1(), errno )); | 410 | CurrentUser.UserName.latin1(), errno )); |
413 | return; | 411 | return; |
414 | } | 412 | } |
415 | CurrentUser.Uid = pwd.pw_uid; | 413 | CurrentUser.Uid = pwd.pw_uid; |
416 | CurrentUser.Gid = pwd.pw_gid; | 414 | CurrentUser.Gid = pwd.pw_gid; |
417 | } else{ | 415 | } else{ |
418 | CurrentUser.Uid = | 416 | CurrentUser.Uid = |
419 | CurrentUser.Gid = -1; | 417 | CurrentUser.Gid = -1; |
420 | } | 418 | } |
421 | } | 419 | } |
422 | 420 | ||
423 | } else { | 421 | } else { |
424 | CurrentUser.UserName = getenv( "LOGNAME" ); | 422 | char * X; |
425 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | 423 | QString S; |
426 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = | 424 | |
427 | strdup( CurrentUser.UserName ); | 425 | EnvVar_t * Run = EV; |
428 | 426 | while( Run->Name ) { | |
429 | CurrentUser.HomeDir = getenv( "HOME" ); | 427 | |
430 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | 428 | if( ( X = getenv( Run->Name ) ) ) { |
431 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = | 429 | Log(( "Env : %s = %s\n", Run->Name, X )); |
432 | strdup( CurrentUser.HomeDir ); | 430 | |
433 | 431 | S.sprintf( "%s=%s", Run->Name, X ); | |
434 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | 432 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); |
435 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("USER"); | 433 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = |
436 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | 434 | strdup( S.latin1() ); |
437 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("LD_LIBRARY_PATH"); | 435 | |
438 | 436 | if( strcmp( Run->Name, "LOGNAME" ) == 0 ) { | |
439 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | 437 | CurrentUser.UserName = X; |
440 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("PATH"); | 438 | } else if( strcmp( Run->Name, "HOME" ) == 0 ) { |
441 | 439 | CurrentUser.HomeDir = X; | |
442 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | 440 | } // regulare env var |
443 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("QTDIR"); | 441 | } else { |
444 | 442 | Log(("Could not determine %s\n", Run->Name )); | |
445 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | 443 | } |
446 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("OPIEDIR"); | 444 | Run ++; |
447 | CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); | 445 | } |
448 | CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("SHELL"); | ||
449 | 446 | ||
450 | CurrentUser.Uid = getuid(); | 447 | CurrentUser.Uid = getuid(); |
451 | CurrentUser.Gid = getgid(); | 448 | CurrentUser.Gid = getgid(); |
452 | } | 449 | } |
453 | } | 450 | } |
diff --git a/noncore/settings/networksettings2/networksettings2/resources.h b/noncore/settings/networksettings2/networksettings2/resources.h index 16355ba..23b120e 100644 --- a/noncore/settings/networksettings2/networksettings2/resources.h +++ b/noncore/settings/networksettings2/networksettings2/resources.h | |||
@@ -1,132 +1,137 @@ | |||
1 | #ifndef __RESOURCES__H | 1 | #ifndef __RESOURCES__H |
2 | #define __RESOURCES__H | 2 | #define __RESOURCES__H |
3 | 3 | ||
4 | #include <qstring.h> | 4 | #include <qstring.h> |
5 | #include <qdict.h> | 5 | #include <qdict.h> |
6 | #include <qmap.h> | 6 | #include <qmap.h> |
7 | #include <qlist.h> | 7 | #include <qlist.h> |
8 | #include "netnode.h" | 8 | #include "netnode.h" |
9 | #include "systemfile.h" | 9 | #include "systemfile.h" |
10 | #include "system.h" | 10 | #include "system.h" |
11 | 11 | ||
12 | class QLibrary; | 12 | class QLibrary; |
13 | class QPixmap; | 13 | class QPixmap; |
14 | class ANetNode; | 14 | class ANetNode; |
15 | class ANetNodeInstance; | 15 | class ANetNodeInstance; |
16 | 16 | ||
17 | typedef void (*GetNetNodeListFt_t)(QList<ANetNode>& PNN ); | 17 | typedef void (*GetNetNodeListFt_t)(QList<ANetNode>& PNN ); |
18 | 18 | ||
19 | typedef struct NetNode_S { | 19 | typedef struct NetNode_S { |
20 | ANetNode * NetNode; | 20 | ANetNode * NetNode; |
21 | QLibrary * TheLibrary; | 21 | QLibrary * TheLibrary; |
22 | long NodeCountInLib; | 22 | long NodeCountInLib; |
23 | } NetNode_t; | 23 | } NetNode_t; |
24 | 24 | ||
25 | class CurrentQPEUser { | 25 | class CurrentQPEUser { |
26 | 26 | ||
27 | public : | 27 | public : |
28 | CurrentQPEUser() : UserName(), HomeDir(), EnvList() {} | 28 | CurrentQPEUser() : UserName(), HomeDir(), EnvList() {} |
29 | 29 | ||
30 | inline bool known( void ) | ||
31 | { return ! HomeDir.isEmpty() && ! UserName.isEmpty(); } | ||
32 | |||
30 | QString UserName; | 33 | QString UserName; |
31 | QString HomeDir; | 34 | QString HomeDir; |
32 | int Uid; | 35 | int Uid; |
33 | int Gid; | 36 | int Gid; |
34 | QArray<char *> EnvList; | 37 | QArray<char *> EnvList; |
35 | }; | 38 | }; |
36 | 39 | ||
37 | typedef QDict<NetNode_t> Name2NetNode_t; | 40 | typedef QDict<NetNode_t> Name2NetNode_t; |
38 | typedef QDict<ANetNodeInstance > Name2Instance_t; | 41 | typedef QDict<ANetNodeInstance > Name2Instance_t; |
39 | typedef QDict<NodeCollection> Name2Connection_t; | 42 | typedef QDict<NodeCollection> Name2Connection_t; |
40 | typedef QDict<SystemFile> Name2SystemFile_t; | 43 | typedef QDict<SystemFile> Name2SystemFile_t; |
41 | 44 | ||
42 | class TheNSResources { | 45 | class TheNSResources { |
43 | 46 | ||
44 | public : | 47 | public : |
45 | 48 | ||
46 | TheNSResources( void ); | 49 | TheNSResources( void ); |
47 | ~TheNSResources( ); | 50 | ~TheNSResources( ); |
48 | 51 | ||
49 | // give busy feedback | 52 | // give busy feedback |
50 | void busy( bool B ); | 53 | void busy( bool B ); |
51 | 54 | ||
52 | System & system() | 55 | System & system() |
53 | { return *TheSystem; } | 56 | { return *TheSystem; } |
54 | 57 | ||
55 | int assignConnectionNumber(void); | 58 | int assignConnectionNumber(void); |
56 | QPixmap getPixmap( const QString & Name ); | 59 | QPixmap getPixmap( const QString & Name ); |
57 | 60 | ||
58 | Name2NetNode_t & netNodes( void ) | 61 | Name2NetNode_t & netNodes( void ) |
59 | { return AllNodeTypes; } | 62 | { return AllNodeTypes; } |
60 | bool netNodeExists( const QString & X ) | 63 | bool netNodeExists( const QString & X ) |
61 | { return AllNodeTypes.find(X)!=0; } | 64 | { return AllNodeTypes.find(X)!=0; } |
62 | ANetNode * findNetNode( const QString & N ) | 65 | ANetNode * findNetNode( const QString & N ) |
63 | { NetNode_t * NNT = AllNodeTypes.find(N); | 66 | { NetNode_t * NNT = AllNodeTypes.find(N); |
64 | return (NNT) ? NNT->NetNode : 0; | 67 | return (NNT) ? NNT->NetNode : 0; |
65 | } | 68 | } |
66 | 69 | ||
67 | Name2SystemFile_t & systemFiles( void ) | 70 | Name2SystemFile_t & systemFiles( void ) |
68 | { return SystemFiles; } | 71 | { return SystemFiles; } |
69 | void addSystemFile( const QString & ID, | 72 | void addSystemFile( const QString & ID, |
70 | const QString & P, | 73 | const QString & P, |
71 | bool KDI ); | 74 | bool KDI ); |
72 | 75 | ||
73 | ANetNodeInstance * createNodeInstance( const QString & S ) | 76 | ANetNodeInstance * createNodeInstance( const QString & S ) |
74 | { ANetNodeInstance * NNI = 0; | 77 | { ANetNodeInstance * NNI = 0; |
75 | NetNode_t * NNT = AllNodeTypes[S]; | 78 | NetNode_t * NNT = AllNodeTypes[S]; |
76 | if( ! NNT ) { | 79 | if( ! NNT ) { |
77 | return 0; | 80 | return 0; |
78 | } | 81 | } |
79 | NNI = NNT->NetNode->createInstance(); | 82 | NNI = NNT->NetNode->createInstance(); |
80 | NNI->initialize(); | 83 | NNI->initialize(); |
81 | return NNI; | 84 | return NNI; |
82 | } | 85 | } |
83 | 86 | ||
84 | Name2Instance_t & netNodeInstances( void ) | 87 | Name2Instance_t & netNodeInstances( void ) |
85 | { return AllNodes; } | 88 | { return AllNodes; } |
86 | void addNodeInstance( ANetNodeInstance * I ) | 89 | void addNodeInstance( ANetNodeInstance * I ) |
87 | { AllNodes.insert( I->name(), I ); } | 90 | { AllNodes.insert( I->name(), I ); } |
88 | void removeNodeInstance( const QString & N ) | 91 | void removeNodeInstance( const QString & N ) |
89 | { AllNodes.remove( N );} | 92 | { AllNodes.remove( N );} |
90 | ANetNodeInstance * findNodeInstance( const QString & S ) | 93 | ANetNodeInstance * findNodeInstance( const QString & S ) |
91 | { return (AllNodes.find(S)!=0) ? AllNodes[S] : 0; } | 94 | { return (AllNodes.find(S)!=0) ? AllNodes[S] : 0; } |
92 | 95 | ||
93 | const QString & netNode2Name( const char * Type ); | 96 | const QString & netNode2Name( const char * Type ); |
94 | const QString & netNode2Description( const char * Type ); | 97 | const QString & netNode2Description( const char * Type ); |
95 | 98 | ||
96 | void addConnection( NodeCollection * NC ); | 99 | void addConnection( NodeCollection * NC ); |
97 | void removeConnection( const QString & N ); | 100 | void removeConnection( const QString & N ); |
98 | NodeCollection * findConnection( const QString & N ); | 101 | NodeCollection * findConnection( const QString & N ); |
99 | Name2Connection_t & connections( void ) | 102 | Name2Connection_t & connections( void ) |
100 | { return ConnectionsMap; } | 103 | { return ConnectionsMap; } |
101 | 104 | ||
105 | inline bool userKnown( void ) | ||
106 | { return CurrentUser.known(); } | ||
102 | CurrentQPEUser & currentUser( void ) | 107 | CurrentQPEUser & currentUser( void ) |
103 | { return CurrentUser; } | 108 | { return CurrentUser; } |
104 | 109 | ||
105 | private : | 110 | private : |
106 | 111 | ||
107 | void detectCurrentUser( void ); | 112 | void detectCurrentUser( void ); |
108 | QString tr( const char * path ); | 113 | QString tr( const char * path ); |
109 | void findAvailableNetNodes( const QString &path ); | 114 | void findAvailableNetNodes( const QString &path ); |
110 | bool loadNetNode( | 115 | bool loadNetNode( |
111 | const QString &pluginFileName, | 116 | const QString &pluginFileName, |
112 | const QString &resolveString = "create_plugin"); | 117 | const QString &resolveString = "create_plugin"); |
113 | 118 | ||
114 | QMap< QString, QString> NodeTypeNameMap; | 119 | QMap< QString, QString> NodeTypeNameMap; |
115 | QMap< QString, QString> NodeTypeDescriptionMap; | 120 | QMap< QString, QString> NodeTypeDescriptionMap; |
116 | Name2Connection_t ConnectionsMap; | 121 | Name2Connection_t ConnectionsMap; |
117 | System * TheSystem; | 122 | System * TheSystem; |
118 | Name2SystemFile_t SystemFiles; | 123 | Name2SystemFile_t SystemFiles; |
119 | 124 | ||
120 | // all node type classes | 125 | // all node type classes |
121 | Name2NetNode_t AllNodeTypes; | 126 | Name2NetNode_t AllNodeTypes; |
122 | 127 | ||
123 | // all nodes | 128 | // all nodes |
124 | Name2Instance_t AllNodes; | 129 | Name2Instance_t AllNodes; |
125 | 130 | ||
126 | CurrentQPEUser CurrentUser; | 131 | CurrentQPEUser CurrentUser; |
127 | }; | 132 | }; |
128 | 133 | ||
129 | extern TheNSResources * _NSResources; | 134 | extern TheNSResources * _NSResources; |
130 | #define NSResources _NSResources | 135 | #define NSResources _NSResources |
131 | 136 | ||
132 | #endif | 137 | #endif |
diff --git a/noncore/settings/networksettings2/nsdata.cpp b/noncore/settings/networksettings2/nsdata.cpp index d709c0a..e2dd5b5 100644 --- a/noncore/settings/networksettings2/nsdata.cpp +++ b/noncore/settings/networksettings2/nsdata.cpp | |||
@@ -1,593 +1,603 @@ | |||
1 | #include <stdlib.h> | 1 | #include <stdlib.h> |
2 | #include <qpe/qpeapplication.h> | 2 | #include <qpe/qpeapplication.h> |
3 | #include <qtextstream.h> | 3 | #include <qtextstream.h> |
4 | #include <qdir.h> | 4 | #include <qdir.h> |
5 | #include <qfile.h> | 5 | #include <qfile.h> |
6 | #include <qfileinfo.h> | 6 | #include <qfileinfo.h> |
7 | 7 | ||
8 | #include "nsdata.h" | 8 | #include "nsdata.h" |
9 | #include <asdevice.h> | 9 | #include <asdevice.h> |
10 | #include <resources.h> | 10 | #include <resources.h> |
11 | 11 | ||
12 | static QString CfgFile; | 12 | static QString CfgFile; |
13 | 13 | ||
14 | NetworkSettingsData::NetworkSettingsData( void ) { | 14 | NetworkSettingsData::NetworkSettingsData( void ) { |
15 | // init global resources structure | 15 | // init global resources structure |
16 | new TheNSResources(); | 16 | new TheNSResources(); |
17 | 17 | ||
18 | if( ! NSResources->userKnown() ) { | ||
19 | Log(( "Cannot detect qpe user HOME=\"%s\" USER=\"%s\"\n", | ||
20 | NSResources->currentUser().HomeDir.latin1(), | ||
21 | NSResources->currentUser().UserName.latin1() )); | ||
22 | return; | ||
23 | } | ||
24 | |||
18 | CfgFile.sprintf( "%s/Settings/NS2.conf", | 25 | CfgFile.sprintf( "%s/Settings/NS2.conf", |
19 | NSResources->currentUser().HomeDir.latin1() ); | 26 | NSResources->currentUser().HomeDir.latin1() ); |
20 | Log(( "Cfg from %s\n", CfgFile.latin1() )); | 27 | Log(( "Cfg from %s\n", CfgFile.latin1() )); |
21 | 28 | ||
22 | // load settings | 29 | // load settings |
23 | IsModified = 0; | 30 | IsModified = 0; |
24 | loadSettings(); | 31 | loadSettings(); |
25 | } | 32 | } |
26 | 33 | ||
27 | // saving is done by caller | 34 | // saving is done by caller |
28 | NetworkSettingsData::~NetworkSettingsData( void ) { | 35 | NetworkSettingsData::~NetworkSettingsData( void ) { |
29 | delete NSResources; | 36 | delete NSResources; |
30 | } | 37 | } |
31 | 38 | ||
32 | void NetworkSettingsData::loadSettings( void ) { | 39 | void NetworkSettingsData::loadSettings( void ) { |
33 | QString Line, S; | 40 | QString Line, S; |
34 | QString Attr, Value; | 41 | QString Attr, Value; |
35 | long idx; | 42 | long idx; |
36 | 43 | ||
37 | QFile F( CfgFile ); | 44 | QFile F( CfgFile ); |
38 | QTextStream TS( &F ); | 45 | QTextStream TS( &F ); |
39 | 46 | ||
40 | do { | 47 | do { |
41 | 48 | ||
42 | if( ! F.open(IO_ReadOnly) ) | 49 | if( ! F.open(IO_ReadOnly) ) |
43 | break; | 50 | break; |
44 | 51 | ||
45 | /* load the file -> | 52 | /* load the file -> |
46 | 53 | ||
47 | FORMAT : | 54 | FORMAT : |
48 | 55 | ||
49 | [NETNODETYPE] | 56 | [NETNODETYPE] |
50 | Entries ... | 57 | Entries ... |
51 | <EMPTYLINE> | 58 | <EMPTYLINE> |
52 | [connection] | 59 | [connection] |
53 | Name=Name | 60 | Name=Name |
54 | Node=Name | 61 | Node=Name |
55 | <EMPTYLINE> | 62 | <EMPTYLINE> |
56 | */ | 63 | */ |
57 | while( ! TS.atEnd() ) { | 64 | while( ! TS.atEnd() ) { |
58 | S = Line = TS.readLine(); | 65 | S = Line = TS.readLine(); |
59 | 66 | ||
60 | if ( S.isEmpty() || S[0] != '[' ) | 67 | if ( S.isEmpty() || S[0] != '[' ) |
61 | continue; | 68 | continue; |
62 | 69 | ||
63 | S = S.mid( 1, S.length()-2 ); | 70 | S = S.mid( 1, S.length()-2 ); |
64 | 71 | ||
65 | if( ! NSResources ) { | 72 | if( ! NSResources ) { |
66 | continue; | 73 | continue; |
67 | } | 74 | } |
68 | 75 | ||
69 | if( S == "connection" ) { | 76 | if( S == "connection" ) { |
70 | // load connections -> collections of nodes | 77 | // load connections -> collections of nodes |
71 | NodeCollection * NC = new NodeCollection( TS ); | 78 | NodeCollection * NC = new NodeCollection( TS ); |
72 | NSResources->addConnection( NC ); | 79 | NSResources->addConnection( NC ); |
73 | } else { | 80 | } else { |
74 | ANetNode * NN = 0; | 81 | ANetNode * NN = 0; |
75 | ANetNodeInstance* NNI = 0; | 82 | ANetNodeInstance* NNI = 0; |
76 | if( S.startsWith( "nodetype " ) ) { | 83 | if( S.startsWith( "nodetype " ) ) { |
77 | S = S.mid( 9, S.length()-9 ); | 84 | S = S.mid( 9, S.length()-9 ); |
78 | S = deQuote(S); | 85 | S = deQuote(S); |
79 | // try to find netnode | 86 | // try to find netnode |
80 | NN = NSResources->findNetNode( S ); | 87 | NN = NSResources->findNetNode( S ); |
81 | Log( ( "Node %s : %p\n", S.latin1(), NN ) ); | 88 | Log( ( "Node %s : %p\n", S.latin1(), NN ) ); |
82 | } else { | 89 | } else { |
83 | // try to find instance | 90 | // try to find instance |
84 | NNI = NSResources->createNodeInstance( S ); | 91 | NNI = NSResources->createNodeInstance( S ); |
85 | Log( ( "NodeInstance %s : %p\n", S.latin1(), NNI )); | 92 | Log( ( "NodeInstance %s : %p\n", S.latin1(), NNI )); |
86 | } | 93 | } |
87 | 94 | ||
88 | if( NN == 0 && NNI == 0 ) { | 95 | if( NN == 0 && NNI == 0 ) { |
89 | LeftOvers.append( Line ); | 96 | LeftOvers.append( Line ); |
90 | } | 97 | } |
91 | 98 | ||
92 | do { | 99 | do { |
93 | S = Line = TS.readLine(); | 100 | S = Line = TS.readLine(); |
94 | 101 | ||
95 | if( NN || NNI ) { | 102 | if( NN || NNI ) { |
96 | if( S.isEmpty() ) { | 103 | if( S.isEmpty() ) { |
97 | // empty line | 104 | // empty line |
98 | break; | 105 | break; |
99 | } | 106 | } |
100 | idx = S.find( '=' ); | 107 | idx = S.find( '=' ); |
101 | if( idx > 0 ) { | 108 | if( idx > 0 ) { |
102 | Attr = S.left( idx ); | 109 | Attr = S.left( idx ); |
103 | Value = S.mid( idx+1, S.length() ); | 110 | Value = S.mid( idx+1, S.length() ); |
104 | } else { | 111 | } else { |
105 | Value=""; | 112 | Value=""; |
106 | Attr = S; | 113 | Attr = S; |
107 | } | 114 | } |
108 | 115 | ||
109 | Value.stripWhiteSpace(); | 116 | Value.stripWhiteSpace(); |
110 | Attr.stripWhiteSpace(); | 117 | Attr.stripWhiteSpace(); |
111 | Attr.lower(); | 118 | Attr.lower(); |
112 | // dequote Attr | 119 | // dequote Attr |
113 | Value = deQuote(Value); | 120 | Value = deQuote(Value); |
114 | 121 | ||
115 | if( NN ) { | 122 | if( NN ) { |
116 | // set the attribute | 123 | // set the attribute |
117 | NN->setAttribute( Attr, Value ); | 124 | NN->setAttribute( Attr, Value ); |
118 | } else { | 125 | } else { |
119 | // set the attribute | 126 | // set the attribute |
120 | NNI->setAttribute( Attr, Value ); | 127 | NNI->setAttribute( Attr, Value ); |
121 | } | 128 | } |
122 | } else { | 129 | } else { |
123 | LeftOvers.append( Line ); | 130 | LeftOvers.append( Line ); |
124 | // add empty line too as delimiter | 131 | // add empty line too as delimiter |
125 | if( S.isEmpty() ) { | 132 | if( S.isEmpty() ) { |
126 | // empty line | 133 | // empty line |
127 | break; | 134 | break; |
128 | } | 135 | } |
129 | } | 136 | } |
130 | } while( 1 ); | 137 | } while( 1 ); |
131 | 138 | ||
132 | if( NNI ) { | 139 | if( NNI ) { |
133 | // loading from file -> exists | 140 | // loading from file -> exists |
134 | NNI->setNew( FALSE ); | 141 | NNI->setNew( FALSE ); |
135 | NSResources->addNodeInstance( NNI ); | 142 | NSResources->addNodeInstance( NNI ); |
136 | } | 143 | } |
137 | } | 144 | } |
138 | } | 145 | } |
139 | 146 | ||
140 | } while( 0 ); | 147 | } while( 0 ); |
141 | 148 | ||
142 | } | 149 | } |
143 | 150 | ||
144 | QString NetworkSettingsData::saveSettings( void ) { | 151 | QString NetworkSettingsData::saveSettings( void ) { |
145 | QString ErrS = ""; | 152 | QString ErrS = ""; |
146 | 153 | ||
147 | if( ! isModified() ) | 154 | if( ! isModified() ) |
148 | return ErrS; | 155 | return ErrS; |
149 | 156 | ||
150 | QString S; | 157 | QString S; |
151 | QFile F( CfgFile + ".bup" ); | 158 | QFile F( CfgFile + ".bup" ); |
152 | 159 | ||
153 | Log( ( "Saving settings to %s\n", CfgFile.latin1() )); | 160 | Log( ( "Saving settings to %s\n", CfgFile.latin1() )); |
154 | if( ! F.open( IO_WriteOnly | IO_Truncate ) ) { | 161 | if( ! F.open( IO_WriteOnly | IO_Truncate ) ) { |
155 | ErrS = qApp->translate( "NetworkSettings", | 162 | ErrS = qApp->translate( "NetworkSettings", |
156 | "<p>Could not save setup to \"%1\" !</p>" ). | 163 | "<p>Could not save setup to \"%1\" !</p>" ). |
157 | arg(CfgFile); | 164 | arg(CfgFile); |
158 | // problem | 165 | // problem |
159 | return ErrS; | 166 | return ErrS; |
160 | } | 167 | } |
161 | 168 | ||
162 | QTextStream TS( &F ); | 169 | QTextStream TS( &F ); |
163 | 170 | ||
164 | // save leftovers | 171 | // save leftovers |
165 | for ( QStringList::Iterator it = LeftOvers.begin(); | 172 | for ( QStringList::Iterator it = LeftOvers.begin(); |
166 | it != LeftOvers.end(); ++it ) { | 173 | it != LeftOvers.end(); ++it ) { |
167 | TS << (*it) << endl; | 174 | TS << (*it) << endl; |
168 | } | 175 | } |
169 | 176 | ||
170 | // save global configs | 177 | // save global configs |
171 | for( QDictIterator<NetNode_t> it( NSResources->netNodes() ); | 178 | for( QDictIterator<NetNode_t> it( NSResources->netNodes() ); |
172 | it.current(); | 179 | it.current(); |
173 | ++it ) { | 180 | ++it ) { |
174 | TS << "[nodetype " | 181 | TS << "[nodetype " |
175 | << quote( QString( it.current()->NetNode->name() ) ) | 182 | << quote( QString( it.current()->NetNode->name() ) ) |
176 | << "]" | 183 | << "]" |
177 | << endl; | 184 | << endl; |
178 | 185 | ||
179 | it.current()->NetNode->saveAttributes( TS ); | 186 | it.current()->NetNode->saveAttributes( TS ); |
180 | TS << endl; | 187 | TS << endl; |
181 | } | 188 | } |
182 | 189 | ||
183 | { Name2Connection_t & M = NSResources->connections(); | 190 | { Name2Connection_t & M = NSResources->connections(); |
184 | ANetNodeInstance * NNI; | 191 | ANetNodeInstance * NNI; |
185 | 192 | ||
186 | // for all connections | 193 | // for all connections |
187 | for( QDictIterator<NodeCollection> it(M); | 194 | for( QDictIterator<NodeCollection> it(M); |
188 | it.current(); | 195 | it.current(); |
189 | ++it ) { | 196 | ++it ) { |
190 | // all nodes in those connections | 197 | // all nodes in those connections |
191 | for( QListIterator<ANetNodeInstance> nit(*(it.current())); | 198 | for( QListIterator<ANetNodeInstance> nit(*(it.current())); |
192 | nit.current(); | 199 | nit.current(); |
193 | ++nit ) { | 200 | ++nit ) { |
194 | // header | 201 | // header |
195 | NNI = nit.current(); | 202 | NNI = nit.current(); |
196 | TS << '[' | 203 | TS << '[' |
197 | << QString(NNI->nodeClass()->name()) | 204 | << QString(NNI->nodeClass()->name()) |
198 | << ']' | 205 | << ']' |
199 | << endl; | 206 | << endl; |
200 | NNI->saveAttributes( TS ); | 207 | NNI->saveAttributes( TS ); |
201 | TS << endl; | 208 | TS << endl; |
202 | } | 209 | } |
203 | 210 | ||
204 | TS << "[connection]" << endl; | 211 | TS << "[connection]" << endl; |
205 | it.current()->save(TS); | 212 | it.current()->save(TS); |
206 | } | 213 | } |
207 | } | 214 | } |
208 | 215 | ||
209 | QDir D("."); | 216 | QDir D("."); |
210 | D.rename( CfgFile + ".bup", CfgFile ); | 217 | D.rename( CfgFile + ".bup", CfgFile ); |
211 | 218 | ||
212 | // | 219 | // |
213 | // proper files AND system files regenerated | 220 | // proper files AND system files regenerated |
214 | // | 221 | // |
215 | 222 | ||
216 | setModified( 0 ); | 223 | setModified( 0 ); |
217 | return ErrS; | 224 | return ErrS; |
218 | } | 225 | } |
219 | 226 | ||
220 | QString NetworkSettingsData::generateSettings( void ) { | 227 | QString NetworkSettingsData::generateSettings( void ) { |
221 | QString S = ""; | 228 | QString S = ""; |
222 | Name2SystemFile_t & SFM = NSResources->systemFiles(); | 229 | Name2SystemFile_t & SFM = NSResources->systemFiles(); |
223 | Name2Connection_t & M = NSResources->connections(); | 230 | Name2Connection_t & M = NSResources->connections(); |
224 | NodeCollection * NC; | 231 | NodeCollection * NC; |
225 | ANetNodeInstance * NNI; | 232 | ANetNodeInstance * NNI; |
226 | ANetNodeInstance * FirstWithData; | 233 | ANetNodeInstance * FirstWithData; |
227 | SystemFile * SF; | 234 | SystemFile * SF; |
228 | AsDevice * CurDev; | 235 | AsDevice * CurDev; |
229 | ANetNode * NN, * CurDevNN = 0; | 236 | ANetNode * NN, * CurDevNN = 0; |
230 | long NoOfDevs; | 237 | long NoOfDevs; |
231 | long DevCtStart; | 238 | long DevCtStart; |
232 | bool needToGenerate; | 239 | bool needToGenerate; |
233 | 240 | ||
234 | // regenerate system files | 241 | // regenerate system files |
235 | Log( ( "Generating settings from %s\n", CfgFile.latin1() )); | 242 | Log( ( "Generating settings from %s\n", CfgFile.latin1() )); |
236 | 243 | ||
237 | // | 244 | // |
238 | // generate files proper to each netnodeinstance | 245 | // generate files proper to each netnodeinstance |
239 | // | 246 | // |
240 | { Name2Instance_t & NNIs = NSResources->netNodeInstances(); | 247 | { Name2Instance_t & NNIs = NSResources->netNodeInstances(); |
241 | 248 | ||
242 | for( QDictIterator<ANetNodeInstance> NNIIt(NNIs); | 249 | for( QDictIterator<ANetNodeInstance> NNIIt(NNIs); |
243 | NNIIt.current(); | 250 | NNIIt.current(); |
244 | ++NNIIt ) { | 251 | ++NNIIt ) { |
245 | // for all nodes find those that are modified | 252 | // for all nodes find those that are modified |
246 | NNI = NNIIt.current(); | 253 | NNI = NNIIt.current(); |
247 | 254 | ||
248 | { // get list of proper files for this nodeclass (if any) | 255 | { // get list of proper files for this nodeclass (if any) |
249 | QStringList * PF = NNI->nodeClass()->properFiles(); | 256 | QStringList * PF = NNI->nodeClass()->properFiles(); |
250 | 257 | ||
251 | if( PF ) { | 258 | if( PF ) { |
252 | for ( QStringList::Iterator it = PF->begin(); | 259 | for ( QStringList::Iterator it = PF->begin(); |
253 | it != PF->end(); | 260 | it != PF->end(); |
254 | ++it ) { | 261 | ++it ) { |
255 | QFile * F = NNI->openFile( (*it) ); | 262 | QFile * F = NNI->openFile( (*it) ); |
256 | if( F ) { | 263 | if( F ) { |
257 | QTextStream TS( F ); | 264 | QTextStream TS( F ); |
258 | if( NNI->generateFile( (*it), F->name(), TS, -1 ) == 2 ) { | 265 | if( NNI->generateFile( (*it), F->name(), TS, -1 ) == 2 ) { |
259 | // problem generating | 266 | // problem generating |
260 | S = qApp->translate( "NetworkSettings", | 267 | S = qApp->translate( "NetworkSettings", |
261 | "<p>Cannot generate files proper to \"%1\"</p>" ). | 268 | "<p>Cannot generate files proper to \"%1\"</p>" ). |
262 | arg(NNI->nodeClass()->name()) ; | 269 | arg(NNI->nodeClass()->name()) ; |
263 | delete F; | 270 | delete F; |
264 | return S; | 271 | return S; |
265 | } | 272 | } |
266 | delete F; | 273 | delete F; |
267 | } | 274 | } |
268 | } | 275 | } |
269 | } | 276 | } |
270 | } | 277 | } |
271 | } | 278 | } |
272 | } | 279 | } |
273 | 280 | ||
274 | // | 281 | // |
275 | // generate all system files | 282 | // generate all system files |
276 | // | 283 | // |
277 | for( QDictIterator<SystemFile> sfit(SFM); | 284 | for( QDictIterator<SystemFile> sfit(SFM); |
278 | sfit.current(); | 285 | sfit.current(); |
279 | ++sfit ) { | 286 | ++sfit ) { |
280 | SF = sfit.current(); | 287 | SF = sfit.current(); |
281 | 288 | ||
282 | // reset all | 289 | // reset all |
283 | for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); | 290 | for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); |
284 | nnit.current(); | 291 | nnit.current(); |
285 | ++nnit ) { | 292 | ++nnit ) { |
286 | nnit.current()->NetNode->setDone(0); | 293 | nnit.current()->NetNode->setDone(0); |
287 | } | 294 | } |
288 | 295 | ||
289 | for( QDictIterator<ANetNodeInstance> nniit( | 296 | for( QDictIterator<ANetNodeInstance> nniit( |
290 | NSResources->netNodeInstances() ); | 297 | NSResources->netNodeInstances() ); |
291 | nniit.current(); | 298 | nniit.current(); |
292 | ++nniit ) { | 299 | ++nniit ) { |
293 | nniit.current()->setDone(0); | 300 | nniit.current()->setDone(0); |
294 | } | 301 | } |
295 | 302 | ||
296 | for( QDictIterator<NodeCollection> ncit(M); | 303 | for( QDictIterator<NodeCollection> ncit(M); |
297 | ncit.current(); | 304 | ncit.current(); |
298 | ++ncit ) { | 305 | ++ncit ) { |
299 | ncit.current()->setDone(0); | 306 | ncit.current()->setDone(0); |
300 | } | 307 | } |
301 | 308 | ||
302 | Log( ( "Generating %s\n", SF->name().latin1() )); | 309 | Log( ( "Generating %s\n", SF->name().latin1() )); |
303 | 310 | ||
304 | needToGenerate = 0; | 311 | needToGenerate = 0; |
305 | 312 | ||
306 | // are there netnodes that have instances and need | 313 | // are there netnodes that have instances and need |
307 | // to write data in this system file ? | 314 | // to write data in this system file ? |
308 | for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); | 315 | for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); |
309 | ! needToGenerate && nnit.current(); | 316 | ! needToGenerate && nnit.current(); |
310 | ++nnit ) { | 317 | ++nnit ) { |
311 | 318 | ||
312 | NN = nnit.current()->NetNode; | 319 | NN = nnit.current()->NetNode; |
313 | 320 | ||
314 | if( NN->hasDataForFile( SF->name() ) ) { | 321 | if( NN->hasDataForFile( SF->name() ) ) { |
315 | // netnode can have data | 322 | // netnode can have data |
316 | 323 | ||
317 | // are there instances of this node ? | 324 | // are there instances of this node ? |
318 | for( QDictIterator<ANetNodeInstance> nniit( | 325 | for( QDictIterator<ANetNodeInstance> nniit( |
319 | NSResources->netNodeInstances() ); | 326 | NSResources->netNodeInstances() ); |
320 | ! needToGenerate && nniit.current(); | 327 | ! needToGenerate && nniit.current(); |
321 | ++nniit ) { | 328 | ++nniit ) { |
322 | if( nniit.current()->nodeClass() == NN ) { | 329 | if( nniit.current()->nodeClass() == NN ) { |
323 | // yes | 330 | // yes |
324 | Log(("Node %s has data\n", | 331 | Log(("Node %s has data\n", |
325 | nniit.current()->name() )); | 332 | nniit.current()->name() )); |
326 | needToGenerate = 1; | 333 | needToGenerate = 1; |
327 | break; | 334 | break; |
328 | } | 335 | } |
329 | } | 336 | } |
330 | } | 337 | } |
331 | } | 338 | } |
332 | 339 | ||
333 | if( ! needToGenerate ) { | 340 | if( ! needToGenerate ) { |
334 | // no instances found that might need to write data | 341 | // no instances found that might need to write data |
335 | // in this systemfile | 342 | // in this systemfile |
336 | Log(("No nodes for systemfile %s\n", SF->name().latin1() )); | 343 | Log(("No nodes for systemfile %s\n", SF->name().latin1() )); |
337 | continue; | 344 | continue; |
338 | } | 345 | } |
339 | 346 | ||
340 | // ok generate this system file | 347 | // ok generate this system file |
341 | SF->open(); | 348 | SF->open(); |
342 | 349 | ||
343 | // global presection for this system file | 350 | // global presection for this system file |
344 | if( ! SF->preSection() ) { | 351 | if( ! SF->preSection() ) { |
345 | S = qApp->translate( "NetworkSettings", | 352 | S = qApp->translate( "NetworkSettings", |
346 | "<p>Error in section \"Preamble\" for file \"%1\"</p>" ). | 353 | "<p>Error in section \"Preamble\" for file \"%1\"</p>" ). |
347 | arg( SF->name() ); | 354 | arg( SF->name() ); |
348 | return S; | 355 | return S; |
349 | } | 356 | } |
350 | 357 | ||
351 | // find connections that want to write to this file | 358 | // find connections that want to write to this file |
352 | for( QDictIterator<NodeCollection> ncit(M); | 359 | for( QDictIterator<NodeCollection> ncit(M); |
353 | ncit.current(); | 360 | ncit.current(); |
354 | ++ncit ) { | 361 | ++ncit ) { |
355 | 362 | ||
356 | NC = ncit.current(); | 363 | NC = ncit.current(); |
357 | 364 | ||
358 | if( NC->done() ) { | 365 | if( NC->done() ) { |
359 | // already done | 366 | // already done |
360 | continue; | 367 | continue; |
361 | } | 368 | } |
362 | 369 | ||
363 | if( ! NC->hasDataForFile( SF->name() ) ) { | 370 | if( ! NC->hasDataForFile( SF->name() ) ) { |
364 | // no data | 371 | // no data |
365 | continue; | 372 | continue; |
366 | } | 373 | } |
367 | 374 | ||
368 | Log(("Generating %s for connection %s\n", | 375 | Log(("Generating %s for connection %s\n", |
369 | SF->name().latin1(), NC->name().latin1() )); | 376 | SF->name().latin1(), NC->name().latin1() )); |
370 | // find highest item that wants to write data to this file | 377 | // find highest item that wants to write data to this file |
371 | FirstWithData = NC->firstWithDataForFile( SF->name() ); | 378 | FirstWithData = NC->firstWithDataForFile( SF->name() ); |
372 | 379 | ||
373 | // find device on which this connection works | 380 | // find device on which this connection works |
374 | CurDev = NC->device(); | 381 | CurDev = NC->device(); |
375 | // class of that node | 382 | // class of that node |
376 | CurDevNN = CurDev->netNode()->nodeClass(); | 383 | CurDevNN = CurDev->netNode()->nodeClass(); |
377 | 384 | ||
378 | Log(( "%s is done %d\n", | 385 | Log(( "%s is done %d\n", |
379 | FirstWithData->nodeClass()->name(), | 386 | FirstWithData->nodeClass()->name(), |
380 | FirstWithData->nodeClass()->done() )); | 387 | FirstWithData->nodeClass()->done() )); |
381 | 388 | ||
382 | if( ! FirstWithData->nodeClass()->done() ) { | 389 | if( ! FirstWithData->nodeClass()->done() ) { |
383 | // generate fixed part | 390 | // generate fixed part |
384 | if( ! SF->preDeviceSection( CurDevNN ) ) { | 391 | if( ! SF->preDeviceSection( CurDevNN ) ) { |
385 | S = qApp->translate( "NetworkSettings", | 392 | S = qApp->translate( "NetworkSettings", |
386 | "<p>Error in section \"Pre-Device\" for file \"%1\"</p>" ). | 393 | "<p>Error in section \"Pre-Device\" for file \"%1\"</p>" ). |
387 | arg( SF->name() ); | 394 | arg( SF->name() ); |
388 | return S; | 395 | return S; |
389 | } | 396 | } |
390 | 397 | ||
391 | if( FirstWithData->nodeClass()->generateFile( | 398 | if( FirstWithData->nodeClass()->generateFile( |
392 | SF->name(), SF->path(), *SF, -1 ) == 2 ) { | 399 | SF->name(), SF->path(), *SF, -1 ) == 2 ) { |
393 | S = qApp->translate( "NetworkSettings", | 400 | S = qApp->translate( "NetworkSettings", |
394 | "<p>Error in section \"Common\" for file \"%1\" and node \"%2\"</p>" ). | 401 | "<p>Error in section \"Common\" for file \"%1\" and node \"%2\"</p>" ). |
395 | arg( SF->name() ). | 402 | arg( SF->name() ). |
396 | arg( CurDevNN->name() ); | 403 | arg( CurDevNN->name() ); |
397 | return S; | 404 | return S; |
398 | } | 405 | } |
399 | FirstWithData->nodeClass()->setDone( 1 ); | 406 | FirstWithData->nodeClass()->setDone( 1 ); |
400 | } | 407 | } |
401 | 408 | ||
402 | NoOfDevs = 0; | 409 | NoOfDevs = 0; |
403 | DevCtStart = -1; | 410 | DevCtStart = -1; |
404 | 411 | ||
405 | if( SF->knowsDeviceInstances() ) { | 412 | if( SF->knowsDeviceInstances() ) { |
406 | DevCtStart = 0; | 413 | DevCtStart = 0; |
407 | NoOfDevs = CurDevNN->instanceCount(); | 414 | NoOfDevs = CurDevNN->instanceCount(); |
408 | } | 415 | } |
409 | 416 | ||
410 | Log(( "Node %s is done %d\n", | 417 | Log(( "Node %s is done %d\n", |
411 | CurDev->netNode()->nodeClass()->name(), | 418 | CurDev->netNode()->nodeClass()->name(), |
412 | CurDev->netNode()->nodeClass()->done() )); | 419 | CurDev->netNode()->nodeClass()->done() )); |
413 | 420 | ||
414 | if( ! CurDev->netNode()->nodeClass()->done() ) { | 421 | if( ! CurDev->netNode()->nodeClass()->done() ) { |
415 | // first time this device is handled | 422 | // first time this device is handled |
416 | // generate common device specific part | 423 | // generate common device specific part |
417 | for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { | 424 | for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { |
418 | 425 | ||
419 | if( FirstWithData->nodeClass()->generateFile( | 426 | if( FirstWithData->nodeClass()->generateFile( |
420 | SF->name(), SF->path(), *SF, CurDev->netNode(), i ) == 2 ) { | 427 | SF->name(), SF->path(), *SF, CurDev->netNode(), i ) == 2 ) { |
421 | S = qApp->translate( "NetworkSettings", | 428 | S = qApp->translate( "NetworkSettings", |
422 | "<p>Error in section \"Device\" for file \"%1\" and node \"%2\"</p>" ). | 429 | "<p>Error in section \"Device\" for file \"%1\" and node \"%2\"</p>" ). |
423 | arg( SF->name() ). | 430 | arg( SF->name() ). |
424 | arg( CurDevNN->name() ); | 431 | arg( CurDevNN->name() ); |
425 | return S; | 432 | return S; |
426 | } | 433 | } |
427 | } | 434 | } |
428 | CurDev->netNode()->nodeClass()->setDone( 1 ); | 435 | CurDev->netNode()->nodeClass()->setDone( 1 ); |
429 | } | 436 | } |
430 | 437 | ||
431 | // generate profile specific info | 438 | // generate profile specific info |
432 | // for all nodeconnections that work on the same device | 439 | // for all nodeconnections that work on the same device |
433 | for( QDictIterator<NodeCollection> ncit2(M); | 440 | for( QDictIterator<NodeCollection> ncit2(M); |
434 | ncit2.current(); | 441 | ncit2.current(); |
435 | ++ncit2 ) { | 442 | ++ncit2 ) { |
436 | 443 | ||
437 | if( ncit2.current()->device() != CurDev ) { | 444 | if( ncit2.current()->device() != CurDev ) { |
438 | // different device | 445 | // different device |
439 | continue; | 446 | continue; |
440 | } | 447 | } |
441 | 448 | ||
442 | Log(("Connection %s of same family\n", ncit2.current()->name().latin1() )); | 449 | Log(("Connection %s of same family\n", ncit2.current()->name().latin1() )); |
443 | // generate | 450 | // generate |
444 | NNI = ncit2.current()->firstWithDataForFile( SF->name() ); | 451 | NNI = ncit2.current()->firstWithDataForFile( SF->name() ); |
445 | for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { | 452 | for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { |
446 | if( ! SF->preNodeSection( NNI, i ) ) { | 453 | if( ! SF->preNodeSection( NNI, i ) ) { |
447 | S = qApp->translate( "NetworkSettings", | 454 | S = qApp->translate( "NetworkSettings", |
448 | "<p>Error in \"Pre-Node Part\" for file \"%1\" and node \"%2\"</p>" ). | 455 | "<p>Error in \"Pre-Node Part\" for file \"%1\" and node \"%2\"</p>" ). |
449 | arg( SF->name() ). | 456 | arg( SF->name() ). |
450 | arg( CurDevNN->name() ); | 457 | arg( CurDevNN->name() ); |
451 | return S; | 458 | return S; |
452 | } | 459 | } |
453 | 460 | ||
454 | switch( NNI->generateFile( | 461 | switch( NNI->generateFile( |
455 | SF->name(), SF->path(), *SF, i ) ) { | 462 | SF->name(), SF->path(), *SF, i ) ) { |
456 | case 0 : | 463 | case 0 : |
457 | (*SF) << endl; | 464 | (*SF) << endl; |
458 | break; | 465 | break; |
459 | case 1 : | 466 | case 1 : |
460 | break; | 467 | break; |
461 | case 2 : | 468 | case 2 : |
462 | S = qApp->translate( "NetworkSettings", | 469 | S = qApp->translate( "NetworkSettings", |
463 | "<p>Error in section \"Node\" for file \"%1\" and node \"%2\"</p>" ). | 470 | "<p>Error in section \"Node\" for file \"%1\" and node \"%2\"</p>" ). |
464 | arg( SF->name() ). | 471 | arg( SF->name() ). |
465 | arg( CurDevNN->name() ); | 472 | arg( CurDevNN->name() ); |
466 | return S; | 473 | return S; |
467 | } | 474 | } |
468 | 475 | ||
469 | if( ! SF->postNodeSection( NNI, i ) ) { | 476 | if( ! SF->postNodeSection( NNI, i ) ) { |
470 | S = qApp->translate( "NetworkSettings", | 477 | S = qApp->translate( "NetworkSettings", |
471 | "<p>Error in \"Post-Node Part\" for file \"%1\" and node \"%2\"</p>" ). | 478 | "<p>Error in \"Post-Node Part\" for file \"%1\" and node \"%2\"</p>" ). |
472 | arg( SF->name() ). | 479 | arg( SF->name() ). |
473 | arg( CurDevNN->name() ); | 480 | arg( CurDevNN->name() ); |
474 | return S; | 481 | return S; |
475 | } | 482 | } |
476 | } | 483 | } |
477 | 484 | ||
478 | ncit2.current()->setDone( 1 ); | 485 | ncit2.current()->setDone( 1 ); |
479 | 486 | ||
480 | } | 487 | } |
481 | } | 488 | } |
482 | 489 | ||
483 | if( ! SF->postDeviceSection( CurDevNN ) ) { | 490 | if( ! SF->postDeviceSection( CurDevNN ) ) { |
484 | S = qApp->translate( "NetworkSettings", | 491 | S = qApp->translate( "NetworkSettings", |
485 | "<p>Error in section \"Post-Device\" for file \"%1\" and node \"%2\"</p>" ). | 492 | "<p>Error in section \"Post-Device\" for file \"%1\" and node \"%2\"</p>" ). |
486 | arg( SF->name() ). | 493 | arg( SF->name() ). |
487 | arg( CurDevNN->name() ); | 494 | arg( CurDevNN->name() ); |
488 | return S; | 495 | return S; |
489 | } | 496 | } |
490 | 497 | ||
491 | 498 | ||
492 | if( ! SF->postSection() ) { | 499 | if( ! SF->postSection() ) { |
493 | S = qApp->translate( "NetworkSettings", | 500 | S = qApp->translate( "NetworkSettings", |
494 | "<p>Error in section \"Closure\" for file \"%1\"</p>" ). | 501 | "<p>Error in section \"Closure\" for file \"%1\"</p>" ). |
495 | arg( SF->name() ); | 502 | arg( SF->name() ); |
496 | return S; | 503 | return S; |
497 | } | 504 | } |
498 | 505 | ||
499 | // end of file | 506 | // end of file |
500 | SF->close(); | 507 | SF->close(); |
501 | } | 508 | } |
502 | return S; | 509 | return S; |
503 | } | 510 | } |
504 | 511 | ||
505 | QList<NodeCollection> NetworkSettingsData::collectPossible( const char * Interface ) { | 512 | QList<NodeCollection> NetworkSettingsData::collectPossible( const char * Interface ) { |
506 | // collect connections that can work on top of this interface | 513 | // collect connections that can work on top of this interface |
507 | NodeCollection * NC; | 514 | NodeCollection * NC; |
508 | QList<NodeCollection> PossibleConnections; | 515 | QList<NodeCollection> PossibleConnections; |
509 | Name2Connection_t & M = NSResources->connections(); | 516 | Name2Connection_t & M = NSResources->connections(); |
510 | 517 | ||
511 | // for all connections | 518 | // for all connections |
512 | for( QDictIterator<NodeCollection> it(M); | 519 | for( QDictIterator<NodeCollection> it(M); |
513 | it.current(); | 520 | it.current(); |
514 | ++it ) { | 521 | ++it ) { |
515 | NC = it.current(); | 522 | NC = it.current(); |
516 | // check if this profile handles the requested interface | 523 | // check if this profile handles the requested interface |
517 | if( NC->handlesInterface( Interface ) && // if different Intf. | 524 | if( NC->handlesInterface( Interface ) && // if different Intf. |
518 | NC->state() != Disabled && // if not enabled | 525 | NC->state() != Disabled && // if not enabled |
519 | NC->state() != IsUp // if already used | 526 | NC->state() != IsUp // if already used |
520 | ) { | 527 | ) { |
521 | Log( ( "Append %s for %s\n", NC->name().latin1(), Interface)); | 528 | Log( ( "Append %s for %s\n", NC->name().latin1(), Interface)); |
522 | PossibleConnections.append( NC ); | 529 | PossibleConnections.append( NC ); |
523 | } | 530 | } |
524 | } | 531 | } |
525 | return PossibleConnections; | 532 | return PossibleConnections; |
526 | } | 533 | } |
527 | 534 | ||
528 | 535 | ||
529 | /* | 536 | /* |
530 | Called by the system to see if interface can be brought UP | 537 | Called by the system to see if interface can be brought UP |
531 | 538 | ||
532 | if allowed, echo Interface-allowed else Interface-disallowed | 539 | if allowed, echo Interface-allowed else Interface-disallowed |
533 | */ | 540 | */ |
534 | 541 | ||
535 | bool NetworkSettingsData::canStart( const char * Interface ) { | 542 | bool NetworkSettingsData::canStart( const char * Interface ) { |
536 | // load situation | 543 | // load situation |
537 | NodeCollection * NC = 0; | 544 | NodeCollection * NC = 0; |
538 | QList<NodeCollection> PossibleConnections; | 545 | QList<NodeCollection> PossibleConnections; |
539 | 546 | ||
540 | PossibleConnections = collectPossible( Interface ); | 547 | PossibleConnections = collectPossible( Interface ); |
541 | 548 | ||
542 | Log( ( "Possiblilies %d\n", PossibleConnections.count() )); | 549 | Log( ( "for %s : Possiblilies %d\n", |
550 | Interface, PossibleConnections.count() )); | ||
543 | switch( PossibleConnections.count() ) { | 551 | switch( PossibleConnections.count() ) { |
544 | case 0 : // no connections | 552 | case 0 : // no connections |
545 | break; | 553 | break; |
546 | case 1 : // one connection | 554 | case 1 : // one connection |
547 | NC = PossibleConnections.first(); | 555 | NC = PossibleConnections.first(); |
548 | break; | 556 | break; |
549 | default : // need to ask user ? | 557 | default : // need to ask user ? |
550 | return 1; | 558 | return 1; |
551 | } | 559 | } |
552 | 560 | ||
553 | if( NC ) { | 561 | if( NC ) { |
554 | switch( NC->state() ) { | 562 | switch( NC->state() ) { |
555 | case Unchecked : | 563 | case Unchecked : |
556 | case Unknown : | 564 | case Unknown : |
557 | case Unavailable : | 565 | case Unavailable : |
558 | case Disabled : | 566 | case Disabled : |
559 | // this profile does not allow interface to be UP | 567 | // this profile does not allow interface to be UP |
560 | // -> try others | 568 | // -> try others |
561 | break; | 569 | break; |
562 | case Off : | 570 | case Off : |
563 | // try to UP the device | 571 | // try to UP the device |
564 | if( ! NC->setState( Activate ) ) { | 572 | if( ! NC->setState( Activate ) ) { |
565 | // cannot bring device Online -> try other alters | 573 | // cannot bring device Online -> try other alters |
566 | break; | 574 | break; |
567 | } | 575 | } |
568 | // FT | 576 | // FT |
569 | case Available : | 577 | case Available : |
570 | case IsUp : // also called for 'ifdown' | 578 | case IsUp : // also called for 'ifdown' |
571 | // device is ready -> done | 579 | // device is ready -> done |
580 | Log(( "%s-c%d-allowed\n", Interface, NC->number() )); | ||
572 | printf( "%s-c%d-allowed\n", Interface, NC->number() ); | 581 | printf( "%s-c%d-allowed\n", Interface, NC->number() ); |
573 | return 0; | 582 | return 0; |
574 | } | 583 | } |
575 | } | 584 | } |
576 | 585 | ||
577 | // if we come here no alternatives are possible | 586 | // if we come here no alternatives are possible |
587 | Log(( "%s-cnn-disallowed\n", Interface )); | ||
578 | printf( "%s-cnn-disallowed\n", Interface ); | 588 | printf( "%s-cnn-disallowed\n", Interface ); |
579 | return 0; | 589 | return 0; |
580 | } | 590 | } |
581 | 591 | ||
582 | /* | 592 | /* |
583 | Called by the system to regenerate config files | 593 | Called by the system to regenerate config files |
584 | */ | 594 | */ |
585 | 595 | ||
586 | bool NetworkSettingsData::regenerate( void ) { | 596 | bool NetworkSettingsData::regenerate( void ) { |
587 | QString S = generateSettings(); | 597 | QString S = generateSettings(); |
588 | if( ! S.isEmpty() ) { | 598 | if( ! S.isEmpty() ) { |
589 | fprintf( stdout, "%s\n", S.latin1() ); | 599 | fprintf( stdout, "%s\n", S.latin1() ); |
590 | return 1; | 600 | return 1; |
591 | } | 601 | } |
592 | return 0; | 602 | return 0; |
593 | } | 603 | } |