Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

interfacesetupimp.cpp

Go to the documentation of this file.
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 <opie2/oprocess.h>
00013 
00014 #ifdef QWS
00015 #include <opie2/owait.h>
00016 #include <opie2/odebug.h>
00017 #include <qpe/global.h>
00018 #include <qapplication.h>
00019 #endif
00020 
00021 #define DNSSCRIPT "changedns"
00022 
00026 using namespace Opie::Ui;
00027 using namespace Opie::Core;
00028 InterfaceSetupImp::InterfaceSetupImp(QWidget* parent, const char* name, Interface *i, Interfaces *j, WFlags fl) : InterfaceSetup(parent, name, fl), interfaces(j), interface(i), delInterfaces(false){
00029   if (j == 0) {
00030     delInterfaces = true;
00031     interfaces = new Interfaces;
00032   }
00033 }
00034 
00038 InterfaceSetupImp::~InterfaceSetupImp(){
00039   if(delInterfaces) {
00040     delete interfaces;
00041   }
00042 }
00043 
00047 bool InterfaceSetupImp::saveChanges(){
00048   bool error;
00049   QString iface = interfaces->getInterfaceName(error);
00050   odebug << "InterfaceSetupImp::saveChanges saves interface " << iface.latin1() << "" << oendl;
00051   if(!saveSettings())
00052     return false;
00053 
00054   interfaces->write();
00055 
00056   if (interface->getStatus()) {
00057     QString ifup;
00058     ifup += "ifdown ";
00059     ifup += iface;
00060     ifup += "; ifup ";
00061     ifup += iface;
00062     ifup += ";";
00063 
00064     OProcess restart;
00065     restart << "sh";
00066     restart << "-c";
00067     restart << ifup;
00068 
00069     OWait *owait = new OWait();
00070     Global::statusMessage( tr( "Restarting interface" ) );
00071 
00072     owait->show();
00073     qApp->processEvents();
00074 
00075     if (!restart.start(OProcess::Block, OProcess::NoCommunication) ) {
00076       owarn << "unstable to spawn ifdown/ifup" << oendl;
00077     }
00078 
00079     owait->hide();
00080     delete owait;
00081 
00082     interface->refresh();
00083   }
00084   return true;
00085 }
00086 
00091 bool InterfaceSetupImp::saveSettings(){
00092   // eh can't really do anything about it other then return. :-D
00093   if(!interfaces->isInterfaceSet())
00094     return true;
00095 
00096   bool error = false;
00097   // Loopback case
00098   if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){
00099     interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
00100     return true;
00101   }
00102 
00103   if(!dhcpCheckBox->isChecked() && (ipAddressEdit->text().isEmpty() || subnetMaskEdit->text().isEmpty())){
00104    QMessageBox::information(this, "Not Saved.", "Please fill in the IP address and\n subnet entries.", QMessageBox::Ok);
00105    return false;
00106   }
00107   // DHCP
00108   if(dhcpCheckBox->isChecked()) {
00109     interfaces->setInterfaceMethod(INTERFACES_METHOD_DHCP);
00110     interfaces->removeInterfaceOption("address");
00111     interfaces->removeInterfaceOption("netmask");
00112     interfaces->removeInterfaceOption("gateway");
00113     interfaces->removeInterfaceOption("up "DNSSCRIPT" -a ");
00114     interfaces->removeInterfaceOption("down "DNSSCRIPT" -r ");
00115   } else{
00116     interfaces->setInterfaceMethod("static");
00117     interfaces->setInterfaceOption("address", ipAddressEdit->text());
00118     interfaces->setInterfaceOption("netmask", subnetMaskEdit->text());
00119     interfaces->setInterfaceOption("gateway", gatewayEdit->text());
00120     if(!firstDNSLineEdit->text().isEmpty() || !secondDNSLineEdit->text().isEmpty()){
00121       QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text();
00122       interfaces->setInterfaceOption("up "DNSSCRIPT" -a ", dns);
00123       interfaces->setInterfaceOption("down "DNSSCRIPT" -r ", dns);
00124     }else{
00125         interfaces->removeInterfaceOption("up "DNSSCRIPT" -a ");
00126         interfaces->removeInterfaceOption("down "DNSSCRIPT" -r");
00127     }
00128   }
00129 
00130   // IP Information
00131   interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
00132   return true;
00133 }
00134 
00139 void InterfaceSetupImp::setProfile(const QString &profile){
00140    /*
00141   bool error = false;
00142   if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){
00143     staticGroupBox->hide();
00144     dhcpCheckBox->hide();
00145     leaseTime->hide();
00146     leaseHoursLabel->hide();
00147   }
00148   */
00149 
00150   QString newInterfaceName = interface->getInterfaceName();
00151   if(profile.length() > 0)
00152     newInterfaceName += "_" + profile;
00153   // See if we have to make a interface.
00154   if(!interfaces->setInterface(newInterfaceName)){
00155     // Add making for this new interface if need too
00156     if(profile != ""){
00157       interfaces->copyInterface(interface->getInterfaceName(), newInterfaceName);
00158       if(!interfaces->setMapping(interface->getInterfaceName())){
00159         interfaces->addMapping(interface->getInterfaceName());
00160         if(!interfaces->setMapping(interface->getInterfaceName())){
00161       odebug << "InterfaceSetupImp: Added Mapping, but still can't setInterface." << oendl;
00162           return;
00163     }
00164       }
00165       interfaces->setMap("map", newInterfaceName);
00166       interfaces->setScript("getprofile.sh");
00167     }
00168     else{
00169       interfaces->addInterface(newInterfaceName, INTERFACES_FAMILY_INET, INTERFACES_METHOD_DHCP);
00170       if(!interfaces->setInterface(newInterfaceName)){
00171         odebug << "InterfaceSetupImp: Added interface, but still can't setInterface." << oendl;
00172         return;
00173       }
00174     }
00175   }
00176 
00177   // We must have a valid interface to get this far so read some settings.
00178 
00179   // DHCP
00180   bool error = false;
00181   if(interfaces->getInterfaceMethod(error) == INTERFACES_METHOD_DHCP)
00182     dhcpCheckBox->setChecked(true);
00183   else
00184     dhcpCheckBox->setChecked(false);
00185 
00186   // IP Information
00187   autoStart->setChecked(interfaces->isAuto(interface->getInterfaceName()));
00188   QString dns = interfaces->getInterfaceOption("up "DNSSCRIPT" -a", error);
00189   odebug << "dns >" << dns.latin1() << "<" << oendl;
00190   if(dns.contains(" ")){
00191     firstDNSLineEdit->setText(dns.mid(0, dns.find(" ")));
00192     secondDNSLineEdit->setText(dns.mid(dns.find(" ")+1, dns.length()));
00193   }else firstDNSLineEdit->setText(dns);
00194 
00195   ipAddressEdit->setText(interfaces->getInterfaceOption("address", error));
00196   subnetMaskEdit->setText(interfaces->getInterfaceOption("netmask", error));
00197   if (subnetMaskEdit->text().isEmpty())
00198       subnetMaskEdit->setText( "255.255.255.0" );
00199   gatewayEdit->setText(interfaces->getInterfaceOption("gateway", error));
00200 
00201 
00202 
00203   owarn << "InterfaceSetupImp::setProfile(" << profile.latin1() << ")\n" << oendl;
00204   owarn << "InterfaceSetupImp::setProfile: iface is " << interfaces->getInterfaceName(error).latin1() << "\n" << oendl;
00205 
00206 }
00207 
00208 // interfacesetup.cpp
00209 

Generated on Sat Nov 5 16:17:49 2005 for OPIE by  doxygen 1.4.2