interfacesetupimp.cpp
00001 #include "interfacesetupimp.h"
00002 #include "interface.h"
00003
00004 #include <qcheckbox.h>
00005 #include <qlineedit.h>
00006 #include <qspinbox.h>
00007 #include <qgroupbox.h>
00008 #include <qlabel.h>
00009
00010 #include <qmessagebox.h>
00011
00012 #include <opie/oprocess.h>
00013
00014 #ifdef QWS
00015 #include <opie/owait.h>
00016 #include <qpe/global.h>
00017 #include <qapplication.h>
00018 #endif
00019
00020 #define DNSSCRIPT "changedns"
00021
00025 InterfaceSetupImp::InterfaceSetupImp(QWidget* parent, const char* name, Interface *i, Interfaces *j, WFlags fl) : InterfaceSetup(parent, name, fl), interface(i), interfaces(j), delInterfaces(false){
00026 if (j == 0) {
00027 delInterfaces = true;
00028 interfaces = new Interfaces;
00029 }
00030 }
00031
00035 InterfaceSetupImp::~InterfaceSetupImp(){
00036 if(delInterfaces) {
00037 delete interfaces;
00038 }
00039 }
00040
00044 bool InterfaceSetupImp::saveChanges(){
00045 bool error;
00046 QString iface = interfaces->getInterfaceName(error);
00047 qDebug("InterfaceSetupImp::saveChanges saves interface %s", iface.latin1() );
00048 if(!saveSettings())
00049 return false;
00050
00051 interfaces->write();
00052
00053 if (interface->getStatus()) {
00054 QString ifup;
00055 ifup += "ifdown ";
00056 ifup += iface;
00057 ifup += "; ifup ";
00058 ifup += iface;
00059 ifup += ";";
00060
00061 OProcess restart;
00062 restart << "sh";
00063 restart << "-c";
00064 restart << ifup;
00065
00066 OWait *owait = new OWait();
00067 Global::statusMessage( tr( "Restarting interface" ) );
00068
00069 owait->show();
00070 qApp->processEvents();
00071
00072 if (!restart.start(OProcess::Block, OProcess::NoCommunication) ) {
00073 qWarning("unstable to spawn ifdown/ifup");
00074 }
00075
00076 owait->hide();
00077 delete owait;
00078
00079 interface->refresh();
00080 }
00081 return true;
00082 }
00083
00088 bool InterfaceSetupImp::saveSettings(){
00089
00090 if(!interfaces->isInterfaceSet())
00091 return true;
00092
00093 bool error = false;
00094
00095 if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){
00096 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
00097 return true;
00098 }
00099
00100 if(!dhcpCheckBox->isChecked() && (ipAddressEdit->text().isEmpty() || subnetMaskEdit->text().isEmpty())){
00101 QMessageBox::information(this, "Not Saved.", "Please fill in the IP address and\n subnet entries.", QMessageBox::Ok);
00102 return false;
00103 }
00104
00105 if(dhcpCheckBox->isChecked()) {
00106 interfaces->setInterfaceMethod(INTERFACES_METHOD_DHCP);
00107 interfaces->removeInterfaceOption("address");
00108 interfaces->removeInterfaceOption("netmask");
00109 interfaces->removeInterfaceOption("gateway");
00110 interfaces->removeInterfaceOption("up "DNSSCRIPT" -a ");
00111 interfaces->removeInterfaceOption("down "DNSSCRIPT" -r ");
00112 } else{
00113 interfaces->setInterfaceMethod("static");
00114 interfaces->setInterfaceOption("address", ipAddressEdit->text());
00115 interfaces->setInterfaceOption("netmask", subnetMaskEdit->text());
00116 interfaces->setInterfaceOption("gateway", gatewayEdit->text());
00117 if(!firstDNSLineEdit->text().isEmpty() || !secondDNSLineEdit->text().isEmpty()){
00118 QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text();
00119 interfaces->setInterfaceOption("up "DNSSCRIPT" -a ", dns);
00120 interfaces->setInterfaceOption("down "DNSSCRIPT" -r ", dns);
00121 }else{
00122 interfaces->removeInterfaceOption("up "DNSSCRIPT" -a ");
00123 interfaces->removeInterfaceOption("down "DNSSCRIPT" -r");
00124 }
00125 }
00126
00127
00128 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
00129 return true;
00130 }
00131
00136 void InterfaceSetupImp::setProfile(const QString &profile){
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147 QString newInterfaceName = interface->getInterfaceName();
00148 if(profile.length() > 0)
00149 newInterfaceName += "_" + profile;
00150
00151 if(!interfaces->setInterface(newInterfaceName)){
00152
00153 if(profile != ""){
00154 interfaces->copyInterface(interface->getInterfaceName(), newInterfaceName);
00155 if(!interfaces->setMapping(interface->getInterfaceName())){
00156 interfaces->addMapping(interface->getInterfaceName());
00157 if(!interfaces->setMapping(interface->getInterfaceName())){
00158 qDebug("InterfaceSetupImp: Added Mapping, but still can't setInterface.");
00159 return;
00160 }
00161 }
00162 interfaces->setMap("map", newInterfaceName);
00163 interfaces->setScript("getprofile.sh");
00164 }
00165 else{
00166 interfaces->addInterface(newInterfaceName, INTERFACES_FAMILY_INET, INTERFACES_METHOD_DHCP);
00167 if(!interfaces->setInterface(newInterfaceName)){
00168 qDebug("InterfaceSetupImp: Added interface, but still can't setInterface.");
00169 return;
00170 }
00171 }
00172 }
00173
00174
00175
00176
00177 bool error = false;
00178 if(interfaces->getInterfaceMethod(error) == INTERFACES_METHOD_DHCP)
00179 dhcpCheckBox->setChecked(true);
00180 else
00181 dhcpCheckBox->setChecked(false);
00182
00183
00184 autoStart->setChecked(interfaces->isAuto(interface->getInterfaceName()));
00185 QString dns = interfaces->getInterfaceOption("up "DNSSCRIPT" -a", error);
00186 qDebug("dns >%s<",dns.latin1());
00187 if(dns.contains(" ")){
00188 firstDNSLineEdit->setText(dns.mid(0, dns.find(" ")));
00189 secondDNSLineEdit->setText(dns.mid(dns.find(" ")+1, dns.length()));
00190 }else firstDNSLineEdit->setText(dns);
00191
00192 ipAddressEdit->setText(interfaces->getInterfaceOption("address", error));
00193 subnetMaskEdit->setText(interfaces->getInterfaceOption("netmask", error));
00194 if (subnetMaskEdit->text().isEmpty())
00195 subnetMaskEdit->setText( "255.255.255.0" );
00196 gatewayEdit->setText(interfaces->getInterfaceOption("gateway", error));
00197
00198
00199
00200 qWarning("InterfaceSetupImp::setProfile(%s)\n", profile.latin1());
00201 qWarning("InterfaceSetupImp::setProfile: iface is %s\n", interfaces->getInterfaceName(error).latin1());
00202
00203 }
00204
00205
00206
This file is part of the documentation for OPIE Version 1.0.