summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp
Unidiff
Diffstat (limited to 'noncore/settings/networksettings/interfaces/interfacesetupimp.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/networksettings/interfaces/interfacesetupimp.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp b/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp
new file mode 100644
index 0000000..e717d6f
--- a/dev/null
+++ b/noncore/settings/networksettings/interfaces/interfacesetupimp.cpp
@@ -0,0 +1,148 @@
1#include "interfacesetupimp.h"
2#include "interface.h"
3#include "interfaces.h"
4
5#include <qdialog.h>
6#include <qcombobox.h>
7#include <qcheckbox.h>
8#include <qlineedit.h>
9#include <qspinbox.h>
10#include <qgroupbox.h>
11#include <qlabel.h>
12
13#include <qmessagebox.h>
14
15#include <assert.h>
16
17#define DNSSCRIPT "interfacednsscript"
18
19/**
20 * Constuctor. Set up the connection and load the first profile.
21 */
22InterfaceSetupImp::InterfaceSetupImp(QWidget* parent, const char* name, Interface *i, WFlags fl) : InterfaceSetup(parent, name, fl){
23 assert(parent);
24 assert(i);
25 interface = i;
26 interfaces = new Interfaces();
27 bool error = false;
28 if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){
29 staticGroupBox->hide();
30 dhcpCheckBox->hide();
31 leaseTime->hide();
32 leaseHoursLabel->hide();
33 }
34}
35
36/**
37 * Save the current settings, then write out the interfaces file and close.
38 */
39void InterfaceSetupImp::saveChanges(){
40 if(!saveSettings())
41 return;
42 interfaces->write();
43}
44
45/**
46 * Save the settings for the current Interface.
47 * @return bool true if successfull, false otherwise
48 */
49bool InterfaceSetupImp::saveSettings(){
50 // eh can't really do anything about it other then return. :-D
51 if(!interfaces->isInterfaceSet())
52 return true;
53
54 bool error = false;
55 // Loopback case
56 if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){
57 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
58 return true;
59 }
60
61 if(!dhcpCheckBox->isChecked() && (ipAddressEdit->text().isEmpty() || subnetMaskEdit->text().isEmpty() || firstDNSLineEdit->text().isEmpty())){
62 QMessageBox::information(this, "Empy Fields.", "Please fill in address, subnet,\n gateway and the first dns entries.", "Ok");
63 return false;
64 }
65 interfaces->removeAllInterfaceOptions();
66
67 // DHCP
68 if(dhcpCheckBox->isChecked()){
69 interfaces->setInterfaceMethod(INTERFACES_METHOD_DHCP);
70 interfaces->setInterfaceOption("leasehours", QString("%1").arg(leaseTime->value()));
71 interfaces->setInterfaceOption("leasetime", QString("%1").arg(leaseTime->value()*60*60));
72 }
73 else{
74 interfaces->setInterfaceMethod("static");
75 interfaces->setInterfaceOption("address", ipAddressEdit->text());
76 interfaces->setInterfaceOption("netmask", subnetMaskEdit->text());
77 interfaces->setInterfaceOption("gateway", gatewayEdit->text());
78 QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text();
79 interfaces->setInterfaceOption("up "DNSSCRIPT" add ", dns);
80 interfaces->setInterfaceOption("down "DNSSCRIPT" remove ", dns);
81 }
82
83 // IP Information
84 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
85 return true;
86}
87
88/**
89 * The Profile has changed.
90 * @profile the new profile.
91 */
92void InterfaceSetupImp::setProfile(const QString &profile){
93 QString newInterfaceName = interface->getInterfaceName();
94 if(profile.length() > 0)
95 newInterfaceName += "_" + profile;
96 // See if we have to make a interface.
97 if(!interfaces->setInterface(newInterfaceName)){
98 // Add making for this new interface if need too
99 if(profile != ""){
100 interfaces->copyInterface(interface->getInterfaceName(), newInterfaceName);
101 if(!interfaces->setMapping(interface->getInterfaceName())){
102 interfaces->addMapping(interface->getInterfaceName());
103 if(!interfaces->setMapping(interface->getInterfaceName())){
104 qDebug("InterfaceSetupImp: Added Mapping, but still can't set.");
105 return;
106 }
107 }
108 interfaces->setMap("map", newInterfaceName);
109 interfaces->setScript("getprofile.sh");
110 }
111 else{
112 interfaces->addInterface(newInterfaceName, INTERFACES_FAMILY_INET, INTERFACES_METHOD_DHCP);
113 if(!interfaces->setInterface(newInterfaceName)){
114 qDebug("InterfaceSetupImp: Added interface, but still can't set.");
115 return;
116 }
117 }
118 }
119
120 // We must have a valid interface to get this far so read some settings.
121
122 // DHCP
123 bool error = false;
124 if(interfaces->getInterfaceMethod(error) == INTERFACES_METHOD_DHCP)
125 dhcpCheckBox->setChecked(true);
126 else
127 dhcpCheckBox->setChecked(false);
128 leaseTime->setValue(interfaces->getInterfaceOption("leasehours", error).toInt());
129 if(error)
130 leaseTime->setValue(interfaces->getInterfaceOption("leasetime", error).toInt()/60/60);
131 if(error)
132 leaseTime->setValue(24);
133
134 // IP Information
135 autoStart->setChecked(interfaces->isAuto(interface->getInterfaceName()));
136 QString dns = interfaces->getInterfaceOption("up interfacednsscript add", error);
137 if(dns.contains(" ")){
138 firstDNSLineEdit->setText(dns.mid(0, dns.find(" ")));
139 secondDNSLineEdit->setText(dns.mid(dns.find(" ")+1, dns.length()));
140 }
141 ipAddressEdit->setText(interfaces->getInterfaceOption("address", error));
142 subnetMaskEdit->setText(interfaces->getInterfaceOption("netmask", error));
143 gatewayEdit->setText(interfaces->getInterfaceOption("gateway", error));
144}
145
146
147// interfacesetup.cpp
148