summaryrefslogtreecommitdiffstats
path: root/dom/system/gonk/NetworkInterfaceListService.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/gonk/NetworkInterfaceListService.js')
-rw-r--r--dom/system/gonk/NetworkInterfaceListService.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/dom/system/gonk/NetworkInterfaceListService.js b/dom/system/gonk/NetworkInterfaceListService.js
new file mode 100644
index 000000000..62fe046aa
--- /dev/null
+++ b/dom/system/gonk/NetworkInterfaceListService.js
@@ -0,0 +1,110 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
+
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+const NETWORKLISTSERVICE_CONTRACTID =
+ "@mozilla.org/network/interface-list-service;1";
+const NETWORKLISTSERVICE_CID =
+ Components.ID("{3780be6e-7012-4e53-ade6-15212fb88a0d}");
+
+XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
+ "@mozilla.org/childprocessmessagemanager;1",
+ "nsISyncMessageSender");
+
+function NetworkInterfaceListService () {
+}
+
+NetworkInterfaceListService.prototype = {
+ classID: NETWORKLISTSERVICE_CID,
+
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkInterfaceListService]),
+
+ getDataInterfaceList: function(aConditions) {
+ return new NetworkInterfaceList(
+ cpmm.sendSyncMessage(
+ 'NetworkInterfaceList:ListInterface',
+ {
+ excludeSupl: (aConditions &
+ Ci.nsINetworkInterfaceListService.
+ LIST_NOT_INCLUDE_SUPL_INTERFACES) != 0,
+ excludeMms: (aConditions &
+ Ci.nsINetworkInterfaceListService.
+ LIST_NOT_INCLUDE_MMS_INTERFACES) != 0,
+ excludeIms: (aConditions &
+ Ci.nsINetworkInterfaceListService.
+ LIST_NOT_INCLUDE_IMS_INTERFACES) != 0,
+ excludeDun: (aConditions &
+ Ci.nsINetworkInterfaceListService.
+ LIST_NOT_INCLUDE_DUN_INTERFACES) != 0,
+ excludeFota: (aConditions &
+ Ci.nsINetworkInterfaceListService.
+ LIST_NOT_INCLUDE_FOTA_INTERFACES) != 0
+ }
+ )[0]);
+ }
+};
+
+function FakeNetworkInfo(aAttributes) {
+ this.state = aAttributes.state;
+ this.type = aAttributes.type;
+ this.name = aAttributes.name;
+ this.ips = aAttributes.ips;
+ this.prefixLengths = aAttributes.prefixLengths;
+ this.gateways = aAttributes.gateways;
+ this.dnses = aAttributes.dnses;
+}
+FakeNetworkInfo.prototype = {
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkInfo]),
+
+ getAddresses: function (ips, prefixLengths) {
+ ips.value = this.ips.slice();
+ prefixLengths.value = this.prefixLengths.slice();
+
+ return this.ips.length;
+ },
+
+ getGateways: function (count) {
+ if (count) {
+ count.value = this.gateways.length;
+ }
+ return this.gateways.slice();
+ },
+
+ getDnses: function (count) {
+ if (count) {
+ count.value = this.dnses.length;
+ }
+ return this.dnses.slice();
+ }
+};
+
+function NetworkInterfaceList (aInterfaceLiterals) {
+ this._interfaces = [];
+ for (let entry of aInterfaceLiterals) {
+ this._interfaces.push(new FakeNetworkInfo(entry));
+ }
+}
+
+NetworkInterfaceList.prototype = {
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkInterfaceList]),
+
+ getNumberOfInterface: function() {
+ return this._interfaces.length;
+ },
+
+ getInterfaceInfo: function(index) {
+ if (!this._interfaces) {
+ return null;
+ }
+ return this._interfaces[index];
+ }
+};
+
+this.NSGetFactory = XPCOMUtils.generateNSGetFactory([NetworkInterfaceListService]);
+