123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814 |
- From d0780d16224d7bb2ad183542337c48324fdd2185 Mon Sep 17 00:00:00 2001
- From: Giovanni Campagna <gcampagna@src.gnome.org>
- Date: Wed, 06 Apr 2011 16:11:23 +0000
- Subject: NetworkMenu: keep wirelesss networks in predictable order
- Adds a function that compares wireless networks and keeps them sorted
- at all times. Order is: first already configured connections, then
- first secure networks, then alphabtic. Also, the appearance of a new access
- point no longer causes the whole menu to be rebuilt (but it still linear
- searches for the position, I guess that could be skipped), which caused
- the addition of more code for tracking the active access point.
- https://bugzilla.gnome.org/show_bug.cgi?id=646580
- ---
- (limited to 'js/ui/status/network.js')
- diff --git a/js/ui/status/network.js b/js/ui/status/network.js
- index 6fa5642..49cb3f0 100644
- --- a/js/ui/status/network.js
- +++ b/js/ui/status/network.js
- @@ -42,6 +42,10 @@ const NM80211Mode = NetworkManager['80211Mode'];
- const NM80211ApFlags = NetworkManager['80211ApFlags'];
- const NM80211ApSecurityFlags = NetworkManager['80211ApSecurityFlags'];
-
- +// number of wireless networks that should be visible
- +// (the remaining are placed into More...)
- +const NUM_VISIBLE_NETWORKS = 5;
- +
- function macToArray(string) {
- return string.split(':').map(function(el) {
- return parseInt(el, 16);
- @@ -1036,6 +1040,7 @@ NMDeviceWireless.prototype = {
- item: null,
- accessPoints: [ ap ]
- };
- + obj.ssidText = NetworkManager.utils_ssid_to_utf8(obj.ssid);
- this._networks.push(obj);
- }
-
- @@ -1048,6 +1053,14 @@ NMDeviceWireless.prototype = {
- }
- }
- }
- + if (this.device.active_access_point) {
- + this._activeNetwork = this._networks[this._findNetwork(this.device.active_access_point)];
- + } else {
- + this._activeNetwork = null;
- + }
- + this._networks.sort(this._networkSortFunction);
- +
- + this._apChangedId = device.connect('notify::active-access-point', Lang.bind(this, this._activeApChanged));
- this._apAddedId = device.connect('access-point-added', Lang.bind(this, this._accessPointAdded));
- this._apRemovedId = device.connect('access-point-removed', Lang.bind(this, this._accessPointRemoved));
-
- @@ -1055,8 +1068,13 @@ NMDeviceWireless.prototype = {
- },
-
- destroy: function() {
- - if (this._apAddedId) {
- + if (this._apChangedId) {
- // see above for this HACK
- + GObject.Object.prototype.disconnect.call(this.device, this._apChangedId);
- + this._apChangedId = 0;
- + }
- +
- + if (this._apAddedId) {
- GObject.Object.prototype.disconnect.call(this.device, this._apAddedId);
- this._apAddedId = 0;
- }
- @@ -1122,6 +1140,19 @@ NMDeviceWireless.prototype = {
- }
- },
-
- + _activeApChanged: function() {
- + this._activeNetwork = null;
- +
- + let activeAp = this.device.active_access_point;
- +
- + if (activeAp) {
- + let pos = this._findNetwork(activeAp);
- + this._activeNetwork = this._networks[pos];
- + }
- +
- + // we don't refresh the view here, setActiveConnection will
- + },
- +
- _getApSecurityType: function(accessPoint) {
- if (accessPoint._secType)
- return accessPoint._secType;
- @@ -1151,6 +1182,32 @@ NMDeviceWireless.prototype = {
- return type;
- },
-
- + _networkSortFunction: function(one, two) {
- + let oneHasConnection = one.connections.length != 0;
- + let twoHasConnection = two.connections.length != 0;
- +
- + // place known connections first
- + // (-1 = good order, 1 = wrong order)
- + if (oneHasConnection && !twoHasConnection)
- + return -1;
- + else if (!oneHasConnection && twoHasConnection)
- + return 1;
- +
- + let oneHasSecurity = one.security != NMAccessPointSecurity.NONE;
- + let twoHasSecurity = two.security != NMAccessPointSecurity.NONE;
- +
- + // place secure connections first
- + // (we treat WEP/WPA/WPA2 the same as there is no way to
- + // take them apart from the UI)
- + if (oneHasSecurity && !twoHasSecurity)
- + return -1;
- + else if (!oneHasSecurity && twoHasSecurity)
- + return 1;
- +
- + // sort alphabetically
- + return GLib.utf8_collate(one.ssidText, two.ssidText);
- + },
- +
- _networkCompare: function(network, accessPoint) {
- if (!ssidCompare(network.ssid, accessPoint.get_ssid()))
- return false;
- @@ -1173,6 +1230,8 @@ NMDeviceWireless.prototype = {
- _accessPointAdded: function(device, accessPoint) {
- let pos = this._findNetwork(accessPoint);
- let apObj;
- + let needsupdate = false;
- +
- if (pos != -1) {
- apObj = this._networks[pos];
- if (apObj.accessPoints.indexOf(accessPoint) != -1) {
- @@ -1181,6 +1240,8 @@ NMDeviceWireless.prototype = {
- }
-
- apObj.accessPoints.push(accessPoint);
- + if (apObj.item)
- + apObj.item.updateAccessPoints(apObj.accessPoints);
- } else {
- apObj = { ssid: accessPoint.get_ssid(),
- mode: accessPoint.mode,
- @@ -1189,7 +1250,8 @@ NMDeviceWireless.prototype = {
- item: null,
- accessPoints: [ accessPoint ]
- };
- - this._networks.push(apObj);
- + apObj.ssidText = NetworkManager.utils_ssid_to_utf8(apObj.ssid);
- + needsupdate = true;
- }
-
- // check if this enables new connections for this group
- @@ -1198,12 +1260,44 @@ NMDeviceWireless.prototype = {
- if (this._connectionValidForAP(connection, accessPoint) &&
- apObj.connections.indexOf(connection) == -1) {
- apObj.connections.push(connection);
- +
- + // this potentially changes the order
- + needsupdate = true;
- }
- }
-
- - // update everything
- - this._clearSection();
- - this._createSection();
- + if (needsupdate) {
- + if (apObj.item)
- + apObj.item.destroy();
- +
- + if (pos != -1)
- + this._networks.splice(pos, 1);
- +
- + if (this._networks.length == 0) {
- + // only network in the list
- + this._networks.push(apObj);
- + this._clearSection();
- + this._createSection();
- + return;
- + }
- +
- + // skip networks that should appear earlier
- + let menuPos = 0;
- + for (pos = 0;
- + pos < this._networks.length &&
- + this._networkSortFunction(this._networks[i], apObj) < 0; ++pos) {
- + if (this._networks[pos] != this._activeNetwork)
- + menuPos++;
- + }
- +
- + // (re-)add the network
- + this._networks.splice(pos, 0, apObj);
- +
- + if (this._shouldShowConnectionList()) {
- + menuPos += (this._activeConnectionItem ? 1 : 0);
- + this._createNetworkItem(apObj, menuPos);
- + }
- + }
- },
-
- _accessPointRemoved: function(device, accessPoint) {
- @@ -1315,6 +1409,12 @@ NMDeviceWireless.prototype = {
- // remove the connection from the access point group
- connections.splice(k);
- anyauto = connections.length == 0;
- +
- + if (anyauto) {
- + // this potentially changes the sorting order
- + forceupdate = true;
- + break;
- + }
- if (apObj.item) {
- if (apObj.item instanceof PopupMenu.PopupSubMenuMenuItem) {
- let items = apObj.item.menu.getMenuItems();
- @@ -1340,6 +1440,7 @@ NMDeviceWireless.prototype = {
- }
-
- if (forceupdate || anyauto) {
- + this._networks.sort(this._networkSortFunction);
- this._clearSection();
- this._createSection();
- }
- @@ -1355,42 +1456,24 @@ NMDeviceWireless.prototype = {
- this._connections.push(obj);
-
- // find an appropriate access point
- - let any = false, forceupdate = false;
- + let forceupdate = false;
- for (let i = 0; i < this._networks.length; i++) {
- let apObj = this._networks[i];
-
- // Check if connection is valid for any of these access points
- - let any = false;
- for (let k = 0; k < apObj.accessPoints.length; k++) {
- let ap = apObj.accessPoints[k];
- if (this._connectionValidForAP(connection, ap)) {
- apObj.connections.push(connection);
- - any = true;
- + // this potentially changes the sorting order
- + forceupdate = true;
- break;
- }
- }
- -
- - if (any && this._shouldShowConnectionList()) {
- - // we need to show this connection
- - if (apObj.item && apObj.item.menu) {
- - // We're already showing the submenu for this access point
- - apObj.item.menu.addMenuItem(this._createAPItem(connection, apObj, true));
- - } else {
- - if (apObj.item)
- - apObj.item.destroy();
- - if (apObj.connections.length == 1) {
- - apObj.item = this._createAPItem(connection, apObj, false);
- - this.section.addMenuItem(apObj.item);
- - } else {
- - apObj.item = null;
- - // we need to force an update to create the submenu
- - forceupdate = true;
- - }
- - }
- - }
- }
-
- if (forceupdate) {
- + this._networks.sort(this._networkSortFunction);
- this._clearSection();
- this._createSection();
- }
- @@ -1473,6 +1556,37 @@ NMDeviceWireless.prototype = {
- return connection;
- },
-
- + _createNetworkItem: function(apObj, position) {
- + if(apObj.connections.length > 0) {
- + if (apObj.connections.length == 1)
- + apObj.item = this._createAPItem(apObj.connections[0], apObj, false);
- + else {
- + let title = apObj.ssidText;
- + apObj.item = new PopupMenu.PopupSubMenuMenuItem(title);
- + apObj.item._apObj = apObj;
- + for (let i = 0; i < apObj.connections.length; i++)
- + apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true));
- + }
- + } else {
- + apObj.item = new NMNetworkMenuItem(apObj.accessPoints);
- + apObj.item._apObj = apObj;
- + apObj.item.connect('activate', Lang.bind(this, function() {
- + let connection = this._createAutomaticConnection(apObj);
- + let accessPoints = sortAccessPoints(apObj.accessPoints);
- + this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null)
- + }));
- + }
- + if (position < NUM_VISIBLE_NETWORKS)
- + this.section.addMenuItem(apObj.item);
- + else {
- + if (!this._overflowItem) {
- + this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More..."));
- + this.section.addMenuItem(this._overflowItem);
- + }
- + this._overflowItem.menu.addMenuItem(apObj.item, position - NUM_VISIBLE_NETWORKS);
- + }
- + },
- +
- _createSection: function() {
- if (!this._shouldShowConnectionList())
- return;
- @@ -1482,47 +1596,14 @@ NMDeviceWireless.prototype = {
- this.section.addMenuItem(this._activeConnectionItem);
- }
-
- - let activeAp = this.device.active_access_point;
- - let activeApSsid = activeAp ? activeAp.get_ssid() : null;
- -
- - // we want five access points in the menu, including the active one
- - let numItems = this._activeConnection ? 4 : 5;
- + let activeOffset = this._activeConnectionItem ? 1 : 0;
-
- for(let j = 0; j < this._networks.length; j++) {
- let apObj = this._networks[j];
- - if(activeAp && ssidCompare(apObj.ssid, activeApSsid))
- + if (apObj == this._activeNetwork)
- continue;
-
- - let menuItem;
- - if(apObj.connections.length > 0) {
- - if (apObj.connections.length == 1)
- - apObj.item = this._createAPItem(apObj.connections[0], apObj, false);
- - else {
- - let title = NetworkManager.utils_ssid_to_utf8(apObj.ssid) || _("<unknown>");
- - apObj.item = new PopupMenu.PopupSubMenuMenuItem(title);
- - apObj.item._apObj = apObj;
- - for (let i = 0; i < apObj.connections.length; i++)
- - apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true));
- - }
- - } else {
- - apObj.item = new NMNetworkMenuItem(apObj.accessPoints);
- - apObj.item._apObj = apObj;
- - apObj.item.connect('activate', Lang.bind(this, function() {
- - let connection = this._createAutomaticConnection(apObj);
- - let accessPoints = sortAccessPoints(apObj.accessPoints);
- - this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null)
- - }));
- - }
- -
- - if (j < numItems)
- - this.section.addMenuItem(apObj.item);
- - else {
- - if (!this._overflowItem) {
- - this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More..."));
- - this.section.addMenuItem(this._overflowItem);
- - }
- - this._overflowItem.menu.addMenuItem(apObj.item);
- - }
- + this._createNetworkItem(apObj, j + activeOffset);
- }
- },
- };
- --
- cgit v0.9
- From 42a5531f1588ae3063e7d8ff7642e9f81c13afbd Mon Sep 17 00:00:00 2001
- From: Dan Winship <danw@gnome.org>
- Date: Wed, 27 Apr 2011 13:05:39 +0000
- Subject: network: fix a variable name
- ---
- (limited to 'js/ui/status/network.js')
- diff --git a/js/ui/status/network.js b/js/ui/status/network.js
- index 49cb3f0..d56c0b1 100644
- --- a/js/ui/status/network.js
- +++ b/js/ui/status/network.js
- @@ -1285,7 +1285,7 @@ NMDeviceWireless.prototype = {
- let menuPos = 0;
- for (pos = 0;
- pos < this._networks.length &&
- - this._networkSortFunction(this._networks[i], apObj) < 0; ++pos) {
- + this._networkSortFunction(this._networks[pos], apObj) < 0; ++pos) {
- if (this._networks[pos] != this._activeNetwork)
- menuPos++;
- }
- --
- cgit v0.9
- From c31109800b3267df433841bff08c9383a5d669cb Mon Sep 17 00:00:00 2001
- From: Dan Williams <dcbw@redhat.com>
- Date: Mon, 25 Apr 2011 22:13:12 +0000
- Subject: network: simplify connection sorting by using libnm-glib functions
- Instead of rolling our own code, use new libnm-glib functions to do
- the same thing. Requires libnm-glib as of
- 779215c742bbe29a2c66202ec7e2e6d43edeb8ff (which will be part of 0.9).
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=648648
- ---
- (limited to 'js/ui/status/network.js')
- diff --git a/js/ui/status/network.js b/js/ui/status/network.js
- index d56c0b1..bf8e272 100644
- --- a/js/ui/status/network.js
- +++ b/js/ui/status/network.js
- @@ -505,7 +505,7 @@ NMDevice.prototype = {
- },
-
- connectionValid: function(connection) {
- - throw new TypeError('Invoking pure virtual function NMDevice.connectionValid');
- + return this.device.connection_valid(connection);
- },
-
- setEnabled: function(enabled) {
- @@ -723,17 +723,6 @@ NMDeviceWired.prototype = {
- NMDevice.prototype._init.call(this, client, device, connections);
- },
-
- - connectionValid: function(connection) {
- - if (connection._type != NetworkManager.SETTING_WIRED_SETTING_NAME)
- - return false;
- -
- - let ethernetSettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRED_SETTING_NAME);
- - let fixedMac = ethernetSettings.get_mac_address();
- - if (fixedMac)
- - return macCompare(fixedMac, macToArray(this.device.perm_hw_address));
- - return true;
- - },
- -
- _createSection: function() {
- NMDevice.prototype._createSection.call(this);
-
- @@ -876,10 +865,6 @@ NMDeviceModem.prototype = {
- NMDevice.prototype._clearSection.call(this);
- },
-
- - connectionValid: function(connection) {
- - return connection._type == this._connectionType;
- - },
- -
- _createAutomaticConnection: function() {
- // FIXME: we need to summon the mobile wizard here
- // or NM will not have the necessary parameters to complete the connection
- @@ -913,18 +898,6 @@ NMDeviceBluetooth.prototype = {
- NMDevice.prototype._init.call(this, client, device, connections);
- },
-
- - connectionValid: function(connection) {
- - if (connection._type != NetworkManager.SETTING_BLUETOOTH_SETTING_NAME)
- - return false;
- -
- - let bluetoothSettings = connection.get_setting_by_name(NetworkManager.SETTING_BLUETOOTH_SETTING_NAME);
- - let fixedBdaddr = bluetoothSettings.get_bdaddr();
- - if (fixedBdaddr)
- - return macCompare(fixedBdaddr, macToArray(this.device.hw_address));
- -
- - return true;
- - },
- -
- _createAutomaticConnection: function() {
- let connection = new NetworkManager.Connection;
- connection._uuid = NetworkManager.utils_uuid_generate();
- @@ -1047,7 +1020,7 @@ NMDeviceWireless.prototype = {
- // Check if some connection is valid for this AP
- for (let j = 0; j < validConnections.length; j++) {
- let connection = validConnections[j];
- - if (this._connectionValidForAP(connection, ap) &&
- + if (ap.connection_valid(connection) &&
- obj.connections.indexOf(connection) == -1) {
- obj.connections.push(connection);
- }
- @@ -1121,7 +1094,7 @@ NMDeviceWireless.prototype = {
- if (best) {
- for (let i = 0; i < bestApObj.accessPoints.length; i++) {
- let ap = bestApObj.accessPoints[i];
- - if (this._connectionValidForAP(best, ap)) {
- + if (ap.connection_valid(best)) {
- this._client.activate_connection(best, this.device, ap.dbus_path, null);
- break;
- }
- @@ -1257,7 +1230,7 @@ NMDeviceWireless.prototype = {
- // check if this enables new connections for this group
- for (let i = 0; i < this._connections.length; i++) {
- let connection = this._connections[i].connection;
- - if (this._connectionValidForAP(connection, accessPoint) &&
- + if (accessPoint.connection_valid(connection) &&
- apObj.connections.indexOf(connection) == -1) {
- apObj.connections.push(connection);
-
- @@ -1337,7 +1310,7 @@ NMDeviceWireless.prototype = {
- item.connect('activate', Lang.bind(this, function() {
- let accessPoints = sortAccessPoints(accessPointObj.accessPoints);
- for (let i = 0; i < accessPoints.length; i++) {
- - if (this._connectionValidForAP(connection, accessPoints[i])) {
- + if (accessPoints[i].connection_valid(connection)) {
- this._client.activate_connection(connection, this.device, accessPoints[i].dbus_path, null);
- break;
- }
- @@ -1346,40 +1319,6 @@ NMDeviceWireless.prototype = {
- return item;
- },
-
- - connectionValid: function(connection) {
- - if (connection._type != NetworkManager.SETTING_WIRELESS_SETTING_NAME)
- - return false;
- -
- - let wirelessSettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SETTING_NAME);
- - let wirelessSecuritySettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SECURITY_SETTING_NAME);
- -
- - let fixedMac = wirelessSettings.get_mac_address();
- - if (fixedMac && !macCompare(fixedMac, macToArray(this.device.perm_hw_address)))
- - return false;
- -
- - if (wirelessSecuritySettings &&
- - wirelessSecuritySettings.key_mgmt != 'none' &&
- - wirelessSecuritySettings.key_mgmt != 'ieee8021x') {
- - let capabilities = this.device.wireless_capabilities;
- - if (!(capabilities & NetworkManager.DeviceWifiCapabilities.WPA) ||
- - !(capabilities & NetworkManager.DeviceWifiCapabilities.CIPHER_TKIP))
- - return false;
- - if (wirelessSecuritySettings.get_num_protos() == 1 &&
- - wirelessSecuritySettings.get_proto(0) == 'rsn' &&
- - !(capabilities & NetworkManager.DeviceWifiCapabilities.RSN))
- - return false;
- - if (wirelessSecuritySettings.get_num_pairwise() == 1 &&
- - wirelessSecuritySettings.get_pairwise(0) == 'ccmp' &&
- - !(capabilities & NetworkManager.DeviceWifiCapabilities.CIPHER_CCMP))
- - return false;
- - if (wirelessSecuritySettings.get_num_groups() == 1 &&
- - wirelessSecuritySettings.get_group(0) == 'ccmp' &&
- - !(capabilities & NetworkManager.DeviceWifiCapabilities.CIPHER_CCMP))
- - return false;
- - }
- - return true;
- - },
- -
- _clearSection: function() {
- NMDevice.prototype._clearSection.call(this);
-
- @@ -1463,7 +1402,7 @@ NMDeviceWireless.prototype = {
- // Check if connection is valid for any of these access points
- for (let k = 0; k < apObj.accessPoints.length; k++) {
- let ap = apObj.accessPoints[k];
- - if (this._connectionValidForAP(connection, ap)) {
- + if (ap.connection_valid(connection)) {
- apObj.connections.push(connection);
- // this potentially changes the sorting order
- forceupdate = true;
- @@ -1479,37 +1418,6 @@ NMDeviceWireless.prototype = {
- }
- },
-
- - _connectionValidForAP: function(connection, ap) {
- - // copied and adapted from nm-applet
- - let wirelessSettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SETTING_NAME);
- - if (!ssidCompare(wirelessSettings.get_ssid(), ap.get_ssid()))
- - return false;
- -
- - let wirelessSecuritySettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SECURITY_SETTING_NAME);
- -
- - let fixedBssid = wirelessSettings.get_bssid();
- - if (fixedBssid && !macCompare(fixedBssid, macToArray(ap.hw_address)))
- - return false;
- -
- - let fixedBand = wirelessSettings.band;
- - if (fixedBand) {
- - let freq = ap.frequency;
- - if (fixedBand == 'a' && (freq < 4915 || freq > 5825))
- - return false;
- - if (fixedBand == 'bg' && (freq < 2412 || freq > 2484))
- - return false;
- - }
- -
- - let fixedChannel = wirelessSettings.channel;
- - if (fixedChannel && fixedChannel != NetworkManager.utils_wifi_freq_to_channel(ap.frequency))
- - return false;
- -
- - if (!wirelessSecuritySettings)
- - return true;
- -
- - return wirelessSettings.ap_security_compatible(wirelessSecuritySettings, ap.flags, ap.wpa_flags, ap.rsn_flags, ap.mode);
- - },
- -
- _createActiveConnectionItem: function() {
- let activeAp = this.device.active_access_point;
- let icon, title;
- --
- cgit v0.9
- From 101a07a3d79223cc153a6c65f22acd76cbae4818 Mon Sep 17 00:00:00 2001
- From: Dan Williams <dcbw@redhat.com>
- Date: Tue, 03 May 2011 17:21:45 +0000
- Subject: network: fix handling of AP flags and enhance for 802.1x
- All WPA APs were getting set as WPA2 due to the check for privacy;
- WPA/WPA2 APs *must* set the Privacy bit according to the standard,
- so we'd never end up in the case for NMAccessPointSecurity.WPA.
- Fix that, and also add flags for WPA[2] Enterprise which we'll
- use a bit later for the first-time connect case for 802.1x enabled
- access points.
- ---
- (limited to 'js/ui/status/network.js')
- diff --git a/js/ui/status/network.js b/js/ui/status/network.js
- index bf8e272..6f0cdac 100644
- --- a/js/ui/status/network.js
- +++ b/js/ui/status/network.js
- @@ -33,8 +33,10 @@ const NMAccessPointSecurity = {
- UNKNOWN: 0,
- NONE: 1,
- WEP: 2,
- - WPA: 3,
- - WPA2: 4
- + WPA_PSK: 3,
- + WPA2_PSK: 4,
- + WPA_ENT: 5,
- + WPA2_ENT: 6
- };
-
- // small optimization, to avoid using [] all the time
- @@ -1129,26 +1131,28 @@ NMDeviceWireless.prototype = {
- _getApSecurityType: function(accessPoint) {
- if (accessPoint._secType)
- return accessPoint._secType;
- - // XXX: have this checked by someone familiar with IEEE 802.1x
-
- let flags = accessPoint.flags;
- let wpa_flags = accessPoint.wpa_flags;
- let rsn_flags = accessPoint.rsn_flags;
- let type;
- - if ( !(flags & NM80211ApFlags.PRIVACY)
- - && (wpa_flags == NM80211ApSecurityFlags.NONE)
- - && (rsn_flags == NM80211ApSecurityFlags.NONE))
- - type = NMAccessPointSecurity.NONE;
- - else if ( (flags & NM80211ApFlags.PRIVACY)
- - && (wpa_flags == NM80211ApSecurityFlags.NONE)
- - && (rsn_flags == NM80211ApSecurityFlags.NONE))
- - type = NMAccessPointSecurity.WEP;
- - else if ( !(flags & NM80211ApFlags.PRIVACY)
- - && (wpa_flags != NM80211ApSecurity.NONE)
- - && (rsn_flags != NM80211ApSecurity.NONE))
- - type = NMAccessPointSecurity.WPA;
- - else
- - type = NMAccessPointSecurity.WPA2;
- + if (rsn_flags != NM80211ApSecurityFlags.NONE) {
- + /* RSN check first so that WPA+WPA2 APs are treated as RSN/WPA2 */
- + if (rsn_flags & NM80211ApSecurityFlags.KEY_MGMT_802_1X)
- + type = NMAccessPointSecurity.WPA2_ENT;
- + else if (rsn_flags & NM80211ApSecurityFlags.KEY_MGMT_PSK)
- + type = NMAccessPointSecurity.WPA2_PSK;
- + } else if (wpa_flags != NM80211ApSecurityFlags.NONE) {
- + if (wpa_flags & NM80211ApSecurityFlags.KEY_MGMT_802_1X)
- + type = NMAccessPointSecurity.WPA_ENT;
- + else if (wpa_flags & NM80211ApSecurityFlags.KEY_MGMT_PSK)
- + type = NMAccessPointSecurity.WPA_PSK;
- + } else {
- + if (flags & NM80211ApFlags.PRIVACY)
- + type = NMAccessPointSecurity.WEP;
- + else
- + type = NMAccessPointSecurity.NONE;
- + }
-
- // cache the found value to avoid checking flags all the time
- accessPoint._secType = type;
- --
- cgit v0.9
- From ae0652d13fc2d7caa3d64f2b87d174253cae5901 Mon Sep 17 00:00:00 2001
- From: Dan Williams <dcbw@redhat.com>
- Date: Tue, 03 May 2011 18:31:45 +0000
- Subject: network: fix initial connections to WPA[2] Enterprise APs
- Call out to nm-applet to do the dirty work since the dialog of
- doom is pretty complicated and we don't have a JS equivalent
- of it for now.
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=648171
- ---
- (limited to 'js/ui/status/network.js')
- diff --git a/js/ui/status/network.js b/js/ui/status/network.js
- index 6f0cdac..ca4facf 100644
- --- a/js/ui/status/network.js
- +++ b/js/ui/status/network.js
- @@ -48,6 +48,16 @@ const NM80211ApSecurityFlags = NetworkManager['80211ApSecurityFlags'];
- // (the remaining are placed into More...)
- const NUM_VISIBLE_NETWORKS = 5;
-
- +const NMAppletHelperInterface = {
- + name: 'org.gnome.network_manager_applet',
- + methods: [
- + { name: 'ConnectToHiddenNetwork', inSignature: '', outSignature: '' },
- + { name: 'CreateWifiNetwork', inSignature: '', outSignature: '' },
- + { name: 'ConnectTo8021xNetwork', inSignature: 'oo', outSignature: '' }
- + ],
- +};
- +const NMAppletProxy = DBus.makeProxyClass(NMAppletHelperInterface);
- +
- function macToArray(string) {
- return string.split(':').map(function(el) {
- return parseInt(el, 16);
- @@ -991,6 +1001,10 @@ NMDeviceWireless.prototype = {
- this._overflowItem = null;
- this._networks = [ ];
-
- + this._applet_proxy = new NMAppletProxy(DBus.session,
- + 'org.gnome.network_manager_applet',
- + '/org/gnome/network_manager_applet');
- +
- // breaking the layers with this, but cannot call
- // this.connectionValid until I have a device
- this.device = device;
- @@ -1483,9 +1497,20 @@ NMDeviceWireless.prototype = {
- apObj.item = new NMNetworkMenuItem(apObj.accessPoints);
- apObj.item._apObj = apObj;
- apObj.item.connect('activate', Lang.bind(this, function() {
- - let connection = this._createAutomaticConnection(apObj);
- let accessPoints = sortAccessPoints(apObj.accessPoints);
- - this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null)
- + if ( (accessPoints[0]._secType == NMAccessPointSecurity.WPA2_ENT)
- + || (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) {
- + // 802.1x-enabled APs get handled by nm-applet for now...
- + this._applet_proxy.ConnectTo8021xNetworkRemote(this.device.get_path(),
- + accessPoints[0].dbus_path,
- + Lang.bind(this, function(results, err) {
- + if (err)
- + log(err);
- + }));
- + } else {
- + let connection = this._createAutomaticConnection(apObj);
- + this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null)
- + }
- }));
- }
- if (position < NUM_VISIBLE_NETWORKS)
- --
- cgit v0.9
- From 5090a4ccce87643081138272fb8a2fe687f1ed0a Mon Sep 17 00:00:00 2001
- From: Dan Williams <dcbw@redhat.com>
- Date: Tue, 03 May 2011 19:48:10 +0000
- Subject: network: request that nm-applet show the mobile broadband wizard
- Use nm-applet 0.8.999 API to call the mobile broadband wizard and
- activate the new connection.
- Fixes https://bugzilla.gnome.org/show_bug.cgi?id=649318
- ---
- (limited to 'js/ui/status/network.js')
- diff --git a/js/ui/status/network.js b/js/ui/status/network.js
- index ca4facf..756b27f 100644
- --- a/js/ui/status/network.js
- +++ b/js/ui/status/network.js
- @@ -53,7 +53,8 @@ const NMAppletHelperInterface = {
- methods: [
- { name: 'ConnectToHiddenNetwork', inSignature: '', outSignature: '' },
- { name: 'CreateWifiNetwork', inSignature: '', outSignature: '' },
- - { name: 'ConnectTo8021xNetwork', inSignature: 'oo', outSignature: '' }
- + { name: 'ConnectTo8021xNetwork', inSignature: 'oo', outSignature: '' },
- + { name: 'ConnectTo3gNetwork', inSignature: 'o', outSignature: '' }
- ],
- };
- const NMAppletProxy = DBus.makeProxyClass(NMAppletHelperInterface);
- @@ -440,7 +441,8 @@ NMDevice.prototype = {
- this._client.activate_connection(this._connections[0].connection, this.device, null, null);
- } else if (this._autoConnectionName) {
- let connection = this._createAutomaticConnection();
- - this._client.add_and_activate_connection(connection, this.device, null, null);
- + if (connection)
- + this._client.add_and_activate_connection(connection, this.device, null, null);
- }
- },
-
- @@ -620,7 +622,8 @@ NMDevice.prototype = {
- this._autoConnectionItem = new PopupMenu.PopupMenuItem(this._autoConnectionName);
- this._autoConnectionItem.connect('activate', Lang.bind(this, function() {
- let connection = this._createAutomaticConnection();
- - this._client.add_and_activate_connection(connection, this.device, null, null);
- + if (connection)
- + this._client.add_and_activate_connection(connection, this.device, null, null);
- }));
- this.section.addMenuItem(this._autoConnectionItem);
- }
- @@ -777,6 +780,10 @@ NMDeviceModem.prototype = {
- this.mobileDevice = null;
- this._connectionType = 'ppp';
-
- + this._applet_proxy = new NMAppletProxy(DBus.session,
- + 'org.gnome.network_manager_applet',
- + '/org/gnome/network_manager_applet');
- +
- this._capabilities = device.current_capabilities;
- if (this._capabilities & NetworkManager.DeviceModemCapabilities.GSM_UMTS) {
- is_wwan = true;
- @@ -878,19 +885,13 @@ NMDeviceModem.prototype = {
- },
-
- _createAutomaticConnection: function() {
- - // FIXME: we need to summon the mobile wizard here
- - // or NM will not have the necessary parameters to complete the connection
- - // pending a DBus method on nm-applet
- -
- - let connection = new NetworkManager.Connection;
- - connection._uuid = NetworkManager.utils_uuid_generate();
- - connection.add_setting(new NetworkManager.SettingConnection({
- - uuid: connection._uuid,
- - id: this._autoConnectionName,
- - type: this._connectionType,
- - autoconnect: false
- - }));
- - return connection;
- + // Mobile wizard is handled by nm-applet for now...
- + this._applet_proxy.ConnectTo3gNetworkRemote(this.device.get_path(),
- + Lang.bind(this, function(results, err) {
- + if (err)
- + log(err);
- + }));
- + return null;
- }
- };
-
- --
- cgit v0.9
|