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,24 +1,31 @@
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}
@@ -61,29 +68,54 @@ void Interface::setHardwareName(const QString &name){
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}
@@ -93,18 +125,22 @@ void Interface::start(){
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}
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
@@ -50,16 +50,17 @@ public:
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;