Pepper_42_C_interfaces
ppb_tcp_socket.h
Go to the documentation of this file.
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_tcp_socket.idl modified Fri Sep 20 09:58:19 2013. */
7 
8 #ifndef PPAPI_C_PPB_TCP_SOCKET_H_
9 #define PPAPI_C_PPB_TCP_SOCKET_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 
19 #define PPB_TCPSOCKET_INTERFACE_1_0 "PPB_TCPSocket;1.0"
20 #define PPB_TCPSOCKET_INTERFACE_1_1 "PPB_TCPSocket;1.1"
21 #define PPB_TCPSOCKET_INTERFACE PPB_TCPSOCKET_INTERFACE_1_1
22 
23 /**
24  * @file
25  * This file defines the <code>PPB_TCPSocket</code> interface.
26  */
27 
28 
29 /**
30  * @addtogroup Enums
31  * @{
32  */
33 /**
34  * Option names used by <code>SetOption()</code>.
35  */
36 typedef enum {
37  /**
38  * Disables coalescing of small writes to make TCP segments, and instead
39  * delivers data immediately. Value's type is <code>PP_VARTYPE_BOOL</code>.
40  * This option can only be set after a successful <code>Connect()</code> call.
41  */
43  /**
44  * Specifies the total per-socket buffer space reserved for sends. Value's
45  * type should be <code>PP_VARTYPE_INT32</code>.
46  * This option can only be set after a successful <code>Connect()</code> call.
47  *
48  * Note: This is only treated as a hint for the browser to set the buffer
49  * size. Even if <code>SetOption()</code> succeeds, the browser doesn't
50  * guarantee it will conform to the size.
51  */
53  /**
54  * Specifies the total per-socket buffer space reserved for receives. Value's
55  * type should be <code>PP_VARTYPE_INT32</code>.
56  * This option can only be set after a successful <code>Connect()</code> call.
57  *
58  * Note: This is only treated as a hint for the browser to set the buffer
59  * size. Even if <code>SetOption()</code> succeeds, the browser doesn't
60  * guarantee it will conform to the size.
61  */
65 /**
66  * @}
67  */
68 
69 /**
70  * @addtogroup Interfaces
71  * @{
72  */
73 /**
74  * The <code>PPB_TCPSocket</code> interface provides TCP socket operations.
75  *
76  * Permissions: Apps permission <code>socket</code> with subrule
77  * <code>tcp-connect</code> is required for <code>Connect()</code>; subrule
78  * <code>tcp-listen</code> is required for <code>Listen()</code>.
79  * For more details about network communication permissions, please see:
80  * http://developer.chrome.com/apps/app_network.html
81  */
83  /**
84  * Creates a TCP socket resource.
85  *
86  * @param[in] instance A <code>PP_Instance</code> identifying one instance of
87  * a module.
88  *
89  * @return A <code>PP_Resource</code> corresponding to a TCP socket or 0
90  * on failure.
91  */
93  /**
94  * Determines if a given resource is a TCP socket.
95  *
96  * @param[in] resource A <code>PP_Resource</code> to check.
97  *
98  * @return <code>PP_TRUE</code> if the input is a
99  * <code>PPB_TCPSocket</code> resource; <code>PP_FALSE</code> otherwise.
100  */
102  /**
103  * Binds the socket to the given address. The socket must not be bound.
104  *
105  * @param[in] tcp_socket A <code>PP_Resource</code> corresponding to a TCP
106  * socket.
107  * @param[in] addr A <code>PPB_NetAddress</code> resource.
108  * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
109  * completion.
110  *
111  * @return An int32_t containing an error code from <code>pp_errors.h</code>,
112  * including (but not limited to):
113  * - <code>PP_ERROR_ADDRESS_IN_USE</code>: the address is already in use.
114  * - <code>PP_ERROR_ADDRESS_INVALID</code>: the address is invalid.
115  */
116  int32_t (*Bind)(PP_Resource tcp_socket,
117  PP_Resource addr,
118  struct PP_CompletionCallback callback);
119  /**
120  * Connects the socket to the given address. The socket must not be listening.
121  * Binding the socket beforehand is optional.
122  *
123  * @param[in] tcp_socket A <code>PP_Resource</code> corresponding to a TCP
124  * socket.
125  * @param[in] addr A <code>PPB_NetAddress</code> resource.
126  * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
127  * completion.
128  *
129  * @return An int32_t containing an error code from <code>pp_errors.h</code>,
130  * including (but not limited to):
131  * - <code>PP_ERROR_NOACCESS</code>: the caller doesn't have required
132  * permissions.
133  * - <code>PP_ERROR_ADDRESS_UNREACHABLE</code>: <code>addr</code> is
134  * unreachable.
135  * - <code>PP_ERROR_CONNECTION_REFUSED</code>: the connection attempt was
136  * refused.
137  * - <code>PP_ERROR_CONNECTION_FAILED</code>: the connection attempt failed.
138  * - <code>PP_ERROR_CONNECTION_TIMEDOUT</code>: the connection attempt timed
139  * out.
140  *
141  * Since version 1.1, if the socket is listening/connected or has a pending
142  * listen/connect request, <code>Connect()</code> will fail without starting a
143  * connection attempt; otherwise, any failure during the connection attempt
144  * will cause the socket to be closed.
145  */
146  int32_t (*Connect)(PP_Resource tcp_socket,
147  PP_Resource addr,
148  struct PP_CompletionCallback callback);
149  /**
150  * Gets the local address of the socket, if it is bound.
151  *
152  * @param[in] tcp_socket A <code>PP_Resource</code> corresponding to a TCP
153  * socket.
154  *
155  * @return A <code>PPB_NetAddress</code> resource on success or 0 on failure.
156  */
158  /**
159  * Gets the remote address of the socket, if it is connected.
160  *
161  * @param[in] tcp_socket A <code>PP_Resource</code> corresponding to a TCP
162  * socket.
163  *
164  * @return A <code>PPB_NetAddress</code> resource on success or 0 on failure.
165  */
167  /**
168  * Reads data from the socket. The socket must be connected. It may perform a
169  * partial read.
170  *
171  * @param[in] tcp_socket A <code>PP_Resource</code> corresponding to a TCP
172  * socket.
173  * @param[out] buffer The buffer to store the received data on success. It
174  * must be at least as large as <code>bytes_to_read</code>.
175  * @param[in] bytes_to_read The number of bytes to read.
176  * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
177  * completion.
178  *
179  * @return A non-negative number on success to indicate how many bytes have
180  * been read, 0 means that end-of-file was reached; otherwise, an error code
181  * from <code>pp_errors.h</code>.
182  */
183  int32_t (*Read)(PP_Resource tcp_socket,
184  char* buffer,
185  int32_t bytes_to_read,
186  struct PP_CompletionCallback callback);
187  /**
188  * Writes data to the socket. The socket must be connected. It may perform a
189  * partial write.
190  *
191  * @param[in] tcp_socket A <code>PP_Resource</code> corresponding to a TCP
192  * socket.
193  * @param[in] buffer The buffer containing the data to write.
194  * @param[in] bytes_to_write The number of bytes to write.
195  * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
196  * completion.
197  *
198  * @return A non-negative number on success to indicate how many bytes have
199  * been written; otherwise, an error code from <code>pp_errors.h</code>.
200  */
201  int32_t (*Write)(PP_Resource tcp_socket,
202  const char* buffer,
203  int32_t bytes_to_write,
204  struct PP_CompletionCallback callback);
205  /**
206  * Starts listening. The socket must be bound and not connected.
207  *
208  * @param[in] tcp_socket A <code>PP_Resource</code> corresponding to a TCP
209  * socket.
210  * @param[in] backlog A hint to determine the maximum length to which the
211  * queue of pending connections may grow.
212  * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
213  * completion.
214  *
215  * @return An int32_t containing an error code from <code>pp_errors.h</code>,
216  * including (but not limited to):
217  * - <code>PP_ERROR_NOACCESS</code>: the caller doesn't have required
218  * permissions.
219  * - <code>PP_ERROR_ADDRESS_IN_USE</code>: Another socket is already listening
220  * on the same port.
221  */
222  int32_t (*Listen)(PP_Resource tcp_socket,
223  int32_t backlog,
224  struct PP_CompletionCallback callback);
225  /**
226  * Accepts a connection. The socket must be listening.
227  *
228  * @param[in] tcp_socket A <code>PP_Resource</code> corresponding to a TCP
229  * socket.
230  * @param[out] accepted_tcp_socket Stores the accepted TCP socket on success.
231  * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
232  * completion.
233  *
234  * @return An int32_t containing an error code from <code>pp_errors.h</code>,
235  * including (but not limited to):
236  * - <code>PP_ERROR_CONNECTION_ABORTED</code>: A connection has been aborted.
237  */
238  int32_t (*Accept)(PP_Resource tcp_socket,
239  PP_Resource* accepted_tcp_socket,
240  struct PP_CompletionCallback callback);
241  /**
242  * Cancels all pending operations and closes the socket. Any pending callbacks
243  * will still run, reporting <code>PP_ERROR_ABORTED</code> if pending IO was
244  * interrupted. After a call to this method, no output buffer pointers passed
245  * into previous <code>Read()</code> or <code>Accept()</code> calls will be
246  * accessed. It is not valid to call <code>Connect()</code> or
247  * <code>Listen()</code> again.
248  *
249  * The socket is implicitly closed if it is destroyed, so you are not required
250  * to call this method.
251  *
252  * @param[in] tcp_socket A <code>PP_Resource</code> corresponding to a TCP
253  * socket.
254  */
255  void (*Close)(PP_Resource tcp_socket);
256  /**
257  * Sets a socket option on the TCP socket.
258  * Please see the <code>PP_TCPSocket_Option</code> description for option
259  * names, value types and allowed values.
260  *
261  * @param[in] tcp_socket A <code>PP_Resource</code> corresponding to a TCP
262  * socket.
263  * @param[in] name The option to set.
264  * @param[in] value The option value to set.
265  * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
266  * completion.
267  *
268  * @return An int32_t containing an error code from <code>pp_errors.h</code>.
269  */
270  int32_t (*SetOption)(PP_Resource tcp_socket,
271  PP_TCPSocket_Option name,
272  struct PP_Var value,
273  struct PP_CompletionCallback callback);
274 };
275 
277 
281  int32_t (*Connect)(PP_Resource tcp_socket,
282  PP_Resource addr,
283  struct PP_CompletionCallback callback);
286  int32_t (*Read)(PP_Resource tcp_socket,
287  char* buffer,
288  int32_t bytes_to_read,
289  struct PP_CompletionCallback callback);
290  int32_t (*Write)(PP_Resource tcp_socket,
291  const char* buffer,
292  int32_t bytes_to_write,
293  struct PP_CompletionCallback callback);
294  void (*Close)(PP_Resource tcp_socket);
295  int32_t (*SetOption)(PP_Resource tcp_socket,
296  PP_TCPSocket_Option name,
297  struct PP_Var value,
298  struct PP_CompletionCallback callback);
299 };
300 /**
301  * @}
302  */
303 
304 #endif /* PPAPI_C_PPB_TCP_SOCKET_H_ */
305 
int32_t(* Connect)(PP_Resource tcp_socket, PP_Resource addr, struct PP_CompletionCallback callback)
int32_t(* Connect)(PP_Resource tcp_socket, PP_Resource addr, struct PP_CompletionCallback callback)
PP_Resource(* Create)(PP_Instance instance)
int32_t(* Read)(PP_Resource tcp_socket, char *buffer, int32_t bytes_to_read, struct PP_CompletionCallback callback)
PP_Bool(* IsTCPSocket)(PP_Resource resource)
PP_Resource(* GetRemoteAddress)(PP_Resource tcp_socket)
PP_Resource(* GetLocalAddress)(PP_Resource tcp_socket)
int32_t(* Listen)(PP_Resource tcp_socket, int32_t backlog, struct PP_CompletionCallback callback)
PP_Bool(* IsTCPSocket)(PP_Resource resource)
PP_Resource(* Create)(PP_Instance instance)
int32_t PP_Resource
Definition: pp_resource.h:40
PP_TCPSocket_Option
int32_t(* Accept)(PP_Resource tcp_socket, PP_Resource *accepted_tcp_socket, struct PP_CompletionCallback callback)
int32_t(* Read)(PP_Resource tcp_socket, char *buffer, int32_t bytes_to_read, struct PP_CompletionCallback callback)
void(* Close)(PP_Resource tcp_socket)
union PP_VarValue value
Definition: pp_var.h:180
Definition: pp_var.h:166
int32_t PP_Instance
Definition: pp_instance.h:34
int32_t(* SetOption)(PP_Resource tcp_socket, PP_TCPSocket_Option name, struct PP_Var value, struct PP_CompletionCallback callback)
PP_Resource(* GetRemoteAddress)(PP_Resource tcp_socket)
PP_Resource(* GetLocalAddress)(PP_Resource tcp_socket)
PP_Bool
Definition: pp_bool.h:30
int32_t(* Bind)(PP_Resource tcp_socket, PP_Resource addr, struct PP_CompletionCallback callback)
int32_t(* Write)(PP_Resource tcp_socket, const char *buffer, int32_t bytes_to_write, struct PP_CompletionCallback callback)
void(* Close)(PP_Resource tcp_socket)
PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_TCPSocket_Option, 4)
int32_t(* SetOption)(PP_Resource tcp_socket, PP_TCPSocket_Option name, struct PP_Var value, struct PP_CompletionCallback callback)
int32_t(* Write)(PP_Resource tcp_socket, const char *buffer, int32_t bytes_to_write, struct PP_CompletionCallback callback)