/* 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
        }
      )[0]);
  }
};

function NetworkInterfaceList (aInterfaces) {
  this._interfaces = aInterfaces;
}

NetworkInterfaceList.prototype = {
  QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkInterfaceList]),
  getNumberOfInterface: function() {
    return this._interfaces.length;
  },

  getInterface: function(index) {
    if (!this._interfaces) {
      return null;
    }
    return this._interfaces[index];
  }
};

this.NSGetFactory = XPCOMUtils.generateNSGetFactory([NetworkInterfaceListService]);

