diff --git a/daemon.py b/daemon.py index 3cae710..9a607d2 100644 --- a/daemon.py +++ b/daemon.py @@ -39,6 +39,7 @@ import sys import time import getopt import ConfigParser + # DBUS import gobject import dbus @@ -665,6 +666,11 @@ class ConnectionWizard(dbus.service.Object): iface = self.wifi.DetectWirelessInterface() print 'automatically detected wireless interface', iface return str(iface) + + @dbus.service.method('org.wicd.daemon.wireless') + def IsWirelessUp(self): + """ Returns a boolean specifying if wireless is up or down. """ + return self.wifi.IsUp() @dbus.service.method('org.wicd.daemon.wireless') def GetPrintableSignalStrength(self, iwconfig=None): @@ -714,6 +720,18 @@ class ConnectionWizard(dbus.service.Object): return x print 'returning -1, current network not found' return -1 + + @dbus.service.method('org.wicd.daemon.wireless') + def EnableWirelessInterface(self): + """ Calls a method to enable the wireless interface. """ + result = self.wifi.EnableInterface() + return result + + @dbus.service.method('org.wicd.daemon.wireless') + def DisableWirelessInterface(self): + """ Calls a method to disable the wireless interface. """ + result = self.wifi.DisableInterface() + return result @dbus.service.method('org.wicd.daemon.wireless') def ConnectWireless(self, id): @@ -863,6 +881,23 @@ class ConnectionWizard(dbus.service.Object): self.wired.CheckPluggedIn()) else: return self.__printReturn("returning plugged in", None) + + @dbus.service.method('org.wicd.daemon.wired') + def IsWiredUp(self): + """ Returns a boolean specifying if wired iface is up or down. """ + return self.wired.IsUp() + + @dbus.service.method('org.wicd.daemon.wired') + def EnableWiredInterface(self): + """ Calls a method to enable the wired interface. """ + result = self.wired.EnableInterface() + return result + + @dbus.service.method('org.wicd.daemon.wired') + def DisableWiredInterface(self): + """ Calls a method to disable the wired interface. """ + result = self.wired.DisableInterface() + return result @dbus.service.method('org.wicd.daemon.wired') def ConnectWired(self): @@ -1453,7 +1488,6 @@ Arguments: \t-h\t--help\t\tPrint this help. """ - def daemonize(): """ Disconnect from the controlling terminal. @@ -1489,7 +1523,6 @@ def daemonize(): print >> sys.stderr, "Fork #2 failed: %d (%s)" % (e.errno, e.strerror) sys.exit(1) - def main(argv): """ The main daemon program. diff --git a/data/wicd.glade b/data/wicd.glade index 81370cb..5f4cf8d 100644 --- a/data/wicd.glade +++ b/data/wicd.glade @@ -211,8 +211,77 @@ True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-add + 1 + + + + + + + True + Enable/Disable Interfaces + True + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + Enable Wired Interface + True + + + + True + gtk-yes + + + + + + + True + Enable Wireless Interface + True + + + + True + gtk-yes + + + + + + + True + Disable Wired Interface + True + + + + True + gtk-stop + + + + + + + True + Disable Wireless Interface + True + + + + True + gtk-stop + + + + diff --git a/gui.py b/gui.py index ff34cf3..ea2945c 100644 --- a/gui.py +++ b/gui.py @@ -1083,9 +1083,8 @@ class WiredProfileChooser: instruct_label.set_alignment(0, 0) stoppopcheckbox.set_active(False) - # Remove widgets that were added to the normal - # WiredNetworkEntry so that they can be added to - # the pop-up wizard. + # Remove widgets that were added to the normal WiredNetworkEntry + # so that they can be added to the pop-up wizard. wired_net_entry.vboxTop.remove(wired_net_entry.hbox_temp) wired_net_entry.vboxTop.remove(wired_net_entry.profile_help) @@ -1133,7 +1132,11 @@ class appGui: "connect_clicked" : self.connect_hidden, "preferences_clicked" : self.settings_dialog, "about_clicked" : self.about_dialog, - "create_adhoc_network_button_button" : self.create_adhoc_network} + "create_adhoc_network_button_button" : self.create_adhoc_network, + "on_iface_menu_enable_wireless" : self.on_enable_wireless, + "on_iface_menu_disable_wireless" : self.on_disable_wireless, + "on_iface_menu_enable_wired" : self.on_enable_wired, + "on_iface_menu_disable_wired" : self.on_disable_wired,} self.wTree.signal_autoconnect(dic) # Set some strings in the GUI - they may be translated @@ -1157,7 +1160,16 @@ class appGui: self.is_visible = True self.window.connect('delete_event', self.exit) - + + if not wireless.IsWirelessUp(): + self.wTree.get_widget("iface_menu_disable_wireless").hide() + else: + self.wTree.get_widget("iface_menu_enable_wireless").hide() + if not wired.IsWiredUp(): + self.wTree.get_widget("iface_menu_disable_wired").hide() + else: + self.wTree.get_widget("iface_menu_enable_wired").hide() + size = config.ReadWindowSize() width = size[0] height = size[1] @@ -1381,6 +1393,50 @@ class appGui: self.refresh_networks(None, True, answer) else: dialog.destroy() + + def on_enable_wireless(self, widget): + """ Called when the Enable Wireless Interface button is clicked. """ + success = wireless.EnableWirelessInterface() + if success: + enable_item = self.wTree.get_widget("iface_menu_enable_wireless") + disable_item = self.wTree.get_widget("iface_menu_disable_wireless") + enable_item.hide() + disable_item.show() + else: + misc.error(self.window, "Failed to enable wireless interface.") + + def on_disable_wireless(self, widget): + """ Called when the Disable Wireless Interface button is clicked. """ + success = wireless.DisableWirelessInterface() + if success: + enable_item = self.wTree.get_widget("iface_menu_enable_wireless") + disable_item = self.wTree.get_widget("iface_menu_disable_wireless") + enable_item.show() + disable_item.hide() + else: + misc.error(self.window, "Failed to disable wireless interface.") + + def on_enable_wired(self, widget): + """ Called when the Enable Wired Interface button is clicked. """ + success = wired.EnableWiredInterface() + if success: + enable_item = self.wTree.get_widget("iface_menu_enable_wired") + disable_item = self.wTree.get_widget("iface_menu_disable_wired") + enable_item.hide() + disable_item.show() + else: + misc.error(self.window, "Failed to enable wired interface.") + + def on_disable_wired(self, widget): + """ Called when the Disable Wired Interface button is clicked. """ + success = wired.DisableWiredInterface() + if success: + enable_item = self.wTree.get_widget("iface_menu_enable_wired") + disable_item = self.wTree.get_widget("iface_menu_disable_wired") + enable_item.show() + disable_item.hide() + else: + misc.error(self.window, "Failed to disable wired interface.") def cancel_connect(self, widget): """ Alerts the daemon to cancel the connection process. """ diff --git a/networking.py b/networking.py index 5f0c30d..cc9ca2b 100644 --- a/networking.py +++ b/networking.py @@ -285,6 +285,10 @@ class Wireless(Controller): def GetIwconfig(self): """ Get the out of iwconfig. """ return self.wiface.GetIwconfig() + + def IsUp(self): + """ Calls the IsUp method for the wireless interface. """ + return self.wiface.IsUp() def CreateAdHocNetwork(self, essid, channel, ip, enctype, key, enc_used, ics): @@ -367,13 +371,12 @@ class Wireless(Controller): wiface.SetAddress('0.0.0.0') wiface.Down() wiface.Up() + + def EnableInterface(self): + return self.wiface.Up() - def SetDriver(self): - self.driver = self.GetDriverName() - - def GetDriverName(self): - """ Gets the driver associated with the wireless interface. """ - return self.wiface.GetDriverName() + def DisableInterface(self): + return self.wiface.Down() def SetWPADriver(self, driver): self.wiface.SetWpaDriver(driver) @@ -632,18 +635,9 @@ class Wired(Controller): liface.Down() liface.Up() - def SetDriver(self): - self.driver = self.GetDriverName() - - def GetDriverName(self): - """ Get the driver associated with the wired interface. """ - return self.liface.GetDriverName() - - def LoadDriver(self): - return self.liface.LoadDriver(self.driver) - - def UnloadDriver(self): - return self.liface.UnloadDriver(self.driver) + def IsUp(self): + """ Calls the IsUp method for the wired interface. """ + return self.liface.IsUp() def EnableInterface(self): return self.liface.Up() diff --git a/wnettools.py b/wnettools.py index f8fd95b..5c7c2fd 100644 --- a/wnettools.py +++ b/wnettools.py @@ -392,6 +392,20 @@ class Interface(object): #if self.verbose: print cmd output = misc.Run(cmd) return misc.RunRegex(ip_pattern, output) + + def IsUp(self): + """ Determines if the interface is up. """ + cmd = "ifconfig " + self.iface + output = misc.Run(cmd) + lines = output.split('\n') + if len(lines) < 5: + return False + + for line in lines[1:4]: + if line.strip().startswith('UP'): + return True + + return False class WiredInterface(Interface): @@ -451,20 +465,6 @@ class WiredInterface(Interface): return True else: return False - - def IsUp(self): - """ Determines if the interface is up. """ - cmd = "ifconfig " + self.iface - output = misc.Run(cmd) - lines = output.split('\n') - if len(lines) < 5: - return False - - for line in lines[1:4]: - if line.strip().startswith('UP'): - return True - - return False class WirelessInterface(Interface):