/* 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/. */

enum TetheringType {
  "bluetooth",
  "usb",
  "wifi"
};

enum SecurityType {
  "open",
  "wpa-psk",
  "wpa2-psk"
};

dictionary WifiTetheringConfig {
  DOMString ssid;
  SecurityType security;
  DOMString key;
};

dictionary TetheringConfiguration {
  DOMString ip;
  DOMString prefix;
  DOMString startIp;
  DOMString endIp;
  DOMString dns1;
  DOMString dns2;
  WifiTetheringConfig wifiConfig;
};

[JSImplementation="@mozilla.org/tetheringmanager;1",
 NavigatorProperty="mozTetheringManager",
 ChromeOnly]
interface MozTetheringManager {
  /**
   * Enable/Disable tethering.
   * @param enabled True to enable tethering, False to disable tethering.
   * @param type Tethering type to enable/disable.
   * @param config Configuration should have following fields when enable is True:
   *               - ip ip address.
   *               - prefix mask length.
   *               - startIp start ip address allocated by DHCP server for tethering.
   *               - endIp end ip address allocated by DHCP server for tethering.
   *               - dns1 first DNS server address.
   *               - dns2 second DNS server address.
   *               - wifiConfig wifi tethering configuration
   *                  - ssid SSID network name.
   *                  - security open, wpa-psk or wpa2-psk.
   *                  - key password for wpa-psk or wpa2-psk.
   *               config should not be set when enabled is False.
   */
  Promise<any> setTetheringEnabled(boolean enabled,
                                   TetheringType type,
                                   optional TetheringConfiguration config);
};