1
0
mirror of https://github.com/gryf/wicd.git synced 2025-12-20 04:48:00 +01:00

Added support for putting interfaces up/down through the gui.

This commit is contained in:
imdano
2008-03-04 14:06:04 +00:00
parent 7de302fa1c
commit a2dedaaa03
5 changed files with 192 additions and 40 deletions

View File

@@ -39,6 +39,7 @@ import sys
import time import time
import getopt import getopt
import ConfigParser import ConfigParser
# DBUS # DBUS
import gobject import gobject
import dbus import dbus
@@ -665,6 +666,11 @@ class ConnectionWizard(dbus.service.Object):
iface = self.wifi.DetectWirelessInterface() iface = self.wifi.DetectWirelessInterface()
print 'automatically detected wireless interface', iface print 'automatically detected wireless interface', iface
return str(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') @dbus.service.method('org.wicd.daemon.wireless')
def GetPrintableSignalStrength(self, iwconfig=None): def GetPrintableSignalStrength(self, iwconfig=None):
@@ -714,6 +720,18 @@ class ConnectionWizard(dbus.service.Object):
return x return x
print 'returning -1, current network not found' print 'returning -1, current network not found'
return -1 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') @dbus.service.method('org.wicd.daemon.wireless')
def ConnectWireless(self, id): def ConnectWireless(self, id):
@@ -863,6 +881,23 @@ class ConnectionWizard(dbus.service.Object):
self.wired.CheckPluggedIn()) self.wired.CheckPluggedIn())
else: else:
return self.__printReturn("returning plugged in", None) 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') @dbus.service.method('org.wicd.daemon.wired')
def ConnectWired(self): def ConnectWired(self):
@@ -1453,7 +1488,6 @@ Arguments:
\t-h\t--help\t\tPrint this help. \t-h\t--help\t\tPrint this help.
""" """
def daemonize(): def daemonize():
""" Disconnect from the controlling terminal. """ Disconnect from the controlling terminal.
@@ -1489,7 +1523,6 @@ def daemonize():
print >> sys.stderr, "Fork #2 failed: %d (%s)" % (e.errno, e.strerror) print >> sys.stderr, "Fork #2 failed: %d (%s)" % (e.errno, e.strerror)
sys.exit(1) sys.exit(1)
def main(argv): def main(argv):
""" The main daemon program. """ The main daemon program.

View File

@@ -211,8 +211,77 @@
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="menu-item-image2"> <widget class="GtkImage" id="menu-item-image2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-add</property> <property name="stock">gtk-add</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="iface_menu_button">
<property name="visible">True</property>
<property name="label" translatable="yes">Enable/Disable Interfaces</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="iface_menu">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkImageMenuItem" id="iface_menu_enable_wired">
<property name="visible">True</property>
<property name="label" translatable="yes">Enable Wired Interface</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_iface_menu_enable_wired"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image6">
<property name="visible">True</property>
<property name="stock">gtk-yes</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="iface_menu_enable_wireless">
<property name="visible">True</property>
<property name="label" translatable="yes">Enable Wireless Interface</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_iface_menu_enable_wireless"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image5">
<property name="visible">True</property>
<property name="stock">gtk-yes</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="iface_menu_disable_wired">
<property name="visible">True</property>
<property name="label" translatable="yes">Disable Wired Interface</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_iface_menu_disable_wired"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image7">
<property name="visible">True</property>
<property name="stock">gtk-stop</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="iface_menu_disable_wireless">
<property name="visible">True</property>
<property name="label" translatable="yes">Disable Wireless Interface</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_iface_menu_disable_wireless"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image8">
<property name="visible">True</property>
<property name="stock">gtk-stop</property>
</widget>
</child>
</widget>
</child>
</widget> </widget>
</child> </child>
</widget> </widget>

66
gui.py
View File

@@ -1083,9 +1083,8 @@ class WiredProfileChooser:
instruct_label.set_alignment(0, 0) instruct_label.set_alignment(0, 0)
stoppopcheckbox.set_active(False) stoppopcheckbox.set_active(False)
# Remove widgets that were added to the normal # Remove widgets that were added to the normal WiredNetworkEntry
# WiredNetworkEntry so that they can be added to # so that they can be added to the pop-up wizard.
# the pop-up wizard.
wired_net_entry.vboxTop.remove(wired_net_entry.hbox_temp) wired_net_entry.vboxTop.remove(wired_net_entry.hbox_temp)
wired_net_entry.vboxTop.remove(wired_net_entry.profile_help) wired_net_entry.vboxTop.remove(wired_net_entry.profile_help)
@@ -1133,7 +1132,11 @@ class appGui:
"connect_clicked" : self.connect_hidden, "connect_clicked" : self.connect_hidden,
"preferences_clicked" : self.settings_dialog, "preferences_clicked" : self.settings_dialog,
"about_clicked" : self.about_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) self.wTree.signal_autoconnect(dic)
# Set some strings in the GUI - they may be translated # Set some strings in the GUI - they may be translated
@@ -1157,7 +1160,16 @@ class appGui:
self.is_visible = True self.is_visible = True
self.window.connect('delete_event', self.exit) 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() size = config.ReadWindowSize()
width = size[0] width = size[0]
height = size[1] height = size[1]
@@ -1381,6 +1393,50 @@ class appGui:
self.refresh_networks(None, True, answer) self.refresh_networks(None, True, answer)
else: else:
dialog.destroy() 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): def cancel_connect(self, widget):
""" Alerts the daemon to cancel the connection process. """ """ Alerts the daemon to cancel the connection process. """

View File

@@ -285,6 +285,10 @@ class Wireless(Controller):
def GetIwconfig(self): def GetIwconfig(self):
""" Get the out of iwconfig. """ """ Get the out of iwconfig. """
return self.wiface.GetIwconfig() 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, def CreateAdHocNetwork(self, essid, channel, ip, enctype, key,
enc_used, ics): enc_used, ics):
@@ -367,13 +371,12 @@ class Wireless(Controller):
wiface.SetAddress('0.0.0.0') wiface.SetAddress('0.0.0.0')
wiface.Down() wiface.Down()
wiface.Up() wiface.Up()
def EnableInterface(self):
return self.wiface.Up()
def SetDriver(self): def DisableInterface(self):
self.driver = self.GetDriverName() return self.wiface.Down()
def GetDriverName(self):
""" Gets the driver associated with the wireless interface. """
return self.wiface.GetDriverName()
def SetWPADriver(self, driver): def SetWPADriver(self, driver):
self.wiface.SetWpaDriver(driver) self.wiface.SetWpaDriver(driver)
@@ -632,18 +635,9 @@ class Wired(Controller):
liface.Down() liface.Down()
liface.Up() liface.Up()
def SetDriver(self): def IsUp(self):
self.driver = self.GetDriverName() """ Calls the IsUp method for the wired interface. """
return self.liface.IsUp()
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 EnableInterface(self): def EnableInterface(self):
return self.liface.Up() return self.liface.Up()

View File

@@ -392,6 +392,20 @@ class Interface(object):
#if self.verbose: print cmd #if self.verbose: print cmd
output = misc.Run(cmd) output = misc.Run(cmd)
return misc.RunRegex(ip_pattern, output) 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): class WiredInterface(Interface):
@@ -451,20 +465,6 @@ class WiredInterface(Interface):
return True return True
else: else:
return False 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): class WirelessInterface(Interface):