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_tcp_socket_private.idl modified Mon Jun 24 09:53:12 2013. */
7
8#ifndef PPAPI_C_PRIVATE_PPB_TCP_SOCKET_PRIVATE_H_
9#define PPAPI_C_PRIVATE_PPB_TCP_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_TCPSOCKET_PRIVATE_INTERFACE_0_3 "PPB_TCPSocket_Private;0.3"
21#define PPB_TCPSOCKET_PRIVATE_INTERFACE_0_4 "PPB_TCPSocket_Private;0.4"
22#define PPB_TCPSOCKET_PRIVATE_INTERFACE_0_5 "PPB_TCPSocket_Private;0.5"
23#define PPB_TCPSOCKET_PRIVATE_INTERFACE PPB_TCPSOCKET_PRIVATE_INTERFACE_0_5
24
25/**
26 * @file
27 * This file defines the <code>PPB_TCPSocket_Private</code> interface.
28 */
29
30
31/**
32 * @addtogroup Enums
33 * @{
34 */
35typedef enum {
36  /* Special value used for testing. Guaranteed to fail SetOption(). */
37  PP_TCPSOCKETOPTION_PRIVATE_INVALID = 0,
38  /* Disable coalescing of small writes to make TCP segments, and instead
39   * deliver data immediately. For SSL sockets, this option must be set before
40   * SSLHandshake() is called. Value type is PP_VARTYPE_BOOL. */
41  PP_TCPSOCKETOPTION_PRIVATE_NO_DELAY = 1
42} PP_TCPSocketOption_Private;
43PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_TCPSocketOption_Private, 4);
44/**
45 * @}
46 */
47
48/**
49 * @addtogroup Interfaces
50 * @{
51 */
52/**
53 * The <code>PPB_TCPSocket_Private</code> interface provides TCP socket
54 * operations.
55 */
56struct PPB_TCPSocket_Private_0_5 {
57  /**
58   * Allocates a TCP socket resource.
59   */
60  PP_Resource (*Create)(PP_Instance instance);
61  /**
62   * Determines if a given resource is TCP socket.
63   */
64  PP_Bool (*IsTCPSocket)(PP_Resource resource);
65  /**
66   * Connects to a TCP port given as a host-port pair.
67   * When a proxy server is used, |host| and |port| refer to the proxy server
68   * instead of the destination server.
69   */
70  int32_t (*Connect)(PP_Resource tcp_socket,
71                     const char* host,
72                     uint16_t port,
73                     struct PP_CompletionCallback callback);
74  /**
75   * Same as Connect(), but connecting to the address given by |addr|. A typical
76   * use-case would be for reconnections.
77   */
78  int32_t (*ConnectWithNetAddress)(PP_Resource tcp_socket,
79                                   const struct PP_NetAddress_Private* addr,
80                                   struct PP_CompletionCallback callback);
81  /**
82   * Gets the local address of the socket, if it has been connected.
83   * Returns PP_TRUE on success.
84   */
85  PP_Bool (*GetLocalAddress)(PP_Resource tcp_socket,
86                             struct PP_NetAddress_Private* local_addr);
87  /**
88   * Gets the remote address of the socket, if it has been connected.
89   * Returns PP_TRUE on success.
90   */
91  PP_Bool (*GetRemoteAddress)(PP_Resource tcp_socket,
92                              struct PP_NetAddress_Private* remote_addr);
93  /**
94   * Does SSL handshake and moves to sending and receiving encrypted data. The
95   * socket must have been successfully connected. |server_name| will be
96   * compared with the name(s) in the server's certificate during the SSL
97   * handshake. |server_port| is only used to identify an SSL server in the SSL
98   * session cache.
99   * When a proxy server is used, |server_name| and |server_port| refer to the
100   * destination server.
101   * If the socket is not connected, or there are pending read/write requests,
102   * SSLHandshake() will fail without starting a handshake. Otherwise, any
103   * failure during the handshake process will cause the socket to be
104   * disconnected.
105   */
106  int32_t (*SSLHandshake)(PP_Resource tcp_socket,
107                          const char* server_name,
108                          uint16_t server_port,
109                          struct PP_CompletionCallback callback);
110  /**
111   * Returns the server's <code>PPB_X509Certificate_Private</code> for a socket
112   * connection if an SSL connection has been established using
113   * <code>SSLHandshake</code>. If no SSL connection has been established, a
114   * null resource is returned.
115   */
116  PP_Resource (*GetServerCertificate)(PP_Resource tcp_socket);
117  /**
118   * NOTE: This function is not implemented and will return
119   * <code>PP_FALSE</code>.
120   * Adds a trusted/untrusted chain building certificate to be used for this
121   * connection. The <code>certificate</code> must be a
122   * <code>PPB_X509Certificate_Private<code>. <code>PP_TRUE</code> is returned
123   * upon success.
124   */
125  PP_Bool (*AddChainBuildingCertificate)(PP_Resource tcp_socket,
126                                         PP_Resource certificate,
127                                         PP_Bool is_trusted);
128  /**
129   * Reads data from the socket. The size of |buffer| must be at least as large
130   * as |bytes_to_read|. May perform a partial read. Returns the number of bytes
131   * read or an error code. If the return value is 0, then it indicates that
132   * end-of-file was reached.
133   * This method won't return more than 1 megabyte, so if |bytes_to_read|
134   * exceeds 1 megabyte, it will always perform a partial read.
135   * Multiple outstanding read requests are not supported.
136   */
137  int32_t (*Read)(PP_Resource tcp_socket,
138                  char* buffer,
139                  int32_t bytes_to_read,
140                  struct PP_CompletionCallback callback);
141  /**
142   * Writes data to the socket. May perform a partial write. Returns the number
143   * of bytes written or an error code.
144   * This method won't write more than 1 megabyte, so if |bytes_to_write|
145   * exceeds 1 megabyte, it will always perform a partial write.
146   * Multiple outstanding write requests are not supported.
147   */
148  int32_t (*Write)(PP_Resource tcp_socket,
149                   const char* buffer,
150                   int32_t bytes_to_write,
151                   struct PP_CompletionCallback callback);
152  /**
153   * Cancels any IO that may be pending, and disconnects the socket. Any pending
154   * callbacks will still run, reporting PP_Error_Aborted if pending IO was
155   * interrupted. It is NOT valid to call Connect() again after a call to this
156   * method. Note: If the socket is destroyed when it is still connected, then
157   * it will be implicitly disconnected, so you are not required to call this
158   * method.
159   */
160  void (*Disconnect)(PP_Resource tcp_socket);
161  /**
162   * Sets an option on |tcp_socket|.  Supported |name| and |value| parameters
163   * are as described for PP_TCPSocketOption_Private.  |callback| will be
164   * invoked with PP_OK if setting the option succeeds, or an error code
165   * otherwise. The socket must be connection before SetOption is called.
166   */
167  int32_t (*SetOption)(PP_Resource tcp_socket,
168                       PP_TCPSocketOption_Private name,
169                       struct PP_Var value,
170                       struct PP_CompletionCallback callback);
171};
172
173typedef struct PPB_TCPSocket_Private_0_5 PPB_TCPSocket_Private;
174
175struct PPB_TCPSocket_Private_0_3 {
176  PP_Resource (*Create)(PP_Instance instance);
177  PP_Bool (*IsTCPSocket)(PP_Resource resource);
178  int32_t (*Connect)(PP_Resource tcp_socket,
179                     const char* host,
180                     uint16_t port,
181                     struct PP_CompletionCallback callback);
182  int32_t (*ConnectWithNetAddress)(PP_Resource tcp_socket,
183                                   const struct PP_NetAddress_Private* addr,
184                                   struct PP_CompletionCallback callback);
185  PP_Bool (*GetLocalAddress)(PP_Resource tcp_socket,
186                             struct PP_NetAddress_Private* local_addr);
187  PP_Bool (*GetRemoteAddress)(PP_Resource tcp_socket,
188                              struct PP_NetAddress_Private* remote_addr);
189  int32_t (*SSLHandshake)(PP_Resource tcp_socket,
190                          const char* server_name,
191                          uint16_t server_port,
192                          struct PP_CompletionCallback callback);
193  int32_t (*Read)(PP_Resource tcp_socket,
194                  char* buffer,
195                  int32_t bytes_to_read,
196                  struct PP_CompletionCallback callback);
197  int32_t (*Write)(PP_Resource tcp_socket,
198                   const char* buffer,
199                   int32_t bytes_to_write,
200                   struct PP_CompletionCallback callback);
201  void (*Disconnect)(PP_Resource tcp_socket);
202};
203
204struct PPB_TCPSocket_Private_0_4 {
205  PP_Resource (*Create)(PP_Instance instance);
206  PP_Bool (*IsTCPSocket)(PP_Resource resource);
207  int32_t (*Connect)(PP_Resource tcp_socket,
208                     const char* host,
209                     uint16_t port,
210                     struct PP_CompletionCallback callback);
211  int32_t (*ConnectWithNetAddress)(PP_Resource tcp_socket,
212                                   const struct PP_NetAddress_Private* addr,
213                                   struct PP_CompletionCallback callback);
214  PP_Bool (*GetLocalAddress)(PP_Resource tcp_socket,
215                             struct PP_NetAddress_Private* local_addr);
216  PP_Bool (*GetRemoteAddress)(PP_Resource tcp_socket,
217                              struct PP_NetAddress_Private* remote_addr);
218  int32_t (*SSLHandshake)(PP_Resource tcp_socket,
219                          const char* server_name,
220                          uint16_t server_port,
221                          struct PP_CompletionCallback callback);
222  PP_Resource (*GetServerCertificate)(PP_Resource tcp_socket);
223  PP_Bool (*AddChainBuildingCertificate)(PP_Resource tcp_socket,
224                                         PP_Resource certificate,
225                                         PP_Bool is_trusted);
226  int32_t (*Read)(PP_Resource tcp_socket,
227                  char* buffer,
228                  int32_t bytes_to_read,
229                  struct PP_CompletionCallback callback);
230  int32_t (*Write)(PP_Resource tcp_socket,
231                   const char* buffer,
232                   int32_t bytes_to_write,
233                   struct PP_CompletionCallback callback);
234  void (*Disconnect)(PP_Resource tcp_socket);
235};
236/**
237 * @}
238 */
239
240#endif  /* PPAPI_C_PRIVATE_PPB_TCP_SOCKET_PRIVATE_H_ */
241
242