1
0
mirror of https://github.com/gryf/wicd.git synced 2025-12-29 01:42:33 +01:00

Merge r416 of mainline 1.6.

This commit is contained in:
Andrew Psaltis
2009-06-17 20:52:59 -04:00
10 changed files with 106 additions and 30 deletions

View File

@@ -93,6 +93,7 @@ class PrefsDialog(urwid.WidgetWrap):
dhcp1_t = 'dhclient' dhcp1_t = 'dhclient'
dhcp2_t = 'dhcpcd' dhcp2_t = 'dhcpcd'
dhcp3_t = 'pump' dhcp3_t = 'pump'
dhcp4_t = 'udhcpc'
wired_detect_header_t = ('header',language["wired_detect"]) wired_detect_header_t = ('header',language["wired_detect"])
wired1_t = 'ethtool' wired1_t = 'ethtool'
@@ -185,7 +186,8 @@ class PrefsDialog(urwid.WidgetWrap):
self.dhcp1 = DynRadioButton(self.dhcp_l,dhcp1_t) self.dhcp1 = DynRadioButton(self.dhcp_l,dhcp1_t)
self.dhcp2 = DynRadioButton(self.dhcp_l,dhcp2_t) self.dhcp2 = DynRadioButton(self.dhcp_l,dhcp2_t)
self.dhcp3 = DynRadioButton(self.dhcp_l,dhcp3_t) self.dhcp3 = DynRadioButton(self.dhcp_l,dhcp3_t)
self.dhcp_l = [self.dhcp0,self.dhcp1,self.dhcp2,self.dhcp3] self.dhcp4 = DynRadioButton(self.dhcp_l,dhcp4_t)
self.dhcp_l = [self.dhcp0,self.dhcp1,self.dhcp2,self.dhcp3,self.dhcp4]
self.wired_l = [] self.wired_l = []
self.wired_detect_header = urwid.Text(wired_detect_header_t) self.wired_detect_header = urwid.Text(wired_detect_header_t)
@@ -202,7 +204,7 @@ class PrefsDialog(urwid.WidgetWrap):
self.flush_l = [self.flush0,self.flush1,self.flush2] self.flush_l = [self.flush0,self.flush1,self.flush2]
externalLB = urwid.ListBox([self.dhcp_header, externalLB = urwid.ListBox([self.dhcp_header,
self.dhcp0,self.dhcp2,self.dhcp3,self.dhcp1, self.dhcp0,self.dhcp2,self.dhcp3,self.dhcp1,self.dhcp4,
_blank, _blank,
self.wired_detect_header, self.wired_detect_header,
self.wired0,self.wired1,self.wired2, self.wired0,self.wired1,self.wired2,
@@ -351,8 +353,10 @@ class PrefsDialog(urwid.WidgetWrap):
dhcp_client = misc.DHCLIENT dhcp_client = misc.DHCLIENT
elif self.dhcp2.get_state(): elif self.dhcp2.get_state():
dhcp_client = misc.DHCPCD dhcp_client = misc.DHCPCD
else: elif self.dhcp3.get_state():
dhcp_client = misc.PUMP dhcp_client = misc.PUMP
else:
dhcp_client = misc.UDHCPC
daemon.SetDHCPClient(dhcp_client) daemon.SetDHCPClient(dhcp_client)
if self.wired0.get_state(): if self.wired0.get_state():

View File

@@ -1171,6 +1171,21 @@ is already active.</property>
<property name="position">2</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkRadioButton" id="udhcpc_radio">
<property name="label" translatable="yes">udhcpc</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">dhclient_radio</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">4</property>
</packing>
</child>
</widget> </widget>
</child> </child>
</widget> </widget>

View File

@@ -1,6 +1,6 @@
.TH WICD-CLIENT "1" "February 2009" "wicd-client " "User Commands" .TH WICD-CLIENT "1" "June 2009" "wicd-client " "User Commands"
.SH NAME .SH NAME
wicd-client \- manual page for wicd-client wicd-client \- frontend to the WICD daemon
.SH DESCRIPTION .SH DESCRIPTION
wireless (and wired) connection daemon front\-end. wireless (and wired) connection daemon front\-end.

View File

@@ -1,6 +1,5 @@
[Desktop Entry] [Desktop Entry]
Categories=Application;Network; Categories=Application;Network;
Encoding=UTF-8
Exec=wicd-client --no-tray Exec=wicd-client --no-tray
GenericName=Network Manager GenericName=Network Manager
Icon=wicd-client Icon=wicd-client

View File

@@ -49,6 +49,7 @@ AUTO = 0
DHCLIENT = 1 DHCLIENT = 1
DHCPCD = 2 DHCPCD = 2
PUMP = 3 PUMP = 3
UDHCPC = 4
# Link detection tools # Link detection tools
ETHTOOL = 1 ETHTOOL = 1
@@ -446,7 +447,7 @@ def choose_sudo_prog(prog_num=0):
paths = [] paths = []
if desktop_env == "kde": if desktop_env == "kde":
progs = ["kdesu", "kdesudo", "ktusss"] progs = ["kdesu", "kdesudo", "ktsuss"]
else: else:
progs = ["gksudo", "gksu", "ktsuss"] progs = ["gksudo", "gksu", "ktsuss"]

View File

@@ -185,7 +185,7 @@ class ConnectionStatus(object):
# try to reconnect. # try to reconnect.
self.connection_lost_counter += 1 self.connection_lost_counter += 1
print self.connection_lost_counter print self.connection_lost_counter
if self.connection_lost_counter >= 4: if self.connection_lost_counter >= 4 and daemon.GetAutoReconnect():
wireless.DisconnectWireless() wireless.DisconnectWireless()
self.connection_lost_counter = 0 self.connection_lost_counter = 0
return False return False

View File

@@ -45,14 +45,20 @@ def setup_dbus():
wired = dbusmanager.get_interface('wired') wired = dbusmanager.get_interface('wired')
class AdvancedSettingsDialog(gtk.Dialog): class AdvancedSettingsDialog(gtk.Dialog):
def __init__(self): def __init__(self, network_name=None):
""" Build the base advanced settings dialog. """ Build the base advanced settings dialog.
This class isn't used by itself, instead it is used as a parent for This class isn't used by itself, instead it is used as a parent for
the WiredSettingsDialog and WirelessSettingsDialog. the WiredSettingsDialog and WirelessSettingsDialog.
""" """
gtk.Dialog.__init__(self, title=language['properties'], # if no network name was passed, just use Properties as the title
if network_name:
title = '%s - %s' % (network_name, language['properties'])
else:
title = language['properties']
gtk.Dialog.__init__(self, title=title,
flags=gtk.DIALOG_MODAL, buttons=(gtk.STOCK_CANCEL, flags=gtk.DIALOG_MODAL, buttons=(gtk.STOCK_CANCEL,
gtk.RESPONSE_REJECT, gtk.RESPONSE_REJECT,
gtk.STOCK_OK, gtk.STOCK_OK,
@@ -236,7 +242,7 @@ class AdvancedSettingsDialog(gtk.Dialog):
class WiredSettingsDialog(AdvancedSettingsDialog): class WiredSettingsDialog(AdvancedSettingsDialog):
def __init__(self, name): def __init__(self, name):
""" Build the wired settings dialog. """ """ Build the wired settings dialog. """
AdvancedSettingsDialog.__init__(self) AdvancedSettingsDialog.__init__(self, language['wired_network'])
self.des = self.connect("destroy", self.destroy_called) self.des = self.connect("destroy", self.destroy_called)
self.script_button.connect("clicked", self.edit_scripts) self.script_button.connect("clicked", self.edit_scripts)
self.prof_name = name self.prof_name = name
@@ -294,7 +300,7 @@ class WiredSettingsDialog(AdvancedSettingsDialog):
class WirelessSettingsDialog(AdvancedSettingsDialog): class WirelessSettingsDialog(AdvancedSettingsDialog):
def __init__(self, networkID): def __init__(self, networkID):
""" Build the wireless settings dialog. """ """ Build the wireless settings dialog. """
AdvancedSettingsDialog.__init__(self) AdvancedSettingsDialog.__init__(self, wireless.GetWirelessProperty(networkID, 'essid'))
# Set up encryption stuff # Set up encryption stuff
self.networkID = networkID self.networkID = networkID
self.combo_encryption = gtk.combo_box_new_text() self.combo_encryption = gtk.combo_box_new_text()

View File

@@ -315,6 +315,13 @@ class ConnectThread(threading.Thread):
self.SetStatus('interface_down') self.SetStatus('interface_down')
def run(self):
self.connect_result = "Failed"
try:
self._connect()
finally:
self.is_connecting = False
def set_should_die(self, val): def set_should_die(self, val):
self.lock.acquire() self.lock.acquire()
try: try:
@@ -794,7 +801,7 @@ class WirelessConnectThread(ConnectThread):
self.wpa_driver = wpa_driver self.wpa_driver = wpa_driver
def run(self): def _connect(self):
""" The main function of the connection thread. """ The main function of the connection thread.
This function performs the necessary calls to connect to the This function performs the necessary calls to connect to the
@@ -1006,7 +1013,7 @@ class WiredConnectThread(ConnectThread):
after_script, disconnect_script, gdns1, gdns2, after_script, disconnect_script, gdns1, gdns2,
gdns3, gdns_dom, gsearch_dom, liface, debug) gdns3, gdns_dom, gsearch_dom, liface, debug)
def run(self): def _connect(self):
""" The main function of the connection thread. """ The main function of the connection thread.
This function performs the necessary calls to connect to the This function performs the necessary calls to connect to the

View File

@@ -82,7 +82,7 @@ class PreferencesDialog(object):
self.preferwiredcheckbox.set_active(daemon.GetPreferWiredNetwork()) self.preferwiredcheckbox.set_active(daemon.GetPreferWiredNetwork())
dhcp_list = [self.dhcpautoradio, self.dhclientradio, self.dhcpcdradio, dhcp_list = [self.dhcpautoradio, self.dhclientradio, self.dhcpcdradio,
self.pumpradio] self.pumpradio, self.udhcpcradio]
self._setup_external_app_radios(dhcp_list, daemon.GetDHCPClient, self._setup_external_app_radios(dhcp_list, daemon.GetDHCPClient,
daemon.SetDHCPClient) daemon.SetDHCPClient)
@@ -210,8 +210,10 @@ class PreferencesDialog(object):
dhcp_client = misc.DHCLIENT dhcp_client = misc.DHCLIENT
elif self.dhcpcdradio.get_active(): elif self.dhcpcdradio.get_active():
dhcp_client = misc.DHCPCD dhcp_client = misc.DHCPCD
else: elif self.pumpradio.get_active():
dhcp_client = misc.PUMP dhcp_client = misc.PUMP
else:
dhcp_client = misc.UDHCPC
daemon.SetDHCPClient(dhcp_client) daemon.SetDHCPClient(dhcp_client)
if self.linkautoradio.get_active(): if self.linkautoradio.get_active():
@@ -347,6 +349,7 @@ class PreferencesDialog(object):
self.dhclientradio = self.wTree.get_widget("dhclient_radio") self.dhclientradio = self.wTree.get_widget("dhclient_radio")
self.pumpradio = self.wTree.get_widget("pump_radio") self.pumpradio = self.wTree.get_widget("pump_radio")
self.dhcpcdradio = self.wTree.get_widget("dhcpcd_radio") self.dhcpcdradio = self.wTree.get_widget("dhcpcd_radio")
self.udhcpcradio = self.wTree.get_widget("udhcpc_radio")
# Wired Link Detection Apps # Wired Link Detection Apps
self.linkautoradio = setup_label("link_auto_radio", 'wicd_auto_config') self.linkautoradio = setup_label("link_auto_radio", 'wicd_auto_config')

View File

@@ -250,6 +250,9 @@ class BaseInterface(object):
cmd = self.dhclient_cmd cmd = self.dhclient_cmd
if self.dhclient_needs_verbose: if self.dhclient_needs_verbose:
cmd += ' -v' cmd += ' -v'
elif self.udhcpc_cmd and cl in [misc.UDHCPC, misc.AUTO]:
client = "udhcpc"
cmd = self.udhcpc_cmd
else: else:
client = None client = None
cmd = "" cmd = ""
@@ -257,20 +260,25 @@ class BaseInterface(object):
client_dict = { client_dict = {
"dhclient" : "dhclient" :
{'connect' : r"%s %s", {'connect' : r"%(cmd)s %(iface)s",
'release' : r"%s -r %s", 'release' : r"%(cmd)s -r %(iface)s",
'id' : misc.DHCLIENT, 'id' : misc.DHCLIENT,
}, },
"pump" : "pump" :
{ 'connect' : r"%s -i %s", { 'connect' : r"%(cmd)s -i %(iface)s",
'release' : r"%s -r -i %s", 'release' : r"%(cmd)s -r -i %(iface)s",
'id' : misc.PUMP, 'id' : misc.PUMP,
}, },
"dhcpcd" : "dhcpcd" :
{'connect' : r"%s %s", {'connect' : r"%(cmd)s %(iface)s",
'release' : r"%s -k %s", 'release' : r"%(cmd)s -k %(iface)s",
'id' : misc.DHCPCD, 'id' : misc.DHCPCD,
}, },
"udhcpc":
{'connect' : r"%(cmd)s -n -i %(iface)s",
'release' : r"killall -SIGUSR2 %(cmd)s",
'id' : misc.UDHCPC,
},
} }
(client_name, cmd) = get_client_name(self.DHCP_CLIENT) (client_name, cmd) = get_client_name(self.DHCP_CLIENT)
if not client_name or not cmd: if not client_name or not cmd:
@@ -278,9 +286,9 @@ class BaseInterface(object):
return "" return ""
if flavor == "connect": if flavor == "connect":
return client_dict[client_name]['connect'] % (cmd, self.iface) return client_dict[client_name]['connect'] % {"cmd":cmd, "iface":self.iface}
elif flavor == "release": elif flavor == "release":
return client_dict[client_name]['release'] % (cmd, self.iface) return client_dict[client_name]['release'] % {"cmd":cmd, "iface":self.iface}
else: else:
return client_dict[client_name]['id'] return client_dict[client_name]['id']
@@ -327,6 +335,7 @@ class BaseInterface(object):
self.dhclient_needs_verbose = False self.dhclient_needs_verbose = False
self.dhcpcd_cmd = self._find_program_path("dhcpcd") self.dhcpcd_cmd = self._find_program_path("dhcpcd")
self.pump_cmd = self._find_program_path("pump") self.pump_cmd = self._find_program_path("pump")
self.udhcpc_cmd = self._find_program_path("udhcpc")
def CheckWiredTools(self): def CheckWiredTools(self):
""" Check for the existence of ethtool and mii-tool. """ """ Check for the existence of ethtool and mii-tool. """
@@ -431,7 +440,7 @@ class BaseInterface(object):
if line == '': # Empty string means dhclient is done. if line == '': # Empty string means dhclient is done.
dhclient_complete = True dhclient_complete = True
else: else:
print line.strip('\n') print misc.to_unicode(line.strip('\n'))
if line.startswith('bound'): if line.startswith('bound'):
dhclient_success = True dhclient_success = True
dhclient_complete = True dhclient_complete = True
@@ -458,7 +467,7 @@ class BaseInterface(object):
elif line.strip().lower().startswith('Operation failed.'): elif line.strip().lower().startswith('Operation failed.'):
pump_success = False pump_success = False
pump_complete = True pump_complete = True
print line print misc.to_unicode(line)
return self._check_dhcp_result(pump_success) return self._check_dhcp_result(pump_success)
@@ -482,10 +491,34 @@ class BaseInterface(object):
dhcpcd_complete = True dhcpcd_complete = True
elif line == '': elif line == '':
dhcpcd_complete = True dhcpcd_complete = True
print line print misc.to_unicode(line)
return self._check_dhcp_result(dhcpcd_success) return self._check_dhcp_result(dhcpcd_success)
def _parse_udhcpc(self, pipe):
""" Determines if obtaining an IP using udhcpc succeeded.
Keyword arguments:
pipe -- stdout pipe to the dhcpcd process.
Returns:
'success' if successful, an error code string otherwise.
"""
udhcpc_complete = False
udhcpc_success = True
while not udhcpc_complete:
line = pipe.readline()
if line.endswith("failing"):
udhcpc_success = False
udhcpc_complete = True
elif line == '':
udhcpc_complete = True
print line
return self._check_dhcp_result(udhcpc_success)
def _check_dhcp_result(self, success): def _check_dhcp_result(self, success):
""" Print and return the correct DHCP connection result. """ Print and return the correct DHCP connection result.
@@ -524,6 +557,8 @@ class BaseInterface(object):
return self._parse_pump(pipe) return self._parse_pump(pipe)
elif DHCP_CLIENT == misc.DHCPCD: elif DHCP_CLIENT == misc.DHCPCD:
return self._parse_dhcpcd(pipe) return self._parse_dhcpcd(pipe)
elif DHCP_CLIENT == misc.UDHCPC:
return self._parse_udhcpc(pipe)
else: else:
print 'ERROR no dhclient found!' print 'ERROR no dhclient found!'
@@ -1106,15 +1141,21 @@ class BaseWirelessInterface(BaseInterface):
# An array for the access points # An array for the access points
access_points = [] access_points = []
access_points = {}
for cell in networks: for cell in networks:
# Only use sections where there is an ESSID. # Only use sections where there is an ESSID.
if 'ESSID:' in cell: if 'ESSID:' in cell:
# Add this network to the list of networks # Add this network to the list of networks
entry = self._ParseAccessPoint(cell, ralink_info) entry = self._ParseAccessPoint(cell, ralink_info)
if entry is not None: if entry is not None:
access_points.append(entry) # Normally we only get duplicate bssids with hidden
# networks. If we hit this, we only want the entry
# with the real essid to be in the network list.
if (entry['bssid'] not in access_points
or not entry['hidden']):
access_points[entry['bssid']] = entry
return access_points return access_points.values()
def _ParseAccessPoint(self, cell, ralink_info): def _ParseAccessPoint(self, cell, ralink_info):
""" Parse a single cell from the output of iwlist. """ Parse a single cell from the output of iwlist.