mirror of
https://github.com/gryf/wicd.git
synced 2025-12-21 05:18:02 +01:00
Added disconnection script
Changed auto-reconnection behavior slightly to prevent possible hanging issues Changed/Added some comments
This commit is contained in:
32
daemon.py
32
daemon.py
@@ -399,6 +399,7 @@ class ConnectionWizard(dbus.service.Object):
|
||||
'''disconnects all wireless networks'''
|
||||
self.SetForcedDisconnect(True)
|
||||
self.wifi.Disconnect()
|
||||
self.wired.Disconnect()
|
||||
#end function DisconnectWireless
|
||||
|
||||
@dbus.service.method('org.wicd.daemon.wireless')
|
||||
@@ -408,6 +409,14 @@ class ConnectionWizard(dbus.service.Object):
|
||||
self.SetWirelessProperty(networkid,"beforescript",script)
|
||||
self.wifi.before_script = script
|
||||
#end function SetWirelessBeforeScript
|
||||
|
||||
@dbus.service.method('org.wicd.daemon.wireless')
|
||||
def SetWirelessDisconnectScript(self,networkid,script):
|
||||
if script == '':
|
||||
script = None
|
||||
self.SetWirelessProperty(networkid,"disconnectscript",script)
|
||||
self.wifi.disconnect_script = script
|
||||
#end function SetWirelessDisconnectScript
|
||||
|
||||
@dbus.service.method('org.wicd.daemon.wireless')
|
||||
def SetWirelessAfterScript(self,networkid,script):
|
||||
@@ -511,6 +520,7 @@ class ConnectionWizard(dbus.service.Object):
|
||||
self.SetForcedDisconnect(False)
|
||||
self.wifi.before_script = self.GetWirelessProperty(id,'beforescript')
|
||||
self.wifi.after_script = self.GetWirelessProperty(id,'afterscript')
|
||||
self.wifi.disconnect_script = self.GetWirelessProperty(id,'disconnectscript')
|
||||
print 'connecting to wireless network',self.LastScan[id]['essid']
|
||||
return self.wifi.Connect(self.LastScan[id])
|
||||
#end function Connect
|
||||
@@ -603,6 +613,15 @@ class ConnectionWizard(dbus.service.Object):
|
||||
self.SetWiredProperty("beforescript",script)
|
||||
self.wired.before_script = script
|
||||
#end function SetWiredBeforeScript
|
||||
|
||||
@dbus.service.method('org.wicd.daemon.wired')
|
||||
def SetWiredDisconnectScript(self,script):
|
||||
'''sets script to run on connection disconnect'''
|
||||
if script == '':
|
||||
script = None
|
||||
self.SetWiredProperty("disconnectscript",script)
|
||||
self.wired.disconnect_script = script
|
||||
#end function SetWirelessDisconnectScript
|
||||
|
||||
@dbus.service.method('org.wicd.daemon.wired')
|
||||
def SetWiredAfterScript(self,script):
|
||||
@@ -695,6 +714,7 @@ class ConnectionWizard(dbus.service.Object):
|
||||
#simple enough.
|
||||
self.wired.before_script = self.GetWiredProperty("beforescript")
|
||||
self.wired.after_script = self.GetWiredProperty("afterscript")
|
||||
self.wired.disconnect_script = self.GetWiredProperty("disconnectscript")
|
||||
self.wired.Connect(self.WiredNetwork)
|
||||
|
||||
########## LOG FILE STUFF
|
||||
@@ -716,7 +736,8 @@ class ConnectionWizard(dbus.service.Object):
|
||||
@dbus.service.method('org.wicd.daemon.config')
|
||||
def CreateWiredNetworkProfile(self,profilename):
|
||||
#should include: profilename,ip,netmask,gateway,dns1,dns2,dns3
|
||||
print "creating profile for " + str(profilename)
|
||||
profilename = profilename.encode('utf-8')
|
||||
print "creating profile for " + profilename
|
||||
config = ConfigParser.ConfigParser()
|
||||
config.read(self.wired_conf)
|
||||
if config.has_section(profilename):
|
||||
@@ -731,6 +752,7 @@ class ConnectionWizard(dbus.service.Object):
|
||||
config.set(profilename,"dns3",None)
|
||||
config.set(profilename,"beforescript",None)
|
||||
config.set(profilename,"afterscript",None)
|
||||
config.set(profilename,"disconnectscript",None)
|
||||
config.set(profilename,"default",False)
|
||||
config.write( open(self.wired_conf,"w"))
|
||||
return True
|
||||
@@ -765,6 +787,7 @@ class ConnectionWizard(dbus.service.Object):
|
||||
|
||||
@dbus.service.method('org.wicd.daemon.config')
|
||||
def DeleteWiredNetworkProfile(self,profilename):
|
||||
profilename = profilename.encode('utf-8')
|
||||
print "deleting profile for " + str(profilename)
|
||||
config = ConfigParser.ConfigParser()
|
||||
config.read(self.wired_conf)
|
||||
@@ -779,6 +802,7 @@ class ConnectionWizard(dbus.service.Object):
|
||||
@dbus.service.method('org.wicd.daemon.config')
|
||||
def SaveWiredNetworkProfile(self,profilename):
|
||||
#should include: profilename,ip,netmask,gateway,dns1,dns2
|
||||
profilename = profilename.encode('utf-8')
|
||||
print "setting profile for " + str(profilename)
|
||||
config = ConfigParser.ConfigParser()
|
||||
config.read(self.wired_conf)
|
||||
@@ -794,6 +818,7 @@ class ConnectionWizard(dbus.service.Object):
|
||||
@dbus.service.method('org.wicd.daemon.config')
|
||||
def ReadWiredNetworkProfile(self,profilename):
|
||||
profile = {}
|
||||
profilename = profilename.encode('utf-8')
|
||||
config = ConfigParser.ConfigParser()
|
||||
config.read(self.wired_conf)
|
||||
if config.has_section(profilename) == True:
|
||||
@@ -857,6 +882,11 @@ class ConnectionWizard(dbus.service.Object):
|
||||
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"))
|
||||
else:
|
||||
self.LastScan[id]["disconnectscript"] = 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:
|
||||
|
||||
@@ -21,7 +21,7 @@ try:
|
||||
proxy_obj = bus.get_object('org.wicd.daemon', '/org/wicd/daemon')
|
||||
print 'success'
|
||||
except:
|
||||
print 'daemon not running, running gksudo ./daemon.py...'
|
||||
print 'daemon not running...'
|
||||
import misc,time
|
||||
misc.PromptToStartDaemon()
|
||||
time.sleep(1)
|
||||
|
||||
16
edgy.py
16
edgy.py
@@ -32,7 +32,7 @@ try:
|
||||
proxy_obj = bus.get_object('org.wicd.daemon', '/org/wicd/daemon')
|
||||
print 'success'
|
||||
except:
|
||||
print 'daemon not running, running gksudo ./daemon.py...'
|
||||
print 'daemon not running...'
|
||||
import misc
|
||||
misc.PromptToStartDaemon()
|
||||
time.sleep(5)
|
||||
@@ -154,16 +154,15 @@ def auto_reconnect():
|
||||
#a disconnect is forced. People who have disconnection problems need to test it to determine if it actually works.
|
||||
#First it will attempt to reconnect to the last known wireless network, and if that fails it should run a scan and try to
|
||||
#connect to a wired network or any wireless network set to autoconnect.
|
||||
global triedReconnect
|
||||
if wireless.GetAutoReconnect() == True and daemon.CheckIfConnecting() == False and wireless.GetForcedDisconnect() == False:
|
||||
curNetID = wireless.GetCurrentNetworkID()
|
||||
print 'Trying to autoreconnect to last used network'
|
||||
if curNetID > -1:
|
||||
wireless.ConnectWireless(curNetID)
|
||||
while wireless.CheckIfWirelessConnecting() == True:
|
||||
time.sleep(1)
|
||||
if wireless.GetCurrentSignalStrength() != 0:
|
||||
print "Successfully autoreconnected."
|
||||
else:
|
||||
if curNetID > -1: #needs to be a valid network to try to connect to
|
||||
if triedReconnect == False:
|
||||
wireless.ConnectWireless(curNetID)
|
||||
triedReconnect = True
|
||||
elif triedReconnect == True and wireless.CheckIfWirelessConnecting() == False:
|
||||
print "Couldn't reconnect to last used network, scanning for an autoconnect network..."
|
||||
daemon.AutoConnect(True)
|
||||
else:
|
||||
@@ -236,6 +235,7 @@ class TrackerStatusIcon(gtk.StatusIcon):
|
||||
LastStrength = -2
|
||||
stillWired = False
|
||||
network = ''
|
||||
triedReconnect = False
|
||||
|
||||
tr=TrackerStatusIcon()
|
||||
gobject.timeout_add(3000,set_signal_image)
|
||||
|
||||
16
gui.py
16
gui.py
@@ -126,6 +126,7 @@ 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['disconnect_script'] = _('Run disconnect script')
|
||||
language['script_settings'] = _('Scripts')
|
||||
language['use_ics'] = _('Activate Internet Connection Sharing')
|
||||
language['default_wired'] = _('Use as default profile (overwrites any previous default)')
|
||||
@@ -237,7 +238,7 @@ class GreyLabel(gtk.Label):
|
||||
def __init__(self):
|
||||
gtk.Label.__init__(self)
|
||||
def set_label(self,text):
|
||||
self.set_markup("<span color=\"grey\"><i>" + text + "</i></span>")
|
||||
self.set_markup("<span color=\"#666666\"><i>" + text + "</i></span>")
|
||||
self.set_alignment(0,0)
|
||||
|
||||
########################################
|
||||
@@ -384,8 +385,10 @@ class NetworkEntry(gtk.Expander):
|
||||
#self.txtDNS3.set_text(dns_addresses[2])
|
||||
self.txtBeforeScript = LabelEntry(language['before_script'])
|
||||
self.txtAfterScript = LabelEntry(language['after_script'])
|
||||
self.txtDisconnectScript = LabelEntry(language['disconnect_script'])
|
||||
self.txtBeforeScript.label.set_size_request(200,-1)
|
||||
self.txtAfterScript.label.set_size_request(200,-1)
|
||||
self.txtDisconnectScript.label.set_size_request(200,-1)
|
||||
self.checkboxStaticIP = gtk.CheckButton(language['use_static_ip'])
|
||||
self.checkboxStaticDNS = gtk.CheckButton(language['use_static_dns'])
|
||||
self.checkboxGlobalDNS = gtk.CheckButton(language['use_global_dns'])
|
||||
@@ -407,6 +410,7 @@ class NetworkEntry(gtk.Expander):
|
||||
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.vboxScripts.pack_start(self.txtDisconnectScript,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)
|
||||
@@ -633,6 +637,7 @@ class WiredNetworkEntry(NetworkEntry):
|
||||
|
||||
self.txtBeforeScript.set_text(noneToBlankString(wired.GetWiredProperty("beforescript")))
|
||||
self.txtAfterScript.set_text(noneToBlankString(wired.GetWiredProperty("afterscript")))
|
||||
self.txtDisconnectScript.set_text(noneToBlankString(wired.GetWiredProperty("disconnectscript")))
|
||||
|
||||
self.checkboxDefaultProfile.set_active(stringToBoolean(wired.GetWiredProperty("default")))
|
||||
|
||||
@@ -694,6 +699,7 @@ class WirelessNetworkEntry(NetworkEntry):
|
||||
|
||||
self.txtBeforeScript.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"beforescript")))
|
||||
self.txtAfterScript.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"afterscript")))
|
||||
self.txtDisconnectScript.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"disconnectscript")))
|
||||
|
||||
self.resetStaticCheckboxes()
|
||||
encryptionTypes = misc.LoadEncryptionMethods()
|
||||
@@ -782,10 +788,10 @@ class WirelessNetworkEntry(NetworkEntry):
|
||||
if on and type:
|
||||
self.lblEncryption.set_label(language['secured'] + " " + str(type))
|
||||
self.set_use_markup(True)
|
||||
self.set_label(self.essid + ' <span color="grey">' + str(type) + '</span>')
|
||||
self.set_label(self.essid + ' <span color="#666666">' + str(type) + '</span>')
|
||||
if on and not type:
|
||||
self.lblEncryption.set_label(language['secured'])
|
||||
self.set_label(self.essid + ' <span color="grey">Secured</span>')
|
||||
self.set_label(self.essid + ' <span color="#666666">Secured</span>')
|
||||
if not on:
|
||||
self.lblEncryption.set_label(language['unsecured'])
|
||||
|
||||
@@ -1202,8 +1208,10 @@ class appGui:
|
||||
# Script info
|
||||
before_script = networkentry.expander.txtBeforeScript.get_text()
|
||||
after_script = networkentry.expander.txtAfterScript.get_text()
|
||||
disconnect_script = networkentry.expander.txtDisconnectScript.get_text()
|
||||
wireless.SetWirelessBeforeScript(networkid,before_script)
|
||||
wireless.SetWirelessAfterScript(networkid,after_script)
|
||||
wireless.SetWirelessDisconnectScript(networkid,disconnect_script)
|
||||
|
||||
# if it exists. maybe kept as a value in the network entry? Not sure...
|
||||
print "connecting to wireless network..."
|
||||
@@ -1233,8 +1241,10 @@ class appGui:
|
||||
#Script Info
|
||||
before_script = networkentry.expander.txtBeforeScript.get_text()
|
||||
after_script = networkentry.expander.txtAfterScript.get_text()
|
||||
disconnect_script = networkentry.expander.txtDisconnectScript.get_text()
|
||||
wired.SetWiredBeforeScript(before_script)
|
||||
wired.SetWiredAfterScript(after_script)
|
||||
wired.SetWiredDisconnectScript(disconnect_script)
|
||||
|
||||
config.SaveWiredNetworkProfile(networkentry.expander.comboProfileNames.get_active_text())
|
||||
wired.ConnectWired()
|
||||
|
||||
@@ -28,6 +28,8 @@ class Wireless:
|
||||
ConnectingThread = None
|
||||
before_script = None
|
||||
after_script = None
|
||||
disconnect_script = None
|
||||
|
||||
|
||||
#Create a function to scan for wireless networks
|
||||
def Scan(self,essid=None):
|
||||
@@ -169,13 +171,13 @@ class Wireless:
|
||||
if misc.RunRegex(wpa2_pattern,cell) == "WPA2":
|
||||
CurrentNetwork["encryption_method"] = "WPA2"
|
||||
|
||||
else: #support for ralink legacy drivers, may not work w/ hidden networks
|
||||
else: #support for ralink legacy drivers (maybe only serialmonkey enhanced), may not work w/ hidden networks
|
||||
iwpriv = misc.Run("iwpriv " + self.wireless_interface + " get_site_survey")
|
||||
lines = iwpriv.splitlines()
|
||||
lines = lines[2:]
|
||||
for x in lines:
|
||||
for x in lines: #iterate through all networks found
|
||||
info = x.split()
|
||||
if len(info) < 5 or info == None or info == '':
|
||||
if len(info) < 5 or info == None or info == '': #make sure we read in a valid entry
|
||||
break;
|
||||
if info[2] == CurrentNetwork["essid"]:
|
||||
CurrentNetwork["encryption"] = True
|
||||
@@ -195,11 +197,11 @@ class Wireless:
|
||||
#end If
|
||||
|
||||
if self.wpa_driver != 'ralink legacy':
|
||||
#since stength needs a -1 if the quality isn't found
|
||||
#since strength needs a -1 if the quality isn't found
|
||||
#we need a simple if then to set it
|
||||
if misc.RunRegex(strength_pattern,cell):
|
||||
CurrentNetwork["quality"] = misc.RunRegex(strength_pattern,cell)
|
||||
elif misc.RunRegex(altstrength_pattern,cell):
|
||||
elif misc.RunRegex(altstrength_pattern,cell): #alternate way of labeling link quality used by some drivers
|
||||
CurrentNetwork["quality"] = misc.RunRegex(altstrength_pattern,cell)
|
||||
else:
|
||||
CurrentNetwork["quality"] = -1
|
||||
@@ -254,7 +256,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.before_script,self.after_script,self.global_dns_1,self.global_dns_2,self.global_dns_3)
|
||||
self.ConnectingThread = self.ConnectThread(network,self.wireless_interface,self.wired_interface,self.wpa_driver,self.before_script,self.after_script,self.disconnect_script,self.global_dns_1,self.global_dns_2,self.global_dns_3)
|
||||
self.ConnectingThread.start()
|
||||
return True
|
||||
|
||||
@@ -264,7 +266,7 @@ class Wireless:
|
||||
ShouldDie = False
|
||||
lock = thread.allocate_lock()
|
||||
|
||||
def __init__(self,network,wireless,wired,wpa_driver,before_script,after_script,gdns1,gdns2,gdns3):
|
||||
def __init__(self,network,wireless,wired,wpa_driver,before_script,after_script,disconnect_script,gdns1,gdns2,gdns3):
|
||||
threading.Thread.__init__(self)
|
||||
self.network = network
|
||||
self.wireless_interface = wireless
|
||||
@@ -273,6 +275,7 @@ class Wireless:
|
||||
self.IsConnecting = False
|
||||
self.before_script = before_script
|
||||
self.after_script = after_script
|
||||
self.disconnect_script = disconnect_script
|
||||
|
||||
self.global_dns_1 = gdns1
|
||||
self.global_dns_2 = gdns2
|
||||
@@ -301,6 +304,7 @@ class Wireless:
|
||||
self.IsConnecting = True
|
||||
network = self.network
|
||||
|
||||
#execute pre-connection script if necessary
|
||||
if self.before_script != '' and self.before_script != None:
|
||||
print 'Executing pre-connection script'
|
||||
print misc.Run('./run-script.py ' + self.before_script)
|
||||
@@ -511,6 +515,7 @@ class Wireless:
|
||||
print "done"
|
||||
self.IsConnecting = False
|
||||
|
||||
#execute post-connection script if necessary
|
||||
if self.after_script != '' and self.after_script != None:
|
||||
print 'executing post connection script'
|
||||
print misc.Run('./run-script.py ' + self.after_script)
|
||||
@@ -520,7 +525,11 @@ class Wireless:
|
||||
def GetSignalStrength(self):
|
||||
output = misc.Run("iwconfig " + self.wireless_interface)
|
||||
strength_pattern = re.compile('.*Quality:?=? ?(\d+)',re.DOTALL | re.I | re.M | re.S)
|
||||
return misc.RunRegex(strength_pattern,output)
|
||||
altstrength_pattern = re.compile('.*Signal level:?=? ?(\d\d*)',re.DOTALL | re.I | re.M | re.S)
|
||||
strength = misc.RunRegex(strength_pattern,output)
|
||||
if strength == None:
|
||||
strength = misc.RunRegex(altstrength_pattern,output)
|
||||
return strength
|
||||
#end function GetSignalStrength
|
||||
|
||||
def GetCurrentNetwork(self):
|
||||
@@ -578,8 +587,9 @@ class Wireless:
|
||||
return misc.RunRegex(re.compile('(\w*)\s*\w*\s*[a-zA-Z0-9.-_]*\s*(?=ESSID)',re.DOTALL | re.I | re.M | re.S),misc.Run("iwconfig"))
|
||||
|
||||
def Disconnect(self):
|
||||
misc.Run('ifconfig ' + self.wired_interface + ' 0.0.0.0')
|
||||
misc.Run('ifconfig ' + self.wired_interface + ' down')
|
||||
if self.disconnect_script != None:
|
||||
print 'running wireless network disconnect script'
|
||||
misc.Run(self.disconnect_script)
|
||||
misc.Run('ifconfig ' + self.wireless_interface + ' 0.0.0.0')
|
||||
misc.Run('ifconfig ' + self.wireless_interface + ' down')
|
||||
|
||||
@@ -593,6 +603,7 @@ class Wired:
|
||||
ConnectingThread = None
|
||||
before_script = None
|
||||
after_script = None
|
||||
disconnect_script = None
|
||||
|
||||
def GetIP(self):
|
||||
output = misc.Run("ifconfig " + self.wired_interface)
|
||||
@@ -613,7 +624,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.before_script,self.after_script)
|
||||
self.ConnectingThread = self.ConnectThread(network,self.wireless_interface,self.wired_interface,self.before_script,self.after_script,self.disconnect_script)
|
||||
self.ConnectingThread.start()
|
||||
return True
|
||||
#end function Connect
|
||||
@@ -624,7 +635,7 @@ class Wired:
|
||||
ConnectingMessage = None
|
||||
ShouldDie = False
|
||||
|
||||
def __init__(self,network,wireless,wired,before_script,after_script):
|
||||
def __init__(self,network,wireless,wired,before_script,after_script,disconnect_script):
|
||||
threading.Thread.__init__(self)
|
||||
self.network = network
|
||||
self.wireless_interface = wireless
|
||||
@@ -632,6 +643,7 @@ class Wired:
|
||||
self.IsConnecting = False
|
||||
self.before_script = before_script
|
||||
self.after_script = after_script
|
||||
self.disconnect_script = disconnect_script
|
||||
self.lock.acquire()
|
||||
self.ConnectingMessage = 'interface_down'
|
||||
self.lock.release()
|
||||
@@ -740,3 +752,11 @@ class Wired:
|
||||
print 'executing post connection script'
|
||||
misc.Run('./run-script.py ' + self.after_script)
|
||||
#end function run
|
||||
|
||||
def Disconnect(self):
|
||||
print 'wired disconnect running'
|
||||
if self.disconnect_script != None:
|
||||
print 'running wired network disconnect script'
|
||||
misc.Run(self.disconnect_script)
|
||||
misc.Run('ifconfig ' + self.wired_interface + ' 0.0.0.0')
|
||||
misc.Run('ifconfig ' + self.wired_interface + ' down')
|
||||
|
||||
Reference in New Issue
Block a user