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

Completely reorganized edgy.py

Changed the way wired profile chooser gets launched (now uses a dbus signal)
Fixed bug where launching gui.py through the tray sometimes left a zombie (uses a dbus signal)
Added a bunch of docstrings and changed formatting to follow python conventions
Added support for displaying signal strength in dBm instead of a percentage
Added some print statements during the ad-hoc connection process
Started work on a way to autoconnect to a hidden network (not done or working yet)
This commit is contained in:
imdano
2007-08-29 18:49:02 +00:00
parent 697bb050ea
commit 82958861a7
6 changed files with 453 additions and 192 deletions

165
daemon.py
View File

@@ -287,15 +287,49 @@ class ConnectionWizard(dbus.service.Object):
return int(self.debug_mode)
#end function GetDebugMode
@dbus.service.method('org.wicd.daemon')
def GetSignalDisplayType(self):
''' returns the signal display type
Returns either 0 or 1.
0 for signal strength as a percentage
1 for signal strength measured in dBm
'''
return int(self.signal_display_type)
# end function GetSignalDisplayType
@dbus.service.method('org.wicd.daemon')
def SetSignalDisplayType(self, value):
''' Sets the signal display type and writes it the wicd config file '''
config = ConfigParser.ConfigParser()
config.read(self.app_conf)
config.set("Settings","signal_display_type",value)
configfile = open(self.app_conf,"w")
config.write(configfile)
self.signal_display_type = value
# end function SetSignalDisplayType
@dbus.service.method('org.wicd.daemon')
def FormatSignalForPrinting(self, signal):
''' Returns the suffix to display after the signal strength number '''
if self.GetSignalDisplayType() == 1:
return ("-" + signal + " dBm")
else:
return (signal + "%")
# End function GetSignalSuffix
@dbus.service.method('org.wicd.daemon')
def AutoConnect(self,fresh):
'''first tries to autoconnect to a wired network, if that fails it tries a wireless connection'''
if fresh:
self.Scan()
#self.AutoConnectScan() # Also scans for hidden networks
if self.CheckPluggedIn() == True:
if self.GetWiredAutoConnectMethod() == 2:
self.SetNeedWiredProfileChooser(True)
print 'alerting tray to display wired autoconnect wizard'
#self.SetNeedWiredProfileChooser(True)
self.LaunchChooser()
else:
defaultNetwork = self.GetDefaultWiredNetwork()
if defaultNetwork != None:
@@ -358,13 +392,15 @@ class ConnectionWizard(dbus.service.Object):
def GetGlobalDNSAddresses(self):
'''returns the global dns addresses'''
print 'returning global dns addresses to client'
return (misc.noneToString(self.dns1),misc.noneToString(self.dns2),misc.noneToString(self.dns3))
return (misc.noneToString(self.dns1), misc.noneToString(self.dns2),
misc.noneToString(self.dns3))
#end function GetWirelessInterface
@dbus.service.method('org.wicd.daemon')
def CheckIfConnecting(self):
'''returns if a network connection is being made'''
if self.CheckIfWiredConnecting() == False and self.CheckIfWirelessConnecting() == False:
if self.CheckIfWiredConnecting() == False and \
self.CheckIfWirelessConnecting() == False:
return False
else:
return True
@@ -380,6 +416,25 @@ class ConnectionWizard(dbus.service.Object):
return self.need_profile_chooser
#end function GetNeedWiredProfileChooser
@dbus.service.signal(dbus_interface='org.wicd.daemon', signature='')
def LaunchChooser(self):
print 'calling wired profile chooser'
@dbus.service.signal(dbus_interface='org.wicd.daemon',signature='')
def CloseGui(self):
''' Sends a dbus signal announcing the GUI is closing '''
print 'sending close signal'
@dbus.service.method('org.wicd.daemon')
def close_gui(self):
''' Calls the CloseGui method
intermediary method to send a signal announcing gui.py is being
closed. It's needed because a method can't be both a
service.method and service.signal
'''
self.CloseGui()
########## WIRELESS FUNCTIONS
#################################
@@ -400,6 +455,39 @@ class ConnectionWizard(dbus.service.Object):
for i, network in enumerate(scan):
self.ReadWirelessNetworkProfile(i)
print
# This is unfinished so not on dbus yet
def AutoConnectScan(self):
''' Scan for networks and for known hidden networks
Scans for wireless networks and also for hidden networks defined in
wireless-settings.conf
'''
hidden_network_list = self.GetHiddenNetworkList()
master_scan = self.Scan()
if hidden_network_list is None:
return
else:
# If we find hidden networks, run a scan for each one found,
# parsing out the hidden network info if it's in the scan
# results, and appending it to a master scan list
for hidden_network in hidden_network_list:
print 'Scanning for hidden network:', hidden_network
self.SetHiddenESSID(hidden_network['essid'])
temp_scan = self.Scan()
for i, network in enumerate(temp_scan):
print 'Searching scan results for ' + hidden_network['essid']
# Make sure both the essid and bssid match
if temp_scan[i]['essid'] == hidden_network['essid'] and \
temp_scan[i]['bssid'] == hidden_network['bssid']:
print 'Hidden network found, adding to master list'
master_scan[len(master_scan)] = temp_scan[i]
# Break once the network is found
break
self.LastScan = master_scan
#end function FreshScan
@dbus.service.method('org.wicd.daemon.wireless')
@@ -743,6 +831,7 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.config')
def CreateWiredNetworkProfile(self,profilename):
''' Creates a wired network profile '''
#should include: profilename,ip,netmask,gateway,dns1,dns2,dns3
profilename = profilename.encode('utf-8')
print "creating profile for " + profilename
@@ -784,6 +873,7 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.config')
def GetDefaultWiredNetwork(self):
''' Returns the current default wired network '''
config = ConfigParser.ConfigParser()
config.read(self.wired_conf)
profileList = config.sections()
@@ -795,6 +885,7 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.config')
def DeleteWiredNetworkProfile(self,profilename):
''' Deletes a wired network profile '''
profilename = profilename.encode('utf-8')
print "deleting profile for " + str(profilename)
config = ConfigParser.ConfigParser()
@@ -809,6 +900,7 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.config')
def SaveWiredNetworkProfile(self,profilename):
''' Writes a wired network profile to disk '''
#should include: profilename,ip,netmask,gateway,dns1,dns2
profilename = profilename.encode('utf-8')
print "setting profile for " + str(profilename)
@@ -825,6 +917,7 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.config')
def ReadWiredNetworkProfile(self,profilename):
''' Reads a wired network profile in as the currently active profile '''
profile = {}
profilename = profilename.encode('utf-8')
config = ConfigParser.ConfigParser()
@@ -841,6 +934,7 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.config')
def GetWiredProfileList(self):
''' Returns a list of all wired profiles in wired-settings.conf '''
config = ConfigParser.ConfigParser()
config.read(self.wired_conf)
print config.sections()
@@ -852,6 +946,7 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.config')
def SaveWirelessNetworkProfile(self,id):
''' Writes a wireless profile to disk '''
print "setting network profile"
config = ConfigParser.ConfigParser()
config.read(self.wireless_conf)
@@ -867,6 +962,7 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.config')
def SaveWirelessNetworkProperty(self,id,option):
''' Writes a particular wireless property to disk '''
print "setting network option " + str(option) + " to " + str(self.LastScan[id][option])
config = ConfigParser.ConfigParser()
config.read(self.wireless_conf)
@@ -877,6 +973,7 @@ class ConnectionWizard(dbus.service.Object):
@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"]
@@ -887,11 +984,13 @@ class ConnectionWizard(dbus.service.Object):
else:
self.LastScan[id]["beforescript"]= None
if config.has_option(self.LastScan[id]["bssid"],"afterscript"):
self.LastScan[id]["afterscript"]=misc.Noneify(config.get(self.LastScan[id]["bssid"],"afterscript"))
self.LastScan[id]["afterscript"] = misc.Noneify(config.get(self.LastScan[id]["bssid"],
"afterscript"))
else:
self.LastScan[id]["afterscript"] = None
if config.has_option(self.LastScan[id]["bssid"],"disconnectscript"):
self.LastScan[id]["disconnectscript"]=misc.Noneify(config.get(self.LastScan[id]["bssid"],"disconnectscript"))
self.LastScan[id]["disconnectscript"] = misc.Noneify(config.get(self.LastScan[id]["bssid"],
"disconnectscript"))
else:
self.LastScan[id]["disconnectscript"] = None
@@ -933,22 +1032,27 @@ class ConnectionWizard(dbus.service.Object):
if config.has_section("Settings"):
if config.has_option("Settings","wireless_interface"):
print "found wireless interface in configuration...",
self.SetWirelessInterface(config.get("Settings","wireless_interface"))
self.SetWirelessInterface(config.get("Settings",
"wireless_interface"))
if config.has_option("Settings","wired_interface"):
print "found wired interface in configuration...",
self.SetWiredInterface(config.get("Settings","wired_interface"))
self.SetWiredInterface(config.get("Settings",
"wired_interface"))
if config.has_option("Settings","wpa_driver"):
print "found wpa driver in configuration...",
self.SetWPADriver(config.get("Settings","wpa_driver"))
if config.has_option("Settings","always_show_wired_interface"):
self.always_show_wired_interface = config.get("Settings","always_show_wired_interface")
self.always_show_wired_interface = config.get("Settings",
"always_show_wired_interface")
else:
config.set("Settings","always_show_wired_interface","False")
config.set("Settings", "always_show_wired_interface",
"False")
self.always_show_wired_interface = 0
if config.has_option("Settings","use_global_dns"):
print config.get("Settings","use_global_dns")
self.SetUseGlobalDNS(int(config.get("Settings","use_global_dns")))
dns1, dns2, dns3 = ('None','None','None') #so we can access them later
self.SetUseGlobalDNS(int(config.get("Settings",
"use_global_dns")))
dns1, dns2, dns3 = ('None','None','None') # So we can access them later
if config.has_option("Settings","global_dns_1"):
dns1 = config.get('Settings','global_dns_1')
if config.has_option("Settings","global_dns_2"):
@@ -960,7 +1064,8 @@ class ConnectionWizard(dbus.service.Object):
self.SetUseGlobalDNS(False)
self.SetGlobalDNS(False,False,False)
if config.has_option("Settings","auto_reconnect"):
self.auto_reconnect = config.get("Settings","auto_reconnect")
self.auto_reconnect = config.get("Settings",
"auto_reconnect")
else:
config.set("Settings","auto_reconnect","0")
self.auto_reconnect = False
@@ -970,10 +1075,17 @@ class ConnectionWizard(dbus.service.Object):
self.debug_mode = 0
config.set("Settings","debug_mode","0")
if config.has_option("Settings","wired_connect_mode"):
self.SetWiredAutoConnectMethod(config.get("Settings","wired_connect_mode"))
self.SetWiredAutoConnectMethod(config.get("Settings",
"wired_connect_mode"))
else:
config.set("Settings","wired_connect_mode","1")
self.SetWiredAutoConnectMethod(config.get("Settings","wired_connect_mode"))
self.SetWiredAutoConnectMethod(config.get("Settings",
"wired_connect_mode"))
if config.has_option("Settings", "signal_display_type"):
self.signal_display_type = config.get("Settings", "signal_display_type")
else:
config.set("Settings", "signal_display_type", "0")
self.SetSignalDisplayType(0)
else:
print "configuration file exists, no settings found, adding defaults..."
configfile = open(self.app_conf,"w")
@@ -989,8 +1101,15 @@ class ConnectionWizard(dbus.service.Object):
config.set("Settings","dns1","None")
config.set("Settings","dns2","None")
config.set("Settings","dns3","None")
config.set("Settings", "signal_display_type", "0")
self.SetUseGlobalDNS(False)
self.SetGlobalDNS(config.get('Settings','dns1'),config.get('Settings','dns2'),config.get('Settings','dns3'))
self.SetGlobalDNS(config.get('Settings', 'dns1'),
config.get('Settings', 'dns2'),
config.get('Settings', 'dns3'))
iface = self.DetectWirelessInterface()
if iface:
self.SetWirelessInterface(iface)
else:
self.SetWirelessInterface("wlan0")
self.SetWiredInterface("eth0")
self.SetWPADriver("wext")
@@ -998,6 +1117,7 @@ class ConnectionWizard(dbus.service.Object):
self.SetAutoReconnect(1)
self.SetDebugMode(0)
self.SetWiredAutoConnectMethod(1)
self.SetSignalDisplayType(0)
config.write(configfile)
else:
@@ -1012,24 +1132,29 @@ class ConnectionWizard(dbus.service.Object):
config.set("Settings","auto_reconnect","0")
config.set("Settings","debug_mode","0")
config.set("Settings","wired_connect_mode","1")
config.set("Settings", "signal_display_type", "0")
config.set("Settings","dns1","None")
config.set("Settings","dns2","None")
config.set("Settings","dns3","None")
iface = self.DetectWirelessInterface()
if iface:
if iface is not None:
config.set("Settings","wireless_interface",iface)
else:
print "couldn't detect a wireless interface, using wlan0..."
config.set("Settings","wireless_interface","wlan0")
config.set("Settings","wpa_driver","wext")
config.write(open(self.app_conf,"w"))
self.SetWirelessInterface(config.get("Settings","wireless_interface"))
self.SetWiredInterface(config.get("Settings","wired_interface"))
self.SetWPADriver(config.get("Settings","wpa_driver"))
self.SetWirelessInterface(config.get("Settings",
"wireless_interface"))
self.SetWiredInterface(config.get("Settings",
"wired_interface"))
self.SetWPADriver(config.get("Settings",
"wpa_driver"))
self.SetAlwaysShowWiredInterface(0)
self.SetAutoReconnect(1)
self.SetDebugMode(0)
self.SetWiredAutoConnectMethod(1)
self.SetSignalDisplayType(0)
self.SetUseGlobalDNS(False)
self.SetGlobalDNS(None,None,None)
#end If