1 /* Copyright 2013 The Chromium Authors. All rights reserved. 2 * Use of this source code is governed by a BSD-style license that can be 3 * found in the LICENSE file. 4 */ 5 6 /* From ppb_net_address.idl modified Sat Jun 22 10:14:31 2013. */ 7 8 #ifndef PPAPI_C_PPB_NET_ADDRESS_H_ 9 #define PPAPI_C_PPB_NET_ADDRESS_H_ 10 11 #include "ppapi/c/pp_bool.h" 12 #include "ppapi/c/pp_instance.h" 13 #include "ppapi/c/pp_macros.h" 14 #include "ppapi/c/pp_resource.h" 15 #include "ppapi/c/pp_stdint.h" 16 #include "ppapi/c/pp_var.h" 17 18 #define PPB_NETADDRESS_INTERFACE_1_0 "PPB_NetAddress;1.0" 19 #define PPB_NETADDRESS_INTERFACE PPB_NETADDRESS_INTERFACE_1_0 20 21 /** 22 * @file 23 * This file defines the <code>PPB_NetAddress</code> interface. 24 */ 25 26 27 /** 28 * @addtogroup Enums 29 * @{ 30 */ 31 /** 32 * Network address family types. 33 */ 34 typedef enum { 35 /** 36 * The address family is unspecified. 37 */ 38 PP_NETADDRESS_FAMILY_UNSPECIFIED = 0, 39 /** 40 * The Internet Protocol version 4 (IPv4) address family. 41 */ 42 PP_NETADDRESS_FAMILY_IPV4 = 1, 43 /** 44 * The Internet Protocol version 6 (IPv6) address family. 45 */ 46 PP_NETADDRESS_FAMILY_IPV6 = 2 47 } PP_NetAddress_Family; 48 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_NetAddress_Family, 4); 49 /** 50 * @} 51 */ 52 53 /** 54 * @addtogroup Structs 55 * @{ 56 */ 57 /** 58 * All members are expressed in network byte order. 59 */ 60 struct PP_NetAddress_IPv4 { 61 /** 62 * Port number. 63 */ 64 uint16_t port; 65 /** 66 * IPv4 address. 67 */ 68 uint8_t addr[4]; 69 }; 70 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_NetAddress_IPv4, 6); 71 72 /** 73 * All members are expressed in network byte order. 74 */ 75 struct PP_NetAddress_IPv6 { 76 /** 77 * Port number. 78 */ 79 uint16_t port; 80 /** 81 * IPv6 address. 82 */ 83 uint8_t addr[16]; 84 }; 85 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_NetAddress_IPv6, 18); 86 /** 87 * @} 88 */ 89 90 /** 91 * @addtogroup Interfaces 92 * @{ 93 */ 94 /** 95 * The <code>PPB_NetAddress</code> interface provides operations on network 96 * addresses. 97 */ 98 struct PPB_NetAddress_1_0 { 99 /** 100 * Creates a <code>PPB_NetAddress</code> resource with the specified IPv4 101 * address. 102 * 103 * @param[in] instance A <code>PP_Instance</code> identifying one instance of 104 * a module. 105 * @param[in] ipv4_addr An IPv4 address. 106 * 107 * @return A <code>PP_Resource</code> representing the same address as 108 * <code>ipv4_addr</code> or 0 on failure. 109 */ 110 PP_Resource (*CreateFromIPv4Address)( 111 PP_Instance instance, 112 const struct PP_NetAddress_IPv4* ipv4_addr); 113 /** 114 * Creates a <code>PPB_NetAddress</code> resource with the specified IPv6 115 * address. 116 * 117 * @param[in] instance A <code>PP_Instance</code> identifying one instance of 118 * a module. 119 * @param[in] ipv6_addr An IPv6 address. 120 * 121 * @return A <code>PP_Resource</code> representing the same address as 122 * <code>ipv6_addr</code> or 0 on failure. 123 */ 124 PP_Resource (*CreateFromIPv6Address)( 125 PP_Instance instance, 126 const struct PP_NetAddress_IPv6* ipv6_addr); 127 /** 128 * Determines if a given resource is a network address. 129 * 130 * @param[in] resource A <code>PP_Resource</code> to check. 131 * 132 * @return <code>PP_TRUE</code> if the input is a <code>PPB_NetAddress</code> 133 * resource; <code>PP_FALSE</code> otherwise. 134 */ 135 PP_Bool (*IsNetAddress)(PP_Resource resource); 136 /** 137 * Gets the address family. 138 * 139 * @param[in] addr A <code>PP_Resource</code> corresponding to a network 140 * address. 141 * 142 * @return The address family on success; 143 * <code>PP_NETADDRESS_FAMILY_UNSPECIFIED</code> on failure. 144 */ 145 PP_NetAddress_Family (*GetFamily)(PP_Resource addr); 146 /** 147 * Returns a human-readable description of the network address. The 148 * description is in the form of host [ ":" port ] and conforms to 149 * http://tools.ietf.org/html/rfc3986#section-3.2 for IPv4 and IPv6 addresses 150 * (e.g., "192.168.0.1", "192.168.0.1:99", or "[::1]:80"). 151 * 152 * @param[in] addr A <code>PP_Resource</code> corresponding to a network 153 * address. 154 * @param[in] include_port Whether to include the port number in the 155 * description. 156 * 157 * @return A string <code>PP_Var</code> on success; an undefined 158 * <code>PP_Var</code> on failure. 159 */ 160 struct PP_Var (*DescribeAsString)(PP_Resource addr, PP_Bool include_port); 161 /** 162 * Fills a <code>PP_NetAddress_IPv4</code> structure if the network address is 163 * of <code>PP_NETADDRESS_FAMILY_IPV4</code> address family. 164 * Note that passing a network address of 165 * <code>PP_NETADDRESS_FAMILY_IPV6</code> address family will fail even if the 166 * address is an IPv4-mapped IPv6 address. 167 * 168 * @param[in] addr A <code>PP_Resource</code> corresponding to a network 169 * address. 170 * @param[out] ipv4_addr A <code>PP_NetAddress_IPv4</code> structure to store 171 * the result. 172 * 173 * @return A <code>PP_Bool</code> value indicating whether the operation 174 * succeeded. 175 */ 176 PP_Bool (*DescribeAsIPv4Address)(PP_Resource addr, 177 struct PP_NetAddress_IPv4* ipv4_addr); 178 /** 179 * Fills a <code>PP_NetAddress_IPv6</code> structure if the network address is 180 * of <code>PP_NETADDRESS_FAMILY_IPV6</code> address family. 181 * Note that passing a network address of 182 * <code>PP_NETADDRESS_FAMILY_IPV4</code> address family will fail - this 183 * method doesn't map it to an IPv6 address. 184 * 185 * @param[in] addr A <code>PP_Resource</code> corresponding to a network 186 * address. 187 * @param[out] ipv6_addr A <code>PP_NetAddress_IPv6</code> structure to store 188 * the result. 189 * 190 * @return A <code>PP_Bool</code> value indicating whether the operation 191 * succeeded. 192 */ 193 PP_Bool (*DescribeAsIPv6Address)(PP_Resource addr, 194 struct PP_NetAddress_IPv6* ipv6_addr); 195 }; 196 197 typedef struct PPB_NetAddress_1_0 PPB_NetAddress; 198 /** 199 * @} 200 */ 201 202 #endif /* PPAPI_C_PPB_NET_ADDRESS_H_ */ 203 204