• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright (c) 2012 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 private/ppb_net_address_private.idl,
7  *   modified Mon Jun 24 09:52:39 2013.
8  */
9 
10 #ifndef PPAPI_C_PRIVATE_PPB_NET_ADDRESS_PRIVATE_H_
11 #define PPAPI_C_PRIVATE_PPB_NET_ADDRESS_PRIVATE_H_
12 
13 #include "ppapi/c/pp_bool.h"
14 #include "ppapi/c/pp_macros.h"
15 #include "ppapi/c/pp_module.h"
16 #include "ppapi/c/pp_stdint.h"
17 #include "ppapi/c/pp_var.h"
18 
19 #define PPB_NETADDRESS_PRIVATE_INTERFACE_0_1 "PPB_NetAddress_Private;0.1"
20 #define PPB_NETADDRESS_PRIVATE_INTERFACE_1_0 "PPB_NetAddress_Private;1.0"
21 #define PPB_NETADDRESS_PRIVATE_INTERFACE_1_1 "PPB_NetAddress_Private;1.1"
22 #define PPB_NETADDRESS_PRIVATE_INTERFACE PPB_NETADDRESS_PRIVATE_INTERFACE_1_1
23 
24 /**
25  * @file
26  * This file defines the <code>PPB_NetAddress_Private</code> interface.
27  */
28 
29 
30 /**
31  * @addtogroup Enums
32  * @{
33  */
34 typedef enum {
35   /**
36    * The address family is unspecified.
37    */
38   PP_NETADDRESSFAMILY_PRIVATE_UNSPECIFIED = 0,
39   /**
40    * The Internet Protocol version 4 (IPv4) address family.
41    */
42   PP_NETADDRESSFAMILY_PRIVATE_IPV4 = 1,
43   /**
44    * The Internet Protocol version 6 (IPv6) address family.
45    */
46   PP_NETADDRESSFAMILY_PRIVATE_IPV6 = 2
47 } PP_NetAddressFamily_Private;
48 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_NetAddressFamily_Private, 4);
49 /**
50  * @}
51  */
52 
53 /**
54  * @addtogroup Structs
55  * @{
56  */
57 /**
58  * This is an opaque type holding a network address. Plugins must
59  * never access members of this struct directly.
60  */
61 struct PP_NetAddress_Private {
62   uint32_t size;
63   char data[128];
64 };
65 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_NetAddress_Private, 132);
66 /**
67  * @}
68  */
69 
70 /**
71  * @addtogroup Interfaces
72  * @{
73  */
74 /**
75  * The <code>PPB_NetAddress_Private</code> interface provides operations on
76  * network addresses.
77  */
78 struct PPB_NetAddress_Private_1_1 {
79   /**
80    * Returns PP_TRUE if the two addresses are equal (host and port).
81    */
82   PP_Bool (*AreEqual)(const struct PP_NetAddress_Private* addr1,
83                       const struct PP_NetAddress_Private* addr2);
84   /**
85    * Returns PP_TRUE if the two addresses refer to the same host.
86    */
87   PP_Bool (*AreHostsEqual)(const struct PP_NetAddress_Private* addr1,
88                            const struct PP_NetAddress_Private* addr2);
89   /**
90    * Returns a human-readable description of the network address, optionally
91    * including the port (e.g., "192.168.0.1", "192.168.0.1:99", or "[::1]:80"),
92    * or an undefined var on failure.
93    */
94   struct PP_Var (*Describe)(PP_Module module,
95                             const struct PP_NetAddress_Private* addr,
96                             PP_Bool include_port);
97   /**
98    * Replaces the port in the given source address. Returns PP_TRUE on success.
99    */
100   PP_Bool (*ReplacePort)(const struct PP_NetAddress_Private* src_addr,
101                          uint16_t port,
102                          struct PP_NetAddress_Private* addr_out);
103   /**
104    * Gets the "any" address (for IPv4 or IPv6); for use with UDP Bind.
105    */
106   void (*GetAnyAddress)(PP_Bool is_ipv6, struct PP_NetAddress_Private* addr);
107   /**
108    * Gets the address family.
109    */
110   PP_NetAddressFamily_Private (*GetFamily)(
111       const struct PP_NetAddress_Private* addr);
112   /**
113    * Gets the port. The port is returned in host byte order.
114    */
115   uint16_t (*GetPort)(const struct PP_NetAddress_Private* addr);
116   /**
117    * Gets the address. The output, address, must be large enough for the
118    * current socket family. The output will be the binary representation of an
119    * address for the current socket family. For IPv4 and IPv6 the address is in
120    * network byte order. PP_TRUE is returned if the address was successfully
121    * retrieved.
122    */
123   PP_Bool (*GetAddress)(const struct PP_NetAddress_Private* addr,
124                         void* address,
125                         uint16_t address_size);
126   /**
127    * Returns ScopeID for IPv6 addresses or 0 for IPv4.
128    */
129   uint32_t (*GetScopeID)(const struct PP_NetAddress_Private* addr);
130   /**
131    * Creates NetAddress with the specified IPv4 address and port
132    * number.
133    */
134   void (*CreateFromIPv4Address)(const uint8_t ip[4],
135                                 uint16_t port,
136                                 struct PP_NetAddress_Private* addr_out);
137   /**
138    * Creates NetAddress with the specified IPv6 address, scope_id and
139    * port number.
140    */
141   void (*CreateFromIPv6Address)(const uint8_t ip[16],
142                                 uint32_t scope_id,
143                                 uint16_t port,
144                                 struct PP_NetAddress_Private* addr_out);
145 };
146 
147 typedef struct PPB_NetAddress_Private_1_1 PPB_NetAddress_Private;
148 
149 struct PPB_NetAddress_Private_0_1 {
150   PP_Bool (*AreEqual)(const struct PP_NetAddress_Private* addr1,
151                       const struct PP_NetAddress_Private* addr2);
152   PP_Bool (*AreHostsEqual)(const struct PP_NetAddress_Private* addr1,
153                            const struct PP_NetAddress_Private* addr2);
154   struct PP_Var (*Describe)(PP_Module module,
155                             const struct PP_NetAddress_Private* addr,
156                             PP_Bool include_port);
157   PP_Bool (*ReplacePort)(const struct PP_NetAddress_Private* src_addr,
158                          uint16_t port,
159                          struct PP_NetAddress_Private* addr_out);
160   void (*GetAnyAddress)(PP_Bool is_ipv6, struct PP_NetAddress_Private* addr);
161 };
162 
163 struct PPB_NetAddress_Private_1_0 {
164   PP_Bool (*AreEqual)(const struct PP_NetAddress_Private* addr1,
165                       const struct PP_NetAddress_Private* addr2);
166   PP_Bool (*AreHostsEqual)(const struct PP_NetAddress_Private* addr1,
167                            const struct PP_NetAddress_Private* addr2);
168   struct PP_Var (*Describe)(PP_Module module,
169                             const struct PP_NetAddress_Private* addr,
170                             PP_Bool include_port);
171   PP_Bool (*ReplacePort)(const struct PP_NetAddress_Private* src_addr,
172                          uint16_t port,
173                          struct PP_NetAddress_Private* addr_out);
174   void (*GetAnyAddress)(PP_Bool is_ipv6, struct PP_NetAddress_Private* addr);
175   PP_NetAddressFamily_Private (*GetFamily)(
176       const struct PP_NetAddress_Private* addr);
177   uint16_t (*GetPort)(const struct PP_NetAddress_Private* addr);
178   PP_Bool (*GetAddress)(const struct PP_NetAddress_Private* addr,
179                         void* address,
180                         uint16_t address_size);
181 };
182 /**
183  * @}
184  */
185 
186 #endif  /* PPAPI_C_PRIVATE_PPB_NET_ADDRESS_PRIVATE_H_ */
187 
188