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

Added support for ralink legacy cards, implemented a debug mode option, swapped order that autoconnect uses, fixed some indentation issues, changed/added some comments

This commit is contained in:
imdano
2007-07-16 06:34:23 +00:00
parent e55ac1fcba
commit c047b9ed45
4 changed files with 281 additions and 158 deletions

103
daemon.py
View File

@@ -252,6 +252,23 @@ class ConnectionWizard(dbus.service.Object):
return str(self.wifi.wireless_interface)
#end function GetWirelessInterface
<<<<<<< .mine
@dbus.service.method('org.wicd.daemon')
def SetDebugMode(self,debug):
'''sets if debugging mode is on or off'''
config = ConfigParser.ConfigParser()
config.read(self.app_conf)
config.set("Settings","debug_mode",debug)
configfile = open(self.app_conf,"w")
config.write(configfile)
self.debug_mode = debug
@dbus.service.method('org.wicd.daemon')
def GetDebugMode(self):
'''returns whether debugging is enabled'''
return bool(int(self.debug_mode))
=======
@dbus.service.method('org.wicd.daemon')
def GetGlobalDNSAddresses(self):
'''returns the global dns addresses'''
@@ -259,6 +276,7 @@ class ConnectionWizard(dbus.service.Object):
return (self.dns1,self.dns2,self.dns3)
#end function GetWirelessInterface
>>>>>>> .r63
########## WIRELESS FUNCTIONS
#################################
@@ -284,6 +302,7 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.wireless')
def DisconnectWireless(self):
'''disconnects all wireless networks'''
self.SetForcedDisconnect(True)
self.wifi.Disconnect()
#end function DisconnectWireless
@@ -307,28 +326,21 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.wireless')
def CreateAdHocNetwork(self,essid,channel,ip,enctype,key,encused,ics):
'''creates an ad-hoc network using user inputted settings'''
print 'attempting to create ad-hoc network...'
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):
'''returns if wicd should automatically try to reconnect is connection is lost'''
do = bool(int(self.auto_reconnect))
return self.__printReturn('returning automatically reconnect when connection drops',do)
#end function GetAutoReconnect
@dbus.service.method('org.wicd.daemon.wireless')
def SetAutoReconnect(self,value):
'''sets if wicd should try to reconnect with connection drops'''
print 'setting automatically reconnect when connection drops'
config = ConfigParser.ConfigParser()
config.read(self.app_conf)
@@ -339,7 +351,21 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.wireless')
def AutoConnect(self,fresh):
'''autoconnects to a wireless network'''
'''first tries to autoconnect to a wireled network, if that fails it tries a wireless connection'''
if fresh and self.CheckPluggedIn() == True:
defaultNetwork = self.GetDefaultWiredNetwork()
if defaultNetwork != None:
self.ReadWiredNetworkProfile(defaultNetwork)
self.ConnectWired()
time.sleep(1)
print "Attempting to autoconnect with wired interface..."
while self.CheckIfWiredConnecting(): # Keeps us from going into an infinite connecting loop
time.sleep(1)
print "...done autoconnecting."
else:
print "couldn't find a default wired connection, wired autoconnect failed"
else:
print "no wired connection present, wired autoconnect failed"
print 'attempting to autoconnect to wireless network'
if fresh:
self.Scan()
@@ -350,7 +376,7 @@ class ConnectionWizard(dbus.service.Object):
if bool(self.LastScan[x].get('automatic')):
print 'automatically connecting to...',str(self.LastScan[x]["essid"])
self.ConnectWireless(x)
time.sleep(1)
time.sleep(3)
while self.CheckIfWirelessConnecting():
print "autoconnecting... hold"
#not sure why I need to get IPs, but
@@ -370,26 +396,10 @@ class ConnectionWizard(dbus.service.Object):
# think? -- adam
###
#self.GetWiredIP()
time.sleep(1)
time.sleep(2)
print "autoconnecting... done"
return
print "unable to find a network to autoconnect to, checking for a wired connection"
if self.CheckPluggedIn() == True:
defaultNetwork = self.GetDefaultWiredNetwork()
if defaultNetwork != None:
self.ReadWiredNetworkProfile(defaultNetwork)
self.ConnectWired()
time.sleep(1)
print "Attempting to autoconnect with wired interface..."
while self.CheckIfWiredConnecting(): # Keeps us from going into an infinite connecting loop
#I didn't include a self.GetWired/WirelessIP call and it seems
#to work for me...could it cause problems? - Dan
time.sleep(1)
print "...done autoconnecting."
else:
print "couldn't find a default wired connection, couldn't autoconnect"
else:
print "no wired connection present, couldn't autoconnect."
print "unable to autoconnect, you'll have to manually connect"
else:
print 'autoconnect failed because wireless interface == None'
#end function AutoConnect
@@ -843,10 +853,18 @@ class ConnectionWizard(dbus.service.Object):
else:
config.set("Settings","auto_reconnect","False")
self.auto_reconnect = False
<<<<<<< .mine
if config.has_option("Settings","debug_mode"):
self.debug_mode = config.get("Settings","debug_mode")
else:
self.debug_mode = False
config.set("Settings","debug_mode","False")
=======
if config.has_option('Settings','dns1') and config.has_option('Settings','dns2') and config.has_option('Settings','dns3'):
self.SetGlobalDNS(config.get('Settings','dns1'),config.get('Settings','dns2'),config.get('Settings','dns3'))
else:
self.SetGlobalDNS("None","None","None")
>>>>>>> .r63
else:
print "configuration file exists, no settings found, adding defaults..."
configfile = open(self.app_conf,"w")
@@ -856,6 +874,15 @@ class ConnectionWizard(dbus.service.Object):
config.set("Settings","wpa_driver","wext")
config.set("Settings","always_show_wired_interface","False")
config.set("Settings","auto_reconnect","False")
<<<<<<< .mine
config.set("Settings","debug_mode","False")
self.SetWirelessInterface("wlan0")
self.SetWiredInterface("eth0")
self.SetWPADriver("wext")
self.SetAlwaysShowWiredInterface(False)
self.SetAutoReconnect(True)
self.SetDebugMode(False)
=======
config.set("Settings","use_global_dns","False")
config.set("Settings","dns1","None")
config.set("Settings","dns2","None")
@@ -864,6 +891,7 @@ class ConnectionWizard(dbus.service.Object):
self.SetWirelessInterface(config.get("Settings","wireless_interface"))
self.SetWiredInterface(config.get("Settings","wired_interface"))
self.SetWPADriver(config.get("Settings","wpa_driver"))
>>>>>>> .r63
config.write(configfile)
else:
@@ -876,9 +904,13 @@ class ConnectionWizard(dbus.service.Object):
config.set("Settings","wired_interface","eth0")
config.set("Settings","always_show_wired_interface","False")
config.set("Settings","auto_reconnect","False")
<<<<<<< .mine
config.set("Settings","debug_mode","False")
=======
config.set("Settings","dns1","None")
config.set("Settings","dns2","None")
config.set("Settings","dns3","None")
>>>>>>> .r63
iface = self.DetectWirelessInterface()
if iface:
config.set("Settings","wireless_interface",iface)
@@ -892,7 +924,11 @@ class ConnectionWizard(dbus.service.Object):
self.SetWPADriver(config.get("Settings","wpa_driver"))
self.SetAlwaysShowWiredInterface(False)
self.SetAutoReconnect(True)
<<<<<<< .mine
self.SetDebugMode(False)
=======
self.SetGlobalDNS(None,None,None)
>>>>>>> .r63
#end If
if os.path.isfile( self.wireless_conf ):
@@ -933,12 +969,13 @@ class ConnectionWizard(dbus.service.Object):
## fork from the parent terminal
if not True: #for easy disabling
if True: #for easy disabling
try:
pid = os.fork()
if pid > 0:
# exit first parent
sys.exit(0)
except OSError, e:
print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
sys.exit(1)
@@ -960,8 +997,8 @@ if not True: #for easy disabling
#kill output
#POI:500 stdout redirection
output = FlushWriter()
#sys.stdout = output #open("data/wicd.log","w")
#sys.stderr = output
sys.stdout = output #open("data/wicd.log","w")
sys.stderr = output
print "---------------------------"
print "wicd initalizing..."

17
edgy.py
View File

@@ -40,7 +40,7 @@ except:
proxy_obj = bus.get_object('org.wicd.daemon', '/org/wicd/daemon')
except:
print 'daemon still not running, aborting.'
#daemon = dbus.Interface(proxy_obj, 'org.wicd.daemon')
daemon = dbus.Interface(proxy_obj, 'org.wicd.daemon') # Had to uncomment it
wireless = dbus.Interface(proxy_obj, 'org.wicd.daemon.wireless')
wired = dbus.Interface(proxy_obj, 'org.wicd.daemon.wired')
config = dbus.Interface(proxy_obj, 'org.wicd.daemon.config')
@@ -79,20 +79,23 @@ def open_wicd_gui():
def set_signal_image():
global LastStrength
global stillWired #keeps us from resetting the wired info over and over (I think?)
global network #declared as global so it is initialized once before it gets used in the if statement below
global stillWired #keeps us from resetting the wired info over and over
global network #declared as global so it gets initialized before initial use
# Disable logging if debugging isn't on to prevent log spam
if not daemon.GetDebugMode():
config.DisableLogging()
wired_ip = wired.GetWiredIP()
if wired.CheckPluggedIn() == True and wired_ip:
if stillWired == False:
if stillWired == False: # Only set image/tooltip if it hasn't been set already
tr.set_from_file("images/wired.png")
tr.set_tooltip(language['connected_to_wired'].replace('$A',wired_ip))
stillWired = True
lock = ''
else:
stillWired = False
wireless_ip = wireless.GetWirelessIP()
#If ip returns as None, we are probably returning from hibernation and need to force signal to 0 to avoid crashing
if wireless_ip != None:
@@ -108,7 +111,6 @@ def set_signal_image():
curNetID = wireless.GetCurrentNetworkID() #the network ID needs to be checked because a negative value here will break the tray
if signal > 0 and curNetID > -1 and wireless.GetWirelessProperty(curNetID,"encryption"):
lock = '-lock' #set the string to '-lock' so that it will display the lock picture
network = str(wireless.GetCurrentNetwork())
tr.set_tooltip(language['connected_to_wireless'].replace('$A',network).replace('$B',str(signal)).replace('$C',str(wireless_ip)))
if signal > 75:
@@ -131,7 +133,7 @@ def set_signal_image():
#This behavior could prove to be annoying, so we'll keep it in the experimental build for now
if wireless.GetAutoReconnect() == True and wireless.CheckIfWirelessConnecting() == False and wireless.GetForcedDisconnect() == False:
curNetID = wireless.GetCurrentNetworkID()
if curNetID > -1:
if curNetID > -1: #value of -1 is typically caused by hibernation and breaks the tray if passed to daemon
wireless.ConnectWireless(wireless.GetCurrentNetworkID())
if wireless.GetCurrentSignalStrength() != 0:
print "Successfully autoreconnected."
@@ -141,7 +143,10 @@ def set_signal_image():
else:
print "Scanning for an autoconnect network..."
print wireless.AutoConnect(True)
if not daemon.GetDebugMode():
config.EnableLogging()
return True
class TrackerStatusIcon(gtk.StatusIcon):

23
gui.py
View File

@@ -129,7 +129,11 @@ 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)')
<<<<<<< .mine
language['use_debug_mode'] = _('Enable debug mode')
=======
language['use_global_dns'] = _('Use global DNS servers')
>>>>>>> .r63
language['0'] = _('0')
language['1'] = _('1')
@@ -145,6 +149,7 @@ language['9'] = _('9')
language['interface_down'] = _('Putting interface down...')
language['resetting_ip_address'] = _('Resetting IP address...')
language['interface_up'] = _('Putting interface up...')
language['setting_encryption_info'] = _('Setting encryption info')
language['removing_old_connection'] = _('Removing old connection...')
language['generating_psk'] = _('Generating PSK...')
language['generating_wpa_config'] = _('Generating WPA configuration file...')
@@ -838,10 +843,12 @@ class appGui:
wiredcheckbox.set_active(wired.GetAlwaysShowWiredInterface())
reconnectcheckbox = gtk.CheckButton(language['auto_reconnect'])
reconnectcheckbox.set_active(wireless.GetAutoReconnect())
debugmodecheckbox = gtk.CheckButton(language['use_debug_mode'])
debugmodecheckbox.set_active(daemon.GetDebugMode())
wpadriverlabel = SmallLabel(language['wpa_supplicant_driver'] + ':')
wpadrivercombo = gtk.combo_box_new_text()
wpadrivercombo.set_size_request(50,-1)
wpadrivers = [ "hostap","hermes","madwifi","atmel","wext","ndiswrapper","broadcom","ipw" ]
wpadrivers = [ "hostap","hermes","madwifi","atmel","wext","ndiswrapper","broadcom","ipw","ralink legacy" ]
i = 0
found = False
for x in wpadrivers:
@@ -892,6 +899,7 @@ class appGui:
dialog.vbox.pack_start(wiredcheckbox)
dialog.vbox.pack_start(reconnectcheckbox)
dialog.vbox.pack_start(debugmodecheckbox)
dialog.vbox.set_spacing(5)
dialog.show_all()
response = dialog.run()
@@ -904,8 +912,7 @@ class appGui:
daemon.SetWPADriver(wpadrivers[wpadrivercombo.get_active()])
wired.SetAlwaysShowWiredInterface(wiredcheckbox.get_active())
wireless.SetAutoReconnect(reconnectcheckbox.get_active())
print wiredcheckbox.get_active()
print reconnectcheckbox.get_active()
daemon.SetDebugMode(debugmodecheckbox.get_active())
dialog.destroy()
else:
dialog.destroy()
@@ -944,6 +951,7 @@ class appGui:
def update_statusbar(self):
#should update the status bar
#every couple hundred milliseconds
if not daemon.GetDebugMode():
config.DisableLogging() #stop log file spam
wireless_ip = wireless.GetWirelessIP() #do this so that it doesn't lock up. don't know how or why this works
#but it does so we leave it alone :)
@@ -974,16 +982,19 @@ class appGui:
strength = str(strength)
ip = str(wireless_ip)
self.statusID=self.status_bar.push(1,language['connected_to_wireless'].replace('$A',network).replace('$B',strength).replace('$C',wireless_ip))
config.EnableLogging() #reenable logging
if not daemon.GetDebugMode():
config.EnableLogging()
return True
wired_ip = wired.GetWiredIP()
if wired_ip:
if wired.GetAlwaysShowWiredInterface() or wired.CheckPluggedIn():
self.statusID = self.status_bar.push(1,language['connected_to_wired'].replace('$A',wired_ip))
config.EnableLogging() #reenable logging
if not daemon.GetDebugMode():
config.EnableLogging()
return True
self.statusID = self.status_bar.push(1,language['not_connected'])
config.EnableLogging() #reenable logging
if not daemon.GetDebugMode():
config.EnableLogging()
return True
def refresh_networks(self,widget=None,fresh=True,hidden=None):

View File

@@ -31,7 +31,6 @@ class Wireless:
#Create a function to scan for wireless networks
def Scan(self,essid=None):
#we ask for an essid, because then we can see hidden networks
#####
@@ -120,6 +119,7 @@ class Wireless:
#since encryption needs a True or False
#we have to do a simple if then to set it
if misc.RunRegex(wep_pattern,cell) == "on":
if self.wpa_driver != 'ralink legacy':
CurrentNetwork["encryption"] = True
#set this, because if it is something else this will be overwritten
CurrentNetwork["encryption_method"] = "WEP"
@@ -129,17 +129,37 @@ 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
iwpriv = misc.Run("iwpriv " + self.wireless_interface + " get_site_survey")
lines = iwpriv.splitlines()
lines = lines[2:]
for x in lines:
info = x.split()
if len(info) < 5 or info == None or info == '':
break;
if info[2] == CurrentNetwork["essid"]:
if info[5] == 'WEP' or info[5] == 'OPEN': # Needs to be tested
CurrentNetwork["encryption_method"] = 'WEP'
elif info[5] == 'WPA-PSK':
CurrentNetwork["encrytion_method"] = 'WPA'
elif info[5] == 'WPA2-PSK':
CurrentNetwork["encryption_method"] = 'WPA2'
else:
print 'Unknown AuthMode, can\'t assign encryption_method!!'
CurrentNetwork["encryption_method"] = 'Unknown'
CurrentNetwork["quality"] = info[1][1:] #set link strength here
else:
CurrentNetwork["encryption"] = False
#end If
if self.wpa_driver != 'ralink legacy':
#since stength 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)
else:
CurrentNetwork["quality"] = -1
#end If
#add this network to the list of networks
aps[ i ] = CurrentNetwork
@@ -210,6 +230,7 @@ class Wireless:
self.IsConnecting = False
self.before_script = before_script
self.after_script = after_script
self.lock.acquire()
self.ConnectingMessage = 'interface_down'
self.lock.release()
@@ -259,14 +280,6 @@ class Wireless:
misc.Run("ifconfig " + self.wired_interface + " 0.0.0.0")
misc.Run("ifconfig " + self.wireless_interface + " 0.0.0.0")
#bring it up
print "interface up..."
self.lock.acquire()
self.ConnectingMessage = 'interface_up'
self.lock.release()
print misc.Run("ifconfig " + self.wireless_interface + " up")
print "killing wpa_supplicant, dhclient, dhclient3"
self.lock.acquire()
self.ConnectingMessage = 'removing_old_connection'
@@ -275,7 +288,7 @@ class Wireless:
misc.Run("killall dhclient dhclient3 wpa_supplicant")
#check to see if we need to generate a PSK
if self.wpa_driver != "ralink legacy": # Enhanced Ralink legacy drivers are handled later
if not network.get('key')== None:
self.lock.acquire()
self.ConnectingMessage = 'generating_psk'
@@ -297,7 +310,6 @@ class Wireless:
print "flushing the routing table..."
self.lock.acquire()
self.ConnectingMessage = 'flushing_routing_table'
self.lock.release()
@@ -306,10 +318,17 @@ class Wireless:
print "configuring the wireless interface..."
self.lock.acquire()
self.ConnectingMessage = 'configuring_interface'
self.lock.release()
#bring it up
print "interface up..."
self.lock.acquire()
self.ConnectingMessage = 'interface_up'
self.lock.release()
print misc.Run("ifconfig " + self.wireless_interface + " up")
if network["mode"].lower() == "master":
misc.Run("iwconfig " + self.wireless_interface + " mode managed")
else:
@@ -317,9 +336,46 @@ class Wireless:
misc.Run("iwconfig " + self.wireless_interface + " essid \"" + network["essid"] + "\" channel " + str(network["channel"])) + " ap " + network["bssid"]
if self.wpa_driver == "ralink legacy": #Adds support for ralink cards that can't use wpasupplicant
if network.get('key') != None:
self.lock.acquire()
self.ConnectingMessage = 'setting_encryption_info'
self.lock.release()
print 'setting up ralink encryption'
iwpriv = misc.Run("iwpriv " + self.wireless_interface + " get_site_survey")
lines = iwpriv.splitlines()
lines = lines[2:]
for x in lines:
info = x.split()
if len(info) < 5 or info == None or info == '': #probably overkill, but the last 2 won't get run anyways
break;
if info[2] == network.get("essid"):
if info[5] == 'WEP' or info[5] == 'OPEN': # Needs to be tested
print 'setting up WEP'
misc.Run("iwconfig " + self.wireless_interface + " key " + network.get('key'))
elif info[5] == 'WPA-PSK':
print 'setting up WPA-PSK'
misc.Run("iwpriv " + self.wireless_interface + " set NetworkType=" + info[6])
misc.Run("iwpriv " + self.wireless_interface + " set AuthMode=WPAPSK")
misc.Run("iwpriv " + self.wireless_interface + " set EncrypType=" + info[4])
misc.Run("iwpriv " + self.wireless_interface + " set SSID=" + info[2])
misc.Run("iwpriv " + self.wireless_interface + " set WPAPSK=" + network.get('key'))
misc.Run("iwpriv " + self.wireless_interface + " set SSID=" + info[2])
elif info[5] == 'WPA2-PSK':
print 'setting up WPA2-PSK'
misc.Run("iwpriv " + self.wireless_interface + " set NetworkType=" + info[6])
misc.Run("iwpriv " + self.wireless_interface + " set AuthMode=WPA2PSK")
misc.Run("iwpriv " + self.wireless_interface + " set EncrypType=" + info[4])
misc.Run("iwpriv " + self.wireless_interface + " set SSID=" + info[2])
misc.Run("iwpriv " + self.wireless_interface + " set WPAPSK=" + network.get('key'))
misc.Run("iwpriv " + self.wireless_interface + " set SSID=" + info[2])
else:
print 'Unknown AuthMode, can\'t complete connection process!!!'
print "done setting encryption info"
if not network.get('broadcast') == None:
self.lock.acquire()
self.ConnectingMessage = 'setting_broadcast_address'
self.lock.release()
@@ -327,6 +383,22 @@ class Wireless:
misc.Run("ifconfig " + self.wireless_interface + " broadcast " + network["broadcast"])
<<<<<<< .mine
if not network.get("dns1") == None:
self.lock.acquire()
self.ConnectingMessage = 'setting_static_dns'
self.lock.release()
print "setting the first dns server...", network["dns1"]
resolv = open("/etc/resolv.conf","w")
misc.WriteLine(resolv,"nameserver " + network["dns1"])
if not network.get("dns2") == None:
print "setting the second dns server...", network["dns2"]
misc.WriteLine(resolv,"nameserver " + network["dns2"])
if not network.get("dns3") == None:
print "setting the third dns server..."
misc.WriteLine(resolv,"nameserver " + network["dns3"])
=======
if network.get('static_dns') == True and network.get('global_dns') == False:
if not network.get("dns1") == None:
self.lock.acquire()
@@ -355,10 +427,10 @@ class Wireless:
if not self.global_dns_3 == None:
print "setting the third dns server..."
misc.WriteLine(resolv,"nameserver " + self.global_dns_3)
>>>>>>> .r63
if not network.get('ip') == None:
self.lock.acquire()
self.ConnectingMessage = 'setting_static_ip'
self.lock.release()
@@ -370,7 +442,6 @@ class Wireless:
else:
#run dhcp...
self.lock.acquire()
self.ConnectingMessage = 'running_dhcp'
self.lock.release()
@@ -619,4 +690,3 @@ class Wired:
print 'executing post connection script'
misc.Run(after_script)
#end function run