15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * This file defines the <code>PPB_NetworkList</code> interface.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)[generate_thunk]
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)label Chrome {
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  M31 = 1.0
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Type of a network interface.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)[assert_size(4)]
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)enum PP_NetworkList_Type {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Type of the network interface is not known.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PP_NETWORKLIST_TYPE_UNKNOWN = 0,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Wired Ethernet network.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PP_NETWORKLIST_TYPE_ETHERNET = 1,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Wireless Wi-Fi network.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PP_NETWORKLIST_TYPE_WIFI = 2,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Cellular network (e.g. LTE).
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PP_NETWORKLIST_TYPE_CELLULAR = 3
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * State of a network interface.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)[assert_size(4)]
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)enum PP_NetworkList_State  {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Network interface is down.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PP_NETWORKLIST_STATE_DOWN = 0,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Network interface is up.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PP_NETWORKLIST_STATE_UP = 1
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * The <code>PPB_NetworkList</code> is used to represent a list of
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * network interfaces and their configuration. The content of the list
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * is immutable.  The current networks configuration can be received
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * using the <code>PPB_NetworkMonitor</code> interface.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)interface PPB_NetworkList {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Determines if the specified <code>resource</code> is a
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>NetworkList</code> object.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> resource.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return Returns <code>PP_TRUE</code> if <code>resource</code> is
7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)   * a <code>PPB_NetworkList</code>, <code>PP_FALSE</code>
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * otherwise.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool IsNetworkList([in] PP_Resource resource);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * Gets number of interfaces in the list.
7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * network list.
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return Returns number of available network interfaces or 0 if
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * the list has never been updated.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t GetCount([in] PP_Resource resource);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * Gets name of a network interface.
9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a
9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * network list.
9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] index Index of the network interface.
9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return Returns name for the network interface with the specified
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>index</code>.
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Var GetName([in] PP_Resource resource,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 [in] uint32_t index);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * Gets type of a network interface.
10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a
10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * network list.
10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] index Index of the network interface.
10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return Returns type of the network interface with the specified
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>index</code>.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  [on_failure=PP_NETWORKLIST_TYPE_UNKNOWN]
11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PP_NetworkList_Type GetType([in] PP_Resource resource,
11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                              [in] uint32_t index);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * Gets state of a network interface.
11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a
11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * network list.
12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] index Index of the network interface.
12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return Returns current state of the network interface with the
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * specified <code>index</code>.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
12568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  [on_failure=PP_NETWORKLIST_STATE_DOWN]
12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  PP_NetworkList_State GetState([in] PP_Resource resource,
12768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                [in] uint32_t index);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * Gets list of IP addresses for a network interface.
13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a
13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * network list.
13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] index Index of the network interface.
13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] output An output array which will receive
13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * <code>PPB_NetAddress</code> resources on success. Please note that the
13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * ref count of those resources has already been increased by 1 for the
13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * caller.
13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @return An error code from <code>pp_errors.h</code>.
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  int32_t GetIpAddresses([in] PP_Resource resource,
14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                         [in] uint32_t index,
14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                         [in] PP_ArrayOutput output);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * Gets display name of a network interface.
14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
14958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a
15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * network list.
15158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] index Index of the network interface.
15258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return Returns display name for the network interface with the
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * specified <code>index</code>.
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Var GetDisplayName([in] PP_Resource resource,
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        [in] uint32_t index);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * Gets MTU (Maximum Transmission Unit) of a network interface.
16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a
16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * network list.
16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param[in] index Index of the network interface.
16558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return Returns MTU for the network interface with the specified
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>index</code> or 0 if MTU is unknown.
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t GetMTU([in] PP_Resource resource,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  [in] uint32_t index);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
173