summaryrefslogtreecommitdiff
authorbenmeyer <benmeyer>2002-10-17 16:30:44 (UTC)
committer benmeyer <benmeyer>2002-10-17 16:30:44 (UTC)
commit18cc7321db186865629a5c4702074211e42b92fd (patch) (unidiff)
treebeb15112009c1cc966115904a322b32d465e47e6
parent75f078ec92376db2c90a327bbc50d9bb5c1fb57a (diff)
downloadopie-18cc7321db186865629a5c4702074211e42b92fd.zip
opie-18cc7321db186865629a5c4702074211e42b92fd.tar.gz
opie-18cc7321db186865629a5c4702074211e42b92fd.tar.bz2
interface is now a qobject
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/networksetup/TODO2
-rw-r--r--noncore/net/networksetup/interface.cpp77
-rw-r--r--noncore/net/networksetup/interface.h31
-rw-r--r--noncore/net/networksetup/interfaceadvanced.ui11
-rw-r--r--noncore/net/networksetup/interfaceinformationimp.cpp51
-rw-r--r--noncore/net/networksetup/interfaceinformationimp.h6
-rw-r--r--noncore/net/networksetup/mainwindowimp.cpp43
-rw-r--r--noncore/net/networksetup/wlan/wlanmodule.cpp4
-rw-r--r--noncore/settings/networksettings/TODO2
-rw-r--r--noncore/settings/networksettings/interface.cpp77
-rw-r--r--noncore/settings/networksettings/interface.h31
-rw-r--r--noncore/settings/networksettings/interfaceadvanced.ui11
-rw-r--r--noncore/settings/networksettings/interfaceinformationimp.cpp51
-rw-r--r--noncore/settings/networksettings/interfaceinformationimp.h6
-rw-r--r--noncore/settings/networksettings/mainwindowimp.cpp43
-rw-r--r--noncore/settings/networksettings/wlan/wlanmodule.cpp4
16 files changed, 258 insertions, 192 deletions
diff --git a/noncore/net/networksetup/TODO b/noncore/net/networksetup/TODO
index 7386646..c8e2989 100644
--- a/noncore/net/networksetup/TODO
+++ b/noncore/net/networksetup/TODO
@@ -1,8 +1,10 @@
1Write a class that parses /proc and not ifconfig
2
1[ ] Wlanmodule needs to check if an interface supports wireless 3[ ] Wlanmodule needs to check if an interface supports wireless
2 extensions. 4 extensions.
3[x] When you set options in wlanmodule, hit OK, it exits all of 5[x] When you set options in wlanmodule, hit OK, it exits all of
4 networksetup, doesnt bring you back to the main screen. 6 networksetup, doesnt bring you back to the main screen.
5[x] Wlanmodule isnt writing out wireless.opts 7[x] Wlanmodule isnt writing out wireless.opts
6[ ] Need a means of bringing an interface up and down (calling 8[ ] Need a means of bringing an interface up and down (calling
7 out ifup/ifdown) from the gui. 9 out ifup/ifdown) from the gui.
8 -Ben- Click information, then click up or down... :-D 10 -Ben- Click information, then click up or down... :-D
diff --git a/noncore/net/networksetup/interface.cpp b/noncore/net/networksetup/interface.cpp
index 1f32093..1e01da4 100644
--- a/noncore/net/networksetup/interface.cpp
+++ b/noncore/net/networksetup/interface.cpp
@@ -1,242 +1,287 @@
1#include "interface.h" 1#include "interface.h"
2#include <qdatetime.h> 2#include <qdatetime.h>
3#include <qfile.h> 3#include <qfile.h>
4#include <qdir.h> 4#include <qdir.h>
5#include <qfileinfo.h> 5#include <qfileinfo.h>
6#include <qtextstream.h> 6#include <qtextstream.h>
7 7
8#define IFCONFIG "/sbin/ifconfig" 8#define IFCONFIG "/sbin/ifconfig"
9#define HDCP_INFO_DIR "/etc/dhcpc" 9#define HDCP_INFO_DIR "/etc/dhcpc"
10 10
11#include <stdio.h> 11#include <stdio.h>
12#include <stdlib.h> 12#include <stdlib.h>
13 13
14Interface::Interface(QString name, bool newSatus): status(newSatus), attached(false), interfaceName(name), hardareName("Unknown"), moduleOwner(NULL), macAddress(""), ip("0.0.0.0"), broadcast(""), subnetMask("0.0.0.0"), dhcp(false){ 14Interface::Interface(QObject * parent, const char * name, bool newSatus): QObject(parent, name), status(newSatus), attached(false), hardareName("Unknown"), moduleOwner(NULL), macAddress(""), ip("0.0.0.0"), broadcast(""), subnetMask("0.0.0.0"), dhcp(false){
15 refresh(); 15 refresh();
16} 16}
17 17
18/** 18/**
19 * Set status
20 * @param newStatus - the new status
21 * emit updateInterface
22 */
23void Interface::setStatus(bool newStatus){
24 if(status != newStatus){
25 status = newStatus;
26 refresh();
27 }
28};
29
30/**
31 * Set if attached or not (802.11 card pulled out for example)
32 * @param isAttached - if attached
33 * emit updateInterface
34 */
35void Interface::setAttached(bool isAttached){
36 attached = isAttached;
37 emit(updateInterface(this));
38};
39
40/**
41 * Set Hardware name
42 * @param name - the new name
43 * emit updateInterface
44 */
45void Interface::setHardwareName(QString name){
46 hardareName = name;
47 emit(updateInterface(this));
48};
49
50/**
51 * Set Module owner
52 * @param owner - the new owner
53 * emit updateInterface
54 */
55void Interface::setModuleOwner(Module *owner){
56 moduleOwner = owner;
57 emit(updateInterface(this));
58};
59
60
61/**
19 * Try to start the interface. 62 * Try to start the interface.
20 * @return bool true if successfull.
21 */ 63 */
22bool Interface::start(){ 64void Interface::start(){
23 // check to see if we are already running. 65 // check to see if we are already running.
24 if(status) 66 if(true == status)
25 return false; 67 return;
26 68
27 int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(interfaceName).latin1()); 69 int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(interfaceName).latin1());
70 // See if it was successfull...
28 if(ret != 0) 71 if(ret != 0)
29 return false; 72 return;
30 73
31 status = true; 74 status = true;
32 refresh(); 75 refresh();
33 return true;
34} 76}
35 77
36/** 78/**
37 * Try to stop the interface. 79 * Try to stop the interface.
38 * @return bool true if successfull.
39 */ 80 */
40bool Interface::stop(){ 81void Interface::stop(){
41 // check to see if we are already stopped. 82 // check to see if we are already stopped.
42 if(status == false) 83 if(false == status)
43 return false; 84 return;
44 85
45 int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(interfaceName).latin1()); 86 int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(interfaceName).latin1());
46 if(ret != 0) 87 if(ret != 0)
47 return false; 88 return;
48 89
49 status = true; 90 status = true;
50 refresh(); 91 refresh();
51 return true;
52} 92}
93
53/** 94/**
54 * Try to restart the interface. 95 * Try to restart the interface.
55 * @return bool true if successfull.
56 */ 96 */
57bool Interface::restart(){ 97void Interface::restart(){
58 return (stop() && start()); 98 stop();
99 start();
59} 100}
60 101
61/** 102/**
62 * Try to refresh the information about the interface. 103 * Try to refresh the information about the interface.
63 * First call ifconfig, then check the dhcp-info file 104 * First call ifconfig, then check the dhcp-info file
64 * @return bool true if successfull. 105 * @return bool true if successfull.
65 */ 106 */
66bool Interface::refresh(){ 107bool Interface::refresh(){
67 // See if we are up. 108 // See if we are up.
68 if(status == false){ 109 if(status == false){
69 macAddress = ""; 110 macAddress = "";
70 ip = "0.0.0.0"; 111 ip = "0.0.0.0";
71 subnetMask = "0.0.0.0"; 112 subnetMask = "0.0.0.0";
72 broadcast = ""; 113 broadcast = "";
73 dhcp = false; 114 dhcp = false;
74 dhcpServerIp = ""; 115 dhcpServerIp = "";
75 leaseObtained = ""; 116 leaseObtained = "";
76 leaseExpires = ""; 117 leaseExpires = "";
118 emit(updateInterface(this));
77 return true; 119 return true;
78 } 120 }
79 121
80 QString fileName = QString("/tmp/%1_ifconfig_info").arg(interfaceName); 122 QString fileName = QString("/tmp/%1_ifconfig_info").arg(interfaceName);
81 int ret = system(QString("%1 %2 > %3").arg(IFCONFIG).arg(interfaceName).arg(fileName).latin1()); 123 int ret = system(QString("%1 %2 > %3").arg(IFCONFIG).arg(interfaceName).arg(fileName).latin1());
82 if(ret != 0){ 124 if(ret != 0){
83 qDebug(QString("Interface: Ifconfig return value: %1, is not 0").arg(ret).latin1()); 125 qDebug(QString("Interface: Ifconfig return value: %1, is not 0").arg(ret).latin1());
84 return false; 126 return false;
85 } 127 }
86 128
87 QFile file(fileName); 129 QFile file(fileName);
88 if (!file.open(IO_ReadOnly)){ 130 if (!file.open(IO_ReadOnly)){
89 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); 131 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1());
90 return false; 132 return false;
91 } 133 }
92 134
93 // Set to the defaults 135 // Set to the defaults
94 macAddress = ""; 136 macAddress = "";
95 ip = "0.0.0.0"; 137 ip = "0.0.0.0";
96 subnetMask = "0.0.0.0"; 138 subnetMask = "0.0.0.0";
97 broadcast = ""; 139 broadcast = "";
98 140
99 QTextStream stream( &file ); 141 QTextStream stream( &file );
100 QString line; 142 QString line;
101 while ( !stream.eof() ) { 143 while ( !stream.eof() ) {
102 line = stream.readLine(); 144 line = stream.readLine();
103 if(line.contains("HWaddr")){ 145 if(line.contains("HWaddr")){
104 int mac = line.find("HWaddr"); 146 int mac = line.find("HWaddr");
105 macAddress = line.mid(mac+7, line.length()); 147 macAddress = line.mid(mac+7, line.length());
106 } 148 }
107 if(line.contains("inet addr")){ 149 if(line.contains("inet addr")){
108 int ipl = line.find("inet addr"); 150 int ipl = line.find("inet addr");
109 int space = line.find(" ", ipl+10); 151 int space = line.find(" ", ipl+10);
110 ip = line.mid(ipl+10, space-ipl-10); 152 ip = line.mid(ipl+10, space-ipl-10);
111 } 153 }
112 if(line.contains("Mask")){ 154 if(line.contains("Mask")){
113 int mask = line.find("Mask"); 155 int mask = line.find("Mask");
114 subnetMask = line.mid(mask+5, line.length()); 156 subnetMask = line.mid(mask+5, line.length());
115 } 157 }
116 if(line.contains("Bcast")){ 158 if(line.contains("Bcast")){
117 int mask = line.find("Bcast"); 159 int mask = line.find("Bcast");
118 int space = line.find(" ", mask+6); 160 int space = line.find(" ", mask+6);
119 broadcast = line.mid(mask+6, space-mask-6); 161 broadcast = line.mid(mask+6, space-mask-6);
120 } 162 }
121 } 163 }
122 file.close(); 164 file.close();
123 QFile::remove(fileName); 165 QFile::remove(fileName);
124 166
125 // DHCP TESTING 167 // DHCP TESTING
126 // reset DHCP info 168 // reset DHCP info
127 dhcpServerIp = ""; 169 dhcpServerIp = "";
128 leaseObtained = ""; 170 leaseObtained = "";
129 leaseExpires = ""; 171 leaseExpires = "";
130 dhcp = false; 172 dhcp = false;
131 173
132 QString dhcpDirectory(HDCP_INFO_DIR); 174 QString dhcpDirectory(HDCP_INFO_DIR);
133 QDir d(dhcpDirectory); 175 QDir d(dhcpDirectory);
134 if(!d.exists(dhcpDirectory)) 176 if(!d.exists(dhcpDirectory))
135 dhcpDirectory = "/var/run"; 177 dhcpDirectory = "/var/run";
136 178
137 // See if we have 179 // See if we have
138 QString dhcpFile(QString(dhcpDirectory+"/dhcpcd-%1.info").arg(interfaceName)); 180 QString dhcpFile(QString(dhcpDirectory+"/dhcpcd-%1.info").arg(interfaceName));
139 // If there is no DHCP information then exit now with no errors. 181 // If there is no DHCP information then exit now with no errors.
140 if(!QFile::exists(dhcpFile)){ 182 if(!QFile::exists(dhcpFile)){
183 emit(updateInterface(this));
141 return true; 184 return true;
142 } 185 }
143 186
144 file.setName(dhcpFile); 187 file.setName(dhcpFile);
145 if (!file.open(IO_ReadOnly)){ 188 if (!file.open(IO_ReadOnly)){
146 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); 189 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1());
147 return false; 190 return false;
148 } 191 }
149 192
150 // leaseTime and renewalTime and used if pid and deamon exe can be accessed. 193 // leaseTime and renewalTime and used if pid and deamon exe can be accessed.
151 int leaseTime = 0; 194 int leaseTime = 0;
152 int renewalTime = 0; 195 int renewalTime = 0;
153 196
154 stream.setDevice( &file ); 197 stream.setDevice( &file );
155 while ( !stream.eof() ) { 198 while ( !stream.eof() ) {
156 line = stream.readLine(); 199 line = stream.readLine();
157 if(line.contains("DHCPSIADDR=")) 200 if(line.contains("DHCPSIADDR="))
158 dhcpServerIp = line.mid(11, line.length()); 201 dhcpServerIp = line.mid(11, line.length());
159 if(line.contains("LEASETIME=")) 202 if(line.contains("LEASETIME="))
160 leaseTime = line.mid(10, line.length()).toInt(); 203 leaseTime = line.mid(10, line.length()).toInt();
161 if(line.contains("RENEWALTIME=")) 204 if(line.contains("RENEWALTIME="))
162 renewalTime = line.mid(12, line.length()).toInt(); 205 renewalTime = line.mid(12, line.length()).toInt();
163 } 206 }
164 file.close(); 207 file.close();
165 //qDebug(QString("Interface: leaseTime: %1").arg(leaseTime).latin1()); 208 //qDebug(QString("Interface: leaseTime: %1").arg(leaseTime).latin1());
166 //qDebug(QString("Interface: renewalTime: %1").arg(renewalTime).latin1()); 209 //qDebug(QString("Interface: renewalTime: %1").arg(renewalTime).latin1());
167 210
168 // Get the pid of the deamond 211 // Get the pid of the deamond
169 dhcpFile = (QString(dhcpDirectory+"/dhcpcd-%1.pid").arg(interfaceName)); 212 dhcpFile = (QString(dhcpDirectory+"/dhcpcd-%1.pid").arg(interfaceName));
170 file.setName(dhcpFile); 213 file.setName(dhcpFile);
171 if (!file.open(IO_ReadOnly)){ 214 if (!file.open(IO_ReadOnly)){
172 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); 215 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1());
173 return false; 216 return false;
174 } 217 }
175 218
176 int pid = -1; 219 int pid = -1;
177 stream.setDevice( &file ); 220 stream.setDevice( &file );
178 while ( !stream.eof() ) { 221 while ( !stream.eof() ) {
179 line = stream.readLine(); 222 line = stream.readLine();
180 pid = line.toInt(); 223 pid = line.toInt();
181 } 224 }
182 file.close(); 225 file.close();
183 226
184 if( pid == -1){ 227 if( pid == -1){
185 qDebug("Interface: Could not get pid of dhcpc deamon."); 228 qDebug("Interface: Could not get pid of dhcpc deamon.");
186 return false; 229 return false;
187 } 230 }
188 231
189 // Get the start running time of the deamon 232 // Get the start running time of the deamon
190 fileName = (QString("/proc/%1/stat").arg(pid)); 233 fileName = (QString("/proc/%1/stat").arg(pid));
191 file.setName(fileName); 234 file.setName(fileName);
192 stream.setDevice( &file ); 235 stream.setDevice( &file );
193 if (!file.open(IO_ReadOnly)){ 236 if (!file.open(IO_ReadOnly)){
194 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); 237 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1());
195 return false; 238 return false;
196 } 239 }
197 while ( !stream.eof() ) { 240 while ( !stream.eof() ) {
198 line = stream.readLine(); 241 line = stream.readLine();
199 } 242 }
200 file.close(); 243 file.close();
201 long time = 0; 244 long time = 0;
202 // Grab the start time 245 // Grab the start time
203 // pid com state ppid pgrp session tty_nr tpgid flags 246 // pid com state ppid pgrp session tty_nr tpgid flags
204 sscanf(line.latin1(), "%*d %*s %*c %*d %*d %*d %*d %*d %*u " 247 sscanf(line.latin1(), "%*d %*s %*c %*d %*d %*d %*d %*d %*u "
205 // minflt cminflt majflt cmajflt utime stime cutime cstime priority 248 // minflt cminflt majflt cmajflt utime stime cutime cstime priority
206 "%*u %*u %*u %*u %*u %*u %*d %*d %*d " 249 "%*u %*u %*u %*u %*u %*u %*d %*d %*d "
207 // nice 0 itrealvalue starttime 250 // nice 0 itrealvalue starttime
208 "%*d %*d %*d %lu", (long*) &time); 251 "%*d %*d %*d %lu", (long*) &time);
209 time = time/100; 252 time = time/100;
210 253
211 QDateTime datetime(QDateTime::currentDateTime()); 254 QDateTime datetime(QDateTime::currentDateTime());
212 255
213 // Get the uptime of the computer. 256 // Get the uptime of the computer.
214 QFile f("/proc/uptime"); 257 QFile f("/proc/uptime");
215 if ( f.open(IO_ReadOnly) ) { // file opened successfully 258 if ( f.open(IO_ReadOnly) ) { // file opened successfully
216 QTextStream t( &f ); // use a text stream 259 QTextStream t( &f ); // use a text stream
217 int sec = 0; 260 int sec = 0;
218 t >> sec; 261 t >> sec;
219 datetime = datetime.addSecs((-1*sec)); 262 datetime = datetime.addSecs((-1*sec));
220 f.close(); 263 f.close();
221 } 264 }
222 else{ 265 else{
223 qDebug("Interface: Can't open /proc/uptime to retrive uptime."); 266 qDebug("Interface: Can't open /proc/uptime to retrive uptime.");
224 return false; 267 return false;
225 } 268 }
226 269
227 datetime = datetime.addSecs(time); 270 datetime = datetime.addSecs(time);
228 //qDebug(QString("Interface: %1 %2").arg(datetime.toString()).arg(pid).latin1()); 271 //qDebug(QString("Interface: %1 %2").arg(datetime.toString()).arg(pid).latin1());
229 272
230 // Calculate the start and renew times 273 // Calculate the start and renew times
231 leaseObtained= datetime.toString(); 274 leaseObtained= datetime.toString();
232 275
233 // Calculate the start and renew times 276 // Calculate the start and renew times
234 datetime = datetime.addSecs(leaseTime); 277 datetime = datetime.addSecs(leaseTime);
235 leaseExpires = datetime.toString(); 278 leaseExpires = datetime.toString();
236 279
237 dhcp = true; 280 dhcp = true;
281
282 emit(updateInterface(this));
238 return true; 283 return true;
239} 284}
240 285
241// interface.cpp 286// interface.cpp
242 287
diff --git a/noncore/net/networksetup/interface.h b/noncore/net/networksetup/interface.h
index 1406e99..980171a 100644
--- a/noncore/net/networksetup/interface.h
+++ b/noncore/net/networksetup/interface.h
@@ -1,67 +1,72 @@
1#ifndef INTERFACE_H 1#ifndef INTERFACE_H
2#define INTERFACE_H 2#define INTERFACE_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5#include <qobject.h>
5 6
6class Module; 7class Module;
7 8
8class Interface { 9class Interface : public QObject{
10 Q_OBJECT
9 11
12signals:
13 void updateInterface(Interface *i);
14
10public: 15public:
11 Interface(QString name = "unknown", bool status = false); 16 Interface(QObject * parent=0, const char * name= "unknown", bool status = false);
12 virtual ~Interface(){}; 17 virtual ~Interface(){};
13 18
19 virtual QString getInterfaceName(){ QString n(this->name()); return n; };
20
14 virtual bool getStatus(){ return status; }; 21 virtual bool getStatus(){ return status; };
15 virtual void setStatus(bool newSatus){ status = newSatus; refresh(); }; 22 virtual void setStatus(bool newStatus);
16 23
17 virtual bool isAttached(){ return attached; }; 24 virtual bool isAttached(){ return attached; };
18 virtual void setAttached(bool isAttached=false){ attached = isAttached; }; 25 virtual void setAttached(bool isAttached=false);
19
20 virtual QString getInterfaceName(){ return interfaceName; };
21 virtual void setInterfaceName(QString name="unknown"){ interfaceName = name; };
22 26
23 virtual QString getHardwareName(){ return hardareName; }; 27 virtual QString getHardwareName(){ return hardareName; };
24 virtual void setHardwareName(QString name="Unknown"){ hardareName = name; }; 28 virtual void setHardwareName(QString name="Unknown");
25 29
26 virtual Module* getModuleOwner(){ return moduleOwner; }; 30 virtual Module* getModuleOwner(){ return moduleOwner; };
27 virtual void setModuleOwner(Module *owner=NULL){ moduleOwner = owner; }; 31 virtual void setModuleOwner(Module *owner=NULL);
28 32
29 // inet information. 33 // inet information.
30 QString getMacAddress(){ return macAddress; }; 34 QString getMacAddress(){ return macAddress; };
31 QString getIp(){ return ip; }; 35 QString getIp(){ return ip; };
32 QString getSubnetMask(){ return subnetMask; }; 36 QString getSubnetMask(){ return subnetMask; };
33 QString getBroadcast(){ return broadcast; }; 37 QString getBroadcast(){ return broadcast; };
34 bool isDhcp(){ return dhcp; }; 38 bool isDhcp(){ return dhcp; };
35 QString getDhcpServerIp(){ return dhcpServerIp; }; 39 QString getDhcpServerIp(){ return dhcpServerIp; };
36 QString getLeaseObtained(){ return leaseObtained; }; 40 QString getLeaseObtained(){ return leaseObtained; };
37 QString getLeaseExpires(){ return leaseExpires; }; 41 QString getLeaseExpires(){ return leaseExpires; };
38 42
43public slots:
39 bool refresh(); 44 bool refresh();
40 bool start(); 45 void start();
41 bool stop(); 46 void stop();
42 bool restart(); 47 void restart();
43 48
44private: 49private:
45 // Interface information 50 // Interface information
46 bool status; 51 bool status;
47 bool attached; 52 bool attached;
48 QString interfaceName; 53 QString interfaceName;
49 QString hardareName; 54 QString hardareName;
50 Module *moduleOwner; 55 Module *moduleOwner;
51 56
52 // Network information 57 // Network information
53 QString macAddress; 58 QString macAddress;
54 QString ip; 59 QString ip;
55 QString broadcast; 60 QString broadcast;
56 QString subnetMask; 61 QString subnetMask;
57 bool dhcp; 62 bool dhcp;
58 QString dhcpServerIp; 63 QString dhcpServerIp;
59 QString leaseObtained; 64 QString leaseObtained;
60 QString leaseExpires; 65 QString leaseExpires;
61 66
62}; 67};
63 68
64#endif 69#endif
65 70
66// interface.h 71// interface.h
67 72
diff --git a/noncore/net/networksetup/interfaceadvanced.ui b/noncore/net/networksetup/interfaceadvanced.ui
index 7520abe..efe67b0 100644
--- a/noncore/net/networksetup/interfaceadvanced.ui
+++ b/noncore/net/networksetup/interfaceadvanced.ui
@@ -1,114 +1,121 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>InterfaceAdvanced</class> 2<class>InterfaceAdvanced</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>InterfaceAdvanced</cstring> 7 <cstring>InterfaceAdvanced</cstring>
8 </property> 8 </property>
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>188</width> 14 <width>214</width>
15 <height>277</height> 15 <height>286</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>maximumSize</name>
20 <size>
21 <width>320</width>
22 <height>32767</height>
23 </size>
24 </property>
25 <property stdset="1">
19 <name>caption</name> 26 <name>caption</name>
20 <string>Advanced Interface Information</string> 27 <string>Advanced Interface Information</string>
21 </property> 28 </property>
22 <grid> 29 <grid>
23 <property stdset="1"> 30 <property stdset="1">
24 <name>margin</name> 31 <name>margin</name>
25 <number>11</number> 32 <number>11</number>
26 </property> 33 </property>
27 <property stdset="1"> 34 <property stdset="1">
28 <name>spacing</name> 35 <name>spacing</name>
29 <number>6</number> 36 <number>6</number>
30 </property> 37 </property>
31 <widget row="1" column="0" > 38 <widget row="1" column="0" >
32 <class>QLabel</class> 39 <class>QLabel</class>
33 <property stdset="1"> 40 <property stdset="1">
34 <name>name</name> 41 <name>name</name>
35 <cstring>TextLabel1</cstring> 42 <cstring>TextLabel1</cstring>
36 </property> 43 </property>
37 <property stdset="1"> 44 <property stdset="1">
38 <name>text</name> 45 <name>text</name>
39 <string>MAC Address</string> 46 <string>MAC Address</string>
40 </property> 47 </property>
41 </widget> 48 </widget>
42 <widget row="0" column="1" > 49 <widget row="0" column="1" >
43 <class>QLabel</class> 50 <class>QLabel</class>
44 <property stdset="1"> 51 <property stdset="1">
45 <name>name</name> 52 <name>name</name>
46 <cstring>interfaceName</cstring> 53 <cstring>interfaceName</cstring>
47 </property> 54 </property>
48 <property stdset="1"> 55 <property stdset="1">
49 <name>frameShape</name> 56 <name>frameShape</name>
50 <enum>Panel</enum> 57 <enum>Panel</enum>
51 </property> 58 </property>
52 <property stdset="1"> 59 <property stdset="1">
53 <name>frameShadow</name> 60 <name>frameShadow</name>
54 <enum>Sunken</enum> 61 <enum>Sunken</enum>
55 </property> 62 </property>
56 <property stdset="1"> 63 <property stdset="1">
57 <name>text</name> 64 <name>text</name>
58 <string>eth0</string> 65 <string>eth0</string>
59 </property> 66 </property>
60 </widget> 67 </widget>
61 <widget row="2" column="0" > 68 <widget row="2" column="0" >
62 <class>QLabel</class> 69 <class>QLabel</class>
63 <property stdset="1"> 70 <property stdset="1">
64 <name>name</name> 71 <name>name</name>
65 <cstring>TextLabel3</cstring> 72 <cstring>TextLabel3</cstring>
66 </property> 73 </property>
67 <property stdset="1"> 74 <property stdset="1">
68 <name>text</name> 75 <name>text</name>
69 <string>IP Address</string> 76 <string>IP Address</string>
70 </property> 77 </property>
71 </widget> 78 </widget>
72 <widget row="1" column="1" > 79 <widget row="1" column="1" >
73 <class>QLabel</class> 80 <class>QLabel</class>
74 <property stdset="1"> 81 <property stdset="1">
75 <name>name</name> 82 <name>name</name>
76 <cstring>macAddressLabel</cstring> 83 <cstring>macAddressLabel</cstring>
77 </property> 84 </property>
78 <property stdset="1"> 85 <property stdset="1">
79 <name>frameShape</name> 86 <name>frameShape</name>
80 <enum>Panel</enum> 87 <enum>Panel</enum>
81 </property> 88 </property>
82 <property stdset="1"> 89 <property stdset="1">
83 <name>frameShadow</name> 90 <name>frameShadow</name>
84 <enum>Sunken</enum> 91 <enum>Sunken</enum>
85 </property> 92 </property>
86 <property stdset="1"> 93 <property stdset="1">
87 <name>text</name> 94 <name>text</name>
88 <string>00:00:00:00:00:00</string> 95 <string>00:00:00:00:00:00</string>
89 </property> 96 </property>
90 </widget> 97 </widget>
91 <widget row="0" column="0" > 98 <widget row="0" column="0" >
92 <class>QLabel</class> 99 <class>QLabel</class>
93 <property stdset="1"> 100 <property stdset="1">
94 <name>name</name> 101 <name>name</name>
95 <cstring>TextLabel7</cstring> 102 <cstring>TextLabel7</cstring>
96 </property> 103 </property>
97 <property stdset="1"> 104 <property stdset="1">
98 <name>text</name> 105 <name>text</name>
99 <string>Interface</string> 106 <string>Interface</string>
100 </property> 107 </property>
101 </widget> 108 </widget>
102 <widget row="4" column="0" > 109 <widget row="4" column="0" >
103 <class>QLabel</class> 110 <class>QLabel</class>
104 <property stdset="1"> 111 <property stdset="1">
105 <name>name</name> 112 <name>name</name>
106 <cstring>TextLabel4</cstring> 113 <cstring>TextLabel4</cstring>
107 </property> 114 </property>
108 <property stdset="1"> 115 <property stdset="1">
109 <name>enabled</name> 116 <name>enabled</name>
110 <bool>true</bool> 117 <bool>true</bool>
111 </property> 118 </property>
112 <property stdset="1"> 119 <property stdset="1">
113 <name>text</name> 120 <name>text</name>
114 <string>Subnet Mask</string> 121 <string>Subnet Mask</string>
diff --git a/noncore/net/networksetup/interfaceinformationimp.cpp b/noncore/net/networksetup/interfaceinformationimp.cpp
index e37e0f8..59a6400 100644
--- a/noncore/net/networksetup/interfaceinformationimp.cpp
+++ b/noncore/net/networksetup/interfaceinformationimp.cpp
@@ -1,94 +1,67 @@
1#include "interfaceinformationimp.h" 1#include "interfaceinformationimp.h"
2#include "interfaceadvanced.h" 2#include "interfaceadvanced.h"
3 3
4#include <qpushbutton.h> 4#include <qpushbutton.h>
5#include <qlabel.h> 5#include <qlabel.h>
6#include <assert.h> 6#include <assert.h>
7 7
8/** 8/**
9 * Constructor for the InterfaceInformationImp class. This class pretty much 9 * Constructor for the InterfaceInformationImp class. This class pretty much
10 * just display's information about the interface that is passed to it. 10 * just display's information about the interface that is passed to it.
11 */ 11 */
12InterfaceInformationImp::InterfaceInformationImp(QWidget *parent, const char *name, Interface *i, WFlags f):InterfaceInformation(parent, name, f){ 12InterfaceInformationImp::InterfaceInformationImp(QWidget *parent, const char *name, Interface *i, WFlags f):InterfaceInformation(parent, name, f){
13 assert(i); 13 assert(i);
14 14
15 interface = i; 15 interface = i;
16 updateInterface(); 16 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *)));
17 connect(startButton, SIGNAL(clicked()), this, SLOT(start())); 17 updateInterface(interface);
18 connect(stopButton, SIGNAL(clicked()), this, SLOT(stop())); 18 connect(startButton, SIGNAL(clicked()), interface, SLOT(start()));
19 connect(restartButton, SIGNAL(clicked()), this, SLOT(restart())); 19 connect(stopButton, SIGNAL(clicked()), interface, SLOT(stop()));
20 connect(refreshButton, SIGNAL(clicked()), this, SLOT(refresh())); 20 connect(restartButton, SIGNAL(clicked()), interface, SLOT(restart()));
21 connect(refreshButton, SIGNAL(clicked()), interface, SLOT(refresh()));
21 connect(advancedButton, SIGNAL(clicked()), this, SLOT(advanced())); 22 connect(advancedButton, SIGNAL(clicked()), this, SLOT(advanced()));
22 23
23} 24}
24 25
25void InterfaceInformationImp::updateInterface(){ 26/**
27 * Update the interface information and buttons.
28 * @param Intarface *i the interface to update (should be the one we already
29 * know about).
30 */
31void InterfaceInformationImp::updateInterface(Interface *i){
26 if(interface->getStatus()){ 32 if(interface->getStatus()){
27 startButton->setEnabled(false); 33 startButton->setEnabled(false);
28 stopButton->setEnabled(true); 34 stopButton->setEnabled(true);
29 restartButton->setEnabled(true); 35 restartButton->setEnabled(true);
30 } 36 }
31 else{ 37 else{
32 startButton->setEnabled(true); 38 startButton->setEnabled(true);
33 stopButton->setEnabled(false); 39 stopButton->setEnabled(false);
34 restartButton->setEnabled(false); 40 restartButton->setEnabled(false);
35 } 41 }
36 macAddressLabel->setText(interface->getMacAddress()); 42 macAddressLabel->setText(interface->getMacAddress());
37 ipAddressLabel->setText(interface->getIp()); 43 ipAddressLabel->setText(interface->getIp());
38 subnetMaskLabel->setText(interface->getSubnetMask()); 44 subnetMaskLabel->setText(interface->getSubnetMask());
39 broadcastLabel->setText(interface->getBroadcast()); 45 broadcastLabel->setText(interface->getBroadcast());
40} 46}
41 47
42/** 48/**
43 * Start the interface. Update the information if successfull
44 */
45void InterfaceInformationImp::start(){
46 if(interface->start()){
47 updateInterface();
48 }
49}
50
51/**
52 * Stop the interface.
53 */
54void InterfaceInformationImp::stop(){
55 if(interface->stop()){
56 updateInterface();
57 }
58}
59
60/***
61 * Tell the interface to refresh its information.
62 **/
63void InterfaceInformationImp::refresh(){
64 if(interface->refresh())
65 updateInterface();
66}
67
68void InterfaceInformationImp::restart(){
69 if(interface->restart()){
70 updateInterface();
71 }
72}
73
74
75/**
76 * Create the advanced widget. Fill it with the current interface's information. 49 * Create the advanced widget. Fill it with the current interface's information.
77 * Display it. 50 * Display it.
78 */ 51 */
79void InterfaceInformationImp::advanced(){ 52void InterfaceInformationImp::advanced(){
80 InterfaceAdvanced *a = new InterfaceAdvanced(0, "InterfaceAdvanced"); 53 InterfaceAdvanced *a = new InterfaceAdvanced(0, "InterfaceAdvanced");
81 a->interfaceName->setText(interface->getInterfaceName()); 54 a->interfaceName->setText(interface->getInterfaceName());
82 a->macAddressLabel->setText(interface->getMacAddress()); 55 a->macAddressLabel->setText(interface->getMacAddress());
83 a->ipAddressLabel->setText(interface->getIp()); 56 a->ipAddressLabel->setText(interface->getIp());
84 a->subnetMaskLabel->setText(interface->getSubnetMask()); 57 a->subnetMaskLabel->setText(interface->getSubnetMask());
85 a->broadcastLabel->setText(interface->getBroadcast()); 58 a->broadcastLabel->setText(interface->getBroadcast());
86 a->dhcpServerLabel->setText(interface->getDhcpServerIp()); 59 a->dhcpServerLabel->setText(interface->getDhcpServerIp());
87 a->leaseObtainedLabel->setText(interface->getLeaseObtained()); 60 a->leaseObtainedLabel->setText(interface->getLeaseObtained());
88 a->leaseExpiresLabel->setText(interface->getLeaseExpires()); 61 a->leaseExpiresLabel->setText(interface->getLeaseExpires());
89 a->showMaximized(); 62 a->showMaximized();
90 a->show(); 63 a->show();
91} 64}
92 65
93// infoimp.cpp 66// infoimp.cpp
94 67
diff --git a/noncore/net/networksetup/interfaceinformationimp.h b/noncore/net/networksetup/interfaceinformationimp.h
index c8a478e..42213cc 100644
--- a/noncore/net/networksetup/interfaceinformationimp.h
+++ b/noncore/net/networksetup/interfaceinformationimp.h
@@ -1,31 +1,27 @@
1#ifndef INTERFACEINFORMATIONIMP_H 1#ifndef INTERFACEINFORMATIONIMP_H
2#define INTERFACEINFORMATIONIMP_H 2#define INTERFACEINFORMATIONIMP_H
3 3
4#include "interfaceinformation.h" 4#include "interfaceinformation.h"
5#include "interface.h" 5#include "interface.h"
6 6
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 start();
17 void stop();
18 void refresh();
19 void restart();
20 void advanced(); 16 void advanced();
17 void updateInterface(Interface *i);
21 18
22private: 19private:
23 Interface *interface; 20 Interface *interface;
24 void updateInterface();
25 21
26}; 22};
27 23
28#endif 24#endif
29 25
30// addserviceimp.h 26// addserviceimp.h
31 27
diff --git a/noncore/net/networksetup/mainwindowimp.cpp b/noncore/net/networksetup/mainwindowimp.cpp
index b46362f..117bac1 100644
--- a/noncore/net/networksetup/mainwindowimp.cpp
+++ b/noncore/net/networksetup/mainwindowimp.cpp
@@ -211,250 +211,253 @@ void MainWindowImp::configureClicked(){
211 QTabWidget *tabWidget = NULL; 211 QTabWidget *tabWidget = NULL;
212 QWidget *moduleConfigure = i->getModuleOwner()->configure(&tabWidget); 212 QWidget *moduleConfigure = i->getModuleOwner()->configure(&tabWidget);
213 if(moduleConfigure != NULL){ 213 if(moduleConfigure != NULL){
214 if(tabWidget != NULL){ 214 if(tabWidget != NULL){
215 InterfaceSetupImp *configure = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, true); 215 InterfaceSetupImp *configure = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, true);
216 tabWidget->insertTab(configure, "TCP/IP"); 216 tabWidget->insertTab(configure, "TCP/IP");
217 } 217 }
218 moduleConfigure->showMaximized(); 218 moduleConfigure->showMaximized();
219 moduleConfigure->show(); 219 moduleConfigure->show();
220 return; 220 return;
221 } 221 }
222 } 222 }
223 223
224 InterfaceSetupImp *configure = new InterfaceSetupImp(0, "InterfaceSetupImp", i, true); 224 InterfaceSetupImp *configure = new InterfaceSetupImp(0, "InterfaceSetupImp", i, true);
225 configure->showMaximized(); 225 configure->showMaximized();
226 configure->show(); 226 configure->show();
227} 227}
228 228
229/** 229/**
230 * Pull up the information about the currently selected interface. 230 * Pull up the information about the currently selected interface.
231 * Report an error if no interface is selected. 231 * Report an error if no interface is selected.
232 * If the interface has a module owner then request its configure with a empty 232 * If the interface has a module owner then request its configure with a empty
233 * tab. If tab is !NULL then append the interfaces setup widget to it. 233 * tab. If tab is !NULL then append the interfaces setup widget to it.
234 */ 234 */
235void MainWindowImp::informationClicked(){ 235void MainWindowImp::informationClicked(){
236 QListViewItem *item = connectionList->currentItem(); 236 QListViewItem *item = connectionList->currentItem();
237 if(!item){ 237 if(!item){
238 QMessageBox::information(this, "Error","Please select an interface.", QMessageBox::Ok); 238 QMessageBox::information(this, "Error","Please select an interface.", QMessageBox::Ok);
239 return; 239 return;
240 } 240 }
241 241
242 Interface *i = interfaceItems[item]; 242 Interface *i = interfaceItems[item];
243 if(!i->isAttached()){ 243 if(!i->isAttached()){
244 QMessageBox::information(this, "Error","No information about\na disconnected interface.", QMessageBox::Ok); 244 QMessageBox::information(this, "Error","No information about\na disconnected interface.", QMessageBox::Ok);
245 return; 245 return;
246 } 246 }
247 if(i->getModuleOwner()){ 247 if(i->getModuleOwner()){
248 QTabWidget *tabWidget = NULL; 248 QTabWidget *tabWidget = NULL;
249 QWidget *moduleInformation = i->getModuleOwner()->information(&tabWidget); 249 QWidget *moduleInformation = i->getModuleOwner()->information(&tabWidget);
250 if(moduleInformation != NULL){ 250 if(moduleInformation != NULL){
251 if(tabWidget != NULL){ 251 if(tabWidget != NULL){
252 InterfaceInformationImp *information = new InterfaceInformationImp(tabWidget, "InterfaceSetupImp", i, true); 252 InterfaceInformationImp *information = new InterfaceInformationImp(tabWidget, "InterfaceSetupImp", i, true);
253 tabWidget->insertTab(information, "TCP/IP"); 253 tabWidget->insertTab(information, "TCP/IP");
254 } 254 }
255 moduleInformation->showMaximized(); 255 moduleInformation->showMaximized();
256 moduleInformation->show(); 256 moduleInformation->show();
257 return; 257 return;
258 } 258 }
259 } 259 }
260 260
261 InterfaceInformationImp *information = new InterfaceInformationImp(0, "InterfaceSetupImp", i, true); 261 InterfaceInformationImp *information = new InterfaceInformationImp(0, "InterfaceSetupImp", i, true);
262 information->showMaximized(); 262 information->showMaximized();
263 information->show(); 263 information->show();
264} 264}
265 265
266/** 266/**
267 * Aquire the list of active interfaces from ifconfig 267 * Aquire the list of active interfaces from ifconfig
268 * Call ifconfig and ifconfig -a 268 * Call ifconfig and ifconfig -a
269 */ 269 */
270void MainWindowImp::getInterfaceList(){ 270void MainWindowImp::getInterfaceList(){
271 KShellProcess *processAll = new KShellProcess(); 271 KShellProcess *processAll = new KShellProcess();
272 *processAll << "/sbin/ifconfig" << "-a" << " > " TEMP_ALL; 272 *processAll << "/sbin/ifconfig" << "-a" << " > " TEMP_ALL;
273 connect(processAll, SIGNAL(processExited(KProcess *)), 273 connect(processAll, SIGNAL(processExited(KProcess *)),
274 this, SLOT(jobDone(KProcess *))); 274 this, SLOT(jobDone(KProcess *)));
275 threads.insert(processAll, TEMP_ALL); 275 threads.insert(processAll, TEMP_ALL);
276 276
277 KShellProcess *process = new KShellProcess(); 277 KShellProcess *process = new KShellProcess();
278 *process << "/sbin/ifconfig" << " > " TEMP_UP; 278 *process << "/sbin/ifconfig" << " > " TEMP_UP;
279 connect(process, SIGNAL(processExited(KProcess *)), 279 connect(process, SIGNAL(processExited(KProcess *)),
280 this, SLOT(jobDone(KProcess *))); 280 this, SLOT(jobDone(KProcess *)));
281 threads.insert(process, TEMP_UP); 281 threads.insert(process, TEMP_UP);
282 282
283 processAll->start(KShellProcess::NotifyOnExit); 283 processAll->start(KShellProcess::NotifyOnExit);
284 process->start(KShellProcess::NotifyOnExit); 284 process->start(KShellProcess::NotifyOnExit);
285} 285}
286 286
287void MainWindowImp::jobDone(KProcess *process){ 287void MainWindowImp::jobDone(KProcess *process){
288 QString fileName = threads[process]; 288 QString fileName = threads[process];
289 threads.remove(process); 289 threads.remove(process);
290 delete process; 290 delete process;
291 291
292 QFile file(fileName); 292 QFile file(fileName);
293 if (!file.open(IO_ReadOnly)){ 293 if (!file.open(IO_ReadOnly)){
294 qDebug(QString("MainWindowImp: Can't open file: %1").arg(fileName).latin1()); 294 qDebug(QString("MainWindowImp: Can't open file: %1").arg(fileName).latin1());
295 return; 295 return;
296 } 296 }
297 297
298 QTextStream stream( &file ); 298 QTextStream stream( &file );
299 QString line; 299 QString line;
300 while ( !stream.eof() ) { 300 while ( !stream.eof() ) {
301 line = stream.readLine(); 301 line = stream.readLine();
302 int space = line.find(" "); 302 int space = line.find(" ");
303 if(space > 1){ 303 if(space > 1){
304 // We have found an interface 304 // We have found an interface
305 QString interfaceName = line.mid(0, space); 305 QString interfaceName = line.mid(0, space);
306 Interface *i; 306 Interface *i;
307 // We have found an interface
308 //qDebug(QString("MainWindowImp: Found Interface: %1").arg(line).latin1());
307 // See if we already have it 309 // See if we already have it
308 if(interfaceNames.find(interfaceName) == interfaceNames.end()){ 310 if(interfaceNames.find(interfaceName) == interfaceNames.end()){
309 if(fileName == TEMP_ALL) 311 if(fileName == TEMP_ALL)
310 i = new Interface(interfaceName, false); 312 i = new Interface(this, interfaceName, false);
311 else 313 else
312 i = new Interface(interfaceName, true); 314 i = new Interface(this, interfaceName, true);
315 i->setAttached(true);
316
317 QString hardName = "Ethernet";
318 int hardwareName = line.find("Link encap:");
319 int macAddress = line.find("HWaddr");
320 if(macAddress == -1)
321 macAddress = line.length();
322 if(hardwareName != -1)
323 i->setHardwareName(line.mid(hardwareName+11, macAddress-(hardwareName+11)) + QString(" (%1)").arg(i->getInterfaceName()));
324
325 interfaceNames.insert(i->getInterfaceName(), i);
326 updateInterface(i);
327 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *)));
313 } 328 }
329 // It was an interface we already had.
314 else{ 330 else{
315 i = interfaceNames[interfaceName]; 331 i = interfaceNames[interfaceName];
316 if(fileName != TEMP_ALL) 332 if(fileName != TEMP_ALL)
317 i->setStatus(true); 333 i->setStatus(true);
318 } 334 }
319
320 i->setAttached(true);
321 i->setInterfaceName(interfaceName);
322
323 QString hardName = "Ethernet";
324 int hardwareName = line.find("Link encap:");
325 int macAddress = line.find("HWaddr");
326 if(macAddress == -1)
327 macAddress = line.length();
328 if(hardwareName != -1)
329 i->setHardwareName(line.mid(hardwareName+11, macAddress-(hardwareName+11)) + QString(" (%1)").arg(i->getInterfaceName()));
330 // We have found an interface
331 //qDebug(QString("MainWindowImp: Found Interface: %1").arg(line).latin1());
332 interfaceNames.insert(i->getInterfaceName(), i);
333 updateInterface(i);
334 } 335 }
335 } 336 }
336 file.close(); 337 file.close();
337 QFile::remove(fileName); 338 QFile::remove(fileName);
338 339
339 if(threads.count() == 0){ 340 if(threads.count() == 0){
340 Interfaces i; 341 Interfaces i;
341 QStringList list = i.getInterfaceList(); 342 QStringList list = i.getInterfaceList();
342 QMap<QString, Interface*>::Iterator it; 343 QMap<QString, Interface*>::Iterator it;
343 for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) { 344 for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) {
344 bool found = false; 345 bool found = false;
345 for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ){ 346 for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ){
346 if(it.key() == (*ni)) 347 if(it.key() == (*ni))
347 found = true; 348 found = true;
348 } 349 }
349 if(!found){ 350 if(!found){
350 Interface *i = new Interface(*ni, false); 351 Interface *i = new Interface(this, *ni, false);
351 i->setAttached(false); 352 i->setAttached(false);
352 i->setHardwareName(QString("Disconnected (%1)").arg(*ni)); 353 i->setHardwareName(QString("Disconnected (%1)").arg(*ni));
353 i->setInterfaceName(*ni);
354 interfaceNames.insert(i->getInterfaceName(), i); 354 interfaceNames.insert(i->getInterfaceName(), i);
355 updateInterface(i); 355 updateInterface(i);
356 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *)));
356 } 357 }
357 } 358 }
358 } 359 }
359} 360}
360 361
361/** 362/**
362 * Update this interface. If no QListViewItem exists create one. 363 * Update this interface. If no QListViewItem exists create one.
363 * @param Interface* pointer to the interface that needs to be updated. 364 * @param Interface* pointer to the interface that needs to be updated.
364 */ 365 */
365void MainWindowImp::updateInterface(Interface *i){ 366void MainWindowImp::updateInterface(Interface *i){
366 if(!advancedUserMode){ 367 if(!advancedUserMode){
367 if(i->getInterfaceName() == "lo") 368 if(i->getInterfaceName() == "lo")
368 return; 369 return;
369 } 370 }
370 371
371 QListViewItem *item = NULL; 372 QListViewItem *item = NULL;
372 373
373 // Find the interface, making it if needed. 374 // Find the interface, making it if needed.
374 if(items.find(i) == items.end()){ 375 if(items.find(i) == items.end()){
375 item = new QListViewItem(connectionList, "", "", ""); 376 item = new QListViewItem(connectionList, "", "", "");
376 // See if you can't find a module owner for this interface 377 // See if you can't find a module owner for this interface
377 QMap<Module*, QLibrary*>::Iterator it; 378 QMap<Module*, QLibrary*>::Iterator it;
378 for( it = libraries.begin(); it != libraries.end(); ++it ){ 379 for( it = libraries.begin(); it != libraries.end(); ++it ){
379 if(it.key()->isOwner(i)) 380 if(it.key()->isOwner(i))
380 i->setModuleOwner(it.key()); 381 i->setModuleOwner(it.key());
381 } 382 }
382 items.insert(i, item); 383 items.insert(i, item);
383 interfaceItems.insert(item, i); 384 interfaceItems.insert(item, i);
384 } 385 }
385 else 386 else
386 item = items[i]; 387 item = items[i];
387 388
388 // Update the icons and information 389 // Update the icons and information
389 item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down"))); 390 item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down")));
390 391
391 QString typeName = "lan"; 392 QString typeName = "lan";
392 if(i->getHardwareName().contains("Local Loopback")) 393 if(i->getHardwareName().contains("Local Loopback"))
393 typeName = "lo"; 394 typeName = "lo";
394 if(i->getInterfaceName().contains("irda")) 395 if(i->getInterfaceName().contains("irda"))
395 typeName = "irda"; 396 typeName = "irda";
396 if(i->getInterfaceName().contains("wlan")) 397 if(i->getInterfaceName().contains("wlan"))
397 typeName = "wlan"; 398 typeName = "wlan";
398 399 if(i->getInterfaceName().contains("usb"))
400 typeName = "usb";
401
399 if(!i->isAttached()) 402 if(!i->isAttached())
400 typeName = "connect_no"; 403 typeName = "connect_no";
401 // Actually try to use the Module 404 // Actually try to use the Module
402 if(i->getModuleOwner() != NULL) 405 if(i->getModuleOwner() != NULL)
403 typeName = i->getModuleOwner()->getPixmapName(i); 406 typeName = i->getModuleOwner()->getPixmapName(i);
404 407
405 item->setPixmap(1, (Resource::loadPixmap(typeName))); 408 item->setPixmap(1, (Resource::loadPixmap(typeName)));
406 item->setText(2, i->getHardwareName()); 409 item->setText(2, i->getHardwareName());
407 item->setText(3, (i->getStatus()) ? i->getIp() : QString("")); 410 item->setText(3, (i->getStatus()) ? i->getIp() : QString(""));
408} 411}
409 412
410void MainWindowImp::newProfileChanged(const QString& newText){ 413void MainWindowImp::newProfileChanged(const QString& newText){
411 if(newText.length() > 0) 414 if(newText.length() > 0)
412 newProfileButton->setEnabled(true); 415 newProfileButton->setEnabled(true);
413 else 416 else
414 newProfileButton->setEnabled(false); 417 newProfileButton->setEnabled(false);
415} 418}
416 419
417/** 420/**
418 * Adds a new profile to the list of profiles. 421 * Adds a new profile to the list of profiles.
419 * Don't add profiles that already exists. 422 * Don't add profiles that already exists.
420 * Appends to the list and QStringList 423 * Appends to the list and QStringList
421 */ 424 */
422void MainWindowImp::addProfile(){ 425void MainWindowImp::addProfile(){
423 QString newProfileName = newProfile->text(); 426 QString newProfileName = newProfile->text();
424 if(profiles.grep(newProfileName).count() > 0){ 427 if(profiles.grep(newProfileName).count() > 0){
425 QMessageBox::information(this, "Can't Add","Profile already exists.", "Ok"); 428 QMessageBox::information(this, "Can't Add","Profile already exists.", "Ok");
426 return; 429 return;
427 } 430 }
428 profiles.append(newProfileName); 431 profiles.append(newProfileName);
429 profilesList->insertItem(newProfileName); 432 profilesList->insertItem(newProfileName);
430} 433}
431 434
432/** 435/**
433 * Removes the currently selected profile in the combo. 436 * Removes the currently selected profile in the combo.
434 * Doesn't delete if there are less then 2 profiles. 437 * Doesn't delete if there are less then 2 profiles.
435 */ 438 */
436void MainWindowImp::removeProfile(){ 439void MainWindowImp::removeProfile(){
437 if(profilesList->count() <= 1){ 440 if(profilesList->count() <= 1){
438 QMessageBox::information(this, "Can't remove anything.","Need One Profile.", "Ok"); 441 QMessageBox::information(this, "Can't remove anything.","Need One Profile.", "Ok");
439 return; 442 return;
440 } 443 }
441 QString profileToRemove = profilesList->currentText(); 444 QString profileToRemove = profilesList->currentText();
442 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){ 445 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){
443 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), "")); 446 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), ""));
444 profilesList->clear(); 447 profilesList->clear();
445 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) 448 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it)
446 profilesList->insertItem((*it)); 449 profilesList->insertItem((*it));
447 } 450 }
448 451
449} 452}
450 453
451/** 454/**
452 * A new profile has been selected, change. 455 * A new profile has been selected, change.
453 * @param newProfile the new profile. 456 * @param newProfile the new profile.
454 */ 457 */
455void MainWindowImp::changeProfile(){ 458void MainWindowImp::changeProfile(){
456 currentProfileLabel->setText(profilesList->text(profilesList->currentItem())); 459 currentProfileLabel->setText(profilesList->text(profilesList->currentItem()));
457} 460}
458 461
459// mainwindowimp.cpp 462// mainwindowimp.cpp
460 463
diff --git a/noncore/net/networksetup/wlan/wlanmodule.cpp b/noncore/net/networksetup/wlan/wlanmodule.cpp
index 98d2eb6..f0394b4 100644
--- a/noncore/net/networksetup/wlan/wlanmodule.cpp
+++ b/noncore/net/networksetup/wlan/wlanmodule.cpp
@@ -1,84 +1,86 @@
1#include "wlanmodule.h" 1#include "wlanmodule.h"
2#include <qpe/config.h> 2#include <qpe/config.h>
3#include "wlanimp.h" 3#include "wlanimp.h"
4 4
5/** 5/**
6 * Constructor, find all of the possible interfaces 6 * Constructor, find all of the possible interfaces
7 */ 7 */
8WLANModule::WLANModule() : Module() { 8WLANModule::WLANModule() : Module() {
9 // get output from iwconfig 9 // get output from iwconfig
10} 10}
11 11
12/** 12/**
13 * get the icon name for this device. 13 * get the icon name for this device.
14 * @param Interface* can be used in determining the icon. 14 * @param Interface* can be used in determining the icon.
15 * @return QString the icon name (minus .png, .gif etc) 15 * @return QString the icon name (minus .png, .gif etc)
16 */ 16 */
17QString WLANModule::getPixmapName(Interface* ){ 17QString WLANModule::getPixmapName(Interface* ){
18 return "wlan"; 18 return "wlan";
19} 19}
20 20
21/** 21/**
22 * Check to see if the interface i is owned by this module. 22 * Check to see if the interface i is owned by this module.
23 * @param Interface* interface to check against 23 * @param Interface* interface to check against
24 * @return bool true if i is owned by this module, false otherwise. 24 * @return bool true if i is owned by this module, false otherwise.
25 */ 25 */
26bool WLANModule::isOwner(Interface *i){ 26bool WLANModule::isOwner(Interface *i){
27 if(i->getInterfaceName() == "eth0" || i->getInterfaceName() == "wlan0") 27 if(i->getInterfaceName() == "eth0" || i->getInterfaceName() == "wlan0"){
28 i->setHardwareName(QString("802.11b (%1)").arg(i->getInterfaceName()));
28 return true; 29 return true;
30 }
29 return false; 31 return false;
30} 32}
31 33
32/** 34/**
33 * Create, set tabWiget and return the WLANConfigure Module 35 * Create, set tabWiget and return the WLANConfigure Module
34 * @param tabWidget a pointer to the tab widget that this configure has. 36 * @param tabWidget a pointer to the tab widget that this configure has.
35 * @return QWidget* pointer to the tab widget in this modules configure. 37 * @return QWidget* pointer to the tab widget in this modules configure.
36 */ 38 */
37QWidget *WLANModule::configure(QTabWidget **tabWidget){ 39QWidget *WLANModule::configure(QTabWidget **tabWidget){
38 Config *cfg = new Config("wireless"); 40 Config *cfg = new Config("wireless");
39 WLANImp *wlanconfig = new WLANImp(*cfg); 41 WLANImp *wlanconfig = new WLANImp(*cfg);
40 (*tabWidget) = wlanconfig->tabWidget; 42 (*tabWidget) = wlanconfig->tabWidget;
41 return wlanconfig; 43 return wlanconfig;
42} 44}
43 45
44/** 46/**
45 * Create, set tabWiget and return the Information Module 47 * Create, set tabWiget and return the Information Module
46 * @param tabWidget a pointer to the tab widget that this information has. 48 * @param tabWidget a pointer to the tab widget that this information has.
47 * @return QWidget* pointer to the tab widget in this modules info. 49 * @return QWidget* pointer to the tab widget in this modules info.
48 */ 50 */
49QWidget *WLANModule::information(QTabWidget **tabWidget){ 51QWidget *WLANModule::information(QTabWidget **tabWidget){
50 return NULL; 52 return NULL;
51} 53}
52 54
53/** 55/**
54 * Get all active (up or down) interfaces 56 * Get all active (up or down) interfaces
55 * @return QList<Interface> A list of interfaces that exsist that havn't 57 * @return QList<Interface> A list of interfaces that exsist that havn't
56 * been called by isOwner() 58 * been called by isOwner()
57 */ 59 */
58QList<Interface> WLANModule::getInterfaces(){ 60QList<Interface> WLANModule::getInterfaces(){
59 return list; 61 return list;
60} 62}
61 63
62/** 64/**
63 * Attempt to add a new interface as defined by name 65 * Attempt to add a new interface as defined by name
64 * @param name the name of the type of interface that should be created given 66 * @param name the name of the type of interface that should be created given
65 * by possibleNewInterfaces(); 67 * by possibleNewInterfaces();
66 * @return Interface* NULL if it was unable to be created. 68 * @return Interface* NULL if it was unable to be created.
67 */ 69 */
68Interface *WLANModule::addNewInterface(QString ){ 70Interface *WLANModule::addNewInterface(QString ){
69 // We can't add a 802.11 interface, either the hardware will be there 71 // We can't add a 802.11 interface, either the hardware will be there
70 // or it wont. 72 // or it wont.
71 return NULL; 73 return NULL;
72} 74}
73 75
74/** 76/**
75 * Attempts to remove the interface, doesn't delete i 77 * Attempts to remove the interface, doesn't delete i
76 * @return bool true if successfull, false otherwise. 78 * @return bool true if successfull, false otherwise.
77 */ 79 */
78bool WLANModule::remove(Interface*){ 80bool WLANModule::remove(Interface*){
79 // Can't remove a hardware device, you can stop it though. 81 // Can't remove a hardware device, you can stop it though.
80 return false; 82 return false;
81} 83}
82 84
83// wlanmodule.cpp 85// wlanmodule.cpp
84 86
diff --git a/noncore/settings/networksettings/TODO b/noncore/settings/networksettings/TODO
index 7386646..c8e2989 100644
--- a/noncore/settings/networksettings/TODO
+++ b/noncore/settings/networksettings/TODO
@@ -1,8 +1,10 @@
1Write a class that parses /proc and not ifconfig
2
1[ ] Wlanmodule needs to check if an interface supports wireless 3[ ] Wlanmodule needs to check if an interface supports wireless
2 extensions. 4 extensions.
3[x] When you set options in wlanmodule, hit OK, it exits all of 5[x] When you set options in wlanmodule, hit OK, it exits all of
4 networksetup, doesnt bring you back to the main screen. 6 networksetup, doesnt bring you back to the main screen.
5[x] Wlanmodule isnt writing out wireless.opts 7[x] Wlanmodule isnt writing out wireless.opts
6[ ] Need a means of bringing an interface up and down (calling 8[ ] Need a means of bringing an interface up and down (calling
7 out ifup/ifdown) from the gui. 9 out ifup/ifdown) from the gui.
8 -Ben- Click information, then click up or down... :-D 10 -Ben- Click information, then click up or down... :-D
diff --git a/noncore/settings/networksettings/interface.cpp b/noncore/settings/networksettings/interface.cpp
index 1f32093..1e01da4 100644
--- a/noncore/settings/networksettings/interface.cpp
+++ b/noncore/settings/networksettings/interface.cpp
@@ -1,242 +1,287 @@
1#include "interface.h" 1#include "interface.h"
2#include <qdatetime.h> 2#include <qdatetime.h>
3#include <qfile.h> 3#include <qfile.h>
4#include <qdir.h> 4#include <qdir.h>
5#include <qfileinfo.h> 5#include <qfileinfo.h>
6#include <qtextstream.h> 6#include <qtextstream.h>
7 7
8#define IFCONFIG "/sbin/ifconfig" 8#define IFCONFIG "/sbin/ifconfig"
9#define HDCP_INFO_DIR "/etc/dhcpc" 9#define HDCP_INFO_DIR "/etc/dhcpc"
10 10
11#include <stdio.h> 11#include <stdio.h>
12#include <stdlib.h> 12#include <stdlib.h>
13 13
14Interface::Interface(QString name, bool newSatus): status(newSatus), attached(false), interfaceName(name), hardareName("Unknown"), moduleOwner(NULL), macAddress(""), ip("0.0.0.0"), broadcast(""), subnetMask("0.0.0.0"), dhcp(false){ 14Interface::Interface(QObject * parent, const char * name, bool newSatus): QObject(parent, name), status(newSatus), attached(false), hardareName("Unknown"), moduleOwner(NULL), macAddress(""), ip("0.0.0.0"), broadcast(""), subnetMask("0.0.0.0"), dhcp(false){
15 refresh(); 15 refresh();
16} 16}
17 17
18/** 18/**
19 * Set status
20 * @param newStatus - the new status
21 * emit updateInterface
22 */
23void Interface::setStatus(bool newStatus){
24 if(status != newStatus){
25 status = newStatus;
26 refresh();
27 }
28};
29
30/**
31 * Set if attached or not (802.11 card pulled out for example)
32 * @param isAttached - if attached
33 * emit updateInterface
34 */
35void Interface::setAttached(bool isAttached){
36 attached = isAttached;
37 emit(updateInterface(this));
38};
39
40/**
41 * Set Hardware name
42 * @param name - the new name
43 * emit updateInterface
44 */
45void Interface::setHardwareName(QString name){
46 hardareName = name;
47 emit(updateInterface(this));
48};
49
50/**
51 * Set Module owner
52 * @param owner - the new owner
53 * emit updateInterface
54 */
55void Interface::setModuleOwner(Module *owner){
56 moduleOwner = owner;
57 emit(updateInterface(this));
58};
59
60
61/**
19 * Try to start the interface. 62 * Try to start the interface.
20 * @return bool true if successfull.
21 */ 63 */
22bool Interface::start(){ 64void Interface::start(){
23 // check to see if we are already running. 65 // check to see if we are already running.
24 if(status) 66 if(true == status)
25 return false; 67 return;
26 68
27 int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(interfaceName).latin1()); 69 int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(interfaceName).latin1());
70 // See if it was successfull...
28 if(ret != 0) 71 if(ret != 0)
29 return false; 72 return;
30 73
31 status = true; 74 status = true;
32 refresh(); 75 refresh();
33 return true;
34} 76}
35 77
36/** 78/**
37 * Try to stop the interface. 79 * Try to stop the interface.
38 * @return bool true if successfull.
39 */ 80 */
40bool Interface::stop(){ 81void Interface::stop(){
41 // check to see if we are already stopped. 82 // check to see if we are already stopped.
42 if(status == false) 83 if(false == status)
43 return false; 84 return;
44 85
45 int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(interfaceName).latin1()); 86 int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(interfaceName).latin1());
46 if(ret != 0) 87 if(ret != 0)
47 return false; 88 return;
48 89
49 status = true; 90 status = true;
50 refresh(); 91 refresh();
51 return true;
52} 92}
93
53/** 94/**
54 * Try to restart the interface. 95 * Try to restart the interface.
55 * @return bool true if successfull.
56 */ 96 */
57bool Interface::restart(){ 97void Interface::restart(){
58 return (stop() && start()); 98 stop();
99 start();
59} 100}
60 101
61/** 102/**
62 * Try to refresh the information about the interface. 103 * Try to refresh the information about the interface.
63 * First call ifconfig, then check the dhcp-info file 104 * First call ifconfig, then check the dhcp-info file
64 * @return bool true if successfull. 105 * @return bool true if successfull.
65 */ 106 */
66bool Interface::refresh(){ 107bool Interface::refresh(){
67 // See if we are up. 108 // See if we are up.
68 if(status == false){ 109 if(status == false){
69 macAddress = ""; 110 macAddress = "";
70 ip = "0.0.0.0"; 111 ip = "0.0.0.0";
71 subnetMask = "0.0.0.0"; 112 subnetMask = "0.0.0.0";
72 broadcast = ""; 113 broadcast = "";
73 dhcp = false; 114 dhcp = false;
74 dhcpServerIp = ""; 115 dhcpServerIp = "";
75 leaseObtained = ""; 116 leaseObtained = "";
76 leaseExpires = ""; 117 leaseExpires = "";
118 emit(updateInterface(this));
77 return true; 119 return true;
78 } 120 }
79 121
80 QString fileName = QString("/tmp/%1_ifconfig_info").arg(interfaceName); 122 QString fileName = QString("/tmp/%1_ifconfig_info").arg(interfaceName);
81 int ret = system(QString("%1 %2 > %3").arg(IFCONFIG).arg(interfaceName).arg(fileName).latin1()); 123 int ret = system(QString("%1 %2 > %3").arg(IFCONFIG).arg(interfaceName).arg(fileName).latin1());
82 if(ret != 0){ 124 if(ret != 0){
83 qDebug(QString("Interface: Ifconfig return value: %1, is not 0").arg(ret).latin1()); 125 qDebug(QString("Interface: Ifconfig return value: %1, is not 0").arg(ret).latin1());
84 return false; 126 return false;
85 } 127 }
86 128
87 QFile file(fileName); 129 QFile file(fileName);
88 if (!file.open(IO_ReadOnly)){ 130 if (!file.open(IO_ReadOnly)){
89 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); 131 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1());
90 return false; 132 return false;
91 } 133 }
92 134
93 // Set to the defaults 135 // Set to the defaults
94 macAddress = ""; 136 macAddress = "";
95 ip = "0.0.0.0"; 137 ip = "0.0.0.0";
96 subnetMask = "0.0.0.0"; 138 subnetMask = "0.0.0.0";
97 broadcast = ""; 139 broadcast = "";
98 140
99 QTextStream stream( &file ); 141 QTextStream stream( &file );
100 QString line; 142 QString line;
101 while ( !stream.eof() ) { 143 while ( !stream.eof() ) {
102 line = stream.readLine(); 144 line = stream.readLine();
103 if(line.contains("HWaddr")){ 145 if(line.contains("HWaddr")){
104 int mac = line.find("HWaddr"); 146 int mac = line.find("HWaddr");
105 macAddress = line.mid(mac+7, line.length()); 147 macAddress = line.mid(mac+7, line.length());
106 } 148 }
107 if(line.contains("inet addr")){ 149 if(line.contains("inet addr")){
108 int ipl = line.find("inet addr"); 150 int ipl = line.find("inet addr");
109 int space = line.find(" ", ipl+10); 151 int space = line.find(" ", ipl+10);
110 ip = line.mid(ipl+10, space-ipl-10); 152 ip = line.mid(ipl+10, space-ipl-10);
111 } 153 }
112 if(line.contains("Mask")){ 154 if(line.contains("Mask")){
113 int mask = line.find("Mask"); 155 int mask = line.find("Mask");
114 subnetMask = line.mid(mask+5, line.length()); 156 subnetMask = line.mid(mask+5, line.length());
115 } 157 }
116 if(line.contains("Bcast")){ 158 if(line.contains("Bcast")){
117 int mask = line.find("Bcast"); 159 int mask = line.find("Bcast");
118 int space = line.find(" ", mask+6); 160 int space = line.find(" ", mask+6);
119 broadcast = line.mid(mask+6, space-mask-6); 161 broadcast = line.mid(mask+6, space-mask-6);
120 } 162 }
121 } 163 }
122 file.close(); 164 file.close();
123 QFile::remove(fileName); 165 QFile::remove(fileName);
124 166
125 // DHCP TESTING 167 // DHCP TESTING
126 // reset DHCP info 168 // reset DHCP info
127 dhcpServerIp = ""; 169 dhcpServerIp = "";
128 leaseObtained = ""; 170 leaseObtained = "";
129 leaseExpires = ""; 171 leaseExpires = "";
130 dhcp = false; 172 dhcp = false;
131 173
132 QString dhcpDirectory(HDCP_INFO_DIR); 174 QString dhcpDirectory(HDCP_INFO_DIR);
133 QDir d(dhcpDirectory); 175 QDir d(dhcpDirectory);
134 if(!d.exists(dhcpDirectory)) 176 if(!d.exists(dhcpDirectory))
135 dhcpDirectory = "/var/run"; 177 dhcpDirectory = "/var/run";
136 178
137 // See if we have 179 // See if we have
138 QString dhcpFile(QString(dhcpDirectory+"/dhcpcd-%1.info").arg(interfaceName)); 180 QString dhcpFile(QString(dhcpDirectory+"/dhcpcd-%1.info").arg(interfaceName));
139 // If there is no DHCP information then exit now with no errors. 181 // If there is no DHCP information then exit now with no errors.
140 if(!QFile::exists(dhcpFile)){ 182 if(!QFile::exists(dhcpFile)){
183 emit(updateInterface(this));
141 return true; 184 return true;
142 } 185 }
143 186
144 file.setName(dhcpFile); 187 file.setName(dhcpFile);
145 if (!file.open(IO_ReadOnly)){ 188 if (!file.open(IO_ReadOnly)){
146 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); 189 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1());
147 return false; 190 return false;
148 } 191 }
149 192
150 // leaseTime and renewalTime and used if pid and deamon exe can be accessed. 193 // leaseTime and renewalTime and used if pid and deamon exe can be accessed.
151 int leaseTime = 0; 194 int leaseTime = 0;
152 int renewalTime = 0; 195 int renewalTime = 0;
153 196
154 stream.setDevice( &file ); 197 stream.setDevice( &file );
155 while ( !stream.eof() ) { 198 while ( !stream.eof() ) {
156 line = stream.readLine(); 199 line = stream.readLine();
157 if(line.contains("DHCPSIADDR=")) 200 if(line.contains("DHCPSIADDR="))
158 dhcpServerIp = line.mid(11, line.length()); 201 dhcpServerIp = line.mid(11, line.length());
159 if(line.contains("LEASETIME=")) 202 if(line.contains("LEASETIME="))
160 leaseTime = line.mid(10, line.length()).toInt(); 203 leaseTime = line.mid(10, line.length()).toInt();
161 if(line.contains("RENEWALTIME=")) 204 if(line.contains("RENEWALTIME="))
162 renewalTime = line.mid(12, line.length()).toInt(); 205 renewalTime = line.mid(12, line.length()).toInt();
163 } 206 }
164 file.close(); 207 file.close();
165 //qDebug(QString("Interface: leaseTime: %1").arg(leaseTime).latin1()); 208 //qDebug(QString("Interface: leaseTime: %1").arg(leaseTime).latin1());
166 //qDebug(QString("Interface: renewalTime: %1").arg(renewalTime).latin1()); 209 //qDebug(QString("Interface: renewalTime: %1").arg(renewalTime).latin1());
167 210
168 // Get the pid of the deamond 211 // Get the pid of the deamond
169 dhcpFile = (QString(dhcpDirectory+"/dhcpcd-%1.pid").arg(interfaceName)); 212 dhcpFile = (QString(dhcpDirectory+"/dhcpcd-%1.pid").arg(interfaceName));
170 file.setName(dhcpFile); 213 file.setName(dhcpFile);
171 if (!file.open(IO_ReadOnly)){ 214 if (!file.open(IO_ReadOnly)){
172 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); 215 qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1());
173 return false; 216 return false;
174 } 217 }
175 218
176 int pid = -1; 219 int pid = -1;
177 stream.setDevice( &file ); 220 stream.setDevice( &file );
178 while ( !stream.eof() ) { 221 while ( !stream.eof() ) {
179 line = stream.readLine(); 222 line = stream.readLine();
180 pid = line.toInt(); 223 pid = line.toInt();
181 } 224 }
182 file.close(); 225 file.close();
183 226
184 if( pid == -1){ 227 if( pid == -1){
185 qDebug("Interface: Could not get pid of dhcpc deamon."); 228 qDebug("Interface: Could not get pid of dhcpc deamon.");
186 return false; 229 return false;
187 } 230 }
188 231
189 // Get the start running time of the deamon 232 // Get the start running time of the deamon
190 fileName = (QString("/proc/%1/stat").arg(pid)); 233 fileName = (QString("/proc/%1/stat").arg(pid));
191 file.setName(fileName); 234 file.setName(fileName);
192 stream.setDevice( &file ); 235 stream.setDevice( &file );
193 if (!file.open(IO_ReadOnly)){ 236 if (!file.open(IO_ReadOnly)){
194 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); 237 qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1());
195 return false; 238 return false;
196 } 239 }
197 while ( !stream.eof() ) { 240 while ( !stream.eof() ) {
198 line = stream.readLine(); 241 line = stream.readLine();
199 } 242 }
200 file.close(); 243 file.close();
201 long time = 0; 244 long time = 0;
202 // Grab the start time 245 // Grab the start time
203 // pid com state ppid pgrp session tty_nr tpgid flags 246 // pid com state ppid pgrp session tty_nr tpgid flags
204 sscanf(line.latin1(), "%*d %*s %*c %*d %*d %*d %*d %*d %*u " 247 sscanf(line.latin1(), "%*d %*s %*c %*d %*d %*d %*d %*d %*u "
205 // minflt cminflt majflt cmajflt utime stime cutime cstime priority 248 // minflt cminflt majflt cmajflt utime stime cutime cstime priority
206 "%*u %*u %*u %*u %*u %*u %*d %*d %*d " 249 "%*u %*u %*u %*u %*u %*u %*d %*d %*d "
207 // nice 0 itrealvalue starttime 250 // nice 0 itrealvalue starttime
208 "%*d %*d %*d %lu", (long*) &time); 251 "%*d %*d %*d %lu", (long*) &time);
209 time = time/100; 252 time = time/100;
210 253
211 QDateTime datetime(QDateTime::currentDateTime()); 254 QDateTime datetime(QDateTime::currentDateTime());
212 255
213 // Get the uptime of the computer. 256 // Get the uptime of the computer.
214 QFile f("/proc/uptime"); 257 QFile f("/proc/uptime");
215 if ( f.open(IO_ReadOnly) ) { // file opened successfully 258 if ( f.open(IO_ReadOnly) ) { // file opened successfully
216 QTextStream t( &f ); // use a text stream 259 QTextStream t( &f ); // use a text stream
217 int sec = 0; 260 int sec = 0;
218 t >> sec; 261 t >> sec;
219 datetime = datetime.addSecs((-1*sec)); 262 datetime = datetime.addSecs((-1*sec));
220 f.close(); 263 f.close();
221 } 264 }
222 else{ 265 else{
223 qDebug("Interface: Can't open /proc/uptime to retrive uptime."); 266 qDebug("Interface: Can't open /proc/uptime to retrive uptime.");
224 return false; 267 return false;
225 } 268 }
226 269
227 datetime = datetime.addSecs(time); 270 datetime = datetime.addSecs(time);
228 //qDebug(QString("Interface: %1 %2").arg(datetime.toString()).arg(pid).latin1()); 271 //qDebug(QString("Interface: %1 %2").arg(datetime.toString()).arg(pid).latin1());
229 272
230 // Calculate the start and renew times 273 // Calculate the start and renew times
231 leaseObtained= datetime.toString(); 274 leaseObtained= datetime.toString();
232 275
233 // Calculate the start and renew times 276 // Calculate the start and renew times
234 datetime = datetime.addSecs(leaseTime); 277 datetime = datetime.addSecs(leaseTime);
235 leaseExpires = datetime.toString(); 278 leaseExpires = datetime.toString();
236 279
237 dhcp = true; 280 dhcp = true;
281
282 emit(updateInterface(this));
238 return true; 283 return true;
239} 284}
240 285
241// interface.cpp 286// interface.cpp
242 287
diff --git a/noncore/settings/networksettings/interface.h b/noncore/settings/networksettings/interface.h
index 1406e99..980171a 100644
--- a/noncore/settings/networksettings/interface.h
+++ b/noncore/settings/networksettings/interface.h
@@ -1,67 +1,72 @@
1#ifndef INTERFACE_H 1#ifndef INTERFACE_H
2#define INTERFACE_H 2#define INTERFACE_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5#include <qobject.h>
5 6
6class Module; 7class Module;
7 8
8class Interface { 9class Interface : public QObject{
10 Q_OBJECT
9 11
12signals:
13 void updateInterface(Interface *i);
14
10public: 15public:
11 Interface(QString name = "unknown", bool status = false); 16 Interface(QObject * parent=0, const char * name= "unknown", bool status = false);
12 virtual ~Interface(){}; 17 virtual ~Interface(){};
13 18
19 virtual QString getInterfaceName(){ QString n(this->name()); return n; };
20
14 virtual bool getStatus(){ return status; }; 21 virtual bool getStatus(){ return status; };
15 virtual void setStatus(bool newSatus){ status = newSatus; refresh(); }; 22 virtual void setStatus(bool newStatus);
16 23
17 virtual bool isAttached(){ return attached; }; 24 virtual bool isAttached(){ return attached; };
18 virtual void setAttached(bool isAttached=false){ attached = isAttached; }; 25 virtual void setAttached(bool isAttached=false);
19
20 virtual QString getInterfaceName(){ return interfaceName; };
21 virtual void setInterfaceName(QString name="unknown"){ interfaceName = name; };
22 26
23 virtual QString getHardwareName(){ return hardareName; }; 27 virtual QString getHardwareName(){ return hardareName; };
24 virtual void setHardwareName(QString name="Unknown"){ hardareName = name; }; 28 virtual void setHardwareName(QString name="Unknown");
25 29
26 virtual Module* getModuleOwner(){ return moduleOwner; }; 30 virtual Module* getModuleOwner(){ return moduleOwner; };
27 virtual void setModuleOwner(Module *owner=NULL){ moduleOwner = owner; }; 31 virtual void setModuleOwner(Module *owner=NULL);
28 32
29 // inet information. 33 // inet information.
30 QString getMacAddress(){ return macAddress; }; 34 QString getMacAddress(){ return macAddress; };
31 QString getIp(){ return ip; }; 35 QString getIp(){ return ip; };
32 QString getSubnetMask(){ return subnetMask; }; 36 QString getSubnetMask(){ return subnetMask; };
33 QString getBroadcast(){ return broadcast; }; 37 QString getBroadcast(){ return broadcast; };
34 bool isDhcp(){ return dhcp; }; 38 bool isDhcp(){ return dhcp; };
35 QString getDhcpServerIp(){ return dhcpServerIp; }; 39 QString getDhcpServerIp(){ return dhcpServerIp; };
36 QString getLeaseObtained(){ return leaseObtained; }; 40 QString getLeaseObtained(){ return leaseObtained; };
37 QString getLeaseExpires(){ return leaseExpires; }; 41 QString getLeaseExpires(){ return leaseExpires; };
38 42
43public slots:
39 bool refresh(); 44 bool refresh();
40 bool start(); 45 void start();
41 bool stop(); 46 void stop();
42 bool restart(); 47 void restart();
43 48
44private: 49private:
45 // Interface information 50 // Interface information
46 bool status; 51 bool status;
47 bool attached; 52 bool attached;
48 QString interfaceName; 53 QString interfaceName;
49 QString hardareName; 54 QString hardareName;
50 Module *moduleOwner; 55 Module *moduleOwner;
51 56
52 // Network information 57 // Network information
53 QString macAddress; 58 QString macAddress;
54 QString ip; 59 QString ip;
55 QString broadcast; 60 QString broadcast;
56 QString subnetMask; 61 QString subnetMask;
57 bool dhcp; 62 bool dhcp;
58 QString dhcpServerIp; 63 QString dhcpServerIp;
59 QString leaseObtained; 64 QString leaseObtained;
60 QString leaseExpires; 65 QString leaseExpires;
61 66
62}; 67};
63 68
64#endif 69#endif
65 70
66// interface.h 71// interface.h
67 72
diff --git a/noncore/settings/networksettings/interfaceadvanced.ui b/noncore/settings/networksettings/interfaceadvanced.ui
index 7520abe..efe67b0 100644
--- a/noncore/settings/networksettings/interfaceadvanced.ui
+++ b/noncore/settings/networksettings/interfaceadvanced.ui
@@ -1,114 +1,121 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>InterfaceAdvanced</class> 2<class>InterfaceAdvanced</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>InterfaceAdvanced</cstring> 7 <cstring>InterfaceAdvanced</cstring>
8 </property> 8 </property>
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>188</width> 14 <width>214</width>
15 <height>277</height> 15 <height>286</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>maximumSize</name>
20 <size>
21 <width>320</width>
22 <height>32767</height>
23 </size>
24 </property>
25 <property stdset="1">
19 <name>caption</name> 26 <name>caption</name>
20 <string>Advanced Interface Information</string> 27 <string>Advanced Interface Information</string>
21 </property> 28 </property>
22 <grid> 29 <grid>
23 <property stdset="1"> 30 <property stdset="1">
24 <name>margin</name> 31 <name>margin</name>
25 <number>11</number> 32 <number>11</number>
26 </property> 33 </property>
27 <property stdset="1"> 34 <property stdset="1">
28 <name>spacing</name> 35 <name>spacing</name>
29 <number>6</number> 36 <number>6</number>
30 </property> 37 </property>
31 <widget row="1" column="0" > 38 <widget row="1" column="0" >
32 <class>QLabel</class> 39 <class>QLabel</class>
33 <property stdset="1"> 40 <property stdset="1">
34 <name>name</name> 41 <name>name</name>
35 <cstring>TextLabel1</cstring> 42 <cstring>TextLabel1</cstring>
36 </property> 43 </property>
37 <property stdset="1"> 44 <property stdset="1">
38 <name>text</name> 45 <name>text</name>
39 <string>MAC Address</string> 46 <string>MAC Address</string>
40 </property> 47 </property>
41 </widget> 48 </widget>
42 <widget row="0" column="1" > 49 <widget row="0" column="1" >
43 <class>QLabel</class> 50 <class>QLabel</class>
44 <property stdset="1"> 51 <property stdset="1">
45 <name>name</name> 52 <name>name</name>
46 <cstring>interfaceName</cstring> 53 <cstring>interfaceName</cstring>
47 </property> 54 </property>
48 <property stdset="1"> 55 <property stdset="1">
49 <name>frameShape</name> 56 <name>frameShape</name>
50 <enum>Panel</enum> 57 <enum>Panel</enum>
51 </property> 58 </property>
52 <property stdset="1"> 59 <property stdset="1">
53 <name>frameShadow</name> 60 <name>frameShadow</name>
54 <enum>Sunken</enum> 61 <enum>Sunken</enum>
55 </property> 62 </property>
56 <property stdset="1"> 63 <property stdset="1">
57 <name>text</name> 64 <name>text</name>
58 <string>eth0</string> 65 <string>eth0</string>
59 </property> 66 </property>
60 </widget> 67 </widget>
61 <widget row="2" column="0" > 68 <widget row="2" column="0" >
62 <class>QLabel</class> 69 <class>QLabel</class>
63 <property stdset="1"> 70 <property stdset="1">
64 <name>name</name> 71 <name>name</name>
65 <cstring>TextLabel3</cstring> 72 <cstring>TextLabel3</cstring>
66 </property> 73 </property>
67 <property stdset="1"> 74 <property stdset="1">
68 <name>text</name> 75 <name>text</name>
69 <string>IP Address</string> 76 <string>IP Address</string>
70 </property> 77 </property>
71 </widget> 78 </widget>
72 <widget row="1" column="1" > 79 <widget row="1" column="1" >
73 <class>QLabel</class> 80 <class>QLabel</class>
74 <property stdset="1"> 81 <property stdset="1">
75 <name>name</name> 82 <name>name</name>
76 <cstring>macAddressLabel</cstring> 83 <cstring>macAddressLabel</cstring>
77 </property> 84 </property>
78 <property stdset="1"> 85 <property stdset="1">
79 <name>frameShape</name> 86 <name>frameShape</name>
80 <enum>Panel</enum> 87 <enum>Panel</enum>
81 </property> 88 </property>
82 <property stdset="1"> 89 <property stdset="1">
83 <name>frameShadow</name> 90 <name>frameShadow</name>
84 <enum>Sunken</enum> 91 <enum>Sunken</enum>
85 </property> 92 </property>
86 <property stdset="1"> 93 <property stdset="1">
87 <name>text</name> 94 <name>text</name>
88 <string>00:00:00:00:00:00</string> 95 <string>00:00:00:00:00:00</string>
89 </property> 96 </property>
90 </widget> 97 </widget>
91 <widget row="0" column="0" > 98 <widget row="0" column="0" >
92 <class>QLabel</class> 99 <class>QLabel</class>
93 <property stdset="1"> 100 <property stdset="1">
94 <name>name</name> 101 <name>name</name>
95 <cstring>TextLabel7</cstring> 102 <cstring>TextLabel7</cstring>
96 </property> 103 </property>
97 <property stdset="1"> 104 <property stdset="1">
98 <name>text</name> 105 <name>text</name>
99 <string>Interface</string> 106 <string>Interface</string>
100 </property> 107 </property>
101 </widget> 108 </widget>
102 <widget row="4" column="0" > 109 <widget row="4" column="0" >
103 <class>QLabel</class> 110 <class>QLabel</class>
104 <property stdset="1"> 111 <property stdset="1">
105 <name>name</name> 112 <name>name</name>
106 <cstring>TextLabel4</cstring> 113 <cstring>TextLabel4</cstring>
107 </property> 114 </property>
108 <property stdset="1"> 115 <property stdset="1">
109 <name>enabled</name> 116 <name>enabled</name>
110 <bool>true</bool> 117 <bool>true</bool>
111 </property> 118 </property>
112 <property stdset="1"> 119 <property stdset="1">
113 <name>text</name> 120 <name>text</name>
114 <string>Subnet Mask</string> 121 <string>Subnet Mask</string>
diff --git a/noncore/settings/networksettings/interfaceinformationimp.cpp b/noncore/settings/networksettings/interfaceinformationimp.cpp
index e37e0f8..59a6400 100644
--- a/noncore/settings/networksettings/interfaceinformationimp.cpp
+++ b/noncore/settings/networksettings/interfaceinformationimp.cpp
@@ -1,94 +1,67 @@
1#include "interfaceinformationimp.h" 1#include "interfaceinformationimp.h"
2#include "interfaceadvanced.h" 2#include "interfaceadvanced.h"
3 3
4#include <qpushbutton.h> 4#include <qpushbutton.h>
5#include <qlabel.h> 5#include <qlabel.h>
6#include <assert.h> 6#include <assert.h>
7 7
8/** 8/**
9 * Constructor for the InterfaceInformationImp class. This class pretty much 9 * Constructor for the InterfaceInformationImp class. This class pretty much
10 * just display's information about the interface that is passed to it. 10 * just display's information about the interface that is passed to it.
11 */ 11 */
12InterfaceInformationImp::InterfaceInformationImp(QWidget *parent, const char *name, Interface *i, WFlags f):InterfaceInformation(parent, name, f){ 12InterfaceInformationImp::InterfaceInformationImp(QWidget *parent, const char *name, Interface *i, WFlags f):InterfaceInformation(parent, name, f){
13 assert(i); 13 assert(i);
14 14
15 interface = i; 15 interface = i;
16 updateInterface(); 16 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *)));
17 connect(startButton, SIGNAL(clicked()), this, SLOT(start())); 17 updateInterface(interface);
18 connect(stopButton, SIGNAL(clicked()), this, SLOT(stop())); 18 connect(startButton, SIGNAL(clicked()), interface, SLOT(start()));
19 connect(restartButton, SIGNAL(clicked()), this, SLOT(restart())); 19 connect(stopButton, SIGNAL(clicked()), interface, SLOT(stop()));
20 connect(refreshButton, SIGNAL(clicked()), this, SLOT(refresh())); 20 connect(restartButton, SIGNAL(clicked()), interface, SLOT(restart()));
21 connect(refreshButton, SIGNAL(clicked()), interface, SLOT(refresh()));
21 connect(advancedButton, SIGNAL(clicked()), this, SLOT(advanced())); 22 connect(advancedButton, SIGNAL(clicked()), this, SLOT(advanced()));
22 23
23} 24}
24 25
25void InterfaceInformationImp::updateInterface(){ 26/**
27 * Update the interface information and buttons.
28 * @param Intarface *i the interface to update (should be the one we already
29 * know about).
30 */
31void InterfaceInformationImp::updateInterface(Interface *i){
26 if(interface->getStatus()){ 32 if(interface->getStatus()){
27 startButton->setEnabled(false); 33 startButton->setEnabled(false);
28 stopButton->setEnabled(true); 34 stopButton->setEnabled(true);
29 restartButton->setEnabled(true); 35 restartButton->setEnabled(true);
30 } 36 }
31 else{ 37 else{
32 startButton->setEnabled(true); 38 startButton->setEnabled(true);
33 stopButton->setEnabled(false); 39 stopButton->setEnabled(false);
34 restartButton->setEnabled(false); 40 restartButton->setEnabled(false);
35 } 41 }
36 macAddressLabel->setText(interface->getMacAddress()); 42 macAddressLabel->setText(interface->getMacAddress());
37 ipAddressLabel->setText(interface->getIp()); 43 ipAddressLabel->setText(interface->getIp());
38 subnetMaskLabel->setText(interface->getSubnetMask()); 44 subnetMaskLabel->setText(interface->getSubnetMask());
39 broadcastLabel->setText(interface->getBroadcast()); 45 broadcastLabel->setText(interface->getBroadcast());
40} 46}
41 47
42/** 48/**
43 * Start the interface. Update the information if successfull
44 */
45void InterfaceInformationImp::start(){
46 if(interface->start()){
47 updateInterface();
48 }
49}
50
51/**
52 * Stop the interface.
53 */
54void InterfaceInformationImp::stop(){
55 if(interface->stop()){
56 updateInterface();
57 }
58}
59
60/***
61 * Tell the interface to refresh its information.
62 **/
63void InterfaceInformationImp::refresh(){
64 if(interface->refresh())
65 updateInterface();
66}
67
68void InterfaceInformationImp::restart(){
69 if(interface->restart()){
70 updateInterface();
71 }
72}
73
74
75/**
76 * Create the advanced widget. Fill it with the current interface's information. 49 * Create the advanced widget. Fill it with the current interface's information.
77 * Display it. 50 * Display it.
78 */ 51 */
79void InterfaceInformationImp::advanced(){ 52void InterfaceInformationImp::advanced(){
80 InterfaceAdvanced *a = new InterfaceAdvanced(0, "InterfaceAdvanced"); 53 InterfaceAdvanced *a = new InterfaceAdvanced(0, "InterfaceAdvanced");
81 a->interfaceName->setText(interface->getInterfaceName()); 54 a->interfaceName->setText(interface->getInterfaceName());
82 a->macAddressLabel->setText(interface->getMacAddress()); 55 a->macAddressLabel->setText(interface->getMacAddress());
83 a->ipAddressLabel->setText(interface->getIp()); 56 a->ipAddressLabel->setText(interface->getIp());
84 a->subnetMaskLabel->setText(interface->getSubnetMask()); 57 a->subnetMaskLabel->setText(interface->getSubnetMask());
85 a->broadcastLabel->setText(interface->getBroadcast()); 58 a->broadcastLabel->setText(interface->getBroadcast());
86 a->dhcpServerLabel->setText(interface->getDhcpServerIp()); 59 a->dhcpServerLabel->setText(interface->getDhcpServerIp());
87 a->leaseObtainedLabel->setText(interface->getLeaseObtained()); 60 a->leaseObtainedLabel->setText(interface->getLeaseObtained());
88 a->leaseExpiresLabel->setText(interface->getLeaseExpires()); 61 a->leaseExpiresLabel->setText(interface->getLeaseExpires());
89 a->showMaximized(); 62 a->showMaximized();
90 a->show(); 63 a->show();
91} 64}
92 65
93// infoimp.cpp 66// infoimp.cpp
94 67
diff --git a/noncore/settings/networksettings/interfaceinformationimp.h b/noncore/settings/networksettings/interfaceinformationimp.h
index c8a478e..42213cc 100644
--- a/noncore/settings/networksettings/interfaceinformationimp.h
+++ b/noncore/settings/networksettings/interfaceinformationimp.h
@@ -1,31 +1,27 @@
1#ifndef INTERFACEINFORMATIONIMP_H 1#ifndef INTERFACEINFORMATIONIMP_H
2#define INTERFACEINFORMATIONIMP_H 2#define INTERFACEINFORMATIONIMP_H
3 3
4#include "interfaceinformation.h" 4#include "interfaceinformation.h"
5#include "interface.h" 5#include "interface.h"
6 6
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 start();
17 void stop();
18 void refresh();
19 void restart();
20 void advanced(); 16 void advanced();
17 void updateInterface(Interface *i);
21 18
22private: 19private:
23 Interface *interface; 20 Interface *interface;
24 void updateInterface();
25 21
26}; 22};
27 23
28#endif 24#endif
29 25
30// addserviceimp.h 26// addserviceimp.h
31 27
diff --git a/noncore/settings/networksettings/mainwindowimp.cpp b/noncore/settings/networksettings/mainwindowimp.cpp
index b46362f..117bac1 100644
--- a/noncore/settings/networksettings/mainwindowimp.cpp
+++ b/noncore/settings/networksettings/mainwindowimp.cpp
@@ -211,250 +211,253 @@ void MainWindowImp::configureClicked(){
211 QTabWidget *tabWidget = NULL; 211 QTabWidget *tabWidget = NULL;
212 QWidget *moduleConfigure = i->getModuleOwner()->configure(&tabWidget); 212 QWidget *moduleConfigure = i->getModuleOwner()->configure(&tabWidget);
213 if(moduleConfigure != NULL){ 213 if(moduleConfigure != NULL){
214 if(tabWidget != NULL){ 214 if(tabWidget != NULL){
215 InterfaceSetupImp *configure = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, true); 215 InterfaceSetupImp *configure = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, true);
216 tabWidget->insertTab(configure, "TCP/IP"); 216 tabWidget->insertTab(configure, "TCP/IP");
217 } 217 }
218 moduleConfigure->showMaximized(); 218 moduleConfigure->showMaximized();
219 moduleConfigure->show(); 219 moduleConfigure->show();
220 return; 220 return;
221 } 221 }
222 } 222 }
223 223
224 InterfaceSetupImp *configure = new InterfaceSetupImp(0, "InterfaceSetupImp", i, true); 224 InterfaceSetupImp *configure = new InterfaceSetupImp(0, "InterfaceSetupImp", i, true);
225 configure->showMaximized(); 225 configure->showMaximized();
226 configure->show(); 226 configure->show();
227} 227}
228 228
229/** 229/**
230 * Pull up the information about the currently selected interface. 230 * Pull up the information about the currently selected interface.
231 * Report an error if no interface is selected. 231 * Report an error if no interface is selected.
232 * If the interface has a module owner then request its configure with a empty 232 * If the interface has a module owner then request its configure with a empty
233 * tab. If tab is !NULL then append the interfaces setup widget to it. 233 * tab. If tab is !NULL then append the interfaces setup widget to it.
234 */ 234 */
235void MainWindowImp::informationClicked(){ 235void MainWindowImp::informationClicked(){
236 QListViewItem *item = connectionList->currentItem(); 236 QListViewItem *item = connectionList->currentItem();
237 if(!item){ 237 if(!item){
238 QMessageBox::information(this, "Error","Please select an interface.", QMessageBox::Ok); 238 QMessageBox::information(this, "Error","Please select an interface.", QMessageBox::Ok);
239 return; 239 return;
240 } 240 }
241 241
242 Interface *i = interfaceItems[item]; 242 Interface *i = interfaceItems[item];
243 if(!i->isAttached()){ 243 if(!i->isAttached()){
244 QMessageBox::information(this, "Error","No information about\na disconnected interface.", QMessageBox::Ok); 244 QMessageBox::information(this, "Error","No information about\na disconnected interface.", QMessageBox::Ok);
245 return; 245 return;
246 } 246 }
247 if(i->getModuleOwner()){ 247 if(i->getModuleOwner()){
248 QTabWidget *tabWidget = NULL; 248 QTabWidget *tabWidget = NULL;
249 QWidget *moduleInformation = i->getModuleOwner()->information(&tabWidget); 249 QWidget *moduleInformation = i->getModuleOwner()->information(&tabWidget);
250 if(moduleInformation != NULL){ 250 if(moduleInformation != NULL){
251 if(tabWidget != NULL){ 251 if(tabWidget != NULL){
252 InterfaceInformationImp *information = new InterfaceInformationImp(tabWidget, "InterfaceSetupImp", i, true); 252 InterfaceInformationImp *information = new InterfaceInformationImp(tabWidget, "InterfaceSetupImp", i, true);
253 tabWidget->insertTab(information, "TCP/IP"); 253 tabWidget->insertTab(information, "TCP/IP");
254 } 254 }
255 moduleInformation->showMaximized(); 255 moduleInformation->showMaximized();
256 moduleInformation->show(); 256 moduleInformation->show();
257 return; 257 return;
258 } 258 }
259 } 259 }
260 260
261 InterfaceInformationImp *information = new InterfaceInformationImp(0, "InterfaceSetupImp", i, true); 261 InterfaceInformationImp *information = new InterfaceInformationImp(0, "InterfaceSetupImp", i, true);
262 information->showMaximized(); 262 information->showMaximized();
263 information->show(); 263 information->show();
264} 264}
265 265
266/** 266/**
267 * Aquire the list of active interfaces from ifconfig 267 * Aquire the list of active interfaces from ifconfig
268 * Call ifconfig and ifconfig -a 268 * Call ifconfig and ifconfig -a
269 */ 269 */
270void MainWindowImp::getInterfaceList(){ 270void MainWindowImp::getInterfaceList(){
271 KShellProcess *processAll = new KShellProcess(); 271 KShellProcess *processAll = new KShellProcess();
272 *processAll << "/sbin/ifconfig" << "-a" << " > " TEMP_ALL; 272 *processAll << "/sbin/ifconfig" << "-a" << " > " TEMP_ALL;
273 connect(processAll, SIGNAL(processExited(KProcess *)), 273 connect(processAll, SIGNAL(processExited(KProcess *)),
274 this, SLOT(jobDone(KProcess *))); 274 this, SLOT(jobDone(KProcess *)));
275 threads.insert(processAll, TEMP_ALL); 275 threads.insert(processAll, TEMP_ALL);
276 276
277 KShellProcess *process = new KShellProcess(); 277 KShellProcess *process = new KShellProcess();
278 *process << "/sbin/ifconfig" << " > " TEMP_UP; 278 *process << "/sbin/ifconfig" << " > " TEMP_UP;
279 connect(process, SIGNAL(processExited(KProcess *)), 279 connect(process, SIGNAL(processExited(KProcess *)),
280 this, SLOT(jobDone(KProcess *))); 280 this, SLOT(jobDone(KProcess *)));
281 threads.insert(process, TEMP_UP); 281 threads.insert(process, TEMP_UP);
282 282
283 processAll->start(KShellProcess::NotifyOnExit); 283 processAll->start(KShellProcess::NotifyOnExit);
284 process->start(KShellProcess::NotifyOnExit); 284 process->start(KShellProcess::NotifyOnExit);
285} 285}
286 286
287void MainWindowImp::jobDone(KProcess *process){ 287void MainWindowImp::jobDone(KProcess *process){
288 QString fileName = threads[process]; 288 QString fileName = threads[process];
289 threads.remove(process); 289 threads.remove(process);
290 delete process; 290 delete process;
291 291
292 QFile file(fileName); 292 QFile file(fileName);
293 if (!file.open(IO_ReadOnly)){ 293 if (!file.open(IO_ReadOnly)){
294 qDebug(QString("MainWindowImp: Can't open file: %1").arg(fileName).latin1()); 294 qDebug(QString("MainWindowImp: Can't open file: %1").arg(fileName).latin1());
295 return; 295 return;
296 } 296 }
297 297
298 QTextStream stream( &file ); 298 QTextStream stream( &file );
299 QString line; 299 QString line;
300 while ( !stream.eof() ) { 300 while ( !stream.eof() ) {
301 line = stream.readLine(); 301 line = stream.readLine();
302 int space = line.find(" "); 302 int space = line.find(" ");
303 if(space > 1){ 303 if(space > 1){
304 // We have found an interface 304 // We have found an interface
305 QString interfaceName = line.mid(0, space); 305 QString interfaceName = line.mid(0, space);
306 Interface *i; 306 Interface *i;
307 // We have found an interface
308 //qDebug(QString("MainWindowImp: Found Interface: %1").arg(line).latin1());
307 // See if we already have it 309 // See if we already have it
308 if(interfaceNames.find(interfaceName) == interfaceNames.end()){ 310 if(interfaceNames.find(interfaceName) == interfaceNames.end()){
309 if(fileName == TEMP_ALL) 311 if(fileName == TEMP_ALL)
310 i = new Interface(interfaceName, false); 312 i = new Interface(this, interfaceName, false);
311 else 313 else
312 i = new Interface(interfaceName, true); 314 i = new Interface(this, interfaceName, true);
315 i->setAttached(true);
316
317 QString hardName = "Ethernet";
318 int hardwareName = line.find("Link encap:");
319 int macAddress = line.find("HWaddr");
320 if(macAddress == -1)
321 macAddress = line.length();
322 if(hardwareName != -1)
323 i->setHardwareName(line.mid(hardwareName+11, macAddress-(hardwareName+11)) + QString(" (%1)").arg(i->getInterfaceName()));
324
325 interfaceNames.insert(i->getInterfaceName(), i);
326 updateInterface(i);
327 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *)));
313 } 328 }
329 // It was an interface we already had.
314 else{ 330 else{
315 i = interfaceNames[interfaceName]; 331 i = interfaceNames[interfaceName];
316 if(fileName != TEMP_ALL) 332 if(fileName != TEMP_ALL)
317 i->setStatus(true); 333 i->setStatus(true);
318 } 334 }
319
320 i->setAttached(true);
321 i->setInterfaceName(interfaceName);
322
323 QString hardName = "Ethernet";
324 int hardwareName = line.find("Link encap:");
325 int macAddress = line.find("HWaddr");
326 if(macAddress == -1)
327 macAddress = line.length();
328 if(hardwareName != -1)
329 i->setHardwareName(line.mid(hardwareName+11, macAddress-(hardwareName+11)) + QString(" (%1)").arg(i->getInterfaceName()));
330 // We have found an interface
331 //qDebug(QString("MainWindowImp: Found Interface: %1").arg(line).latin1());
332 interfaceNames.insert(i->getInterfaceName(), i);
333 updateInterface(i);
334 } 335 }
335 } 336 }
336 file.close(); 337 file.close();
337 QFile::remove(fileName); 338 QFile::remove(fileName);
338 339
339 if(threads.count() == 0){ 340 if(threads.count() == 0){
340 Interfaces i; 341 Interfaces i;
341 QStringList list = i.getInterfaceList(); 342 QStringList list = i.getInterfaceList();
342 QMap<QString, Interface*>::Iterator it; 343 QMap<QString, Interface*>::Iterator it;
343 for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) { 344 for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) {
344 bool found = false; 345 bool found = false;
345 for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ){ 346 for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ){
346 if(it.key() == (*ni)) 347 if(it.key() == (*ni))
347 found = true; 348 found = true;
348 } 349 }
349 if(!found){ 350 if(!found){
350 Interface *i = new Interface(*ni, false); 351 Interface *i = new Interface(this, *ni, false);
351 i->setAttached(false); 352 i->setAttached(false);
352 i->setHardwareName(QString("Disconnected (%1)").arg(*ni)); 353 i->setHardwareName(QString("Disconnected (%1)").arg(*ni));
353 i->setInterfaceName(*ni);
354 interfaceNames.insert(i->getInterfaceName(), i); 354 interfaceNames.insert(i->getInterfaceName(), i);
355 updateInterface(i); 355 updateInterface(i);
356 connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *)));
356 } 357 }
357 } 358 }
358 } 359 }
359} 360}
360 361
361/** 362/**
362 * Update this interface. If no QListViewItem exists create one. 363 * Update this interface. If no QListViewItem exists create one.
363 * @param Interface* pointer to the interface that needs to be updated. 364 * @param Interface* pointer to the interface that needs to be updated.
364 */ 365 */
365void MainWindowImp::updateInterface(Interface *i){ 366void MainWindowImp::updateInterface(Interface *i){
366 if(!advancedUserMode){ 367 if(!advancedUserMode){
367 if(i->getInterfaceName() == "lo") 368 if(i->getInterfaceName() == "lo")
368 return; 369 return;
369 } 370 }
370 371
371 QListViewItem *item = NULL; 372 QListViewItem *item = NULL;
372 373
373 // Find the interface, making it if needed. 374 // Find the interface, making it if needed.
374 if(items.find(i) == items.end()){ 375 if(items.find(i) == items.end()){
375 item = new QListViewItem(connectionList, "", "", ""); 376 item = new QListViewItem(connectionList, "", "", "");
376 // See if you can't find a module owner for this interface 377 // See if you can't find a module owner for this interface
377 QMap<Module*, QLibrary*>::Iterator it; 378 QMap<Module*, QLibrary*>::Iterator it;
378 for( it = libraries.begin(); it != libraries.end(); ++it ){ 379 for( it = libraries.begin(); it != libraries.end(); ++it ){
379 if(it.key()->isOwner(i)) 380 if(it.key()->isOwner(i))
380 i->setModuleOwner(it.key()); 381 i->setModuleOwner(it.key());
381 } 382 }
382 items.insert(i, item); 383 items.insert(i, item);
383 interfaceItems.insert(item, i); 384 interfaceItems.insert(item, i);
384 } 385 }
385 else 386 else
386 item = items[i]; 387 item = items[i];
387 388
388 // Update the icons and information 389 // Update the icons and information
389 item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down"))); 390 item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down")));
390 391
391 QString typeName = "lan"; 392 QString typeName = "lan";
392 if(i->getHardwareName().contains("Local Loopback")) 393 if(i->getHardwareName().contains("Local Loopback"))
393 typeName = "lo"; 394 typeName = "lo";
394 if(i->getInterfaceName().contains("irda")) 395 if(i->getInterfaceName().contains("irda"))
395 typeName = "irda"; 396 typeName = "irda";
396 if(i->getInterfaceName().contains("wlan")) 397 if(i->getInterfaceName().contains("wlan"))
397 typeName = "wlan"; 398 typeName = "wlan";
398 399 if(i->getInterfaceName().contains("usb"))
400 typeName = "usb";
401
399 if(!i->isAttached()) 402 if(!i->isAttached())
400 typeName = "connect_no"; 403 typeName = "connect_no";
401 // Actually try to use the Module 404 // Actually try to use the Module
402 if(i->getModuleOwner() != NULL) 405 if(i->getModuleOwner() != NULL)
403 typeName = i->getModuleOwner()->getPixmapName(i); 406 typeName = i->getModuleOwner()->getPixmapName(i);
404 407
405 item->setPixmap(1, (Resource::loadPixmap(typeName))); 408 item->setPixmap(1, (Resource::loadPixmap(typeName)));
406 item->setText(2, i->getHardwareName()); 409 item->setText(2, i->getHardwareName());
407 item->setText(3, (i->getStatus()) ? i->getIp() : QString("")); 410 item->setText(3, (i->getStatus()) ? i->getIp() : QString(""));
408} 411}
409 412
410void MainWindowImp::newProfileChanged(const QString& newText){ 413void MainWindowImp::newProfileChanged(const QString& newText){
411 if(newText.length() > 0) 414 if(newText.length() > 0)
412 newProfileButton->setEnabled(true); 415 newProfileButton->setEnabled(true);
413 else 416 else
414 newProfileButton->setEnabled(false); 417 newProfileButton->setEnabled(false);
415} 418}
416 419
417/** 420/**
418 * Adds a new profile to the list of profiles. 421 * Adds a new profile to the list of profiles.
419 * Don't add profiles that already exists. 422 * Don't add profiles that already exists.
420 * Appends to the list and QStringList 423 * Appends to the list and QStringList
421 */ 424 */
422void MainWindowImp::addProfile(){ 425void MainWindowImp::addProfile(){
423 QString newProfileName = newProfile->text(); 426 QString newProfileName = newProfile->text();
424 if(profiles.grep(newProfileName).count() > 0){ 427 if(profiles.grep(newProfileName).count() > 0){
425 QMessageBox::information(this, "Can't Add","Profile already exists.", "Ok"); 428 QMessageBox::information(this, "Can't Add","Profile already exists.", "Ok");
426 return; 429 return;
427 } 430 }
428 profiles.append(newProfileName); 431 profiles.append(newProfileName);
429 profilesList->insertItem(newProfileName); 432 profilesList->insertItem(newProfileName);
430} 433}
431 434
432/** 435/**
433 * Removes the currently selected profile in the combo. 436 * Removes the currently selected profile in the combo.
434 * Doesn't delete if there are less then 2 profiles. 437 * Doesn't delete if there are less then 2 profiles.
435 */ 438 */
436void MainWindowImp::removeProfile(){ 439void MainWindowImp::removeProfile(){
437 if(profilesList->count() <= 1){ 440 if(profilesList->count() <= 1){
438 QMessageBox::information(this, "Can't remove anything.","Need One Profile.", "Ok"); 441 QMessageBox::information(this, "Can't remove anything.","Need One Profile.", "Ok");
439 return; 442 return;
440 } 443 }
441 QString profileToRemove = profilesList->currentText(); 444 QString profileToRemove = profilesList->currentText();
442 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){ 445 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){
443 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), "")); 446 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), ""));
444 profilesList->clear(); 447 profilesList->clear();
445 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) 448 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it)
446 profilesList->insertItem((*it)); 449 profilesList->insertItem((*it));
447 } 450 }
448 451
449} 452}
450 453
451/** 454/**
452 * A new profile has been selected, change. 455 * A new profile has been selected, change.
453 * @param newProfile the new profile. 456 * @param newProfile the new profile.
454 */ 457 */
455void MainWindowImp::changeProfile(){ 458void MainWindowImp::changeProfile(){
456 currentProfileLabel->setText(profilesList->text(profilesList->currentItem())); 459 currentProfileLabel->setText(profilesList->text(profilesList->currentItem()));
457} 460}
458 461
459// mainwindowimp.cpp 462// mainwindowimp.cpp
460 463
diff --git a/noncore/settings/networksettings/wlan/wlanmodule.cpp b/noncore/settings/networksettings/wlan/wlanmodule.cpp
index 98d2eb6..f0394b4 100644
--- a/noncore/settings/networksettings/wlan/wlanmodule.cpp
+++ b/noncore/settings/networksettings/wlan/wlanmodule.cpp
@@ -1,84 +1,86 @@
1#include "wlanmodule.h" 1#include "wlanmodule.h"
2#include <qpe/config.h> 2#include <qpe/config.h>
3#include "wlanimp.h" 3#include "wlanimp.h"
4 4
5/** 5/**
6 * Constructor, find all of the possible interfaces 6 * Constructor, find all of the possible interfaces
7 */ 7 */
8WLANModule::WLANModule() : Module() { 8WLANModule::WLANModule() : Module() {
9 // get output from iwconfig 9 // get output from iwconfig
10} 10}
11 11
12/** 12/**
13 * get the icon name for this device. 13 * get the icon name for this device.
14 * @param Interface* can be used in determining the icon. 14 * @param Interface* can be used in determining the icon.
15 * @return QString the icon name (minus .png, .gif etc) 15 * @return QString the icon name (minus .png, .gif etc)
16 */ 16 */
17QString WLANModule::getPixmapName(Interface* ){ 17QString WLANModule::getPixmapName(Interface* ){
18 return "wlan"; 18 return "wlan";
19} 19}
20 20
21/** 21/**
22 * Check to see if the interface i is owned by this module. 22 * Check to see if the interface i is owned by this module.
23 * @param Interface* interface to check against 23 * @param Interface* interface to check against
24 * @return bool true if i is owned by this module, false otherwise. 24 * @return bool true if i is owned by this module, false otherwise.
25 */ 25 */
26bool WLANModule::isOwner(Interface *i){ 26bool WLANModule::isOwner(Interface *i){
27 if(i->getInterfaceName() == "eth0" || i->getInterfaceName() == "wlan0") 27 if(i->getInterfaceName() == "eth0" || i->getInterfaceName() == "wlan0"){
28 i->setHardwareName(QString("802.11b (%1)").arg(i->getInterfaceName()));
28 return true; 29 return true;
30 }
29 return false; 31 return false;
30} 32}
31 33
32/** 34/**
33 * Create, set tabWiget and return the WLANConfigure Module 35 * Create, set tabWiget and return the WLANConfigure Module
34 * @param tabWidget a pointer to the tab widget that this configure has. 36 * @param tabWidget a pointer to the tab widget that this configure has.
35 * @return QWidget* pointer to the tab widget in this modules configure. 37 * @return QWidget* pointer to the tab widget in this modules configure.
36 */ 38 */
37QWidget *WLANModule::configure(QTabWidget **tabWidget){ 39QWidget *WLANModule::configure(QTabWidget **tabWidget){
38 Config *cfg = new Config("wireless"); 40 Config *cfg = new Config("wireless");
39 WLANImp *wlanconfig = new WLANImp(*cfg); 41 WLANImp *wlanconfig = new WLANImp(*cfg);
40 (*tabWidget) = wlanconfig->tabWidget; 42 (*tabWidget) = wlanconfig->tabWidget;
41 return wlanconfig; 43 return wlanconfig;
42} 44}
43 45
44/** 46/**
45 * Create, set tabWiget and return the Information Module 47 * Create, set tabWiget and return the Information Module
46 * @param tabWidget a pointer to the tab widget that this information has. 48 * @param tabWidget a pointer to the tab widget that this information has.
47 * @return QWidget* pointer to the tab widget in this modules info. 49 * @return QWidget* pointer to the tab widget in this modules info.
48 */ 50 */
49QWidget *WLANModule::information(QTabWidget **tabWidget){ 51QWidget *WLANModule::information(QTabWidget **tabWidget){
50 return NULL; 52 return NULL;
51} 53}
52 54
53/** 55/**
54 * Get all active (up or down) interfaces 56 * Get all active (up or down) interfaces
55 * @return QList<Interface> A list of interfaces that exsist that havn't 57 * @return QList<Interface> A list of interfaces that exsist that havn't
56 * been called by isOwner() 58 * been called by isOwner()
57 */ 59 */
58QList<Interface> WLANModule::getInterfaces(){ 60QList<Interface> WLANModule::getInterfaces(){
59 return list; 61 return list;
60} 62}
61 63
62/** 64/**
63 * Attempt to add a new interface as defined by name 65 * Attempt to add a new interface as defined by name
64 * @param name the name of the type of interface that should be created given 66 * @param name the name of the type of interface that should be created given
65 * by possibleNewInterfaces(); 67 * by possibleNewInterfaces();
66 * @return Interface* NULL if it was unable to be created. 68 * @return Interface* NULL if it was unable to be created.
67 */ 69 */
68Interface *WLANModule::addNewInterface(QString ){ 70Interface *WLANModule::addNewInterface(QString ){
69 // We can't add a 802.11 interface, either the hardware will be there 71 // We can't add a 802.11 interface, either the hardware will be there
70 // or it wont. 72 // or it wont.
71 return NULL; 73 return NULL;
72} 74}
73 75
74/** 76/**
75 * Attempts to remove the interface, doesn't delete i 77 * Attempts to remove the interface, doesn't delete i
76 * @return bool true if successfull, false otherwise. 78 * @return bool true if successfull, false otherwise.
77 */ 79 */
78bool WLANModule::remove(Interface*){ 80bool WLANModule::remove(Interface*){
79 // Can't remove a hardware device, you can stop it though. 81 // Can't remove a hardware device, you can stop it though.
80 return false; 82 return false;
81} 83}
82 84
83// wlanmodule.cpp 85// wlanmodule.cpp
84 86