Networksettings API API Documentation

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   // eh can't really do anything about it other then return. :-D
00090   if(!interfaces->isInterfaceSet())
00091     return true;
00092 
00093   bool error = false;
00094   // Loopback case
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   // DHCP
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   // IP Information
00128   interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
00129   return true;
00130 }
00131 
00136 void InterfaceSetupImp::setProfile(const QString &profile){
00137    /*
00138   bool error = false;
00139   if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){
00140     staticGroupBox->hide();
00141     dhcpCheckBox->hide();
00142     leaseTime->hide();
00143     leaseHoursLabel->hide();
00144   }
00145   */
00146 
00147   QString newInterfaceName = interface->getInterfaceName();
00148   if(profile.length() > 0)
00149     newInterfaceName += "_" + profile;
00150   // See if we have to make a interface.
00151   if(!interfaces->setInterface(newInterfaceName)){
00152     // Add making for this new interface if need too
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   // We must have a valid interface to get this far so read some settings.
00175 
00176   // DHCP
00177   bool error = false;
00178   if(interfaces->getInterfaceMethod(error) == INTERFACES_METHOD_DHCP)
00179     dhcpCheckBox->setChecked(true);
00180   else
00181     dhcpCheckBox->setChecked(false);
00182 
00183   // IP Information
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 // interfacesetup.cpp
00206 
KDE Logo
This file is part of the documentation for OPIE Version 1.0.
Documentation copyright © 1997-2003 the KDE developers. 2003 OPIE developers
Generated on Tue Feb 10 20:26:44 2004 by doxygen 1.3.5 written by Dimitri van Heesch, © 1997-2001