author | wimpie <wimpie> | 2005-01-12 01:40:53 (UTC) |
---|---|---|
committer | wimpie <wimpie> | 2005-01-12 01:40:53 (UTC) |
commit | f9a83585111afa08a47176097a150d9f468bfcdf (patch) (unidiff) | |
tree | 6d5a3b5f9716f7c6ca6e7fae8b0e2bac8d6c57da | |
parent | b2e60aa0222b348f34aab501feb8bc854e94413c (diff) | |
download | opie-f9a83585111afa08a47176097a150d9f468bfcdf.zip opie-f9a83585111afa08a47176097a150d9f468bfcdf.tar.gz opie-f9a83585111afa08a47176097a150d9f468bfcdf.tar.bz2 |
*** empty log message ***
12 files changed, 121 insertions, 25 deletions
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp index cd7bb4a..63b214e 100644 --- a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp +++ b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp | |||
@@ -1,164 +1,192 @@ | |||
1 | #include <qapplication.h> | 1 | #include <qapplication.h> |
2 | #include <resources.h> | 2 | #include <resources.h> |
3 | |||
4 | #include <OTPeer.h> | ||
3 | #include <OTDevice.h> | 5 | #include <OTDevice.h> |
4 | #include <OTGateway.h> | 6 | #include <OTGateway.h> |
7 | #include <Opietooth.h> | ||
8 | |||
9 | #include <qlistbox.h> | ||
10 | #include <qframe.h> | ||
11 | #include <qlabel.h> | ||
12 | #include <qlayout.h> | ||
13 | #include <qdialog.h> | ||
14 | |||
5 | #include "bluetoothRFCOMMrun.h" | 15 | #include "bluetoothRFCOMMrun.h" |
6 | 16 | ||
7 | using Opietooth2::OTGateway; | 17 | using Opietooth2::OTGateway; |
8 | using Opietooth2::OTDevice; | 18 | using Opietooth2::OTDevice; |
9 | using Opietooth2::OTDeviceAddress; | 19 | using Opietooth2::OTDeviceAddress; |
20 | using Opietooth2::OTScan; | ||
21 | using Opietooth2::OTPeer; | ||
10 | 22 | ||
11 | BluetoothRFCOMMRun::~BluetoothRFCOMMRun( void ) { | 23 | BluetoothRFCOMMRun::~BluetoothRFCOMMRun( void ) { |
12 | if( OT ) { | 24 | if( OT ) { |
13 | OTGateway::releaseOTGateway(); | 25 | OTGateway::releaseOTGateway(); |
14 | } | 26 | } |
15 | } | 27 | } |
16 | 28 | ||
17 | State_t BluetoothRFCOMMRun::detectState( void ) { | 29 | State_t BluetoothRFCOMMRun::detectState( void ) { |
18 | 30 | ||
19 | if( ! OT ) { | 31 | if( ! OT ) { |
20 | OT = OTGateway::getOTGateway(); | 32 | OT = OTGateway::getOTGateway(); |
21 | } | 33 | } |
22 | 34 | ||
23 | if( deviceNrOfNetworkSetup() >= 0 ) { | 35 | if( deviceNrOfNetworkSetup() >= 0 ) { |
24 | return Available; | 36 | return Available; |
25 | } | 37 | } |
26 | 38 | ||
27 | odebug << "Bluetooth " | 39 | odebug << "Bluetooth " |
28 | << OT->isEnabled() | 40 | << OT->isEnabled() |
29 | << oendl; | 41 | << oendl; |
30 | 42 | ||
31 | return ( OT->isEnabled() ) ? Off : Unavailable; | 43 | return ( OT->isEnabled() ) ? Off : Unavailable; |
32 | } | 44 | } |
33 | 45 | ||
34 | QString BluetoothRFCOMMRun::setMyState( NetworkSetup *, | 46 | QString BluetoothRFCOMMRun::setMyState( NetworkSetup *, |
35 | Action_t A, | 47 | Action_t A, |
36 | bool ) { | 48 | bool ) { |
37 | 49 | ||
38 | if( OT ) { | 50 | if( OT ) { |
39 | OTGateway::getOTGateway(); | 51 | OTGateway::getOTGateway(); |
40 | } | 52 | } |
41 | 53 | ||
42 | if( A == Activate ) { | 54 | if( A == Activate ) { |
43 | // from OFF to Available | 55 | // from OFF to Available |
44 | RFCOMMChannel * Ch = getChannel( ); | 56 | RFCOMMChannel * Ch = getChannel( ); |
45 | System & Sys = NSResources->system(); | 57 | System & Sys = NSResources->system(); |
46 | 58 | ||
47 | if( Ch ) { | 59 | if( Ch ) { |
48 | // connect to this peer | 60 | // connect to this peer |
49 | DeviceNr = OT->getFreeRFCommDevice(); | 61 | DeviceNr = OT->getFreeRFCommDevice(); |
50 | QStringList S; | 62 | QStringList S; |
51 | 63 | ||
52 | S << "rfcomm" | 64 | S << "rfcomm" |
53 | << "bind" | 65 | << "bind" |
54 | << QString().setNum( DeviceNr ) | 66 | << QString().setNum( DeviceNr ) |
55 | << Ch->BDAddress | 67 | << Ch->BDAddress |
56 | << QString().setNum( Ch->Channel ); | 68 | << QString().setNum( Ch->Channel ); |
57 | 69 | ||
70 | // no longer needed | ||
71 | delete Ch; | ||
72 | |||
58 | if( Sys.runAsRoot( S ) ) { | 73 | if( Sys.runAsRoot( S ) ) { |
59 | return QString( "Error starting %1").arg(S.join(" ")); | 74 | return QString( "Error starting %1").arg(S.join(" ")); |
60 | } | 75 | } |
61 | 76 | ||
62 | // here rfcomm should be running -> we will detect state later | 77 | // here rfcomm should be running -> we will detect state later |
63 | return QString(); | 78 | return QString(); |
64 | } else { | 79 | } else { |
65 | Log(( "No channel selected -> cancel\n" )); | 80 | Log(( "No channel selected -> cancel\n" )); |
66 | return QString( "No channel selected. Operation cancelled" ); | 81 | return QString( "No channel selected. Operation cancelled" ); |
67 | } | 82 | } |
68 | } | 83 | } |
69 | 84 | ||
70 | if( A == Deactivate ) { | 85 | if( A == Deactivate ) { |
71 | if( DeviceNr >= 0 ) { | 86 | if( DeviceNr >= 0 ) { |
72 | if( OT->releaseRFCommDevice( DeviceNr ) ) { | 87 | if( OT->releaseRFCommDevice( DeviceNr ) ) { |
73 | return QString( "Cannot release RFCOMM NetworkSetup" ); | 88 | return QString( "Cannot release RFCOMM NetworkSetup" ); |
74 | } | 89 | } |
75 | DeviceNr = -1; | 90 | DeviceNr = -1; |
76 | } | 91 | } |
77 | } | 92 | } |
78 | return QString(); | 93 | return QString(); |
79 | } | 94 | } |
80 | 95 | ||
81 | #include <qlistbox.h> | ||
82 | #include <qframe.h> | ||
83 | #include <qlabel.h> | ||
84 | #include <qlayout.h> | ||
85 | #include <qdialog.h> | ||
86 | |||
87 | RFCOMMChannel * BluetoothRFCOMMRun::getChannel( void ) { | 96 | RFCOMMChannel * BluetoothRFCOMMRun::getChannel( void ) { |
88 | 97 | ||
89 | if( Data->Devices.count() == 1 ) { | 98 | if( Data->Devices.count() == 1 ) { |
90 | // only one device -> return channel | 99 | // only one device -> return channel |
91 | return Data->Devices[0]; | 100 | return Data->Devices[0]; |
92 | } | 101 | } |
93 | 102 | ||
94 | RFCOMMChannel * Ch = 0; | 103 | RFCOMMChannel * Ch = 0; |
104 | |||
105 | if( Data->Devices.count() == 0 ) { | ||
106 | OTPeer * Peer; | ||
107 | int Channel; | ||
108 | |||
109 | if( OTScan::getDevice( Peer, Channel, OT ) == QDialog::Accepted ) { | ||
110 | Ch = new RFCOMMChannel; | ||
111 | Ch->BDAddress = Peer->address().toString(); | ||
112 | Ch->Name = Peer->name(); | ||
113 | Ch->Channel = Channel; | ||
114 | return Ch; | ||
115 | } | ||
116 | |||
117 | return 0; | ||
118 | } | ||
119 | |||
95 | QDialog * Dlg = new QDialog( qApp->mainWidget(), 0, TRUE ); | 120 | QDialog * Dlg = new QDialog( qApp->mainWidget(), 0, TRUE ); |
96 | QVBoxLayout * V = new QVBoxLayout( Dlg ); | 121 | QVBoxLayout * V = new QVBoxLayout( Dlg ); |
97 | 122 | ||
98 | QLabel * L = new QLabel( | 123 | QLabel * L = new QLabel( |
99 | qApp->translate( "BluetoothRFCOMMRun", | 124 | qApp->translate( "BluetoothRFCOMMRun", |
100 | "Select device to connect to"), | 125 | "Select device to connect to"), |
101 | Dlg ); | 126 | Dlg ); |
102 | QListBox * LB = new QListBox( Dlg ); | 127 | QListBox * LB = new QListBox( Dlg ); |
103 | 128 | ||
104 | for( unsigned int i = 0; i < Data->Devices.count(); i ++ ) { | 129 | for( unsigned int i = 0; i < Data->Devices.count(); i ++ ) { |
105 | LB->insertItem( QString( "%1 (%2 Chnl %3)" ). | 130 | LB->insertItem( QString( "%1 (%2 Chnl %3)" ). |
106 | arg( Data->Devices[i]->Name ). | 131 | arg( Data->Devices[i]->Name ). |
107 | arg( Data->Devices[i]->BDAddress ). | 132 | arg( Data->Devices[i]->BDAddress ). |
108 | arg( Data->Devices[i]->Channel ) ); | 133 | arg( Data->Devices[i]->Channel ) ); |
109 | } | 134 | } |
110 | 135 | ||
111 | V->addWidget( L ); | 136 | V->addWidget( L ); |
112 | V->addWidget( LB ); | 137 | V->addWidget( LB ); |
113 | 138 | ||
114 | Dlg->resize( 100, 100 ); | 139 | Dlg->resize( 100, 100 ); |
115 | Dlg->move( 20, | 140 | Dlg->move( 20, |
116 | (qApp->desktop()->height()-100)/2 ); | 141 | (qApp->desktop()->height()-100)/2 ); |
117 | 142 | ||
118 | if( Dlg->exec() == QDialog::Accepted ) { | 143 | if( Dlg->exec() == QDialog::Accepted ) { |
119 | unsigned int i = 0; | 144 | unsigned int i = 0; |
120 | for( i = 0; i < Data->Devices.count(); i ++ ) { | 145 | for( i = 0; i < Data->Devices.count(); i ++ ) { |
121 | if( LB->isSelected(i) ) { | 146 | if( LB->isSelected(i) ) { |
122 | odebug << "Selected " << Data->Devices[i]->Name << oendl; | 147 | odebug << "Selected " << Data->Devices[i]->Name << oendl; |
123 | Ch = Data->Devices[i]; | 148 | Ch = new RFCOMMChannel; |
149 | Ch->BDAddress = Data->Devices[i]->BDAddress; | ||
150 | Ch->Name = Data->Devices[i]->Name; | ||
151 | Ch->Channel = Data->Devices[i]->Channel; | ||
124 | break; | 152 | break; |
125 | } | 153 | } |
126 | } | 154 | } |
127 | } | 155 | } |
128 | 156 | ||
129 | delete Dlg; | 157 | delete Dlg; |
130 | return Ch; | 158 | return Ch; |
131 | } | 159 | } |
132 | 160 | ||
133 | QString BluetoothRFCOMMRun::deviceFile( void ) { | 161 | QString BluetoothRFCOMMRun::deviceFile( void ) { |
134 | if( deviceNrOfNetworkSetup() >= 0 ) { | 162 | if( deviceNrOfNetworkSetup() >= 0 ) { |
135 | OTDevice * OTD = OT->getOTDevice(); | 163 | OTDevice * OTD = OT->getOTDevice(); |
136 | // there is a NetworkSetup | 164 | // there is a NetworkSetup |
137 | return OTD->getRFCommDevicePattern().arg(DeviceNr); | 165 | return OTD->getRFCommDevicePattern().arg(DeviceNr); |
138 | } | 166 | } |
139 | return QString(); | 167 | return QString(); |
140 | } | 168 | } |
141 | 169 | ||
142 | int BluetoothRFCOMMRun::deviceNrOfNetworkSetup( void ) { | 170 | int BluetoothRFCOMMRun::deviceNrOfNetworkSetup( void ) { |
143 | 171 | ||
144 | if( ! OT ) { | 172 | if( ! OT ) { |
145 | OT = OTGateway::getOTGateway(); | 173 | OT = OTGateway::getOTGateway(); |
146 | } | 174 | } |
147 | 175 | ||
148 | DeviceNr = -1; | 176 | DeviceNr = -1; |
149 | for( unsigned int i = 0; i < Data->Devices.count(); i ++ ) { | 177 | for( unsigned int i = 0; i < Data->Devices.count(); i ++ ) { |
150 | odebug << "Check for rfcomm on " | 178 | odebug << "Check for rfcomm on " |
151 | << Data->Devices[i]->BDAddress | 179 | << Data->Devices[i]->BDAddress |
152 | << " " | 180 | << " " |
153 | << Data->Devices[i]->Channel | 181 | << Data->Devices[i]->Channel |
154 | << oendl; | 182 | << oendl; |
155 | if( ( DeviceNr = OT->connectedToRFCommChannel( | 183 | if( ( DeviceNr = OT->connectedToRFCommChannel( |
156 | OTDeviceAddress( Data->Devices[i]->BDAddress ), | 184 | OTDeviceAddress( Data->Devices[i]->BDAddress ), |
157 | Data->Devices[i]->Channel ) ) >= 0 ) { | 185 | Data->Devices[i]->Channel ) ) >= 0 ) { |
158 | odebug << "Up " | 186 | odebug << "Up " |
159 | << oendl; | 187 | << oendl; |
160 | break; | 188 | break; |
161 | } | 189 | } |
162 | } | 190 | } |
163 | return DeviceNr; | 191 | return DeviceNr; |
164 | } | 192 | } |
diff --git a/noncore/settings/networksettings2/gprs/GPRS_NNI.cpp b/noncore/settings/networksettings2/gprs/GPRS_NNI.cpp index bf8cc59..2dd54ff 100644 --- a/noncore/settings/networksettings2/gprs/GPRS_NNI.cpp +++ b/noncore/settings/networksettings2/gprs/GPRS_NNI.cpp | |||
@@ -1,231 +1,234 @@ | |||
1 | #include <system.h> | 1 | #include <system.h> |
2 | #include <netnode.h> | 2 | #include <netnode.h> |
3 | #include "GPRSedit.h" | 3 | #include "GPRSedit.h" |
4 | #include "GPRS_NNI.h" | 4 | #include "GPRS_NNI.h" |
5 | #include "GPRS_NN.h" | 5 | #include "GPRS_NN.h" |
6 | 6 | ||
7 | AGPRSDevice::AGPRSDevice( GPRSNetNode * PNN ) : ANetNodeInstance( PNN ) { | 7 | AGPRSDevice::AGPRSDevice( GPRSNetNode * PNN ) : ANetNodeInstance( PNN ) { |
8 | Data.APN = ""; | 8 | Data.APN = ""; |
9 | Data.User = ""; | 9 | Data.User = ""; |
10 | Data.Password = ""; | 10 | Data.Password = ""; |
11 | Data.DefaultGateway = 1; | 11 | Data.DefaultGateway = 1; |
12 | Data.SetIfSet = 0; | 12 | Data.SetIfSet = 0; |
13 | Data.Debug = 0; | 13 | Data.Debug = 0; |
14 | Data.Routing.setAutoDelete( TRUE ); | 14 | Data.Routing.setAutoDelete( TRUE ); |
15 | GUI = 0; | 15 | GUI = 0; |
16 | RT = 0; | 16 | RT = 0; |
17 | } | 17 | } |
18 | 18 | ||
19 | void AGPRSDevice::setSpecificAttribute( QString & A, QString & V ) { | 19 | void AGPRSDevice::setSpecificAttribute( QString & A, QString & V ) { |
20 | if( A == "apn" ) { | 20 | if( A == "apn" ) { |
21 | Data.APN = V; | 21 | Data.APN = V; |
22 | } else if( A == "user" ) { | 22 | } else if( A == "user" ) { |
23 | Data.User = V; | 23 | Data.User = V; |
24 | } else if( A == "password" ) { | 24 | } else if( A == "password" ) { |
25 | Data.Password = V; | 25 | Data.Password = V; |
26 | } else if( A == "dns2" ) { | 26 | } else if( A == "dns2" ) { |
27 | Data.DNS2 = V; | 27 | Data.DNS2 = V; |
28 | } else if( A == "dns1" ) { | 28 | } else if( A == "dns1" ) { |
29 | Data.DNS1 = V; | 29 | Data.DNS1 = V; |
30 | } else if( A == "defaultgateway" ) { | 30 | } else if( A == "defaultgateway" ) { |
31 | Data.DefaultGateway = (V=="yes"); | 31 | Data.DefaultGateway = (V=="yes"); |
32 | } else if( A == "setifset" ) { | 32 | } else if( A == "setifset" ) { |
33 | Data.SetIfSet = (V == "yes"); | 33 | Data.SetIfSet = (V == "yes"); |
34 | } else if( A == "routes" ) { | 34 | } else if( A == "routes" ) { |
35 | Data.Routing.resize( V.toULong() ); | 35 | Data.Routing.resize( V.toULong() ); |
36 | } else if( A.startsWith( "route" ) ) { | 36 | } else if( A.startsWith( "route" ) ) { |
37 | QStringList SL = QStringList::split( "/", V ); | 37 | QStringList SL = QStringList::split( "/", V ); |
38 | GPRSRoutingEntry * E = new GPRSRoutingEntry; | 38 | GPRSRoutingEntry * E = new GPRSRoutingEntry; |
39 | 39 | ||
40 | E->Address = SL[0]; | 40 | E->Address = SL[0]; |
41 | E->Mask = SL[1].toULong(); | 41 | E->Mask = SL[1].toULong(); |
42 | 42 | ||
43 | Data.Routing.insert( A.mid(5).toULong(), E ); | 43 | Data.Routing.insert( A.mid(5).toULong(), E ); |
44 | } else if( A == "debug" ) { | 44 | } else if( A == "debug" ) { |
45 | Data.Debug = V.toShort(); | 45 | Data.Debug = V.toShort(); |
46 | } | 46 | } |
47 | } | 47 | } |
48 | 48 | ||
49 | void AGPRSDevice::saveSpecificAttribute( QTextStream & TS ) { | 49 | void AGPRSDevice::saveSpecificAttribute( QTextStream & TS ) { |
50 | TS << "apn=" << Data.APN << endl; | 50 | TS << "apn=" << Data.APN << endl; |
51 | TS << "user=" << Data.User << endl; | 51 | TS << "user=" << Data.User << endl; |
52 | TS << "password=" << Data.Password << endl; | 52 | TS << "password=" << Data.Password << endl; |
53 | TS << "dns1=" << Data.DNS1 << endl; | 53 | TS << "dns1=" << Data.DNS1 << endl; |
54 | TS << "dns2=" << Data.DNS2 << endl; | 54 | TS << "dns2=" << Data.DNS2 << endl; |
55 | TS << "defaultgateway=" << ( (Data.DefaultGateway) ? "yes" : "no" ) << endl; | 55 | TS << "defaultgateway=" << ( (Data.DefaultGateway) ? "yes" : "no" ) << endl; |
56 | TS << "setifset=" << ((Data.SetIfSet) ? "yes" : "no") << endl; | 56 | TS << "setifset=" << ((Data.SetIfSet) ? "yes" : "no") << endl; |
57 | TS << "debug=" << Data.Debug << endl; | 57 | TS << "debug=" << Data.Debug << endl; |
58 | 58 | ||
59 | TS << "routes=" << Data.Routing.count() << oendl; | 59 | TS << "routes=" << Data.Routing.count() << oendl; |
60 | for( unsigned int i = 0; i < Data.Routing.count(); i ++ ) { | 60 | for( unsigned int i = 0; i < Data.Routing.count(); i ++ ) { |
61 | TS << "route" << i << "=" | 61 | TS << "route" << i << "=" |
62 | << Data.Routing[i]->Address | 62 | << Data.Routing[i]->Address |
63 | << "/" | 63 | << "/" |
64 | << Data.Routing[i]->Mask | 64 | << Data.Routing[i]->Mask |
65 | << oendl; | 65 | << oendl; |
66 | } | 66 | } |
67 | } | 67 | } |
68 | 68 | ||
69 | QWidget * AGPRSDevice::edit( QWidget * parent ) { | 69 | QWidget * AGPRSDevice::edit( QWidget * parent ) { |
70 | GUI = new GPRSEdit( parent ); | 70 | GUI = new GPRSEdit( parent ); |
71 | GUI->showData( Data ); | 71 | GUI->showData( Data ); |
72 | return GUI; | 72 | return GUI; |
73 | } | 73 | } |
74 | 74 | ||
75 | QString AGPRSDevice::acceptable( void ) { | 75 | QString AGPRSDevice::acceptable( void ) { |
76 | return ( GUI ) ? GUI->acceptable( ) : QString(); | 76 | return ( GUI ) ? GUI->acceptable( ) : QString(); |
77 | } | 77 | } |
78 | 78 | ||
79 | void AGPRSDevice::commit( void ) { | 79 | void AGPRSDevice::commit( void ) { |
80 | if( GUI && GUI->commit( Data ) ) | 80 | if( GUI && GUI->commit( Data ) ) |
81 | setModified( 1 ); | 81 | setModified( 1 ); |
82 | } | 82 | } |
83 | 83 | ||
84 | bool AGPRSDevice::hasDataForFile( SystemFile & S ) { | 84 | bool AGPRSDevice::hasDataForFile( SystemFile & S ) { |
85 | return S.name() == "pap-secrets" || | 85 | return S.name() == "pap-secrets" || |
86 | S.name() == "peers" || | 86 | S.name() == "peers" || |
87 | S.name() == "extra" || | 87 | S.name() == "extra" || |
88 | S.name() == "chatscripts" ; | 88 | S.name() == "chatscripts" ; |
89 | } | 89 | } |
90 | 90 | ||
91 | short AGPRSDevice::generateFile( SystemFile & SF, | 91 | short AGPRSDevice::generateFile( SystemFile & SF, |
92 | long | 92 | long |
93 | ) { | 93 | ) { |
94 | 94 | ||
95 | if( SF.name() == "pap-secrets" ) { | 95 | if( SF.name() == "pap-secrets" ) { |
96 | SF << Data.User | 96 | SF << Data.User |
97 | << " * " | 97 | << " * " |
98 | << Data.Password | 98 | << Data.Password |
99 | << " *" | 99 | << " *" |
100 | << endl; | 100 | << endl; |
101 | return 0; | 101 | return 0; |
102 | } else if( SF.name() == "chatscripts" ) { | 102 | } else if( SF.name() == "chatscripts" ) { |
103 | SF << "SAY \"Starting\\n\"" << oendl; | 103 | SF << "SAY \"Starting\\n\"" << oendl; |
104 | SF << "ECHO OFF" << oendl; | 104 | SF << "ECHO OFF" << oendl; |
105 | SF << "ABORT BUSY" << oendl; | 105 | SF << "ABORT BUSY" << oendl; |
106 | SF << "ABORT ERROR" << oendl; | 106 | SF << "ABORT ERROR" << oendl; |
107 | SF << "ABORT VOICE" << oendl; | 107 | SF << "ABORT VOICE" << oendl; |
108 | SF << "ABORT \"NO CARRIER\"" << oendl; | 108 | SF << "ABORT \"NO CARRIER\"" << oendl; |
109 | SF << "ABORT \"NO DIALTONE\"" << oendl; | 109 | SF << "ABORT \"NO DIALTONE\"" << oendl; |
110 | SF << "\"\" AT" << oendl; | 110 | SF << "\"\" AT" << oendl; |
111 | SF << "OK AT+CGATT=1" << oendl; | 111 | SF << "OK AT+CGATT=1" << oendl; |
112 | SF << "OK AT+CGDCONT=1,\"IP\",\"" | 112 | SF << "OK AT+CGDCONT=1,\"IP\",\"" |
113 | << Data.APN | 113 | << Data.APN |
114 | << "\"" | 114 | << "\"" |
115 | << oendl; | 115 | << oendl; |
116 | SF << "OK ATD*99***1#\\n" << oendl; | 116 | SF << "OK ATD*99***1#\\n" << oendl; |
117 | SF << "TIMEOUT 10" << oendl; | 117 | SF << "TIMEOUT 10" << oendl; |
118 | SF << "CONNECT \"\"" << oendl; | 118 | SF << "CONNECT \"\"" << oendl; |
119 | SF << "SAY \"READY\\n\"" << oendl; | 119 | SF << "SAY \"READY\\n\"" << oendl; |
120 | return 0; | 120 | return 0; |
121 | } else if( SF.name() == "peers" ) { | 121 | } else if( SF.name() == "peers" ) { |
122 | SF << "noauth" << oendl; | 122 | SF << "noauth" << oendl; |
123 | SF << "user " << Data.User << oendl; | 123 | SF << "user " << Data.User << oendl; |
124 | SF << "connect \"/usr/sbin/chat -s -v -f /etc/chatscripts/" | 124 | SF << "connect \"/usr/sbin/chat -s -v -f /etc/chatscripts/" |
125 | << removeSpaces( networkSetup()->name() ) | 125 | << removeSpaces( networkSetup()->name() ) |
126 | << "\"" | 126 | << "\"" |
127 | << oendl; | 127 | << oendl; |
128 | SF << "ipcp-accept-local" << oendl; | 128 | SF << "ipcp-accept-local" << oendl; |
129 | SF << "ipcp-accept-remote" << oendl; | 129 | SF << "ipcp-accept-remote" << oendl; |
130 | if( Data.DefaultGateway ) { | 130 | if( Data.DefaultGateway ) { |
131 | SF << "defaultroute" << oendl; | 131 | SF << "defaultroute" << oendl; |
132 | if( Data.SetIfSet ) { | 132 | if( Data.SetIfSet ) { |
133 | SF << "replacedefaultroute" << oendl; | 133 | SF << "replacedefaultroute" << oendl; |
134 | } | 134 | } |
135 | } | 135 | } |
136 | if( Data.Debug ) { | 136 | if( Data.Debug ) { |
137 | SF << "logfile /tmp/" | 137 | SF << "logfile /tmp/" |
138 | << removeSpaces( networkSetup()->name() ) | 138 | << removeSpaces( networkSetup()->name() ) |
139 | << oendl; | 139 | << oendl; |
140 | for( int i = 0; i < Data.Debug; i ++ ) { | 140 | for( int i = 0; i < Data.Debug; i ++ ) { |
141 | SF << "debug" << oendl; | 141 | SF << "debug" << oendl; |
142 | } | 142 | } |
143 | } | 143 | } |
144 | SF << "nocrtscts" << oendl; | 144 | SF << "nocrtscts" << oendl; |
145 | SF << "local" << oendl; | 145 | SF << "local" << oendl; |
146 | SF << "lcp-echo-interval 0" << oendl; | 146 | SF << "lcp-echo-interval 0" << oendl; |
147 | SF << "lcp-echo-failure 0" << oendl; | 147 | SF << "lcp-echo-failure 0" << oendl; |
148 | SF << "usepeerdns" << oendl; | 148 | SF << "usepeerdns" << oendl; |
149 | SF << "linkname " << removeSpaces( networkSetup()->name() ) << oendl; | 149 | SF << "linkname " << removeSpaces( networkSetup()->name() ) << oendl; |
150 | SF << "nopersist" << oendl; | 150 | SF << "nopersist" << oendl; |
151 | SF << "ipparam " << removeSpaces( networkSetup()->name() ) <<oendl; | 151 | SF << "ipparam " << removeSpaces( networkSetup()->name() ) <<oendl; |
152 | SF << "maxfail 1" << oendl; | 152 | SF << "maxfail 1" << oendl; |
153 | return 0; | 153 | return 0; |
154 | } else if( SF.name() == "extra" ) { | 154 | } else if( SF.name() == "extra" ) { |
155 | unsigned long Bits; | 155 | unsigned long Bits; |
156 | // generate 'fixed' settings | 156 | // generate 'fixed' settings |
157 | for( unsigned int i = 0 ; | 157 | for( unsigned int i = 0 ; |
158 | i < Data.Routing.count(); | 158 | i < Data.Routing.count(); |
159 | i ++ ) { | 159 | i ++ ) { |
160 | if( Data.Routing[i]->Mask == 32 ) { | 160 | if( Data.Routing[i]->Mask == 32 ) { |
161 | Bits = 0xffffffff; | 161 | Bits = 0xffffffff; |
162 | } else { | 162 | } else { |
163 | Bits = ~ ((1 << ((32-Data.Routing[i]->Mask))) - 1); | 163 | Bits = ~ ((1 << ((32-Data.Routing[i]->Mask))) - 1); |
164 | } | 164 | } |
165 | SF << "route add -net " | 165 | SF << "route add -net " |
166 | << Data.Routing[i]->Address | 166 | << Data.Routing[i]->Address |
167 | << " netmask " | 167 | << " netmask " |
168 | << ((Bits&0xff000000)>>24) | 168 | << ((Bits&0xff000000)>>24) |
169 | << "." | 169 | << "." |
170 | << ((Bits&0x00ff0000)>>16) | 170 | << ((Bits&0x00ff0000)>>16) |
171 | << "." | 171 | << "." |
172 | << ((Bits&0x0000ff00)>>8) | 172 | << ((Bits&0x0000ff00)>>8) |
173 | << "." | 173 | << "." |
174 | << ((Bits&0x000000ff)) | 174 | << ((Bits&0x000000ff)) |
175 | << " gw $PPP_REMOTE" | 175 | << " gw $PPP_REMOTE" |
176 | << oendl; | 176 | << oendl; |
177 | SF << "route del -net " | 177 | SF << "route del -net " |
178 | << Data.Routing[i]->Address | 178 | << Data.Routing[i]->Address |
179 | << " netmask " | 179 | << " netmask " |
180 | << ((Bits&0xff000000)>>24) | 180 | << ((Bits&0xff000000)>>24) |
181 | << "." | 181 | << "." |
182 | << ((Bits&0x00ff0000)>>16) | 182 | << ((Bits&0x00ff0000)>>16) |
183 | << "." | 183 | << "." |
184 | << ((Bits&0x0000ff00)>>8) | 184 | << ((Bits&0x0000ff00)>>8) |
185 | << "." | 185 | << "." |
186 | << ((Bits&0x000000ff)) | 186 | << ((Bits&0x000000ff)) |
187 | << " gw $PPP_REMOTE" | 187 | << " gw $PPP_REMOTE" |
188 | << oendl; | 188 | << oendl; |
189 | } | 189 | } |
190 | 190 | ||
191 | if( ! Data.DNS1.isEmpty() ) { | 191 | if( ! Data.DNS1.isEmpty() ) { |
192 | SF << "nameserver " | 192 | SF << "nameserver " |
193 | << Data.DNS1 | 193 | << Data.DNS1 |
194 | << " # profile " | 194 | << " # profile " |
195 | << removeSpaces( networkSetup()->name() ) | 195 | << removeSpaces( networkSetup()->name() ) |
196 | <<oendl; | 196 | <<oendl; |
197 | } | 197 | } |
198 | 198 | ||
199 | if( ! Data.DNS2.isEmpty() ) { | 199 | if( ! Data.DNS2.isEmpty() ) { |
200 | SF << "nameserver " | 200 | SF << "nameserver " |
201 | << Data.DNS2 | 201 | << Data.DNS2 |
202 | << " # profile " | 202 | << " # profile " |
203 | << removeSpaces( networkSetup()->name() ) | 203 | << removeSpaces( networkSetup()->name() ) |
204 | <<oendl; | 204 | <<oendl; |
205 | } | 205 | } |
206 | } | 206 | } |
207 | return 1; | 207 | return 1; |
208 | } | 208 | } |
209 | 209 | ||
210 | bool AGPRSDevice::openFile( SystemFile & SF ) { | 210 | bool AGPRSDevice::openFile( SystemFile & SF, QStringList & SL ) { |
211 | if( SF.name() == "peers" ) { | 211 | if( SF.name() == "peers" ) { |
212 | SL << "/etc" << "ppp" << "peers"; | ||
212 | SF.setPath( | 213 | SF.setPath( |
213 | QString( "/etc/ppp/peers/" ) + | 214 | QString( "/etc/ppp/peers/" ) + |
214 | removeSpaces( networkSetup()->name() ) | 215 | removeSpaces( networkSetup()->name() ) |
215 | ); | 216 | ); |
216 | return 1; | 217 | return 1; |
217 | } else if ( SF.name() == "chatscripts" ) { | 218 | } else if ( SF.name() == "chatscripts" ) { |
219 | SL << "/etc" << "chatscripts"; | ||
218 | SF.setPath( | 220 | SF.setPath( |
219 | QString( "/etc/chatscripts/" ) + | 221 | QString( "/etc/chatscripts/" ) + |
220 | removeSpaces( networkSetup()->name() ) | 222 | removeSpaces( networkSetup()->name() ) |
221 | ); | 223 | ); |
222 | return 1; | 224 | return 1; |
225 | SL << "/etc" << "ppp"; | ||
223 | } else if ( SF.name() == "extra" ) { | 226 | } else if ( SF.name() == "extra" ) { |
224 | SF.setPath( | 227 | SF.setPath( |
225 | QString( "/etc/ppp/" ) + | 228 | QString( "/etc/ppp/" ) + |
226 | removeSpaces( networkSetup()->name() ) + ".fixed" | 229 | removeSpaces( networkSetup()->name() ) + ".fixed" |
227 | ); | 230 | ); |
228 | return 1; | 231 | return 1; |
229 | } | 232 | } |
230 | return 0; | 233 | return 0; |
231 | } | 234 | } |
diff --git a/noncore/settings/networksettings2/gprs/GPRS_NNI.h b/noncore/settings/networksettings2/gprs/GPRS_NNI.h index 1060a6e..b5bf1b9 100644 --- a/noncore/settings/networksettings2/gprs/GPRS_NNI.h +++ b/noncore/settings/networksettings2/gprs/GPRS_NNI.h | |||
@@ -1,48 +1,49 @@ | |||
1 | #ifndef GPRS_H | 1 | #ifndef GPRS_H |
2 | #define GPRS_H | 2 | #define GPRS_H |
3 | 3 | ||
4 | #include <netnode.h> | 4 | #include <netnode.h> |
5 | #include "GPRSdata.h" | 5 | #include "GPRSdata.h" |
6 | #include "GPRSrun.h" | 6 | #include "GPRSrun.h" |
7 | 7 | ||
8 | class GPRSNetNode; | 8 | class GPRSNetNode; |
9 | class GPRSEdit; | 9 | class GPRSEdit; |
10 | class SystemFile; | 10 | class SystemFile; |
11 | 11 | ||
12 | class AGPRSDevice : public ANetNodeInstance{ | 12 | class AGPRSDevice : public ANetNodeInstance{ |
13 | 13 | ||
14 | public : | 14 | public : |
15 | 15 | ||
16 | AGPRSDevice( GPRSNetNode * PNN ); | 16 | AGPRSDevice( GPRSNetNode * PNN ); |
17 | 17 | ||
18 | RuntimeInfo * runtime( void ) | 18 | RuntimeInfo * runtime( void ) |
19 | { return | 19 | { return |
20 | ( RT ) ? RT : ( RT = new GPRSRun( this, Data ) ); | 20 | ( RT ) ? RT : ( RT = new GPRSRun( this, Data ) ); |
21 | } | 21 | } |
22 | 22 | ||
23 | QWidget * edit( QWidget * parent ); | 23 | QWidget * edit( QWidget * parent ); |
24 | QString acceptable( void ); | 24 | QString acceptable( void ); |
25 | void commit( void ); | 25 | void commit( void ); |
26 | 26 | ||
27 | virtual bool openFile( SystemFile & SF ); | 27 | virtual bool openFile( SystemFile & SF, |
28 | QStringList & SL ); | ||
28 | 29 | ||
29 | virtual void * data( void ) | 30 | virtual void * data( void ) |
30 | { return (void *)&Data; } | 31 | { return (void *)&Data; } |
31 | 32 | ||
32 | virtual bool hasDataForFile( SystemFile & S ); | 33 | virtual bool hasDataForFile( SystemFile & S ); |
33 | virtual short generateFile( SystemFile & SF, | 34 | virtual short generateFile( SystemFile & SF, |
34 | long DevNr ); | 35 | long DevNr ); |
35 | 36 | ||
36 | protected : | 37 | protected : |
37 | 38 | ||
38 | virtual void setSpecificAttribute( QString & Attr, QString & Value ); | 39 | virtual void setSpecificAttribute( QString & Attr, QString & Value ); |
39 | virtual void saveSpecificAttribute( QTextStream & TS ); | 40 | virtual void saveSpecificAttribute( QTextStream & TS ); |
40 | 41 | ||
41 | private : | 42 | private : |
42 | 43 | ||
43 | GPRSEdit * GUI; | 44 | GPRSEdit * GUI; |
44 | GPRSData Data; | 45 | GPRSData Data; |
45 | GPRSRun * RT; | 46 | GPRSRun * RT; |
46 | }; | 47 | }; |
47 | 48 | ||
48 | #endif | 49 | #endif |
diff --git a/noncore/settings/networksettings2/networksettings.cpp b/noncore/settings/networksettings2/networksettings.cpp index 80dcb3d..2714dd5 100644 --- a/noncore/settings/networksettings2/networksettings.cpp +++ b/noncore/settings/networksettings2/networksettings.cpp | |||
@@ -1,510 +1,510 @@ | |||
1 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | #include <unistd.h> | 2 | #include <unistd.h> |
3 | #include <errno.h> | 3 | #include <errno.h> |
4 | 4 | ||
5 | #include <opie2/odebug.h> | 5 | #include <opie2/odebug.h> |
6 | #include <opie2/oledbox.h> | 6 | #include <opie2/oledbox.h> |
7 | 7 | ||
8 | #include <qpe/qpeapplication.h> | 8 | #include <qpe/qpeapplication.h> |
9 | #include <qlistbox.h> | 9 | #include <qlistbox.h> |
10 | #include <qlayout.h> | 10 | #include <qlayout.h> |
11 | #include <qgroupbox.h> | 11 | #include <qgroupbox.h> |
12 | #include <qtimer.h> | 12 | #include <qtimer.h> |
13 | #include <qlistbox.h> | 13 | #include <qlistbox.h> |
14 | #include <qmessagebox.h> | 14 | #include <qmessagebox.h> |
15 | #include <qlabel.h> | 15 | #include <qlabel.h> |
16 | #include <qiconview.h> | 16 | #include <qiconview.h> |
17 | #include <qtimer.h> | 17 | #include <qtimer.h> |
18 | #include <qpe/qpeapplication.h> | 18 | #include <qpe/qpeapplication.h> |
19 | #include <qtoolbutton.h> | 19 | #include <qtoolbutton.h> |
20 | #include <qevent.h> | 20 | #include <qevent.h> |
21 | 21 | ||
22 | #include "networksettings.h" | 22 | #include "networksettings.h" |
23 | #include "netnode.h" | 23 | #include "netnode.h" |
24 | #include "editconnection.h" | 24 | #include "editconnection.h" |
25 | 25 | ||
26 | NetworkSettings::NetworkSettings( QWidget *parent, | 26 | NetworkSettings::NetworkSettings( QWidget *parent, |
27 | const char *name, | 27 | const char *name, |
28 | WFlags fl ) : NetworkSettingsGUI(parent,name,fl), | 28 | WFlags fl ) : NetworkSettingsGUI(parent,name,fl), |
29 | NSD() { | 29 | NSD() { |
30 | 30 | ||
31 | UpdateTimer = new QTimer( this ); | 31 | UpdateTimer = new QTimer( this ); |
32 | 32 | ||
33 | // set pixmaps | 33 | // set pixmaps |
34 | Add_TB->setPixmap( NSResources->getPixmap( "add" ) ); | 34 | Add_TB->setPixmap( NSResources->getPixmap( "add" ) ); |
35 | Delete_TB->setPixmap( NSResources->getPixmap( "remove" ) ); | 35 | Delete_TB->setPixmap( NSResources->getPixmap( "remove" ) ); |
36 | CheckState_TB->setPixmap( NSResources->getPixmap( "check" ) ); | 36 | CheckState_TB->setPixmap( NSResources->getPixmap( "check" ) ); |
37 | GenConfig_TB->setPixmap( NSResources->getPixmap( "configure" ) ); | 37 | GenConfig_TB->setPixmap( NSResources->getPixmap( "configure" ) ); |
38 | 38 | ||
39 | Disable_TB->setPixmap( NSResources->getPixmap( "disabled" ) ); | 39 | Disable_TB->setPixmap( NSResources->getPixmap( "disabled" ) ); |
40 | Up_TB->setPixmap( NSResources->getPixmap( "more" ) ); | 40 | Up_TB->setPixmap( NSResources->getPixmap( "more" ) ); |
41 | Down_TB->setPixmap( NSResources->getPixmap( "less" ) ); | 41 | Down_TB->setPixmap( NSResources->getPixmap( "less" ) ); |
42 | 42 | ||
43 | QVBoxLayout* V = new QVBoxLayout( LED_Frm ); | 43 | QVBoxLayout* V = new QVBoxLayout( LED_Frm ); |
44 | QHBoxLayout * H = new QHBoxLayout( 0 ); | 44 | QHBoxLayout * H = new QHBoxLayout( 0 ); |
45 | V->addStretch(1); | 45 | V->addStretch(1); |
46 | V->addLayout( H ); | 46 | V->addLayout( H ); |
47 | Leds[0] = new Opie::Ui::OLedBox( red, LED_Frm ); | 47 | Leds[0] = new Opie::Ui::OLedBox( red, LED_Frm ); |
48 | H->addWidget( Leds[0], 0, Qt::AlignVCenter ); | 48 | H->addWidget( Leds[0], 0, Qt::AlignVCenter ); |
49 | Leds[1] = new Opie::Ui::OLedBox( red, LED_Frm ); | 49 | Leds[1] = new Opie::Ui::OLedBox( red, LED_Frm ); |
50 | H->addWidget( Leds[1], 0, Qt::AlignVCenter ); | 50 | H->addWidget( Leds[1], 0, Qt::AlignVCenter ); |
51 | Leds[2] = new Opie::Ui::OLedBox( red, LED_Frm ); | 51 | Leds[2] = new Opie::Ui::OLedBox( red, LED_Frm ); |
52 | H->addWidget( Leds[2], 0, Qt::AlignVCenter ); | 52 | H->addWidget( Leds[2], 0, Qt::AlignVCenter ); |
53 | V->addStretch(1); | 53 | V->addStretch(1); |
54 | 54 | ||
55 | 55 | ||
56 | SLOT_ToProfile(); | 56 | SLOT_ToProfile(); |
57 | 57 | ||
58 | // populate main Listbox | 58 | // populate main Listbox |
59 | Profiles_LB->clear(); | 59 | Profiles_LB->clear(); |
60 | QPEApplication::setStylusOperation( | 60 | QPEApplication::setStylusOperation( |
61 | Profiles_LB->viewport(), QPEApplication::RightOnHold ); | 61 | Profiles_LB->viewport(), QPEApplication::RightOnHold ); |
62 | 62 | ||
63 | connect( Profiles_LB, | 63 | connect( Profiles_LB, |
64 | SIGNAL(rightButtonPressed(QListBoxItem*,const QPoint&)), | 64 | SIGNAL(rightButtonPressed(QListBoxItem*,const QPoint&)), |
65 | this, SLOT(SLOT_EditNode(QListBoxItem*)) ); | 65 | this, SLOT(SLOT_EditNode(QListBoxItem*)) ); |
66 | 66 | ||
67 | { Name2NetworkSetup_t & M = NSResources->networkSetups(); | 67 | { Name2NetworkSetup_t & M = NSResources->networkSetups(); |
68 | NetworkSetup * NC; | 68 | NetworkSetup * NC; |
69 | // for all NetworkSetups | 69 | // for all NetworkSetups |
70 | for( QDictIterator<NetworkSetup> it(M); | 70 | for( QDictIterator<NetworkSetup> it(M); |
71 | it.current(); | 71 | it.current(); |
72 | ++it ) { | 72 | ++it ) { |
73 | NC = it.current(); | 73 | NC = it.current(); |
74 | Profiles_LB->insertItem( NC->devicePixmap(), | 74 | Profiles_LB->insertItem( NC->devicePixmap(), |
75 | NC->name() ); | 75 | NC->name() ); |
76 | } | 76 | } |
77 | } | 77 | } |
78 | 78 | ||
79 | if( Profiles_LB->count() ) { | 79 | if( Profiles_LB->count() ) { |
80 | Profiles_LB->setSelected( 0, TRUE ); | 80 | Profiles_LB->setSelected( 0, TRUE ); |
81 | } | 81 | } |
82 | 82 | ||
83 | // if no profiles -> auto popup editing | 83 | // if no profiles -> auto popup editing |
84 | if( NSResources->networkSetups().count() == 0 ) { | 84 | if( NSResources->networkSetups().count() == 0 ) { |
85 | QTimer::singleShot( 100, this, SLOT(SLOT_AddNode() ) ); | 85 | QTimer::singleShot( 100, this, SLOT(SLOT_AddNode() ) ); |
86 | } | 86 | } |
87 | 87 | ||
88 | connect( &(NSResources->system()), | 88 | connect( &(NSResources->system()), |
89 | SIGNAL( stdoutLine(const QString &) ), | 89 | SIGNAL( stdoutLine(const QString &) ), |
90 | this, SLOT( SLOT_CmdMessage(const QString &) ) ); | 90 | this, SLOT( SLOT_CmdMessage(const QString &) ) ); |
91 | 91 | ||
92 | connect( &(NSResources->system()), | 92 | connect( &(NSResources->system()), |
93 | SIGNAL( stderrLine(const QString &) ), | 93 | SIGNAL( stderrLine(const QString &) ), |
94 | this, SLOT( SLOT_CmdMessage(const QString &) ) ); | 94 | this, SLOT( SLOT_CmdMessage(const QString &) ) ); |
95 | 95 | ||
96 | connect( &(NSResources->system()), | 96 | connect( &(NSResources->system()), |
97 | SIGNAL( processEvent(const QString &) ), | 97 | SIGNAL( processEvent(const QString &) ), |
98 | this, SLOT( SLOT_CmdMessage(const QString &) ) ); | 98 | this, SLOT( SLOT_CmdMessage(const QString &) ) ); |
99 | 99 | ||
100 | UpdateTimer->start( 5000 ); | 100 | UpdateTimer->start( 5000 ); |
101 | connect( UpdateTimer, SIGNAL( timeout() ), | 101 | connect( UpdateTimer, SIGNAL( timeout() ), |
102 | this, SLOT( SLOT_RefreshStates() ) ); | 102 | this, SLOT( SLOT_RefreshStates() ) ); |
103 | 103 | ||
104 | /* Add QCopChannel */ | 104 | /* Add QCopChannel */ |
105 | connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)), | 105 | connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)), |
106 | this, SLOT(SLOT_QCopMessage(const QCString&,const QByteArray&)) ); | 106 | this, SLOT(SLOT_QCopMessage(const QCString&,const QByteArray&)) ); |
107 | } | 107 | } |
108 | 108 | ||
109 | NetworkSettings::~NetworkSettings() { | 109 | NetworkSettings::~NetworkSettings() { |
110 | QString S; | 110 | QString S; |
111 | 111 | ||
112 | if( NSD.isModified() ) { | 112 | if( NSD.isModified() ) { |
113 | S = NSD.saveSettings(); | 113 | S = NSD.saveSettings(); |
114 | if( ! S.isEmpty() ) { | 114 | if( ! S.isEmpty() ) { |
115 | S.insert( 0, "<p>" ); | 115 | S.insert( 0, "<p>" ); |
116 | S.append( "</p>" ); | 116 | S.append( "</p>" ); |
117 | // problem saving | 117 | // problem saving |
118 | QMessageBox::warning( | 118 | QMessageBox::warning( |
119 | 0, | 119 | 0, |
120 | tr( "Saving setup" ), S ); | 120 | tr( "Saving setup" ), S ); |
121 | } | 121 | } |
122 | 122 | ||
123 | SLOT_GenerateConfig(); | 123 | SLOT_GenerateConfig(); |
124 | NSD.setModified( 0 ); | 124 | NSD.setModified( 0 ); |
125 | } | 125 | } |
126 | 126 | ||
127 | } | 127 | } |
128 | 128 | ||
129 | void NetworkSettings::SLOT_CmdMessage( const QString & S ) { | 129 | void NetworkSettings::SLOT_CmdMessage( const QString & S ) { |
130 | Messages_LB->insertItem( S ); | 130 | Messages_LB->insertItem( S ); |
131 | Messages_LB->setCurrentItem( Messages_LB->count()-1 ); | 131 | Messages_LB->setCurrentItem( Messages_LB->count()-1 ); |
132 | Messages_LB->ensureCurrentVisible(); | 132 | Messages_LB->ensureCurrentVisible(); |
133 | } | 133 | } |
134 | 134 | ||
135 | void NetworkSettings::SLOT_RefreshStates( void ) { | 135 | void NetworkSettings::SLOT_RefreshStates( void ) { |
136 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); // remember | 136 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); // remember |
137 | 137 | ||
138 | if( LBI ) { | 138 | if( LBI ) { |
139 | NetworkSetup * NC; | 139 | NetworkSetup * NC; |
140 | NSResources->system().probeInterfaces(); | 140 | NSResources->system().probeInterfaces(); |
141 | // update current selection only | 141 | // update current selection only |
142 | NC = NSResources->findNetworkSetup( LBI->text() ); | 142 | NC = NSResources->findNetworkSetup( LBI->text() ); |
143 | if( NC ) { | 143 | if( NC ) { |
144 | State_t OldS = NC->state(); | 144 | State_t OldS = NC->state(); |
145 | State_t NewS = NC->state(1); | 145 | State_t NewS = NC->state(1); |
146 | if( OldS != NewS ) { | 146 | if( OldS != NewS ) { |
147 | updateProfileState( LBI ); | 147 | updateProfileState( LBI ); |
148 | } | 148 | } |
149 | } | 149 | } |
150 | } | 150 | } |
151 | 151 | ||
152 | 152 | ||
153 | /* -> LATER !! | 153 | /* -> LATER !! |
154 | bool is; | 154 | bool is; |
155 | NetworkSetup * NC; | 155 | NetworkSetup * NC; |
156 | 156 | ||
157 | for( unsigned int i = 0; i < Profiles_LB->count() ; i ++ ) { | 157 | for( unsigned int i = 0; i < Profiles_LB->count() ; i ++ ) { |
158 | NC = NSResources->findNetworkSetup( Profiles_LB->text(i) ); | 158 | NC = NSResources->findNetworkSetup( Profiles_LB->text(i) ); |
159 | if( NC ) { | 159 | if( NC ) { |
160 | State_t OldS = NC->state(); | 160 | State_t OldS = NC->state(); |
161 | State_t NewS = NC->state(1); | 161 | State_t NewS = NC->state(1); |
162 | if( OldS != NewS ) { | 162 | if( OldS != NewS ) { |
163 | is = Profiles_LB->isSelected(i); | 163 | is = Profiles_LB->isSelected(i); |
164 | Profiles_LB->changeItem( NC->statePixmap(NewS), | 164 | Profiles_LB->changeItem( NC->statePixmap(NewS), |
165 | NC->name(), | 165 | NC->name(), |
166 | i ); | 166 | i ); |
167 | if( is ) { | 167 | if( is ) { |
168 | Profiles_LB->setSelected( i, TRUE ); | 168 | Profiles_LB->setSelected( i, TRUE ); |
169 | } | 169 | } |
170 | } | 170 | } |
171 | } | 171 | } |
172 | } | 172 | } |
173 | if( ci >= 0 ) | 173 | if( ci >= 0 ) |
174 | Profiles_LB->setCurrentItem( ci ); | 174 | Profiles_LB->setCurrentItem( ci ); |
175 | */ | 175 | */ |
176 | } | 176 | } |
177 | 177 | ||
178 | void NetworkSettings::SLOT_AddNode( void ) { | 178 | void NetworkSettings::SLOT_AddNode( void ) { |
179 | SLOT_EditNode( 0 ); | 179 | SLOT_EditNode( 0 ); |
180 | } | 180 | } |
181 | 181 | ||
182 | void NetworkSettings::SLOT_DeleteNode( void ) { | 182 | void NetworkSettings::SLOT_DeleteNode( void ) { |
183 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); | 183 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); |
184 | 184 | ||
185 | if ( ! LBI ) | 185 | if ( ! LBI ) |
186 | return; | 186 | return; |
187 | 187 | ||
188 | if( QMessageBox::warning( | 188 | if( QMessageBox::warning( |
189 | 0, | 189 | 0, |
190 | tr( "Removing profile" ), | 190 | tr( "Removing profile" ), |
191 | tr( "Remove selected profile ?" ), | 191 | tr( "Remove selected profile ?" ), |
192 | 1, 0 ) == 1 ) { | 192 | 1, 0 ) == 1 ) { |
193 | NSResources->removeNetworkSetup( LBI->text() ); | 193 | NSResources->removeNetworkSetup( LBI->text() ); |
194 | delete LBI; | 194 | delete LBI; |
195 | NSD.setModified( 1 ); | 195 | NSD.setModified( 1 ); |
196 | } | 196 | } |
197 | } | 197 | } |
198 | 198 | ||
199 | void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { | 199 | void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { |
200 | QString OldName = ""; | 200 | QString OldName = ""; |
201 | 201 | ||
202 | EditNetworkSetup EC( this ); | 202 | EditNetworkSetup EC( this ); |
203 | 203 | ||
204 | if( LBI ) { | 204 | if( LBI ) { |
205 | NetworkSetup * NC = NSResources->findNetworkSetup( LBI->text() ); | 205 | NetworkSetup * NC = NSResources->findNetworkSetup( LBI->text() ); |
206 | if( ! NC ) { | 206 | if( ! NC ) { |
207 | return; | 207 | return; |
208 | } | 208 | } |
209 | OldName = NC->name(); | 209 | OldName = NC->name(); |
210 | EC.setNetworkSetup( NC ); | 210 | EC.setNetworkSetup( NC ); |
211 | } | 211 | } |
212 | 212 | ||
213 | EC.showMaximized(); | 213 | EC.showMaximized(); |
214 | // disable refresh timer | 214 | // disable refresh timer |
215 | UpdateTimer->stop(); | 215 | UpdateTimer->stop(); |
216 | 216 | ||
217 | // we need to retry | 217 | // we need to retry |
218 | while( 1 ) { | 218 | while( 1 ) { |
219 | if( EC.exec() == QDialog::Accepted ) { | 219 | if( EC.exec() == QDialog::Accepted ) { |
220 | // toplevel item -> store | 220 | // toplevel item -> store |
221 | NetworkSetup * NC = EC.networkSetup(); | 221 | NetworkSetup * NC = EC.networkSetup(); |
222 | if( NC->isModified() ) { | 222 | if( NC->isModified() ) { |
223 | if( LBI ) { | 223 | if( LBI ) { |
224 | if( NC->name() != OldName ) { | 224 | if( NC->name() != OldName ) { |
225 | // find if new name is free | 225 | // find if new name is free |
226 | NetworkSetup * LCN = NSResources->findNetworkSetup( | 226 | NetworkSetup * LCN = NSResources->findNetworkSetup( |
227 | NC->name() ); | 227 | NC->name() ); |
228 | if( LCN ) { | 228 | if( LCN ) { |
229 | QMessageBox::warning( | 229 | QMessageBox::warning( |
230 | 0, | 230 | 0, |
231 | tr( "In System Config" ), | 231 | tr( "In System Config" ), |
232 | tr( "Name %1 already exists" ).arg(NC->name()) | 232 | tr( "Name %1 already exists" ).arg(NC->name()) |
233 | ); | 233 | ); |
234 | continue; // restart exec | 234 | continue; // restart exec |
235 | } // else new name | 235 | } // else new name |
236 | // new name -> remove item | 236 | // new name -> remove item |
237 | NSResources->removeNetworkSetup( OldName ); | 237 | NSResources->removeNetworkSetup( OldName ); |
238 | NSResources->addNetworkSetup( NC, 0 ); | 238 | NSResources->addNetworkSetup( NC, 0 ); |
239 | } // else not changed | 239 | } // else not changed |
240 | 240 | ||
241 | // must add it here since change will trigger event | 241 | // must add it here since change will trigger event |
242 | Profiles_LB->changeItem( NC->devicePixmap(), | 242 | Profiles_LB->changeItem( NC->devicePixmap(), |
243 | NC->name(), | 243 | NC->name(), |
244 | Profiles_LB->index( LBI ) | 244 | Profiles_LB->index( LBI ) |
245 | ); | 245 | ); |
246 | } else { | 246 | } else { |
247 | // new item | 247 | // new item |
248 | int ci = Profiles_LB->count(); | 248 | int ci = Profiles_LB->count(); |
249 | NSResources->addNetworkSetup( NC, 0 ); | 249 | NSResources->addNetworkSetup( NC, 0 ); |
250 | NC->setNumber( NSResources->assignNetworkSetupNumber() ); | 250 | NC->setNumber( NSResources->assignNetworkSetupNumber() ); |
251 | Profiles_LB->insertItem( NC->devicePixmap(), NC->name() ); | 251 | Profiles_LB->insertItem( NC->devicePixmap(), NC->name() ); |
252 | Profiles_LB->setSelected( ci, TRUE ); | 252 | Profiles_LB->setSelected( ci, TRUE ); |
253 | } | 253 | } |
254 | updateProfileState( LBI ); | 254 | SLOT_RefreshStates(); |
255 | } | 255 | } |
256 | } else { | 256 | } else { |
257 | // cancelled : reset NetworkSetup | 257 | // cancelled : reset NetworkSetup |
258 | if( LBI ) { | 258 | if( LBI ) { |
259 | NetworkSetup * NC = NSResources->findNetworkSetup( LBI->text() ); | 259 | NetworkSetup * NC = NSResources->findNetworkSetup( LBI->text() ); |
260 | NC->reassign(); | 260 | NC->reassign(); |
261 | } | 261 | } |
262 | } | 262 | } |
263 | break; | 263 | break; |
264 | } | 264 | } |
265 | // reenable | 265 | // reenable |
266 | UpdateTimer->start( 5000 ); | 266 | UpdateTimer->start( 5000 ); |
267 | } | 267 | } |
268 | 268 | ||
269 | void NetworkSettings::SLOT_ShowNode( QListBoxItem * LBI ) { | 269 | void NetworkSettings::SLOT_ShowNode( QListBoxItem * LBI ) { |
270 | if( LBI == 0 ) | 270 | if( LBI == 0 ) |
271 | return; | 271 | return; |
272 | 272 | ||
273 | NetworkSetup * NC = NSResources->findNetworkSetup( LBI->text() ); | 273 | NetworkSetup * NC = NSResources->findNetworkSetup( LBI->text() ); |
274 | 274 | ||
275 | if( NC->description().isEmpty() ) { | 275 | if( NC->description().isEmpty() ) { |
276 | Description_LBL->setText( tr( "<<No description>>" ) ); | 276 | Description_LBL->setText( tr( "<<No description>>" ) ); |
277 | } else { | 277 | } else { |
278 | Description_LBL->setText( NC->description() ); | 278 | Description_LBL->setText( NC->description() ); |
279 | } | 279 | } |
280 | 280 | ||
281 | Profile_GB->setTitle( LBI->text() + " : " + NC->stateName() ); | 281 | Profile_GB->setTitle( LBI->text() + " : " + NC->stateName() ); |
282 | 282 | ||
283 | bool FrmActive = 1; | 283 | bool FrmActive = 1; |
284 | bool IsEnabled = 1; | 284 | bool IsEnabled = 1; |
285 | int leds = 0; | 285 | int leds = 0; |
286 | 286 | ||
287 | switch( NC->state() ) { | 287 | switch( NC->state() ) { |
288 | case Disabled : // no further work | 288 | case Disabled : // no further work |
289 | IsEnabled = 0; | 289 | IsEnabled = 0; |
290 | FrmActive = 0; | 290 | FrmActive = 0; |
291 | break; | 291 | break; |
292 | case Unknown : | 292 | case Unknown : |
293 | case Unchecked : | 293 | case Unchecked : |
294 | case Unavailable : | 294 | case Unavailable : |
295 | FrmActive = 0; | 295 | FrmActive = 0; |
296 | break; | 296 | break; |
297 | case Off : | 297 | case Off : |
298 | leds = 1; | 298 | leds = 1; |
299 | break; | 299 | break; |
300 | case Available : | 300 | case Available : |
301 | leds = 2; | 301 | leds = 2; |
302 | break; | 302 | break; |
303 | case IsUp : | 303 | case IsUp : |
304 | leds = 3; | 304 | leds = 3; |
305 | break; | 305 | break; |
306 | } | 306 | } |
307 | 307 | ||
308 | Disable_TB->setOn( ! IsEnabled ); | 308 | Disable_TB->setOn( ! IsEnabled ); |
309 | LED_Frm->setEnabled( FrmActive ); | 309 | LED_Frm->setEnabled( FrmActive ); |
310 | 310 | ||
311 | for( int i = 0 ; i < leds; i ++ ) { | 311 | for( int i = 0 ; i < leds; i ++ ) { |
312 | Leds[i]->setColor( red ); | 312 | Leds[i]->setColor( red ); |
313 | Leds[i]->setOn( true ); | 313 | Leds[i]->setOn( true ); |
314 | } | 314 | } |
315 | for( int i = leds ; i < 3; i ++ ) { | 315 | for( int i = leds ; i < 3; i ++ ) { |
316 | Leds[i]->setColor( red ); | 316 | Leds[i]->setColor( red ); |
317 | Leds[i]->setOn( false ); | 317 | Leds[i]->setOn( false ); |
318 | } | 318 | } |
319 | 319 | ||
320 | Up_TB->setEnabled( leds < 3 && leds != 0 ); | 320 | Up_TB->setEnabled( leds < 3 && leds != 0 ); |
321 | Down_TB->setEnabled( leds > 0 ); | 321 | Down_TB->setEnabled( leds > 0 ); |
322 | } | 322 | } |
323 | 323 | ||
324 | void NetworkSettings::SLOT_CheckState( void ) { | 324 | void NetworkSettings::SLOT_CheckState( void ) { |
325 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); | 325 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); |
326 | if ( ! LBI ) | 326 | if ( ! LBI ) |
327 | return; | 327 | return; |
328 | updateProfileState( LBI ); | 328 | updateProfileState( LBI ); |
329 | } | 329 | } |
330 | 330 | ||
331 | void NetworkSettings::updateProfileState( QListBoxItem * LBI ) { | 331 | void NetworkSettings::updateProfileState( QListBoxItem * LBI ) { |
332 | if( LBI == Profiles_LB->item( Profiles_LB->currentItem() ) ) { | 332 | if( LBI == Profiles_LB->item( Profiles_LB->currentItem() ) ) { |
333 | SLOT_ShowNode( LBI ); | 333 | SLOT_ShowNode( LBI ); |
334 | } | 334 | } |
335 | } | 335 | } |
336 | 336 | ||
337 | void NetworkSettings::SLOT_GenerateConfig( void ) { | 337 | void NetworkSettings::SLOT_GenerateConfig( void ) { |
338 | QString S = NSD.generateSettings(); | 338 | QString S = NSD.generateSettings(); |
339 | if( ! S.isEmpty() ) { | 339 | if( ! S.isEmpty() ) { |
340 | S.insert( 0, "<p>" ); | 340 | S.insert( 0, "<p>" ); |
341 | S.append( "</p>" ); | 341 | S.append( "</p>" ); |
342 | QMessageBox::warning( | 342 | QMessageBox::warning( |
343 | 0, | 343 | 0, |
344 | tr( "Generate config" ), | 344 | tr( "Generate config" ), |
345 | S); | 345 | S); |
346 | } | 346 | } |
347 | } | 347 | } |
348 | 348 | ||
349 | void NetworkSettings::SLOT_Disable( bool T ) { | 349 | void NetworkSettings::SLOT_Disable( bool T ) { |
350 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); | 350 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); |
351 | QString Msg; | 351 | QString Msg; |
352 | 352 | ||
353 | if ( ! LBI ) | 353 | if ( ! LBI ) |
354 | return; | 354 | return; |
355 | 355 | ||
356 | NetworkSetup * NC = NSResources->findNetworkSetup( LBI->text() ); | 356 | NetworkSetup * NC = NSResources->findNetworkSetup( LBI->text() ); |
357 | 357 | ||
358 | Log(( "Prepare to %sable\n", (T) ? "en" : "dis" )); | 358 | Log(( "Prepare to %sable\n", (T) ? "en" : "dis" )); |
359 | Msg = NC->setState( (T) ? Disable : Enable ); | 359 | Msg = NC->setState( (T) ? Disable : Enable ); |
360 | if( ! Msg.isEmpty() ) { | 360 | if( ! Msg.isEmpty() ) { |
361 | Msg.insert( 0, "<p>" ); | 361 | Msg.insert( 0, "<p>" ); |
362 | Msg.append( "</p>" ); | 362 | Msg.append( "</p>" ); |
363 | QMessageBox::warning( | 363 | QMessageBox::warning( |
364 | 0, | 364 | 0, |
365 | tr( "Activating profile" ), | 365 | tr( "Activating profile" ), |
366 | Msg ); | 366 | Msg ); |
367 | return; | 367 | return; |
368 | } | 368 | } |
369 | 369 | ||
370 | // reload new state | 370 | // reload new state |
371 | NC->state( true ); | 371 | NC->state( true ); |
372 | updateProfileState( LBI ); | 372 | updateProfileState( LBI ); |
373 | } | 373 | } |
374 | 374 | ||
375 | void NetworkSettings::SLOT_Up( void ) { | 375 | void NetworkSettings::SLOT_Up( void ) { |
376 | // bring more up | 376 | // bring more up |
377 | 377 | ||
378 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); | 378 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); |
379 | QString Msg; | 379 | QString Msg; |
380 | int led = -1; | 380 | int led = -1; |
381 | 381 | ||
382 | if ( ! LBI ) | 382 | if ( ! LBI ) |
383 | return; | 383 | return; |
384 | 384 | ||
385 | NetworkSetup * NC = | 385 | NetworkSetup * NC = |
386 | NSResources->findNetworkSetup( LBI->text() ); | 386 | NSResources->findNetworkSetup( LBI->text() ); |
387 | 387 | ||
388 | switch( NC->state() ) { | 388 | switch( NC->state() ) { |
389 | case Disabled : // cannot modify this state | 389 | case Disabled : // cannot modify this state |
390 | case Unknown : // cannot modify this state | 390 | case Unknown : // cannot modify this state |
391 | case Unchecked : // cannot modify this state | 391 | case Unchecked : // cannot modify this state |
392 | case Unavailable : // cannot modify this state | 392 | case Unavailable : // cannot modify this state |
393 | case IsUp : // highest UP state | 393 | case IsUp : // highest UP state |
394 | return; | 394 | return; |
395 | case Off : // -> activate | 395 | case Off : // -> activate |
396 | led = 1; | 396 | led = 1; |
397 | Down_TB->setEnabled( true ); | 397 | Down_TB->setEnabled( true ); |
398 | Log(( "Activate interface %s\n", NC->name().latin1() )); | 398 | Log(( "Activate interface %s\n", NC->name().latin1() )); |
399 | Msg = NC->setState( Activate ); | 399 | Msg = NC->setState( Activate ); |
400 | break; | 400 | break; |
401 | case Available : // -> up | 401 | case Available : // -> up |
402 | led = 2; | 402 | led = 2; |
403 | Log(( "Bring up interface %s\n", NC->name().latin1() )); | 403 | Log(( "Bring up interface %s\n", NC->name().latin1() )); |
404 | Msg = NC->setState( Up ); | 404 | Msg = NC->setState( Up ); |
405 | if( Msg.isEmpty() ) { | 405 | if( Msg.isEmpty() ) { |
406 | Up_TB->setEnabled( false ); | 406 | Up_TB->setEnabled( false ); |
407 | } | 407 | } |
408 | break; | 408 | break; |
409 | } | 409 | } |
410 | 410 | ||
411 | if( ! Msg.isEmpty() ) { | 411 | if( ! Msg.isEmpty() ) { |
412 | Msg.insert( 0, "<p>" ); | 412 | Msg.insert( 0, "<p>" ); |
413 | Msg.append( "</p>" ); | 413 | Msg.append( "</p>" ); |
414 | QMessageBox::warning( | 414 | QMessageBox::warning( |
415 | 0, | 415 | 0, |
416 | tr( "Increase availability" ), | 416 | tr( "Increase availability" ), |
417 | Msg ); | 417 | Msg ); |
418 | return; | 418 | return; |
419 | } | 419 | } |
420 | 420 | ||
421 | updateProfileState( LBI ); | 421 | updateProfileState( LBI ); |
422 | 422 | ||
423 | // set color of led we should change | 423 | // set color of led we should change |
424 | if( led > 0 ) { | 424 | if( led > 0 ) { |
425 | Leds[led]->setColor( blue ); | 425 | Leds[led]->setColor( blue ); |
426 | Leds[led]->setOn( true ); | 426 | Leds[led]->setOn( true ); |
427 | } | 427 | } |
428 | 428 | ||
429 | } | 429 | } |
430 | 430 | ||
431 | void NetworkSettings::SLOT_Down( void ) { | 431 | void NetworkSettings::SLOT_Down( void ) { |
432 | // bring more down | 432 | // bring more down |
433 | 433 | ||
434 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); | 434 | QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); |
435 | int led = -1; | 435 | int led = -1; |
436 | QString Msg; | 436 | QString Msg; |
437 | 437 | ||
438 | if ( ! LBI ) | 438 | if ( ! LBI ) |
439 | return; | 439 | return; |
440 | 440 | ||
441 | NetworkSetup * NC = | 441 | NetworkSetup * NC = |
442 | NSResources->findNetworkSetup( LBI->text() ); | 442 | NSResources->findNetworkSetup( LBI->text() ); |
443 | 443 | ||
444 | switch( NC->state() ) { | 444 | switch( NC->state() ) { |
445 | case Disabled : // cannot modify this state | 445 | case Disabled : // cannot modify this state |
446 | case Unknown : // cannot modify this state | 446 | case Unknown : // cannot modify this state |
447 | case Unchecked : // cannot modify this state | 447 | case Unchecked : // cannot modify this state |
448 | case Unavailable : // cannot modify this state | 448 | case Unavailable : // cannot modify this state |
449 | case Off : // highest DOWN state | 449 | case Off : // highest DOWN state |
450 | break; | 450 | break; |
451 | case Available : // -> down | 451 | case Available : // -> down |
452 | led = 0; | 452 | led = 0; |
453 | Log(( "Deactivate interface %s\n", NC->name().latin1() )); | 453 | Log(( "Deactivate interface %s\n", NC->name().latin1() )); |
454 | Msg = NC->setState( Deactivate ); | 454 | Msg = NC->setState( Deactivate ); |
455 | Down_TB->setEnabled( false ); | 455 | Down_TB->setEnabled( false ); |
456 | break; | 456 | break; |
457 | case IsUp : // highest UP state | 457 | case IsUp : // highest UP state |
458 | led = 1; | 458 | led = 1; |
459 | Up_TB->setEnabled( true ); | 459 | Up_TB->setEnabled( true ); |
460 | Log(( "Bring down interface %s\n", NC->name().latin1() )); | 460 | Log(( "Bring down interface %s\n", NC->name().latin1() )); |
461 | Msg = NC->setState( Down, 1 ); | 461 | Msg = NC->setState( Down, 1 ); |
462 | if( Msg.isEmpty() ) { | 462 | if( Msg.isEmpty() ) { |
463 | // remove 'up' file to make sure | 463 | // remove 'up' file to make sure |
464 | unlink ( QString().sprintf( "/tmp/Profile-%d.up", NC->number() ).latin1() );; | 464 | unlink ( QString().sprintf( "/tmp/Profile-%d.up", NC->number() ).latin1() );; |
465 | } | 465 | } |
466 | break; | 466 | break; |
467 | } | 467 | } |
468 | 468 | ||
469 | if( ! Msg.isEmpty() ) { | 469 | if( ! Msg.isEmpty() ) { |
470 | Msg.insert( 0, "<p>" ); | 470 | Msg.insert( 0, "<p>" ); |
471 | Msg.append( "</p>" ); | 471 | Msg.append( "</p>" ); |
472 | QMessageBox::warning( | 472 | QMessageBox::warning( |
473 | 0, | 473 | 0, |
474 | tr( "Decrease availability" ), | 474 | tr( "Decrease availability" ), |
475 | Msg ); | 475 | Msg ); |
476 | return; | 476 | return; |
477 | } | 477 | } |
478 | 478 | ||
479 | updateProfileState( LBI ); | 479 | updateProfileState( LBI ); |
480 | 480 | ||
481 | // set color of led we should change | 481 | // set color of led we should change |
482 | if( led >= 0 ) { | 482 | if( led >= 0 ) { |
483 | Leds[led]->setColor( blue ); | 483 | Leds[led]->setColor( blue ); |
484 | } | 484 | } |
485 | } | 485 | } |
486 | 486 | ||
487 | void NetworkSettings::SLOT_ToMessages( void ) { | 487 | void NetworkSettings::SLOT_ToMessages( void ) { |
488 | Profiles_LB->hide(); | 488 | Profiles_LB->hide(); |
489 | Profile_GB->hide(); | 489 | Profile_GB->hide(); |
490 | Messages_GB->show(); | 490 | Messages_GB->show(); |
491 | } | 491 | } |
492 | 492 | ||
493 | void NetworkSettings::SLOT_ToProfile( void ) { | 493 | void NetworkSettings::SLOT_ToProfile( void ) { |
494 | Profiles_LB->show(); | 494 | Profiles_LB->show(); |
495 | Profile_GB->show(); | 495 | Profile_GB->show(); |
496 | Messages_GB->hide(); | 496 | Messages_GB->hide(); |
497 | } | 497 | } |
498 | 498 | ||
499 | void NetworkSettings::SLOT_QCopMessage(const QCString &msg, const QByteArray &data) { | 499 | void NetworkSettings::SLOT_QCopMessage(const QCString &msg, const QByteArray &data) { |
500 | QDataStream stream( data, IO_ReadOnly ); | 500 | QDataStream stream( data, IO_ReadOnly ); |
501 | 501 | ||
502 | if( msg == "raise" ) { | 502 | if( msg == "raise" ) { |
503 | raise(); | 503 | raise(); |
504 | return; | 504 | return; |
505 | } /* if ( msg == "someMessage(int,int,int)" ) { | 505 | } /* if ( msg == "someMessage(int,int,int)" ) { |
506 | int a,b,c; | 506 | int a,b,c; |
507 | stream >> a >> b >> c; | 507 | stream >> a >> b >> c; |
508 | ... | 508 | ... |
509 | } */ | 509 | } */ |
510 | } | 510 | } |
diff --git a/noncore/settings/networksettings2/networksettings2/netnode.cpp b/noncore/settings/networksettings2/networksettings2/netnode.cpp index 0ab0e5b..1bcd95c 100644 --- a/noncore/settings/networksettings2/networksettings2/netnode.cpp +++ b/noncore/settings/networksettings2/networksettings2/netnode.cpp | |||
@@ -1,528 +1,531 @@ | |||
1 | #include <time.h> | 1 | #include <time.h> |
2 | #include <qpe/qpeapplication.h> | 2 | #include <qpe/qpeapplication.h> |
3 | #include <qpe/resource.h> | 3 | #include <qpe/resource.h> |
4 | 4 | ||
5 | #include <qpainter.h> | 5 | #include <qpainter.h> |
6 | #include <qbitmap.h> | 6 | #include <qbitmap.h> |
7 | #include <qtextstream.h> | 7 | #include <qtextstream.h> |
8 | #include <qpixmap.h> | 8 | #include <qpixmap.h> |
9 | 9 | ||
10 | #include "resources.h" | 10 | #include "resources.h" |
11 | #include "netnode.h" | 11 | #include "netnode.h" |
12 | 12 | ||
13 | static char * ActionName[] = { | 13 | static char * ActionName[] = { |
14 | "Disable", | 14 | "Disable", |
15 | "Enable", | 15 | "Enable", |
16 | "Activate", | 16 | "Activate", |
17 | "Deactivate", | 17 | "Deactivate", |
18 | "Up", | 18 | "Up", |
19 | "Down" | 19 | "Down" |
20 | }; | 20 | }; |
21 | 21 | ||
22 | static char * StateName[] = { | 22 | static char * StateName[] = { |
23 | "Unchecked", | 23 | "Unchecked", |
24 | "Unknown", | 24 | "Unknown", |
25 | "Unavailable", | 25 | "Unavailable", |
26 | "Disabled", | 26 | "Disabled", |
27 | "Off", | 27 | "Off", |
28 | "Available", | 28 | "Available", |
29 | "IsUp" | 29 | "IsUp" |
30 | }; | 30 | }; |
31 | 31 | ||
32 | QString & deQuote( QString & X ) { | 32 | QString & deQuote( QString & X ) { |
33 | if( X[0] == '"' ) { | 33 | if( X[0] == '"' ) { |
34 | // remove end and trailing "" and \x -> x | 34 | // remove end and trailing "" and \x -> x |
35 | QChar R; | 35 | QChar R; |
36 | long idx; | 36 | long idx; |
37 | idx = X.length()-1; | 37 | idx = X.length()-1; |
38 | X = X.mid( 1, idx ); | 38 | X = X.mid( 1, idx ); |
39 | 39 | ||
40 | idx = 0; | 40 | idx = 0; |
41 | while( ( idx = X.find( '\\', idx ) ) >= 0 ) { | 41 | while( ( idx = X.find( '\\', idx ) ) >= 0 ) { |
42 | R = X.at( idx + 1 ); | 42 | R = X.at( idx + 1 ); |
43 | X.replace( idx, 2, &R, 1 ); | 43 | X.replace( idx, 2, &R, 1 ); |
44 | } | 44 | } |
45 | X = X.left( X.length()-1 ); | 45 | X = X.left( X.length()-1 ); |
46 | } | 46 | } |
47 | return X; | 47 | return X; |
48 | } | 48 | } |
49 | 49 | ||
50 | QString quote( QString X ) { | 50 | QString quote( QString X ) { |
51 | if( X.find( QRegExp( "[ \n\"\\\t]" ) ) >= 0 ) { | 51 | if( X.find( QRegExp( "[ \n\"\\\t]" ) ) >= 0 ) { |
52 | // need to quote this | 52 | // need to quote this |
53 | QString OutString = "\""; | 53 | QString OutString = "\""; |
54 | 54 | ||
55 | X.replace( QRegExp("\""), "\\\"" ); | 55 | X.replace( QRegExp("\""), "\\\"" ); |
56 | X.replace( QRegExp("\\"), "\\\\" ); | 56 | X.replace( QRegExp("\\"), "\\\\" ); |
57 | X.replace( QRegExp(" "), "\\ " ); | 57 | X.replace( QRegExp(" "), "\\ " ); |
58 | 58 | ||
59 | OutString += X; | 59 | OutString += X; |
60 | OutString += "\""; | 60 | OutString += "\""; |
61 | X = OutString; | 61 | X = OutString; |
62 | } | 62 | } |
63 | return X; | 63 | return X; |
64 | } | 64 | } |
65 | 65 | ||
66 | 66 | ||
67 | // | 67 | // |
68 | // | 68 | // |
69 | // ANETNODE | 69 | // ANETNODE |
70 | // | 70 | // |
71 | // | 71 | // |
72 | 72 | ||
73 | void ANetNode::saveAttributes( QTextStream & TS ) { | 73 | void ANetNode::saveAttributes( QTextStream & TS ) { |
74 | saveSpecificAttribute( TS ); | 74 | saveSpecificAttribute( TS ); |
75 | } | 75 | } |
76 | 76 | ||
77 | void ANetNode::setAttribute( QString & Attr, QString & Value ){ | 77 | void ANetNode::setAttribute( QString & Attr, QString & Value ){ |
78 | setSpecificAttribute( Attr, Value ); | 78 | setSpecificAttribute( Attr, Value ); |
79 | } | 79 | } |
80 | 80 | ||
81 | bool ANetNode::isToplevel( void ) { | 81 | bool ANetNode::isToplevel( void ) { |
82 | const char ** P = provides(); | 82 | const char ** P = provides(); |
83 | while( *P ) { | 83 | while( *P ) { |
84 | if( strcmp( *P, "fullsetup") == 0 ) | 84 | if( strcmp( *P, "fullsetup") == 0 ) |
85 | return 1; | 85 | return 1; |
86 | P ++; | 86 | P ++; |
87 | } | 87 | } |
88 | return 0; | 88 | return 0; |
89 | } | 89 | } |
90 | 90 | ||
91 | bool ANetNode::openFile( SystemFile & SF, | 91 | bool ANetNode::openFile( SystemFile & SF, |
92 | ANetNodeInstance * NNI ) { | 92 | ANetNodeInstance * NNI, |
93 | return (NNI ) ? NNI->openFile( SF ) : 0 ; | 93 | QStringList & SL ) { |
94 | return (NNI ) ? NNI->openFile( SF, SL ) : 0 ; | ||
94 | } | 95 | } |
95 | 96 | ||
96 | // | 97 | // |
97 | // | 98 | // |
98 | // ANETNODEINSTANCE | 99 | // ANETNODEINSTANCE |
99 | // | 100 | // |
100 | // | 101 | // |
101 | 102 | ||
102 | long ANetNodeInstance::InstanceCounter = -1; | 103 | long ANetNodeInstance::InstanceCounter = -1; |
103 | 104 | ||
104 | void ANetNodeInstance::initialize( void ) { | 105 | void ANetNodeInstance::initialize( void ) { |
105 | if( InstanceCounter == -1 ) | 106 | if( InstanceCounter == -1 ) |
106 | InstanceCounter = time(0); | 107 | InstanceCounter = time(0); |
107 | // set name | 108 | // set name |
108 | QString N; | 109 | QString N; |
109 | N.sprintf( "-%ld", InstanceCounter++ ); | 110 | N.sprintf( "-%ld", InstanceCounter++ ); |
110 | N.prepend( NodeType->name() ); | 111 | N.prepend( NodeType->name() ); |
111 | setName( N.latin1() ); | 112 | setName( N.latin1() ); |
112 | } | 113 | } |
113 | 114 | ||
114 | void ANetNodeInstance::setAttribute( QString & Attr, QString & Value ){ | 115 | void ANetNodeInstance::setAttribute( QString & Attr, QString & Value ){ |
115 | if( Attr == "__name" ) { | 116 | if( Attr == "__name" ) { |
116 | setName( Value.latin1() ); | 117 | setName( Value.latin1() ); |
117 | } else { | 118 | } else { |
118 | setSpecificAttribute( Attr, Value ); | 119 | setSpecificAttribute( Attr, Value ); |
119 | } | 120 | } |
120 | } | 121 | } |
121 | 122 | ||
122 | void ANetNodeInstance::saveAttributes( QTextStream & TS ) { | 123 | void ANetNodeInstance::saveAttributes( QTextStream & TS ) { |
123 | TS << "__name=" << name() << endl; | 124 | TS << "__name=" << name() << endl; |
124 | saveSpecificAttribute( TS ); | 125 | saveSpecificAttribute( TS ); |
125 | } | 126 | } |
126 | 127 | ||
127 | ANetNodeInstance * ANetNodeInstance::nextNode( void ) { | 128 | ANetNodeInstance * ANetNodeInstance::nextNode( void ) { |
128 | return networkSetup()->findNext( this ); | 129 | return networkSetup()->findNext( this ); |
129 | } | 130 | } |
130 | 131 | ||
131 | // | 132 | // |
132 | // | 133 | // |
133 | // NODECOLLECTION | 134 | // NODECOLLECTION |
134 | // | 135 | // |
135 | // | 136 | // |
136 | 137 | ||
137 | NetworkSetup::NetworkSetup( void ) : QList<ANetNodeInstance>() { | 138 | NetworkSetup::NetworkSetup( void ) : QList<ANetNodeInstance>() { |
138 | IsModified = 0; | 139 | IsModified = 0; |
139 | Index = -1; | 140 | Index = -1; |
140 | Name=""; | 141 | Name=""; |
141 | IsNew = 1; | 142 | IsNew = 1; |
142 | CurrentState = Unchecked; | 143 | CurrentState = Unchecked; |
143 | AssignedInterface = 0; | 144 | AssignedInterface = 0; |
144 | Number = -1; | 145 | Number = -1; |
145 | Done = 0; | 146 | Done = 0; |
146 | } | 147 | } |
147 | 148 | ||
148 | NetworkSetup::NetworkSetup( QTextStream & TS, bool & Dangling ) : | 149 | NetworkSetup::NetworkSetup( QTextStream & TS, bool & Dangling ) : |
149 | QList<ANetNodeInstance>() { | 150 | QList<ANetNodeInstance>() { |
150 | long idx; | 151 | long idx; |
151 | QString S, A, N; | 152 | QString S, A, N; |
152 | 153 | ||
153 | Number = -1; | 154 | Number = -1; |
154 | Done = 0; | 155 | Done = 0; |
155 | IsModified = 0; | 156 | IsModified = 0; |
156 | Index = -1; | 157 | Index = -1; |
157 | Name=""; | 158 | Name=""; |
158 | IsNew = 0; | 159 | IsNew = 0; |
159 | AssignedInterface = 0; | 160 | AssignedInterface = 0; |
160 | CurrentState = Unchecked; | 161 | CurrentState = Unchecked; |
161 | 162 | ||
162 | Dangling = 0; // by default node collection is ok | 163 | Dangling = 0; // by default node collection is ok |
163 | 164 | ||
164 | do { | 165 | do { |
165 | S = TS.readLine(); | 166 | S = TS.readLine(); |
166 | if( S.isEmpty() ) { | 167 | if( S.isEmpty() ) { |
167 | // empty line | 168 | // empty line |
168 | break; | 169 | break; |
169 | } | 170 | } |
170 | 171 | ||
171 | idx = S.find('='); | 172 | idx = S.find('='); |
172 | S.stripWhiteSpace(); | 173 | S.stripWhiteSpace(); |
173 | A = S.left( idx ); | 174 | A = S.left( idx ); |
174 | A.lower(); | 175 | A.lower(); |
175 | N = S.mid( idx+1, S.length() ); | 176 | N = S.mid( idx+1, S.length() ); |
176 | N.stripWhiteSpace(); | 177 | N.stripWhiteSpace(); |
177 | N = deQuote( N ); | 178 | N = deQuote( N ); |
178 | 179 | ||
179 | if( A == "name" ) { | 180 | if( A == "name" ) { |
180 | Name = N; | 181 | Name = N; |
181 | } else if( A == "number" ) { | 182 | } else if( A == "number" ) { |
182 | setNumber( N.toLong() ); | 183 | setNumber( N.toLong() ); |
183 | } else if( A == "node" ) { | 184 | } else if( A == "node" ) { |
184 | ANetNodeInstance * NNI = NSResources->findNodeInstance( N ); | 185 | ANetNodeInstance * NNI = NSResources->findNodeInstance( N ); |
185 | Log(( "Find node %s : %p\n", N.latin1(), NNI )); | 186 | Log(( "Find node %s : %p\n", N.latin1(), NNI )); |
186 | if( NNI ) { | 187 | if( NNI ) { |
187 | append( NNI ); | 188 | append( NNI ); |
188 | } else { | 189 | } else { |
189 | // could not find a node type -> collection invalid | 190 | // could not find a node type -> collection invalid |
190 | Log(( "Node %s missing -> NetworkSetup dangling\n", | 191 | Log(( "Node %s missing -> NetworkSetup dangling\n", |
191 | N.latin1() )); | 192 | N.latin1() )); |
192 | // create placeholder for this dangling NNI | 193 | // create placeholder for this dangling NNI |
193 | NNI = new ErrorNNI( N ); | 194 | NNI = new ErrorNNI( N ); |
194 | Dangling = 1; | 195 | Dangling = 1; |
195 | } | 196 | } |
196 | } | 197 | } |
197 | } while( 1 ); | 198 | } while( 1 ); |
198 | 199 | ||
199 | Log(( "Profile number %s : %d nodes\n", | 200 | Log(( "Profile number %s : %d nodes\n", |
200 | Name.latin1(), count() )); | 201 | Name.latin1(), count() )); |
201 | } | 202 | } |
202 | 203 | ||
203 | NetworkSetup::~NetworkSetup( void ) { | 204 | NetworkSetup::~NetworkSetup( void ) { |
204 | } | 205 | } |
205 | 206 | ||
206 | const QString & NetworkSetup::description( void ) { | 207 | const QString & NetworkSetup::description( void ) { |
207 | ANetNodeInstance * NNI = getToplevel(); | 208 | ANetNodeInstance * NNI = getToplevel(); |
208 | return (NNI) ? NNI->runtime()->description() : Name; | 209 | return (NNI) ? NNI->runtime()->description() : Name; |
209 | } | 210 | } |
210 | 211 | ||
211 | void NetworkSetup::append( ANetNodeInstance * NNI ) { | 212 | void NetworkSetup::append( ANetNodeInstance * NNI ) { |
212 | NNI->setNetworkSetup( this ); | 213 | NNI->setNetworkSetup( this ); |
213 | QList<ANetNodeInstance>::append( NNI ); | 214 | QList<ANetNodeInstance>::append( NNI ); |
214 | } | 215 | } |
215 | 216 | ||
216 | void NetworkSetup::save( QTextStream & TS ) { | 217 | void NetworkSetup::save( QTextStream & TS ) { |
217 | 218 | ||
218 | TS << "name=" << quote( Name ) << endl; | 219 | TS << "name=" << quote( Name ) << endl; |
219 | TS << "number=" << number() << endl; | 220 | TS << "number=" << number() << endl; |
220 | ANetNodeInstance * NNI; | 221 | ANetNodeInstance * NNI; |
221 | for( QListIterator<ANetNodeInstance> it(*this); | 222 | for( QListIterator<ANetNodeInstance> it(*this); |
222 | it.current(); | 223 | it.current(); |
223 | ++it ) { | 224 | ++it ) { |
224 | NNI = it.current(); | 225 | NNI = it.current(); |
225 | TS << "node=" << NNI->name() << endl; | 226 | TS << "node=" << NNI->name() << endl; |
226 | } | 227 | } |
227 | TS << endl; | 228 | TS << endl; |
228 | IsNew = 0; | 229 | IsNew = 0; |
229 | } | 230 | } |
230 | 231 | ||
231 | ANetNodeInstance * NetworkSetup::getToplevel( void ) { | 232 | ANetNodeInstance * NetworkSetup::getToplevel( void ) { |
232 | ANetNodeInstance * NNI = 0; | 233 | ANetNodeInstance * NNI = 0; |
233 | for( QListIterator<ANetNodeInstance> it(*this); | 234 | for( QListIterator<ANetNodeInstance> it(*this); |
234 | it.current(); | 235 | it.current(); |
235 | ++it ) { | 236 | ++it ) { |
236 | NNI = it.current(); | 237 | NNI = it.current(); |
237 | if( NNI->nodeClass()->isToplevel() ) { | 238 | if( NNI->nodeClass()->isToplevel() ) { |
238 | return NNI; | 239 | return NNI; |
239 | } | 240 | } |
240 | } | 241 | } |
241 | return 0; | 242 | return 0; |
242 | } | 243 | } |
243 | 244 | ||
244 | ANetNodeInstance * NetworkSetup::findByName( const QString & S ) { | 245 | ANetNodeInstance * NetworkSetup::findByName( const QString & S ) { |
245 | ANetNodeInstance * NNI = 0; | 246 | ANetNodeInstance * NNI = 0; |
246 | for( QListIterator<ANetNodeInstance> it(*this); | 247 | for( QListIterator<ANetNodeInstance> it(*this); |
247 | it.current(); | 248 | it.current(); |
248 | ++it ) { | 249 | ++it ) { |
249 | NNI = it.current(); | 250 | NNI = it.current(); |
250 | if( NNI->name() == S ) { | 251 | if( NNI->name() == S ) { |
251 | return NNI; | 252 | return NNI; |
252 | } | 253 | } |
253 | } | 254 | } |
254 | return 0; | 255 | return 0; |
255 | } | 256 | } |
256 | 257 | ||
257 | ANetNodeInstance * NetworkSetup::findNext( ANetNodeInstance * NNI ) { | 258 | ANetNodeInstance * NetworkSetup::findNext( ANetNodeInstance * NNI ) { |
258 | ANetNodeInstance * NNNI; | 259 | ANetNodeInstance * NNNI; |
259 | 260 | ||
260 | if( ! NNI ) | 261 | if( ! NNI ) |
261 | getToplevel(); | 262 | getToplevel(); |
262 | 263 | ||
263 | for( QListIterator<ANetNodeInstance> it(*this); | 264 | for( QListIterator<ANetNodeInstance> it(*this); |
264 | it.current(); | 265 | it.current(); |
265 | ++it ) { | 266 | ++it ) { |
266 | NNNI = it.current(); | 267 | NNNI = it.current(); |
267 | if( NNNI == NNI ) { | 268 | if( NNNI == NNI ) { |
268 | ++it; | 269 | ++it; |
269 | return it.current(); | 270 | return it.current(); |
270 | } | 271 | } |
271 | } | 272 | } |
272 | return 0; // no more next | 273 | return 0; // no more next |
273 | } | 274 | } |
274 | 275 | ||
275 | int NetworkSetup::compareItems( QCollection::Item I1, | 276 | int NetworkSetup::compareItems( QCollection::Item I1, |
276 | QCollection::Item I2 ) { | 277 | QCollection::Item I2 ) { |
277 | ANetNodeInstance * NNI1, * NNI2; | 278 | ANetNodeInstance * NNI1, * NNI2; |
278 | NNI1 = (ANetNodeInstance *)I1; | 279 | NNI1 = (ANetNodeInstance *)I1; |
279 | NNI2 = (ANetNodeInstance *)I2; | 280 | NNI2 = (ANetNodeInstance *)I2; |
280 | return strcmp( NNI1->name(), NNI2->name() ); | 281 | return strcmp( NNI1->name(), NNI2->name() ); |
281 | } | 282 | } |
282 | 283 | ||
283 | static char * State2PixmapTbl[] = { | 284 | static char * State2PixmapTbl[] = { |
284 | "NULL", // Unchecked : no pixmap | 285 | "NULL", // Unchecked : no pixmap |
285 | "check", // Unknown | 286 | "check", // Unknown |
286 | "delete", // unavailable | 287 | "delete", // unavailable |
287 | "disabled", // disabled | 288 | "disabled", // disabled |
288 | "off", // off | 289 | "off", // off |
289 | "disconnected", // available | 290 | "disconnected", // available |
290 | "connected" // up | 291 | "connected" // up |
291 | }; | 292 | }; |
292 | 293 | ||
293 | QPixmap NetworkSetup::devicePixmap( void ) { | 294 | QPixmap NetworkSetup::devicePixmap( void ) { |
294 | QPixmap pm = NSResources->getPixmap( | 295 | QPixmap pm = NSResources->getPixmap( |
295 | getToplevel()->nextNode()->pixmapName()+"-large"); | 296 | getToplevel()->nextNode()->pixmapName()+"-large"); |
296 | 297 | ||
297 | QPixmap Mini = NSResources->getPixmap( | 298 | QPixmap Mini = NSResources->getPixmap( |
298 | device()->netNode()->pixmapName() ); | 299 | device()->netNode()->pixmapName() ); |
299 | 300 | ||
300 | if( pm.isNull() || Mini.isNull() ) | 301 | if( pm.isNull() || Mini.isNull() ) |
301 | return Resource::loadPixmap("Unknown"); | 302 | return Resource::loadPixmap("Unknown"); |
302 | 303 | ||
303 | QPainter painter( &pm ); | 304 | QPainter painter( &pm ); |
304 | painter.drawPixmap( pm.width()-Mini.width(), | 305 | painter.drawPixmap( pm.width()-Mini.width(), |
305 | pm.height()-Mini.height(), | 306 | pm.height()-Mini.height(), |
306 | Mini ); | 307 | Mini ); |
307 | pm.setMask( pm.createHeuristicMask( TRUE ) ); | 308 | pm.setMask( pm.createHeuristicMask( TRUE ) ); |
308 | return pm; | 309 | return pm; |
309 | } | 310 | } |
310 | 311 | ||
311 | QPixmap NetworkSetup::statePixmap( State_t S) { | 312 | QPixmap NetworkSetup::statePixmap( State_t S) { |
312 | return NSResources->getPixmap( State2PixmapTbl[S] ); | 313 | return NSResources->getPixmap( State2PixmapTbl[S] ); |
313 | } | 314 | } |
314 | 315 | ||
315 | QString NetworkSetup::stateName( State_t S) { | 316 | QString NetworkSetup::stateName( State_t S) { |
316 | switch( S ) { | 317 | switch( S ) { |
317 | case Unknown : | 318 | case Unknown : |
318 | return qApp->translate( "networksettings2", "Unknown"); | 319 | return qApp->translate( "networksettings2", "Unknown"); |
319 | case Unavailable : | 320 | case Unavailable : |
320 | return qApp->translate( "networksettings2", "Unavailable"); | 321 | return qApp->translate( "networksettings2", "Unavailable"); |
321 | case Disabled : | 322 | case Disabled : |
322 | return qApp->translate( "networksettings2", "Disabled"); | 323 | return qApp->translate( "networksettings2", "Disabled"); |
323 | case Off : | 324 | case Off : |
324 | return qApp->translate( "networksettings2", "Inactive"); | 325 | return qApp->translate( "networksettings2", "Inactive"); |
325 | case Available : | 326 | case Available : |
326 | return qApp->translate( "networksettings2", "Available"); | 327 | return qApp->translate( "networksettings2", "Available"); |
327 | case IsUp : | 328 | case IsUp : |
328 | return qApp->translate( "networksettings2", "Up"); | 329 | return qApp->translate( "networksettings2", "Up"); |
329 | case Unchecked : /* FT */ | 330 | case Unchecked : /* FT */ |
330 | default : | 331 | default : |
331 | break; | 332 | break; |
332 | } | 333 | } |
333 | return QString(""); | 334 | return QString(""); |
334 | } | 335 | } |
335 | 336 | ||
336 | void NetworkSetup::reassign( void ) { | 337 | void NetworkSetup::reassign( void ) { |
337 | for( QListIterator<ANetNodeInstance> it(*this); | 338 | for( QListIterator<ANetNodeInstance> it(*this); |
338 | it.current(); | 339 | it.current(); |
339 | ++it ) { | 340 | ++it ) { |
340 | it.current()->setNetworkSetup( this ); | 341 | it.current()->setNetworkSetup( this ); |
341 | } | 342 | } |
342 | } | 343 | } |
343 | 344 | ||
344 | const QStringList & NetworkSetup::triggers() { | 345 | const QStringList & NetworkSetup::triggers() { |
345 | return getToplevel()->runtime()->triggers(); | 346 | return getToplevel()->runtime()->triggers(); |
346 | } | 347 | } |
347 | 348 | ||
348 | bool NetworkSetup::hasDataForFile( SystemFile & S ) { | 349 | bool NetworkSetup::hasDataForFile( SystemFile & S ) { |
349 | return ( firstWithDataForFile( S ) != 0 ); | 350 | return ( firstWithDataForFile( S ) != 0 ); |
350 | } | 351 | } |
351 | 352 | ||
352 | ANetNodeInstance * NetworkSetup::firstWithDataForFile( SystemFile & S ) { | 353 | ANetNodeInstance * NetworkSetup::firstWithDataForFile( SystemFile & S ) { |
353 | for( QListIterator<ANetNodeInstance> it(*this); | 354 | for( QListIterator<ANetNodeInstance> it(*this); |
354 | it.current(); | 355 | it.current(); |
355 | ++it ) { | 356 | ++it ) { |
356 | if( it.current()->hasDataForFile( S ) ) { | 357 | if( it.current()->hasDataForFile( S ) ) { |
357 | return it.current(); | 358 | return it.current(); |
358 | } | 359 | } |
359 | } | 360 | } |
360 | return 0; | 361 | return 0; |
361 | } | 362 | } |
362 | 363 | ||
363 | State_t NetworkSetup::state( bool Update ) { | 364 | State_t NetworkSetup::state( bool Update ) { |
364 | State_t NodeState; | 365 | State_t NodeState; |
365 | 366 | ||
366 | if( CurrentState == Unchecked || Update ) { | 367 | if( CurrentState == Unchecked || Update ) { |
367 | // collect states of all nodes until with get the 'higest' | 368 | // collect states of all nodes until with get the 'higest' |
368 | // state possible | 369 | // state possible |
369 | 370 | ||
370 | Log(( "NetworkSetup %s state %s\n", | 371 | Log(( "NetworkSetup %s state %s\n", |
371 | Name.latin1(), StateName[CurrentState] )); | 372 | Name.latin1(), StateName[CurrentState] )); |
372 | 373 | ||
373 | CurrentState = Unknown; | 374 | CurrentState = Unknown; |
374 | for( QListIterator<ANetNodeInstance> it(*this); | 375 | for( QListIterator<ANetNodeInstance> it(*this); |
375 | it.current(); | 376 | it.current(); |
376 | ++it ) { | 377 | ++it ) { |
377 | Log(( "-> Detect %s\n", it.current()->name() )); | 378 | Log(( "-> Detect %s\n", it.current()->name() )); |
378 | NodeState = it.current()->runtime()->detectState(); | 379 | NodeState = it.current()->runtime()->detectState(); |
379 | Log(( " state %s\n", StateName[NodeState] )); | 380 | Log(( " state %s\n", StateName[NodeState] )); |
380 | 381 | ||
381 | if( NodeState == Disabled || | 382 | if( NodeState == Disabled || |
382 | NodeState == IsUp ) { | 383 | NodeState == IsUp ) { |
383 | // max | 384 | // max |
384 | CurrentState = NodeState; | 385 | CurrentState = NodeState; |
385 | break; | 386 | break; |
386 | } | 387 | } |
387 | 388 | ||
388 | if( NodeState > CurrentState ) { | 389 | if( NodeState > CurrentState ) { |
389 | // higher | 390 | // higher |
390 | CurrentState = NodeState; | 391 | CurrentState = NodeState; |
391 | } | 392 | } |
392 | } | 393 | } |
393 | } | 394 | } |
394 | 395 | ||
395 | return CurrentState; | 396 | return CurrentState; |
396 | } | 397 | } |
397 | 398 | ||
398 | QString NetworkSetup::setState( Action_t A, bool Force ) { | 399 | QString NetworkSetup::setState( Action_t A, bool Force ) { |
399 | 400 | ||
400 | QString msg; | 401 | QString msg; |
401 | Action_t Actions[10]; | 402 | Action_t Actions[10]; |
402 | int NoOfActions = 0; | 403 | int NoOfActions = 0; |
403 | 404 | ||
404 | // get current state | 405 | // get current state |
405 | state( Force ); | 406 | state( Force ); |
406 | 407 | ||
407 | switch( A ) { | 408 | switch( A ) { |
408 | case Disable : | 409 | case Disable : |
410 | /* | ||
409 | if( CurrentState < Disabled ) { | 411 | if( CurrentState < Disabled ) { |
410 | // disabled | 412 | // disabled |
411 | CurrentState = Disabled; | 413 | CurrentState = Disabled; |
412 | return QString(); | 414 | return QString(); |
413 | } | 415 | } |
416 | */ | ||
414 | 417 | ||
415 | if( CurrentState == IsUp ) { | 418 | if( CurrentState == IsUp ) { |
416 | Actions[NoOfActions++] = Down; | 419 | Actions[NoOfActions++] = Down; |
417 | Actions[NoOfActions++] = Deactivate; | 420 | Actions[NoOfActions++] = Deactivate; |
418 | } else if( CurrentState == Available ) { | 421 | } else if( CurrentState == Available ) { |
419 | Actions[NoOfActions++] = Deactivate; | 422 | Actions[NoOfActions++] = Deactivate; |
420 | } | 423 | } |
421 | Actions[NoOfActions++] = Disable; | 424 | Actions[NoOfActions++] = Disable; |
422 | break; | 425 | break; |
423 | case Enable : | 426 | case Enable : |
424 | // always possible -> detected state is new state | 427 | // always possible -> detected state is new state |
425 | Actions[NoOfActions++] = Enable; | 428 | Actions[NoOfActions++] = Enable; |
426 | break; | 429 | break; |
427 | case Activate : | 430 | case Activate : |
428 | if( ! Force ) { | 431 | if( ! Force ) { |
429 | if( CurrentState >= Available ) { | 432 | if( CurrentState >= Available ) { |
430 | // already available | 433 | // already available |
431 | return QString(); | 434 | return QString(); |
432 | } | 435 | } |
433 | 436 | ||
434 | if( CurrentState != Off ) { | 437 | if( CurrentState != Off ) { |
435 | return qApp->translate( "System", | 438 | return qApp->translate( "System", |
436 | "State should be off" ); | 439 | "State should be off" ); |
437 | } | 440 | } |
438 | } | 441 | } |
439 | 442 | ||
440 | Actions[NoOfActions++] = Activate; | 443 | Actions[NoOfActions++] = Activate; |
441 | break; | 444 | break; |
442 | case Deactivate : | 445 | case Deactivate : |
443 | if( ! Force ) { | 446 | if( ! Force ) { |
444 | if( CurrentState < Off ) { | 447 | if( CurrentState < Off ) { |
445 | // already inactive | 448 | // already inactive |
446 | return QString(); | 449 | return QString(); |
447 | } | 450 | } |
448 | } | 451 | } |
449 | 452 | ||
450 | if( CurrentState == IsUp ) { | 453 | if( CurrentState == IsUp ) { |
451 | Actions[NoOfActions++] = Down; | 454 | Actions[NoOfActions++] = Down; |
452 | } | 455 | } |
453 | Actions[NoOfActions++] = Deactivate; | 456 | Actions[NoOfActions++] = Deactivate; |
454 | break; | 457 | break; |
455 | case Up : | 458 | case Up : |
456 | if( ! Force ) { | 459 | if( ! Force ) { |
457 | if( CurrentState == IsUp ) { | 460 | if( CurrentState == IsUp ) { |
458 | return QString(); | 461 | return QString(); |
459 | } | 462 | } |
460 | if( CurrentState < Off ) { | 463 | if( CurrentState < Off ) { |
461 | return qApp->translate( "System", | 464 | return qApp->translate( "System", |
462 | "State should at least be off" ); | 465 | "State should at least be off" ); |
463 | } | 466 | } |
464 | } | 467 | } |
465 | if( CurrentState == Off ) { | 468 | if( CurrentState == Off ) { |
466 | Actions[NoOfActions++] = Activate; | 469 | Actions[NoOfActions++] = Activate; |
467 | } | 470 | } |
468 | Actions[NoOfActions++] = Up; | 471 | Actions[NoOfActions++] = Up; |
469 | break; | 472 | break; |
470 | case Down : | 473 | case Down : |
471 | if( ! Force ) { | 474 | if( ! Force ) { |
472 | if( CurrentState < Available ) { | 475 | if( CurrentState < Available ) { |
473 | // OK | 476 | // OK |
474 | return QString(); | 477 | return QString(); |
475 | } | 478 | } |
476 | } | 479 | } |
477 | Actions[NoOfActions++] = Down; | 480 | Actions[NoOfActions++] = Down; |
478 | break; | 481 | break; |
479 | } | 482 | } |
480 | 483 | ||
481 | // send actions to all nodes | 484 | // send actions to all nodes |
482 | Log(( "Action %s requires %d steps\n", | 485 | Log(( "Action %s requires %d steps\n", |
483 | ActionName[A], NoOfActions )); | 486 | ActionName[A], NoOfActions )); |
484 | 487 | ||
485 | for( int i = 0 ; i < NoOfActions; i ++ ) { | 488 | for( int i = 0 ; i < NoOfActions; i ++ ) { |
486 | // setState recurses through the tree depth first | 489 | // setState recurses through the tree depth first |
487 | msg = getToplevel()->runtime()->setState( this, Actions[i], Force ); | 490 | msg = getToplevel()->runtime()->setState( this, Actions[i], Force ); |
488 | if( ! msg.isEmpty() ) { | 491 | if( ! msg.isEmpty() ) { |
489 | return msg; | 492 | return msg; |
490 | } | 493 | } |
491 | } | 494 | } |
492 | return QString(); | 495 | return QString(); |
493 | } | 496 | } |
494 | 497 | ||
495 | void NetworkSetup::copyFrom( const NetworkSetup & N ) { | 498 | void NetworkSetup::copyFrom( const NetworkSetup & N ) { |
496 | Number = N.Number; | 499 | Number = N.Number; |
497 | CurrentState = N.CurrentState; | 500 | CurrentState = N.CurrentState; |
498 | Name = N.Name; | 501 | Name = N.Name; |
499 | IsNew = N.IsNew; | 502 | IsNew = N.IsNew; |
500 | Index = N.Index; | 503 | Index = N.Index; |
501 | AssignedInterface = N.AssignedInterface; | 504 | AssignedInterface = N.AssignedInterface; |
502 | } | 505 | } |
503 | 506 | ||
504 | // | 507 | // |
505 | // | 508 | // |
506 | // RuntimeInfo | 509 | // RuntimeInfo |
507 | // | 510 | // |
508 | // | 511 | // |
509 | 512 | ||
510 | QString RuntimeInfo::setState( NetworkSetup * NC, | 513 | QString RuntimeInfo::setState( NetworkSetup * NC, |
511 | Action_t A, | 514 | Action_t A, |
512 | bool Force ) { | 515 | bool Force ) { |
513 | QString M; | 516 | QString M; |
514 | RuntimeInfo * Deeper = nextNode(); | 517 | RuntimeInfo * Deeper = nextNode(); |
515 | 518 | ||
516 | if( Deeper ) { | 519 | if( Deeper ) { |
517 | // first go deeper | 520 | // first go deeper |
518 | M = Deeper->setState( NC, A, Force ); | 521 | M = Deeper->setState( NC, A, Force ); |
519 | if( ! M.isEmpty() ) | 522 | if( ! M.isEmpty() ) |
520 | return M; | 523 | return M; |
521 | } | 524 | } |
522 | 525 | ||
523 | // set my own state | 526 | // set my own state |
524 | Log (( "-> Act upon %s\n", netNode()->name() )); | 527 | Log (( "-> Act upon %s\n", netNode()->name() )); |
525 | M = setMyState( NC, A, Force ); | 528 | M = setMyState( NC, A, Force ); |
526 | Log (( " result %s\n", M.latin1() )); | 529 | Log (( " result %s\n", M.latin1() )); |
527 | return M; | 530 | return M; |
528 | } | 531 | } |
diff --git a/noncore/settings/networksettings2/networksettings2/netnode.h b/noncore/settings/networksettings2/networksettings2/netnode.h index 8aebdc0..fa4ab70 100644 --- a/noncore/settings/networksettings2/networksettings2/netnode.h +++ b/noncore/settings/networksettings2/networksettings2/netnode.h | |||
@@ -1,641 +1,647 @@ | |||
1 | #ifndef NETNODE_H | 1 | #ifndef NETNODE_H |
2 | #define NETNODE_H | 2 | #define NETNODE_H |
3 | 3 | ||
4 | #include <qtextstream.h> | 4 | #include <qtextstream.h> |
5 | #include <qlist.h> | 5 | #include <qlist.h> |
6 | #include <qdict.h> | 6 | #include <qdict.h> |
7 | #include <qpixmap.h> | 7 | #include <qpixmap.h> |
8 | #include <qstringlist.h> | 8 | #include <qstringlist.h> |
9 | #include <qobject.h> | 9 | #include <qobject.h> |
10 | #include <time.h> | 10 | #include <time.h> |
11 | 11 | ||
12 | #include <Utils.h> | 12 | #include <Utils.h> |
13 | #include <system.h> | 13 | #include <system.h> |
14 | 14 | ||
15 | // difference feature interfaces | 15 | // difference feature interfaces |
16 | class AsDevice; | 16 | class AsDevice; |
17 | class AsLine; | 17 | class AsLine; |
18 | class AsNetworkSetup; | 18 | class AsNetworkSetup; |
19 | class AsFullSetup; | 19 | class AsFullSetup; |
20 | 20 | ||
21 | // needed for plugin creation function | 21 | // needed for plugin creation function |
22 | #include <qlist.h> | 22 | #include <qlist.h> |
23 | 23 | ||
24 | class ANetNode; | 24 | class ANetNode; |
25 | class ANetNodeInstance; | 25 | class ANetNodeInstance; |
26 | class NetworkSetup; | 26 | class NetworkSetup; |
27 | class QTextStream; | 27 | class QTextStream; |
28 | class RuntimeInfo; | 28 | class RuntimeInfo; |
29 | class InterfaceInfo; | 29 | class InterfaceInfo; |
30 | class NSResources; | 30 | class NSResources; |
31 | 31 | ||
32 | extern QString & deQuote( QString & X ); | 32 | extern QString & deQuote( QString & X ); |
33 | extern QString quote( QString X ); | 33 | extern QString quote( QString X ); |
34 | 34 | ||
35 | #include "systemfile.h" | 35 | #include "systemfile.h" |
36 | 36 | ||
37 | typedef enum State { | 37 | typedef enum State { |
38 | // if we have not yet detected the state of the device | 38 | // if we have not yet detected the state of the device |
39 | Unchecked = 0, | 39 | Unchecked = 0, |
40 | // if we cannot determine the state | 40 | // if we cannot determine the state |
41 | Unknown = 1, | 41 | Unknown = 1, |
42 | // if networkSetup cannot be established e.g. because | 42 | // if networkSetup cannot be established e.g. because |
43 | // the hardware is not available | 43 | // the hardware is not available |
44 | Unavailable = 2, | 44 | Unavailable = 2, |
45 | // if the networkSetup cannot be establishec but NOT | 45 | // if the networkSetup cannot be establishec but NOT |
46 | // because it is physically impossible but because | 46 | // because it is physically impossible but because |
47 | // it has been disabled for FUNCTIONAL reasons | 47 | // it has been disabled for FUNCTIONAL reasons |
48 | Disabled = 3, | 48 | Disabled = 3, |
49 | // if networkSetup is available to is currently down | 49 | // if networkSetup is available to is currently down |
50 | // i.e. the corresponding hardware is not activated | 50 | // i.e. the corresponding hardware is not activated |
51 | Off = 4, | 51 | Off = 4, |
52 | // if networkSetup is available to be used (i.e. the | 52 | // if networkSetup is available to be used (i.e. the |
53 | // devices if fully ready to be used | 53 | // devices if fully ready to be used |
54 | Available = 5, | 54 | Available = 5, |
55 | // if networkSetup is being used | 55 | // if networkSetup is being used |
56 | IsUp = 6 | 56 | IsUp = 6 |
57 | } State_t; | 57 | } State_t; |
58 | 58 | ||
59 | typedef enum Action { | 59 | typedef enum Action { |
60 | // to make the device unavailable functionally -> to disabled | 60 | // to make the device unavailable functionally -> to disabled |
61 | Disable = 0, | 61 | Disable = 0, |
62 | // to make the device available functionally -> to off | 62 | // to make the device available functionally -> to off |
63 | Enable = 1, | 63 | Enable = 1, |
64 | // bring the hardware up -> to Available | 64 | // bring the hardware up -> to Available |
65 | Activate = 2, | 65 | Activate = 2, |
66 | // bring the hardware down -> to off | 66 | // bring the hardware down -> to off |
67 | Deactivate = 3, | 67 | Deactivate = 3, |
68 | // bring the networkSetup up -> to IsUp | 68 | // bring the networkSetup up -> to IsUp |
69 | Up = 4, | 69 | Up = 4, |
70 | // bring the networkSetup down -> to Available | 70 | // bring the networkSetup down -> to Available |
71 | Down = 5 | 71 | Down = 5 |
72 | } Action_t; | 72 | } Action_t; |
73 | 73 | ||
74 | class ANetNode : public QObject { | 74 | class ANetNode : public QObject { |
75 | 75 | ||
76 | public: | 76 | public: |
77 | 77 | ||
78 | typedef QArray<ANetNode *> NetNodeList; | 78 | typedef QArray<ANetNode *> NetNodeList; |
79 | 79 | ||
80 | ANetNode( const char * Name ) : QObject( 0, Name ) {} | 80 | ANetNode( const char * Name ) : QObject( 0, Name ) {} |
81 | virtual ~ANetNode(){}; | 81 | virtual ~ANetNode(){}; |
82 | 82 | ||
83 | // | 83 | // |
84 | // | 84 | // |
85 | // standard methods with sensible default | 85 | // standard methods with sensible default |
86 | // | 86 | // |
87 | // | 87 | // |
88 | 88 | ||
89 | inline int done( void ) | 89 | inline int done( void ) |
90 | { return Done; } | 90 | { return Done; } |
91 | inline void setDone( int D ) | 91 | inline void setDone( int D ) |
92 | { Done = D; } | 92 | { Done = D; } |
93 | 93 | ||
94 | // does this Node provide a NetworkSetup | 94 | // does this Node provide a NetworkSetup |
95 | bool isToplevel( void ); | 95 | bool isToplevel( void ); |
96 | 96 | ||
97 | // set the value of an attribute | 97 | // set the value of an attribute |
98 | void setAttribute( QString & Attr, QString & Value ) ; | 98 | void setAttribute( QString & Attr, QString & Value ) ; |
99 | void saveAttributes( QTextStream & TS ) ; | 99 | void saveAttributes( QTextStream & TS ) ; |
100 | 100 | ||
101 | // compiled references to 'needed' NetNodes -> needs list | 101 | // compiled references to 'needed' NetNodes -> needs list |
102 | inline void setAlternatives( NetNodeList * Alt ) | 102 | inline void setAlternatives( NetNodeList * Alt ) |
103 | { Alternatives = Alt; } | 103 | { Alternatives = Alt; } |
104 | inline NetNodeList & alternatives( void ) | 104 | inline NetNodeList & alternatives( void ) |
105 | { return *Alternatives; } | 105 | { return *Alternatives; } |
106 | 106 | ||
107 | // | 107 | // |
108 | // | 108 | // |
109 | // Virtual methods with sensible default | 109 | // Virtual methods with sensible default |
110 | // | 110 | // |
111 | // | 111 | // |
112 | 112 | ||
113 | // do instances of this noce class have data for this file | 113 | // do instances of this noce class have data for this file |
114 | virtual bool hasDataForFile( SystemFile & ) | 114 | virtual bool hasDataForFile( SystemFile & ) |
115 | { return 0; } | 115 | { return 0; } |
116 | 116 | ||
117 | // open proper file SF identified by S | 117 | // open proper file SF identified by S |
118 | // this method is called by NS2. | 118 | // this method is called by NS2. |
119 | // | 119 | // |
120 | // overrule this ONLY if this proper file is a common file | 120 | // overrule this ONLY if this proper file is a common file |
121 | // for all NNI of this node class and the data generated | 121 | // for all NNI of this node class and the data generated |
122 | // by each of the NNI needs to be put in one file | 122 | // by each of the NNI needs to be put in one file |
123 | // | 123 | // |
124 | // the function can return a set of folders that should | ||
125 | // be created (or perhaps already exist) prior to opening | ||
126 | // the file | ||
127 | // | ||
124 | // if this is the case the file should be (re)opened in append | 128 | // if this is the case the file should be (re)opened in append |
125 | // return 0 if file cannot be opened | 129 | // return 0 if file cannot be opened |
126 | virtual bool openFile( SystemFile &SF, | 130 | virtual bool openFile( SystemFile &SF, |
127 | ANetNodeInstance * NNI ); | 131 | ANetNodeInstance * NNI, |
132 | QStringList & PathToCreate ); | ||
128 | 133 | ||
129 | // generate instance independent stuff | 134 | // generate instance independent stuff |
130 | // 0 : data output, 1 no data, 2 error | 135 | // 0 : data output, 1 no data, 2 error |
131 | virtual short generatePreamble( SystemFile & ) | 136 | virtual short generatePreamble( SystemFile & ) |
132 | { return 1; } | 137 | { return 1; } |
133 | 138 | ||
134 | // generate instance independent stuff | 139 | // generate instance independent stuff |
135 | // 0 : data output, 1 no data, 2 error | 140 | // 0 : data output, 1 no data, 2 error |
136 | virtual short generatePostamble( SystemFile & ) | 141 | virtual short generatePostamble( SystemFile & ) |
137 | { return 1; } | 142 | { return 1; } |
138 | 143 | ||
139 | // generate instance dependent but instance common stuff | 144 | // generate instance dependent but instance common stuff |
140 | // 0 : data output, 1 no data, 2 error | 145 | // 0 : data output, 1 no data, 2 error |
141 | virtual short generateFile( SystemFile &, | 146 | virtual short generateFile( SystemFile &, |
142 | ANetNodeInstance * , | 147 | ANetNodeInstance * , |
143 | long ) | 148 | long ) |
144 | { return 1; } | 149 | { return 1; } |
145 | 150 | ||
146 | // generate NIC name based on instance nr | 151 | // generate NIC name based on instance nr |
147 | // only relevant if node instances are devices | 152 | // only relevant if node instances are devices |
148 | virtual QString genNic( long ) | 153 | virtual QString genNic( long ) |
149 | { return QString(""); } | 154 | { return QString(""); } |
150 | 155 | ||
151 | // max number of instances for this node type | 156 | // max number of instances for this node type |
152 | // only relevant if node instances are devices | 157 | // only relevant if node instances are devices |
153 | virtual long instanceCount( void ) | 158 | virtual long instanceCount( void ) |
154 | { return 1; } | 159 | { return 1; } |
155 | 160 | ||
156 | // return ID list for each file generated specially for | 161 | // return ID list for each file generated specially for |
157 | // this node type | 162 | // this node type |
158 | virtual QStringList properFiles( void ) | 163 | virtual QStringList properFiles( void ) |
159 | { return QStringList(); } | 164 | { return QStringList(); } |
160 | 165 | ||
161 | // | 166 | // |
162 | // | 167 | // |
163 | // pure virtual methods with sensible default | 168 | // pure virtual methods with sensible default |
164 | // | 169 | // |
165 | // | 170 | // |
166 | 171 | ||
167 | // pixmap needed for this NetNode | 172 | // pixmap needed for this NetNode |
168 | virtual const QString pixmapName() = 0; | 173 | virtual const QString pixmapName() = 0; |
169 | 174 | ||
170 | // description for this NetNode | 175 | // description for this NetNode |
171 | virtual const QString nodeDescription() = 0; | 176 | virtual const QString nodeDescription() = 0; |
172 | 177 | ||
173 | // create a blank instance of a net node | 178 | // create a blank instance of a net node |
174 | virtual ANetNodeInstance * createInstance( void ) = 0; | 179 | virtual ANetNodeInstance * createInstance( void ) = 0; |
175 | 180 | ||
176 | // return features this NetNode provides | 181 | // return features this NetNode provides |
177 | virtual const char ** provides( void ) = 0; | 182 | virtual const char ** provides( void ) = 0; |
178 | 183 | ||
179 | // return features this NetNode needs | 184 | // return features this NetNode needs |
180 | virtual const char ** needs( void ) = 0; | 185 | virtual const char ** needs( void ) = 0; |
181 | 186 | ||
182 | protected : | 187 | protected : |
183 | 188 | ||
184 | NetNodeList * Alternatives; | 189 | NetNodeList * Alternatives; |
185 | 190 | ||
186 | private : | 191 | private : |
187 | 192 | ||
188 | virtual void setSpecificAttribute( QString & , QString & ) = 0; | 193 | virtual void setSpecificAttribute( QString & , QString & ) = 0; |
189 | virtual void saveSpecificAttribute( QTextStream & ) = 0; | 194 | virtual void saveSpecificAttribute( QTextStream & ) = 0; |
190 | int Done; | 195 | int Done; |
191 | 196 | ||
192 | }; | 197 | }; |
193 | 198 | ||
194 | class ANetNodeInstance : public QObject { | 199 | class ANetNodeInstance : public QObject { |
195 | 200 | ||
196 | public: | 201 | public: |
197 | 202 | ||
198 | ANetNodeInstance( ANetNode * NN ) : QObject() | 203 | ANetNodeInstance( ANetNode * NN ) : QObject() |
199 | { IsModified=0; NodeType = NN; IsNew = TRUE; } | 204 | { IsModified=0; NodeType = NN; IsNew = TRUE; } |
200 | virtual ~ANetNodeInstance( void ) { } | 205 | virtual ~ANetNodeInstance( void ) { } |
201 | 206 | ||
202 | inline int done( void ) | 207 | inline int done( void ) |
203 | { return Done; } | 208 | { return Done; } |
204 | inline void setDone( int D ) | 209 | inline void setDone( int D ) |
205 | { Done = D; } | 210 | { Done = D; } |
206 | 211 | ||
207 | // return data was modified | 212 | // return data was modified |
208 | inline void setModified( bool M ) | 213 | inline void setModified( bool M ) |
209 | { IsModified = M; } | 214 | { IsModified = M; } |
210 | inline bool isModified( void ) | 215 | inline bool isModified( void ) |
211 | { return IsModified; } | 216 | { return IsModified; } |
212 | 217 | ||
213 | // get next node | 218 | // get next node |
214 | ANetNodeInstance * nextNode(); | 219 | ANetNodeInstance * nextNode(); |
215 | // return NetNode this is an instance of | 220 | // return NetNode this is an instance of |
216 | ANetNode * nodeClass( void ) | 221 | ANetNode * nodeClass( void ) |
217 | { return NodeType; } | 222 | { return NodeType; } |
218 | 223 | ||
219 | // intialize am instance of a net node | 224 | // intialize am instance of a net node |
220 | void initialize( void ); | 225 | void initialize( void ); |
221 | 226 | ||
222 | // set the value of an attribute | 227 | // set the value of an attribute |
223 | void setAttribute( QString & Attr, QString & Value ) ; | 228 | void setAttribute( QString & Attr, QString & Value ) ; |
224 | void saveAttributes( QTextStream & TS ) ; | 229 | void saveAttributes( QTextStream & TS ) ; |
225 | 230 | ||
226 | // return true if node isntance is NEW and not loaded | 231 | // return true if node isntance is NEW and not loaded |
227 | inline void setNew( bool IsN ) | 232 | inline void setNew( bool IsN ) |
228 | { IsNew = IsN; } | 233 | { IsNew = IsN; } |
229 | inline bool isNew( void ) | 234 | inline bool isNew( void ) |
230 | { return IsNew; } | 235 | { return IsNew; } |
231 | 236 | ||
232 | // return description for this instance | 237 | // return description for this instance |
233 | inline QString & description( void ) | 238 | inline QString & description( void ) |
234 | { return Description; } | 239 | { return Description; } |
235 | inline void setDescription( const QString & S ) | 240 | inline void setDescription( const QString & S ) |
236 | { Description = S; } | 241 | { Description = S; } |
237 | 242 | ||
238 | // pixmap for this instance -> from NetNode | 243 | // pixmap for this instance -> from NetNode |
239 | inline const QString pixmapName( void ) | 244 | inline const QString pixmapName( void ) |
240 | { return NodeType->pixmapName(); } | 245 | { return NodeType->pixmapName(); } |
241 | 246 | ||
242 | inline const char ** provides( void ) | 247 | inline const char ** provides( void ) |
243 | { return NodeType->provides(); } | 248 | { return NodeType->provides(); } |
244 | 249 | ||
245 | inline const char ** needs( void ) | 250 | inline const char ** needs( void ) |
246 | { return NodeType->needs(); } | 251 | { return NodeType->needs(); } |
247 | 252 | ||
248 | inline void setNetworkSetup( NetworkSetup * NC ) | 253 | inline void setNetworkSetup( NetworkSetup * NC ) |
249 | { TheNetworkSetup = NC; } | 254 | { TheNetworkSetup = NC; } |
250 | inline NetworkSetup * networkSetup( void ) | 255 | inline NetworkSetup * networkSetup( void ) |
251 | { return TheNetworkSetup; } | 256 | { return TheNetworkSetup; } |
252 | 257 | ||
253 | // | 258 | // |
254 | // | 259 | // |
255 | // Virtual methods with sensible defaults | 260 | // Virtual methods with sensible defaults |
256 | // | 261 | // |
257 | // | 262 | // |
258 | 263 | ||
259 | 264 | ||
260 | 265 | ||
261 | // open proper file identified by S | 266 | // open proper file identified by S |
262 | virtual bool openFile( SystemFile & ) | 267 | virtual bool openFile( SystemFile &, |
268 | QStringList & ) | ||
263 | { return 0; } | 269 | { return 0; } |
264 | 270 | ||
265 | // check if this node (or sub nodes) have data for this file | 271 | // check if this node (or sub nodes) have data for this file |
266 | virtual bool hasDataForFile( SystemFile & S ) | 272 | virtual bool hasDataForFile( SystemFile & S ) |
267 | { return nodeClass()->hasDataForFile( S ); } | 273 | { return nodeClass()->hasDataForFile( S ); } |
268 | 274 | ||
269 | // generate code specific for this node but embedded | 275 | // generate code specific for this node but embedded |
270 | // in the section of the parent | 276 | // in the section of the parent |
271 | // this is called within the code of the parent | 277 | // this is called within the code of the parent |
272 | virtual short generateFileEmbedded( SystemFile & SF, | 278 | virtual short generateFileEmbedded( SystemFile & SF, |
273 | long DevNr ) | 279 | long DevNr ) |
274 | { ANetNodeInstance * NNI = nextNode(); | 280 | { ANetNodeInstance * NNI = nextNode(); |
275 | return (NNI) ? NNI->generateFileEmbedded( SF, DevNr ) : 1; | 281 | return (NNI) ? NNI->generateFileEmbedded( SF, DevNr ) : 1; |
276 | } | 282 | } |
277 | 283 | ||
278 | // generate code specific for this node | 284 | // generate code specific for this node |
279 | // (or find the first node that does) | 285 | // (or find the first node that does) |
280 | virtual short generateFile( SystemFile & SF, | 286 | virtual short generateFile( SystemFile & SF, |
281 | long DevNr ) | 287 | long DevNr ) |
282 | { ANetNodeInstance * NNI = nextNode(); | 288 | { ANetNodeInstance * NNI = nextNode(); |
283 | return (NNI) ? NNI->generateFile( SF, DevNr ) : 1; | 289 | return (NNI) ? NNI->generateFile( SF, DevNr ) : 1; |
284 | } | 290 | } |
285 | 291 | ||
286 | // return true if this node instance is triggered by this trigger | 292 | // return true if this node instance is triggered by this trigger |
287 | // could be delegated to deeper instances | 293 | // could be delegated to deeper instances |
288 | virtual bool triggeredBy( const QString & ) | 294 | virtual bool triggeredBy( const QString & ) |
289 | { return 0; } | 295 | { return 0; } |
290 | 296 | ||
291 | // | 297 | // |
292 | // | 298 | // |
293 | // Pure virtual functions | 299 | // Pure virtual functions |
294 | // | 300 | // |
295 | // | 301 | // |
296 | 302 | ||
297 | // return runtime information for this node | 303 | // return runtime information for this node |
298 | virtual RuntimeInfo * runtime( void ) = 0; | 304 | virtual RuntimeInfo * runtime( void ) = 0; |
299 | 305 | ||
300 | // create edit widget under parent | 306 | // create edit widget under parent |
301 | virtual QWidget * edit( QWidget * parent ) = 0; | 307 | virtual QWidget * edit( QWidget * parent ) = 0; |
302 | 308 | ||
303 | // is given data acceptable | 309 | // is given data acceptable |
304 | virtual QString acceptable( void ) = 0; | 310 | virtual QString acceptable( void ) = 0; |
305 | 311 | ||
306 | // get data from GUI and store in node | 312 | // get data from GUI and store in node |
307 | virtual void commit( void ) = 0; | 313 | virtual void commit( void ) = 0; |
308 | 314 | ||
309 | // returns node specific data -> only useful for 'buddy' | 315 | // returns node specific data -> only useful for 'buddy' |
310 | virtual void * data( void ) = 0; | 316 | virtual void * data( void ) = 0; |
311 | 317 | ||
312 | protected : | 318 | protected : |
313 | 319 | ||
314 | virtual void setSpecificAttribute( QString & , QString & ) = 0; | 320 | virtual void setSpecificAttribute( QString & , QString & ) = 0; |
315 | virtual void saveSpecificAttribute( QTextStream & ) = 0; | 321 | virtual void saveSpecificAttribute( QTextStream & ) = 0; |
316 | 322 | ||
317 | ANetNode * NodeType; | 323 | ANetNode * NodeType; |
318 | // networkSetup to which this node belongs to | 324 | // networkSetup to which this node belongs to |
319 | NetworkSetup * TheNetworkSetup; | 325 | NetworkSetup * TheNetworkSetup; |
320 | QString Description; | 326 | QString Description; |
321 | bool IsModified; | 327 | bool IsModified; |
322 | // true if this nodeinstance was just created (and not | 328 | // true if this nodeinstance was just created (and not |
323 | // loaded from file | 329 | // loaded from file |
324 | bool IsNew; | 330 | bool IsNew; |
325 | int Done; | 331 | int Done; |
326 | 332 | ||
327 | static long InstanceCounter; | 333 | static long InstanceCounter; |
328 | }; | 334 | }; |
329 | 335 | ||
330 | class ErrorNNI: public ANetNodeInstance { | 336 | class ErrorNNI: public ANetNodeInstance { |
331 | 337 | ||
332 | public: | 338 | public: |
333 | 339 | ||
334 | ErrorNNI( const QString & _Name ) : ANetNodeInstance( 0 ) { | 340 | ErrorNNI( const QString & _Name ) : ANetNodeInstance( 0 ) { |
335 | setName( _Name.latin1() ); | 341 | setName( _Name.latin1() ); |
336 | } | 342 | } |
337 | 343 | ||
338 | RuntimeInfo * runtime( void ) { | 344 | RuntimeInfo * runtime( void ) { |
339 | return 0; | 345 | return 0; |
340 | } | 346 | } |
341 | 347 | ||
342 | // create edit widget under parent | 348 | // create edit widget under parent |
343 | QWidget * edit( QWidget * parent ) { | 349 | QWidget * edit( QWidget * parent ) { |
344 | return 0; | 350 | return 0; |
345 | } | 351 | } |
346 | 352 | ||
347 | // is given data acceptable | 353 | // is given data acceptable |
348 | QString acceptable( void ) { | 354 | QString acceptable( void ) { |
349 | return QString(); | 355 | return QString(); |
350 | } | 356 | } |
351 | 357 | ||
352 | // get data from GUI and store in node | 358 | // get data from GUI and store in node |
353 | void commit( void ) { | 359 | void commit( void ) { |
354 | } | 360 | } |
355 | 361 | ||
356 | // returns node specific data -> only useful for 'buddy' | 362 | // returns node specific data -> only useful for 'buddy' |
357 | void * data( void ) { | 363 | void * data( void ) { |
358 | return 0; | 364 | return 0; |
359 | } | 365 | } |
360 | 366 | ||
361 | protected : | 367 | protected : |
362 | 368 | ||
363 | void setSpecificAttribute( QString & , QString & ) { | 369 | void setSpecificAttribute( QString & , QString & ) { |
364 | } | 370 | } |
365 | 371 | ||
366 | void saveSpecificAttribute( QTextStream & ) { | 372 | void saveSpecificAttribute( QTextStream & ) { |
367 | } | 373 | } |
368 | }; | 374 | }; |
369 | 375 | ||
370 | class RuntimeInfo : public QObject { | 376 | class RuntimeInfo : public QObject { |
371 | 377 | ||
372 | Q_OBJECT | 378 | Q_OBJECT |
373 | 379 | ||
374 | public : | 380 | public : |
375 | 381 | ||
376 | RuntimeInfo( ANetNodeInstance * TheNNI ) | 382 | RuntimeInfo( ANetNodeInstance * TheNNI ) |
377 | { NNI = TheNNI; } | 383 | { NNI = TheNNI; } |
378 | 384 | ||
379 | // | 385 | // |
380 | // | 386 | // |
381 | // methods to be overloaded by networkSetup capable | 387 | // methods to be overloaded by networkSetup capable |
382 | // runtimes | 388 | // runtimes |
383 | // | 389 | // |
384 | // | 390 | // |
385 | 391 | ||
386 | 392 | ||
387 | // | 393 | // |
388 | // | 394 | // |
389 | // methods to be overloaded by device capable | 395 | // methods to be overloaded by device capable |
390 | // runtimes | 396 | // runtimes |
391 | // | 397 | // |
392 | // | 398 | // |
393 | 399 | ||
394 | // does this node handles this interface e.g.eth0 | 400 | // does this node handles this interface e.g.eth0 |
395 | // recurse deeper if this node cannot answer that question | 401 | // recurse deeper if this node cannot answer that question |
396 | virtual bool handlesInterface( const QString & S ) { | 402 | virtual bool handlesInterface( const QString & S ) { |
397 | RuntimeInfo * RI = device(); | 403 | RuntimeInfo * RI = device(); |
398 | if( RI ) { | 404 | if( RI ) { |
399 | return RI->handlesInterface( S ); | 405 | return RI->handlesInterface( S ); |
400 | } | 406 | } |
401 | return 0; | 407 | return 0; |
402 | } | 408 | } |
403 | bool handlesInterface( const InterfaceInfo & I ) { | 409 | bool handlesInterface( const InterfaceInfo & I ) { |
404 | RuntimeInfo * RI = device(); | 410 | RuntimeInfo * RI = device(); |
405 | if( RI ) { | 411 | if( RI ) { |
406 | return RI->handlesInterface( I ); | 412 | return RI->handlesInterface( I ); |
407 | } | 413 | } |
408 | return 0; | 414 | return 0; |
409 | } | 415 | } |
410 | 416 | ||
411 | // | 417 | // |
412 | // | 418 | // |
413 | // methods to be overloaded by full setup capable | 419 | // methods to be overloaded by full setup capable |
414 | // runtimes | 420 | // runtimes |
415 | // | 421 | // |
416 | // | 422 | // |
417 | 423 | ||
418 | // return description for this full setup | 424 | // return description for this full setup |
419 | virtual const QString & description( void ) { | 425 | virtual const QString & description( void ) { |
420 | return fullSetup()->description( ); | 426 | return fullSetup()->description( ); |
421 | } | 427 | } |
422 | // return triggers that should fire when this | 428 | // return triggers that should fire when this |
423 | // setup is brought up | 429 | // setup is brought up |
424 | virtual const QStringList & triggers( void ) { | 430 | virtual const QStringList & triggers( void ) { |
425 | return fullSetup()->triggers( ); | 431 | return fullSetup()->triggers( ); |
426 | } | 432 | } |
427 | 433 | ||
428 | // | 434 | // |
429 | // | 435 | // |
430 | // methods to be overloaded by line capable | 436 | // methods to be overloaded by line capable |
431 | // runtimes | 437 | // runtimes |
432 | // | 438 | // |
433 | // | 439 | // |
434 | 440 | ||
435 | // return the device file ('/dev/xxx') created | 441 | // return the device file ('/dev/xxx') created |
436 | // by this line capable runtime | 442 | // by this line capable runtime |
437 | virtual QString deviceFile( void ) { | 443 | virtual QString deviceFile( void ) { |
438 | RuntimeInfo * RI = line(); | 444 | RuntimeInfo * RI = line(); |
439 | if( RI ) { | 445 | if( RI ) { |
440 | return RI->deviceFile(); | 446 | return RI->deviceFile(); |
441 | } | 447 | } |
442 | return QString(); | 448 | return QString(); |
443 | } | 449 | } |
444 | 450 | ||
445 | // | 451 | // |
446 | // | 452 | // |
447 | // runtime interface | 453 | // runtime interface |
448 | // | 454 | // |
449 | // | 455 | // |
450 | 456 | ||
451 | // return the node that offers device capability | 457 | // return the node that offers device capability |
452 | virtual RuntimeInfo * device( void ) | 458 | virtual RuntimeInfo * device( void ) |
453 | { RuntimeInfo * RI = nextNode(); | 459 | { RuntimeInfo * RI = nextNode(); |
454 | return (RI) ? RI->device() : 0; | 460 | return (RI) ? RI->device() : 0; |
455 | } | 461 | } |
456 | 462 | ||
457 | // return the node that offers connection capability | 463 | // return the node that offers connection capability |
458 | virtual RuntimeInfo * connection( void ) | 464 | virtual RuntimeInfo * connection( void ) |
459 | { RuntimeInfo * RI = nextNode(); | 465 | { RuntimeInfo * RI = nextNode(); |
460 | return (RI) ? RI->connection() : 0; | 466 | return (RI) ? RI->connection() : 0; |
461 | } | 467 | } |
462 | 468 | ||
463 | // return the node that offers line capability | 469 | // return the node that offers line capability |
464 | virtual RuntimeInfo * line( void ) | 470 | virtual RuntimeInfo * line( void ) |
465 | { RuntimeInfo * RI = nextNode(); | 471 | { RuntimeInfo * RI = nextNode(); |
466 | return (RI) ? RI->line() : 0; | 472 | return (RI) ? RI->line() : 0; |
467 | } | 473 | } |
468 | 474 | ||
469 | // return the node that offers full setup capability | 475 | // return the node that offers full setup capability |
470 | virtual RuntimeInfo * fullSetup( void ) | 476 | virtual RuntimeInfo * fullSetup( void ) |
471 | { RuntimeInfo * RI = nextNode(); | 477 | { RuntimeInfo * RI = nextNode(); |
472 | return (RI) ? RI->fullSetup() : 0; | 478 | return (RI) ? RI->fullSetup() : 0; |
473 | } | 479 | } |
474 | 480 | ||
475 | inline ANetNodeInstance * netNode() | 481 | inline ANetNodeInstance * netNode() |
476 | { return NNI; } | 482 | { return NNI; } |
477 | 483 | ||
478 | inline NetworkSetup * networkSetup() | 484 | inline NetworkSetup * networkSetup() |
479 | { return NNI->networkSetup(); } | 485 | { return NNI->networkSetup(); } |
480 | 486 | ||
481 | virtual State_t detectState( void ) = 0; | 487 | virtual State_t detectState( void ) = 0; |
482 | // public API to set the state | 488 | // public API to set the state |
483 | virtual QString setState( NetworkSetup * NC, | 489 | virtual QString setState( NetworkSetup * NC, |
484 | Action_t A, | 490 | Action_t A, |
485 | bool Force = 0 ); | 491 | bool Force = 0 ); |
486 | 492 | ||
487 | inline RuntimeInfo * nextNode( void ) { | 493 | inline RuntimeInfo * nextNode( void ) { |
488 | ANetNodeInstance * NNI = netNode()->nextNode(); | 494 | ANetNodeInstance * NNI = netNode()->nextNode(); |
489 | return (NNI) ? NNI->runtime() : 0; | 495 | return (NNI) ? NNI->runtime() : 0; |
490 | } | 496 | } |
491 | 497 | ||
492 | signals : | 498 | signals : |
493 | 499 | ||
494 | // sent by device if state changes | 500 | // sent by device if state changes |
495 | void stateChanged( State_t S, ANetNodeInstance * NNI ); | 501 | void stateChanged( State_t S, ANetNodeInstance * NNI ); |
496 | 502 | ||
497 | protected : | 503 | protected : |
498 | 504 | ||
499 | // set state of this node (private API) | 505 | // set state of this node (private API) |
500 | virtual QString setMyState( NetworkSetup * NC, | 506 | virtual QString setMyState( NetworkSetup * NC, |
501 | Action_t A, | 507 | Action_t A, |
502 | bool Force = 0 ) = 0; | 508 | bool Force = 0 ) = 0; |
503 | 509 | ||
504 | // networkSetup this runtime info belongs to | 510 | // networkSetup this runtime info belongs to |
505 | ANetNodeInstance * NNI; | 511 | ANetNodeInstance * NNI; |
506 | }; | 512 | }; |
507 | 513 | ||
508 | class NetworkSetup : public QList<ANetNodeInstance> { | 514 | class NetworkSetup : public QList<ANetNodeInstance> { |
509 | 515 | ||
510 | public : | 516 | public : |
511 | 517 | ||
512 | NetworkSetup( void ); | 518 | NetworkSetup( void ); |
513 | NetworkSetup( QTextStream & TS, bool & Dangling ); | 519 | NetworkSetup( QTextStream & TS, bool & Dangling ); |
514 | ~NetworkSetup( void ); | 520 | ~NetworkSetup( void ); |
515 | 521 | ||
516 | // copy settings from NC to this | 522 | // copy settings from NC to this |
517 | void copyFrom( const NetworkSetup & NC ); | 523 | void copyFrom( const NetworkSetup & NC ); |
518 | 524 | ||
519 | inline int done( void ) | 525 | inline int done( void ) |
520 | { return Done; } | 526 | { return Done; } |
521 | inline void setDone( int D ) | 527 | inline void setDone( int D ) |
522 | { Done = D; } | 528 | { Done = D; } |
523 | 529 | ||
524 | inline int number( void ) | 530 | inline int number( void ) |
525 | { return Number; } | 531 | { return Number; } |
526 | inline void setNumber( int i ) | 532 | inline void setNumber( int i ) |
527 | { Number = i; } | 533 | { Number = i; } |
528 | inline bool isNew( void ) | 534 | inline bool isNew( void ) |
529 | { return IsNew; } | 535 | { return IsNew; } |
530 | inline void setNew( bool N ) | 536 | inline void setNew( bool N ) |
531 | { IsNew = N ; } | 537 | { IsNew = N ; } |
532 | inline bool isModified( void ) | 538 | inline bool isModified( void ) |
533 | { return IsModified; } | 539 | { return IsModified; } |
534 | inline void setModified( bool N ) | 540 | inline void setModified( bool N ) |
535 | { IsModified = N ; } | 541 | { IsModified = N ; } |
536 | 542 | ||
537 | inline bool handlesInterface( const QString & S ) { | 543 | inline bool handlesInterface( const QString & S ) { |
538 | return getToplevel()->runtime()->handlesInterface( S ); | 544 | return getToplevel()->runtime()->handlesInterface( S ); |
539 | } | 545 | } |
540 | 546 | ||
541 | // return the interface in the OS that is assigned to | 547 | // return the interface in the OS that is assigned to |
542 | // this device | 548 | // this device |
543 | inline InterfaceInfo * assignedInterface( void ) { | 549 | inline InterfaceInfo * assignedInterface( void ) { |
544 | return AssignedInterface; | 550 | return AssignedInterface; |
545 | } | 551 | } |
546 | 552 | ||
547 | // assign the interface to this device | 553 | // assign the interface to this device |
548 | inline void assignInterface( InterfaceInfo * NI ) { | 554 | inline void assignInterface( InterfaceInfo * NI ) { |
549 | // cleanup previous | 555 | // cleanup previous |
550 | if( AssignedInterface ) { | 556 | if( AssignedInterface ) { |
551 | AssignedInterface->assignToNetworkSetup( 0 ); | 557 | AssignedInterface->assignToNetworkSetup( 0 ); |
552 | } | 558 | } |
553 | if( NI ) { | 559 | if( NI ) { |
554 | // assign new | 560 | // assign new |
555 | NI->assignToNetworkSetup( this ); | 561 | NI->assignToNetworkSetup( this ); |
556 | } | 562 | } |
557 | AssignedInterface = NI; | 563 | AssignedInterface = NI; |
558 | } | 564 | } |
559 | 565 | ||
560 | inline RuntimeInfo * device() { | 566 | inline RuntimeInfo * device() { |
561 | return getToplevel()->runtime()->device(); | 567 | return getToplevel()->runtime()->device(); |
562 | } | 568 | } |
563 | 569 | ||
564 | const QStringList & triggers(); | 570 | const QStringList & triggers(); |
565 | 571 | ||
566 | State_t state( bool Update = 0 ); | 572 | State_t state( bool Update = 0 ); |
567 | 573 | ||
568 | // get the ixmap for this device | 574 | // get the ixmap for this device |
569 | QPixmap devicePixmap( void ); | 575 | QPixmap devicePixmap( void ); |
570 | QPixmap statePixmap( State_t S ); | 576 | QPixmap statePixmap( State_t S ); |
571 | inline QPixmap statePixmap( bool Update = 0 ) | 577 | inline QPixmap statePixmap( bool Update = 0 ) |
572 | { return statePixmap( state(Update) ); } | 578 | { return statePixmap( state(Update) ); } |
573 | QString stateName( State_t ); | 579 | QString stateName( State_t ); |
574 | inline QString stateName( bool Update = 0 ) | 580 | inline QString stateName( bool Update = 0 ) |
575 | { return stateName( state(Update) ); } | 581 | { return stateName( state(Update) ); } |
576 | 582 | ||
577 | QString setState( Action_t A, bool Force = 0 ); | 583 | QString setState( Action_t A, bool Force = 0 ); |
578 | 584 | ||
579 | void save( QTextStream & TS ); | 585 | void save( QTextStream & TS ); |
580 | 586 | ||
581 | void append( ANetNodeInstance * NNI ); | 587 | void append( ANetNodeInstance * NNI ); |
582 | 588 | ||
583 | // makes sure that all items in the networkSetup point to | 589 | // makes sure that all items in the networkSetup point to |
584 | // that connectoin | 590 | // that connectoin |
585 | void reassign( void ); | 591 | void reassign( void ); |
586 | 592 | ||
587 | ANetNodeInstance * getToplevel( void ); | 593 | ANetNodeInstance * getToplevel( void ); |
588 | ANetNodeInstance * findNext( ANetNodeInstance * NNI ); | 594 | ANetNodeInstance * findNext( ANetNodeInstance * NNI ); |
589 | ANetNodeInstance * findByName( const QString & S ); | 595 | ANetNodeInstance * findByName( const QString & S ); |
590 | 596 | ||
591 | inline const QString & name() | 597 | inline const QString & name() |
592 | { return Name; } | 598 | { return Name; } |
593 | 599 | ||
594 | const QString & description( void ); | 600 | const QString & description( void ); |
595 | 601 | ||
596 | inline void setName( const QString & N) | 602 | inline void setName( const QString & N) |
597 | { Name = N; } | 603 | { Name = N; } |
598 | 604 | ||
599 | inline State_t currentState( void ) | 605 | inline State_t currentState( void ) |
600 | { return CurrentState; } | 606 | { return CurrentState; } |
601 | inline void setCurrentState( State_t S ) | 607 | inline void setCurrentState( State_t S ) |
602 | { CurrentState = S; } | 608 | { CurrentState = S; } |
603 | 609 | ||
604 | // return TRUE if this node can have data to be inserted in | 610 | // return TRUE if this node can have data to be inserted in |
605 | // file identified by S | 611 | // file identified by S |
606 | bool hasDataForFile( SystemFile & S ); | 612 | bool hasDataForFile( SystemFile & S ); |
607 | ANetNodeInstance * firstWithDataForFile( SystemFile & ); | 613 | ANetNodeInstance * firstWithDataForFile( SystemFile & ); |
608 | 614 | ||
609 | // generate items for this file -> toplevel call | 615 | // generate items for this file -> toplevel call |
610 | short generateFile( SystemFile & SF, | 616 | short generateFile( SystemFile & SF, |
611 | long DN // device number | 617 | long DN // device number |
612 | ) | 618 | ) |
613 | { return getToplevel()->generateFile( SF, DN ); } | 619 | { return getToplevel()->generateFile( SF, DN ); } |
614 | 620 | ||
615 | bool triggeredBy( const QString & Trigger ) | 621 | bool triggeredBy( const QString & Trigger ) |
616 | { return getToplevel()->triggeredBy( Trigger ); } | 622 | { return getToplevel()->triggeredBy( Trigger ); } |
617 | 623 | ||
618 | private : | 624 | private : |
619 | 625 | ||
620 | int compareItems ( QCollection::Item item1, | 626 | int compareItems ( QCollection::Item item1, |
621 | QCollection::Item item2 ); | 627 | QCollection::Item item2 ); |
622 | 628 | ||
623 | long Number; | 629 | long Number; |
624 | 630 | ||
625 | // state of this networkSetup | 631 | // state of this networkSetup |
626 | State_t CurrentState; | 632 | State_t CurrentState; |
627 | 633 | ||
628 | QString Name; | 634 | QString Name; |
629 | // true if this collection was just created (and not | 635 | // true if this collection was just created (and not |
630 | // loaded from file | 636 | // loaded from file |
631 | bool IsNew; | 637 | bool IsNew; |
632 | // index in listbox | 638 | // index in listbox |
633 | int Index; | 639 | int Index; |
634 | bool IsModified; | 640 | bool IsModified; |
635 | int Done; | 641 | int Done; |
636 | 642 | ||
637 | InterfaceInfo * AssignedInterface; | 643 | InterfaceInfo * AssignedInterface; |
638 | 644 | ||
639 | }; | 645 | }; |
640 | 646 | ||
641 | #endif | 647 | #endif |
diff --git a/noncore/settings/networksettings2/nsdata.cpp b/noncore/settings/networksettings2/nsdata.cpp index 835c7c3..6b87399 100644 --- a/noncore/settings/networksettings2/nsdata.cpp +++ b/noncore/settings/networksettings2/nsdata.cpp | |||
@@ -1,787 +1,832 @@ | |||
1 | #include <stdlib.h> | 1 | #include <stdlib.h> |
2 | #include <opie2/odebug.h> | 2 | #include <opie2/odebug.h> |
3 | #include <qpe/qpeapplication.h> | 3 | #include <qpe/qpeapplication.h> |
4 | #include <qtextstream.h> | 4 | #include <qtextstream.h> |
5 | #include <qdir.h> | 5 | #include <qdir.h> |
6 | #include <qfile.h> | 6 | #include <qfile.h> |
7 | #include <qfileinfo.h> | 7 | #include <qfileinfo.h> |
8 | 8 | ||
9 | #include "nsdata.h" | 9 | #include "nsdata.h" |
10 | #include <netnode.h> | 10 | #include <netnode.h> |
11 | #include <resources.h> | 11 | #include <resources.h> |
12 | 12 | ||
13 | static QString CfgFile; | 13 | static QString CfgFile; |
14 | 14 | ||
15 | NetworkSettingsData::NetworkSettingsData( void ) { | 15 | NetworkSettingsData::NetworkSettingsData( void ) { |
16 | // init global resources structure | 16 | // init global resources structure |
17 | new TheNSResources(); | 17 | new TheNSResources(); |
18 | 18 | ||
19 | if( ! NSResources->userKnown() ) { | 19 | if( ! NSResources->userKnown() ) { |
20 | Log(( "Cannot detect qpe user HOME=\"%s\" USER=\"%s\"\n", | 20 | Log(( "Cannot detect qpe user HOME=\"%s\" USER=\"%s\"\n", |
21 | NSResources->currentUser().HomeDir.latin1(), | 21 | NSResources->currentUser().HomeDir.latin1(), |
22 | NSResources->currentUser().UserName.latin1() )); | 22 | NSResources->currentUser().UserName.latin1() )); |
23 | return; | 23 | return; |
24 | } | 24 | } |
25 | 25 | ||
26 | CfgFile.sprintf( "%s/Settings/NS2.conf", | 26 | CfgFile.sprintf( "%s/Settings/NS2.conf", |
27 | NSResources->currentUser().HomeDir.latin1() ); | 27 | NSResources->currentUser().HomeDir.latin1() ); |
28 | Log(( "Cfg from %s\n", CfgFile.latin1() )); | 28 | Log(( "Cfg from %s\n", CfgFile.latin1() )); |
29 | 29 | ||
30 | // load settings | 30 | // load settings |
31 | loadSettings(); | 31 | loadSettings(); |
32 | 32 | ||
33 | // assign interfaces by scanning /tmp/profile-%s.Up files | 33 | // assign interfaces by scanning /tmp/profile-%s.Up files |
34 | { QDir D( "/tmp" ); | 34 | { QDir D( "/tmp" ); |
35 | QFile * F = new QFile; | 35 | QFile * F = new QFile; |
36 | int profilenr; | 36 | int profilenr; |
37 | QString interfacename; | 37 | QString interfacename; |
38 | QTextStream TS ( F ); | 38 | QTextStream TS ( F ); |
39 | 39 | ||
40 | QStringList SL = D.entryList( "profile-*.up"); | 40 | QStringList SL = D.entryList( "profile-*.up"); |
41 | 41 | ||
42 | Log(( "System reports %d interfaces. Found %d up\n", | 42 | Log(( "System reports %d interfaces. Found %d up\n", |
43 | NSResources->system().interfaces().count(), | 43 | NSResources->system().interfaces().count(), |
44 | SL.count() )); | 44 | SL.count() )); |
45 | 45 | ||
46 | for ( QStringList::Iterator it = SL.begin(); | 46 | for ( QStringList::Iterator it = SL.begin(); |
47 | it != SL.end(); | 47 | it != SL.end(); |
48 | ++it ) { | 48 | ++it ) { |
49 | profilenr = atol( (*it).mid( 8 ).latin1() ); | 49 | profilenr = atol( (*it).mid( 8 ).latin1() ); |
50 | // read the interface store int 'up' | 50 | // read the interface store int 'up' |
51 | F->setName( D.path() + "/" + (*it) ); | 51 | F->setName( D.path() + "/" + (*it) ); |
52 | if( F->open( IO_ReadOnly ) ) { | 52 | if( F->open( IO_ReadOnly ) ) { |
53 | NetworkSetup * NC; | 53 | NetworkSetup * NC; |
54 | interfacename = TS.readLine(); | 54 | interfacename = TS.readLine(); |
55 | F->close(); | 55 | F->close(); |
56 | 56 | ||
57 | Log(( "Assign interface %s to Profile nr %d\n", | 57 | Log(( "Assign interface %s to Profile nr %d\n", |
58 | interfacename.latin1(), profilenr )); | 58 | interfacename.latin1(), profilenr )); |
59 | 59 | ||
60 | NC = NSResources->getNetworkSetup( profilenr ); | 60 | NC = NSResources->getNetworkSetup( profilenr ); |
61 | if( NC ) { | 61 | if( NC ) { |
62 | NC->assignInterface( | 62 | NC->assignInterface( |
63 | NSResources->system().findInterface( interfacename ) ); | 63 | NSResources->system().findInterface( interfacename ) ); |
64 | Log(( "Assign interface %p\n", | 64 | Log(( "Assign interface %p\n", |
65 | NC->assignedInterface() )); | 65 | NC->assignedInterface() )); |
66 | } else { | 66 | } else { |
67 | Log(( "Profile nr %d no longer defined\n", | 67 | Log(( "Profile nr %d no longer defined\n", |
68 | profilenr )); | 68 | profilenr )); |
69 | } | 69 | } |
70 | } | 70 | } |
71 | } | 71 | } |
72 | } | 72 | } |
73 | } | 73 | } |
74 | 74 | ||
75 | // saving is done by caller | 75 | // saving is done by caller |
76 | NetworkSettingsData::~NetworkSettingsData( void ) { | 76 | NetworkSettingsData::~NetworkSettingsData( void ) { |
77 | delete NSResources; | 77 | delete NSResources; |
78 | } | 78 | } |
79 | 79 | ||
80 | void NetworkSettingsData::loadSettings( void ) { | 80 | void NetworkSettingsData::loadSettings( void ) { |
81 | QString Line, S; | 81 | QString Line, S; |
82 | QString Attr, Value; | 82 | QString Attr, Value; |
83 | long idx; | 83 | long idx; |
84 | 84 | ||
85 | QFile F( CfgFile ); | 85 | QFile F( CfgFile ); |
86 | QTextStream TS( &F ); | 86 | QTextStream TS( &F ); |
87 | 87 | ||
88 | ForceModified = 0; | 88 | ForceModified = 0; |
89 | 89 | ||
90 | do { | 90 | do { |
91 | 91 | ||
92 | if( ! F.open(IO_ReadOnly) ) | 92 | if( ! F.open(IO_ReadOnly) ) |
93 | break; | 93 | break; |
94 | 94 | ||
95 | /* load the file -> | 95 | /* load the file -> |
96 | 96 | ||
97 | FORMAT : | 97 | FORMAT : |
98 | 98 | ||
99 | [NETNODETYPE] | 99 | [NETNODETYPE] |
100 | Entries ... | 100 | Entries ... |
101 | <EMPTYLINE> | 101 | <EMPTYLINE> |
102 | [NetworkSetup] | 102 | [NetworkSetup] |
103 | Name=Name | 103 | Name=Name |
104 | Node=Name | 104 | Node=Name |
105 | <EMPTYLINE> | 105 | <EMPTYLINE> |
106 | */ | 106 | */ |
107 | while( ! TS.atEnd() ) { | 107 | while( ! TS.atEnd() ) { |
108 | S = Line = TS.readLine(); | 108 | S = Line = TS.readLine(); |
109 | 109 | ||
110 | if ( S.isEmpty() || S[0] != '[' ) | 110 | if ( S.isEmpty() || S[0] != '[' ) |
111 | continue; | 111 | continue; |
112 | 112 | ||
113 | S = S.mid( 1, S.length()-2 ); | 113 | S = S.mid( 1, S.length()-2 ); |
114 | 114 | ||
115 | if( ! NSResources ) { | 115 | if( ! NSResources ) { |
116 | continue; | 116 | continue; |
117 | } | 117 | } |
118 | 118 | ||
119 | if( S == "NetworkSetup" ) { | 119 | if( S == "NetworkSetup" ) { |
120 | // load NetworkSetups -> collections of nodes | 120 | // load NetworkSetups -> collections of nodes |
121 | bool Dangling; | 121 | bool Dangling; |
122 | NetworkSetup * NC = new NetworkSetup( TS, Dangling ); | 122 | NetworkSetup * NC = new NetworkSetup( TS, Dangling ); |
123 | NSResources->addNetworkSetup( NC, Dangling ); | 123 | NSResources->addNetworkSetup( NC, Dangling ); |
124 | } else { | 124 | } else { |
125 | ANetNode * NN = 0; | 125 | ANetNode * NN = 0; |
126 | ANetNodeInstance* NNI = 0; | 126 | ANetNodeInstance* NNI = 0; |
127 | if( S.startsWith( "nodetype " ) ) { | 127 | if( S.startsWith( "nodetype " ) ) { |
128 | S = S.mid( 9, S.length()-9 ); | 128 | S = S.mid( 9, S.length()-9 ); |
129 | S = deQuote(S); | 129 | S = deQuote(S); |
130 | // try to find netnode | 130 | // try to find netnode |
131 | NN = NSResources->findNetNode( S ); | 131 | NN = NSResources->findNetNode( S ); |
132 | } else { | 132 | } else { |
133 | // try to find instance | 133 | // try to find instance |
134 | NNI = NSResources->createNodeInstance( S ); | 134 | NNI = NSResources->createNodeInstance( S ); |
135 | } | 135 | } |
136 | 136 | ||
137 | if( NN == 0 && NNI == 0 ) { | 137 | if( NN == 0 && NNI == 0 ) { |
138 | LeftOvers.append( Line ); | 138 | LeftOvers.append( Line ); |
139 | do { | 139 | do { |
140 | Line = TS.readLine(); | 140 | Line = TS.readLine(); |
141 | // store even delimiter | 141 | // store even delimiter |
142 | LeftOvers.append( Line ); | 142 | LeftOvers.append( Line ); |
143 | } while ( ! Line.isEmpty() ); | 143 | } while ( ! Line.isEmpty() ); |
144 | 144 | ||
145 | //next section | 145 | //next section |
146 | continue; | 146 | continue; |
147 | } | 147 | } |
148 | 148 | ||
149 | // read entries of this section | 149 | // read entries of this section |
150 | do { | 150 | do { |
151 | S = Line = TS.readLine(); | 151 | S = Line = TS.readLine(); |
152 | 152 | ||
153 | if( S.isEmpty() ) { | 153 | if( S.isEmpty() ) { |
154 | // empty line | 154 | // empty line |
155 | break; | 155 | break; |
156 | } | 156 | } |
157 | idx = S.find( '=' ); | 157 | idx = S.find( '=' ); |
158 | if( idx > 0 ) { | 158 | if( idx > 0 ) { |
159 | Attr = S.left( idx ); | 159 | Attr = S.left( idx ); |
160 | Value = S.mid( idx+1, S.length() ); | 160 | Value = S.mid( idx+1, S.length() ); |
161 | } else { | 161 | } else { |
162 | Value=""; | 162 | Value=""; |
163 | Attr = S; | 163 | Attr = S; |
164 | } | 164 | } |
165 | 165 | ||
166 | Value.stripWhiteSpace(); | 166 | Value.stripWhiteSpace(); |
167 | Attr.stripWhiteSpace(); | 167 | Attr.stripWhiteSpace(); |
168 | Attr.lower(); | 168 | Attr.lower(); |
169 | // dequote Attr | 169 | // dequote Attr |
170 | Value = deQuote(Value); | 170 | Value = deQuote(Value); |
171 | 171 | ||
172 | if( NN ) { | 172 | if( NN ) { |
173 | // set the attribute | 173 | // set the attribute |
174 | NN->setAttribute( Attr, Value ); | 174 | NN->setAttribute( Attr, Value ); |
175 | } else { | 175 | } else { |
176 | // set the attribute | 176 | // set the attribute |
177 | NNI->setAttribute( Attr, Value ); | 177 | NNI->setAttribute( Attr, Value ); |
178 | } | 178 | } |
179 | } while( 1 ); | 179 | } while( 1 ); |
180 | 180 | ||
181 | if( NNI ) { | 181 | if( NNI ) { |
182 | // loading from file -> exists | 182 | // loading from file -> exists |
183 | Log( ( "NodeInstance %s : %p\n", NNI->name(), NNI )); | 183 | Log( ( "NodeInstance %s : %p\n", NNI->name(), NNI )); |
184 | NNI->setNew( FALSE ); | 184 | NNI->setNew( FALSE ); |
185 | NSResources->addNodeInstance( NNI ); | 185 | NSResources->addNodeInstance( NNI ); |
186 | } | 186 | } |
187 | 187 | ||
188 | if( NN ) { | 188 | if( NN ) { |
189 | Log( ( "Node %s : %p\n", NN->name(), NN ) ); | 189 | Log( ( "Node %s : %p\n", NN->name(), NN ) ); |
190 | } | 190 | } |
191 | } | 191 | } |
192 | } | 192 | } |
193 | 193 | ||
194 | } while( 0 ); | 194 | } while( 0 ); |
195 | 195 | ||
196 | } | 196 | } |
197 | 197 | ||
198 | QString NetworkSettingsData::saveSettings( void ) { | 198 | QString NetworkSettingsData::saveSettings( void ) { |
199 | QString ErrS = ""; | 199 | QString ErrS = ""; |
200 | 200 | ||
201 | if( ! isModified() ) | 201 | if( ! isModified() ) |
202 | return ErrS; | 202 | return ErrS; |
203 | 203 | ||
204 | QString S; | 204 | QString S; |
205 | QFile F( CfgFile + ".bup" ); | 205 | QFile F( CfgFile + ".bup" ); |
206 | 206 | ||
207 | Log( ( "Saving settings to %s\n", CfgFile.latin1() )); | 207 | Log( ( "Saving settings to %s\n", CfgFile.latin1() )); |
208 | if( ! F.open( IO_WriteOnly | IO_Truncate ) ) { | 208 | if( ! F.open( IO_WriteOnly | IO_Truncate ) ) { |
209 | ErrS = qApp->translate( "NetworkSettings", | 209 | ErrS = qApp->translate( "NetworkSettings", |
210 | "<p>Could not save setup to \"%1\" !</p>" ). | 210 | "<p>Could not save setup to \"%1\" !</p>" ). |
211 | arg(CfgFile); | 211 | arg(CfgFile); |
212 | // problem | 212 | // problem |
213 | return ErrS; | 213 | return ErrS; |
214 | } | 214 | } |
215 | 215 | ||
216 | QTextStream TS( &F ); | 216 | QTextStream TS( &F ); |
217 | 217 | ||
218 | // save global configs | 218 | // save global configs |
219 | for( QDictIterator<ANetNode> it( NSResources->netNodes() ); | 219 | for( QDictIterator<ANetNode> it( NSResources->netNodes() ); |
220 | it.current(); | 220 | it.current(); |
221 | ++it ) { | 221 | ++it ) { |
222 | TS << "[nodetype " | 222 | TS << "[nodetype " |
223 | << quote( QString( it.current()->name() ) ) | 223 | << quote( QString( it.current()->name() ) ) |
224 | << "]" | 224 | << "]" |
225 | << endl; | 225 | << endl; |
226 | 226 | ||
227 | it.current()->saveAttributes( TS ); | 227 | it.current()->saveAttributes( TS ); |
228 | TS << endl; | 228 | TS << endl; |
229 | } | 229 | } |
230 | 230 | ||
231 | // save leftovers | 231 | // save leftovers |
232 | for ( QStringList::Iterator it = LeftOvers.begin(); | 232 | for ( QStringList::Iterator it = LeftOvers.begin(); |
233 | it != LeftOvers.end(); ++it ) { | 233 | it != LeftOvers.end(); ++it ) { |
234 | TS << (*it) << endl; | 234 | TS << (*it) << endl; |
235 | } | 235 | } |
236 | 236 | ||
237 | // save all netnode instances | 237 | // save all netnode instances |
238 | { ANetNodeInstance * NNI; | 238 | { ANetNodeInstance * NNI; |
239 | for( QDictIterator<ANetNodeInstance> nit( | 239 | for( QDictIterator<ANetNodeInstance> nit( |
240 | NSResources->netNodeInstances()); | 240 | NSResources->netNodeInstances()); |
241 | nit.current(); | 241 | nit.current(); |
242 | ++nit ) { | 242 | ++nit ) { |
243 | // header | 243 | // header |
244 | NNI = nit.current(); | 244 | NNI = nit.current(); |
245 | TS << '[' | 245 | TS << '[' |
246 | << QString(NNI->nodeClass()->name()) | 246 | << QString(NNI->nodeClass()->name()) |
247 | << ']' | 247 | << ']' |
248 | << endl; | 248 | << endl; |
249 | NNI->saveAttributes( TS ); | 249 | NNI->saveAttributes( TS ); |
250 | TS << endl; | 250 | TS << endl; |
251 | } | 251 | } |
252 | } | 252 | } |
253 | 253 | ||
254 | // good NetworkSetups | 254 | // good NetworkSetups |
255 | { Name2NetworkSetup_t & M = NSResources->networkSetups(); | 255 | { Name2NetworkSetup_t & M = NSResources->networkSetups(); |
256 | 256 | ||
257 | // for all NetworkSetups | 257 | // for all NetworkSetups |
258 | for( QDictIterator<NetworkSetup> it(M); | 258 | for( QDictIterator<NetworkSetup> it(M); |
259 | it.current(); | 259 | it.current(); |
260 | ++it ) { | 260 | ++it ) { |
261 | TS << "[NetworkSetup]" << endl; | 261 | TS << "[NetworkSetup]" << endl; |
262 | it.current()->save(TS); | 262 | it.current()->save(TS); |
263 | } | 263 | } |
264 | } | 264 | } |
265 | 265 | ||
266 | // save dangling NetworkSetups | 266 | // save dangling NetworkSetups |
267 | { Name2NetworkSetup_t & M = NSResources->danglingNetworkSetups(); | 267 | { Name2NetworkSetup_t & M = NSResources->danglingNetworkSetups(); |
268 | 268 | ||
269 | // for all NetworkSetups | 269 | // for all NetworkSetups |
270 | for( QDictIterator<NetworkSetup> it(M); | 270 | for( QDictIterator<NetworkSetup> it(M); |
271 | it.current(); | 271 | it.current(); |
272 | ++it ) { | 272 | ++it ) { |
273 | TS << "[NetworkSetup]" << endl; | 273 | TS << "[NetworkSetup]" << endl; |
274 | it.current()->save(TS); | 274 | it.current()->save(TS); |
275 | } | 275 | } |
276 | } | 276 | } |
277 | 277 | ||
278 | QDir D("."); | 278 | QDir D("."); |
279 | D.rename( CfgFile + ".bup", CfgFile ); | 279 | D.rename( CfgFile + ".bup", CfgFile ); |
280 | 280 | ||
281 | // | 281 | // |
282 | // proper files AND system files regenerated | 282 | // proper files AND system files regenerated |
283 | // | 283 | // |
284 | 284 | ||
285 | 285 | ||
286 | for( QDictIterator<NetworkSetup> it(NSResources->networkSetups()); | 286 | for( QDictIterator<NetworkSetup> it(NSResources->networkSetups()); |
287 | it.current(); | 287 | it.current(); |
288 | ++it ) { | 288 | ++it ) { |
289 | it.current()->setModified( 0 ); | 289 | it.current()->setModified( 0 ); |
290 | } | 290 | } |
291 | 291 | ||
292 | return ErrS; | 292 | return ErrS; |
293 | } | 293 | } |
294 | 294 | ||
295 | QString NetworkSettingsData::generateSettings( void ) { | 295 | QString NetworkSettingsData::generateSettings( void ) { |
296 | QString S = ""; | 296 | QString S = ""; |
297 | Name2SystemFile_t & SFM = NSResources->systemFiles(); | 297 | Name2SystemFile_t & SFM = NSResources->systemFiles(); |
298 | Name2NetworkSetup_t & M = NSResources->networkSetups(); | 298 | Name2NetworkSetup_t & M = NSResources->networkSetups(); |
299 | NetworkSetup * NC; | 299 | NetworkSetup * NC; |
300 | ANetNodeInstance * NNI; | 300 | ANetNodeInstance * NNI; |
301 | ANetNodeInstance * FirstWithData; | 301 | ANetNodeInstance * FirstWithData; |
302 | RuntimeInfo * CurDev; | 302 | RuntimeInfo * CurDev; |
303 | ANetNode * NN, * CurDevNN = 0; | 303 | ANetNode * NN, * CurDevNN = 0; |
304 | long NoOfDevs; | 304 | long NoOfDevs; |
305 | long DevCtStart; | 305 | long DevCtStart; |
306 | bool needToGenerate; | 306 | bool needToGenerate; |
307 | 307 | ||
308 | // regenerate system files | 308 | // regenerate system files |
309 | Log( ( "Generating settings from %s\n", CfgFile.latin1() )); | 309 | Log( ( "Generating settings from %s\n", CfgFile.latin1() )); |
310 | 310 | ||
311 | for( QDictIterator<ANetNode> nnit( NSResources->netNodes() ); | 311 | for( QDictIterator<ANetNode> nnit( NSResources->netNodes() ); |
312 | nnit.current(); | 312 | nnit.current(); |
313 | ++nnit ) { | 313 | ++nnit ) { |
314 | bool FirstItem = 1; | 314 | bool FirstItem = 1; |
315 | bool Generated = 0; | 315 | bool Generated = 0; |
316 | 316 | ||
317 | CurDevNN = nnit.current(); | 317 | CurDevNN = nnit.current(); |
318 | 318 | ||
319 | { QStringList SL; | 319 | { QStringList SL; |
320 | SL = CurDevNN->properFiles(); | 320 | SL = CurDevNN->properFiles(); |
321 | 321 | ||
322 | for ( QStringList::Iterator it = SL.begin(); | 322 | for ( QStringList::Iterator it = SL.begin(); |
323 | it != SL.end(); | 323 | it != SL.end(); |
324 | ++it ) { | 324 | ++it ) { |
325 | 325 | ||
326 | Generated = 0; | 326 | Generated = 0; |
327 | FirstItem = 1; | 327 | FirstItem = 1; |
328 | // iterate over NNI's of this class | 328 | // iterate over NNI's of this class |
329 | for( QDictIterator<ANetNodeInstance> nniit( | 329 | for( QDictIterator<ANetNodeInstance> nniit( |
330 | NSResources->netNodeInstances() ); | 330 | NSResources->netNodeInstances() ); |
331 | nniit.current(); | 331 | nniit.current(); |
332 | ++nniit ) { | 332 | ++nniit ) { |
333 | if( nniit.current()->nodeClass() != CurDevNN ) | 333 | if( nniit.current()->nodeClass() != CurDevNN ) |
334 | // different class | 334 | // different class |
335 | continue; | 335 | continue; |
336 | 336 | ||
337 | // open proper file | 337 | // open proper file |
338 | { SystemFile SF( (*it) ); | 338 | { SystemFile SF( (*it) ); |
339 | QStringList SL; | ||
339 | 340 | ||
340 | if( ! CurDevNN->openFile( SF, nniit.current()) ) { | 341 | if( ! CurDevNN->openFile( SF, nniit.current(), SL) ) { |
341 | // cannot open | 342 | // cannot open |
342 | S = qApp->translate( "NetworkSettings", | 343 | S = qApp->translate( "NetworkSettings", |
343 | "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). | 344 | "<p>Cannot build proper file \"%1\" for node \"%2\"</p>" ). |
344 | arg( (*it) ).arg( CurDevNN->name() ); | 345 | arg( (*it) ). |
346 | arg( CurDevNN->name() ); | ||
347 | return S; | ||
348 | } | ||
349 | |||
350 | if( ! createPath( SL ) ) { | ||
351 | S = qApp->translate( "NetworkSettings", | ||
352 | "<p>Cannot create path \"%1\" for proper file \"%2\" for node \"%3\"</p>" ). | ||
353 | arg( SL.join("/") ). | ||
354 | arg( (*it) ). | ||
355 | arg( CurDevNN->name() ); | ||
345 | return S; | 356 | return S; |
346 | } | 357 | } |
347 | 358 | ||
348 | if( ! SF.open() ) { | 359 | if( ! SF.open() ) { |
349 | S = qApp->translate( "NetworkSettings", | 360 | S = qApp->translate( "NetworkSettings", |
350 | "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). | 361 | "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). |
351 | arg( (*it) ).arg( CurDevNN->name() ); | 362 | arg( (*it) ).arg( CurDevNN->name() ); |
352 | return S; | 363 | return S; |
353 | } | 364 | } |
354 | 365 | ||
355 | // preamble on first | 366 | // preamble on first |
356 | if( FirstItem ) { | 367 | if( FirstItem ) { |
357 | if( CurDevNN->generatePreamble( SF ) == 2 ) { | 368 | if( CurDevNN->generatePreamble( SF ) == 2 ) { |
358 | S = qApp->translate( "NetworkSettings", | 369 | S = qApp->translate( "NetworkSettings", |
359 | "<p>Error in section \"preamble\" for proper file \"%1\" and node \"%2\"</p>" ). | 370 | "<p>Error in section \"preamble\" for proper file \"%1\" and node \"%2\"</p>" ). |
360 | arg( (*it) ). | 371 | arg( (*it) ). |
361 | arg( CurDevNN->name() ); | 372 | arg( CurDevNN->name() ); |
362 | return S; | 373 | return S; |
363 | } | 374 | } |
364 | } | 375 | } |
365 | FirstItem = 0; | 376 | FirstItem = 0; |
366 | Generated = 1; | 377 | Generated = 1; |
367 | 378 | ||
368 | // item specific | 379 | // item specific |
369 | if( nniit.current()->generateFile( SF, -1 ) == 2 ) { | 380 | if( nniit.current()->generateFile( SF, -1 ) == 2 ) { |
370 | S = qApp->translate( "NetworkSettings", | 381 | S = qApp->translate( "NetworkSettings", |
371 | "<p>Error in section for node \"%1\" for proper file \"%2\" and node class \"%3\"</p>" ). | 382 | "<p>Error in section for node \"%1\" for proper file \"%2\" and node class \"%3\"</p>" ). |
372 | arg( nniit.current()->name() ). | 383 | arg( nniit.current()->name() ). |
373 | arg( (*it) ). | 384 | arg( (*it) ). |
374 | arg( CurDevNN->name() ); | 385 | arg( CurDevNN->name() ); |
375 | return S; | 386 | return S; |
376 | } | 387 | } |
377 | } | 388 | } |
378 | } | 389 | } |
379 | 390 | ||
380 | if( Generated ) { | 391 | if( Generated ) { |
381 | SystemFile SF( (*it) ); | 392 | SystemFile SF( (*it) ); |
393 | QStringList SL; | ||
382 | 394 | ||
383 | if( CurDevNN->openFile( SF, 0 ) && | 395 | if( CurDevNN->openFile( SF, 0, SL ) && |
384 | ! SF.path().isEmpty() | 396 | ! SF.path().isEmpty() |
385 | ) { | 397 | ) { |
386 | 398 | ||
399 | if( ! createPath( SL ) ) { | ||
400 | S = qApp->translate( "NetworkSettings", | ||
401 | "<p>Cannot create path \"%1\" for proper file \"%2\" for node \"%3\"</p>" ). | ||
402 | arg( SL.join("/") ). | ||
403 | arg( (*it) ). | ||
404 | arg( CurDevNN->name() ); | ||
405 | return S; | ||
406 | } | ||
407 | |||
387 | if( ! SF.open() ) { | 408 | if( ! SF.open() ) { |
388 | S = qApp->translate( "NetworkSettings", | 409 | S = qApp->translate( "NetworkSettings", |
389 | "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). | 410 | "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). |
390 | arg( (*it) ).arg( CurDevNN->name() ); | 411 | arg( (*it) ). |
412 | arg( CurDevNN->name() ); | ||
391 | return S; | 413 | return S; |
392 | } | 414 | } |
393 | 415 | ||
394 | if( CurDevNN->generatePostamble( SF ) == 2 ) { | 416 | if( CurDevNN->generatePostamble( SF ) == 2 ) { |
395 | S = qApp->translate( "NetworkSettings", | 417 | S = qApp->translate( "NetworkSettings", |
396 | "<p>Error in section \"postamble\" for proper file \"%1\" and node \"%2\"</p>" ). | 418 | "<p>Error in section \"postamble\" for proper file \"%1\" and node \"%2\"</p>" ). |
397 | arg( (*it) ). | 419 | arg( (*it) ). |
398 | arg( CurDevNN->name() ); | 420 | arg( CurDevNN->name() ); |
399 | return S; | 421 | return S; |
400 | } | 422 | } |
401 | } // no postamble | 423 | } // no postamble |
402 | } | 424 | } |
403 | } | 425 | } |
404 | } | 426 | } |
405 | } | 427 | } |
406 | 428 | ||
407 | // | 429 | // |
408 | // generate all registered files | 430 | // generate all registered files |
409 | // | 431 | // |
410 | for( QDictIterator<SystemFile> sfit(SFM); | 432 | for( QDictIterator<SystemFile> sfit(SFM); |
411 | sfit.current(); | 433 | sfit.current(); |
412 | ++sfit ) { | 434 | ++sfit ) { |
413 | SystemFile * SF; | 435 | SystemFile * SF; |
414 | 436 | ||
415 | SF = sfit.current(); | 437 | SF = sfit.current(); |
416 | 438 | ||
417 | // reset all | 439 | // reset all |
418 | for( QDictIterator<ANetNode> nnit( NSResources->netNodes() ); | 440 | for( QDictIterator<ANetNode> nnit( NSResources->netNodes() ); |
419 | nnit.current(); | 441 | nnit.current(); |
420 | ++nnit ) { | 442 | ++nnit ) { |
421 | nnit.current()->setDone(0); | 443 | nnit.current()->setDone(0); |
422 | } | 444 | } |
423 | 445 | ||
424 | for( QDictIterator<ANetNodeInstance> nniit( | 446 | for( QDictIterator<ANetNodeInstance> nniit( |
425 | NSResources->netNodeInstances() ); | 447 | NSResources->netNodeInstances() ); |
426 | nniit.current(); | 448 | nniit.current(); |
427 | ++nniit ) { | 449 | ++nniit ) { |
428 | nniit.current()->setDone(0); | 450 | nniit.current()->setDone(0); |
429 | } | 451 | } |
430 | 452 | ||
431 | for( QDictIterator<NetworkSetup> ncit(M); | 453 | for( QDictIterator<NetworkSetup> ncit(M); |
432 | ncit.current(); | 454 | ncit.current(); |
433 | ++ncit ) { | 455 | ++ncit ) { |
434 | ncit.current()->setDone(0); | 456 | ncit.current()->setDone(0); |
435 | } | 457 | } |
436 | 458 | ||
437 | Log( ( "Generating system file %s\n", SF->name().latin1() )); | 459 | Log( ( "Generating system file %s\n", SF->name().latin1() )); |
438 | 460 | ||
439 | needToGenerate = 0; | 461 | needToGenerate = 0; |
440 | 462 | ||
441 | // are there netnodes that have instances and need | 463 | // are there netnodes that have instances and need |
442 | // to write data in this system file ? | 464 | // to write data in this system file ? |
443 | for( QDictIterator<ANetNode> nnit( NSResources->netNodes() ); | 465 | for( QDictIterator<ANetNode> nnit( NSResources->netNodes() ); |
444 | ! needToGenerate && nnit.current(); | 466 | ! needToGenerate && nnit.current(); |
445 | ++nnit ) { | 467 | ++nnit ) { |
446 | 468 | ||
447 | NN = nnit.current(); | 469 | NN = nnit.current(); |
448 | 470 | ||
449 | if( NN->hasDataForFile( *SF ) ) { | 471 | if( NN->hasDataForFile( *SF ) ) { |
450 | // netnode can have data | 472 | // netnode can have data |
451 | 473 | ||
452 | // are there instances of this node ? | 474 | // are there instances of this node ? |
453 | for( QDictIterator<ANetNodeInstance> nniit( | 475 | for( QDictIterator<ANetNodeInstance> nniit( |
454 | NSResources->netNodeInstances() ); | 476 | NSResources->netNodeInstances() ); |
455 | ! needToGenerate && nniit.current(); | 477 | ! needToGenerate && nniit.current(); |
456 | ++nniit ) { | 478 | ++nniit ) { |
457 | if( nniit.current()->nodeClass() == NN ) { | 479 | if( nniit.current()->nodeClass() == NN ) { |
458 | // yes | 480 | // yes |
459 | Log(("Node %s has data\n", | 481 | Log(("Node %s has data\n", |
460 | nniit.current()->name() )); | 482 | nniit.current()->name() )); |
461 | needToGenerate = 1; | 483 | needToGenerate = 1; |
462 | break; | 484 | break; |
463 | } | 485 | } |
464 | } | 486 | } |
465 | } | 487 | } |
466 | } | 488 | } |
467 | 489 | ||
468 | if( ! needToGenerate ) { | 490 | if( ! needToGenerate ) { |
469 | // no instances found that might need to write data | 491 | // no instances found that might need to write data |
470 | // in this systemfile | 492 | // in this systemfile |
471 | Log(("No nodes for systemfile %s\n", SF->name().latin1() )); | 493 | Log(("No nodes for systemfile %s\n", SF->name().latin1() )); |
472 | continue; | 494 | continue; |
473 | } | 495 | } |
474 | 496 | ||
475 | // ok generate this system file | 497 | // ok generate this system file |
476 | if( ! SF->open() ) { | 498 | if( ! SF->open() ) { |
477 | S = qApp->translate( "NetworkSettings", | 499 | S = qApp->translate( "NetworkSettings", |
478 | "<p>Cannot open system file \"%1\"</p>" ). | 500 | "<p>Cannot open system file \"%1\"</p>" ). |
479 | arg( SF->name() ); | 501 | arg( SF->name() ); |
480 | return S; | 502 | return S; |
481 | } | 503 | } |
482 | 504 | ||
483 | // global presection for this system file | 505 | // global presection for this system file |
484 | if( ! SF->preSection() ) { | 506 | if( ! SF->preSection() ) { |
485 | S = qApp->translate( "NetworkSettings", | 507 | S = qApp->translate( "NetworkSettings", |
486 | "<p>Error in section \"Preamble\" for file \"%1\"</p>" ). | 508 | "<p>Error in section \"Preamble\" for file \"%1\"</p>" ). |
487 | arg( SF->name() ); | 509 | arg( SF->name() ); |
488 | return S; | 510 | return S; |
489 | } | 511 | } |
490 | 512 | ||
491 | // find NetworkSetups that want to write to this file | 513 | // find NetworkSetups that want to write to this file |
492 | for( QDictIterator<NetworkSetup> ncit(M); | 514 | for( QDictIterator<NetworkSetup> ncit(M); |
493 | ncit.current(); | 515 | ncit.current(); |
494 | ++ncit ) { | 516 | ++ncit ) { |
495 | 517 | ||
496 | NC = ncit.current(); | 518 | NC = ncit.current(); |
497 | 519 | ||
498 | if( NC->done() ) { | 520 | if( NC->done() ) { |
499 | // already done | 521 | // already done |
500 | continue; | 522 | continue; |
501 | } | 523 | } |
502 | 524 | ||
503 | if( ! NC->hasDataForFile( *SF ) ) { | 525 | if( ! NC->hasDataForFile( *SF ) ) { |
504 | // no data | 526 | // no data |
505 | continue; | 527 | continue; |
506 | } | 528 | } |
507 | 529 | ||
508 | Log(("Generating %s for NetworkSetup %s\n", | 530 | Log(("Generating %s for NetworkSetup %s\n", |
509 | SF->name().latin1(), NC->name().latin1() )); | 531 | SF->name().latin1(), NC->name().latin1() )); |
510 | // find highest item that wants to write data to this file | 532 | // find highest item that wants to write data to this file |
511 | FirstWithData = NC->firstWithDataForFile( *SF ); | 533 | FirstWithData = NC->firstWithDataForFile( *SF ); |
512 | 534 | ||
513 | // find device on which this NetworkSetup works | 535 | // find device on which this NetworkSetup works |
514 | CurDev = NC->device(); | 536 | CurDev = NC->device(); |
515 | // class of that node | 537 | // class of that node |
516 | CurDevNN = CurDev->netNode()->nodeClass(); | 538 | CurDevNN = CurDev->netNode()->nodeClass(); |
517 | 539 | ||
518 | if( ! FirstWithData->nodeClass()->done() ) { | 540 | if( ! FirstWithData->nodeClass()->done() ) { |
519 | // generate fixed part | 541 | // generate fixed part |
520 | if( ! SF->preDeviceSection( CurDevNN ) ) { | 542 | if( ! SF->preDeviceSection( CurDevNN ) ) { |
521 | S = qApp->translate( "NetworkSettings", | 543 | S = qApp->translate( "NetworkSettings", |
522 | "<p>Error in section \"Pre-Device\" for file \"%1\"</p>" ). | 544 | "<p>Error in section \"Pre-Device\" for file \"%1\"</p>" ). |
523 | arg( SF->name() ); | 545 | arg( SF->name() ); |
524 | return S; | 546 | return S; |
525 | } | 547 | } |
526 | 548 | ||
527 | if( FirstWithData->nodeClass()->generateFile( | 549 | if( FirstWithData->nodeClass()->generateFile( |
528 | *SF, | 550 | *SF, |
529 | FirstWithData, | 551 | FirstWithData, |
530 | -2 ) == 2 ) { | 552 | -2 ) == 2 ) { |
531 | S = qApp->translate( "NetworkSettings", | 553 | S = qApp->translate( "NetworkSettings", |
532 | "<p>Error in section \"Common\" for file \"%1\" and node \"%2\"</p>" ). | 554 | "<p>Error in section \"Common\" for file \"%1\" and node \"%2\"</p>" ). |
533 | arg( SF->name() ). | 555 | arg( SF->name() ). |
534 | arg( CurDevNN->name() ); | 556 | arg( CurDevNN->name() ); |
535 | return S; | 557 | return S; |
536 | } | 558 | } |
537 | FirstWithData->nodeClass()->setDone( 1 ); | 559 | FirstWithData->nodeClass()->setDone( 1 ); |
538 | Log(( "Systemfile %s for node instance %s is done\n", | 560 | Log(( "Systemfile %s for node instance %s is done\n", |
539 | SF->name().latin1(), | 561 | SF->name().latin1(), |
540 | FirstWithData->name() )); | 562 | FirstWithData->name() )); |
541 | } | 563 | } |
542 | 564 | ||
543 | NoOfDevs = 0; | 565 | NoOfDevs = 0; |
544 | DevCtStart = -1; | 566 | DevCtStart = -1; |
545 | 567 | ||
546 | if( SF->knowsDeviceInstances() ) { | 568 | if( SF->knowsDeviceInstances() ) { |
547 | DevCtStart = 0; | 569 | DevCtStart = 0; |
548 | NoOfDevs = CurDevNN->instanceCount(); | 570 | NoOfDevs = CurDevNN->instanceCount(); |
549 | } | 571 | } |
550 | 572 | ||
551 | if( ! CurDev->netNode()->nodeClass()->done() ) { | 573 | if( ! CurDev->netNode()->nodeClass()->done() ) { |
552 | // first time this device is handled | 574 | // first time this device is handled |
553 | // generate common device specific part | 575 | // generate common device specific part |
554 | for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { | 576 | for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { |
555 | 577 | ||
556 | if( FirstWithData->nodeClass()->generateFile( | 578 | if( FirstWithData->nodeClass()->generateFile( |
557 | *SF, CurDev->netNode(), i ) == 2 ) { | 579 | *SF, CurDev->netNode(), i ) == 2 ) { |
558 | S = qApp->translate( "NetworkSettings", | 580 | S = qApp->translate( "NetworkSettings", |
559 | "<p>Error in section \"Device\" for file \"%1\" and node \"%2\"</p>" ). | 581 | "<p>Error in section \"Device\" for file \"%1\" and node \"%2\"</p>" ). |
560 | arg( SF->name() ). | 582 | arg( SF->name() ). |
561 | arg( CurDevNN->name() ); | 583 | arg( CurDevNN->name() ); |
562 | return S; | 584 | return S; |
563 | } | 585 | } |
564 | } | 586 | } |
565 | CurDev->netNode()->nodeClass()->setDone( 1 ); | 587 | CurDev->netNode()->nodeClass()->setDone( 1 ); |
566 | 588 | ||
567 | Log(( "Systemfile %s for Nodeclass %s is done\n", | 589 | Log(( "Systemfile %s for Nodeclass %s is done\n", |
568 | SF->name().latin1(), | 590 | SF->name().latin1(), |
569 | CurDev->netNode()->nodeClass()->name() | 591 | CurDev->netNode()->nodeClass()->name() |
570 | )); | 592 | )); |
571 | } | 593 | } |
572 | 594 | ||
573 | // generate profile specific info | 595 | // generate profile specific info |
574 | // for all nodeNetworkSetups that work on the same device | 596 | // for all nodeNetworkSetups that work on the same device |
575 | for( QDictIterator<NetworkSetup> ncit2(M); | 597 | for( QDictIterator<NetworkSetup> ncit2(M); |
576 | ncit2.current(); | 598 | ncit2.current(); |
577 | ++ncit2 ) { | 599 | ++ncit2 ) { |
578 | 600 | ||
579 | if( ncit2.current()->device() != CurDev ) { | 601 | if( ncit2.current()->device() != CurDev ) { |
580 | // different device | 602 | // different device |
581 | continue; | 603 | continue; |
582 | } | 604 | } |
583 | 605 | ||
584 | Log(("NetworkSetup %s of family %s\n", | 606 | Log(("NetworkSetup %s of family %s\n", |
585 | ncit2.current()->name().latin1(), | 607 | ncit2.current()->name().latin1(), |
586 | CurDev->name() )); | 608 | CurDev->name() )); |
587 | // generate | 609 | // generate |
588 | NNI = ncit2.current()->firstWithDataForFile( *SF ); | 610 | NNI = ncit2.current()->firstWithDataForFile( *SF ); |
589 | for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { | 611 | for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { |
590 | if( ! SF->preNodeSection( NNI, i ) ) { | 612 | if( ! SF->preNodeSection( NNI, i ) ) { |
591 | S = qApp->translate( "NetworkSettings", | 613 | S = qApp->translate( "NetworkSettings", |
592 | "<p>Error in \"Pre-Node Part\" for file \"%1\" and node \"%2\"</p>" ). | 614 | "<p>Error in \"Pre-Node Part\" for file \"%1\" and node \"%2\"</p>" ). |
593 | arg( SF->name() ). | 615 | arg( SF->name() ). |
594 | arg( CurDevNN->name() ); | 616 | arg( CurDevNN->name() ); |
595 | return S; | 617 | return S; |
596 | } | 618 | } |
597 | 619 | ||
598 | switch( NNI->generateFile( *SF, i ) ) { | 620 | switch( NNI->generateFile( *SF, i ) ) { |
599 | case 0 : | 621 | case 0 : |
600 | (*SF) << endl; | 622 | (*SF) << endl; |
601 | break; | 623 | break; |
602 | case 1 : | 624 | case 1 : |
603 | break; | 625 | break; |
604 | case 2 : | 626 | case 2 : |
605 | S = qApp->translate( "NetworkSettings", | 627 | S = qApp->translate( "NetworkSettings", |
606 | "<p>Error in section \"Node\" for file \"%1\" and node \"%2\"</p>" ). | 628 | "<p>Error in section \"Node\" for file \"%1\" and node \"%2\"</p>" ). |
607 | arg( SF->name() ). | 629 | arg( SF->name() ). |
608 | arg( CurDevNN->name() ); | 630 | arg( CurDevNN->name() ); |
609 | return S; | 631 | return S; |
610 | } | 632 | } |
611 | 633 | ||
612 | if( ! SF->postNodeSection( NNI, i ) ) { | 634 | if( ! SF->postNodeSection( NNI, i ) ) { |
613 | S = qApp->translate( "NetworkSettings", | 635 | S = qApp->translate( "NetworkSettings", |
614 | "<p>Error in \"Post-Node Part\" for file \"%1\" and node \"%2\"</p>" ). | 636 | "<p>Error in \"Post-Node Part\" for file \"%1\" and node \"%2\"</p>" ). |
615 | arg( SF->name() ). | 637 | arg( SF->name() ). |
616 | arg( CurDevNN->name() ); | 638 | arg( CurDevNN->name() ); |
617 | return S; | 639 | return S; |
618 | } | 640 | } |
619 | } | 641 | } |
620 | 642 | ||
621 | ncit2.current()->setDone( 1 ); | 643 | ncit2.current()->setDone( 1 ); |
622 | 644 | ||
623 | } | 645 | } |
624 | } | 646 | } |
625 | 647 | ||
626 | if( ! SF->postDeviceSection( CurDevNN ) ) { | 648 | if( ! SF->postDeviceSection( CurDevNN ) ) { |
627 | S = qApp->translate( "NetworkSettings", | 649 | S = qApp->translate( "NetworkSettings", |
628 | "<p>Error in section \"Post-Device\" for file \"%1\" and node \"%2\"</p>" ). | 650 | "<p>Error in section \"Post-Device\" for file \"%1\" and node \"%2\"</p>" ). |
629 | arg( SF->name() ). | 651 | arg( SF->name() ). |
630 | arg( CurDevNN->name() ); | 652 | arg( CurDevNN->name() ); |
631 | return S; | 653 | return S; |
632 | } | 654 | } |
633 | 655 | ||
634 | 656 | ||
635 | if( ! SF->postSection() ) { | 657 | if( ! SF->postSection() ) { |
636 | S = qApp->translate( "NetworkSettings", | 658 | S = qApp->translate( "NetworkSettings", |
637 | "<p>Error in section \"Closure\" for file \"%1\"</p>" ). | 659 | "<p>Error in section \"Closure\" for file \"%1\"</p>" ). |
638 | arg( SF->name() ); | 660 | arg( SF->name() ); |
639 | return S; | 661 | return S; |
640 | } | 662 | } |
641 | 663 | ||
642 | // end of file | 664 | // end of file |
643 | SF->close(); | 665 | SF->close(); |
644 | } | 666 | } |
645 | return S; | 667 | return S; |
646 | } | 668 | } |
647 | 669 | ||
648 | QList<NetworkSetup> NetworkSettingsData::collectPossible( | 670 | QList<NetworkSetup> NetworkSettingsData::collectPossible( |
649 | const QString & Interface ) { | 671 | const QString & Interface ) { |
650 | // collect NetworkSetups that can work on top of this interface | 672 | // collect NetworkSetups that can work on top of this interface |
651 | NetworkSetup * NC; | 673 | NetworkSetup * NC; |
652 | QList<NetworkSetup> PossibleNetworkSetups; | 674 | QList<NetworkSetup> PossibleNetworkSetups; |
653 | Name2NetworkSetup_t & M = NSResources->networkSetups(); | 675 | Name2NetworkSetup_t & M = NSResources->networkSetups(); |
654 | 676 | ||
655 | // for all NetworkSetups | 677 | // for all NetworkSetups |
656 | for( QDictIterator<NetworkSetup> it(M); | 678 | for( QDictIterator<NetworkSetup> it(M); |
657 | it.current(); | 679 | it.current(); |
658 | ++it ) { | 680 | ++it ) { |
659 | NC = it.current(); | 681 | NC = it.current(); |
660 | // check if this profile handles the requested interface | 682 | // check if this profile handles the requested interface |
661 | if( NC->handlesInterface( Interface ) && // if different Intf. | 683 | if( NC->handlesInterface( Interface ) && // if different Intf. |
662 | NC->state() != Disabled && // if enabled | 684 | NC->state() != Disabled && // if enabled |
663 | NC->state() != IsUp // if already used | 685 | NC->state() != IsUp // if already used |
664 | ) { | 686 | ) { |
665 | Log( ( "Append %s for %s\n", | 687 | Log( ( "Append %s for %s\n", |
666 | NC->name().latin1(), Interface.latin1() )); | 688 | NC->name().latin1(), Interface.latin1() )); |
667 | PossibleNetworkSetups.append( NC ); | 689 | PossibleNetworkSetups.append( NC ); |
668 | } | 690 | } |
669 | } | 691 | } |
670 | return PossibleNetworkSetups; | 692 | return PossibleNetworkSetups; |
671 | } | 693 | } |
672 | 694 | ||
673 | 695 | ||
674 | /* | 696 | /* |
675 | Called by the system to see if interface can be brought UP | 697 | Called by the system to see if interface can be brought UP |
676 | 698 | ||
677 | if allowed, echo Interface-allowed else Interface-disallowed | 699 | if allowed, echo Interface-allowed else Interface-disallowed |
678 | */ | 700 | */ |
679 | 701 | ||
680 | bool NetworkSettingsData::canStart( const QString & Interface ) { | 702 | bool NetworkSettingsData::canStart( const QString & Interface ) { |
681 | // load situation | 703 | // load situation |
682 | NetworkSetup * NC = 0; | 704 | NetworkSetup * NC = 0; |
683 | QList<NetworkSetup> PossibleNetworkSetups; | 705 | QList<NetworkSetup> PossibleNetworkSetups; |
684 | 706 | ||
685 | PossibleNetworkSetups = collectPossible( Interface ); | 707 | PossibleNetworkSetups = collectPossible( Interface ); |
686 | 708 | ||
687 | Log( ( "for %s : Possiblilies %d\n", | 709 | Log( ( "for %s : Possiblilies %d\n", |
688 | Interface.latin1(), PossibleNetworkSetups.count() )); | 710 | Interface.latin1(), PossibleNetworkSetups.count() )); |
689 | switch( PossibleNetworkSetups.count() ) { | 711 | switch( PossibleNetworkSetups.count() ) { |
690 | case 0 : // no NetworkSetups | 712 | case 0 : // no NetworkSetups |
691 | break; | 713 | break; |
692 | case 1 : // one NetworkSetup | 714 | case 1 : // one NetworkSetup |
693 | NC = PossibleNetworkSetups.first(); | 715 | NC = PossibleNetworkSetups.first(); |
694 | break; | 716 | break; |
695 | default : // need to ask user ? | 717 | default : // need to ask user ? |
696 | return 1; | 718 | return 1; |
697 | } | 719 | } |
698 | 720 | ||
699 | if( NC ) { | 721 | if( NC ) { |
700 | switch( NC->state() ) { | 722 | switch( NC->state() ) { |
701 | case Unchecked : | 723 | case Unchecked : |
702 | case Unknown : | 724 | case Unknown : |
703 | case Unavailable : | 725 | case Unavailable : |
704 | case Disabled : | 726 | case Disabled : |
705 | // this profile does not allow interface to be UP | 727 | // this profile does not allow interface to be UP |
706 | // -> try others | 728 | // -> try others |
707 | break; | 729 | break; |
708 | case Off : | 730 | case Off : |
709 | // try to UP the device | 731 | // try to UP the device |
710 | { QString S= NC->setState( Activate ); | 732 | { QString S= NC->setState( Activate ); |
711 | if( ! S.isEmpty() ) { | 733 | if( ! S.isEmpty() ) { |
712 | // could not bring device Online -> try other alters | 734 | // could not bring device Online -> try other alters |
713 | Log(( "disallow %ld for %s : %s\n", | 735 | Log(( "disallow %ld for %s : %s\n", |
714 | NC->number(), Interface.latin1(), S.latin1() )); | 736 | NC->number(), Interface.latin1(), S.latin1() )); |
715 | break; | 737 | break; |
716 | } | 738 | } |
717 | // interface assigned | 739 | // interface assigned |
718 | } | 740 | } |
719 | // FT | 741 | // FT |
720 | case Available : | 742 | case Available : |
721 | case IsUp : // also called for 'ifdown' | 743 | case IsUp : // also called for 'ifdown' |
722 | // device is ready -> done | 744 | // device is ready -> done |
723 | Log(( "allow %ld for %s\n", NC->number(), Interface.latin1())); | 745 | Log(( "allow %ld for %s\n", NC->number(), Interface.latin1())); |
724 | printf( "A%d%s\n", NC->number(), Interface.latin1() ); | 746 | printf( "A%d%s\n", NC->number(), Interface.latin1() ); |
725 | return 0; | 747 | return 0; |
726 | } | 748 | } |
727 | } | 749 | } |
728 | 750 | ||
729 | // if we come here no alternatives are possible | 751 | // if we come here no alternatives are possible |
730 | Log(( "disallow %s\n", Interface.latin1())); | 752 | Log(( "disallow %s\n", Interface.latin1())); |
731 | printf( "D-%s\n", Interface.latin1() ); | 753 | printf( "D-%s\n", Interface.latin1() ); |
732 | return 0; | 754 | return 0; |
733 | } | 755 | } |
734 | 756 | ||
735 | bool NetworkSettingsData::isModified( void ) { | 757 | bool NetworkSettingsData::isModified( void ) { |
736 | if( ForceModified ) | 758 | if( ForceModified ) |
737 | return 1; | 759 | return 1; |
738 | 760 | ||
739 | for( QDictIterator<NetworkSetup> it(NSResources->networkSetups()); | 761 | for( QDictIterator<NetworkSetup> it(NSResources->networkSetups()); |
740 | it.current(); | 762 | it.current(); |
741 | ++it ) { | 763 | ++it ) { |
742 | if( it.current()->isModified() ) { | 764 | if( it.current()->isModified() ) { |
743 | return 1; | 765 | return 1; |
744 | } | 766 | } |
745 | } | 767 | } |
746 | return 0; | 768 | return 0; |
747 | } | 769 | } |
748 | 770 | ||
749 | bool NetworkSettingsData::couldBeTriggered( const QString & Interface ) { | 771 | bool NetworkSettingsData::couldBeTriggered( const QString & Interface ) { |
750 | // load situation | 772 | // load situation |
751 | QList<NetworkSetup> PossibleTriggered; | 773 | QList<NetworkSetup> PossibleTriggered; |
752 | 774 | ||
753 | PossibleTriggered = collectTriggered( Interface ); | 775 | PossibleTriggered = collectTriggered( Interface ); |
754 | 776 | ||
755 | Log( ( "for %s : Possiblilies %d\n", | 777 | Log( ( "for %s : Possiblilies %d\n", |
756 | Interface.latin1(), PossibleTriggered.count() )); | 778 | Interface.latin1(), PossibleTriggered.count() )); |
757 | 779 | ||
758 | return ( PossibleTriggered.count() ) ? 1 : 0; | 780 | return ( PossibleTriggered.count() ) ? 1 : 0; |
759 | } | 781 | } |
760 | 782 | ||
761 | QList<NetworkSetup> NetworkSettingsData::collectTriggered( | 783 | QList<NetworkSetup> NetworkSettingsData::collectTriggered( |
762 | const QString & Interface ) { | 784 | const QString & Interface ) { |
763 | 785 | ||
764 | // collect NetworkSetups that could be triggered by this interface | 786 | // collect NetworkSetups that could be triggered by this interface |
765 | NetworkSetup * NC; | 787 | NetworkSetup * NC; |
766 | QList<NetworkSetup> PossibleTriggered; | 788 | QList<NetworkSetup> PossibleTriggered; |
767 | 789 | ||
768 | // for all NetworkSetups | 790 | // for all NetworkSetups |
769 | Name2NetworkSetup_t & M = NSResources->networkSetups(); | 791 | Name2NetworkSetup_t & M = NSResources->networkSetups(); |
770 | 792 | ||
771 | for( QDictIterator<NetworkSetup> it(M); | 793 | for( QDictIterator<NetworkSetup> it(M); |
772 | it.current(); | 794 | it.current(); |
773 | ++it ) { | 795 | ++it ) { |
774 | NC = it.current(); | 796 | NC = it.current(); |
775 | // check if this profile handles the requested interface | 797 | // check if this profile handles the requested interface |
776 | if( NC->triggeredBy( Interface ) && // if different Intf. | 798 | if( NC->triggeredBy( Interface ) && // if different Intf. |
777 | NC->state() != Disabled && // if enabled | 799 | NC->state() != Disabled && // if enabled |
778 | NC->state() != IsUp // if already used | 800 | NC->state() != IsUp // if already used |
779 | ) { | 801 | ) { |
780 | Log( ( "Append %s for %s\n", | 802 | Log( ( "Append %s for %s\n", |
781 | NC->name().latin1(), Interface.latin1() )); | 803 | NC->name().latin1(), Interface.latin1() )); |
782 | PossibleTriggered.append( NC ); | 804 | PossibleTriggered.append( NC ); |
783 | } | 805 | } |
784 | } | 806 | } |
785 | return PossibleTriggered; | 807 | return PossibleTriggered; |
786 | } | 808 | } |
787 | 809 | ||
810 | bool NetworkSettingsData::createPath( const QStringList & SL ) { | ||
811 | |||
812 | QDir D( SL[0] ); | ||
813 | |||
814 | for ( QStringList::ConstIterator it = SL.begin(); | ||
815 | it != SL.end(); | ||
816 | ++it ) { | ||
817 | |||
818 | printf( "Create %s\n", (*it).latin1() ); | ||
819 | if( it == SL.begin() ) | ||
820 | continue; | ||
821 | |||
822 | if( ! D.exists( *it ) ) { | ||
823 | if( ! D.mkdir( *it ) ) { | ||
824 | printf( "Failed %s %s\n", D.path().latin1(), (*it).latin1() ); | ||
825 | return 0; | ||
826 | } | ||
827 | } | ||
828 | |||
829 | D.cd( *it ); | ||
830 | } | ||
831 | return 1; | ||
832 | } | ||
diff --git a/noncore/settings/networksettings2/nsdata.h b/noncore/settings/networksettings2/nsdata.h index b9c216d..65b61a3 100644 --- a/noncore/settings/networksettings2/nsdata.h +++ b/noncore/settings/networksettings2/nsdata.h | |||
@@ -1,38 +1,39 @@ | |||
1 | #ifndef __NSDATA_H | 1 | #ifndef __NSDATA_H |
2 | #define __NSDATA_H | 2 | #define __NSDATA_H |
3 | 3 | ||
4 | #include <netnode.h> | 4 | #include <netnode.h> |
5 | 5 | ||
6 | class NetworkSettingsData { | 6 | class NetworkSettingsData { |
7 | 7 | ||
8 | public : | 8 | public : |
9 | 9 | ||
10 | NetworkSettingsData( void ); | 10 | NetworkSettingsData( void ); |
11 | ~NetworkSettingsData( void ); | 11 | ~NetworkSettingsData( void ); |
12 | 12 | ||
13 | void loadSettings( void ); | 13 | void loadSettings( void ); |
14 | QString saveSettings( void ); | 14 | QString saveSettings( void ); |
15 | 15 | ||
16 | QString generateSettings( void ); | 16 | QString generateSettings( void ); |
17 | 17 | ||
18 | bool isModified( void ); | 18 | bool isModified( void ); |
19 | inline void setModified( bool M ) | 19 | inline void setModified( bool M ) |
20 | { ForceModified = M; } | 20 | { ForceModified = M; } |
21 | 21 | ||
22 | QList<NetworkSetup> collectPossible( const QString & Interface ); | 22 | QList<NetworkSetup> collectPossible( const QString & Interface ); |
23 | // return TRUE if we need gui to decide | 23 | // return TRUE if we need gui to decide |
24 | bool canStart( const QString & Interface ); | 24 | bool canStart( const QString & Interface ); |
25 | // return TRUE if there are vpns that could be triggered | 25 | // return TRUE if there are vpns that could be triggered |
26 | // by this interface | 26 | // by this interface |
27 | bool couldBeTriggered( const QString & Interface ); | 27 | bool couldBeTriggered( const QString & Interface ); |
28 | 28 | ||
29 | private : | 29 | private : |
30 | 30 | ||
31 | QList<NetworkSetup> collectTriggered( const QString &Interface ); | 31 | QList<NetworkSetup> collectTriggered( const QString &Interface ); |
32 | bool createPath( const QStringList & SL ); | ||
32 | bool ForceModified; | 33 | bool ForceModified; |
33 | 34 | ||
34 | // collect strings in config file nobody wants | 35 | // collect strings in config file nobody wants |
35 | QStringList LeftOvers; | 36 | QStringList LeftOvers; |
36 | }; | 37 | }; |
37 | 38 | ||
38 | #endif | 39 | #endif |
diff --git a/noncore/settings/networksettings2/opietooth2/Opietooth.cpp b/noncore/settings/networksettings2/opietooth2/Opietooth.cpp index 8323549..fc30bf8 100644 --- a/noncore/settings/networksettings2/opietooth2/Opietooth.cpp +++ b/noncore/settings/networksettings2/opietooth2/Opietooth.cpp | |||
@@ -1,1167 +1,1175 @@ | |||
1 | #include <opie2/odebug.h> | 1 | #include <opie2/odebug.h> |
2 | #include <opie2/oledbox.h> | 2 | #include <opie2/oledbox.h> |
3 | #include <opie2/ofiledialog.h> | 3 | #include <opie2/ofiledialog.h> |
4 | 4 | ||
5 | using namespace Opie::Core; | 5 | using namespace Opie::Core; |
6 | using namespace Opie::Ui; | 6 | using namespace Opie::Ui; |
7 | 7 | ||
8 | #include <qpe/resource.h> | 8 | #include <qpe/resource.h> |
9 | #include <qapplication.h> | 9 | #include <qapplication.h> |
10 | #include <qcheckbox.h> | 10 | #include <qcheckbox.h> |
11 | #include <qcombobox.h> | 11 | #include <qcombobox.h> |
12 | #include <qdialog.h> | 12 | #include <qdialog.h> |
13 | #include <qdir.h> | 13 | #include <qdir.h> |
14 | #include <qfile.h> | 14 | #include <qfile.h> |
15 | #include <qgroupbox.h> | 15 | #include <qgroupbox.h> |
16 | #include <qheader.h> | 16 | #include <qheader.h> |
17 | #include <qlabel.h> | 17 | #include <qlabel.h> |
18 | #include <qlayout.h> | 18 | #include <qlayout.h> |
19 | #include <qlistbox.h> | 19 | #include <qlistbox.h> |
20 | #include <qlistview.h> | 20 | #include <qlistview.h> |
21 | #include <qmessagebox.h> | 21 | #include <qmessagebox.h> |
22 | #include <qprogressbar.h> | 22 | #include <qprogressbar.h> |
23 | #include <qpushbutton.h> | 23 | #include <qpushbutton.h> |
24 | #include <qscrollbar.h> | 24 | #include <qscrollbar.h> |
25 | #include <qtextstream.h> | 25 | #include <qtextstream.h> |
26 | #include <qtextview.h> | 26 | #include <qtextview.h> |
27 | 27 | ||
28 | #include <Opietooth.h> | 28 | #include <Opietooth.h> |
29 | #include <OTDriver.h> | 29 | #include <OTDriver.h> |
30 | #include <OTPeer.h> | 30 | #include <OTPeer.h> |
31 | #include <OTGateway.h> | 31 | #include <OTGateway.h> |
32 | #include <OTSDPAttribute.h> | 32 | #include <OTSDPAttribute.h> |
33 | #include <OTSDPService.h> | 33 | #include <OTSDPService.h> |
34 | #include <OTInquiry.h> | 34 | #include <OTInquiry.h> |
35 | 35 | ||
36 | #include <system.h> | 36 | #include <system.h> |
37 | 37 | ||
38 | using namespace Opietooth2; | 38 | using namespace Opietooth2; |
39 | 39 | ||
40 | namespace Opietooth2 { | 40 | namespace Opietooth2 { |
41 | 41 | ||
42 | class PeerLVI : public QListViewItem { | 42 | class PeerLVI : public QListViewItem { |
43 | 43 | ||
44 | public : | 44 | public : |
45 | 45 | ||
46 | PeerLVI( OTPeer * P, QListView * it ) : QListViewItem (it) { | 46 | PeerLVI( OTPeer * P, QListView * it ) : QListViewItem (it) { |
47 | Peer = P; | 47 | Peer = P; |
48 | } | 48 | } |
49 | ~PeerLVI( void ) { | 49 | ~PeerLVI( void ) { |
50 | } | 50 | } |
51 | 51 | ||
52 | inline OTPeer * peer( void ) | 52 | inline OTPeer * peer( void ) |
53 | { return Peer; } | 53 | { return Peer; } |
54 | 54 | ||
55 | private : | 55 | private : |
56 | 56 | ||
57 | OTPeer * Peer; | 57 | OTPeer * Peer; |
58 | }; | 58 | }; |
59 | 59 | ||
60 | class ChannelLVI : public QListViewItem { | 60 | class ChannelLVI : public QListViewItem { |
61 | 61 | ||
62 | public : | 62 | public : |
63 | 63 | ||
64 | ChannelLVI( int Ch, QListViewItem * it ) : QListViewItem (it) { | 64 | ChannelLVI( int Ch, QListViewItem * it ) : QListViewItem (it) { |
65 | Channel = Ch; | 65 | Channel = Ch; |
66 | } | 66 | } |
67 | ~ChannelLVI( void ) { | 67 | ~ChannelLVI( void ) { |
68 | } | 68 | } |
69 | 69 | ||
70 | inline int channel( void ) | 70 | inline int channel( void ) |
71 | { return Channel; } | 71 | { return Channel; } |
72 | 72 | ||
73 | private : | 73 | private : |
74 | 74 | ||
75 | int Channel; | 75 | int Channel; |
76 | }; | 76 | }; |
77 | 77 | ||
78 | class DriverLVI : public QListViewItem { | 78 | class DriverLVI : public QListViewItem { |
79 | 79 | ||
80 | public : | 80 | public : |
81 | 81 | ||
82 | DriverLVI( OTDriver * P, QListView * it ) : QListViewItem (it) { | 82 | DriverLVI( OTDriver * P, QListView * it ) : QListViewItem (it) { |
83 | Driver = P; | 83 | Driver = P; |
84 | } | 84 | } |
85 | ~DriverLVI( void ) { | 85 | ~DriverLVI( void ) { |
86 | } | 86 | } |
87 | 87 | ||
88 | inline OTDriver * driver( void ) | 88 | inline OTDriver * driver( void ) |
89 | { return Driver; } | 89 | { return Driver; } |
90 | 90 | ||
91 | private : | 91 | private : |
92 | 92 | ||
93 | OTDriver * Driver; | 93 | OTDriver * Driver; |
94 | }; | 94 | }; |
95 | 95 | ||
96 | class LinkKeyLVI : public QListViewItem { | 96 | class LinkKeyLVI : public QListViewItem { |
97 | 97 | ||
98 | public : | 98 | public : |
99 | 99 | ||
100 | LinkKeyLVI( int Ch, QListView * it ) : QListViewItem (it) { | 100 | LinkKeyLVI( int Ch, QListView * it ) : QListViewItem (it) { |
101 | LinkKey = Ch; | 101 | LinkKey = Ch; |
102 | } | 102 | } |
103 | ~LinkKeyLVI( void ) { | 103 | ~LinkKeyLVI( void ) { |
104 | } | 104 | } |
105 | 105 | ||
106 | inline int index( void ) | 106 | inline int index( void ) |
107 | { return LinkKey; } | 107 | { return LinkKey; } |
108 | 108 | ||
109 | private : | 109 | private : |
110 | 110 | ||
111 | int LinkKey; | 111 | int LinkKey; |
112 | }; | 112 | }; |
113 | }; | 113 | }; |
114 | 114 | ||
115 | // | 115 | // |
116 | // | 116 | // |
117 | // | 117 | // |
118 | // | 118 | // |
119 | // | 119 | // |
120 | 120 | ||
121 | OTSniffing::OTSniffing( QWidget * parent ) : OTSniffGUI( parent ) { | 121 | OTSniffing::OTSniffing( QWidget * parent ) : OTSniffGUI( parent ) { |
122 | 122 | ||
123 | OT = OTGateway::getOTGateway(); | 123 | OT = OTGateway::getOTGateway(); |
124 | HciDump = 0; | 124 | HciDump = 0; |
125 | } | 125 | } |
126 | 126 | ||
127 | OTSniffing::~OTSniffing() { | 127 | OTSniffing::~OTSniffing() { |
128 | SLOT_Trace( 0 ); | 128 | SLOT_Trace( 0 ); |
129 | } | 129 | } |
130 | 130 | ||
131 | void OTSniffing::SLOT_Trace( bool Run ) { | 131 | void OTSniffing::SLOT_Trace( bool Run ) { |
132 | 132 | ||
133 | if( ! Run ) { | 133 | if( ! Run ) { |
134 | if ( HciDump ) { | 134 | if ( HciDump ) { |
135 | HciDump->process().kill(); | 135 | HciDump->process().kill(); |
136 | delete HciDump; | 136 | delete HciDump; |
137 | } | 137 | } |
138 | HciDump = 0; | 138 | HciDump = 0; |
139 | return; | 139 | return; |
140 | } | 140 | } |
141 | 141 | ||
142 | HciDump = new MyProcess(); | 142 | HciDump = new MyProcess(); |
143 | QStringList SL; | 143 | QStringList SL; |
144 | 144 | ||
145 | SL << "/usr/sbin/hcidump"; | 145 | SL << "/usr/sbin/hcidump"; |
146 | switch( DataFormat_CB->currentItem() ) { | 146 | switch( DataFormat_CB->currentItem() ) { |
147 | case 0 : // Hex | 147 | case 0 : // Hex |
148 | SL << "-x"; | 148 | SL << "-x"; |
149 | break; | 149 | break; |
150 | case 1 : // Ascii | 150 | case 1 : // Ascii |
151 | SL << "-a"; | 151 | SL << "-a"; |
152 | break; | 152 | break; |
153 | case 2 : // both | 153 | case 2 : // both |
154 | SL << "-X"; | 154 | SL << "-X"; |
155 | break; | 155 | break; |
156 | } | 156 | } |
157 | 157 | ||
158 | SL << "-i"; | 158 | SL << "-i"; |
159 | SL << OT->scanWith()->devname(); | 159 | SL << OT->scanWith()->devname(); |
160 | 160 | ||
161 | connect( HciDump, | 161 | connect( HciDump, |
162 | SIGNAL( stdoutLine( const QString & ) ), | 162 | SIGNAL( stdoutLine( const QString & ) ), |
163 | this, | 163 | this, |
164 | SLOT( SLOT_Show( const QString & ) ) ); | 164 | SLOT( SLOT_Show( const QString & ) ) ); |
165 | 165 | ||
166 | connect( HciDump, | 166 | connect( HciDump, |
167 | SIGNAL(processExited(MyProcess*) ), | 167 | SIGNAL(processExited(MyProcess*) ), |
168 | this, | 168 | this, |
169 | SLOT( SLOT_ProcessExited(MyProcess*) ) ); | 169 | SLOT( SLOT_ProcessExited(MyProcess*) ) ); |
170 | 170 | ||
171 | HciDump->process() << SL; | 171 | HciDump->process() << SL; |
172 | 172 | ||
173 | if( ! HciDump->process().start( OProcess::DontCare, | 173 | if( ! HciDump->process().start( OProcess::DontCare, |
174 | OProcess::AllOutput ) | 174 | OProcess::AllOutput ) |
175 | ) { | 175 | ) { |
176 | QMessageBox::warning(0, | 176 | QMessageBox::warning(0, |
177 | tr("Run hcidump"), | 177 | tr("Run hcidump"), |
178 | tr("Cannot start %1").arg(SL.join(" ")) | 178 | tr("Cannot start %1").arg(SL.join(" ")) |
179 | ); | 179 | ); |
180 | delete HciDump; | 180 | delete HciDump; |
181 | HciDump = 0; | 181 | HciDump = 0; |
182 | } | 182 | } |
183 | 183 | ||
184 | } | 184 | } |
185 | 185 | ||
186 | void OTSniffing::SLOT_Show( const QString & S ) { | 186 | void OTSniffing::SLOT_Show( const QString & S ) { |
187 | printf( "%s\n", S.latin1() ); | ||
188 | Output_TV->setText( Output_TV->text() + S + "\n" ); | 187 | Output_TV->setText( Output_TV->text() + S + "\n" ); |
189 | 188 | ||
190 | QScrollBar *scroll = Output_TV->verticalScrollBar(); | 189 | QScrollBar *scroll = Output_TV->verticalScrollBar(); |
191 | scroll->setValue(scroll->maxValue()); | 190 | scroll->setValue(scroll->maxValue()); |
192 | //Output_LB->insertItem( S ); | 191 | //Output_LB->insertItem( S ); |
193 | //Output_LB->setCurrentItem( Output_LB->count()-1 ); | 192 | //Output_LB->setCurrentItem( Output_LB->count()-1 ); |
194 | //Output_LB->ensureCurrentVisible(); | 193 | //Output_LB->ensureCurrentVisible(); |
195 | } | 194 | } |
196 | 195 | ||
197 | void OTSniffing::SLOT_ProcessExited( MyProcess * ) { | 196 | void OTSniffing::SLOT_ProcessExited( MyProcess * ) { |
198 | printf( "Exited\n" ); | 197 | printf( "Exited\n" ); |
199 | delete HciDump; | 198 | delete HciDump; |
200 | HciDump = 0; | 199 | HciDump = 0; |
201 | } | 200 | } |
202 | 201 | ||
203 | void OTSniffing::SLOT_Save( void ) { | 202 | void OTSniffing::SLOT_Save( void ) { |
204 | QString S = OFileDialog::getSaveFileName( | 203 | QString S = OFileDialog::getSaveFileName( |
205 | OFileSelector::Extended, | 204 | OFileSelector::Extended, |
206 | QDir::home().path(), | 205 | QDir::home().path(), |
207 | QString::null, | 206 | QString::null, |
208 | MimeTypes(), | 207 | MimeTypes(), |
209 | this ); | 208 | this ); |
210 | 209 | ||
211 | if( ! S.isEmpty() ) { | 210 | if( ! S.isEmpty() ) { |
212 | QFile F( S ); | 211 | QFile F( S ); |
213 | if( ! F.open( IO_WriteOnly ) ) { | 212 | if( ! F.open( IO_WriteOnly ) ) { |
214 | QMessageBox::warning(0, | 213 | QMessageBox::warning(0, |
215 | tr("Save log"), | 214 | tr("Save log"), |
216 | tr("Cannot open %1").arg(S) | 215 | tr("Cannot open %1").arg(S) |
217 | ); | 216 | ); |
218 | return; | 217 | return; |
219 | } | 218 | } |
220 | QTextStream TS( &F ); | 219 | QTextStream TS( &F ); |
221 | TS << S << endl; | 220 | TS << S << endl; |
222 | } | 221 | } |
223 | } | 222 | } |
224 | 223 | ||
225 | void OTSniffing::SLOT_Load( void ) { | 224 | void OTSniffing::SLOT_Load( void ) { |
226 | QString S = OFileDialog::getOpenFileName( | 225 | QString S = OFileDialog::getOpenFileName( |
227 | OFileSelector::Extended, | 226 | OFileSelector::Extended, |
228 | QDir::home().path(), | 227 | QDir::home().path(), |
229 | QString::null, | 228 | QString::null, |
230 | MimeTypes(), | 229 | MimeTypes(), |
231 | this ); | 230 | this ); |
232 | 231 | ||
233 | if( ! S.isEmpty() ) { | 232 | if( ! S.isEmpty() ) { |
234 | QFile F( S ); | 233 | QFile F( S ); |
235 | if( ! F.open( IO_ReadOnly ) ) { | 234 | if( ! F.open( IO_ReadOnly ) ) { |
236 | QMessageBox::warning(0, | 235 | QMessageBox::warning(0, |
237 | tr("Save log"), | 236 | tr("Save log"), |
238 | tr("Cannot open %1").arg(S) | 237 | tr("Cannot open %1").arg(S) |
239 | ); | 238 | ); |
240 | return; | 239 | return; |
241 | } | 240 | } |
242 | QTextStream TS ( &F ); | 241 | QTextStream TS ( &F ); |
243 | SLOT_ClearLog(); | 242 | SLOT_ClearLog(); |
244 | S = TS.read(); | 243 | S = TS.read(); |
245 | // Output_LB->insertStringList( QStringList::split( "\n", S ) ); | 244 | // Output_LB->insertStringList( QStringList::split( "\n", S ) ); |
246 | Output_TV->setText( S ); | 245 | Output_TV->setText( S ); |
247 | } | 246 | } |
248 | } | 247 | } |
249 | 248 | ||
250 | void OTSniffing::SLOT_ClearLog( void ) { | 249 | void OTSniffing::SLOT_ClearLog( void ) { |
251 | // Output_LB->clear(); | 250 | // Output_LB->clear(); |
252 | Output_TV->setText( "" ); | 251 | Output_TV->setText( "" ); |
253 | } | 252 | } |
254 | 253 | ||
255 | // | 254 | // |
256 | // | 255 | // |
257 | // | 256 | // |
258 | // | 257 | // |
259 | // | 258 | // |
260 | 259 | ||
261 | OTPairing::OTPairing( QWidget * parent, OTIcons * _IC ) : | 260 | OTPairing::OTPairing( QWidget * parent, OTIcons * _IC ) : |
262 | OTPairingGUI( parent ) { | 261 | OTPairingGUI( parent ) { |
263 | 262 | ||
264 | OT = OTGateway::getOTGateway(); | 263 | OT = OTGateway::getOTGateway(); |
265 | Icons = (_IC ) ? _IC : new OTIcons(); | 264 | Icons = (_IC ) ? _IC : new OTIcons(); |
266 | MyIcons = (_IC == 0 ); | 265 | MyIcons = (_IC == 0 ); |
267 | 266 | ||
268 | // unpairing can only be done if bluetooth is disabled | 267 | // unpairing can only be done if bluetooth is disabled |
269 | Unpair_But->setEnabled( ! OT->isEnabled() ); | 268 | Unpair_But->setEnabled( ! OT->isEnabled() ); |
270 | if( ! OT->isEnabled() ) { | 269 | if( ! OT->isEnabled() ) { |
271 | Unpair_LBL->hide(); | 270 | Unpair_LBL->hide(); |
272 | } else { | 271 | } else { |
273 | Unpair_LBL->show(); | 272 | Unpair_LBL->show(); |
274 | } | 273 | } |
275 | 274 | ||
276 | // open linkkey file and load pairs | 275 | // open linkkey file and load pairs |
277 | LinkKeyArray Keys = OT->getLinkKeys(); | 276 | LinkKeyArray Keys = OT->getLinkKeys(); |
278 | LinkKeyLVI * it; | 277 | LinkKeyLVI * it; |
279 | OTPeer * P; | 278 | OTPeer * P; |
280 | OTDriver * D; | 279 | OTDriver * D; |
281 | 280 | ||
282 | for( unsigned int i = 0 ; | 281 | for( unsigned int i = 0 ; |
283 | i < Keys.count(); | 282 | i < Keys.count(); |
284 | i ++ ) { | 283 | i ++ ) { |
285 | 284 | ||
286 | it = new LinkKeyLVI( i, Pairs_LV ); | 285 | it = new LinkKeyLVI( i, Pairs_LV ); |
287 | 286 | ||
288 | P = 0; | 287 | P = 0; |
289 | D = OT->findDriver( Keys[i].from() ); | 288 | D = OT->findDriver( Keys[i].from() ); |
290 | 289 | ||
291 | if( D ) { | 290 | if( D ) { |
292 | it->setText( 0, D->devname() ); | 291 | it->setText( 0, D->devname() ); |
293 | 292 | ||
294 | // we are source | 293 | // we are source |
295 | P = OT->findPeer( Keys[i].to() ); | 294 | P = OT->findPeer( Keys[i].to() ); |
296 | 295 | ||
297 | if( P ) { | 296 | if( P ) { |
298 | // put name | 297 | // put name |
299 | it->setText( 1, P->name() ); | 298 | it->setText( 1, P->name() ); |
300 | } else { | 299 | } else { |
301 | // unknown | 300 | // unknown |
302 | it->setText( 1, Keys[i].to().toString() ); | 301 | it->setText( 1, Keys[i].to().toString() ); |
303 | } | 302 | } |
304 | 303 | ||
305 | // and put address as sub | 304 | // and put address as sub |
306 | QListViewItem * Sub = new QListViewItem( it ); | 305 | QListViewItem * Sub = new QListViewItem( it ); |
307 | Sub->setText( 0, D->address().toString() ); | 306 | Sub->setText( 0, D->address().toString() ); |
308 | Sub->setText( 1, Keys[i].to().toString() ); | 307 | Sub->setText( 1, Keys[i].to().toString() ); |
309 | } else { | 308 | } else { |
310 | // perhaps we are destination | 309 | // perhaps we are destination |
311 | D = OT->findDriver( Keys[i].to() ); | 310 | D = OT->findDriver( Keys[i].to() ); |
312 | 311 | ||
313 | if( D ) { | 312 | if( D ) { |
314 | it->setText( 1, D->devname() ); | 313 | it->setText( 1, D->devname() ); |
315 | 314 | ||
316 | // we are source | 315 | // we are source |
317 | P = OT->findPeer( Keys[i].from() ); | 316 | P = OT->findPeer( Keys[i].from() ); |
318 | 317 | ||
319 | if( P ) { | 318 | if( P ) { |
320 | // put name | 319 | // put name |
321 | it->setText( 0, P->name() ); | 320 | it->setText( 0, P->name() ); |
322 | } else { | 321 | } else { |
323 | // unknown | 322 | // unknown |
324 | it->setText( 0, Keys[i].from().toString() ); | 323 | it->setText( 0, Keys[i].from().toString() ); |
325 | } | 324 | } |
326 | 325 | ||
327 | // and put address as sub | 326 | // and put address as sub |
328 | QListViewItem * Sub = new QListViewItem( it ); | 327 | QListViewItem * Sub = new QListViewItem( it ); |
329 | Sub->setText( 0, Keys[i].from().toString() ); | 328 | Sub->setText( 0, Keys[i].from().toString() ); |
330 | Sub->setText( 1, D->address().toString() ); | 329 | Sub->setText( 1, D->address().toString() ); |
331 | } else { | 330 | } else { |
332 | // nor source nor destination -> unknown | 331 | // nor source nor destination -> unknown |
333 | it->setText( 0, Keys[i].from().toString() ); | 332 | it->setText( 0, Keys[i].from().toString() ); |
334 | it->setText( 1, Keys[i].to().toString() ); | 333 | it->setText( 1, Keys[i].to().toString() ); |
335 | } | 334 | } |
336 | } | 335 | } |
337 | } | 336 | } |
338 | } | 337 | } |
339 | 338 | ||
340 | 339 | ||
341 | OTPairing::~OTPairing() { | 340 | OTPairing::~OTPairing() { |
342 | if( MyIcons ) | 341 | if( MyIcons ) |
343 | delete Icons; | 342 | delete Icons; |
344 | OTGateway::releaseOTGateway(); | 343 | OTGateway::releaseOTGateway(); |
345 | } | 344 | } |
346 | 345 | ||
347 | void OTPairing::SLOT_Unpair( ) { | 346 | void OTPairing::SLOT_Unpair( ) { |
348 | // find selected pair | 347 | // find selected pair |
349 | 348 | ||
350 | QListViewItem * it = Pairs_LV->firstChild(); | 349 | QListViewItem * it = Pairs_LV->firstChild(); |
351 | while( it ) { | 350 | while( it ) { |
352 | if( it->isSelected() ) { | 351 | if( it->isSelected() ) { |
353 | // confirm ? | 352 | // confirm ? |
354 | if( QMessageBox::warning(0, | 353 | if( QMessageBox::warning(0, |
355 | tr("Break pairing"), | 354 | tr("Break pairing"), |
356 | tr("Sure ?"), | 355 | tr("Sure ?"), |
357 | tr("Yes, break"), | 356 | tr("Yes, break"), |
358 | tr("No, don't break") ) == 0 ) { | 357 | tr("No, don't break") ) == 0 ) { |
359 | LinkKeyLVI * KPIt = (LinkKeyLVI *)it; | 358 | LinkKeyLVI * KPIt = (LinkKeyLVI *)it; |
360 | // break | 359 | // break |
361 | OT->removeLinkKey( KPIt->index() ); | 360 | OT->removeLinkKey( KPIt->index() ); |
362 | delete KPIt; | 361 | delete KPIt; |
363 | } | 362 | } |
364 | return; | 363 | return; |
365 | } | 364 | } |
366 | it= it->nextSibling(); | 365 | it= it->nextSibling(); |
367 | } | 366 | } |
368 | } | 367 | } |
369 | 368 | ||
370 | // | 369 | // |
371 | // | 370 | // |
372 | // | 371 | // |
373 | // | 372 | // |
374 | // | 373 | // |
375 | 374 | ||
376 | OTScan::OTScan( QWidget * parent, OTIcons * _IC ) : | 375 | OTScan::OTScan( QWidget * parent, OTIcons * _IC ) : |
377 | OTScanGUI( parent ), Filter() { | 376 | OTScanGUI( parent ), Filter() { |
378 | 377 | ||
379 | OT = OTGateway::getOTGateway(); | 378 | OT = OTGateway::getOTGateway(); |
379 | |||
380 | Icons = (_IC ) ? _IC : new OTIcons(); | 380 | Icons = (_IC ) ? _IC : new OTIcons(); |
381 | MyIcons = (_IC == 0 ); | 381 | MyIcons = (_IC == 0 ); |
382 | DetectedPeers_LV->header()->hide(); | 382 | DetectedPeers_LV->header()->hide(); |
383 | Current = 0; | 383 | Current = 0; |
384 | SelectedPeer = 0; | 384 | SelectedPeer = 0; |
385 | SelectedChannel = 0; | 385 | SelectedChannel = 0; |
386 | 386 | ||
387 | StrengthTimer = new QTimer( this ); | 387 | StrengthTimer = new QTimer( this ); |
388 | connect( StrengthTimer, | 388 | connect( StrengthTimer, |
389 | SIGNAL( timeout()), | 389 | SIGNAL( timeout()), |
390 | this, | 390 | this, |
391 | SLOT( SLOT_UpdateStrength()) | 391 | SLOT( SLOT_UpdateStrength()) |
392 | ); | 392 | ); |
393 | 393 | ||
394 | connect( OT, | 394 | connect( OT, |
395 | SIGNAL( detectedPeer( OTPeer *, bool )), | 395 | SIGNAL( detectedPeer( OTPeer *, bool )), |
396 | this, | 396 | this, |
397 | SLOT( SLOT_NewPeer( OTPeer *, bool )) | 397 | SLOT( SLOT_NewPeer( OTPeer *, bool )) |
398 | ); | 398 | ); |
399 | connect( OT, | 399 | connect( OT, |
400 | SIGNAL( finishedDetecting()), | 400 | SIGNAL( finishedDetecting()), |
401 | this, | 401 | this, |
402 | SLOT( SLOT_FinishedDetecting()) | 402 | SLOT( SLOT_FinishedDetecting()) |
403 | ); | 403 | ); |
404 | 404 | ||
405 | // populate with peers we already know about | 405 | // populate with peers we already know about |
406 | const PeerVector & P = OT->peers(); | 406 | const PeerVector & P = OT->peers(); |
407 | for( unsigned int i = 0; | 407 | for( unsigned int i = 0; |
408 | i < P.count(); | 408 | i < P.count(); |
409 | i ++ ) { | 409 | i ++ ) { |
410 | SLOT_NewPeer( P[i], TRUE ); | 410 | SLOT_NewPeer( P[i], TRUE ); |
411 | } | 411 | } |
412 | 412 | ||
413 | // populate State fram | 413 | // populate State fram |
414 | { QHBoxLayout * H =new QHBoxLayout( State_Frm ); | 414 | { QHBoxLayout * H =new QHBoxLayout( State_Frm ); |
415 | 415 | ||
416 | Paired_Led = new OLedBox( green, State_Frm ); | 416 | Paired_Led = new OLedBox( green, State_Frm ); |
417 | QLabel * L1 = new QLabel( tr( "Paired" ), State_Frm ); | 417 | QLabel * L1 = new QLabel( tr( "Paired" ), State_Frm ); |
418 | 418 | ||
419 | H->addWidget( Paired_Led ); | 419 | H->addWidget( Paired_Led ); |
420 | H->addWidget( L1 ); | 420 | H->addWidget( L1 ); |
421 | H->addStretch( 1 ); | 421 | H->addStretch( 1 ); |
422 | } | 422 | } |
423 | } | 423 | } |
424 | 424 | ||
425 | OTScan::~OTScan() { | 425 | OTScan::~OTScan() { |
426 | if( MyIcons ) | 426 | if( MyIcons ) |
427 | delete Icons; | 427 | delete Icons; |
428 | OTGateway::releaseOTGateway(); | 428 | OTGateway::releaseOTGateway(); |
429 | 429 | ||
430 | // send all peers that we do not care about states | 430 | // send all peers that we do not care about states |
431 | QListViewItem * Lit = DetectedPeers_LV->firstChild(); | 431 | QListViewItem * Lit = DetectedPeers_LV->firstChild(); |
432 | while( Lit ) { | 432 | while( Lit ) { |
433 | ((PeerLVI *)Lit)->peer()->stopFindingOutState( ); | 433 | ((PeerLVI *)Lit)->peer()->stopFindingOutState( ); |
434 | Lit = Lit->nextSibling(); | 434 | Lit = Lit->nextSibling(); |
435 | } | 435 | } |
436 | } | 436 | } |
437 | 437 | ||
438 | // static scan dialog function | 438 | // static scan dialog function |
439 | int OTScan::getDevice( OTPeer *& Peer, | 439 | int OTScan::getDevice( OTPeer *& Peer, |
440 | int & Channel, | 440 | int & Channel, |
441 | OTGateway * OT, | 441 | OTGateway * OT, |
442 | const UUIDVector & Filter, | 442 | const UUIDVector & Filter, |
443 | QWidget* Parent ) { | 443 | QWidget* Parent ) { |
444 | bool IsUp = 0; | 444 | bool IsUp = 0; |
445 | unsigned int i; | 445 | unsigned int i; |
446 | 446 | ||
447 | if( ! OT->isEnabled() ) { | ||
448 | QMessageBox::warning( 0, | ||
449 | tr("Scanning problem"), | ||
450 | tr("Bluetooth not enabled" ) | ||
451 | ); | ||
452 | return QDialog::Rejected; | ||
453 | } | ||
454 | |||
447 | // check if bluetooth is up | 455 | // check if bluetooth is up |
448 | OTDriverList & DL = OT->getDriverList(); | 456 | OTDriverList & DL = OT->getDriverList(); |
449 | for( i = 0; | 457 | for( i = 0; |
450 | i < DL.count(); | 458 | i < DL.count(); |
451 | i ++ ) { | 459 | i ++ ) { |
452 | if( DL[i]->isUp() ) { | 460 | if( DL[i]->isUp() ) { |
453 | // one device that is up found | 461 | // one device that is up found |
454 | IsUp = 1; | 462 | IsUp = 1; |
455 | break; | 463 | break; |
456 | } | 464 | } |
457 | } | 465 | } |
458 | 466 | ||
459 | // use this driver | 467 | // use this driver |
460 | OT->setScanWith( OT->driver(i) ); | 468 | OT->setScanWith( OT->driver(i) ); |
461 | 469 | ||
462 | // create dialog | 470 | // create dialog |
463 | QDialog * Dlg = new QDialog( Parent, 0, TRUE ); | 471 | QDialog * Dlg = new QDialog( Parent, 0, TRUE ); |
464 | QVBoxLayout * V = new QVBoxLayout( Dlg ); | 472 | QVBoxLayout * V = new QVBoxLayout( Dlg ); |
465 | OTScan * Scn = new OTScan( Dlg ); | 473 | OTScan * Scn = new OTScan( Dlg ); |
466 | 474 | ||
467 | connect( Scn, | 475 | connect( Scn, |
468 | SIGNAL( selected() ), | 476 | SIGNAL( selected() ), |
469 | Dlg, | 477 | Dlg, |
470 | SLOT( accept() ) | 478 | SLOT( accept() ) |
471 | ); | 479 | ); |
472 | 480 | ||
473 | if( Filter ) { | 481 | if( Filter ) { |
474 | Scn->setScanFilter( Filter ); | 482 | Scn->setScanFilter( Filter ); |
475 | } | 483 | } |
476 | 484 | ||
477 | V->addWidget( Scn ); | 485 | V->addWidget( Scn ); |
478 | Dlg->setCaption( tr("Scan Neighbourhood" ) ); | 486 | Dlg->setCaption( tr("Scan Neighbourhood" ) ); |
479 | Dlg->showMaximized(); | 487 | Dlg->showMaximized(); |
480 | int rv = Dlg->exec(); | 488 | int rv = Dlg->exec(); |
481 | 489 | ||
482 | if( rv == QDialog::Accepted ) { | 490 | if( rv == QDialog::Accepted ) { |
483 | // get peer | 491 | // get peer |
484 | Peer = Scn->selectedPeer(); | 492 | Peer = Scn->selectedPeer(); |
485 | if( Peer == 0 ) { | 493 | if( Peer == 0 ) { |
486 | // no peer selected | 494 | // no peer selected |
487 | rv = QDialog::Rejected; | 495 | rv = QDialog::Rejected; |
488 | } else { | 496 | } else { |
489 | Channel = Scn->selectedChannel(); | 497 | Channel = Scn->selectedChannel(); |
490 | } | 498 | } |
491 | } | 499 | } |
492 | 500 | ||
493 | delete Dlg; | 501 | delete Dlg; |
494 | 502 | ||
495 | return rv; | 503 | return rv; |
496 | } | 504 | } |
497 | 505 | ||
498 | void OTScan::setScanFilter( const UUIDVector & V ) { | 506 | void OTScan::setScanFilter( const UUIDVector & V ) { |
499 | Filter = V; | 507 | Filter = V; |
500 | } | 508 | } |
501 | 509 | ||
502 | void OTScan::resetScanFilter( void ) { | 510 | void OTScan::resetScanFilter( void ) { |
503 | Filter.truncate(0); | 511 | Filter.truncate(0); |
504 | } | 512 | } |
505 | 513 | ||
506 | void OTScan::SLOT_DoScan( bool DoIt ) { | 514 | void OTScan::SLOT_DoScan( bool DoIt ) { |
507 | if( DoIt ) { | 515 | if( DoIt ) { |
508 | OT->scanNeighbourhood(); | 516 | OT->scanNeighbourhood(); |
509 | } else { | 517 | } else { |
510 | OT->stopScanOfNeighbourhood(); | 518 | OT->stopScanOfNeighbourhood(); |
511 | } | 519 | } |
512 | 520 | ||
513 | scanMode( DoIt ); | 521 | scanMode( DoIt ); |
514 | } | 522 | } |
515 | 523 | ||
516 | // double clicked on a device | 524 | // double clicked on a device |
517 | void OTScan::SLOT_Selected( QListViewItem * it ) { | 525 | void OTScan::SLOT_Selected( QListViewItem * it ) { |
518 | if( ! it ) | 526 | if( ! it ) |
519 | return; | 527 | return; |
520 | 528 | ||
521 | if( Filter.count() > 0 ) { | 529 | if( Filter.count() > 0 ) { |
522 | // filter on service | 530 | // filter on service |
523 | if( it->depth() == 0 ) { | 531 | if( it->depth() == 0 ) { |
524 | // select a service and not a device | 532 | // select a service and not a device |
525 | return; | 533 | return; |
526 | } | 534 | } |
527 | 535 | ||
528 | // store result | 536 | // store result |
529 | SelectedPeer = ((PeerLVI *)it->parent())->peer(); | 537 | SelectedPeer = ((PeerLVI *)it->parent())->peer(); |
530 | SelectedChannel = ((ChannelLVI *)it)->channel(); | 538 | SelectedChannel = ((ChannelLVI *)it)->channel(); |
531 | } else { | 539 | } else { |
532 | // click on device | 540 | // click on device |
533 | if( it->depth() != 0 ) { | 541 | if( it->depth() != 0 ) { |
534 | return; | 542 | return; |
535 | } | 543 | } |
536 | 544 | ||
537 | SelectedPeer = ((PeerLVI *)it)->peer(); | 545 | SelectedPeer = ((PeerLVI *)it)->peer(); |
538 | SelectedChannel = 0; | 546 | SelectedChannel = 0; |
539 | } | 547 | } |
540 | odebug << "Selected " << SelectedPeer->address().toString() << | 548 | odebug << "Selected " << SelectedPeer->address().toString() << |
541 | " Channel " << SelectedChannel << oendl; | 549 | " Channel " << SelectedChannel << oendl; |
542 | emit selected(); | 550 | emit selected(); |
543 | } | 551 | } |
544 | 552 | ||
545 | void OTScan::SLOT_FinishedDetecting( ) { | 553 | void OTScan::SLOT_FinishedDetecting( ) { |
546 | scanMode( false ); | 554 | scanMode( false ); |
547 | } | 555 | } |
548 | 556 | ||
549 | void OTScan::SLOT_CleanupOld( ) { | 557 | void OTScan::SLOT_CleanupOld( ) { |
550 | 558 | ||
551 | // iterate over all peers and find those that | 559 | // iterate over all peers and find those that |
552 | // are down and have no pairing info | 560 | // are down and have no pairing info |
553 | OTPeer * TheP; | 561 | OTPeer * TheP; |
554 | const LinkKeyArray & Keys = OT->getLinkKeys(); | 562 | const LinkKeyArray & Keys = OT->getLinkKeys(); |
555 | 563 | ||
556 | QListViewItem * Lit = DetectedPeers_LV->firstChild(); | 564 | QListViewItem * Lit = DetectedPeers_LV->firstChild(); |
557 | while( Lit ) { | 565 | while( Lit ) { |
558 | TheP = ((PeerLVI *)Lit)->peer(); | 566 | TheP = ((PeerLVI *)Lit)->peer(); |
559 | if( TheP->state() == OTPeer::Peer_Down ) { | 567 | if( TheP->state() == OTPeer::Peer_Down ) { |
560 | unsigned int k; | 568 | unsigned int k; |
561 | 569 | ||
562 | // what about linkkeys ? | 570 | // what about linkkeys ? |
563 | for( k = 0; k < Keys.count(); k ++ ) { | 571 | for( k = 0; k < Keys.count(); k ++ ) { |
564 | if( TheP->address() == Keys[k].to() || | 572 | if( TheP->address() == Keys[k].to() || |
565 | TheP->address() == Keys[k].from() | 573 | TheP->address() == Keys[k].from() |
566 | ) { | 574 | ) { |
567 | // part of linkkey | 575 | // part of linkkey |
568 | odebug << "LINKKEY " << TheP->address().toString() << oendl; | 576 | odebug << "LINKKEY " << TheP->address().toString() << oendl; |
569 | break; | 577 | break; |
570 | } | 578 | } |
571 | } | 579 | } |
572 | 580 | ||
573 | if( k == Keys.count() ) { | 581 | if( k == Keys.count() ) { |
574 | odebug << "RM LINKKEY " << TheP->address().toString() << oendl; | 582 | odebug << "RM LINKKEY " << TheP->address().toString() << oendl; |
575 | // not found -> remember to remove this peer | 583 | // not found -> remember to remove this peer |
576 | QListViewItem * Nit; | 584 | QListViewItem * Nit; |
577 | OT->removePeer( TheP ); | 585 | OT->removePeer( TheP ); |
578 | Nit = Lit->nextSibling(); | 586 | Nit = Lit->nextSibling(); |
579 | delete Lit; | 587 | delete Lit; |
580 | Lit = Nit; | 588 | Lit = Nit; |
581 | continue; | 589 | continue; |
582 | } | 590 | } |
583 | } else { | 591 | } else { |
584 | odebug << "NODOWN " << TheP->address().toString() << oendl; | 592 | odebug << "NODOWN " << TheP->address().toString() << oendl; |
585 | } | 593 | } |
586 | 594 | ||
587 | Lit = Lit->nextSibling(); | 595 | Lit = Lit->nextSibling(); |
588 | } | 596 | } |
589 | } | 597 | } |
590 | 598 | ||
591 | void OTScan::SLOT_NewPeer( OTPeer * P, bool IsNew ){ | 599 | void OTScan::SLOT_NewPeer( OTPeer * P, bool IsNew ){ |
592 | PeerLVI * it = 0; | 600 | PeerLVI * it = 0; |
593 | 601 | ||
594 | if( IsNew ) { | 602 | if( IsNew ) { |
595 | it = new PeerLVI( P, DetectedPeers_LV ); | 603 | it = new PeerLVI( P, DetectedPeers_LV ); |
596 | } else { | 604 | } else { |
597 | // find peer in table | 605 | // find peer in table |
598 | QListViewItem * Lit = DetectedPeers_LV->firstChild(); | 606 | QListViewItem * Lit = DetectedPeers_LV->firstChild(); |
599 | while( Lit ) { | 607 | while( Lit ) { |
600 | if( ((PeerLVI *)Lit)->peer() == P ) { | 608 | if( ((PeerLVI *)Lit)->peer() == P ) { |
601 | // this item | 609 | // this item |
602 | it = (PeerLVI *)Lit; | 610 | it = (PeerLVI *)Lit; |
603 | break; | 611 | break; |
604 | } | 612 | } |
605 | Lit = Lit->nextSibling(); | 613 | Lit = Lit->nextSibling(); |
606 | } | 614 | } |
607 | 615 | ||
608 | if( ! it ) { | 616 | if( ! it ) { |
609 | odebug << "Should not occur" << oendl; | 617 | odebug << "Should not occur" << oendl; |
610 | return; | 618 | return; |
611 | } | 619 | } |
612 | } | 620 | } |
613 | 621 | ||
614 | // update/show info | 622 | // update/show info |
615 | it->setText( 0, P->name() ); | 623 | it->setText( 0, P->name() ); |
616 | it->setPixmap(0, Icons->deviceIcon( | 624 | it->setPixmap(0, Icons->deviceIcon( |
617 | OT->deviceTypeToName( P->deviceClass() ) ) ); | 625 | OT->deviceTypeToName( P->deviceClass() ) ) ); |
618 | 626 | ||
619 | // tell peer to report its state async | 627 | // tell peer to report its state async |
620 | connect( P, | 628 | connect( P, |
621 | SIGNAL( peerStateReport( OTPeer *)), | 629 | SIGNAL( peerStateReport( OTPeer *)), |
622 | this, | 630 | this, |
623 | SLOT( SLOT_PeerState( OTPeer *)) | 631 | SLOT( SLOT_PeerState( OTPeer *)) |
624 | ); | 632 | ); |
625 | 633 | ||
626 | if( IsNew ) { | 634 | if( IsNew ) { |
627 | // find state | 635 | // find state |
628 | refreshState( (PeerLVI *)it, 1 ); | 636 | refreshState( (PeerLVI *)it, 1 ); |
629 | } else { | 637 | } else { |
630 | // update staet | 638 | // update staet |
631 | SLOT_PeerState( P ); | 639 | SLOT_PeerState( P ); |
632 | } | 640 | } |
633 | } | 641 | } |
634 | 642 | ||
635 | void OTScan::SLOT_PeerState( OTPeer * P ) { | 643 | void OTScan::SLOT_PeerState( OTPeer * P ) { |
636 | PeerLVI * it = (PeerLVI *)DetectedPeers_LV->firstChild(); | 644 | PeerLVI * it = (PeerLVI *)DetectedPeers_LV->firstChild(); |
637 | while( it ) { | 645 | while( it ) { |
638 | if( it->peer() == P ) { | 646 | if( it->peer() == P ) { |
639 | break; | 647 | break; |
640 | } | 648 | } |
641 | it = (PeerLVI * )it->nextSibling(); | 649 | it = (PeerLVI * )it->nextSibling(); |
642 | } | 650 | } |
643 | 651 | ||
644 | if( ! it ) | 652 | if( ! it ) |
645 | return; | 653 | return; |
646 | 654 | ||
647 | switch( P->state() ) { | 655 | switch( P->state() ) { |
648 | case OTPeer::Peer_Unknown : | 656 | case OTPeer::Peer_Unknown : |
649 | case OTPeer::Peer_Down : | 657 | case OTPeer::Peer_Down : |
650 | it->setPixmap( 1, 0 ); | 658 | it->setPixmap( 1, 0 ); |
651 | break; | 659 | break; |
652 | case OTPeer::Peer_Up : | 660 | case OTPeer::Peer_Up : |
653 | it->setPixmap( 1, Icons->loadPixmap( | 661 | it->setPixmap( 1, Icons->loadPixmap( |
654 | ( P->connectedTo() ) ? "connected" : "notconnected" ) ); | 662 | ( P->connectedTo() ) ? "connected" : "notconnected" ) ); |
655 | if( it == Current && ! StrengthTimer->isActive() ) { | 663 | if( it == Current && ! StrengthTimer->isActive() ) { |
656 | // start showing strength | 664 | // start showing strength |
657 | StrengthTimer->start( 1000, FALSE ); | 665 | StrengthTimer->start( 1000, FALSE ); |
658 | SLOT_UpdateStrength(); | 666 | SLOT_UpdateStrength(); |
659 | } | 667 | } |
660 | break; | 668 | break; |
661 | } | 669 | } |
662 | } | 670 | } |
663 | 671 | ||
664 | void OTScan::SLOT_RefreshState( void ) { | 672 | void OTScan::SLOT_RefreshState( void ) { |
665 | 673 | ||
666 | QListViewItem * it = DetectedPeers_LV->firstChild(); | 674 | QListViewItem * it = DetectedPeers_LV->firstChild(); |
667 | while( it ) { | 675 | while( it ) { |
668 | if( it->isSelected() ) { | 676 | if( it->isSelected() ) { |
669 | break; | 677 | break; |
670 | } | 678 | } |
671 | it = it->nextSibling(); | 679 | it = it->nextSibling(); |
672 | } | 680 | } |
673 | 681 | ||
674 | if( ! it ) | 682 | if( ! it ) |
675 | return; | 683 | return; |
676 | 684 | ||
677 | refreshState( (PeerLVI *)it, 1 ); | 685 | refreshState( (PeerLVI *)it, 1 ); |
678 | } | 686 | } |
679 | 687 | ||
680 | void OTScan::refreshState( PeerLVI * it, bool Force ) { | 688 | void OTScan::refreshState( PeerLVI * it, bool Force ) { |
681 | it->setPixmap( 1, Icons->loadPixmap( "find" ) ); | 689 | it->setPixmap( 1, Icons->loadPixmap( "find" ) ); |
682 | it->peer()->findOutState( 30, Force ); | 690 | it->peer()->findOutState( 30, Force ); |
683 | } | 691 | } |
684 | 692 | ||
685 | void OTScan::SLOT_Show( QListViewItem * it ) { | 693 | void OTScan::SLOT_Show( QListViewItem * it ) { |
686 | 694 | ||
687 | if( ! it || it->depth() > 0 ) | 695 | if( ! it || it->depth() > 0 ) |
688 | return; | 696 | return; |
689 | 697 | ||
690 | QString S; | 698 | QString S; |
691 | 699 | ||
692 | Current = (PeerLVI *)it; | 700 | Current = (PeerLVI *)it; |
693 | 701 | ||
694 | Strength_PB->setProgress( 0 ); // reset | 702 | Strength_PB->setProgress( 0 ); // reset |
695 | Address_LBL->setText( Current->peer()->address().toString() ); | 703 | Address_LBL->setText( Current->peer()->address().toString() ); |
696 | Peer_GB->setTitle( Current->peer()->name() ); | 704 | Peer_GB->setTitle( Current->peer()->name() ); |
697 | 705 | ||
698 | const LinkKeyArray & Keys = OT->getLinkKeys(); | 706 | const LinkKeyArray & Keys = OT->getLinkKeys(); |
699 | 707 | ||
700 | Paired_Led->setOn( FALSE ); | 708 | Paired_Led->setOn( FALSE ); |
701 | for( unsigned int i = 0; | 709 | for( unsigned int i = 0; |
702 | i < Keys.count(); | 710 | i < Keys.count(); |
703 | i ++ ) { | 711 | i ++ ) { |
704 | if( Current->peer()->address() == Keys[i].to() ) { | 712 | if( Current->peer()->address() == Keys[i].to() ) { |
705 | Paired_Led->setOn( TRUE ); | 713 | Paired_Led->setOn( TRUE ); |
706 | break; | 714 | break; |
707 | } | 715 | } |
708 | } | 716 | } |
709 | 717 | ||
710 | if( Current->peer()->state() == OTPeer::Peer_Up ) { | 718 | if( Current->peer()->state() == OTPeer::Peer_Up ) { |
711 | RefreshServices_But->setEnabled( TRUE ); | 719 | RefreshServices_But->setEnabled( TRUE ); |
712 | StrengthTimer->start( 1000, FALSE ); | 720 | StrengthTimer->start( 1000, FALSE ); |
713 | SLOT_UpdateStrength(); | 721 | SLOT_UpdateStrength(); |
714 | } else { | 722 | } else { |
715 | RefreshServices_But->setEnabled( FALSE ); | 723 | RefreshServices_But->setEnabled( FALSE ); |
716 | } | 724 | } |
717 | 725 | ||
718 | } | 726 | } |
719 | 727 | ||
720 | void OTScan::SLOT_UpdateStrength( void ) { | 728 | void OTScan::SLOT_UpdateStrength( void ) { |
721 | OTDriver * D = Current->peer()->connectedTo(); | 729 | OTDriver * D = Current->peer()->connectedTo(); |
722 | 730 | ||
723 | if( D ) { | 731 | if( D ) { |
724 | long Q = D->getLinkQuality( Current->peer()->address() ); | 732 | long Q = D->getLinkQuality( Current->peer()->address() ); |
725 | Strength_PB->setProgress( Q ); | 733 | Strength_PB->setProgress( Q ); |
726 | if( ! Q ) { | 734 | if( ! Q ) { |
727 | // no quality | 735 | // no quality |
728 | Strength_PB->setEnabled( TRUE ); | 736 | Strength_PB->setEnabled( TRUE ); |
729 | StrengthTimer->stop(); | 737 | StrengthTimer->stop(); |
730 | } | 738 | } |
731 | } else { | 739 | } else { |
732 | Strength_PB->setEnabled( FALSE ); | 740 | Strength_PB->setEnabled( FALSE ); |
733 | Strength_PB->setProgress( 0 ); | 741 | Strength_PB->setProgress( 0 ); |
734 | // no point in continuing | 742 | // no point in continuing |
735 | StrengthTimer->stop(); | 743 | StrengthTimer->stop(); |
736 | } | 744 | } |
737 | } | 745 | } |
738 | 746 | ||
739 | void OTScan::SLOT_RefreshServices( void ) { | 747 | void OTScan::SLOT_RefreshServices( void ) { |
740 | 748 | ||
741 | QListViewItem * it = DetectedPeers_LV->firstChild(); | 749 | QListViewItem * it = DetectedPeers_LV->firstChild(); |
742 | while( it ) { | 750 | while( it ) { |
743 | if( it->isSelected() ) { | 751 | if( it->isSelected() ) { |
744 | break; | 752 | break; |
745 | } | 753 | } |
746 | it = it->nextSibling(); | 754 | it = it->nextSibling(); |
747 | } | 755 | } |
748 | 756 | ||
749 | if( ! it ) | 757 | if( ! it ) |
750 | return; | 758 | return; |
751 | 759 | ||
752 | QString S; | 760 | QString S; |
753 | PeerLVI * PI = (PeerLVI *)it; | 761 | PeerLVI * PI = (PeerLVI *)it; |
754 | 762 | ||
755 | scanMode( true ); | 763 | scanMode( true ); |
756 | qApp->processEvents(0); | 764 | qApp->processEvents(0); |
757 | 765 | ||
758 | ServiceVector & V = PI->peer()->services(); | 766 | ServiceVector & V = PI->peer()->services(); |
759 | 767 | ||
760 | while( PI->firstChild() ) { | 768 | while( PI->firstChild() ) { |
761 | // remove children | 769 | // remove children |
762 | delete PI->firstChild(); | 770 | delete PI->firstChild(); |
763 | } | 771 | } |
764 | 772 | ||
765 | for( unsigned int i = 0 ; | 773 | for( unsigned int i = 0 ; |
766 | i < V.count(); | 774 | i < V.count(); |
767 | i ++ ) { | 775 | i ++ ) { |
768 | QString S; | 776 | QString S; |
769 | S = V[i]->name(); | 777 | S = V[i]->name(); |
770 | 778 | ||
771 | if( S.isEmpty() ) { | 779 | if( S.isEmpty() ) { |
772 | continue; | 780 | continue; |
773 | } | 781 | } |
774 | 782 | ||
775 | { QListViewItem * SIt; | 783 | { QListViewItem * SIt; |
776 | UUIDVector UIDV; | 784 | UUIDVector UIDV; |
777 | QPixmap Pm; | 785 | QPixmap Pm; |
778 | bool Done = 0; | 786 | bool Done = 0; |
779 | bool R; | 787 | bool R; |
780 | short ID; | 788 | short ID; |
781 | 789 | ||
782 | SIt = 0; | 790 | SIt = 0; |
783 | 791 | ||
784 | UIDV = V[i]->classIDList(); | 792 | UIDV = V[i]->classIDList(); |
785 | // first all UUID ! 1200 12ff (Genericprofiles) | 793 | // first all UUID ! 1200 12ff (Genericprofiles) |
786 | for( unsigned int j = 0; | 794 | for( unsigned int j = 0; |
787 | j < UIDV.count(); | 795 | j < UIDV.count(); |
788 | j ++ ) { | 796 | j ++ ) { |
789 | 797 | ||
790 | if( Filter.count() ) { | 798 | if( Filter.count() ) { |
791 | bool FilterOut = 1; | 799 | bool FilterOut = 1; |
792 | // filter out if not in list | 800 | // filter out if not in list |
793 | for( unsigned int ff = 0; | 801 | for( unsigned int ff = 0; |
794 | ff < Filter.count(); | 802 | ff < Filter.count(); |
795 | ff ++ ) { | 803 | ff ++ ) { |
796 | if( UIDV[j] == Filter[ff] ) { | 804 | if( UIDV[j] == Filter[ff] ) { |
797 | FilterOut = 0; | 805 | FilterOut = 0; |
798 | break; | 806 | break; |
799 | } | 807 | } |
800 | } | 808 | } |
801 | 809 | ||
802 | if( FilterOut ) { | 810 | if( FilterOut ) { |
803 | // not in filter list | 811 | // not in filter list |
804 | continue; | 812 | continue; |
805 | } | 813 | } |
806 | } // else show | 814 | } // else show |
807 | 815 | ||
808 | ID = UIDV[j].toShort(); | 816 | ID = UIDV[j].toShort(); |
809 | if( ID < 0x1200 || ID > 0x12ff ) { | 817 | if( ID < 0x1200 || ID > 0x12ff ) { |
810 | // use this profile | 818 | // use this profile |
811 | if( R ) { | 819 | if( R ) { |
812 | unsigned int ch; | 820 | unsigned int ch; |
813 | bool has; | 821 | bool has; |
814 | has = V[i]->rfcommChannel( ch ); | 822 | has = V[i]->rfcommChannel( ch ); |
815 | SIt = new ChannelLVI( (has) ? (int)ch : -1 , PI ); | 823 | SIt = new ChannelLVI( (has) ? (int)ch : -1 , PI ); |
816 | SIt->setText(0, V[i]->name() ); | 824 | SIt->setText(0, V[i]->name() ); |
817 | 825 | ||
818 | Pm = Icons->serviceIcon( ID, R ); | 826 | Pm = Icons->serviceIcon( ID, R ); |
819 | SIt->setPixmap(0, Pm ); | 827 | SIt->setPixmap(0, Pm ); |
820 | Done = 1; | 828 | Done = 1; |
821 | break; | 829 | break; |
822 | } | 830 | } |
823 | } | 831 | } |
824 | } | 832 | } |
825 | 833 | ||
826 | if( ! Done ) { | 834 | if( ! Done ) { |
827 | // check other range too | 835 | // check other range too |
828 | for( unsigned int j = 0; | 836 | for( unsigned int j = 0; |
829 | j < UIDV.count(); | 837 | j < UIDV.count(); |
830 | j ++ ) { | 838 | j ++ ) { |
831 | 839 | ||
832 | if( Filter.count() ) { | 840 | if( Filter.count() ) { |
833 | bool FilterOut = 1; | 841 | bool FilterOut = 1; |
834 | // filter out if not in list | 842 | // filter out if not in list |
835 | for( unsigned int ff = 0; | 843 | for( unsigned int ff = 0; |
836 | ff < Filter.count(); | 844 | ff < Filter.count(); |
837 | ff ++ ) { | 845 | ff ++ ) { |
838 | if( UIDV[j] == Filter[ff] ) { | 846 | if( UIDV[j] == Filter[ff] ) { |
839 | FilterOut = 0; | 847 | FilterOut = 0; |
840 | break; | 848 | break; |
841 | } | 849 | } |
842 | } | 850 | } |
843 | 851 | ||
844 | if( FilterOut ) { | 852 | if( FilterOut ) { |
845 | // not in filter list | 853 | // not in filter list |
846 | continue; | 854 | continue; |
847 | } | 855 | } |
848 | } // else show | 856 | } // else show |
849 | 857 | ||
850 | ID = UIDV[j].toShort(); | 858 | ID = UIDV[j].toShort(); |
851 | if( ID >= 0x1200 && ID <= 0x12ff ) { | 859 | if( ID >= 0x1200 && ID <= 0x12ff ) { |
852 | // use this profile | 860 | // use this profile |
853 | unsigned int ch; | 861 | unsigned int ch; |
854 | bool has; | 862 | bool has; |
855 | has = V[i]->rfcommChannel( ch ); | 863 | has = V[i]->rfcommChannel( ch ); |
856 | SIt = new ChannelLVI( (has) ? (int)ch : -1 , PI ); | 864 | SIt = new ChannelLVI( (has) ? (int)ch : -1 , PI ); |
857 | SIt->setText(0, V[i]->name() ); | 865 | SIt->setText(0, V[i]->name() ); |
858 | 866 | ||
859 | Pm = Icons->serviceIcon( ID, R ); | 867 | Pm = Icons->serviceIcon( ID, R ); |
860 | SIt->setPixmap(0, Pm ); | 868 | SIt->setPixmap(0, Pm ); |
861 | 869 | ||
862 | break; | 870 | break; |
863 | } | 871 | } |
864 | } | 872 | } |
865 | } | 873 | } |
866 | 874 | ||
867 | } | 875 | } |
868 | } | 876 | } |
869 | 877 | ||
870 | scanMode( false ); | 878 | scanMode( false ); |
871 | } | 879 | } |
872 | 880 | ||
873 | void OTScan::scanMode( bool M ) { | 881 | void OTScan::scanMode( bool M ) { |
874 | // avoid infinite loop because it triggers DoScan | 882 | // avoid infinite loop because it triggers DoScan |
875 | Detect_But->blockSignals( TRUE ); | 883 | Detect_But->blockSignals( TRUE ); |
876 | Detect_But->setOn( M ); | 884 | Detect_But->setOn( M ); |
877 | Detect_But->setText( (M) ? tr("Scanning") : tr("Scan") ); | 885 | Detect_But->setText( (M) ? tr("Scanning") : tr("Scan") ); |
878 | Detect_But->blockSignals( FALSE ); | 886 | Detect_But->blockSignals( FALSE ); |
879 | } | 887 | } |
880 | 888 | ||
881 | // | 889 | // |
882 | // | 890 | // |
883 | // | 891 | // |
884 | // | 892 | // |
885 | // | 893 | // |
886 | 894 | ||
887 | OTManage::OTManage( QWidget * parent, OTIcons * _IC ) : | 895 | OTManage::OTManage( QWidget * parent, OTIcons * _IC ) : |
888 | OTManageGUI( parent ) { | 896 | OTManageGUI( parent ) { |
889 | 897 | ||
890 | OT = OTGateway::getOTGateway(); | 898 | OT = OTGateway::getOTGateway(); |
891 | 899 | ||
892 | Icons = (_IC ) ? _IC : new OTIcons(); | 900 | Icons = (_IC ) ? _IC : new OTIcons(); |
893 | MyIcons = (_IC == 0 ); | 901 | MyIcons = (_IC == 0 ); |
894 | AllDrivers_LV->setSorting(-1); | 902 | AllDrivers_LV->setSorting(-1); |
895 | 903 | ||
896 | connect( OT, | 904 | connect( OT, |
897 | SIGNAL( driverListChanged() ), | 905 | SIGNAL( driverListChanged() ), |
898 | this, | 906 | this, |
899 | SLOT( SLOT_DriverListChanged() ) | 907 | SLOT( SLOT_DriverListChanged() ) |
900 | ); | 908 | ); |
901 | connect( OT, | 909 | connect( OT, |
902 | SIGNAL( stateChange( OTDriver *, bool ) ), | 910 | SIGNAL( stateChange( OTDriver *, bool ) ), |
903 | this, | 911 | this, |
904 | SLOT( SLOT_StateChange( OTDriver *, bool ) ) | 912 | SLOT( SLOT_StateChange( OTDriver *, bool ) ) |
905 | ); | 913 | ); |
906 | 914 | ||
907 | SLOT_DriverListChanged(); | 915 | SLOT_DriverListChanged(); |
908 | 916 | ||
909 | AllDrivers_LV->header()->hide(); | 917 | AllDrivers_LV->header()->hide(); |
910 | } | 918 | } |
911 | 919 | ||
912 | OTManage::~OTManage() { | 920 | OTManage::~OTManage() { |
913 | if( MyIcons ) | 921 | if( MyIcons ) |
914 | delete Icons; | 922 | delete Icons; |
915 | OTGateway::releaseOTGateway(); | 923 | OTGateway::releaseOTGateway(); |
916 | } | 924 | } |
917 | 925 | ||
918 | void OTManage::SLOT_ShowDriver( QListViewItem * It ) { | 926 | void OTManage::SLOT_ShowDriver( QListViewItem * It ) { |
919 | if( It == 0 || It->depth() > 0 ) | 927 | if( It == 0 || It->depth() > 0 ) |
920 | // not toplevel | 928 | // not toplevel |
921 | return; | 929 | return; |
922 | 930 | ||
923 | DriverLVI * it = (DriverLVI *) It; | 931 | DriverLVI * it = (DriverLVI *) It; |
924 | DriverIsUp_CB->setChecked( it->driver()->isUp() ); | 932 | DriverIsUp_CB->setChecked( it->driver()->isUp() ); |
925 | } | 933 | } |
926 | 934 | ||
927 | void OTManage::SLOT_UpDriver( bool Up ) { | 935 | void OTManage::SLOT_UpDriver( bool Up ) { |
928 | QListViewItem * it = AllDrivers_LV->firstChild(); | 936 | QListViewItem * it = AllDrivers_LV->firstChild(); |
929 | while( it ) { | 937 | while( it ) { |
930 | if( it->isSelected() ) { | 938 | if( it->isSelected() ) { |
931 | OTDriver * D = ((DriverLVI *)it)->driver(); | 939 | OTDriver * D = ((DriverLVI *)it)->driver(); |
932 | odebug << "UP driver " << D->devname() << oendl; | 940 | odebug << "UP driver " << D->devname() << oendl; |
933 | // this | 941 | // this |
934 | D->setUp( Up ); | 942 | D->setUp( Up ); |
935 | return; | 943 | return; |
936 | } | 944 | } |
937 | it = it->nextSibling(); | 945 | it = it->nextSibling(); |
938 | } | 946 | } |
939 | } | 947 | } |
940 | 948 | ||
941 | void OTManage::SLOT_StateChange( OTDriver * D, bool Up ) { | 949 | void OTManage::SLOT_StateChange( OTDriver * D, bool Up ) { |
942 | QListViewItem * it = AllDrivers_LV->firstChild(); | 950 | QListViewItem * it = AllDrivers_LV->firstChild(); |
943 | while( it ) { | 951 | while( it ) { |
944 | if( ((DriverLVI *)it)->driver() == D ) { | 952 | if( ((DriverLVI *)it)->driver() == D ) { |
945 | it->setPixmap( 0, | 953 | it->setPixmap( 0, |
946 | Icons->loadPixmap( ( Up ) ? "bluezon" : "bluezoff" ) ); | 954 | Icons->loadPixmap( ( Up ) ? "bluezon" : "bluezoff" ) ); |
947 | return; | 955 | return; |
948 | } | 956 | } |
949 | it = it->nextSibling(); | 957 | it = it->nextSibling(); |
950 | } | 958 | } |
951 | } | 959 | } |
952 | 960 | ||
953 | void OTManage::SLOT_DriverListChanged( ) { | 961 | void OTManage::SLOT_DriverListChanged( ) { |
954 | DriverLVI * It; | 962 | DriverLVI * It; |
955 | QListViewItem * Sub; | 963 | QListViewItem * Sub; |
956 | QListViewItem * First = 0; | 964 | QListViewItem * First = 0; |
957 | OTDriver* D; | 965 | OTDriver* D; |
958 | OTDriverList & DL = OT->getDriverList(); | 966 | OTDriverList & DL = OT->getDriverList(); |
959 | 967 | ||
960 | AllDrivers_LV->clear(); | 968 | AllDrivers_LV->clear(); |
961 | for( unsigned int i = 0; | 969 | for( unsigned int i = 0; |
962 | i < DL.count(); | 970 | i < DL.count(); |
963 | i ++ ) { | 971 | i ++ ) { |
964 | D = DL[i]; | 972 | D = DL[i]; |
965 | It = new DriverLVI( D, AllDrivers_LV ); | 973 | It = new DriverLVI( D, AllDrivers_LV ); |
966 | 974 | ||
967 | if( ! First ) | 975 | if( ! First ) |
968 | First = It; | 976 | First = It; |
969 | 977 | ||
970 | It->setText( 0, D->devname() ); | 978 | It->setText( 0, D->devname() ); |
971 | It->setPixmap( 0, | 979 | It->setPixmap( 0, |
972 | Icons->loadPixmap( (D->isUp()) ? | 980 | Icons->loadPixmap( (D->isUp()) ? |
973 | "bluezon" : "bluezoff" ) ); | 981 | "bluezon" : "bluezoff" ) ); |
974 | 982 | ||
975 | Sub = new QListViewItem( It ); | 983 | Sub = new QListViewItem( It ); |
976 | Sub->setText( 0, tr( "Name" ) ); | 984 | Sub->setText( 0, tr( "Name" ) ); |
977 | Sub->setText( 1, D->name() ); | 985 | Sub->setText( 1, D->name() ); |
978 | 986 | ||
979 | Sub = new QListViewItem( It ); | 987 | Sub = new QListViewItem( It ); |
980 | Sub->setText( 0, tr( "Address" ) ); | 988 | Sub->setText( 0, tr( "Address" ) ); |
981 | Sub->setText( 1, D->address().toString() ); | 989 | Sub->setText( 1, D->address().toString() ); |
982 | 990 | ||
983 | Sub = new QListViewItem( It ); | 991 | Sub = new QListViewItem( It ); |
984 | Sub->setText( 0, tr( "Revision" ) ); | 992 | Sub->setText( 0, tr( "Revision" ) ); |
985 | Sub->setText( 1, D->revision() ); | 993 | Sub->setText( 1, D->revision() ); |
986 | 994 | ||
987 | Sub = new QListViewItem( It ); | 995 | Sub = new QListViewItem( It ); |
988 | Sub->setText( 0, tr( "Manufacturer" ) ); | 996 | Sub->setText( 0, tr( "Manufacturer" ) ); |
989 | Sub->setText( 1, D->manufacturer() ); | 997 | Sub->setText( 1, D->manufacturer() ); |
990 | 998 | ||
991 | QString Service, Device; | 999 | QString Service, Device; |
992 | D->getClass( Service, Device ); | 1000 | D->getClass( Service, Device ); |
993 | 1001 | ||
994 | Sub = new QListViewItem( It ); | 1002 | Sub = new QListViewItem( It ); |
995 | Sub->setText( 0, tr( "Service classes" ) ); | 1003 | Sub->setText( 0, tr( "Service classes" ) ); |
996 | Sub->setText( 1, Service ); | 1004 | Sub->setText( 1, Service ); |
997 | Sub = new QListViewItem( It ); | 1005 | Sub = new QListViewItem( It ); |
998 | Sub->setText( 0, tr( "Device class" ) ); | 1006 | Sub->setText( 0, tr( "Device class" ) ); |
999 | Sub->setText( 1, Device ); | 1007 | Sub->setText( 1, Device ); |
1000 | } | 1008 | } |
1001 | 1009 | ||
1002 | if( DL.count() ) { | 1010 | if( DL.count() ) { |
1003 | AllDrivers_LV->setCurrentItem( First ); | 1011 | AllDrivers_LV->setCurrentItem( First ); |
1004 | DriverIsUp_CB->setEnabled( TRUE ); | 1012 | DriverIsUp_CB->setEnabled( TRUE ); |
1005 | } else { | 1013 | } else { |
1006 | DriverIsUp_CB->setChecked( FALSE ); | 1014 | DriverIsUp_CB->setChecked( FALSE ); |
1007 | DriverIsUp_CB->setEnabled( FALSE ); | 1015 | DriverIsUp_CB->setEnabled( FALSE ); |
1008 | } | 1016 | } |
1009 | } | 1017 | } |
1010 | 1018 | ||
1011 | void OTManage::SLOT_SetRefreshTimer( int v ) { | 1019 | void OTManage::SLOT_SetRefreshTimer( int v ) { |
1012 | OT->setRefreshTimer( v * 1000 ); | 1020 | OT->setRefreshTimer( v * 1000 ); |
1013 | } | 1021 | } |
1014 | 1022 | ||
1015 | // | 1023 | // |
1016 | // | 1024 | // |
1017 | // | 1025 | // |
1018 | // | 1026 | // |
1019 | // | 1027 | // |
1020 | 1028 | ||
1021 | OTMain::OTMain( QWidget * parent ) : OTMainGUI( parent ) { | 1029 | OTMain::OTMain( QWidget * parent ) : OTMainGUI( parent ) { |
1022 | 1030 | ||
1023 | Icons = new OTIcons(); | 1031 | Icons = new OTIcons(); |
1024 | SnifWindow = 0; | 1032 | SnifWindow = 0; |
1025 | OT = OTGateway::getOTGateway(); | 1033 | OT = OTGateway::getOTGateway(); |
1026 | 1034 | ||
1027 | connect( OT, | 1035 | connect( OT, |
1028 | SIGNAL( deviceEnabled( bool ) ), | 1036 | SIGNAL( deviceEnabled( bool ) ), |
1029 | this, | 1037 | this, |
1030 | SLOT( SLOT_DeviceIsEnabled( bool ) ) | 1038 | SLOT( SLOT_DeviceIsEnabled( bool ) ) |
1031 | ); | 1039 | ); |
1032 | connect( OT, | 1040 | connect( OT, |
1033 | SIGNAL( driverListChanged() ), | 1041 | SIGNAL( driverListChanged() ), |
1034 | this, | 1042 | this, |
1035 | SLOT( SLOT_DriverListChanged() ) | 1043 | SLOT( SLOT_DriverListChanged() ) |
1036 | ); | 1044 | ); |
1037 | connect( OT, | 1045 | connect( OT, |
1038 | SIGNAL( stateChange( OTDriver *, bool ) ), | 1046 | SIGNAL( stateChange( OTDriver *, bool ) ), |
1039 | this, | 1047 | this, |
1040 | SLOT( SLOT_StateChange( OTDriver *, bool ) ) | 1048 | SLOT( SLOT_StateChange( OTDriver *, bool ) ) |
1041 | ); | 1049 | ); |
1042 | 1050 | ||
1043 | if( ! OT->needsEnabling() ) { | 1051 | if( ! OT->needsEnabling() ) { |
1044 | MustBeEnabled_CB->hide(); | 1052 | MustBeEnabled_CB->hide(); |
1045 | } else { | 1053 | } else { |
1046 | // detect current state | 1054 | // detect current state |
1047 | MustBeEnabled_CB->setChecked( | 1055 | MustBeEnabled_CB->setChecked( |
1048 | OT->isEnabled() ); | 1056 | OT->isEnabled() ); |
1049 | } | 1057 | } |
1050 | 1058 | ||
1051 | SLOT_DriverListChanged(); | 1059 | SLOT_DriverListChanged(); |
1052 | } | 1060 | } |
1053 | 1061 | ||
1054 | OTMain::~OTMain() { | 1062 | OTMain::~OTMain() { |
1055 | OTGateway::releaseOTGateway(); | 1063 | OTGateway::releaseOTGateway(); |
1056 | delete Icons; | 1064 | delete Icons; |
1057 | } | 1065 | } |
1058 | 1066 | ||
1059 | void OTMain::SLOT_DriverListChanged() { | 1067 | void OTMain::SLOT_DriverListChanged() { |
1060 | OTDriver * D; | 1068 | OTDriver * D; |
1061 | OTDriverList & DL = OT->getDriverList(); | 1069 | OTDriverList & DL = OT->getDriverList(); |
1062 | 1070 | ||
1063 | DeviceList_CB->clear(); | 1071 | DeviceList_CB->clear(); |
1064 | for( unsigned int i = 0; | 1072 | for( unsigned int i = 0; |
1065 | i < DL.count(); | 1073 | i < DL.count(); |
1066 | i ++ ) { | 1074 | i ++ ) { |
1067 | D = DL[i]; | 1075 | D = DL[i]; |
1068 | DeviceList_CB->insertItem( | 1076 | DeviceList_CB->insertItem( |
1069 | Icons->loadPixmap( (D->isUp()) ? | 1077 | Icons->loadPixmap( (D->isUp()) ? |
1070 | "bluezon" : "bluezoff" ), | 1078 | "bluezon" : "bluezoff" ), |
1071 | D->devname() ); | 1079 | D->devname() ); |
1072 | if( D == OT->scanWith() ) { | 1080 | if( D == OT->scanWith() ) { |
1073 | DeviceList_CB->setCurrentItem( i ); | 1081 | DeviceList_CB->setCurrentItem( i ); |
1074 | } | 1082 | } |
1075 | } | 1083 | } |
1076 | 1084 | ||
1077 | Scan_But->setEnabled( OT->getDriverList().count() > 0 ); | 1085 | Scan_But->setEnabled( OT->getDriverList().count() > 0 ); |
1078 | DeviceList_CB->setEnabled( OT->getDriverList().count() > 0 ); | 1086 | DeviceList_CB->setEnabled( OT->getDriverList().count() > 0 ); |
1079 | } | 1087 | } |
1080 | 1088 | ||
1081 | void OTMain::SLOT_EnableBluetooth( bool Up ) { | 1089 | void OTMain::SLOT_EnableBluetooth( bool Up ) { |
1082 | OT->SLOT_SetEnabled( Up ); | 1090 | OT->SLOT_SetEnabled( Up ); |
1083 | } | 1091 | } |
1084 | 1092 | ||
1085 | void OTMain::SLOT_DeviceIsEnabled( bool Up ) { | 1093 | void OTMain::SLOT_DeviceIsEnabled( bool Up ) { |
1086 | MustBeEnabled_CB->blockSignals( TRUE ); | 1094 | MustBeEnabled_CB->blockSignals( TRUE ); |
1087 | MustBeEnabled_CB->setChecked( Up ); | 1095 | MustBeEnabled_CB->setChecked( Up ); |
1088 | MustBeEnabled_CB->blockSignals( FALSE ); | 1096 | MustBeEnabled_CB->blockSignals( FALSE ); |
1089 | } | 1097 | } |
1090 | 1098 | ||
1091 | void OTMain::SLOT_Manage( void ) { | 1099 | void OTMain::SLOT_Manage( void ) { |
1092 | QDialog * Dlg = new QDialog( this, 0, TRUE ); | 1100 | QDialog * Dlg = new QDialog( this, 0, TRUE ); |
1093 | QVBoxLayout * V = new QVBoxLayout( Dlg ); | 1101 | QVBoxLayout * V = new QVBoxLayout( Dlg ); |
1094 | OTManage * Mng = new OTManage( Dlg, Icons ); | 1102 | OTManage * Mng = new OTManage( Dlg, Icons ); |
1095 | 1103 | ||
1096 | V->addWidget( Mng ); | 1104 | V->addWidget( Mng ); |
1097 | 1105 | ||
1098 | Dlg->setCaption( tr("Manage local devices" ) ); | 1106 | Dlg->setCaption( tr("Manage local devices" ) ); |
1099 | Dlg->showMaximized(); | 1107 | Dlg->showMaximized(); |
1100 | Dlg->exec(); | 1108 | Dlg->exec(); |
1101 | delete Dlg; | 1109 | delete Dlg; |
1102 | } | 1110 | } |
1103 | 1111 | ||
1104 | void OTMain::SLOT_Scan( void ) { | 1112 | void OTMain::SLOT_Scan( void ) { |
1105 | OTDriverList & DL = OT->getDriverList(); | 1113 | OTDriverList & DL = OT->getDriverList(); |
1106 | for( unsigned int i = 0; | 1114 | for( unsigned int i = 0; |
1107 | i < DL.count(); | 1115 | i < DL.count(); |
1108 | i ++ ) { | 1116 | i ++ ) { |
1109 | if( DL[i]->isUp() && | 1117 | if( DL[i]->isUp() && |
1110 | DL[i]->devname() == DeviceList_CB->currentText() | 1118 | DL[i]->devname() == DeviceList_CB->currentText() |
1111 | ) { | 1119 | ) { |
1112 | QDialog * Dlg = new QDialog( this, 0, TRUE ); | 1120 | QDialog * Dlg = new QDialog( this, 0, TRUE ); |
1113 | QVBoxLayout * V = new QVBoxLayout( Dlg ); | 1121 | QVBoxLayout * V = new QVBoxLayout( Dlg ); |
1114 | OTScan * Scn = new OTScan( Dlg, Icons ); | 1122 | OTScan * Scn = new OTScan( Dlg, Icons ); |
1115 | 1123 | ||
1116 | OT->setScanWith( OT->driver(i) ); | 1124 | OT->setScanWith( OT->driver(i) ); |
1117 | V->addWidget( Scn ); | 1125 | V->addWidget( Scn ); |
1118 | Dlg->setCaption( tr("Scan Neighbourhood" ) ); | 1126 | Dlg->setCaption( tr("Scan Neighbourhood" ) ); |
1119 | Dlg->showMaximized(); | 1127 | Dlg->showMaximized(); |
1120 | Dlg->exec(); | 1128 | Dlg->exec(); |
1121 | 1129 | ||
1122 | delete Dlg; | 1130 | delete Dlg; |
1123 | return; | 1131 | return; |
1124 | } | 1132 | } |
1125 | } | 1133 | } |
1126 | 1134 | ||
1127 | } | 1135 | } |
1128 | 1136 | ||
1129 | void OTMain::SLOT_StateChange( OTDriver * D, bool Up ) { | 1137 | void OTMain::SLOT_StateChange( OTDriver * D, bool Up ) { |
1130 | for( int i = 0; | 1138 | for( int i = 0; |
1131 | i < DeviceList_CB->count(); | 1139 | i < DeviceList_CB->count(); |
1132 | i ++ ) { | 1140 | i ++ ) { |
1133 | if( DeviceList_CB->text(i) == D->devname() ) { | 1141 | if( DeviceList_CB->text(i) == D->devname() ) { |
1134 | DeviceList_CB->changeItem( | 1142 | DeviceList_CB->changeItem( |
1135 | Icons->loadPixmap( (Up) ? "bluezon" : "bluezoff" ), | 1143 | Icons->loadPixmap( (Up) ? "bluezon" : "bluezoff" ), |
1136 | D->devname(), | 1144 | D->devname(), |
1137 | i ); | 1145 | i ); |
1138 | return; | 1146 | return; |
1139 | } | 1147 | } |
1140 | } | 1148 | } |
1141 | } | 1149 | } |
1142 | 1150 | ||
1143 | void OTMain::SLOT_Pairing( void ) { | 1151 | void OTMain::SLOT_Pairing( void ) { |
1144 | QDialog * Dlg = new QDialog( this, 0, TRUE ); | 1152 | QDialog * Dlg = new QDialog( this, 0, TRUE ); |
1145 | QVBoxLayout * V = new QVBoxLayout( Dlg ); | 1153 | QVBoxLayout * V = new QVBoxLayout( Dlg ); |
1146 | OTPairing * Pair = new OTPairing( Dlg, Icons ); | 1154 | OTPairing * Pair = new OTPairing( Dlg, Icons ); |
1147 | 1155 | ||
1148 | V->addWidget( Pair ); | 1156 | V->addWidget( Pair ); |
1149 | Dlg->showMaximized(); | 1157 | Dlg->showMaximized(); |
1150 | Dlg->setCaption( tr("Manage pairing" ) ); | 1158 | Dlg->setCaption( tr("Manage pairing" ) ); |
1151 | Dlg->exec(); | 1159 | Dlg->exec(); |
1152 | 1160 | ||
1153 | delete Dlg; | 1161 | delete Dlg; |
1154 | } | 1162 | } |
1155 | 1163 | ||
1156 | void OTMain::SLOT_Sniffing( void ) { | 1164 | void OTMain::SLOT_Sniffing( void ) { |
1157 | 1165 | ||
1158 | if( SnifWindow == 0 ) { | 1166 | if( SnifWindow == 0 ) { |
1159 | SnifWindow = new QDialog( this, 0, FALSE ); | 1167 | SnifWindow = new QDialog( this, 0, FALSE ); |
1160 | QVBoxLayout * V = new QVBoxLayout( SnifWindow ); | 1168 | QVBoxLayout * V = new QVBoxLayout( SnifWindow ); |
1161 | OTSniffing * SN = new OTSniffing( SnifWindow ); | 1169 | OTSniffing * SN = new OTSniffing( SnifWindow ); |
1162 | V->addWidget( SN ); | 1170 | V->addWidget( SN ); |
1163 | } | 1171 | } |
1164 | 1172 | ||
1165 | SnifWindow->showMaximized(); | 1173 | SnifWindow->showMaximized(); |
1166 | SnifWindow->show(); | 1174 | SnifWindow->show(); |
1167 | } | 1175 | } |
diff --git a/noncore/settings/networksettings2/ppp/ppp_NNI.cpp b/noncore/settings/networksettings2/ppp/ppp_NNI.cpp index 7286d96..9cdd51e 100644 --- a/noncore/settings/networksettings2/ppp/ppp_NNI.cpp +++ b/noncore/settings/networksettings2/ppp/ppp_NNI.cpp | |||
@@ -1,235 +1,237 @@ | |||
1 | #include <qfile.h> | 1 | #include <qfile.h> |
2 | #include <qfileinfo.h> | 2 | #include <qfileinfo.h> |
3 | #include "PPPedit.h" | 3 | #include "PPPedit.h" |
4 | #include "ppp_NNI.h" | 4 | #include "ppp_NNI.h" |
5 | #include "ppp_NN.h" | 5 | #include "ppp_NN.h" |
6 | 6 | ||
7 | APPP::APPP( PPPNetNode * PNN ) : ANetNodeInstance( PNN ) { | 7 | APPP::APPP( PPPNetNode * PNN ) : ANetNodeInstance( PNN ) { |
8 | Data.DNS.ServerAssigned = 1; | 8 | Data.DNS.ServerAssigned = 1; |
9 | Data.DNS.DomainName = ""; | 9 | Data.DNS.DomainName = ""; |
10 | 10 | ||
11 | Data.Auth.Mode = 0; | 11 | Data.Auth.Mode = 0; |
12 | Data.Auth.Login.Expect = "ogin:"; | 12 | Data.Auth.Login.Expect = "ogin:"; |
13 | Data.Auth.Password.Expect = "assword:"; | 13 | Data.Auth.Password.Expect = "assword:"; |
14 | Data.Auth.PCEMode = 0; | 14 | Data.Auth.PCEMode = 0; |
15 | Data.Auth.Client = "*"; | 15 | Data.Auth.Client = "*"; |
16 | Data.Auth.Server = "*"; | 16 | Data.Auth.Server = "*"; |
17 | Data.Auth.Secret = ""; | 17 | Data.Auth.Secret = ""; |
18 | 18 | ||
19 | Data.IP.LocalAddress = "10.0.0.1"; | 19 | Data.IP.LocalAddress = "10.0.0.1"; |
20 | Data.IP.RemoteAddress = "10.0.0.2"; | 20 | Data.IP.RemoteAddress = "10.0.0.2"; |
21 | Data.IP.LocalOverrule = 1; | 21 | Data.IP.LocalOverrule = 1; |
22 | Data.IP.RemoteOverrule = 1; | 22 | Data.IP.RemoteOverrule = 1; |
23 | 23 | ||
24 | Data.IP.GWAutomatic = 1; | 24 | Data.IP.GWAutomatic = 1; |
25 | Data.IP.GWAddress = ""; | 25 | Data.IP.GWAddress = ""; |
26 | Data.IP.GWIsDefault = 1; | 26 | Data.IP.GWIsDefault = 1; |
27 | Data.IP.GWIfNotSet = 1; | 27 | Data.IP.GWIfNotSet = 1; |
28 | 28 | ||
29 | Data.Run.PreConnect = ""; | 29 | Data.Run.PreConnect = ""; |
30 | Data.Run.PostConnect = ""; | 30 | Data.Run.PostConnect = ""; |
31 | Data.Run.PreDisconnect = ""; | 31 | Data.Run.PreDisconnect = ""; |
32 | Data.Run.PostDisconnect = ""; | 32 | Data.Run.PostDisconnect = ""; |
33 | 33 | ||
34 | GUI = 0; | 34 | GUI = 0; |
35 | RT = 0; | 35 | RT = 0; |
36 | 36 | ||
37 | } | 37 | } |
38 | 38 | ||
39 | void APPP::setSpecificAttribute( QString & A, QString & V ) { | 39 | void APPP::setSpecificAttribute( QString & A, QString & V ) { |
40 | if( A.startsWith( "dns" ) ) { | 40 | if( A.startsWith( "dns" ) ) { |
41 | if( A == "dnsserverassigned" ) { | 41 | if( A == "dnsserverassigned" ) { |
42 | Data.DNS.ServerAssigned = (V == "yes"); | 42 | Data.DNS.ServerAssigned = (V == "yes"); |
43 | } else if( A == "dnsdomainname" ) { | 43 | } else if( A == "dnsdomainname" ) { |
44 | Data.DNS.DomainName = V; | 44 | Data.DNS.DomainName = V; |
45 | } else if( A == "dnsserver" ) { | 45 | } else if( A == "dnsserver" ) { |
46 | Data.DNS.Servers.resize( Data.DNS.Servers.size()+1 ); | 46 | Data.DNS.Servers.resize( Data.DNS.Servers.size()+1 ); |
47 | Data.DNS.Servers[Data.DNS.Servers.size()-1] = | 47 | Data.DNS.Servers[Data.DNS.Servers.size()-1] = |
48 | new QString( V ); | 48 | new QString( V ); |
49 | } | 49 | } |
50 | } else if( A.startsWith( "auth" ) ) { | 50 | } else if( A.startsWith( "auth" ) ) { |
51 | if( A == "authmode" ) { | 51 | if( A == "authmode" ) { |
52 | Data.Auth.Mode = V.toShort(); | 52 | Data.Auth.Mode = V.toShort(); |
53 | } else if( A == "authloginexpect" ) { | 53 | } else if( A == "authloginexpect" ) { |
54 | Data.Auth.Login.Expect = V; | 54 | Data.Auth.Login.Expect = V; |
55 | } else if( A == "authloginsend" ) { | 55 | } else if( A == "authloginsend" ) { |
56 | Data.Auth.Login.Send = V; | 56 | Data.Auth.Login.Send = V; |
57 | } else if( A == "authpasswordexpect" ) { | 57 | } else if( A == "authpasswordexpect" ) { |
58 | Data.Auth.Password.Expect = V; | 58 | Data.Auth.Password.Expect = V; |
59 | } else if( A == "authpasswordsend" ) { | 59 | } else if( A == "authpasswordsend" ) { |
60 | Data.Auth.Password.Send = V; | 60 | Data.Auth.Password.Send = V; |
61 | } else if( A == "authpcemode" ) { | 61 | } else if( A == "authpcemode" ) { |
62 | Data.Auth.PCEMode = V.toShort(); | 62 | Data.Auth.PCEMode = V.toShort(); |
63 | } else if( A == "authclient" ) { | 63 | } else if( A == "authclient" ) { |
64 | Data.Auth.Client = V; | 64 | Data.Auth.Client = V; |
65 | } else if( A == "authserver" ) { | 65 | } else if( A == "authserver" ) { |
66 | Data.Auth.Server = V; | 66 | Data.Auth.Server = V; |
67 | } else if( A == "authsecret" ) { | 67 | } else if( A == "authsecret" ) { |
68 | Data.Auth.Secret = V; | 68 | Data.Auth.Secret = V; |
69 | } | 69 | } |
70 | } else if( A.startsWith( "ip" ) ) { | 70 | } else if( A.startsWith( "ip" ) ) { |
71 | if( A == "iplocaloverrule" ) { | 71 | if( A == "iplocaloverrule" ) { |
72 | Data.IP.LocalOverrule = (V == "yes"); | 72 | Data.IP.LocalOverrule = (V == "yes"); |
73 | } else if( A == "ipremoteoverrule" ) { | 73 | } else if( A == "ipremoteoverrule" ) { |
74 | Data.IP.RemoteOverrule = (V == "yes"); | 74 | Data.IP.RemoteOverrule = (V == "yes"); |
75 | } else if( A == "ipgwautomatic" ) { | 75 | } else if( A == "ipgwautomatic" ) { |
76 | Data.IP.GWAutomatic = (V == "yes"); | 76 | Data.IP.GWAutomatic = (V == "yes"); |
77 | } else if( A == "ipgwisdefault" ) { | 77 | } else if( A == "ipgwisdefault" ) { |
78 | Data.IP.GWIsDefault = (V == "yes"); | 78 | Data.IP.GWIsDefault = (V == "yes"); |
79 | } else if( A == "ipgwifnotset" ) { | 79 | } else if( A == "ipgwifnotset" ) { |
80 | Data.IP.GWIfNotSet = (V == "yes"); | 80 | Data.IP.GWIfNotSet = (V == "yes"); |
81 | } else if( A == "iplocaladdress" ) { | 81 | } else if( A == "iplocaladdress" ) { |
82 | Data.IP.LocalAddress = V; | 82 | Data.IP.LocalAddress = V; |
83 | } else if( A == "ipremoteaddress" ) { | 83 | } else if( A == "ipremoteaddress" ) { |
84 | Data.IP.RemoteAddress = V; | 84 | Data.IP.RemoteAddress = V; |
85 | } else if( A == "ipgwaddress" ) { | 85 | } else if( A == "ipgwaddress" ) { |
86 | Data.IP.GWAddress = V; | 86 | Data.IP.GWAddress = V; |
87 | } | 87 | } |
88 | } else if( A.startsWith( "run" ) ) { | 88 | } else if( A.startsWith( "run" ) ) { |
89 | if( A == "runpreconnect" ) { | 89 | if( A == "runpreconnect" ) { |
90 | Data.Run.PreConnect = V; | 90 | Data.Run.PreConnect = V; |
91 | } else if( A == "runpostconnect" ) { | 91 | } else if( A == "runpostconnect" ) { |
92 | Data.Run.PostConnect = V; | 92 | Data.Run.PostConnect = V; |
93 | } else if( A == "runpredisconnect" ) { | 93 | } else if( A == "runpredisconnect" ) { |
94 | Data.Run.PreDisconnect = V; | 94 | Data.Run.PreDisconnect = V; |
95 | } else if( A == "runpostdisconnect" ) { | 95 | } else if( A == "runpostdisconnect" ) { |
96 | Data.Run.PostDisconnect = V; | 96 | Data.Run.PostDisconnect = V; |
97 | } | 97 | } |
98 | } | 98 | } |
99 | } | 99 | } |
100 | 100 | ||
101 | void APPP::saveSpecificAttribute( QTextStream & TS ) { | 101 | void APPP::saveSpecificAttribute( QTextStream & TS ) { |
102 | TS << "dnsserverassigned=" << | 102 | TS << "dnsserverassigned=" << |
103 | ( ( Data.DNS.ServerAssigned ) ? "yes" : "no" ) << endl; | 103 | ( ( Data.DNS.ServerAssigned ) ? "yes" : "no" ) << endl; |
104 | TS << "dnsdomainname=" << Data.DNS.DomainName << endl; | 104 | TS << "dnsdomainname=" << Data.DNS.DomainName << endl; |
105 | for( unsigned int i = 0; i < Data.DNS.Servers.size(); i ++ ) { | 105 | for( unsigned int i = 0; i < Data.DNS.Servers.size(); i ++ ) { |
106 | TS << "dnsserver=" << *(Data.DNS.Servers[i]) << endl; | 106 | TS << "dnsserver=" << *(Data.DNS.Servers[i]) << endl; |
107 | } | 107 | } |
108 | TS << "authmode=" << Data.Auth.Mode << endl; | 108 | TS << "authmode=" << Data.Auth.Mode << endl; |
109 | TS << "authloginexpect=" << quote( Data.Auth.Login.Expect ) << endl; | 109 | TS << "authloginexpect=" << quote( Data.Auth.Login.Expect ) << endl; |
110 | TS << "authloginsend=" << quote( Data.Auth.Login.Send ) << endl; | 110 | TS << "authloginsend=" << quote( Data.Auth.Login.Send ) << endl; |
111 | TS << "authpasswordexpect=" << quote( Data.Auth.Password.Expect ) << endl; | 111 | TS << "authpasswordexpect=" << quote( Data.Auth.Password.Expect ) << endl; |
112 | TS << "authpasswordsend=" << quote( Data.Auth.Password.Send ) << endl; | 112 | TS << "authpasswordsend=" << quote( Data.Auth.Password.Send ) << endl; |
113 | TS << "authpcemode=" << Data.Auth.PCEMode << endl; | 113 | TS << "authpcemode=" << Data.Auth.PCEMode << endl; |
114 | TS << "authclient=" << Data.Auth.Client << endl; | 114 | TS << "authclient=" << Data.Auth.Client << endl; |
115 | TS << "authserver=" << Data.Auth.Server << endl; | 115 | TS << "authserver=" << Data.Auth.Server << endl; |
116 | TS << "authsecret=" << quote( Data.Auth.Secret ) << endl; | 116 | TS << "authsecret=" << quote( Data.Auth.Secret ) << endl; |
117 | TS << "ipgwautomatic=" << ( ( Data.IP.GWAutomatic ) ? "yes" : "no" ) << endl; | 117 | TS << "ipgwautomatic=" << ( ( Data.IP.GWAutomatic ) ? "yes" : "no" ) << endl; |
118 | TS << "ipgwisdefault=" << ( ( Data.IP.GWIsDefault ) ? "yes" : "no" ) << endl; | 118 | TS << "ipgwisdefault=" << ( ( Data.IP.GWIsDefault ) ? "yes" : "no" ) << endl; |
119 | TS << "ipgwifnotset=" << ( ( Data.IP.GWIfNotSet ) ? "yes" : "no" ) << endl; | 119 | TS << "ipgwifnotset=" << ( ( Data.IP.GWIfNotSet ) ? "yes" : "no" ) << endl; |
120 | TS << "iplocaloverrule=" << ( ( Data.IP.LocalOverrule ) ? "yes" : "no" ) << endl; | 120 | TS << "iplocaloverrule=" << ( ( Data.IP.LocalOverrule ) ? "yes" : "no" ) << endl; |
121 | TS << "ipremoteoverrule=" << ( ( Data.IP.RemoteOverrule ) ? "yes" : "no" ) << endl; | 121 | TS << "ipremoteoverrule=" << ( ( Data.IP.RemoteOverrule ) ? "yes" : "no" ) << endl; |
122 | TS << "iplocaladdress=" << Data.IP.LocalAddress << endl; | 122 | TS << "iplocaladdress=" << Data.IP.LocalAddress << endl; |
123 | TS << "ipremoteaddress=" << Data.IP.RemoteAddress << endl; | 123 | TS << "ipremoteaddress=" << Data.IP.RemoteAddress << endl; |
124 | TS << "ipgwaddress=" << Data.IP.GWAddress << endl; | 124 | TS << "ipgwaddress=" << Data.IP.GWAddress << endl; |
125 | 125 | ||
126 | TS << "runpreconnect=" << Data.Run.PreConnect << endl; | 126 | TS << "runpreconnect=" << Data.Run.PreConnect << endl; |
127 | TS << "runpostconnect=" << Data.Run.PostConnect << endl; | 127 | TS << "runpostconnect=" << Data.Run.PostConnect << endl; |
128 | TS << "runpredisconnect=" << Data.Run.PreDisconnect << endl; | 128 | TS << "runpredisconnect=" << Data.Run.PreDisconnect << endl; |
129 | TS << "runpostdisconnect=" << Data.Run.PostDisconnect << endl; | 129 | TS << "runpostdisconnect=" << Data.Run.PostDisconnect << endl; |
130 | 130 | ||
131 | } | 131 | } |
132 | 132 | ||
133 | QWidget * APPP::edit( QWidget * parent ) { | 133 | QWidget * APPP::edit( QWidget * parent ) { |
134 | GUI = new PPPEdit( parent ); | 134 | GUI = new PPPEdit( parent ); |
135 | GUI->showData( Data ); | 135 | GUI->showData( Data ); |
136 | return GUI; | 136 | return GUI; |
137 | } | 137 | } |
138 | 138 | ||
139 | QString APPP::acceptable( void ) { | 139 | QString APPP::acceptable( void ) { |
140 | return ( GUI ) ? GUI->acceptable( ) : QString(); | 140 | return ( GUI ) ? GUI->acceptable( ) : QString(); |
141 | } | 141 | } |
142 | 142 | ||
143 | void APPP::commit( void ) { | 143 | void APPP::commit( void ) { |
144 | if( GUI && GUI->commit( Data ) ) { | 144 | if( GUI && GUI->commit( Data ) ) { |
145 | setModified( 1 ); | 145 | setModified( 1 ); |
146 | } | 146 | } |
147 | } | 147 | } |
148 | 148 | ||
149 | bool APPP::openFile( SystemFile & SF ) { | 149 | bool APPP::openFile( SystemFile & SF, QStringList & SL ) { |
150 | if( SF.name() == "peers" ) { | 150 | if( SF.name() == "peers" ) { |
151 | SL << "/tmp/ppp" << "peers" ; | ||
151 | SF.setPath( removeSpaces( | 152 | SF.setPath( removeSpaces( |
152 | QString( "/tmp/ppp/peers/" ) + networkSetup()->name() ) ); | 153 | QString( "/tmp/ppp/peers/" ) + networkSetup()->name() ) ); |
153 | return 1; | 154 | return 1; |
154 | } else if ( SF.name() == "chatscripts" ) { | 155 | } else if ( SF.name() == "chatscripts" ) { |
156 | SL << "/tmp/chatscripts"; | ||
155 | SF.setPath( removeSpaces( | 157 | SF.setPath( removeSpaces( |
156 | QString( "/tmp/chatscripts/" ) + networkSetup()->name() ) ); | 158 | QString( "/tmp/chatscripts/" ) + networkSetup()->name() ) ); |
157 | return 1; | 159 | return 1; |
158 | } | 160 | } |
159 | return 0; | 161 | return 0; |
160 | } | 162 | } |
161 | 163 | ||
162 | short APPP::generateFile( SystemFile & SF, long DevNr ) { | 164 | short APPP::generateFile( SystemFile & SF, long DevNr ) { |
163 | short rvl, rvd; | 165 | short rvl, rvd; |
164 | 166 | ||
165 | rvl = 1; | 167 | rvl = 1; |
166 | rvd = 1; | 168 | rvd = 1; |
167 | 169 | ||
168 | if( SF.name() == "pap-secrets" ) { | 170 | if( SF.name() == "pap-secrets" ) { |
169 | Log(("Generate PPP for %s\n", SF.name().latin1() )); | 171 | Log(("Generate PPP for %s\n", SF.name().latin1() )); |
170 | 172 | ||
171 | if( Data.Auth.Mode == 1 && Data.Auth.PCEMode == 0 ) { | 173 | if( Data.Auth.Mode == 1 && Data.Auth.PCEMode == 0 ) { |
172 | SF << "# secrets for " | 174 | SF << "# secrets for " |
173 | << networkSetup()->name().latin1() | 175 | << networkSetup()->name().latin1() |
174 | << endl; | 176 | << endl; |
175 | SF << Data.Auth.Client | 177 | SF << Data.Auth.Client |
176 | << " " | 178 | << " " |
177 | << Data.Auth.Server | 179 | << Data.Auth.Server |
178 | << " " | 180 | << " " |
179 | << Data.Auth.Secret | 181 | << Data.Auth.Secret |
180 | << endl; | 182 | << endl; |
181 | rvl = 0; | 183 | rvl = 0; |
182 | rvd = networkSetup()->getToplevel()->generateFileEmbedded( | 184 | rvd = networkSetup()->getToplevel()->generateFileEmbedded( |
183 | SF, DevNr ); | 185 | SF, DevNr ); |
184 | } | 186 | } |
185 | } else if( SF.name() == "chap-secrets" ) { | 187 | } else if( SF.name() == "chap-secrets" ) { |
186 | Log(("Generate PPP for %s\n", SF.name().latin1() )); | 188 | Log(("Generate PPP for %s\n", SF.name().latin1() )); |
187 | if( Data.Auth.Mode == 1 && Data.Auth.PCEMode != 0 ) { | 189 | if( Data.Auth.Mode == 1 && Data.Auth.PCEMode != 0 ) { |
188 | // used for both EAP and Chap | 190 | // used for both EAP and Chap |
189 | SF << "# secrets for " | 191 | SF << "# secrets for " |
190 | << networkSetup()->name().latin1() | 192 | << networkSetup()->name().latin1() |
191 | << endl; | 193 | << endl; |
192 | SF << Data.Auth.Client | 194 | SF << Data.Auth.Client |
193 | << " " | 195 | << " " |
194 | << Data.Auth.Server | 196 | << Data.Auth.Server |
195 | << " " | 197 | << " " |
196 | << Data.Auth.Secret | 198 | << Data.Auth.Secret |
197 | << endl; | 199 | << endl; |
198 | 200 | ||
199 | rvl = 0; | 201 | rvl = 0; |
200 | rvd = networkSetup()->getToplevel()->generateFileEmbedded( | 202 | rvd = networkSetup()->getToplevel()->generateFileEmbedded( |
201 | SF, DevNr ); | 203 | SF, DevNr ); |
202 | } | 204 | } |
203 | } else if ( SF.name() == "peers" ) { | 205 | } else if ( SF.name() == "peers" ) { |
204 | 206 | ||
205 | QFileInfo FI(SF.path()); | 207 | QFileInfo FI(SF.path()); |
206 | Log(("Generate PPP for %s\n", SF.name().latin1() )); | 208 | Log(("Generate PPP for %s\n", SF.name().latin1() )); |
207 | 209 | ||
208 | SF << "connect \"/usr/sbin/chat -v -f /etc/chatscripts/" | 210 | SF << "connect \"/usr/sbin/chat -v -f /etc/chatscripts/" |
209 | << FI.baseName() | 211 | << FI.baseName() |
210 | << "\"" | 212 | << "\"" |
211 | << endl; | 213 | << endl; |
212 | 214 | ||
213 | if( Data.IP.GWIsDefault ) { | 215 | if( Data.IP.GWIsDefault ) { |
214 | SF << "defaultroute" | 216 | SF << "defaultroute" |
215 | << endl; | 217 | << endl; |
216 | } | 218 | } |
217 | 219 | ||
218 | SF << "linkname " | 220 | SF << "linkname " |
219 | << removeSpaces( SF.name().latin1() ) | 221 | << removeSpaces( SF.name().latin1() ) |
220 | << endl; | 222 | << endl; |
221 | 223 | ||
222 | // insert other data here | 224 | // insert other data here |
223 | rvl = 0; | 225 | rvl = 0; |
224 | rvd = networkSetup()->getToplevel()->generateFileEmbedded( | 226 | rvd = networkSetup()->getToplevel()->generateFileEmbedded( |
225 | SF, DevNr ); | 227 | SF, DevNr ); |
226 | } else if ( SF.name() == "chatscripts" ) { | 228 | } else if ( SF.name() == "chatscripts" ) { |
227 | Log(("Generate PPP for %s\n", SF.name().latin1() )); | 229 | Log(("Generate PPP for %s\n", SF.name().latin1() )); |
228 | rvl = 0; | 230 | rvl = 0; |
229 | rvd = networkSetup()->getToplevel()->generateFileEmbedded( | 231 | rvd = networkSetup()->getToplevel()->generateFileEmbedded( |
230 | SF, DevNr ); | 232 | SF, DevNr ); |
231 | } | 233 | } |
232 | 234 | ||
233 | return (rvd == 2 || rvl == 2 ) ? 2 : | 235 | return (rvd == 2 || rvl == 2 ) ? 2 : |
234 | (rvd == 0 || rvl == 0 ) ? 0 : 1; | 236 | (rvd == 0 || rvl == 0 ) ? 0 : 1; |
235 | } | 237 | } |
diff --git a/noncore/settings/networksettings2/ppp/ppp_NNI.h b/noncore/settings/networksettings2/ppp/ppp_NNI.h index 76afb21..7830a4a 100644 --- a/noncore/settings/networksettings2/ppp/ppp_NNI.h +++ b/noncore/settings/networksettings2/ppp/ppp_NNI.h | |||
@@ -1,45 +1,45 @@ | |||
1 | #ifndef PPP_H | 1 | #ifndef PPP_H |
2 | #define PPP_H | 2 | #define PPP_H |
3 | 3 | ||
4 | #include <netnode.h> | 4 | #include <netnode.h> |
5 | #include "pppdata.h" | 5 | #include "pppdata.h" |
6 | #include "ppprun.h" | 6 | #include "ppprun.h" |
7 | 7 | ||
8 | class PPPNetNode; | 8 | class PPPNetNode; |
9 | class PPPEdit; | 9 | class PPPEdit; |
10 | class QTextStream; | 10 | class QTextStream; |
11 | 11 | ||
12 | class APPP : public ANetNodeInstance { | 12 | class APPP : public ANetNodeInstance { |
13 | 13 | ||
14 | public : | 14 | public : |
15 | 15 | ||
16 | APPP( PPPNetNode * PNN ); | 16 | APPP( PPPNetNode * PNN ); |
17 | 17 | ||
18 | RuntimeInfo * runtime( void ) | 18 | RuntimeInfo * runtime( void ) |
19 | { return (RT) ? RT : (RT = new PPPRun( this, Data ) ); } | 19 | { return (RT) ? RT : (RT = new PPPRun( this, Data ) ); } |
20 | 20 | ||
21 | QWidget * edit( QWidget * parent ); | 21 | QWidget * edit( QWidget * parent ); |
22 | QString acceptable( void ); | 22 | QString acceptable( void ); |
23 | void commit( void ); | 23 | void commit( void ); |
24 | 24 | ||
25 | virtual void * data( void ) | 25 | virtual void * data( void ) |
26 | { return (void *)&Data; } | 26 | { return (void *)&Data; } |
27 | 27 | ||
28 | virtual bool openFile( SystemFile & Sf ); | 28 | virtual bool openFile( SystemFile & Sf, QStringList &SL ); |
29 | short generateFile( SystemFile & TS, | 29 | short generateFile( SystemFile & TS, |
30 | long DevNr ); | 30 | long DevNr ); |
31 | 31 | ||
32 | protected : | 32 | protected : |
33 | 33 | ||
34 | virtual void setSpecificAttribute( QString & Attr, QString & Value ); | 34 | virtual void setSpecificAttribute( QString & Attr, QString & Value ); |
35 | virtual void saveSpecificAttribute( QTextStream & TS ); | 35 | virtual void saveSpecificAttribute( QTextStream & TS ); |
36 | 36 | ||
37 | private : | 37 | private : |
38 | 38 | ||
39 | PPPEdit * GUI; | 39 | PPPEdit * GUI; |
40 | PPPData Data; | 40 | PPPData Data; |
41 | PPPRun * RT; | 41 | PPPRun * RT; |
42 | 42 | ||
43 | }; | 43 | }; |
44 | 44 | ||
45 | #endif | 45 | #endif |
diff --git a/noncore/settings/networksettings2/profile/profilerun.cpp b/noncore/settings/networksettings2/profile/profilerun.cpp index 48011ea..77bf9ac 100644 --- a/noncore/settings/networksettings2/profile/profilerun.cpp +++ b/noncore/settings/networksettings2/profile/profilerun.cpp | |||
@@ -1,31 +1,30 @@ | |||
1 | #include <resources.h> | 1 | #include <resources.h> |
2 | 2 | ||
3 | #include "profilerun.h" | 3 | #include "profilerun.h" |
4 | 4 | ||
5 | State_t ProfileRun::detectState( void ) { | 5 | State_t ProfileRun::detectState( void ) { |
6 | InterfaceInfo * II = networkSetup()->assignedInterface(); | ||
7 | 6 | ||
8 | Log(( "Interface %p %p %p: %d\n", II, | 7 | Log(( "Profile %sabled\n", (Data->Disabled) ? "dis" : "en" )); |
9 | netNode(), netNode()->networkSetup(), (II) ? II->IsUp : 0 )); | 8 | |
10 | if( Data->Disabled ) { | 9 | if( Data->Disabled ) { |
11 | return Disabled; | 10 | return Disabled; |
12 | } | 11 | } |
13 | return Unknown; | 12 | return Unknown; |
14 | } | 13 | } |
15 | 14 | ||
16 | QString ProfileRun::setMyState( NetworkSetup * NC, Action_t A, bool ) { | 15 | QString ProfileRun::setMyState( NetworkSetup * NC, Action_t A, bool ) { |
17 | odebug << "Profile " << Data->Disabled << oendl; | 16 | odebug << "Profile " << Data->Disabled << oendl; |
18 | if( A == Disable ) { | 17 | if( A == Disable ) { |
19 | if( ! Data->Disabled ) { | 18 | if( ! Data->Disabled ) { |
20 | Data->Disabled = 1; | 19 | Data->Disabled = 1; |
21 | NC->setModified( 1 ); | 20 | NC->setModified( 1 ); |
22 | } | 21 | } |
23 | } else if( A == Enable ) { | 22 | } else if( A == Enable ) { |
24 | if( Data->Disabled ) { | 23 | if( Data->Disabled ) { |
25 | Data->Disabled = 0; | 24 | Data->Disabled = 0; |
26 | NC->setModified( 1 ); | 25 | NC->setModified( 1 ); |
27 | } | 26 | } |
28 | } | 27 | } |
29 | 28 | ||
30 | return QString(); | 29 | return QString(); |
31 | } | 30 | } |