1
0
mirror of https://github.com/gryf/wicd.git synced 2026-01-07 14:24:22 +01:00

Merged with r291 of experimental-nacl

This commit is contained in:
Andrew Psaltis
2009-02-28 11:32:29 -05:00
11 changed files with 128 additions and 112 deletions

View File

@@ -23,3 +23,4 @@ scripts/wicd-client
scripts/wicd-curses
translations/*
wicd/wpath.py
*tags

View File

@@ -192,11 +192,16 @@ class AdvancedSettingsDialog(urwid.WidgetWrap):
self.overlay.mouse_event( dim,
event, button, col, row,
focus=True)
k = self.overlay.keypress(dim, k)
if k in ('up','page up'):
self._w.set_focus('body')
elif k in ('down','page down'):
self._w.set_focus('footer')
else:
k = self.overlay.keypress(dim, k)
if k in ('up','page up'):
self._w.set_focus('body')
# Until I figure out a better way to do this, then this will
# have to do.
self._w.body.get_focus()[0].get_focus()._invalidate()
#self._w.body.keypress(dim,'down')
elif k in ('down','page down'):
self._w.set_focus('footer')
if "window resize" in keys:
dim = ui.get_cols_rows()

View File

@@ -5,6 +5,7 @@
# This is defined in /usr/lib/python2.5/site-packages/wicd/wpath.py
PIDFILE="%PIDFILE%"
DAEMON="%SBIN%wicd"
# Define start and stop functions
@@ -15,7 +16,7 @@ wicd_start() {
echo "$PIDFILE and try again..."
exit 1
else
echo "Starting wicd daemon..."
echo "Starting wicd daemon: $DAEMON"
wicd 2>/dev/null 1>&2
fi
}

View File

@@ -10,18 +10,19 @@ fi
if [ -e "%DOCDIR%WHEREAREMYFILES" ] && [ ! -L "$HOME/.wicd/WHEREAREMYFILES" ]; then
ln -s "%DOCDIR%WHEREAREMYFILES" "$HOME/.wicd/WHEREAREMYFILES"
fi
if [ "$DISPLAY" = "" ] && [ -x "%BIN%wicd-curses" ]; then
if [ ! -f "$HOME/.wicd/CLIENT_CURSES_WARNING" ]; then
printf "NOTICE: You do not have an X server active on this console, \n"
printf "so ${BOLD}${BLUE}wicd-curses${NC} will be started instead. \n"
printf "Please see the wicd-client and/or wicd-curses manual pages \n"
printf "for more information about this error and resulting message. \n"
printf "\n"
printf "This message will not be displayed again. \n"
printf "Press enter to continue... \n"
if [ "$DISPLAY" = "" ]; then
if [ -x "%BIN%wicd-curses" ]; then
if [ ! -f "$HOME/.wicd/CLIENT_CURSES_WARNING" ]; then
printf "NOTICE: You do not have an X server active on this console, \n"
printf "so ${BOLD}${BLUE}wicd-curses${NC} will be started instead. \n"
printf "Please see the wicd-client and/or wicd-curses manual pages \n"
printf "for more information about this error and resulting message. \n"
printf "\n"
printf "This message will not be displayed again. \n"
printf "Press enter to continue... \n"
read _junk
cat >> "$HOME/.wicd/CLIENT_CURSES_WARNING" << EOF
read _junk
cat >> "$HOME/.wicd/CLIENT_CURSES_WARNING" << EOF
The wicd-client script checks for the existence of this file to determine
whether it should warn the user before launching wicd-curses instead, in
the event of the gui client being launched outside of the X Window environment.
@@ -29,8 +30,16 @@ the event of the gui client being launched outside of the X Window environment.
If you delete this file, then wicd-client will print the warning if it is
launched outside of X (and then recreate this file again).
EOF
fi
exec %BIN%wicd-curses
fi
fi
exec %BIN%wicd-curses
else
printf "NOTICE: You do not have an X server active on this console, \n"
printf "but you do not appear to have ${BOLD}${BLUE}wicd-curses${NC}\n"
printf "installed on this system. We'd normally be running it here.\n"
printf "Please see the wicd-client manual page for more information.\n"
exec python -O %LIB%wicd-client.py $@
fi
else
exec python -O %LIB%wicd-client.py $@
fi

View File

@@ -28,7 +28,7 @@ import subprocess
VERSION_NUM = '1.6.0a1'
# REVISION_NUM is automatically updated
REVISION_NUM = 'unknown'
CURSES_REVNO = 'r278'
CURSES_REVNO = 'r279'
try:
if not os.path.exists('vcsinfo.py'):

View File

@@ -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,17 +310,10 @@ 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['qual_found'] = False
ap['quality'] = -1
ap['quality'] = self._get_link_quality(cell['stats'])
if ap['quality'] is None:
ap['qual_found'] = False
ap['quality'] = -1
# Signal Strength (only used if user doesn't want link
# quality displayed or it isn't found)
@@ -338,7 +330,7 @@ class WirelessInterface(Interface, wnettools.BaseWirelessInterface):
socket_loc = os.path.join(ctrl_iface, self.iface)
if os.path.exists(socket_loc):
try:
return wpactrl.WPACtrl(socket)
return wpactrl.WPACtrl(socket_loc)
except wpactrl.error, e:
print "Couldn't open ctrl_interface: %s" % e
return None
@@ -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. """

View File

@@ -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
@@ -243,9 +244,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)
@@ -690,4 +693,31 @@ def timeout_add(time, func, milli=False):
else:
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)

View File

@@ -396,7 +396,7 @@ class ConnectThread(threading.Thread):
print 'Setting the broadcast address...' + self.network['broadcast']
iface.SetAddress(broadcast=self.network['broadcast'])
@abortable
@abortable
def set_ip_address(self, iface):
""" Set the IP address for the given interface.
@@ -420,7 +420,7 @@ class ConnectThread(threading.Thread):
self.abort_connection(dhcp_status)
return
@abortable
@abortable
def set_dns_addresses(self):
""" Set the DNS address(es).
@@ -443,7 +443,7 @@ class ConnectThread(threading.Thread):
self.network.get('dns_domain'),
self.network.get('search_domain'))
@abortable
@abortable
def release_dhcp_clients(self, iface):
""" Release all running dhcp clients. """
print "Releasing DHCP leases..."
@@ -474,7 +474,7 @@ class ConnectThread(threading.Thread):
finally:
self.lock.release()
@abortable
@abortable
def put_iface_up(self, iface):
""" Bring up given interface. """
print 'Putting interface up...'
@@ -819,7 +819,7 @@ class WirelessConnectThread(ConnectThread):
print 'Stopping wpa_supplicant'
wiface.StopWPA()
@abortable
@abortable
def generate_psk_and_authenticate(self, wiface):
""" Generates a PSK and authenticates if necessary.

View File

@@ -109,12 +109,12 @@ class TrayIcon(object):
Base Class for implementing a tray icon to display network status.
"""
def __init__(self, use_tray, animate):
def __init__(self, animate):
if USE_EGG:
self.tr = self.EggTrayIconGUI(use_tray)
self.tr = self.EggTrayIconGUI()
else:
self.tr = self.StatusTrayIconGUI(use_tray)
self.icon_info = self.TrayConnectionInfo(self.tr, use_tray, animate)
self.tr = self.StatusTrayIconGUI()
self.icon_info = self.TrayConnectionInfo(self.tr, animate)
def is_embedded(self):
if USE_EGG:
@@ -125,7 +125,7 @@ class TrayIcon(object):
class TrayConnectionInfo(object):
""" Class for updating the tray icon status. """
def __init__(self, tr, use_tray=True, animate=True):
def __init__(self, tr, animate=True):
""" Initialize variables needed for the icon status methods. """
self.last_strength = -2
self.still_wired = False
@@ -133,7 +133,6 @@ class TrayIcon(object):
self.tried_reconnect = False
self.connection_lost_counter = 0
self.tr = tr
self.use_tray = use_tray
self.last_sndbytes = -1
self.last_rcvbytes = -1
self.max_snd_gain = 10000
@@ -203,7 +202,7 @@ class TrayIcon(object):
@catchdbus
def update_tray_icon(self, state=None, info=None):
""" Updates the tray icon and current connection status. """
if not self.use_tray or not DBUS_AVAIL: return False
if not DBUS_AVAIL: return False
if not state or not info:
[state, info] = daemon.GetConnectionStatus()
@@ -330,7 +329,7 @@ class TrayIcon(object):
tray icons.
"""
def __init__(self, use_tray):
def __init__(self):
menu = """
<ui>
<menubar name="Menubar">
@@ -361,7 +360,6 @@ class TrayIcon(object):
props.parent)
self.gui_win = None
self.current_icon_path = None
self.use_tray = use_tray
self._is_scanning = False
net_menuitem = self.manager.get_widget("/Menubar/Menu/Connect/")
net_menuitem.connect("activate", self.on_net_menu_activate)
@@ -571,14 +569,9 @@ class TrayIcon(object):
for machines running versions of GTK < 2.10.
"""
def __init__(self, use_tray=True):
def __init__(self):
"""Initializes the tray icon"""
TrayIcon.TrayIconGUI.__init__(self, use_tray)
self.use_tray = use_tray
if not use_tray:
self.toggle_wicd_gui()
return
TrayIcon.TrayIconGUI.__init__(self)
self.tooltip = gtk.Tooltips()
self.eb = gtk.EventBox()
self.tray = egg.trayicon.TrayIcon("WicdTrayIcon")
@@ -601,7 +594,6 @@ class TrayIcon(object):
def set_from_file(self, val=None):
""" Calls set_from_file on the gtk.Image for the tray icon. """
if not self.use_tray: return
self.pic.set_from_file(val)
def set_tooltip(self, val):
@@ -611,7 +603,6 @@ class TrayIcon(object):
tray icon.
"""
if not self.use_tray: return
self.tooltip.set_tip(self.eb, val)
@@ -622,13 +613,8 @@ class TrayIcon(object):
Uses gtk.StatusIcon to implement a tray icon.
"""
def __init__(self, use_tray=True):
TrayIcon.TrayIconGUI.__init__(self, use_tray)
self.use_tray = use_tray
if not use_tray:
self.toggle_wicd_gui()
return
def __init__(self):
TrayIcon.TrayIconGUI.__init__(self)
gtk.StatusIcon.__init__(self)
self.current_icon_path = ''
@@ -645,7 +631,6 @@ class TrayIcon(object):
def set_from_file(self, path=None):
""" Sets a new tray icon picture. """
if not self.use_tray: return
if path != self.current_icon_path:
self.current_icon_path = path
gtk.StatusIcon.set_from_file(self, path)
@@ -716,9 +701,6 @@ def main(argv):
argv -- The arguments passed to the script.
"""
use_tray = True
animate = True
try:
opts, args = getopt.getopt(sys.argv[1:], 'nha', ['help', 'no-tray',
'no-animate'])
@@ -727,6 +709,8 @@ def main(argv):
usage()
sys.exit(2)
use_tray = True
animate = True
for opt, a in opts:
if opt in ('-h', '--help'):
usage()
@@ -750,7 +734,7 @@ def main(argv):
sys.exit(0)
# Set up the tray icon GUI and backend
tray_icon = TrayIcon(use_tray, animate)
tray_icon = TrayIcon(animate)
# Check to see if wired profile chooser was called before icon
# was launched (typically happens on startup or daemon restart).
@@ -767,7 +751,8 @@ def main(argv):
'org.wicd.daemon.wireless')
bus.add_signal_receiver(tray_icon.tr.tray_scan_started,
'SendStartScanSignal', 'org.wicd.daemon.wireless')
bus.add_signal_receiver(lambda: handle_no_dbus() or tray_icon.icon_info.set_not_connected_state(),
bus.add_signal_receiver(lambda: (handle_no_dbus() or
tray_icon.icon_info.set_not_connected_state()),
"DaemonClosing", 'org.wicd.daemon')
bus.add_signal_receiver(lambda: setup_dbus(force=False), "DaemonStarting",
"org.wicd.daemon")

View File

@@ -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

View File

@@ -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.