-rw-r--r-- | noncore/settings/networksettings/interfaces/interface.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/noncore/settings/networksettings/interfaces/interface.cpp b/noncore/settings/networksettings/interfaces/interface.cpp index 3af521c..864d9b5 100644 --- a/noncore/settings/networksettings/interfaces/interface.cpp +++ b/noncore/settings/networksettings/interfaces/interface.cpp | |||
@@ -1,256 +1,258 @@ | |||
1 | $Header$ | ||
2 | |||
1 | /** | 3 | /** |
2 | * $Author$ | 4 | * $Author$ |
3 | * $Date$ | 5 | * $Date$ |
4 | * $Name$ | 6 | * $Name$ |
5 | */ | 7 | */ |
6 | 8 | ||
7 | #include "interface.h" | 9 | #include "interface.h" |
8 | #include <qdatetime.h> | 10 | #include <qdatetime.h> |
9 | #include <qfile.h> | 11 | #include <qfile.h> |
10 | #include <qdir.h> | 12 | #include <qdir.h> |
11 | #include <qfileinfo.h> | 13 | #include <qfileinfo.h> |
12 | #include <qtextstream.h> | 14 | #include <qtextstream.h> |
13 | 15 | ||
14 | #define IFCONFIG "/sbin/ifconfig" | 16 | #define IFCONFIG "/sbin/ifconfig" |
15 | #define DHCP_INFO_DIR "/etc/dhcpc" | 17 | #define DHCP_INFO_DIR "/etc/dhcpc" |
16 | 18 | ||
17 | #include <stdio.h> | 19 | #include <stdio.h> |
18 | #include <stdlib.h> | 20 | #include <stdlib.h> |
19 | 21 | ||
20 | Interface::Interface(QObject * parent, const char * name, bool newSatus): QObject(parent, name), hardwareName("Unknown"), moduleOwner(NULL), status(newSatus), attached(false), dhcp(false), macAddress(""), ip("0.0.0.0"), broadcast(""), subnetMask("0.0.0.0"){ | 22 | Interface::Interface(QObject * parent, const char * name, bool newSatus): QObject(parent, name), hardwareName("Unknown"), moduleOwner(NULL), status(newSatus), attached(false), dhcp(false), macAddress(""), ip("0.0.0.0"), broadcast(""), subnetMask("0.0.0.0"){ |
21 | refresh(); | 23 | refresh(); |
22 | } | 24 | } |
23 | 25 | ||
24 | /** | 26 | /** |
25 | * Set status | 27 | * Set status |
26 | * @param newStatus - the new status | 28 | * @param newStatus - the new status |
27 | * emit updateInterface | 29 | * emit updateInterface |
28 | */ | 30 | */ |
29 | void Interface::setStatus(bool newStatus){ | 31 | void Interface::setStatus(bool newStatus){ |
30 | if(status != newStatus){ | 32 | if(status != newStatus){ |
31 | status = newStatus; | 33 | status = newStatus; |
32 | refresh(); | 34 | refresh(); |
33 | } | 35 | } |
34 | }; | 36 | }; |
35 | 37 | ||
36 | /** | 38 | /** |
37 | * Set if attached or not (802.11 card pulled out for example) | 39 | * Set if attached or not (802.11 card pulled out for example) |
38 | * @param isAttached - if attached | 40 | * @param isAttached - if attached |
39 | * emit updateInterface | 41 | * emit updateInterface |
40 | */ | 42 | */ |
41 | void Interface::setAttached(bool isAttached){ | 43 | void Interface::setAttached(bool isAttached){ |
42 | attached = isAttached; | 44 | attached = isAttached; |
43 | emit(updateInterface(this)); | 45 | emit(updateInterface(this)); |
44 | }; | 46 | }; |
45 | 47 | ||
46 | /** | 48 | /** |
47 | * Set Hardware name | 49 | * Set Hardware name |
48 | * @param name - the new name | 50 | * @param name - the new name |
49 | * emit updateInterface | 51 | * emit updateInterface |
50 | */ | 52 | */ |
51 | void Interface::setHardwareName(const QString &name){ | 53 | void Interface::setHardwareName(const QString &name){ |
52 | hardwareName = name; | 54 | hardwareName = name; |
53 | emit(updateInterface(this)); | 55 | emit(updateInterface(this)); |
54 | }; | 56 | }; |
55 | 57 | ||
56 | /** | 58 | /** |
57 | * Set Module owner | 59 | * Set Module owner |
58 | * @param owner - the new owner | 60 | * @param owner - the new owner |
59 | * emit updateInterface | 61 | * emit updateInterface |
60 | */ | 62 | */ |
61 | void Interface::setModuleOwner(Module *owner){ | 63 | void Interface::setModuleOwner(Module *owner){ |
62 | moduleOwner = owner; | 64 | moduleOwner = owner; |
63 | emit(updateInterface(this)); | 65 | emit(updateInterface(this)); |
64 | }; | 66 | }; |
65 | 67 | ||
66 | 68 | ||
67 | /** | 69 | /** |
68 | * Try to start the interface. | 70 | * Try to start the interface. |
69 | */ | 71 | */ |
70 | void Interface::start(){ | 72 | void Interface::start(){ |
71 | // check to see if we are already running. | 73 | // check to see if we are already running. |
72 | if(true == status){ | 74 | if(true == status){ |
73 | emit (updateMessage("Unable to start interface,\n already started")); | 75 | emit (updateMessage("Unable to start interface,\n already started")); |
74 | return; | 76 | return; |
75 | } | 77 | } |
76 | 78 | ||
77 | int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(this->name()).latin1()); | 79 | int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(this->name()).latin1()); |
78 | // See if it was successfull... | 80 | // See if it was successfull... |
79 | if(ret != 0){ | 81 | if(ret != 0){ |
80 | emit (updateMessage("Starting interface failed")); | 82 | emit (updateMessage("Starting interface failed")); |
81 | return; | 83 | return; |
82 | } | 84 | } |
83 | 85 | ||
84 | status = true; | 86 | status = true; |
85 | refresh(); | 87 | refresh(); |
86 | emit (updateMessage("Start successfull")); | 88 | emit (updateMessage("Start successfull")); |
87 | } | 89 | } |
88 | 90 | ||
89 | /** | 91 | /** |
90 | * Try to stop the interface. | 92 | * Try to stop the interface. |
91 | */ | 93 | */ |
92 | void Interface::stop(){ | 94 | void Interface::stop(){ |
93 | // check to see if we are already stopped. | 95 | // check to see if we are already stopped. |
94 | if(false == status){ | 96 | if(false == status){ |
95 | emit (updateMessage("Unable to stop interface,\n already stopped")); | 97 | emit (updateMessage("Unable to stop interface,\n already stopped")); |
96 | return; | 98 | return; |
97 | } | 99 | } |
98 | 100 | ||
99 | int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(this->name()).latin1()); | 101 | int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(this->name()).latin1()); |
100 | if(ret != 0){ | 102 | if(ret != 0){ |
101 | emit (updateMessage("Stopping interface failed")); | 103 | emit (updateMessage("Stopping interface failed")); |
102 | return; | 104 | return; |
103 | } | 105 | } |
104 | 106 | ||
105 | status = false; | 107 | status = false; |
106 | refresh(); | 108 | refresh(); |
107 | emit (updateMessage("Stop successfull")); | 109 | emit (updateMessage("Stop successfull")); |
108 | } | 110 | } |
109 | 111 | ||
110 | /** | 112 | /** |
111 | * Try to restart the interface. | 113 | * Try to restart the interface. |
112 | */ | 114 | */ |
113 | void Interface::restart(){ | 115 | void Interface::restart(){ |
114 | stop(); | 116 | stop(); |
115 | start(); | 117 | start(); |
116 | } | 118 | } |
117 | 119 | ||
118 | /** | 120 | /** |
119 | * Try to refresh the information about the interface. | 121 | * Try to refresh the information about the interface. |
120 | * First call ifconfig, then check the dhcp-info file | 122 | * First call ifconfig, then check the dhcp-info file |
121 | * @return bool true if successfull. | 123 | * @return bool true if successfull. |
122 | */ | 124 | */ |
123 | bool Interface::refresh(){ | 125 | bool Interface::refresh(){ |
124 | // See if we are up. | 126 | // See if we are up. |
125 | if(status == false){ | 127 | if(status == false){ |
126 | macAddress = ""; | 128 | macAddress = ""; |
127 | ip = "0.0.0.0"; | 129 | ip = "0.0.0.0"; |
128 | subnetMask = "0.0.0.0"; | 130 | subnetMask = "0.0.0.0"; |
129 | broadcast = ""; | 131 | broadcast = ""; |
130 | dhcp = false; | 132 | dhcp = false; |
131 | dhcpServerIp = ""; | 133 | dhcpServerIp = ""; |
132 | leaseObtained = ""; | 134 | leaseObtained = ""; |
133 | leaseExpires = ""; | 135 | leaseExpires = ""; |
134 | emit(updateInterface(this)); | 136 | emit(updateInterface(this)); |
135 | return true; | 137 | return true; |
136 | } | 138 | } |
137 | 139 | ||
138 | QString fileName = QString("/tmp/%1_ifconfig_info").arg(this->name()); | 140 | QString fileName = QString("/tmp/%1_ifconfig_info").arg(this->name()); |
139 | int ret = system(QString("%1 %2 > %3").arg(IFCONFIG).arg(this->name()).arg(fileName).latin1()); | 141 | int ret = system(QString("%1 %2 > %3").arg(IFCONFIG).arg(this->name()).arg(fileName).latin1()); |
140 | if(ret != 0){ | 142 | if(ret != 0){ |
141 | qDebug(QString("Interface: Ifconfig return value: %1, is not 0").arg(ret).latin1()); | 143 | qDebug(QString("Interface: Ifconfig return value: %1, is not 0").arg(ret).latin1()); |
142 | return false; | 144 | return false; |
143 | } | 145 | } |
144 | 146 | ||
145 | QFile file(fileName); | 147 | QFile file(fileName); |
146 | if (!file.open(IO_ReadOnly)){ | 148 | if (!file.open(IO_ReadOnly)){ |
147 | qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); | 149 | qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); |
148 | return false; | 150 | return false; |
149 | } | 151 | } |
150 | 152 | ||
151 | // Set to the defaults | 153 | // Set to the defaults |
152 | macAddress = ""; | 154 | macAddress = ""; |
153 | ip = "0.0.0.0"; | 155 | ip = "0.0.0.0"; |
154 | subnetMask = "0.0.0.0"; | 156 | subnetMask = "0.0.0.0"; |
155 | broadcast = ""; | 157 | broadcast = ""; |
156 | 158 | ||
157 | QTextStream stream( &file ); | 159 | QTextStream stream( &file ); |
158 | QString line; | 160 | QString line; |
159 | while ( !stream.eof() ) { | 161 | while ( !stream.eof() ) { |
160 | line = stream.readLine(); | 162 | line = stream.readLine(); |
161 | if(line.contains("HWaddr")){ | 163 | if(line.contains("HWaddr")){ |
162 | int mac = line.find("HWaddr"); | 164 | int mac = line.find("HWaddr"); |
163 | macAddress = line.mid(mac+7, line.length()); | 165 | macAddress = line.mid(mac+7, line.length()); |
164 | } | 166 | } |
165 | if(line.contains("inet addr")){ | 167 | if(line.contains("inet addr")){ |
166 | int ipl = line.find("inet addr"); | 168 | int ipl = line.find("inet addr"); |
167 | int space = line.find(" ", ipl+10); | 169 | int space = line.find(" ", ipl+10); |
168 | ip = line.mid(ipl+10, space-ipl-10); | 170 | ip = line.mid(ipl+10, space-ipl-10); |
169 | } | 171 | } |
170 | if(line.contains("Mask")){ | 172 | if(line.contains("Mask")){ |
171 | int mask = line.find("Mask"); | 173 | int mask = line.find("Mask"); |
172 | subnetMask = line.mid(mask+5, line.length()); | 174 | subnetMask = line.mid(mask+5, line.length()); |
173 | } | 175 | } |
174 | if(line.contains("Bcast")){ | 176 | if(line.contains("Bcast")){ |
175 | int mask = line.find("Bcast"); | 177 | int mask = line.find("Bcast"); |
176 | int space = line.find(" ", mask+6); | 178 | int space = line.find(" ", mask+6); |
177 | broadcast = line.mid(mask+6, space-mask-6); | 179 | broadcast = line.mid(mask+6, space-mask-6); |
178 | } | 180 | } |
179 | } | 181 | } |
180 | file.close(); | 182 | file.close(); |
181 | QFile::remove(fileName); | 183 | QFile::remove(fileName); |
182 | 184 | ||
183 | // DHCP TESTING | 185 | // DHCP TESTING |
184 | // reset DHCP info | 186 | // reset DHCP info |
185 | dhcpServerIp = ""; | 187 | dhcpServerIp = ""; |
186 | leaseObtained = ""; | 188 | leaseObtained = ""; |
187 | leaseExpires = ""; | 189 | leaseExpires = ""; |
188 | dhcp = false; | 190 | dhcp = false; |
189 | 191 | ||
190 | QString dhcpDirectory(DHCP_INFO_DIR); | 192 | QString dhcpDirectory(DHCP_INFO_DIR); |
191 | QDir d(dhcpDirectory); | 193 | QDir d(dhcpDirectory); |
192 | if(!d.exists(dhcpDirectory)) | 194 | if(!d.exists(dhcpDirectory)) |
193 | dhcpDirectory = "/var/run"; | 195 | dhcpDirectory = "/var/run"; |
194 | 196 | ||
195 | // See if we have | 197 | // See if we have |
196 | QString dhcpFile(QString(dhcpDirectory+"/dhcpcd-%1.info").arg(this->name())); | 198 | QString dhcpFile(QString(dhcpDirectory+"/dhcpcd-%1.info").arg(this->name())); |
197 | // If there is no DHCP information then exit now with no errors. | 199 | // If there is no DHCP information then exit now with no errors. |
198 | if(!QFile::exists(dhcpFile)){ | 200 | if(!QFile::exists(dhcpFile)){ |
199 | emit(updateInterface(this)); | 201 | emit(updateInterface(this)); |
200 | return true; | 202 | return true; |
201 | } | 203 | } |
202 | 204 | ||
203 | file.setName(dhcpFile); | 205 | file.setName(dhcpFile); |
204 | if (!file.open(IO_ReadOnly)){ | 206 | if (!file.open(IO_ReadOnly)){ |
205 | qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); | 207 | qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); |
206 | return false; | 208 | return false; |
207 | } | 209 | } |
208 | 210 | ||
209 | // leaseTime and renewalTime and used if pid and deamon exe can be accessed. | 211 | // leaseTime and renewalTime and used if pid and deamon exe can be accessed. |
210 | int leaseTime = 0; | 212 | int leaseTime = 0; |
211 | int renewalTime = 0; | 213 | int renewalTime = 0; |
212 | 214 | ||
213 | stream.setDevice( &file ); | 215 | stream.setDevice( &file ); |
214 | while ( !stream.eof() ) { | 216 | while ( !stream.eof() ) { |
215 | line = stream.readLine(); | 217 | line = stream.readLine(); |
216 | if(line.contains("DHCPSIADDR=")) | 218 | if(line.contains("DHCPSIADDR=")) |
217 | dhcpServerIp = line.mid(11, line.length()); | 219 | dhcpServerIp = line.mid(11, line.length()); |
218 | if(line.contains("LEASETIME=")) | 220 | if(line.contains("LEASETIME=")) |
219 | leaseTime = line.mid(10, line.length()).toInt(); | 221 | leaseTime = line.mid(10, line.length()).toInt(); |
220 | if(line.contains("RENEWALTIME=")) | 222 | if(line.contains("RENEWALTIME=")) |
221 | renewalTime = line.mid(12, line.length()).toInt(); | 223 | renewalTime = line.mid(12, line.length()).toInt(); |
222 | } | 224 | } |
223 | file.close(); | 225 | file.close(); |
224 | //qDebug(QString("Interface: leaseTime: %1").arg(leaseTime).latin1()); | 226 | //qDebug(QString("Interface: leaseTime: %1").arg(leaseTime).latin1()); |
225 | //qDebug(QString("Interface: renewalTime: %1").arg(renewalTime).latin1()); | 227 | //qDebug(QString("Interface: renewalTime: %1").arg(renewalTime).latin1()); |
226 | 228 | ||
227 | // Get the pid of the deamond | 229 | // Get the pid of the deamond |
228 | dhcpFile = (QString(dhcpDirectory+"/dhcpcd-%1.pid").arg(this->name())); | 230 | dhcpFile = (QString(dhcpDirectory+"/dhcpcd-%1.pid").arg(this->name())); |
229 | file.setName(dhcpFile); | 231 | file.setName(dhcpFile); |
230 | if (!file.open(IO_ReadOnly)){ | 232 | if (!file.open(IO_ReadOnly)){ |
231 | qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); | 233 | qDebug(QString("Interface: Can't open file: %1").arg(dhcpFile).latin1()); |
232 | return false; | 234 | return false; |
233 | } | 235 | } |
234 | 236 | ||
235 | int pid = -1; | 237 | int pid = -1; |
236 | stream.setDevice( &file ); | 238 | stream.setDevice( &file ); |
237 | while ( !stream.eof() ) { | 239 | while ( !stream.eof() ) { |
238 | line = stream.readLine(); | 240 | line = stream.readLine(); |
239 | pid = line.toInt(); | 241 | pid = line.toInt(); |
240 | } | 242 | } |
241 | file.close(); | 243 | file.close(); |
242 | 244 | ||
243 | if( pid == -1){ | 245 | if( pid == -1){ |
244 | qDebug("Interface: Could not get pid of dhcpc deamon."); | 246 | qDebug("Interface: Could not get pid of dhcpc deamon."); |
245 | return false; | 247 | return false; |
246 | } | 248 | } |
247 | 249 | ||
248 | // Get the start running time of the deamon | 250 | // Get the start running time of the deamon |
249 | fileName = (QString("/proc/%1/stat").arg(pid)); | 251 | fileName = (QString("/proc/%1/stat").arg(pid)); |
250 | file.setName(fileName); | 252 | file.setName(fileName); |
251 | stream.setDevice( &file ); | 253 | stream.setDevice( &file ); |
252 | if (!file.open(IO_ReadOnly)){ | 254 | if (!file.open(IO_ReadOnly)){ |
253 | qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); | 255 | qDebug(QString("Interface: Can't open file: %1").arg(fileName).latin1()); |
254 | return false; | 256 | return false; |
255 | } | 257 | } |
256 | while ( !stream.eof() ) { | 258 | while ( !stream.eof() ) { |