author Daniel Stenberg <>
Sun, 24 Aug 2014 23:19:00 -0400
changeset 201651 37bee525b188aad6912807f36627432fe4716598
parent 94475 f4157e8c410708d76703f19e4dfb61859bfe32d8
child 201657 21dcd9e1b6078839497f1f8b0bcc20ae5e3684b1
permissions -rw-r--r--
Bug 939318 - Detect network interface changes on windows properly. r=mcmanus Now supports IPv6 as well if a new enough windows version is used. Which notification function to use is detect at run-time. Now sends CHANGED event if the online interface(s) are different in any way since it was previously checked and considered UP. CHANGED is sent before UP in case both are detected. nIOService: split up the network event receiver function from the network status init function and have the event receiver act on the incoming event. DNSservice: acts on network changes (flushes the host cache) HttpHandler: acts on network changes

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* vim:expandtab:shiftwidth=4:tabstop=4:
/* 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 */

#include "nsISupports.idl"

 * Network link status monitoring service.
[scriptable, uuid(f7d3be87-7403-4a1e-b89f-2797776e9b08)]
interface nsINetworkLinkService : nsISupports
  /* Link type constants */
  const unsigned long LINK_TYPE_UNKNOWN = 0;
  const unsigned long LINK_TYPE_ETHERNET = 1;
  const unsigned long LINK_TYPE_USB = 2;
  const unsigned long LINK_TYPE_WIFI = 3;
  const unsigned long LINK_TYPE_WIMAX = 4;
  const unsigned long LINK_TYPE_2G = 5;
  const unsigned long LINK_TYPE_3G = 6;
  const unsigned long LINK_TYPE_4G = 7;

   * This is set to true when the system is believed to have a usable
   * network connection.
   * The link is only up when network connections can be established. For
   * example, the link is down during DHCP configuration (unless there
   * is another usable interface already configured).
   * If the link status is not currently known, we generally assume that
   * it is up.
  readonly attribute boolean isLinkUp;
   * This is set to true when we believe that isLinkUp is accurate.
  readonly attribute boolean linkStatusKnown;

   * The type of network connection.
  readonly attribute unsigned long linkType;

 * We send notifications through nsIObserverService with topic
 * NS_NETWORK_LINK_TOPIC whenever one of isLinkUp or linkStatusKnown
 * changes. We pass one of the NS_NETWORK_LINK_DATA_ constants below
 * as the aData parameter of the notification.
#define NS_NETWORK_LINK_TOPIC "network:link-status-changed"

 * isLinkUp is now true, linkStatusKnown is true.
#define NS_NETWORK_LINK_DATA_UP      "up"
 * isLinkUp is now false, linkStatusKnown is true.
#define NS_NETWORK_LINK_DATA_DOWN    "down"
 * isLinkUp is still true, but the network setup is modified.
 * linkStatusKnown is true.
 * linkStatusKnown is now false.

 * We send notifications through nsIObserverService with topic
 * NS_NETWORK_LINK_TYPE_TOPIC whenever the network connection type
 * changes. We pass one of the valid connection type constants
 * below as the aData parameter of the notification.
#define NS_NETWORK_LINK_TYPE_TOPIC "network:link-type-changed"

/** We were unable to determine the network connection type */

/** A standard wired ethernet connection */
#define NS_NETWORK_LINK_TYPE_ETHERNET    "ethernet"

/** A connection via a USB port */
#define NS_NETWORK_LINK_TYPE_USB    "usb"

/** A connection via a WiFi access point (IEEE802.11) */

/** A connection via WiMax (IEEE802.16) */

/** A '2G' mobile connection (e.g. GSM, GPRS, EDGE) */
#define NS_NETWORK_LINK_TYPE_2G "2g"

/** A '3G' mobile connection (e.g. UMTS, CDMA) */
#define NS_NETWORK_LINK_TYPE_3G "3g"

/** A '4G' mobile connection (e.g. LTE, UMB) */
#define NS_NETWORK_LINK_TYPE_4G "4g"