summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings/interfaces
authorkergoth <kergoth>2003-08-09 17:14:54 (UTC)
committer kergoth <kergoth>2003-08-09 17:14:54 (UTC)
commita7e015198a8c5ad3b6e144a9032b059086253e00 (patch) (unidiff)
treeb712b6f11310d88744fe393a92b3160b741a7efe /noncore/settings/networksettings/interfaces
parentbeba0e73306815337bf04dee39502233595e9739 (diff)
downloadopie-a7e015198a8c5ad3b6e144a9032b059086253e00.zip
opie-a7e015198a8c5ad3b6e144a9032b059086253e00.tar.gz
opie-a7e015198a8c5ad3b6e144a9032b059086253e00.tar.bz2
Merge from BRANCH_1_0
Diffstat (limited to 'noncore/settings/networksettings/interfaces') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings/interfaces/interface.cpp68
-rw-r--r--noncore/settings/networksettings/interfaces/interface.h12
-rw-r--r--noncore/settings/networksettings/interfaces/interfaceadvanced.ui2
-rw-r--r--noncore/settings/networksettings/interfaces/interfaceinformation.ui267
-rw-r--r--noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp24
-rw-r--r--noncore/settings/networksettings/interfaces/interfaceinformationimp.h2
-rw-r--r--noncore/settings/networksettings/interfaces/interfaces.cpp60
-rw-r--r--noncore/settings/networksettings/interfaces/interfacesetupimp.cpp4
8 files changed, 254 insertions, 185 deletions
diff --git a/noncore/settings/networksettings/interfaces/interface.cpp b/noncore/settings/networksettings/interfaces/interface.cpp
index cc45525..69b55d1 100644
--- a/noncore/settings/networksettings/interfaces/interface.cpp
+++ b/noncore/settings/networksettings/interfaces/interface.cpp
@@ -1,10 +1,10 @@
1/** 1/**
2 * $Author$ 2 * $Author$
3 * $Date$ 3 * $Date$
4 */ 4 */
5 5
6#include "interface.h" 6#include "interface.h"
7#include <qdatetime.h> 7#include <qdatetime.h>
8#include <qfile.h> 8#include <qfile.h>
9#include <qdir.h> 9#include <qdir.h>
10#include <qfileinfo.h> 10#include <qfileinfo.h>
@@ -21,61 +21,61 @@ Interface::Interface(QObject * parent, const char * name, bool newSatus): QObjec
21} 21}
22 22
23/** 23/**
24 * Set status 24 * Set status
25 * @param newStatus - the new status 25 * @param newStatus - the new status
26 * emit updateInterface 26 * emit updateInterface
27 */ 27 */
28void Interface::setStatus(bool newStatus){ 28void Interface::setStatus(bool newStatus){
29 if(status != newStatus){ 29 if(status != newStatus){
30 status = newStatus; 30 status = newStatus;
31 refresh(); 31 refresh();
32 } 32 }
33}; 33};
34 34
35/** 35/**
36 * Set if attached or not (802.11 card pulled out for example) 36 * Set if attached or not (802.11 card pulled out for example)
37 * @param isAttached - if attached 37 * @param isAttached - if attached
38 * emit updateInterface 38 * emit updateInterface
39 */ 39 */
40void Interface::setAttached(bool isAttached){ 40void Interface::setAttached(bool isAttached){
41 attached = isAttached; 41 attached = isAttached;
42 emit(updateInterface(this)); 42 emit(updateInterface(this));
43}; 43};
44 44
45/** 45/**
46 * Set Hardware name 46 * Set Hardware name
47 * @param name - the new name 47 * @param name - the new name
48 * emit updateInterface 48 * emit updateInterface
49 */ 49 */
50void Interface::setHardwareName(const QString &name){ 50void Interface::setHardwareName(const QString &name){
51 hardwareName = name; 51 hardwareName = name;
52 emit(updateInterface(this)); 52 emit(updateInterface(this));
53}; 53};
54 54
55/** 55/**
56 * Set Module owner 56 * Set Module owner
57 * @param owner - the new owner 57 * @param owner - the new owner
58 * emit updateInterface 58 * emit updateInterface
59 */ 59 */
60void Interface::setModuleOwner(Module *owner){ 60void Interface::setModuleOwner(Module *owner){
61 moduleOwner = owner; 61 moduleOwner = owner;
62 emit(updateInterface(this)); 62 emit(updateInterface(this));
63}; 63};
64 64
65 65
66/** 66/**
67 * Try to start the interface. 67 * Try to start the interface.
68 */ 68 */
69void Interface::start(){ 69void Interface::start(){
70 // check to see if we are already running. 70 // check to see if we are already running.
71 if(true == status){ 71 if(true == status){
72 emit (updateMessage("Unable to start interface,\n already started")); 72 emit (updateMessage("Unable to start interface,\n already started"));
73 return; 73 return;
74 } 74 }
75 75
76 int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(this->name()).latin1()); 76 int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(this->name()).latin1());
77 // See if it was successfull... 77 // See if it was successfull...
78 if(ret != 0){ 78 if(ret != 0){
79 emit (updateMessage("Starting interface failed")); 79 emit (updateMessage("Starting interface failed"));
80 return; 80 return;
81 } 81 }
@@ -86,18 +86,18 @@ void Interface::start(){
86} 86}
87 87
88/** 88/**
89 * Try to stop the interface. 89 * Try to stop the interface.
90 */ 90 */
91void Interface::stop(){ 91void Interface::stop(){
92 // check to see if we are already stopped. 92 // check to see if we are already stopped.
93 if(false == status){ 93 if(false == status){
94 emit (updateMessage("Unable to stop interface,\n already stopped")); 94 emit (updateMessage("Unable to stop interface,\n already stopped"));
95 return; 95 return;
96 } 96 }
97 97
98 int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(this->name()).latin1()); 98 int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(this->name()).latin1());
99 if(ret != 0){ 99 if(ret != 0){
100 emit (updateMessage("Stopping interface failed")); 100 emit (updateMessage("Stopping interface failed"));
101 return; 101 return;
102 } 102 }
103 103
@@ -105,13 +105,13 @@ void Interface::stop(){
105 refresh(); 105 refresh();
106 emit (updateMessage("Stop successfull")); 106 emit (updateMessage("Stop successfull"));
107} 107}
108 108
109/** 109/**
110 * Try to restart the interface. 110 * Try to restart the interface.
111 */ 111 */
112void Interface::restart(){ 112void Interface::restart(){
113 stop(); 113 stop();
114 start(); 114 start();
115} 115}
116 116
117/** 117/**
@@ -130,32 +130,32 @@ bool Interface::refresh(){
130 dhcpServerIp = ""; 130 dhcpServerIp = "";
131 leaseObtained = ""; 131 leaseObtained = "";
132 leaseExpires = ""; 132 leaseExpires = "";
133 emit(updateInterface(this)); 133 emit(updateInterface(this));
134 return true; 134 return true;
135 } 135 }
136 136
137 QString fileName = QString("/tmp/%1_ifconfig_info").arg(this->name()); 137 QString fileName = QString("/tmp/%1_ifconfig_info").arg(this->name());
138 int ret = system(QString("%1 %2 > %3").arg(IFCONFIG).arg(this->name()).arg(fileName).latin1()); 138 int ret = system(QString("LANG=C %1 %2 > %3").arg(IFCONFIG).arg(this->name()).arg(fileName).latin1());
139 if(ret != 0){ 139 if(ret != 0){
140 qDebug(QString("Interface: Ifconfig return value: %1, is not 0").arg(ret).latin1()); 140 qDebug(QString("Interface: Ifconfig return value: %1, is not 0").arg(ret).latin1());
141 return false; 141 return false;
142 } 142 }
143 143
144 QFile file(fileName); 144 QFile file(fileName);
145 if (!file.open(IO_ReadOnly)){ 145 if (!file.open(IO_ReadOnly)){
146 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); 146 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1());
147 return false; 147 return false;
148 } 148 }
149 149
150 // Set to the defaults 150 // Set to the defaults
151 macAddress = ""; 151 macAddress = "";
152 ip = "0.0.0.0"; 152 ip = "0.0.0.0";
153 subnetMask = "0.0.0.0"; 153 subnetMask = "0.0.0.0";
154 broadcast = ""; 154 broadcast = "";
155 155
156 QTextStream stream( &file ); 156 QTextStream stream( &file );
157 QString line; 157 QString line;
158 while ( !stream.eof() ) { 158 while ( !stream.eof() ) {
159 line = stream.readLine(); 159 line = stream.readLine();
160 if(line.contains("HWaddr")){ 160 if(line.contains("HWaddr")){
161 int mac = line.find("HWaddr"); 161 int mac = line.find("HWaddr");
@@ -182,36 +182,36 @@ bool Interface::refresh(){
182 // DHCP TESTING 182 // DHCP TESTING
183 // reset DHCP info 183 // reset DHCP info
184 dhcpServerIp = ""; 184 dhcpServerIp = "";
185 leaseObtained = ""; 185 leaseObtained = "";
186 leaseExpires = ""; 186 leaseExpires = "";
187 dhcp = false; 187 dhcp = false;
188 188
189 QString dhcpDirectory(DHCP_INFO_DIR); 189 QString dhcpDirectory(DHCP_INFO_DIR);
190 QDir d(dhcpDirectory); 190 QDir d(dhcpDirectory);
191 if(!d.exists(dhcpDirectory)) 191 if(!d.exists(dhcpDirectory))
192 dhcpDirectory = "/var/run"; 192 dhcpDirectory = "/var/run";
193 193
194 // See if we have 194 // See if we have
195 QString dhcpFile(QString(dhcpDirectory+"/dhcpcd-%1.info").arg(this->name())); 195 QString dhcpFile(QString(dhcpDirectory+"/dhcpcd-%1.info").arg(this->name()));
196 // If there is no DHCP information then exit now with no errors. 196 // If there is no DHCP information then exit now with no errors.
197 if(!QFile::exists(dhcpFile)){ 197 if(!QFile::exists(dhcpFile)){
198 emit(updateInterface(this)); 198 emit(updateInterface(this));
199 return true; 199 return true;
200 } 200 }
201 201
202 file.setName(dhcpFile); 202 file.setName(dhcpFile);
203 if (!file.open(IO_ReadOnly)){ 203 if (!file.open(IO_ReadOnly)){
204 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); 204 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1());
205 return false; 205 return false;
206 } 206 }
207 207
208 // leaseTime and renewalTime and used if pid and deamon exe can be accessed. 208 // leaseTime and renewalTime and used if pid and deamon exe can be accessed.
209 int leaseTime = 0; 209 int leaseTime = 0;
210 int renewalTime = 0; 210 int renewalTime = 0;
211 211
212 stream.setDevice( &file ); 212 stream.setDevice( &file );
213 while ( !stream.eof() ) { 213 while ( !stream.eof() ) {
214 line = stream.readLine(); 214 line = stream.readLine();
215 if(line.contains("DHCPSIADDR=")) 215 if(line.contains("DHCPSIADDR="))
216 dhcpServerIp = line.mid(11, line.length()); 216 dhcpServerIp = line.mid(11, line.length());
217 if(line.contains("LEASETIME=")) 217 if(line.contains("LEASETIME="))
@@ -219,13 +219,13 @@ bool Interface::refresh(){
219 if(line.contains("RENEWALTIME=")) 219 if(line.contains("RENEWALTIME="))
220 renewalTime = line.mid(12, line.length()).toInt(); 220 renewalTime = line.mid(12, line.length()).toInt();
221 } 221 }
222 file.close(); 222 file.close();
223 //qDebug(QString("Interface: leaseTime: %1").arg(leaseTime).latin1()); 223 //qDebug(QString("Interface: leaseTime: %1").arg(leaseTime).latin1());
224 //qDebug(QString("Interface: renewalTime: %1").arg(renewalTime).latin1()); 224 //qDebug(QString("Interface: renewalTime: %1").arg(renewalTime).latin1());
225 225
226 // Get the pid of the deamond 226 // Get the pid of the deamond
227 dhcpFile = (QString(dhcpDirectory+"/dhcpcd-%1.pid").arg(this->name())); 227 dhcpFile = (QString(dhcpDirectory+"/dhcpcd-%1.pid").arg(this->name()));
228 file.setName(dhcpFile); 228 file.setName(dhcpFile);
229 if (!file.open(IO_ReadOnly)){ 229 if (!file.open(IO_ReadOnly)){
230 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); 230 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1());
231 return false; 231 return false;
@@ -241,34 +241,34 @@ bool Interface::refresh(){
241 241
242 if( pid == -1){ 242 if( pid == -1){
243 qDebug("Interface: Could not get pid of dhcpc deamon."); 243 qDebug("Interface: Could not get pid of dhcpc deamon.");
244 return false; 244 return false;
245 } 245 }
246 246
247 // Get the start running time of the deamon 247 // Get the start running time of the deamon
248 fileName = (QString("/proc/%1/stat").arg(pid)); 248 fileName = (QString("/proc/%1/stat").arg(pid));
249 file.setName(fileName); 249 file.setName(fileName);
250 stream.setDevice( &file ); 250 stream.setDevice( &file );
251 if (!file.open(IO_ReadOnly)){ 251 if (!file.open(IO_ReadOnly)){
252 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); 252 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1());
253 return false; 253 return false;
254 } 254 }
255 while ( !stream.eof() ) { 255 while ( !stream.eof() ) {
256 line = stream.readLine(); 256 line = stream.readLine();
257 } 257 }
258 file.close(); 258 file.close();
259 long time = 0; 259 long time = 0;
260 // Grab the start time 260 // Grab the start time
261 // pid com state ppid pgrp session tty_nr tpgid flags 261 // pid com state ppid pgrp session tty_nr tpgid flags
262 sscanf(line.latin1(), "%*d %*s %*c %*d %*d %*d %*d %*d %*u " 262 sscanf(line.latin1(), "%*d %*s %*c %*d %*d %*d %*d %*d %*u "
263 // minflt cminflt majflt cmajflt utime stime cutime cstime priority 263 // minflt cminflt majflt cmajflt utime stime cutime cstime priority
264 "%*u %*u %*u %*u %*u %*u %*d %*d %*d " 264 "%*u %*u %*u %*u %*u %*u %*d %*d %*d "
265 // nice 0 itrealvalue starttime 265 // nice 0 itrealvalue starttime
266 "%*d %*d %*d %lu", (long*) &time); 266 "%*d %*d %*d %lu", (long*) &time);
267 time = time/100; 267 time = time/100;
268 268
269 QDateTime datetime(QDateTime::currentDateTime()); 269 QDateTime datetime(QDateTime::currentDateTime());
270 270
271 // Get the uptime of the computer. 271 // Get the uptime of the computer.
272 QFile f("/proc/uptime"); 272 QFile f("/proc/uptime");
273 if ( f.open(IO_ReadOnly) ) { // file opened successfully 273 if ( f.open(IO_ReadOnly) ) { // file opened successfully
274 QTextStream t( &f ); // use a text stream 274 QTextStream t( &f ); // use a text stream
@@ -278,25 +278,25 @@ bool Interface::refresh(){
278 f.close(); 278 f.close();
279 } 279 }
280 else{ 280 else{
281 qDebug("Interface: Can't open /proc/uptime to retrive uptime."); 281 qDebug("Interface: Can't open /proc/uptime to retrive uptime.");
282 return false; 282 return false;
283 } 283 }
284 284
285 datetime = datetime.addSecs(time); 285 datetime = datetime.addSecs(time);
286 //qDebug(QString("Interface: %1 %2").arg(datetime.toString()).arg(pid).latin1()); 286 //qDebug(QString("Interface: %1 %2").arg(datetime.toString()).arg(pid).latin1());
287 287
288 // Calculate the start and renew times 288 // Calculate the start and renew times
289 leaseObtained= datetime.toString(); 289 leaseObtained= datetime.toString();
290 290
291 // Calculate the start and renew times 291 // Calculate the start and renew times
292 datetime = datetime.addSecs(leaseTime); 292 datetime = datetime.addSecs(leaseTime);
293 leaseExpires = datetime.toString(); 293 leaseExpires = datetime.toString();
294 294
295 dhcp = true; 295 dhcp = true;
296 296
297 emit(updateInterface(this)); 297 emit(updateInterface(this));
298 return true; 298 return true;
299} 299}
300 300
301// interface.cpp 301// interface.cpp
302 302
diff --git a/noncore/settings/networksettings/interfaces/interface.h b/noncore/settings/networksettings/interfaces/interface.h
index 7e98deb..ec82851 100644
--- a/noncore/settings/networksettings/interfaces/interface.h
+++ b/noncore/settings/networksettings/interfaces/interface.h
@@ -9,28 +9,28 @@ class Module;
9class Interface : public QObject{ 9class Interface : public QObject{
10 Q_OBJECT 10 Q_OBJECT
11 11
12signals: 12signals:
13 void updateInterface(Interface *i); 13 void updateInterface(Interface *i);
14 void updateMessage(const QString &message); 14 void updateMessage(const QString &message);
15 15
16public: 16public:
17 Interface(QObject * parent=0, const char * name= "unknown", bool status = false); 17 Interface(QObject * parent=0, const char * name= "unknown", bool status = false);
18 18
19 QString getInterfaceName() const { QString n(this->name()); return n; }; 19 QString getInterfaceName() const { QString n(this->name()); return n; };
20 void setInterfaceName( const QString &n ) { this->setName(n); }; 20 void setInterfaceName( const QString &n ) { this->setName(n); };
21 21
22 bool getStatus() const { return status; }; 22 bool getStatus() const { return status; };
23 void setStatus(bool newStatus); 23 void setStatus(bool newStatus);
24 24
25 bool isAttached() const { return attached; }; 25 bool isAttached() const { return attached; };
26 void setAttached(bool isAttached=false); 26 void setAttached(bool isAttached=false);
27 27
28 QString getHardwareName() const { return hardwareName; }; 28 QString getHardwareName() const { return hardwareName; };
29 void setHardwareName(const QString &name="Unknown"); 29 void setHardwareName(const QString &name="Unknown");
30 30
31 Module* getModuleOwner() const { return moduleOwner; }; 31 Module* getModuleOwner() const { return moduleOwner; };
32 void setModuleOwner(Module *owner=NULL); 32 void setModuleOwner(Module *owner=NULL);
33 33
34 // inet information. 34 // inet information.
35 QString getMacAddress() const { return macAddress; }; 35 QString getMacAddress() const { return macAddress; };
36 QString getIp() const { return ip; }; 36 QString getIp() const { return ip; };
@@ -44,13 +44,13 @@ public:
44 public slots: 44 public slots:
45 virtual bool refresh(); 45 virtual bool refresh();
46 virtual void start(); 46 virtual void start();
47 virtual void stop(); 47 virtual void stop();
48 virtual void restart(); 48 virtual void restart();
49 49
50private: 50protected:
51 // Interface information 51 // Interface information
52 QString hardwareName; 52 QString hardwareName;
53 Module *moduleOwner; 53 Module *moduleOwner;
54 bool status; 54 bool status;
55 bool attached; 55 bool attached;
56 56
diff --git a/noncore/settings/networksettings/interfaces/interfaceadvanced.ui b/noncore/settings/networksettings/interfaces/interfaceadvanced.ui
index 2e106cb..12dbb1d 100644
--- a/noncore/settings/networksettings/interfaces/interfaceadvanced.ui
+++ b/noncore/settings/networksettings/interfaces/interfaceadvanced.ui
@@ -15,13 +15,13 @@
15 <height>290</height> 15 <height>290</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>maximumSize</name> 19 <name>maximumSize</name>
20 <size> 20 <size>
21 <width>240</width> 21 <width>32767</width>
22 <height>32767</height> 22 <height>32767</height>
23 </size> 23 </size>
24 </property> 24 </property>
25 <property stdset="1"> 25 <property stdset="1">
26 <name>caption</name> 26 <name>caption</name>
27 <string>Advanced Interface Information</string> 27 <string>Advanced Interface Information</string>
diff --git a/noncore/settings/networksettings/interfaces/interfaceinformation.ui b/noncore/settings/networksettings/interfaces/interfaceinformation.ui
index 763ad90..207200e 100644
--- a/noncore/settings/networksettings/interfaces/interfaceinformation.ui
+++ b/noncore/settings/networksettings/interfaces/interfaceinformation.ui
@@ -9,153 +9,87 @@
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>219</width> 14 <width>219</width>
15 <height>255</height> 15 <height>323</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Interface Information</string> 20 <string>Interface Information</string>
21 </property> 21 </property>
22 <grid> 22 <property>
23 <name>layoutMargin</name>
24 </property>
25 <property>
26 <name>layoutSpacing</name>
27 </property>
28 <vbox>
23 <property stdset="1"> 29 <property stdset="1">
24 <name>margin</name> 30 <name>margin</name>
25 <number>11</number> 31 <number>4</number>
26 </property> 32 </property>
27 <property stdset="1"> 33 <property stdset="1">
28 <name>spacing</name> 34 <name>spacing</name>
29 <number>6</number> 35 <number>3</number>
30 </property> 36 </property>
31 <widget row="4" column="0" rowspan="1" colspan="2" > 37 <widget>
32 <class>QLayoutWidget</class>
33 <property stdset="1">
34 <name>name</name>
35 <cstring>Layout1</cstring>
36 </property>
37 <grid>
38 <property stdset="1">
39 <name>margin</name>
40 <number>0</number>
41 </property>
42 <property stdset="1">
43 <name>spacing</name>
44 <number>6</number>
45 </property>
46 <widget row="1" column="0" >
47 <class>QPushButton</class>
48 <property stdset="1">
49 <name>name</name>
50 <cstring>refreshButton</cstring>
51 </property>
52 <property stdset="1">
53 <name>text</name>
54 <string>&amp;Refresh</string>
55 </property>
56 </widget>
57 <widget row="0" column="1" >
58 <class>QPushButton</class>
59 <property stdset="1">
60 <name>name</name>
61 <cstring>stopButton</cstring>
62 </property>
63 <property stdset="1">
64 <name>text</name>
65 <string>S&amp;top</string>
66 </property>
67 </widget>
68 <widget row="1" column="1" >
69 <class>QPushButton</class>
70 <property stdset="1">
71 <name>name</name>
72 <cstring>restartButton</cstring>
73 </property>
74 <property stdset="1">
75 <name>text</name>
76 <string>R&amp;estart</string>
77 </property>
78 </widget>
79 <widget row="0" column="0" >
80 <class>QPushButton</class>
81 <property stdset="1">
82 <name>name</name>
83 <cstring>startButton</cstring>
84 </property>
85 <property stdset="1">
86 <name>text</name>
87 <string>&amp;Start</string>
88 </property>
89 </widget>
90 </grid>
91 </widget>
92 <widget row="0" column="0" >
93 <class>Line</class>
94 <property stdset="1">
95 <name>name</name>
96 <cstring>Line1</cstring>
97 </property>
98 <property stdset="1">
99 <name>orientation</name>
100 <enum>Horizontal</enum>
101 </property>
102 </widget>
103 <widget row="0" column="0" >
104 <class>QLabel</class> 38 <class>QLabel</class>
105 <property stdset="1"> 39 <property stdset="1">
106 <name>name</name> 40 <name>name</name>
107 <cstring>TextLabel22</cstring> 41 <cstring>TextLabel22</cstring>
108 </property> 42 </property>
109 <property stdset="1"> 43 <property stdset="1">
110 <name>text</name> 44 <name>text</name>
111 <string>IP Address</string> 45 <string>IP Address</string>
112 </property> 46 </property>
113 </widget> 47 </widget>
114 <widget row="1" column="0" > 48 <widget>
115 <class>QLabel</class> 49 <class>QLabel</class>
116 <property stdset="1"> 50 <property stdset="1">
117 <name>name</name> 51 <name>name</name>
118 <cstring>TextLabel23</cstring> 52 <cstring>ipAddressLabel</cstring>
119 </property> 53 </property>
120 <property stdset="1"> 54 <property stdset="1">
121 <name>text</name> 55 <name>frameShape</name>
122 <string>Subnet Mask</string> 56 <enum>Panel</enum>
123 </property> 57 </property>
124 </widget>
125 <widget row="2" column="0" >
126 <class>QLabel</class>
127 <property stdset="1"> 58 <property stdset="1">
128 <name>name</name> 59 <name>frameShadow</name>
129 <cstring>TextLabel21</cstring> 60 <enum>Sunken</enum>
130 </property> 61 </property>
131 <property stdset="1"> 62 <property stdset="1">
132 <name>text</name> 63 <name>text</name>
133 <string>MAC Address</string> 64 <string>0.0.0.0</string>
134 </property> 65 </property>
135 </widget> 66 </widget>
136 <widget row="3" column="0" > 67 <widget>
137 <class>QLabel</class> 68 <class>Line</class>
138 <property stdset="1"> 69 <property stdset="1">
139 <name>name</name> 70 <name>name</name>
140 <cstring>TextLabel24</cstring> 71 <cstring>Line1</cstring>
141 </property> 72 </property>
142 <property stdset="1"> 73 <property stdset="1">
143 <name>frameShape</name> 74 <name>orientation</name>
144 <enum>MShape</enum> 75 <enum>Horizontal</enum>
145 </property> 76 </property>
77 </widget>
78 <widget>
79 <class>QLabel</class>
146 <property stdset="1"> 80 <property stdset="1">
147 <name>frameShadow</name> 81 <name>name</name>
148 <enum>MShadow</enum> 82 <cstring>TextLabel23</cstring>
149 </property> 83 </property>
150 <property stdset="1"> 84 <property stdset="1">
151 <name>text</name> 85 <name>text</name>
152 <string>Broadcast</string> 86 <string>Subnet Mask</string>
153 </property> 87 </property>
154 </widget> 88 </widget>
155 <widget row="1" column="1" > 89 <widget>
156 <class>QLabel</class> 90 <class>QLabel</class>
157 <property stdset="1"> 91 <property stdset="1">
158 <name>name</name> 92 <name>name</name>
159 <cstring>subnetMaskLabel</cstring> 93 <cstring>subnetMaskLabel</cstring>
160 </property> 94 </property>
161 <property stdset="1"> 95 <property stdset="1">
@@ -168,13 +102,13 @@
168 </property> 102 </property>
169 <property stdset="1"> 103 <property stdset="1">
170 <name>text</name> 104 <name>text</name>
171 <string>0.0.0.0</string> 105 <string>0.0.0.0</string>
172 </property> 106 </property>
173 </widget> 107 </widget>
174 <widget row="2" column="1" > 108 <widget>
175 <class>QLabel</class> 109 <class>QLabel</class>
176 <property stdset="1"> 110 <property stdset="1">
177 <name>name</name> 111 <name>name</name>
178 <cstring>macAddressLabel</cstring> 112 <cstring>macAddressLabel</cstring>
179 </property> 113 </property>
180 <property stdset="1"> 114 <property stdset="1">
@@ -187,13 +121,24 @@
187 </property> 121 </property>
188 <property stdset="1"> 122 <property stdset="1">
189 <name>text</name> 123 <name>text</name>
190 <string>00:00:00:00:00:00</string> 124 <string>00:00:00:00:00:00</string>
191 </property> 125 </property>
192 </widget> 126 </widget>
193 <widget row="3" column="1" > 127 <widget>
128 <class>QLabel</class>
129 <property stdset="1">
130 <name>name</name>
131 <cstring>TextLabel21</cstring>
132 </property>
133 <property stdset="1">
134 <name>text</name>
135 <string>MAC Address</string>
136 </property>
137 </widget>
138 <widget>
194 <class>QLabel</class> 139 <class>QLabel</class>
195 <property stdset="1"> 140 <property stdset="1">
196 <name>name</name> 141 <name>name</name>
197 <cstring>broadcastLabel</cstring> 142 <cstring>broadcastLabel</cstring>
198 </property> 143 </property>
199 <property stdset="1"> 144 <property stdset="1">
@@ -206,53 +151,104 @@
206 </property> 151 </property>
207 <property stdset="1"> 152 <property stdset="1">
208 <name>text</name> 153 <name>text</name>
209 <string></string> 154 <string></string>
210 </property> 155 </property>
211 </widget> 156 </widget>
212 <widget row="0" column="1" > 157 <widget>
213 <class>QLabel</class> 158 <class>QLabel</class>
214 <property stdset="1"> 159 <property stdset="1">
215 <name>name</name> 160 <name>name</name>
216 <cstring>ipAddressLabel</cstring> 161 <cstring>TextLabel24</cstring>
217 </property> 162 </property>
218 <property stdset="1"> 163 <property stdset="1">
219 <name>frameShape</name> 164 <name>frameShape</name>
220 <enum>Panel</enum> 165 <enum>MShape</enum>
221 </property> 166 </property>
222 <property stdset="1"> 167 <property stdset="1">
223 <name>frameShadow</name> 168 <name>frameShadow</name>
224 <enum>Sunken</enum> 169 <enum>MShadow</enum>
225 </property> 170 </property>
226 <property stdset="1"> 171 <property stdset="1">
227 <name>text</name> 172 <name>text</name>
228 <string>0.0.0.0</string> 173 <string>Broadcast</string>
229 </property> 174 </property>
230 </widget> 175 </widget>
231 <spacer row="7" column="1" > 176 <widget>
232 <property> 177 <class>QLayoutWidget</class>
178 <property stdset="1">
233 <name>name</name> 179 <name>name</name>
234 <cstring>Spacer18</cstring> 180 <cstring>Layout1</cstring>
235 </property> 181 </property>
182 <grid>
183 <property stdset="1">
184 <name>margin</name>
185 <number>0</number>
186 </property>
187 <property stdset="1">
188 <name>spacing</name>
189 <number>6</number>
190 </property>
191 <widget row="1" column="0" >
192 <class>QPushButton</class>
193 <property stdset="1">
194 <name>name</name>
195 <cstring>refreshButton</cstring>
196 </property>
197 <property stdset="1">
198 <name>text</name>
199 <string>&amp;Refresh</string>
200 </property>
201 </widget>
202 <widget row="0" column="1" >
203 <class>QPushButton</class>
204 <property stdset="1">
205 <name>name</name>
206 <cstring>stopButton</cstring>
207 </property>
208 <property stdset="1">
209 <name>text</name>
210 <string>S&amp;top</string>
211 </property>
212 </widget>
213 <widget row="1" column="1" >
214 <class>QPushButton</class>
215 <property stdset="1">
216 <name>name</name>
217 <cstring>restartButton</cstring>
218 </property>
219 <property stdset="1">
220 <name>text</name>
221 <string>R&amp;estart</string>
222 </property>
223 </widget>
224 <widget row="0" column="0" >
225 <class>QPushButton</class>
226 <property stdset="1">
227 <name>name</name>
228 <cstring>startButton</cstring>
229 </property>
230 <property stdset="1">
231 <name>text</name>
232 <string>&amp;Start</string>
233 </property>
234 </widget>
235 </grid>
236 </widget>
237 <widget>
238 <class>Line</class>
236 <property stdset="1"> 239 <property stdset="1">
237 <name>orientation</name> 240 <name>name</name>
238 <enum>Vertical</enum> 241 <cstring>Line5</cstring>
239 </property> 242 </property>
240 <property stdset="1"> 243 <property stdset="1">
241 <name>sizeType</name> 244 <name>orientation</name>
242 <enum>Expanding</enum> 245 <enum>Horizontal</enum>
243 </property>
244 <property>
245 <name>sizeHint</name>
246 <size>
247 <width>20</width>
248 <height>20</height>
249 </size>
250 </property> 246 </property>
251 </spacer> 247 </widget>
252 <widget row="6" column="0" rowspan="1" colspan="2" > 248 <widget>
253 <class>QLayoutWidget</class> 249 <class>QLayoutWidget</class>
254 <property stdset="1"> 250 <property stdset="1">
255 <name>name</name> 251 <name>name</name>
256 <cstring>Layout2</cstring> 252 <cstring>Layout2</cstring>
257 </property> 253 </property>
258 <hbox> 254 <hbox>
@@ -295,24 +291,45 @@
295 <name>text</name> 291 <name>text</name>
296 <string>&amp;View Advanced Information</string> 292 <string>&amp;View Advanced Information</string>
297 </property> 293 </property>
298 </widget> 294 </widget>
299 </hbox> 295 </hbox>
300 </widget> 296 </widget>
301 <widget row="5" column="0" rowspan="1" colspan="2" > 297 <spacer>
302 <class>Line</class> 298 <property>
303 <property stdset="1">
304 <name>name</name> 299 <name>name</name>
305 <cstring>Line5</cstring> 300 <cstring>Spacer18</cstring>
306 </property> 301 </property>
307 <property stdset="1"> 302 <property stdset="1">
308 <name>orientation</name> 303 <name>orientation</name>
309 <enum>Horizontal</enum> 304 <enum>Vertical</enum>
305 </property>
306 <property stdset="1">
307 <name>sizeType</name>
308 <enum>Expanding</enum>
309 </property>
310 <property>
311 <name>sizeHint</name>
312 <size>
313 <width>20</width>
314 <height>20</height>
315 </size>
316 </property>
317 </spacer>
318 <widget>
319 <class>QCheckBox</class>
320 <property stdset="1">
321 <name>name</name>
322 <cstring>CheckBoxSilent</cstring>
323 </property>
324 <property stdset="1">
325 <name>text</name>
326 <string>be &amp;silent</string>
310 </property> 327 </property>
311 </widget> 328 </widget>
312 </grid> 329 </vbox>
313</widget> 330</widget>
314<tabstops> 331<tabstops>
315 <tabstop>startButton</tabstop> 332 <tabstop>startButton</tabstop>
316 <tabstop>stopButton</tabstop> 333 <tabstop>stopButton</tabstop>
317 <tabstop>refreshButton</tabstop> 334 <tabstop>refreshButton</tabstop>
318 <tabstop>restartButton</tabstop> 335 <tabstop>restartButton</tabstop>
diff --git a/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp b/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp
index e00dcce..37c3a91 100644
--- a/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp
+++ b/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp
@@ -1,39 +1,52 @@
1#include "interfaceinformationimp.h" 1#include "interfaceinformationimp.h"
2#include "interfaceadvanced.h" 2#include "interfaceadvanced.h"
3 3
4#include <qcheckbox.h>
4#include <qpushbutton.h> 5#include <qpushbutton.h>
5#include <qlabel.h> 6#include <qlabel.h>
6#include <qgroupbox.h> 7#include <qgroupbox.h>
7#include <qmessagebox.h> 8#include <qmessagebox.h>
8 9
9#ifdef QWS 10#include <qpe/config.h>
11
12#ifdef QWS
10#else 13#else
11 #define showMaximized show 14 #define showMaximized show
12#endif 15#endif
13 16
14/** 17/**
15 * Constructor for the InterfaceInformationImp class. This class pretty much 18 * Constructor for the InterfaceInformationImp class. This class pretty much
16 * just display's information about the interface that is passed to it. 19 * just display's information about the interface that is passed to it.
17 */ 20 */
18InterfaceInformationImp::InterfaceInformationImp(QWidget *parent, const char *name, Interface *i, WFlags f):InterfaceInformation(parent, name, f), interface(i){ 21InterfaceInformationImp::InterfaceInformationImp(QWidget *parent, const char *name, Interface *i, WFlags f):InterfaceInformation(parent, name, f), interface(i){
19 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *))); 22 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *)));
20 connect(i, SIGNAL(updateMessage(const QString &)), this, SLOT(showMessage(const QString &))); 23 connect(i, SIGNAL(updateMessage(const QString &)), this, SLOT(showMessage(const QString &)));
21 updateInterface(interface); 24 updateInterface(interface);
22 connect(startButton, SIGNAL(clicked()), interface, SLOT(start())); 25 connect(startButton, SIGNAL(clicked()), interface, SLOT(start()));
23 connect(stopButton, SIGNAL(clicked()), interface, SLOT(stop())); 26 connect(stopButton, SIGNAL(clicked()), interface, SLOT(stop()));
24 connect(restartButton, SIGNAL(clicked()), interface, SLOT(restart())); 27 connect(restartButton, SIGNAL(clicked()), interface, SLOT(restart()));
25 connect(refreshButton, SIGNAL(clicked()), interface, SLOT(refresh())); 28 connect(refreshButton, SIGNAL(clicked()), interface, SLOT(refresh()));
26 connect(advancedButton, SIGNAL(clicked()), this, SLOT(advanced())); 29 connect(advancedButton, SIGNAL(clicked()), this, SLOT(advanced()));
30 Config cfg("networksettings", Config::User);
31 cfg.setGroup("interface");
32 CheckBoxSilent->setChecked( cfg.readBoolEntry("silent", false) );
33}
34
35InterfaceInformationImp::~InterfaceInformationImp()
36{
37 Config cfg("networksettings", Config::User);
38 cfg.setGroup("interface");
39 cfg.writeEntry("silent", CheckBoxSilent->isChecked() );
27} 40}
28 41
29/** 42/**
30 * Update the interface information and buttons. 43 * Update the interface information and buttons.
31 * @param Intarface *i the interface to update (should be the one we already 44 * @param Intarface *i the interface to update (should be the one we already
32 * know about). 45 * know about).
33 */ 46 */
34void InterfaceInformationImp::updateInterface(Interface *){ 47void InterfaceInformationImp::updateInterface(Interface *){
35 if(interface->getStatus()){ 48 if(interface->getStatus()){
36 startButton->setEnabled(false); 49 startButton->setEnabled(false);
37 stopButton->setEnabled(true); 50 stopButton->setEnabled(true);
38 restartButton->setEnabled(true); 51 restartButton->setEnabled(true);
39 } 52 }
@@ -48,13 +61,13 @@ void InterfaceInformationImp::updateInterface(Interface *){
48 broadcastLabel->setText(interface->getBroadcast()); 61 broadcastLabel->setText(interface->getBroadcast());
49} 62}
50 63
51/** 64/**
52 * Create the advanced widget. Fill it with the current interface's information. 65 * Create the advanced widget. Fill it with the current interface's information.
53 * Display it. 66 * Display it.
54 */ 67 */
55void InterfaceInformationImp::advanced(){ 68void InterfaceInformationImp::advanced(){
56 InterfaceAdvanced *a = new InterfaceAdvanced(this, "InterfaceAdvanced", Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog); 69 InterfaceAdvanced *a = new InterfaceAdvanced(this, "InterfaceAdvanced", Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog);
57 a->interfaceName->setText(interface->getInterfaceName()); 70 a->interfaceName->setText(interface->getInterfaceName());
58 a->macAddressLabel->setText(interface->getMacAddress()); 71 a->macAddressLabel->setText(interface->getMacAddress());
59 a->ipAddressLabel->setText(interface->getIp()); 72 a->ipAddressLabel->setText(interface->getIp());
60 a->subnetMaskLabel->setText(interface->getSubnetMask()); 73 a->subnetMaskLabel->setText(interface->getSubnetMask());
@@ -67,13 +80,14 @@ void InterfaceInformationImp::advanced(){
67} 80}
68 81
69/** 82/**
70 * Messages from the interface if start/stop went as planned. 83 * Messages from the interface if start/stop went as planned.
71 * Purly for user feedback. 84 * Purly for user feedback.
72 * @param message the message to display. 85 * @param message the message to display.
73 */ 86 */
74void InterfaceInformationImp::showMessage(const QString &message){ 87void InterfaceInformationImp::showMessage(const QString &message){
88 if (CheckBoxSilent->isChecked()) return;
75 QMessageBox::information(this, "Message", message, QMessageBox::Ok); 89 QMessageBox::information(this, "Message", message, QMessageBox::Ok);
76} 90}
77 91
78// infoimp.cpp 92// infoimp.cpp
79 93
diff --git a/noncore/settings/networksettings/interfaces/interfaceinformationimp.h b/noncore/settings/networksettings/interfaces/interfaceinformationimp.h
index 65cdfe0..9c93d1d 100644
--- a/noncore/settings/networksettings/interfaces/interfaceinformationimp.h
+++ b/noncore/settings/networksettings/interfaces/interfaceinformationimp.h
@@ -7,13 +7,13 @@
7class InterfaceInformationImp : public InterfaceInformation { 7class InterfaceInformationImp : public InterfaceInformation {
8 8
9Q_OBJECT 9Q_OBJECT
10 10
11public: 11public:
12 InterfaceInformationImp(QWidget *parent=0, const char *name=0, Interface *i=0, WFlags f=0); 12 InterfaceInformationImp(QWidget *parent=0, const char *name=0, Interface *i=0, WFlags f=0);
13 ~InterfaceInformationImp(){}; 13 ~InterfaceInformationImp();
14 14
15private slots: 15private slots:
16 void advanced(); 16 void advanced();
17 void updateInterface(Interface *i); 17 void updateInterface(Interface *i);
18 void showMessage(const QString &message); 18 void showMessage(const QString &message);
19 19
diff --git a/noncore/settings/networksettings/interfaces/interfaces.cpp b/noncore/settings/networksettings/interfaces/interfaces.cpp
index 71d0cf5..436e449 100644
--- a/noncore/settings/networksettings/interfaces/interfaces.cpp
+++ b/noncore/settings/networksettings/interfaces/interfaces.cpp
@@ -1,8 +1,9 @@
1#include "interfaces.h" 1#include "interfaces.h"
2 2
3#include <qcheckbox.h>
3#include <qfile.h> 4#include <qfile.h>
4#include <qtextstream.h> 5#include <qtextstream.h>
5#include <qregexp.h> 6#include <qregexp.h>
6 7
7// The three stanza's 8// The three stanza's
8#define AUTO "auto" 9#define AUTO "auto"
@@ -148,12 +149,13 @@ bool Interfaces::isInterfaceSet() const {
148 * @param family the family of this interface inet or inet, ipx or inet6 149 * @param family the family of this interface inet or inet, ipx or inet6
149 * Must of one of the families defined in interfaces.h 150 * Must of one of the families defined in interfaces.h
150 * @param method for the family. see interfaces man page for family methods. 151 * @param method for the family. see interfaces man page for family methods.
151 * @return true if successfull. 152 * @return true if successfull.
152 */ 153 */
153bool Interfaces::addInterface(const QString &interface, const QString &family, const QString &method){ 154bool Interfaces::addInterface(const QString &interface, const QString &family, const QString &method){
155 qDebug("Interfaces::addInterface(%s)",interface.latin1());
154 if(0 == acceptedFamily.contains(family)) 156 if(0 == acceptedFamily.contains(family))
155 return false; 157 return false;
156 QString newInterface = interface.simplifyWhiteSpace(); 158 QString newInterface = interface.simplifyWhiteSpace();
157 newInterface = newInterface.replace(QRegExp(" "), ""); 159 newInterface = newInterface.replace(QRegExp(" "), "");
158 interfaces.append(""); 160 interfaces.append("");
159 interfaces.append(QString(IFACE " %1 %2 %3").arg(newInterface).arg(family).arg(method)); 161 interfaces.append(QString(IFACE " %1 %2 %3").arg(newInterface).arg(family).arg(method));
@@ -163,12 +165,13 @@ bool Interfaces::addInterface(const QString &interface, const QString &family, c
163/** 165/**
164 * Copies interface with name interface to name newInterface 166 * Copies interface with name interface to name newInterface
165 * @param newInterface name of the new interface. 167 * @param newInterface name of the new interface.
166 * @return bool true if successfull 168 * @return bool true if successfull
167 */ 169 */
168bool Interfaces::copyInterface(const QString &interface, const QString &newInterface){ 170bool Interfaces::copyInterface(const QString &interface, const QString &newInterface){
171 qDebug("copy interface %s to %s", interface.latin1(), newInterface.latin1());
169 if(!setInterface(interface)) 172 if(!setInterface(interface))
170 return false; 173 return false;
171 174
172 // Store the old interface and bump past the stanza line. 175 // Store the old interface and bump past the stanza line.
173 QStringList::Iterator it = currentIface; 176 QStringList::Iterator it = currentIface;
174 it++; 177 it++;
@@ -269,18 +272,22 @@ QString Interfaces::getInterfaceMethod(bool &error){
269/** 272/**
270 * Sets the interface name to newName. 273 * Sets the interface name to newName.
271 * @param newName the new name of the interface. All whitespace is removed. 274 * @param newName the new name of the interface. All whitespace is removed.
272 * @return bool true if successfull. 275 * @return bool true if successfull.
273 */ 276 */
274bool Interfaces::setInterfaceName(const QString &newName){ 277bool Interfaces::setInterfaceName(const QString &newName){
278 qDebug("setInterfaceName %s", newName.latin1());
275 if(currentIface == interfaces.end()) 279 if(currentIface == interfaces.end())
276 return false; 280 return false;
277 QString name = newName.simplifyWhiteSpace(); 281 QString name = newName.simplifyWhiteSpace();
278 name = name.replace(QRegExp(" "), ""); 282 name = name.replace(QRegExp(" "), "");
279 bool returnValue = false; 283 bool returnValue = false;
280 (*currentIface) = QString("iface %1 %2 %3").arg(name).arg(getInterfaceFamily(returnValue)).arg(getInterfaceMethod(returnValue)); 284 QString tmp = QString("iface %1 %2 %3").arg(name).arg(getInterfaceFamily(returnValue)).arg(getInterfaceMethod(returnValue));
285 qDebug("setting %s",tmp.latin1());
286
287 (*currentIface) = tmp;
281 return !returnValue; 288 return !returnValue;
282} 289}
283 290
284/** 291/**
285 * Sets the interface family to newName. 292 * Sets the interface family to newName.
286 * @param newName the new name of the interface. Must be one of the families 293 * @param newName the new name of the interface. Must be one of the families
@@ -324,19 +331,25 @@ QString Interfaces::getInterfaceOption(const QString &option, bool &error){
324 return getOption(currentIface, option, error); 331 return getOption(currentIface, option, error);
325} 332}
326 333
327/** 334/**
328 * Set a value for an option in the currently selected interface. If option 335 * Set a value for an option in the currently selected interface. If option
329 * doesn't exist then it is added along with the value. 336 * doesn't exist then it is added along with the value.
337 * If value isEmpty() then we will remove the option
338 *
330 * @param option the options to set the value. 339 * @param option the options to set the value.
331 * @param value the value that option should be set to. 340 * @param value the value that option should be set to.
332 * @param error set to true if any error occurs, false otherwise. 341 * @param error set to true if any error occurs, false otherwise.
333 * @return QString the options value. QString::null if error == true 342 * @return QString the options value. QString::null if error == true
334 */ 343 */
335bool Interfaces::setInterfaceOption(const QString &option, const QString &value){ 344bool Interfaces::setInterfaceOption(const QString &option, const QString &value){
336 return setOption(currentIface, option, value); 345 if( value.stripWhiteSpace().isEmpty() )
346 return removeInterfaceOption( option );
347
348 qDebug("iface >%s< option >%s< value >%s<", (*currentIface).latin1(), option.latin1(),value.latin1());
349 return setOption(currentIface, option, value);
337} 350}
338 351
339/** 352/**
340 * Removes a value for an option in the currently selected interface. 353 * Removes a value for an option in the currently selected interface.
341 * @param option the options to set the value. 354 * @param option the options to set the value.
342 * @param error set to true if any error occurs, false otherwise. 355 * @param error set to true if any error occurs, false otherwise.
@@ -489,36 +502,55 @@ bool Interfaces::setStanza(const QString &stanza, const QString &option, QString
489 * @param option the option to use when setting value. 502 * @param option the option to use when setting value.
490 * @return bool true if successfull, false otherwise. 503 * @return bool true if successfull, false otherwise.
491 */ 504 */
492bool Interfaces::setOption(const QStringList::Iterator &start, const QString &option, const QString &value){ 505bool Interfaces::setOption(const QStringList::Iterator &start, const QString &option, const QString &value){
493 if(start == interfaces.end()) 506 if(start == interfaces.end())
494 return false; 507 return false;
495 508 qDebug("setting option");
496 bool found = false; 509 bool found = false;
510 bool replaced = false;
511 QStringList::Iterator insertAt = NULL;
497 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) { 512 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) {
498 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){ 513 qDebug(" Interfaces::setOption got line >%s<",(*it).latin1());
499 if(!found && value != ""){ 514 // FIXME: was not completly stupid just wrong sice all options got inserted bevore the iface line
500 // Got to the end of the stanza without finding it, so append it. 515 // but since it works with an empty interfaces file I (tille) will not do anything more
501 interfaces.insert(--it, QString("\t%1 %2").arg(option).arg(value)); 516 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) ){
502 } 517 if (found) break;
503 found = true; 518// && it != start){
504 break; 519// if(!found && value != ""){
505 } 520// // Got to the end of the stanza without finding it, so append it.
521// qDebug(" Got to the end of the stanza without finding it, so append it.");
522// interfaces.insert(--it, QString("\t%1 %2").arg(option).arg(value));
523// }
524 qDebug("found 1");
525// interfaces.insert(++it, QString("\t%1 %2").arg(option).arg(value));
526 found = true;
527 insertAt = it;
528
529 }
506 if((*it).contains(option) && it != start && (*it).at(0) != '#'){ 530 if((*it).contains(option) && it != start && (*it).at(0) != '#'){
507 // Found it in stanza so replace it. 531 // Found it in stanza so replace it.
532 qDebug("found 2");
508 if(found) 533 if(found)
509 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1()); 534 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
510 found = true; 535 found = true;
536 replaced = true;
511 (*it) = QString("\t%1 %2").arg(option).arg(value); 537 (*it) = QString("\t%1 %2").arg(option).arg(value);
512 } 538 }
513 } 539 }
514 if(!found){ 540 if(!found){
541 qDebug("! found insert anyway");
515 QStringList::Iterator p = start; 542 QStringList::Iterator p = start;
516 interfaces.insert(++p, QString("\t%1 %2").arg(option).arg(value)); 543 interfaces.insert(++p, QString("\t%1 %2").arg(option).arg(value));
517 found = true; 544 found = true;
518 } 545 }
546
547 if(found && !replaced){
548 qDebug("found iface but not the option so insert it here...");
549 interfaces.insert(++insertAt, QString("\t%1 %2").arg(option).arg(value));
550 }
519 return found; 551 return found;
520} 552}
521 553
522/** 554/**
523 * Removes a stanza and all of its options 555 * Removes a stanza and all of its options
524 * @param stanza the stanza to remove 556 * @param stanza the stanza to remove
@@ -549,13 +581,14 @@ bool Interfaces::removeOption(const QStringList::Iterator &start, const QString
549 } 581 }
550 if((*it).contains(option) && it != start && (*it).at(0) != '#'){ 582 if((*it).contains(option) && it != start && (*it).at(0) != '#'){
551 // Found it in stanza so replace it. 583 // Found it in stanza so replace it.
552 if(found) 584 if(found)
553 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1()); 585 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
554 found = true; 586 found = true;
555 (*it) = ""; 587 it = interfaces.remove( it ); // we really want to remove the line
588 --it; // we do ++it later in the head of the for loop
556 } 589 }
557 } 590 }
558 return found; 591 return found;
559} 592}
560 593
561/** 594/**
@@ -576,13 +609,14 @@ bool Interfaces::removeOption(const QStringList::Iterator &start, const QString
576 } 609 }
577 if((*it).contains(option) && (*it).contains(value) && it != start && (*it).at(0) != '#'){ 610 if((*it).contains(option) && (*it).contains(value) && it != start && (*it).at(0) != '#'){
578 // Found it in stanza so replace it. 611 // Found it in stanza so replace it.
579 if(found) 612 if(found)
580 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1()); 613 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
581 found = true; 614 found = true;
582 (*it) = ""; 615 it = interfaces.remove( it ); // we really want to remove the line
616 --it; // we do ++it later in the head of the for loop
583 } 617 }
584 } 618 }
585 return found; 619 return found;
586} 620}
587 621
588/** 622/**
diff --git a/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp b/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp
index b40d101..e844d8a 100644
--- a/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp
+++ b/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp
@@ -41,12 +41,13 @@ InterfaceSetupImp::~InterfaceSetupImp(){
41/** 41/**
42 * Save the current settings, then write out the interfaces file and close. 42 * Save the current settings, then write out the interfaces file and close.
43 */ 43 */
44bool InterfaceSetupImp::saveChanges(){ 44bool InterfaceSetupImp::saveChanges(){
45 bool error; 45 bool error;
46 QString iface = interfaces->getInterfaceName(error); 46 QString iface = interfaces->getInterfaceName(error);
47 qDebug("InterfaceSetupImp::saveChanges saves interface %s", iface.latin1() );
47 if(!saveSettings()) 48 if(!saveSettings())
48 return false; 49 return false;
49 50
50 interfaces->write(); 51 interfaces->write();
51 52
52 if (interface->getStatus()) { 53 if (interface->getStatus()) {
@@ -114,12 +115,15 @@ bool InterfaceSetupImp::saveSettings(){
114 interfaces->setInterfaceOption("netmask", subnetMaskEdit->text()); 115 interfaces->setInterfaceOption("netmask", subnetMaskEdit->text());
115 interfaces->setInterfaceOption("gateway", gatewayEdit->text()); 116 interfaces->setInterfaceOption("gateway", gatewayEdit->text());
116 if(!firstDNSLineEdit->text().isEmpty() || !secondDNSLineEdit->text().isEmpty()){ 117 if(!firstDNSLineEdit->text().isEmpty() || !secondDNSLineEdit->text().isEmpty()){
117 QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text(); 118 QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text();
118 interfaces->setInterfaceOption("up "DNSSCRIPT" -a ", dns); 119 interfaces->setInterfaceOption("up "DNSSCRIPT" -a ", dns);
119 interfaces->setInterfaceOption("down "DNSSCRIPT" -r ", dns); 120 interfaces->setInterfaceOption("down "DNSSCRIPT" -r ", dns);
121 }else{
122 interfaces->removeInterfaceOption("up "DNSSCRIPT" -a ");
123 interfaces->removeInterfaceOption("down "DNSSCRIPT" -r");
120 } 124 }
121 } 125 }
122 126
123 // IP Information 127 // IP Information
124 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked()); 128 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
125 return true; 129 return true;