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

Added script execution support, added autoconnect to wired network support, created a default wired network system to allow autoconnection

This commit is contained in:
imdano
2007-07-09 14:41:14 +00:00
parent 4a2dc331f5
commit d3ca083420
4 changed files with 190 additions and 15 deletions

View File

@@ -16,7 +16,6 @@ import ConfigParser, time
#import the random functions library
import misc
###############################
# GENERAL NOTES
#
@@ -241,6 +240,16 @@ class ConnectionWizard(dbus.service.Object):
self.wifi.Disconnect()
#end function DisconnectWireless
@dbus.service.method('org.wicd.daemon.wireless')
def SetBeforeScript(self,script):
self.wifi.before_script = script
#end function SetBeforeScript
@dbus.service.method('org.wicd.daemon.wireless')
def SetAfterScript(self,script):
self.wifi.after_script = script
#end function SetAfterScript
@dbus.service.method('org.wicd.daemon.wireless')
def GetNumberOfNetworks(self):
'''returns number of networks'''
@@ -254,6 +263,16 @@ class ConnectionWizard(dbus.service.Object):
self.wifi.CreateAdHocNetwork(essid,channel,ip,enctype,key,encused,ics)
#end function CreateAdHocNetwork
@dbus.service.method('org.wicd.daemon.wireless')
def GetHideDupeAPs(self):
return self.hide_dupe_aps
#end function GetHideDupeAPs
@dbus.service.method('org.wicd.daemon.wireless')
def SetHideDupeAPs(self,value):
self.hide_dupe_aps = value
#end function SetHideDupeAPs
@dbus.service.method('org.wicd.daemon.wireless')
def GetAutoReconnect(self):
do = bool(int(self.auto_reconnect))
@@ -305,6 +324,18 @@ class ConnectionWizard(dbus.service.Object):
#self.GetWiredIP()
time.sleep(1)
print "autoconnecting... done"
return
print "unable to find a network to autoconnect to, checking for a wired connection"
if self.CheckPluggedIn() == True:
if self.CheckIfWiredConnecting() == False: # Keeps us from going into an infinite connecting loop
defaultNetwork = self.GetDefaultWiredNetwork()
if defaultNetwork != None:
self.ReadWiredNetworkProfile(defaultNetwork)
self.ConnectWired()
else:
print "couldn't find a default wired connection, couldn't autoconnect"
else:
print "no wired connection present, couldn't autoconnect."
else:
print 'autoconnect failed because wireless interface == None'
#end function AutoConnect
@@ -369,7 +400,9 @@ class ConnectionWizard(dbus.service.Object):
#CheckIfWirelessConnecting can be used to test if the connection
#is done
self.SetForcedDisconnect(False)
print 'connecting to wireless network',self.LastScan[id]["essid"]
self.wifi.before_script = self.GetWirelessProperty(id,'beforescript')
self.wifi.after_script = self.GetWirelessProperty(id,'afterscript')
print 'connecting to wireless network',self.LastScan[id]['essid']
return self.wifi.Connect(self.LastScan[id])
#end function Connect
@@ -452,6 +485,18 @@ class ConnectionWizard(dbus.service.Object):
print 'wired connecting',False
return False
#end function CheckIfWiredConnecting
@dbus.service.method('org.wicd.daemon.wired')
def SetBeforeScript(self,script):
'''sets pre-connection script to run for a wired connection'''
self.wired.before_script = script
#end function SetBeforeScript
@dbus.service.method('org.wicd.daemon.wired')
def SetAfterScript(self,script):
'''sets post-connection script to run for a wired connection'''
self.wired.after_script = script
#end function SetAfterScript
@dbus.service.method('org.wicd.daemon.wired')
def CheckWiredConnectingMessage(self):
@@ -515,6 +560,8 @@ class ConnectionWizard(dbus.service.Object):
def ConnectWired(self):
'''connects to a wired network'''
#simple enough.
self.wired.before_script = self.GetWiredProperty("beforescript")
self.wired.after_script = self.GetWiredProperty("afterscript")
self.wired.Connect(self.WiredNetwork)
########## LOG FILE STUFF
@@ -549,10 +596,38 @@ class ConnectionWizard(dbus.service.Object):
config.set(profilename,"dns1",None)
config.set(profilename,"dns2",None)
config.set(profilename,"dns3",None)
config.set(profilename,"beforescript",None)
config.set(profilename,"afterscript",None)
config.set(profilename,"default",False)
config.write( open(self.wired_conf,"w"))
return True
#end function CreateWiredNetworkProfile
@dbus.service.method('org.wicd.daemon.config')
def UnsetWiredDefault(self):
'''Unsets the default option in the current default wired profile'''
config = ConfigParser.ConfigParser()
config.read(self.wired_conf)
profileList = config.sections()
print "profileList = ",profileList
for profile in profileList:
print "profile = ", profile
if config.get(profile,"default") == "True":
print "removing existing default"
config.set(profile,"default", False)
self.SaveWiredNetworkProfile(profile)
#end function UnsetWiredDefault
@dbus.service.method('org.wicd.daemon.config')
def GetDefaultWiredNetwork(self):
config = ConfigParser.ConfigParser()
config.read(self.wired_conf)
profileList = config.sections()
for profile in profileList:
if config.get(profile,"default") == "True":
return profile
return None
@dbus.service.method('org.wicd.daemon.config')
def DeleteWiredNetworkProfile(self,profilename):
print "deleting profile for " + str(profilename)
@@ -640,6 +715,15 @@ class ConnectionWizard(dbus.service.Object):
print self.LastScan[id]["bssid"]
if config.has_section(self.LastScan[id]["bssid"]):
self.LastScan[id]["has_profile"] = True
if config.has_option(self.LastScan[id]["bssid"],"beforescript"):
self.LastScan[id]["beforescript"]= misc.Noneify(config.get(self.LastScan[id]["bssid"],"beforescript"))
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"))
else:
self.LastScan[id]["afterscript"] = None
#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"] == True:

View File

@@ -140,7 +140,7 @@ def set_signal_image():
print wireless.AutoConnect(True)
else:
print "Scanning for an autoconnect network..."
print wireless.AutoConnect(True)
print wireless.AutoConnect(True)
config.EnableLogging()
return True

70
gui.py
View File

@@ -13,7 +13,6 @@ except:
print 'Missing GTK and gtk.glade. Aborting.'
sys.exit(1)
import time, os, misc, gettext, locale, gobject, dbus, dbus.service
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
@@ -125,7 +124,11 @@ language['auto_reconnect'] = _('Automatically reconnect on connection loss')
language['create_adhoc_network'] = _('Create an Ad-Hoc Network')
language['essid'] = _('ESSID')
language['use_wep_encryption'] = _('Use Encryption (WEP only)')
language['before_script'] = _('Run script before connect')
language['after_script'] = _('Run script after connect')
language['script_settings'] = _('Scripts')
language['use_ics'] = _('Activate Internet Connection Sharing')
language['default_wired'] = _('Use as default profile (overwrites any previous default)')
language['0'] = _('0')
language['1'] = _('1')
@@ -348,11 +351,17 @@ class NetworkEntry(gtk.Expander):
self.txtDNS1 = LabelEntry(language['dns'] + language['1'])
self.txtDNS2 = LabelEntry(language['dns'] + language['2'])
self.txtDNS3 = LabelEntry(language['dns'] + language['3'])
self.txtBeforeScript = LabelEntry(language['before_script'])
self.txtAfterScript = LabelEntry(language['after_script'])
self.txtBeforeScript.label.set_size_request(200,-1)
self.txtAfterScript.label.set_size_request(200,-1)
self.checkboxStaticIP = gtk.CheckButton(language['use_static_ip'])
self.checkboxStaticDNS = gtk.CheckButton(language['use_static_dns'])
self.expanderAdvanced = gtk.Expander(language['advanced_settings'])
self.expanderScripts = gtk.Expander(language['script_settings'])
self.vboxTop = gtk.VBox(False,0)
self.vboxAdvanced = gtk.VBox(False,0)
self.vboxScripts = gtk.VBox(False,0)
self.vboxAdvanced.pack_start(self.checkboxStaticIP,fill=False,expand=False)
self.vboxAdvanced.pack_start(self.txtIP,fill=False,expand=False)
self.vboxAdvanced.pack_start(self.txtNetmask,fill=False,expand=False)
@@ -361,8 +370,12 @@ class NetworkEntry(gtk.Expander):
self.vboxAdvanced.pack_start(self.txtDNS1,fill=False,expand=False)
self.vboxAdvanced.pack_start(self.txtDNS2,fill=False,expand=False)
self.vboxAdvanced.pack_start(self.txtDNS3,fill=False,expand=False)
self.vboxScripts.pack_start(self.txtBeforeScript,fill=False,expand=False)
self.vboxScripts.pack_start(self.txtAfterScript,fill=False,expand=False)
self.vboxTop.pack_end(self.expanderScripts,fill=False,expand=False)
self.vboxTop.pack_end(self.expanderAdvanced,fill=False,expand=False)
self.expanderAdvanced.add(self.vboxAdvanced)
self.expanderScripts.add(self.vboxScripts)
#connect the events to the actions
self.checkboxStaticIP.connect("toggled",self.toggleIPCheckbox)
self.checkboxStaticDNS.connect("toggled",self.toggleDNSCheckbox)
@@ -444,26 +457,41 @@ class WiredNetworkEntry(NetworkEntry):
self.set_label(language['wired_network'])
self.resetStaticCheckboxes()
self.comboProfileNames = gtk.combo_box_entry_new_text()
profileList = config.GetWiredProfileList()
if profileList: #make sure there is something in it...
for x in config.GetWiredProfileList(): #add all the names to the combobox
self.comboProfileNames.append_text(x)
hboxTemp = gtk.HBox(False,0)
hboxDef = gtk.HBox(False,0)
buttonOK = gtk.Button(stock=gtk.STOCK_ADD)
self.buttonDelete = gtk.Button(stock=gtk.STOCK_DELETE)
self.profileHelp = gtk.Label(language['wired_network_instructions'])
self.checkboxDefaultProfile = gtk.CheckButton(language['default_wired'])
self.profileHelp.set_width_chars(5) #the default is a tad too long
self.profileHelp.set_padding(10,10)
self.profileHelp.set_justify(gtk.JUSTIFY_LEFT)
self.profileHelp.set_line_wrap(True)
self.vboxTop.pack_start(self.profileHelp,fill=False,expand=False)
hboxTemp.pack_start(self.comboProfileNames,fill=True,expand=True)
buttonOK = gtk.Button(stock=gtk.STOCK_ADD)
self.buttonDelete = gtk.Button(stock=gtk.STOCK_DELETE)
hboxTemp.pack_start(buttonOK,fill=False,expand=False)
hboxTemp.pack_start(self.buttonDelete,fill=False,expand=False)
hboxDef.pack_start(self.checkboxDefaultProfile,fill=False,expand=False)
buttonOK.connect("clicked",self.addProfile) #hook up our buttons
self.buttonDelete.connect("clicked",self.removeProfile)
self.comboProfileNames.connect("changed",self.changeProfile)
self.vboxTop.pack_start(hboxTemp)
self.vboxTop.pack_start(hboxDef)
if stringToBoolean(wired.GetWiredProperty("default")) == True:
self.checkboxDefaultProfile.set_active(True)
else:
self.checkboxDefaultProfile.set_active(False)
self.checkboxDefaultProfile.connect("toggled",self.toggleDefaultProfile)
self.show_all()
self.profileHelp.hide()
if profileList != None:
@@ -475,12 +503,14 @@ class WiredNetworkEntry(NetworkEntry):
if not wired.GetAlwaysShowWiredInterface():
self.set_expanded(True)
self.profileHelp.show()
def checkEnable(self):
profileList = config.GetWiredProfileList()
if profileList == None:
self.buttonDelete.set_sensitive(False)
self.higherLevel.connectButton.set_sensitive(False)
self.vboxAdvanced.set_sensitive(False)
def addProfile(self,widget):
print "adding profile"
profileName = self.comboProfileNames.get_active_text()
@@ -511,6 +541,13 @@ class WiredNetworkEntry(NetworkEntry):
self.higherLevel.connectButton.set_sensitive(False)
else:
self.profileHelp.hide()
def toggleDefaultProfile(self,widget):
if self.checkboxDefaultProfile.get_active() == True:
print 'unsetting previous default profile...'
config.UnsetWiredDefault() # Makes sure there is only one default profile at a time
wired.SetWiredProperty("default",self.checkboxDefaultProfile.get_active())
config.SaveWiredNetworkProfile(self.comboProfileNames.get_active_text())
def changeProfile(self,widget):
if self.comboProfileNames.get_active() > -1: #this way the name doesn't change
@@ -527,6 +564,11 @@ class WiredNetworkEntry(NetworkEntry):
self.txtDNS1.set_text(noneToBlankString(wired.GetWiredProperty("dns1")))
self.txtDNS2.set_text(noneToBlankString(wired.GetWiredProperty("dns2")))
self.txtDNS3.set_text(noneToBlankString(wired.GetWiredProperty("dns3")))
self.txtBeforeScript.set_text(noneToBlankString(wired.GetWiredProperty("beforescript")))
self.txtAfterScript.set_text(noneToBlankString(wired.GetWiredProperty("afterscript")))
self.checkboxDefaultProfile.set_active(stringToBoolean(wired.GetWiredProperty("default")))
self.resetStaticCheckboxes()
class WirelessNetworkEntry(NetworkEntry):
@@ -575,6 +617,9 @@ class WirelessNetworkEntry(NetworkEntry):
self.txtDNS2.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"dns2")))
self.txtDNS3.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"dns3")))
self.txtBeforeScript.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"beforescript")))
self.txtAfterScript.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"afterscript")))
self.resetStaticCheckboxes()
encryptionTypes = misc.LoadEncryptionMethods()
@@ -965,6 +1010,15 @@ class appGui:
print "no encryption specified..."
wireless.SetWirelessProperty(networkid,"enctype",noneToString(None))
# Script info
before_script = networkentry.expander.txtBeforeScript.get_text()
after_script = networkentry.expander.txtAfterScript.get_text()
wireless.SetWirelessProperty(networkid,"beforescript",noneToString(before_script))
wireless.SetWirelessProperty(networkid,"afterscript",noneToString(after_script))
wireless.SetBeforeScript(before_script)
wireless.SetAfterScript(after_script)
# if it exists. maybe kept as a value in the network entry? Not sure...
print "connecting to wireless network..."
config.SaveWirelessNetworkProfile(networkid)
wireless.ConnectWireless(networkid)
@@ -988,7 +1042,15 @@ class appGui:
wired.SetWiredProperty("dns1",'')
wired.SetWiredProperty("dns2",'')
wired.SetWiredProperty("dns3",'')
#Script Info
before_script = networkentry.expander.txtBeforeScript.get_text()
after_script = networkentry.expander.txtAfterScript.get_text()
wired.SetWiredProperty("beforescript",noneToString(before_script))
wired.SetWiredProperty("afterscript",noneToString(after_script))
wired.SetBeforeScript(before_script)
wired.SetAfterScript(after_script)
config.SaveWiredNetworkProfile(networkentry.expander.comboProfileNames.get_active_text())
wired.ConnectWired()

View File

@@ -26,6 +26,8 @@ class Wireless:
wired_interface = None
wpa_driver = None
ConnectingThread = None
before_script = None
after_script = None
#Create a function to scan for wireless networks
def Scan(self,essid=None):
@@ -189,7 +191,7 @@ class Wireless:
def Connect(self,network):
#call the thread, so we don't hang up the entire works
self.ConnectingThread = self.ConnectThread(network,self.wireless_interface,self.wired_interface,self.wpa_driver)
self.ConnectingThread = self.ConnectThread(network,self.wireless_interface,self.wired_interface,self.wpa_driver,self.before_script,self.after_script)
self.ConnectingThread.start()
return True
@@ -199,13 +201,15 @@ class Wireless:
ShouldDie = False
lock = thread.allocate_lock()
def __init__(self,network,wireless,wired,wpa_driver):
def __init__(self,network,wireless,wired,wpa_driver,before_script,after_script):
threading.Thread.__init__(self)
self.network = network
self.wireless_interface = wireless
self.wired_interface = wired
self.wpa_driver = wpa_driver
self.IsConnecting = False
self.before_script = before_script
self.after_script = after_script
self.lock.acquire()
self.ConnectingMessage = 'interface_down'
self.lock.release()
@@ -228,7 +232,15 @@ class Wireless:
self.IsConnecting = True
network = self.network
self.lock.acquire()
self.ConnectingMessage = 'executing_before_script'
self.lock.release()
before_script = self.before_script
print 'before script is ', before_script
if before_script != '' and before_script != None:
print 'Executing pre-connection script'
misc.Run(before_script)
#put it down
print "interface down..."
self.lock.acquire()
@@ -357,8 +369,10 @@ class Wireless:
print "done"
self.IsConnecting = False
after_script = self.after_script
if after_script != '' and after_script != None:
print 'executing post connection script'
misc.Run(after_script)
#end function Connect
#end class Connect
@@ -436,6 +450,8 @@ class Wired:
wireless_interface = None
wired_interface = None
ConnectingThread = None
before_script = None
after_script = None
def GetIP(self):
output = misc.Run("ifconfig " + self.wired_interface)
@@ -456,7 +472,7 @@ class Wired:
def Connect(self,network):
#call the thread, so we don't hang up the entire works
self.ConnectingThread = self.ConnectThread(network,self.wireless_interface,self.wired_interface)
self.ConnectingThread = self.ConnectThread(network,self.wireless_interface,self.wired_interface,self.before_script,self.after_script)
self.ConnectingThread.start()
return True
#end function Connect
@@ -467,12 +483,14 @@ class Wired:
ConnectingMessage = None
ShouldDie = False
def __init__(self,network,wireless,wired):
def __init__(self,network,wireless,wired,before_script,after_script):
threading.Thread.__init__(self)
self.network = network
self.wireless_interface = wireless
self.wired_interface = wired
self.IsConnecting = False
self.before_script = before_script
self.after_script = after_script
self.lock.acquire()
self.ConnectingMessage = 'interface_down'
self.lock.release()
@@ -491,6 +509,12 @@ class Wired:
#but we do remove all wifi entries from the
#routing table
before_script = self.before_script
print 'before script is ', before_script
if before_script != '' and before_script != None:
print 'Executing pre-connection script'
misc.Run(before_script)
self.IsConnecting = True
network = self.network
@@ -549,7 +573,7 @@ class Wired:
misc.WriteLine(resolv,"nameserver " + network["dns2"])
if not network.get("dns3") == None:
print "setting the third dns server..."
misc.WriteLine(resolv,"nameserver " + network["dns3"]))
misc.WriteLine(resolv,"nameserver " + network["dns3"])
if not network.get("ip") == None:
self.lock.acquire()
@@ -573,5 +597,10 @@ class Wired:
self.ConnectingMessage = 'done'
self.lock.release()
self.IsConnecting = False
after_script = self.after_script
if after_script != '' and after_script != None:
print 'executing post connection script'
misc.Run(after_script)
#end function run