diff options
author | Marco Pesenti Gritti <mpgritti@gmail.com> | 2008-10-22 16:03:04 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <mpgritti@gmail.com> | 2008-10-22 16:03:04 (GMT) |
commit | 51eb47d2c0f7b7896e3a8c0ea1e2999d754af8cc (patch) | |
tree | 47a31eb2e0fa6e31fdfd431732fc269e06a5cd85 /src/jarabe/desktop/meshbox.py | |
parent | d5185f7ed4464959beed10ab30a1bc10eb9b0d36 (diff) |
Make connection to WEP work. Lots of cleanups left to
in keydialog, really just an hack to make it work there.
Diffstat (limited to 'src/jarabe/desktop/meshbox.py')
-rw-r--r-- | src/jarabe/desktop/meshbox.py | 59 |
1 files changed, 45 insertions, 14 deletions
diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py index 83474e8..ae17091 100644 --- a/src/jarabe/desktop/meshbox.py +++ b/src/jarabe/desktop/meshbox.py @@ -40,6 +40,7 @@ from jarabe.view.buddyicon import BuddyIcon from jarabe.view.pulsingicon import CanvasPulsingIcon from jarabe.desktop.snowflakelayout import SnowflakeLayout from jarabe.desktop.spreadlayout import SpreadLayout +from jarabe.desktop import keydialog from jarabe.model import bundleregistry from jarabe.model import network @@ -49,6 +50,7 @@ _NM_PATH = '/org/freedesktop/NetworkManager' _NM_DEVICE_IFACE = 'org.freedesktop.NetworkManager.Device' _NM_WIRELESS_IFACE = 'org.freedesktop.NetworkManager.Device.Wireless' _NM_ACCESSPOINT_IFACE = 'org.freedesktop.NetworkManager.AccessPoint' +_NM_ACTIVE_CONN_IFACE = 'org.freedesktop.NetworkManager.Connection.Active' _ICON_NAME = 'network-wireless' @@ -65,6 +67,7 @@ class AccessPointView(CanvasPulsingIcon): self._name = '' self._strength = 0 self._flags = 0 + self._wpa_flags = 0 self._device_state = None self._active = True @@ -138,12 +141,15 @@ class AccessPointView(CanvasPulsingIcon): self._update_state() def _update_properties(self, props): + logging.debug(props) if 'Ssid' in props: self._name = props['Ssid'] if 'Strength' in props: self._strength = props['Strength'] if 'Flags' in props: self._flags = props['Flags'] + if 'WpaFlags' in props: + self._wpa_flags = props['WpaFlags'] self._update() @@ -239,10 +245,14 @@ class AccessPointView(CanvasPulsingIcon): conn = network.find_connection(self._name) if conn is None: info = { 'connection': { 'id' : 'Auto ' + self._name, - 'uuid' : unique_id(), - 'type' : '802-11-wireless' } , - '802-11-wireless' : { 'ssid': self._name } + 'uuid' : unique_id(), + 'type' : '802-11-wireless' } , + '802-11-wireless' : { 'ssid': self._name } } + + if self._flags == network.AP_FLAGS_802_11_PRIVACY: + info["802-11-wireless-security"] = { "key-mgmt": "none" } + conn = network.add_connection(self._name, info) obj = self._bus.get_object(_NM_SERVICE, _NM_PATH) @@ -263,6 +273,9 @@ class AccessPointView(CanvasPulsingIcon): self._greyed_out = self._name.lower().find(query) == -1 self._update_state() + def create_keydialog(self, reply, error): + keydialog.create(self._name, self._wpa_flags, reply, error) + def disconnect(self): self._bus.remove_signal_receiver(self.__ap_properties_changed_cb, signal_name='PropertiesChanged', @@ -502,17 +515,18 @@ class NetworkManagerObserver(object): self._box = box self._bus = dbus.SystemBus() self._devices = {} + self._netmgr = None def listen(self): try: obj = self._bus.get_object(_NM_SERVICE, _NM_PATH) - netmgr = dbus.Interface(obj, _NM_IFACE) + self._netmgr = dbus.Interface(obj, _NM_IFACE) except dbus.DBusException: logging.debug('%s service not available', _NM_SERVICE) return - netmgr.GetDevices(reply_handler=self._get_devices_reply_cb, - error_handler=self._get_devices_error_cb) + self._netmgr.GetDevices(reply_handler=self.__get_devices_reply_cb, + error_handler=self.__get_devices_error_cb) self._bus.add_signal_receiver(self.__device_added_cb, signal_name='DeviceAdded', @@ -521,11 +535,27 @@ class NetworkManagerObserver(object): signal_name='DeviceRemoved', dbus_interface=_NM_DEVICE_IFACE) - def _get_devices_reply_cb(self, devices_o): + settings = network.get_settings() + settings.secrets_request.connect(self.__secrets_request_cb) + + def __secrets_request_cb(self, **kwargs): + netmgr_props = dbus.Interface( + self._netmgr, 'org.freedesktop.DBus.Properties') + active_connections_o = netmgr_props.Get(_NM_IFACE, 'ActiveConnections') + + for conn_o in active_connections_o: + obj = self._bus.get_object(_NM_IFACE, conn_o) + props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties') + ap_o = props.Get(_NM_ACTIVE_CONN_IFACE, 'SpecificObject') + + ap_view = self._box.access_points[ap_o] + ap_view.create_keydialog(kwargs['reply'], kwargs['error']) + + def __get_devices_reply_cb(self, devices_o): for dev_o in devices_o: self._check_device(dev_o) - def _get_devices_error_cb(self, err): + def __get_devices_error_cb(self, err): logging.error('Failed to get devices: %s', err) def _check_device(self, device_o): @@ -556,10 +586,11 @@ class MeshBox(gtk.VBox): gobject.GObject.__init__(self) + self.access_points = {} + self._model = neighborhood.get_model() self._buddies = {} self._activities = {} - self._access_points = {} self._mesh = {} self._buddy_to_activity = {} self._suspended = True @@ -696,24 +727,24 @@ class MeshBox(gtk.VBox): if hasattr(icon, 'set_filter'): icon.set_filter(self._query) - self._access_points[ap.object_path] = icon + self.access_points[ap.object_path] = icon def remove_access_point(self, ap_o): - icon = self._access_points[ap_o] + icon = self.access_points[ap_o] icon.disconnect() self._layout.remove(icon) - del self._access_points[ap_o] + del self.access_points[ap_o] def suspend(self): if not self._suspended: self._suspended = True - for ap in self._access_points.values(): + for ap in self.access_points.values(): ap.props.paused = True def resume(self): if self._suspended: self._suspended = False - for ap in self._access_points.values(): + for ap in self.access_points.values(): ap.props.paused = False def _toolbar_query_changed_cb(self, toolbar, query): |