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_udp_socket_private.idl modified Mon Jun 24 09:53:43 2013. */ 7 8 #ifndef PPAPI_C_PRIVATE_PPB_UDP_SOCKET_PRIVATE_H_ 9 #define PPAPI_C_PRIVATE_PPB_UDP_SOCKET_PRIVATE_H_ 10 11 #include "ppapi/c/pp_bool.h" 12 #include "ppapi/c/pp_completion_callback.h" 13 #include "ppapi/c/pp_instance.h" 14 #include "ppapi/c/pp_macros.h" 15 #include "ppapi/c/pp_resource.h" 16 #include "ppapi/c/pp_stdint.h" 17 #include "ppapi/c/pp_var.h" 18 #include "ppapi/c/private/ppb_net_address_private.h" 19 20 #define PPB_UDPSOCKET_PRIVATE_INTERFACE_0_2 "PPB_UDPSocket_Private;0.2" 21 #define PPB_UDPSOCKET_PRIVATE_INTERFACE_0_3 "PPB_UDPSocket_Private;0.3" 22 #define PPB_UDPSOCKET_PRIVATE_INTERFACE_0_4 "PPB_UDPSocket_Private;0.4" 23 #define PPB_UDPSOCKET_PRIVATE_INTERFACE PPB_UDPSOCKET_PRIVATE_INTERFACE_0_4 24 25 /** 26 * @file 27 * This file defines the <code>PPB_UDPSocket_Private</code> interface. 28 */ 29 30 31 /** 32 * @addtogroup Enums 33 * @{ 34 */ 35 typedef enum { 36 /* Allow the socket to share the local address to which socket will 37 * be bound with other processes. Value's type should be 38 * PP_VARTYPE_BOOL. */ 39 PP_UDPSOCKETFEATURE_PRIVATE_ADDRESS_REUSE = 0, 40 /* Allow sending and receiving packets sent to and from broadcast 41 * addresses. Value's type should be PP_VARTYPE_BOOL. */ 42 PP_UDPSOCKETFEATURE_PRIVATE_BROADCAST = 1, 43 /* Special value for counting the number of available 44 * features. Should not be passed to SetSocketFeature(). */ 45 PP_UDPSOCKETFEATURE_PRIVATE_COUNT = 2 46 } PP_UDPSocketFeature_Private; 47 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_UDPSocketFeature_Private, 4); 48 /** 49 * @} 50 */ 51 52 /** 53 * @addtogroup Interfaces 54 * @{ 55 */ 56 struct PPB_UDPSocket_Private_0_4 { 57 /** 58 * Creates a UDP socket resource. 59 */ 60 PP_Resource (*Create)(PP_Instance instance_id); 61 /** 62 * Determines if a given resource is a UDP socket. 63 */ 64 PP_Bool (*IsUDPSocket)(PP_Resource resource_id); 65 /** 66 * Sets a socket feature to |udp_socket|. Should be called before 67 * Bind(). Possible values for |name|, |value| and |value|'s type 68 * are described in PP_UDPSocketFeature_Private description. If no 69 * error occurs, returns PP_OK. Otherwise, returns 70 * PP_ERROR_BADRESOURCE (if bad |udp_socket| provided), 71 * PP_ERROR_BADARGUMENT (if bad name/value/value's type provided) 72 * or PP_ERROR_FAILED in the case of internal errors. 73 */ 74 int32_t (*SetSocketFeature)(PP_Resource udp_socket, 75 PP_UDPSocketFeature_Private name, 76 struct PP_Var value); 77 /* Creates a socket and binds to the address given by |addr|. */ 78 int32_t (*Bind)(PP_Resource udp_socket, 79 const struct PP_NetAddress_Private* addr, 80 struct PP_CompletionCallback callback); 81 /* Returns the address that the socket has bound to. A successful 82 * call to Bind must be called first. Returns PP_FALSE if Bind 83 * fails, or if Close has been called. 84 */ 85 PP_Bool (*GetBoundAddress)(PP_Resource udp_socket, 86 struct PP_NetAddress_Private* addr); 87 /* Performs a non-blocking recvfrom call on socket. 88 * Bind must be called first. |callback| is invoked when recvfrom 89 * reads data. You must call GetRecvFromAddress to recover the 90 * address the data was retrieved from. 91 */ 92 int32_t (*RecvFrom)(PP_Resource udp_socket, 93 char* buffer, 94 int32_t num_bytes, 95 struct PP_CompletionCallback callback); 96 /* Upon successful completion of RecvFrom, the address that the data 97 * was received from is stored in |addr|. 98 */ 99 PP_Bool (*GetRecvFromAddress)(PP_Resource udp_socket, 100 struct PP_NetAddress_Private* addr); 101 /* Performs a non-blocking sendto call on the socket created and 102 * bound(has already called Bind). The callback |callback| is 103 * invoked when sendto completes. 104 */ 105 int32_t (*SendTo)(PP_Resource udp_socket, 106 const char* buffer, 107 int32_t num_bytes, 108 const struct PP_NetAddress_Private* addr, 109 struct PP_CompletionCallback callback); 110 /* Cancels all pending reads and writes, and closes the socket. */ 111 void (*Close)(PP_Resource udp_socket); 112 }; 113 114 typedef struct PPB_UDPSocket_Private_0_4 PPB_UDPSocket_Private; 115 116 struct PPB_UDPSocket_Private_0_2 { 117 PP_Resource (*Create)(PP_Instance instance_id); 118 PP_Bool (*IsUDPSocket)(PP_Resource resource_id); 119 int32_t (*Bind)(PP_Resource udp_socket, 120 const struct PP_NetAddress_Private* addr, 121 struct PP_CompletionCallback callback); 122 int32_t (*RecvFrom)(PP_Resource udp_socket, 123 char* buffer, 124 int32_t num_bytes, 125 struct PP_CompletionCallback callback); 126 PP_Bool (*GetRecvFromAddress)(PP_Resource udp_socket, 127 struct PP_NetAddress_Private* addr); 128 int32_t (*SendTo)(PP_Resource udp_socket, 129 const char* buffer, 130 int32_t num_bytes, 131 const struct PP_NetAddress_Private* addr, 132 struct PP_CompletionCallback callback); 133 void (*Close)(PP_Resource udp_socket); 134 }; 135 136 struct PPB_UDPSocket_Private_0_3 { 137 PP_Resource (*Create)(PP_Instance instance_id); 138 PP_Bool (*IsUDPSocket)(PP_Resource resource_id); 139 int32_t (*Bind)(PP_Resource udp_socket, 140 const struct PP_NetAddress_Private* addr, 141 struct PP_CompletionCallback callback); 142 PP_Bool (*GetBoundAddress)(PP_Resource udp_socket, 143 struct PP_NetAddress_Private* addr); 144 int32_t (*RecvFrom)(PP_Resource udp_socket, 145 char* buffer, 146 int32_t num_bytes, 147 struct PP_CompletionCallback callback); 148 PP_Bool (*GetRecvFromAddress)(PP_Resource udp_socket, 149 struct PP_NetAddress_Private* addr); 150 int32_t (*SendTo)(PP_Resource udp_socket, 151 const char* buffer, 152 int32_t num_bytes, 153 const struct PP_NetAddress_Private* addr, 154 struct PP_CompletionCallback callback); 155 void (*Close)(PP_Resource udp_socket); 156 }; 157 /** 158 * @} 159 */ 160 161 #endif /* PPAPI_C_PRIVATE_PPB_UDP_SOCKET_PRIVATE_H_ */ 162 163