1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/**
* This file defines the <code>PPB_TCPSocket_Private</code> interface.
*/
label Chrome {
M17 = 0.3,
M20 = 0.4,
M27 = 0.5
};
[assert_size(4)]
enum PP_TCPSocketOption_Private {
// Special value used for testing. Guaranteed to fail SetOption().
PP_TCPSOCKETOPTION_INVALID = 0,
// Disable coalescing of small writes to make TCP segments, and instead
// deliver data immediately. For SSL sockets, this option must be set before
// SSLHandshake() is called. Value type is PP_VARTYPE_BOOL.
PP_TCPSOCKETOPTION_NO_DELAY = 1
};
/**
* The <code>PPB_TCPSocket_Private</code> interface provides TCP socket
* operations.
*/
interface PPB_TCPSocket_Private {
/**
* Allocates a TCP socket resource.
*/
PP_Resource Create([in] PP_Instance instance);
/**
* Determines if a given resource is TCP socket.
*/
PP_Bool IsTCPSocket([in] PP_Resource resource);
/**
* Connects to a TCP port given as a host-port pair.
* When a proxy server is used, |host| and |port| refer to the proxy server
* instead of the destination server.
*/
int32_t Connect([in] PP_Resource tcp_socket,
[in] str_t host,
[in] uint16_t port,
[in] PP_CompletionCallback callback);
/**
* Same as Connect(), but connecting to the address given by |addr|. A typical
* use-case would be for reconnections.
*/
int32_t ConnectWithNetAddress([in] PP_Resource tcp_socket,
[in] PP_NetAddress_Private addr,
[in] PP_CompletionCallback callback);
/**
* Gets the local address of the socket, if it has been connected.
* Returns PP_TRUE on success.
*/
PP_Bool GetLocalAddress([in] PP_Resource tcp_socket,
[out] PP_NetAddress_Private local_addr);
/**
* Gets the remote address of the socket, if it has been connected.
* Returns PP_TRUE on success.
*/
PP_Bool GetRemoteAddress([in] PP_Resource tcp_socket,
[out] PP_NetAddress_Private remote_addr);
/**
* Does SSL handshake and moves to sending and receiving encrypted data. The
* socket must have been successfully connected. |server_name| will be
* compared with the name(s) in the server's certificate during the SSL
* handshake. |server_port| is only used to identify an SSL server in the SSL
* session cache.
* When a proxy server is used, |server_name| and |server_port| refer to the
* destination server.
* If the socket is not connected, or there are pending read/write requests,
* SSLHandshake() will fail without starting a handshake. Otherwise, any
* failure during the handshake process will cause the socket to be
* disconnected.
*/
int32_t SSLHandshake([in] PP_Resource tcp_socket,
[in] str_t server_name,
[in] uint16_t server_port,
[in] PP_CompletionCallback callback);
/**
* Returns the server's <code>PPB_X509Certificate_Private</code> for a socket
* connection if an SSL connection has been established using
* <code>SSLHandshake</code>. If no SSL connection has been established, a
* null resource is returned.
*/
[version=0.4]
PP_Resource GetServerCertificate([in] PP_Resource tcp_socket);
/**
* NOTE: This function is not implemented and will return
* <code>PP_FALSE</code>.
* Adds a trusted/untrusted chain building certificate to be used for this
* connection. The <code>certificate</code> must be a
* <code>PPB_X509Certificate_Private<code>. <code>PP_TRUE</code> is returned
* upon success.
*/
[version=0.4]
PP_Bool AddChainBuildingCertificate([in] PP_Resource tcp_socket,
[in] PP_Resource certificate,
[in] PP_Bool is_trusted);
/**
* Reads data from the socket. The size of |buffer| must be at least as large
* as |bytes_to_read|. May perform a partial read. Returns the number of bytes
* read or an error code. If the return value is 0, then it indicates that
* end-of-file was reached.
* This method won't return more than 1 megabyte, so if |bytes_to_read|
* exceeds 1 megabyte, it will always perform a partial read.
* Multiple outstanding read requests are not supported.
*/
int32_t Read([in] PP_Resource tcp_socket,
[out] str_t buffer,
[in] int32_t bytes_to_read,
[in] PP_CompletionCallback callback);
/**
* Writes data to the socket. May perform a partial write. Returns the number
* of bytes written or an error code.
* This method won't write more than 1 megabyte, so if |bytes_to_write|
* exceeds 1 megabyte, it will always perform a partial write.
* Multiple outstanding write requests are not supported.
*/
int32_t Write([in] PP_Resource tcp_socket,
[in] str_t buffer,
[in] int32_t bytes_to_write,
[in] PP_CompletionCallback callback);
/**
* Cancels any IO that may be pending, and disconnects the socket. Any pending
* callbacks will still run, reporting PP_Error_Aborted if pending IO was
* interrupted. It is NOT valid to call Connect() again after a call to this
* method. Note: If the socket is destroyed when it is still connected, then
* it will be implicitly disconnected, so you are not required to call this
* method.
*/
void Disconnect([in] PP_Resource tcp_socket);
/**
* Sets an option on |tcp_socket|. Supported |name| and |value| parameters
* are as described for PP_TCPSocketOption_Private. |callback| will be
* invoked with PP_OK if setting the option succeeds, or an error code
* otherwise. The socket must be connection before SetOption is called.
*/
[version=0.5]
int32_t SetOption([in] PP_Resource tcp_socket,
[in] PP_TCPSocketOption_Private name,
[in] PP_Var value,
[in] PP_CompletionCallback callback);
};
|