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

Added support for using one set of global settings for all networks with a given essid.

Fixed a few wired autoconnect issues.
This commit is contained in:
imdano
2008-03-10 20:55:46 +00:00
parent 0653f3f40b
commit 04af10a891
3 changed files with 147 additions and 93 deletions

115
daemon.py
View File

@@ -367,17 +367,17 @@ class ConnectionWizard(dbus.service.Object):
if self.GetWiredAutoConnectMethod() == 2 and \
not self.GetNeedWiredProfileChooser():
self.LaunchChooser()
return
elif self.GetWiredAutoConnectMethod() == 1:
network = self.GetDefaultWiredNetwork()
if not network:
print "Couldn't find a default wired connection, wired \
autoconnect failed."
print "Couldn't find a default wired connection, wired autoconnect failed."
self._wireless_autoconnect()
return
else: # Assume its last-used.
network = self.GetLastUsedWiredNetwork()
if not network:
print "no previous wired profile available, wired autoconnect \
failed."
print "no previous wired profile available, wired autoconnect failed."
self._wireless_autoconnect()
return
self.ReadWiredNetworkProfile(network)
@@ -551,6 +551,7 @@ class ConnectionWizard(dbus.service.Object):
info[1] = essid
info[2] = signal strength
info[3] = internal networkid
SUSPENDED - info[0] = ""
"""
@@ -983,7 +984,7 @@ class ConnectionWizard(dbus.service.Object):
profileList = config.sections()
for profile in profileList:
if config.has_option(profile, "default"):
if config.get(profile, "default") == "True":
if misc.to_bool(config.get(profile, "default")):
print "removing existing default", profile
config.set(profile, "default", False)
self.SaveWiredNetworkProfile(profile)
@@ -996,7 +997,7 @@ class ConnectionWizard(dbus.service.Object):
profileList = config.sections()
for profile in profileList:
if config.has_option(profile, "default"):
if config.get(profile, "default") == "True":
if misc.to_bool(config.get(profile, "default")):
return profile
return None
@@ -1078,58 +1079,98 @@ class ConnectionWizard(dbus.service.Object):
print "setting network profile"
config = ConfigParser.ConfigParser()
config.read(self.wireless_conf)
if config.has_section(self.LastScan[id]["bssid"]):
config.remove_section(self.LastScan[id]["bssid"])
config.add_section(self.LastScan[id]["bssid"])
#add the essid so that people reading the config can figure
#out which network is which. it will not be read
for x in self.LastScan[id]:
config.set(self.LastScan[id]["bssid"], x, self.LastScan[id][x])
cur_network = self.LastScan[id]
bssid_key = cur_network["bssid"]
essid_key = "essid:" + cur_network["essid"]
if config.has_section(bssid_key):
config.remove_section(bssid_key)
config.add_section(bssid_key)
# We want to write the essid and bssid sections if global
# settings are enabled.
if cur_network["use_settings_globally"]:
if config.has_section(essid_key):
config.remove_section(essid_key)
config.add_section(essid_key)
for x in cur_network:
config.set(bssid_key, x, cur_network[x])
if cur_network["use_settings_globally"]:
config.set(essid_key, x, cur_network[x])
config.write(open(self.wireless_conf, "w"))
@dbus.service.method('org.wicd.daemon.config')
def SaveWirelessNetworkProperty(self, id, option):
""" Writes a particular wireless property to disk """
if (option.strip()).endswith("script"):
print 'you cannot save script information to disk through the daemon.'
print 'you cannot save script information to disk through \
the daemon.'
return
print ("setting network option " + str(option) + " to " +
str(self.LastScan[id][option]))
cur_network = self.LastScan[id]
essid_key = "essid:" + cur_network["essid"]
print ''.join("setting network option ", str(option), " to ",
str(cur_network[option]))
config = ConfigParser.ConfigParser()
config.read(self.wireless_conf)
if config.has_section(self.LastScan[id]["bssid"]):
config.set(self.LastScan[id]["bssid"], option,
str(self.LastScan[id][option]))
if config.has_section(cur_network["bssid"]):
config.set(cur_network["bssid"], option,
str(cur_network[option]))
# Write the global section as well, if required.
if config.has_section(essid_key):
if config.get(essid_key, 'use_settings_globally'):
config.set(essid_key, option, str(cur_network[option]))
config.write(open(self.wireless_conf, "w"))
@dbus.service.method('org.wicd.daemon.config')
def RemoveGlobalEssidEntry(self, networkid):
""" Removes the global entry for the networkid provided. """
config = ConfigParser.ConfigParser()
config.read(self.wireless_conf)
cur_network = self.LastScan[networkid]
essid_key = "essid:" + cur_network["essid"]
if config.has_section(essid_key):
config.remove_section(essid_key)
@dbus.service.method('org.wicd.daemon.config')
def ReadWirelessNetworkProfile(self, id):
""" Reads in wireless profile as the active network """
config = ConfigParser.ConfigParser()
config.read(self.wireless_conf)
print self.LastScan[id]["bssid"]
if config.has_section(self.LastScan[id]["bssid"]):
self.LastScan[id]["has_profile"] = True
cur_network = self.LastScan[id]
essid_key = "essid:" + cur_network["essid"]
bssid_key = cur_network["bssid"]
print bssid_key
if config.has_section(essid_key):
if config.get(essid_key, 'use_settings_globally'):
return self._read_wireless_profile(config, cur_network,
essid_key)
elif config.has_section(bssid_key):
return self._read_wireless_profile(config, cur_network, bssid_key)
else:
cur_network["has_profile"] = False
return "500: Profile Not Found"
def _read_wireless_profile(self, config, cur_network, section):
cur_network["has_profile"] = True
# Read the essid because we be needing to name those hidden
# wireless networks now - but only read it if it is hidden.
if self.LastScan[id]["hidden"]:
self.LastScan[id]["essid"] = misc.Noneify(config.get(self.LastScan[id]["bssid"],
if cur_network["hidden"]:
cur_network["essid"] = misc.Noneify(config.get(section,
"essid"))
for x in config.options(self.LastScan[id]["bssid"]):
if not self.LastScan[id].has_key(x) or x.endswith("script"):
self.LastScan[id][x] = misc.Noneify(config.get(self.LastScan[id]["bssid"], x))
self.LastScan[id]['use_static_dns'] = bool(self.LastScan[id].get('use_static_dns'))
self.LastScan[id]['use_global_dns'] = bool(self.LastScan[id].get('use_global_dns'))
self.LastScan[id]['encryption'] = bool(self.LastScan[id].get('encryption'))
for x in config.options(section):
if not cur_network.has_key(x) or x.endswith("script"):
cur_network[x] = misc.Noneify(config.get(section,
x))
for option in ['use_static_dns', 'use_global_dns', 'encryption',
'use_settings_globally']:
cur_network[option] = bool(cur_network.get(option))
return "100: Loaded Profile"
else:
self.LastScan[id]["has_profile"] = False
# Are these next two lines needed? -Dan
self.LastScan[id]['use_static_dns'] = bool(self.GetUseGlobalDNS())
self.LastScan[id]['use_global_dns'] = bool(self.GetUseGlobalDNS())
return "500: Profile Not Found"
@dbus.service.method('org.wicd.daemon.config')
def WriteWindowSize(self, width, height):

106
gui.py
View File

@@ -147,6 +147,7 @@ language['stop_showing_chooser'] = _('Stop Showing Autoconnect pop-up temporaril
language['display_type_dialog'] = _('Use dBm to measure signal strength')
language['scripts'] = _('Scripts')
language['invalid_address'] = _('Invalid address in $A entry.')
language['global_settings'] = _('Use these settings for all networks sharing this essid')
language['encrypt_info_missing'] = _('Required encryption information is missing.')
language['enable_encryption'] = _('This network requires encryption to be enabled.')
@@ -453,6 +454,9 @@ class WiredSettingsDialog(AdvancedSettingsDialog):
AdvancedSettingsDialog.__init__(self)
self.des = self.connect("destroy", self.destroy_called)
def set_net_prop(self, option, value):
wired.SetWiredProperty(option, value)
def set_values(self):
""" Fill in the Gtk.Entry objects with the correct values. """
self.txt_ip.set_text(self.format_entry("ip"))
@@ -496,6 +500,7 @@ class WirelessSettingsDialog(AdvancedSettingsDialog):
self.networkID = networkID
self.combo_encryption = gtk.combo_box_new_text()
self.chkbox_encryption = gtk.CheckButton(language['use_encryption'])
self.chkbox_global_settings = gtk.CheckButton(language['global_settings'])
# Make the vbox to hold the encryption stuff.
self.vbox_encrypt_info = gtk.VBox(False, 0)
self.toggle_encryption()
@@ -518,8 +523,8 @@ class WirelessSettingsDialog(AdvancedSettingsDialog):
else:
self.combo_encryption.set_active(0)
self.change_encrypt_method()
self.vbox.pack_start(self.chkbox_encryption, fill=False,
expand=False)
self.vbox.pack_start(self.chkbox_global_settings, False, False)
self.vbox.pack_start(self.chkbox_encryption, False, False)
self.vbox.pack_start(self.combo_encryption)
self.vbox.pack_start(self.vbox_encrypt_info)
@@ -547,6 +552,10 @@ class WirelessSettingsDialog(AdvancedSettingsDialog):
self.destroy()
del self
def set_net_prop(self, option, value):
""" Sets the given option to the given value for this network. """
wireless.SetWirelessProperty(self.networkID, option, value)
def set_values(self):
""" Set the various network settings to the right values. """
networkID = self.networkID
@@ -569,6 +578,9 @@ class WirelessSettingsDialog(AdvancedSettingsDialog):
else:
self.chkbox_encryption.set_active(False)
if wireless.GetWirelessProperty(networkID, 'use_settings_globally'):
self.chkbox_global_settings.set_active(True)
def format_entry(self, networkid, label):
""" Helper method for fetching/formatting wireless properties. """
return noneToBlankString(wireless.GetWirelessProperty(networkid, label))
@@ -1633,30 +1645,30 @@ class appGui:
def save_wired_settings(self, entry):
""" Saved wired network settings. """
if entry.chkbox_static_ip.get_active():
wired.SetWiredProperty("ip", noneToString(entry.txt_ip.get_text()))
wired.SetWiredProperty("netmask", noneToString(entry.txt_netmask.get_text()))
wired.SetWiredProperty("gateway", noneToString(entry.txt_gateway.get_text()))
entry.set_net_prop("ip", noneToString(entry.txt_ip.get_text()))
entry.set_net_prop("netmask", noneToString(entry.txt_netmask.get_text()))
entry.set_net_prop("gateway", noneToString(entry.txt_gateway.get_text()))
else:
wired.SetWiredProperty("ip", '')
wired.SetWiredProperty("netmask", '')
wired.SetWiredProperty("gateway", '')
entry.set_net_prop("ip", '')
entry.set_net_prop("netmask", '')
entry.set_net_prop("gateway", '')
if entry.chkbox_static_dns.get_active() and \
not entry.chkbox_global_dns.get_active():
wired.SetWiredProperty('use_static_dns', True)
wired.SetWiredProperty('use_global_dns', False)
wired.SetWiredProperty("dns1", noneToString(entry.txt_dns_1.get_text()))
wired.SetWiredProperty("dns2", noneToString(entry.txt_dns_2.get_text()))
wired.SetWiredProperty("dns3", noneToString(entry.txt_dns_3.get_text()))
entry.set_net_prop('use_static_dns', True)
entry.set_net_prop('use_global_dns', False)
entry.set_net_prop("dns1", noneToString(entry.txt_dns_1.get_text()))
entry.set_net_prop("dns2", noneToString(entry.txt_dns_2.get_text()))
entry.set_net_prop("dns3", noneToString(entry.txt_dns_3.get_text()))
elif entry.chkbox_static_dns.get_active() and \
entry.chkbox_global_dns.get_active():
wired.SetWiredProperty('use_static_dns', True)
wired.SetWiredProperty('use_global_dns', True)
entry.set_net_prop('use_static_dns', True)
entry.set_net_prop('use_global_dns', True)
else:
wired.SetWiredProperty('use_static_dns', False)
wired.SetWiredProperty("dns1", '')
wired.SetWiredProperty("dns2", '')
wired.SetWiredProperty("dns3", '')
entry.set_net_prop('use_static_dns', False)
entry.set_net_prop("dns1", '')
entry.set_net_prop("dns2", '')
entry.set_net_prop("dns3", '')
config.SaveWiredNetworkProfile(entry.combo_profile_names.get_active_text())
return True
@@ -1667,15 +1679,15 @@ class appGui:
print "setting encryption info..."
encryption_info = entry.encryption_info
encrypt_methods = misc.LoadEncryptionMethods()
wireless.SetWirelessProperty(networkid, "enctype",
entry.set_net_prop("enctype",
encrypt_methods[entry.combo_encryption.
get_active()][1])
for x in encryption_info:
if encryption_info[x].get_text() == "":
misc.error(self.window, language['encrypt_info_missing'])
return False
wireless.SetWirelessProperty(networkid, x,
noneToString(encryption_info[x].get_text()))
entry.set_net_prop(x, noneToString(encryption_info[x].
get_text()))
elif not entry.chkbox_encryption.get_active() and \
wireless.GetWirelessProperty(networkid, "encryption"):
misc.error(self.window, language['enable_encryption'])
@@ -1683,45 +1695,47 @@ class appGui:
else:
print 'encryption is', wireless.GetWirelessProperty(networkid, "encryption")
print "no encryption specified..."
wireless.SetWirelessProperty(networkid, "enctype", "None")
entry.set_net_prop("enctype", "None")
wireless.SetWirelessProperty(networkid, "automatic",
entry.set_net_prop("automatic",
noneToString(netent.chkbox_autoconnect.get_active()))
# Save IP info
if entry.chkbox_static_ip.get_active():
wireless.SetWirelessProperty(networkid, "ip",
noneToString(entry.txt_ip.get_text()))
wireless.SetWirelessProperty(networkid, "netmask",
entry.set_net_prop("ip", noneToString(entry.txt_ip.get_text()))
entry.set_net_prop("netmask",
noneToString(entry.txt_netmask.get_text()))
wireless.SetWirelessProperty(networkid, "gateway",
entry.set_net_prop("gateway",
noneToString(entry.txt_gateway.get_text()))
else:
# Blank the values
wireless.SetWirelessProperty(networkid, "ip", '')
wireless.SetWirelessProperty(networkid, "netmask", '')
wireless.SetWirelessProperty(networkid, "gateway", '')
entry.set_net_prop("ip", '')
entry.set_net_prop("netmask", '')
entry.set_net_prop("gateway", '')
# Save DNS info
if entry.chkbox_static_dns.get_active() and \
not entry.chkbox_global_dns.get_active():
wireless.SetWirelessProperty(networkid, 'use_static_dns', True)
wireless.SetWirelessProperty(networkid, 'use_global_dns', False)
wireless.SetWirelessProperty(networkid, 'dns1',
noneToString(entry.txt_dns_1.get_text()))
wireless.SetWirelessProperty(networkid, 'dns2',
noneToString(entry.txt_dns_2.get_text()))
wireless.SetWirelessProperty(networkid, 'dns3',
noneToString(entry.txt_dns_3.get_text()))
entry.set_net_prop('use_static_dns', True)
entry.set_net_prop('use_global_dns', False)
entry.set_net_prop('dns1', noneToString(entry.txt_dns_1.get_text()))
entry.set_net_prop('dns2', noneToString(entry.txt_dns_2.get_text()))
entry.set_net_prop('dns3', noneToString(entry.txt_dns_3.get_text()))
elif entry.chkbox_static_dns.get_active() and \
entry.chkbox_global_dns.get_active():
wireless.SetWirelessProperty(networkid, 'use_static_dns', True)
wireless.SetWirelessProperty(networkid, 'use_global_dns', True)
entry.set_net_prop('use_static_dns', True)
entry.set_net_prop('use_global_dns', True)
else:
wireless.SetWirelessProperty(networkid, 'use_static_dns', False)
wireless.SetWirelessProperty(networkid, 'use_global_dns', False)
wireless.SetWirelessProperty(networkid, 'dns1', '')
wireless.SetWirelessProperty(networkid, 'dns2', '')
wireless.SetWirelessProperty(networkid, 'dns3', '')
entry.set_net_prop('use_static_dns', False)
entry.set_net_prop('use_global_dns', False)
entry.set_net_prop('dns1', '')
entry.set_net_prop('dns2', '')
entry.set_net_prop('dns3', '')
if entry.chkbox_global_settings.get_active():
entry.set_net_prop('use_settings_globally', True)
else:
entry.set_net_prop('use_settings_globally', False)
config.RemoveGlobalEssidEntry(networkid)
config.SaveWirelessNetworkProfile(networkid)
return True

View File

@@ -3,7 +3,6 @@
#
# Copyright (C) 2007 Adam Blackburn
# Copyright (C) 2007 Dan O'Reilly
# Copyright (C) 2007 Byron Hillis
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License Version 2 as