1
0
mirror of https://github.com/gryf/wicd.git synced 2025-12-20 21:08:06 +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 the random functions library
import misc import misc
############################### ###############################
# GENERAL NOTES # GENERAL NOTES
# #
@@ -241,6 +240,16 @@ class ConnectionWizard(dbus.service.Object):
self.wifi.Disconnect() self.wifi.Disconnect()
#end function DisconnectWireless #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') @dbus.service.method('org.wicd.daemon.wireless')
def GetNumberOfNetworks(self): def GetNumberOfNetworks(self):
'''returns number of networks''' '''returns number of networks'''
@@ -254,6 +263,16 @@ class ConnectionWizard(dbus.service.Object):
self.wifi.CreateAdHocNetwork(essid,channel,ip,enctype,key,encused,ics) self.wifi.CreateAdHocNetwork(essid,channel,ip,enctype,key,encused,ics)
#end function CreateAdHocNetwork #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') @dbus.service.method('org.wicd.daemon.wireless')
def GetAutoReconnect(self): def GetAutoReconnect(self):
do = bool(int(self.auto_reconnect)) do = bool(int(self.auto_reconnect))
@@ -305,6 +324,18 @@ class ConnectionWizard(dbus.service.Object):
#self.GetWiredIP() #self.GetWiredIP()
time.sleep(1) time.sleep(1)
print "autoconnecting... done" 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: else:
print 'autoconnect failed because wireless interface == None' print 'autoconnect failed because wireless interface == None'
#end function AutoConnect #end function AutoConnect
@@ -369,7 +400,9 @@ class ConnectionWizard(dbus.service.Object):
#CheckIfWirelessConnecting can be used to test if the connection #CheckIfWirelessConnecting can be used to test if the connection
#is done #is done
self.SetForcedDisconnect(False) 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]) return self.wifi.Connect(self.LastScan[id])
#end function Connect #end function Connect
@@ -453,6 +486,18 @@ class ConnectionWizard(dbus.service.Object):
return False return False
#end function CheckIfWiredConnecting #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') @dbus.service.method('org.wicd.daemon.wired')
def CheckWiredConnectingMessage(self): def CheckWiredConnectingMessage(self):
'''returns the wired interface\'s status message''' '''returns the wired interface\'s status message'''
@@ -515,6 +560,8 @@ class ConnectionWizard(dbus.service.Object):
def ConnectWired(self): def ConnectWired(self):
'''connects to a wired network''' '''connects to a wired network'''
#simple enough. #simple enough.
self.wired.before_script = self.GetWiredProperty("beforescript")
self.wired.after_script = self.GetWiredProperty("afterscript")
self.wired.Connect(self.WiredNetwork) self.wired.Connect(self.WiredNetwork)
########## LOG FILE STUFF ########## LOG FILE STUFF
@@ -549,10 +596,38 @@ class ConnectionWizard(dbus.service.Object):
config.set(profilename,"dns1",None) config.set(profilename,"dns1",None)
config.set(profilename,"dns2",None) config.set(profilename,"dns2",None)
config.set(profilename,"dns3",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")) config.write( open(self.wired_conf,"w"))
return True return True
#end function CreateWiredNetworkProfile #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') @dbus.service.method('org.wicd.daemon.config')
def DeleteWiredNetworkProfile(self,profilename): def DeleteWiredNetworkProfile(self,profilename):
print "deleting profile for " + str(profilename) print "deleting profile for " + str(profilename)
@@ -640,6 +715,15 @@ class ConnectionWizard(dbus.service.Object):
print self.LastScan[id]["bssid"] print self.LastScan[id]["bssid"]
if config.has_section(self.LastScan[id]["bssid"]): if config.has_section(self.LastScan[id]["bssid"]):
self.LastScan[id]["has_profile"] = True 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 #read the essid because we be needing to name those hidden
#wireless networks now - but only read it if it is hidden #wireless networks now - but only read it if it is hidden
if self.LastScan[id]["hidden"] == True: if self.LastScan[id]["hidden"] == True:

View File

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

68
gui.py
View File

@@ -13,7 +13,6 @@ except:
print 'Missing GTK and gtk.glade. Aborting.' print 'Missing GTK and gtk.glade. Aborting.'
sys.exit(1) sys.exit(1)
import time, os, misc, gettext, locale, gobject, dbus, dbus.service import time, os, misc, gettext, locale, gobject, dbus, dbus.service
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0): 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['create_adhoc_network'] = _('Create an Ad-Hoc Network')
language['essid'] = _('ESSID') language['essid'] = _('ESSID')
language['use_wep_encryption'] = _('Use Encryption (WEP only)') 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['use_ics'] = _('Activate Internet Connection Sharing')
language['default_wired'] = _('Use as default profile (overwrites any previous default)')
language['0'] = _('0') language['0'] = _('0')
language['1'] = _('1') language['1'] = _('1')
@@ -348,11 +351,17 @@ class NetworkEntry(gtk.Expander):
self.txtDNS1 = LabelEntry(language['dns'] + language['1']) self.txtDNS1 = LabelEntry(language['dns'] + language['1'])
self.txtDNS2 = LabelEntry(language['dns'] + language['2']) self.txtDNS2 = LabelEntry(language['dns'] + language['2'])
self.txtDNS3 = LabelEntry(language['dns'] + language['3']) 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.checkboxStaticIP = gtk.CheckButton(language['use_static_ip'])
self.checkboxStaticDNS = gtk.CheckButton(language['use_static_dns']) self.checkboxStaticDNS = gtk.CheckButton(language['use_static_dns'])
self.expanderAdvanced = gtk.Expander(language['advanced_settings']) self.expanderAdvanced = gtk.Expander(language['advanced_settings'])
self.expanderScripts = gtk.Expander(language['script_settings'])
self.vboxTop = gtk.VBox(False,0) self.vboxTop = gtk.VBox(False,0)
self.vboxAdvanced = 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.checkboxStaticIP,fill=False,expand=False)
self.vboxAdvanced.pack_start(self.txtIP,fill=False,expand=False) self.vboxAdvanced.pack_start(self.txtIP,fill=False,expand=False)
self.vboxAdvanced.pack_start(self.txtNetmask,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.txtDNS1,fill=False,expand=False)
self.vboxAdvanced.pack_start(self.txtDNS2,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.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.vboxTop.pack_end(self.expanderAdvanced,fill=False,expand=False)
self.expanderAdvanced.add(self.vboxAdvanced) self.expanderAdvanced.add(self.vboxAdvanced)
self.expanderScripts.add(self.vboxScripts)
#connect the events to the actions #connect the events to the actions
self.checkboxStaticIP.connect("toggled",self.toggleIPCheckbox) self.checkboxStaticIP.connect("toggled",self.toggleIPCheckbox)
self.checkboxStaticDNS.connect("toggled",self.toggleDNSCheckbox) self.checkboxStaticDNS.connect("toggled",self.toggleDNSCheckbox)
@@ -444,26 +457,41 @@ class WiredNetworkEntry(NetworkEntry):
self.set_label(language['wired_network']) self.set_label(language['wired_network'])
self.resetStaticCheckboxes() self.resetStaticCheckboxes()
self.comboProfileNames = gtk.combo_box_entry_new_text() self.comboProfileNames = gtk.combo_box_entry_new_text()
profileList = config.GetWiredProfileList() profileList = config.GetWiredProfileList()
if profileList: #make sure there is something in it... if profileList: #make sure there is something in it...
for x in config.GetWiredProfileList(): #add all the names to the combobox for x in config.GetWiredProfileList(): #add all the names to the combobox
self.comboProfileNames.append_text(x) self.comboProfileNames.append_text(x)
hboxTemp = gtk.HBox(False,0) 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.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_width_chars(5) #the default is a tad too long
self.profileHelp.set_padding(10,10) self.profileHelp.set_padding(10,10)
self.profileHelp.set_justify(gtk.JUSTIFY_LEFT) self.profileHelp.set_justify(gtk.JUSTIFY_LEFT)
self.profileHelp.set_line_wrap(True) self.profileHelp.set_line_wrap(True)
self.vboxTop.pack_start(self.profileHelp,fill=False,expand=False) self.vboxTop.pack_start(self.profileHelp,fill=False,expand=False)
hboxTemp.pack_start(self.comboProfileNames,fill=True,expand=True) 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(buttonOK,fill=False,expand=False)
hboxTemp.pack_start(self.buttonDelete,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 buttonOK.connect("clicked",self.addProfile) #hook up our buttons
self.buttonDelete.connect("clicked",self.removeProfile) self.buttonDelete.connect("clicked",self.removeProfile)
self.comboProfileNames.connect("changed",self.changeProfile) self.comboProfileNames.connect("changed",self.changeProfile)
self.vboxTop.pack_start(hboxTemp) 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.show_all()
self.profileHelp.hide() self.profileHelp.hide()
if profileList != None: if profileList != None:
@@ -475,12 +503,14 @@ class WiredNetworkEntry(NetworkEntry):
if not wired.GetAlwaysShowWiredInterface(): if not wired.GetAlwaysShowWiredInterface():
self.set_expanded(True) self.set_expanded(True)
self.profileHelp.show() self.profileHelp.show()
def checkEnable(self): def checkEnable(self):
profileList = config.GetWiredProfileList() profileList = config.GetWiredProfileList()
if profileList == None: if profileList == None:
self.buttonDelete.set_sensitive(False) self.buttonDelete.set_sensitive(False)
self.higherLevel.connectButton.set_sensitive(False) self.higherLevel.connectButton.set_sensitive(False)
self.vboxAdvanced.set_sensitive(False) self.vboxAdvanced.set_sensitive(False)
def addProfile(self,widget): def addProfile(self,widget):
print "adding profile" print "adding profile"
profileName = self.comboProfileNames.get_active_text() profileName = self.comboProfileNames.get_active_text()
@@ -512,6 +542,13 @@ class WiredNetworkEntry(NetworkEntry):
else: else:
self.profileHelp.hide() 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): def changeProfile(self,widget):
if self.comboProfileNames.get_active() > -1: #this way the name doesn't change if self.comboProfileNames.get_active() > -1: #this way the name doesn't change
# #everytime someone types something in # #everytime someone types something in
@@ -528,6 +565,11 @@ class WiredNetworkEntry(NetworkEntry):
self.txtDNS2.set_text(noneToBlankString(wired.GetWiredProperty("dns2"))) self.txtDNS2.set_text(noneToBlankString(wired.GetWiredProperty("dns2")))
self.txtDNS3.set_text(noneToBlankString(wired.GetWiredProperty("dns3"))) 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() self.resetStaticCheckboxes()
class WirelessNetworkEntry(NetworkEntry): class WirelessNetworkEntry(NetworkEntry):
#this class is respsponsible for creating the expander #this class is respsponsible for creating the expander
@@ -575,6 +617,9 @@ class WirelessNetworkEntry(NetworkEntry):
self.txtDNS2.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"dns2"))) self.txtDNS2.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"dns2")))
self.txtDNS3.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"dns3"))) 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() self.resetStaticCheckboxes()
encryptionTypes = misc.LoadEncryptionMethods() encryptionTypes = misc.LoadEncryptionMethods()
@@ -965,6 +1010,15 @@ class appGui:
print "no encryption specified..." print "no encryption specified..."
wireless.SetWirelessProperty(networkid,"enctype",noneToString(None)) 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..." print "connecting to wireless network..."
config.SaveWirelessNetworkProfile(networkid) config.SaveWirelessNetworkProfile(networkid)
wireless.ConnectWireless(networkid) wireless.ConnectWireless(networkid)
@@ -989,6 +1043,14 @@ class appGui:
wired.SetWiredProperty("dns2",'') wired.SetWiredProperty("dns2",'')
wired.SetWiredProperty("dns3",'') 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()) config.SaveWiredNetworkProfile(networkentry.expander.comboProfileNames.get_active_text())
wired.ConnectWired() wired.ConnectWired()

View File

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