mirror of
https://github.com/gryf/wicd.git
synced 2025-12-20 21:08:06 +01:00
Merge
This commit is contained in:
@@ -23,3 +23,4 @@ scripts/wicd-client
|
||||
scripts/wicd-curses
|
||||
translations/*
|
||||
wicd/wpath.py
|
||||
*tags
|
||||
|
||||
@@ -33,8 +33,7 @@ from wicd import misc
|
||||
from wicd import wnettools
|
||||
from wicd import wpath
|
||||
from wicd.wnettools import *
|
||||
from wicd.wnettools import strength_pattern, altstrength_pattern, wep_pattern, \
|
||||
signaldbm_pattern
|
||||
from wicd.wnettools import wep_pattern, signaldbm_pattern
|
||||
|
||||
import iwscan
|
||||
import wpactrl
|
||||
@@ -311,15 +310,8 @@ class WirelessInterface(Interface, wnettools.BaseWirelessInterface):
|
||||
|
||||
# Link Quality
|
||||
ap['qual_found'] = True
|
||||
try:
|
||||
[(strength, max_strength)] = strength_pattern.findall(cell["stats"])
|
||||
if max_strength:
|
||||
ap["quality"] = 100 * int(strength) // int(max_strength)
|
||||
else:
|
||||
ap["quality"] = int(strength)
|
||||
except ValueError:
|
||||
ap['quality'] = misc.RunRegex(altstrength_pattern,cell["stats"])
|
||||
if not ap['quality']:
|
||||
ap['quality'] = self._get_link_quality(cell['stats'])
|
||||
if ap['quality'] is None:
|
||||
ap['qual_found'] = False
|
||||
ap['quality'] = -1
|
||||
|
||||
@@ -498,10 +490,12 @@ class WirelessInterface(Interface, wnettools.BaseWirelessInterface):
|
||||
buff = get_iw_ioctl_result(self.iface, SIOCGIWSTATS)
|
||||
strength = ord(buff[2])
|
||||
max_strength = self._get_max_strength()
|
||||
if strength and max_strength:
|
||||
if strength not in ['', None] and max_strength:
|
||||
return 100 * int(strength) // int(max_strength)
|
||||
|
||||
return strength
|
||||
elif strength not in ['', None]:
|
||||
return int(strength)
|
||||
else:
|
||||
return None
|
||||
|
||||
def _get_max_strength(self):
|
||||
""" Gets the maximum possible strength from the wireless driver. """
|
||||
|
||||
36
wicd/misc.py
36
wicd/misc.py
@@ -26,6 +26,7 @@ import gobject
|
||||
from threading import Thread
|
||||
from subprocess import Popen, STDOUT, PIPE, call
|
||||
from commands import getoutput
|
||||
from itertools import repeat, chain, izip
|
||||
|
||||
# wicd imports
|
||||
import wpath
|
||||
@@ -254,9 +255,11 @@ def ParseEncryption(network):
|
||||
|
||||
# Write the data to the files then chmod them so they can't be read
|
||||
# by normal users.
|
||||
f = open(wpath.networks + network["bssid"].replace(":", "").lower(), "w")
|
||||
os.chmod(wpath.networks + network["bssid"].replace(":", "").lower(), 0600)
|
||||
os.chown(wpath.networks + network["bssid"].replace(":", "").lower(), 0, 0)
|
||||
file_loc = os.path.join(wpath.networks,
|
||||
network['bssid'].replace(":", "").lower())
|
||||
f = open(file_loc, "w")
|
||||
os.chmod(file_loc, 0600)
|
||||
os.chown(file_loc, 0, 0)
|
||||
# We could do this above, but we'd like to read protect
|
||||
# them before we write, so that it can't be read.
|
||||
f.write(config_file)
|
||||
@@ -702,3 +705,30 @@ def timeout_add(time, func, milli=False):
|
||||
if not milli: time = time * 1000
|
||||
return gobject.timeout_add(time, func)
|
||||
|
||||
def izip_longest(*args, **kwds):
|
||||
""" Implement the itertools.izip_longest method.
|
||||
|
||||
We implement the method here because its new in Python 2.6.
|
||||
|
||||
"""
|
||||
# izip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
|
||||
fillvalue = kwds.get('fillvalue')
|
||||
def sentinel(counter = ([fillvalue]*(len(args)-1)).pop):
|
||||
yield counter() # yields the fillvalue, or raises IndexError
|
||||
fillers = repeat(fillvalue)
|
||||
iters = [chain(it, sentinel(), fillers) for it in args]
|
||||
try:
|
||||
for tup in izip(*iters):
|
||||
yield tup
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
def grouper(n, iterable, fillvalue=None):
|
||||
""" Iterate over several elements at once
|
||||
|
||||
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
|
||||
|
||||
"""
|
||||
args = [iter(iterable)] * n
|
||||
return izip_longest(fillvalue=fillvalue, *args)
|
||||
|
||||
|
||||
@@ -1053,7 +1053,7 @@ class WirelessDaemon(dbus.service.Object):
|
||||
""" Returns the current signal strength. """
|
||||
try:
|
||||
strength = int(self.wifi.GetSignalStrength(iwconfig))
|
||||
except:
|
||||
except TypeError:
|
||||
strength = 0
|
||||
return strength
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ essid_pattern = re.compile('.*ESSID:"?(.*?)"?\s*\n', __re_mode)
|
||||
ap_mac_pattern = re.compile('.*Address: (.*?)\n', __re_mode)
|
||||
channel_pattern = re.compile('.*Channel:? ?(\d\d?)', __re_mode)
|
||||
strength_pattern = re.compile('.*Quality:?=? ?(\d+)\s*/?\s*(\d*)', __re_mode)
|
||||
altstrength_pattern = re.compile('.*Signal level:?=? ?(\d\d*)', __re_mode)
|
||||
altstrength_pattern = re.compile('.*Signal level:?=? ?(\d+)\s*/?\s*(\d*)', __re_mode)
|
||||
signaldbm_pattern = re.compile('.*Signal level:?=? ?(-\d\d*)', __re_mode)
|
||||
mode_pattern = re.compile('.*Mode:(.*?)\n', __re_mode)
|
||||
freq_pattern = re.compile('.*Frequency:(.*?)\n', __re_mode)
|
||||
@@ -383,7 +383,7 @@ class BaseInterface(object):
|
||||
the connection attempt.
|
||||
|
||||
Keyword arguments:
|
||||
pipe -- stdout pipe to the dhcpcd process.
|
||||
pipe -- stdout pipe to the dhclient process.
|
||||
|
||||
Returns:
|
||||
'success' if succesful', an error code string otherwise.
|
||||
@@ -408,7 +408,7 @@ class BaseInterface(object):
|
||||
""" Determines if obtaining an IP using pump succeeded.
|
||||
|
||||
Keyword arguments:
|
||||
pipe -- stdout pipe to the dhcpcd process.
|
||||
pipe -- stdout pipe to the pump process.
|
||||
|
||||
Returns:
|
||||
'success' if succesful, an error code string otherwise.
|
||||
@@ -443,7 +443,7 @@ class BaseInterface(object):
|
||||
|
||||
while not dhcpcd_complete:
|
||||
line = pipe.readline()
|
||||
if line.startswith("Error"):
|
||||
if "Error" in line or "timed out" in line:
|
||||
dhcpcd_success = False
|
||||
dhcpcd_complete = True
|
||||
elif line == '':
|
||||
@@ -1083,18 +1083,8 @@ class BaseWirelessInterface(BaseInterface):
|
||||
|
||||
# Link Quality
|
||||
# Set strength to -1 if the quality is not found
|
||||
|
||||
# more of the patch from
|
||||
# https://bugs.launchpad.net/wicd/+bug/175104
|
||||
if (strength_pattern.match(cell)):
|
||||
[(strength, max_strength)] = strength_pattern.findall(cell)
|
||||
if max_strength:
|
||||
ap["quality"] = 100 * int(strength) // int(max_strength)
|
||||
else:
|
||||
ap["quality"] = int(strength)
|
||||
elif misc.RunRegex(altstrength_pattern,cell):
|
||||
ap['quality'] = misc.RunRegex(altstrength_pattern, cell)
|
||||
else:
|
||||
ap['quality'] = self._get_link_quality(cell)
|
||||
if ap['quality'] is None:
|
||||
ap['quality'] = -1
|
||||
|
||||
# Signal Strength (only used if user doesn't want link
|
||||
@@ -1190,6 +1180,22 @@ class BaseWirelessInterface(BaseInterface):
|
||||
bssid = misc.RunRegex(bssid_pattern, output)
|
||||
return bssid
|
||||
|
||||
def _get_link_quality(self, output):
|
||||
""" Parse out the link quality from iwlist scan or iwconfig output. """
|
||||
try:
|
||||
[(strength, max_strength)] = strength_pattern.findall(output)
|
||||
except ValueError:
|
||||
(strength, max_strength) = (None, None)
|
||||
|
||||
if strength in ['', None]:
|
||||
[(strength, max_strength)] = altstrength_pattern.findall(output)
|
||||
if strength not in ['', None] and max_strength:
|
||||
return (100 * int(strength) // int(max_strength))
|
||||
elif strength not in ["", None]:
|
||||
return int(strength)
|
||||
else:
|
||||
return None
|
||||
|
||||
def GetSignalStrength(self, iwconfig=None):
|
||||
""" Get the signal strength of the current network.
|
||||
|
||||
@@ -1203,22 +1209,7 @@ class BaseWirelessInterface(BaseInterface):
|
||||
output = misc.Run(cmd)
|
||||
else:
|
||||
output = iwconfig
|
||||
|
||||
strength_pattern = re.compile('.*Quality:?=? ?(\d+)\s*/?\s*(\d*)',
|
||||
re.I | re.M | re.S)
|
||||
altstrength_pattern = re.compile('.*Signal level:?=? ?(\d\d*)', re.I | re.M | re.S)
|
||||
[(strength, max_strength)] = strength_pattern.findall(output)
|
||||
if max_strength and strength:
|
||||
if int(max_strength) != 0:
|
||||
return 100 * int(strength) // int(max_strength)
|
||||
else:
|
||||
# Prevent a divide by zero error.
|
||||
strength = int(strength)
|
||||
|
||||
if strength is None:
|
||||
strength = misc.RunRegex(altstrength_pattern, output)
|
||||
|
||||
return strength
|
||||
return self._get_link_quality(output)
|
||||
|
||||
def GetDBMStrength(self, iwconfig=None):
|
||||
""" Get the dBm signal strength of the current network.
|
||||
|
||||
Reference in New Issue
Block a user