summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings/interfaces/interface.cpp46
-rw-r--r--noncore/settings/networksettings/interfaces/interface.h1
2 files changed, 42 insertions, 5 deletions
diff --git a/noncore/settings/networksettings/interfaces/interface.cpp b/noncore/settings/networksettings/interfaces/interface.cpp
index 46f3e19..44c0264 100644
--- a/noncore/settings/networksettings/interfaces/interface.cpp
+++ b/noncore/settings/networksettings/interfaces/interface.cpp
@@ -1,32 +1,39 @@
1/** 1/**
2 * $Author$ 2 * $Author$
3 * $Date$ 3 * $Date$
4 */ 4 */
5 5
6#include "interface.h" 6#include "interface.h"
7 7
8#include <opie2/odebug.h> 8#include <opie2/odebug.h>
9#include <opie2/oprocess.h>
10#include <opie2/owait.h>
9 11
12#include <qpe/global.h>
13
14#include <qapplication.h>
10#include <qdatetime.h> 15#include <qdatetime.h>
11#include <qfile.h> 16#include <qfile.h>
12#include <qdir.h> 17#include <qdir.h>
13#include <qfileinfo.h> 18#include <qfileinfo.h>
14#include <qtextstream.h> 19#include <qtextstream.h>
15 20
16#define IFCONFIG "/sbin/ifconfig" 21#define IFCONFIG "/sbin/ifconfig"
22#define IF_UP "/sbin/ifup"
23#define IF_DOWN "/sbin/ifdown"
17#define DHCP_INFO_DIR "/etc/dhcpc" 24#define DHCP_INFO_DIR "/etc/dhcpc"
18 25
19#include <stdio.h> 26#include <stdio.h>
20#include <stdlib.h> 27#include <stdlib.h>
21 28
22Interface::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"){ 29Interface::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"){
23 refresh(); 30 refresh();
24} 31}
25 32
26/** 33/**
27 * Set status 34 * Set status
28 * @param newStatus - the new status 35 * @param newStatus - the new status
29 * emit updateInterface 36 * emit updateInterface
30 */ 37 */
31void Interface::setStatus(bool newStatus){ 38void Interface::setStatus(bool newStatus){
32 if(status != newStatus){ 39 if(status != newStatus){
@@ -53,66 +60,95 @@ void Interface::setAttached(bool isAttached){
53void Interface::setHardwareName(const QString &name){ 60void Interface::setHardwareName(const QString &name){
54 hardwareName = name; 61 hardwareName = name;
55 emit(updateInterface(this)); 62 emit(updateInterface(this));
56}; 63};
57 64
58/** 65/**
59 * Set Module owner 66 * Set Module owner
60 * @param owner - the new owner 67 * @param owner - the new owner
61 * emit updateInterface 68 * emit updateInterface
62 */ 69 */
63void Interface::setModuleOwner(Module *owner){ 70void Interface::setModuleOwner(Module *owner){
64 moduleOwner = owner; 71 moduleOwner = owner;
65 emit(updateInterface(this)); 72 emit(updateInterface(this));
66}; 73};
67 74
68 75
76bool Interface::callProcess( const QStringList& names ) {
77 Opie::Ui::OWait *owait = new Opie::Ui::OWait();
78 Global::statusMessage( tr( "Restarting interface" ) );
79
80 owait->show();
81 qApp->processEvents();
82
83 Opie::Core::OProcess restart;
84 restart << names;
85 if ( !restart.start(Opie::Core::OProcess::Block,
86 Opie::Core::OProcess::NoCommunication ) ) {
87 owarn << "unable to spawn command" << names << oendl;
88 return false;
89 }
90 owait->hide();
91 delete owait;
92
93 if ( restart.normalExit() || restart.exitStatus() != 0 )
94 return false;
95
96 return true;
97}
98
69/** 99/**
70 * Try to start the interface. 100 * Try to start the interface.
71 */ 101 */
72void Interface::start(){ 102void Interface::start(){
73 // check to see if we are already running. 103 // check to see if we are already running.
74 if(true == status){ 104 if(true == status){
75 emit (updateMessage("Unable to start interface,\n already started")); 105 emit (updateMessage("Unable to start interface,\n already started"));
76 return; 106 return;
77 } 107 }
78 108
79 int ret = system(QString("%1 %2 up").arg(IFCONFIG).arg(this->name()).latin1()); 109 /* prepare command and call it */
80 // See if it was successful... 110 QStringList lst;
81 if(ret != 0){ 111 lst << IF_UP;
112 lst << name();
113 if ( !callProcess(lst) ) {
82 emit (updateMessage("Starting interface failed")); 114 emit (updateMessage("Starting interface failed"));
83 return; 115 return;
84 } 116 }
85 117
86 status = true; 118 status = true;
87 refresh(); 119 refresh();
88 emit (updateMessage("Start successful")); 120 emit (updateMessage("Start successful"));
89} 121}
90 122
91/** 123/**
92 * Try to stop the interface. 124 * Try to stop the interface.
93 */ 125 */
94void Interface::stop(){ 126void Interface::stop(){
95 // check to see if we are already stopped. 127 // check to see if we are already stopped.
96 if(false == status){ 128 if(false == status){
97 emit (updateMessage("Unable to stop interface,\n already stopped")); 129 emit (updateMessage("Unable to stop interface,\n already stopped"));
98 return; 130 return;
99 } 131 }
100 132
101 int ret = system(QString("%1 %2 down").arg(IFCONFIG).arg(this->name()).latin1()); 133 QStringList lst;
102 if(ret != 0){ 134 lst << IF_DOWN;
135 lst << name();
136
137 /* prepare command and call it */
138 if( !callProcess( lst ) ){
103 emit (updateMessage("Stopping interface failed")); 139 emit (updateMessage("Stopping interface failed"));
104 return; 140 return;
105 } 141 }
106 142
107 status = false; 143 status = false;
108 refresh(); 144 refresh();
109 emit (updateMessage("Stop successful")); 145 emit (updateMessage("Stop successful"));
110} 146}
111 147
112/** 148/**
113 * Try to restart the interface. 149 * Try to restart the interface.
114 */ 150 */
115void Interface::restart(){ 151void Interface::restart(){
116 stop(); 152 stop();
117 start(); 153 start();
118} 154}
diff --git a/noncore/settings/networksettings/interfaces/interface.h b/noncore/settings/networksettings/interfaces/interface.h
index 83ab088..e9ab0c2 100644
--- a/noncore/settings/networksettings/interfaces/interface.h
+++ b/noncore/settings/networksettings/interfaces/interface.h
@@ -42,32 +42,33 @@ public:
42 QString getMacAddress() const { return macAddress; }; 42 QString getMacAddress() const { return macAddress; };
43 QString getIp() const { return ip; }; 43 QString getIp() const { return ip; };
44 QString getSubnetMask() const { return subnetMask; }; 44 QString getSubnetMask() const { return subnetMask; };
45 QString getBroadcast() const { return broadcast; }; 45 QString getBroadcast() const { return broadcast; };
46 bool isDhcp() const { return dhcp; }; 46 bool isDhcp() const { return dhcp; };
47 QString getDhcpServerIp() const { return dhcpServerIp; }; 47 QString getDhcpServerIp() const { return dhcpServerIp; };
48 QString getLeaseObtained() const { return leaseObtained; }; 48 QString getLeaseObtained() const { return leaseObtained; };
49 QString getLeaseExpires() const { return leaseExpires; }; 49 QString getLeaseExpires() const { return leaseExpires; };
50 50
51 public slots: 51 public slots:
52 virtual bool refresh(); 52 virtual bool refresh();
53 virtual void start(); 53 virtual void start();
54 virtual void stop(); 54 virtual void stop();
55 virtual void restart(); 55 virtual void restart();
56 56
57protected: 57protected:
58 bool callProcess( const QStringList& name );
58 // Interface information 59 // Interface information
59 QString hardwareName; 60 QString hardwareName;
60 Module *moduleOwner; 61 Module *moduleOwner;
61 bool status; 62 bool status;
62 bool attached; 63 bool attached;
63 64
64 // Network information 65 // Network information
65 bool dhcp; 66 bool dhcp;
66 QString dhcpServerIp; 67 QString dhcpServerIp;
67 QString leaseObtained; 68 QString leaseObtained;
68 QString leaseExpires; 69 QString leaseExpires;
69 70
70 QString macAddress; 71 QString macAddress;
71 QString ip; 72 QString ip;
72 QString broadcast; 73 QString broadcast;
73 QString subnetMask; 74 QString subnetMask;