Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: ppapi/cpp/private/tcp_socket_private.cc

Issue 12220050: Provide a way to disable Nagle's algorithm on Pepper TCP sockets. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/cpp/private/tcp_socket_private.h" 5 #include "ppapi/cpp/private/tcp_socket_private.h"
6 6
7 #include "ppapi/c/pp_bool.h" 7 #include "ppapi/c/pp_bool.h"
8 #include "ppapi/c/pp_errors.h" 8 #include "ppapi/c/pp_errors.h"
9 #include "ppapi/cpp/completion_callback.h" 9 #include "ppapi/cpp/completion_callback.h"
10 #include "ppapi/cpp/instance_handle.h" 10 #include "ppapi/cpp/instance_handle.h"
11 #include "ppapi/cpp/module.h" 11 #include "ppapi/cpp/module.h"
12 #include "ppapi/cpp/module_impl.h" 12 #include "ppapi/cpp/module_impl.h"
13 13
14 namespace pp { 14 namespace pp {
15 15
16 namespace { 16 namespace {
17 17
18 template <> const char* interface_name<PPB_TCPSocket_Private_0_5>() {
19 return PPB_TCPSOCKET_PRIVATE_INTERFACE_0_5;
20 }
21
18 template <> const char* interface_name<PPB_TCPSocket_Private_0_4>() { 22 template <> const char* interface_name<PPB_TCPSocket_Private_0_4>() {
19 return PPB_TCPSOCKET_PRIVATE_INTERFACE_0_4; 23 return PPB_TCPSOCKET_PRIVATE_INTERFACE_0_4;
20 } 24 }
21 25
22 template <> const char* interface_name<PPB_TCPSocket_Private_0_3>() { 26 template <> const char* interface_name<PPB_TCPSocket_Private_0_3>() {
23 return PPB_TCPSOCKET_PRIVATE_INTERFACE_0_3; 27 return PPB_TCPSOCKET_PRIVATE_INTERFACE_0_3;
24 } 28 }
25 29
26 } // namespace 30 } // namespace
27 31
28 TCPSocketPrivate::TCPSocketPrivate(const InstanceHandle& instance) { 32 TCPSocketPrivate::TCPSocketPrivate(const InstanceHandle& instance) {
29 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 33 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
34 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private_0_5>()->Create(
35 instance.pp_instance()));
36 } else if (has_interface<PPB_TCPSocket_Private_0_4>()) {
30 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private_0_4>()->Create( 37 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private_0_4>()->Create(
31 instance.pp_instance())); 38 instance.pp_instance()));
32 } else if (has_interface<PPB_TCPSocket_Private_0_3>()) { 39 } else if (has_interface<PPB_TCPSocket_Private_0_3>()) {
33 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private_0_3>()->Create( 40 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private_0_3>()->Create(
34 instance.pp_instance())); 41 instance.pp_instance()));
35 } 42 }
36 } 43 }
37 44
38 TCPSocketPrivate::TCPSocketPrivate(PassRef, PP_Resource resource) 45 TCPSocketPrivate::TCPSocketPrivate(PassRef, PP_Resource resource)
39 : Resource(PASS_REF, resource) { 46 : Resource(PASS_REF, resource) {
40 } 47 }
41 48
42 // static 49 // static
43 bool TCPSocketPrivate::IsAvailable() { 50 bool TCPSocketPrivate::IsAvailable() {
44 return has_interface<PPB_TCPSocket_Private_0_4>() || 51 return has_interface<PPB_TCPSocket_Private_0_5>() ||
52 has_interface<PPB_TCPSocket_Private_0_4>() ||
45 has_interface<PPB_TCPSocket_Private_0_3>(); 53 has_interface<PPB_TCPSocket_Private_0_3>();
46 } 54 }
47 55
48 int32_t TCPSocketPrivate::Connect(const char* host, 56 int32_t TCPSocketPrivate::Connect(const char* host,
49 uint16_t port, 57 uint16_t port,
50 const CompletionCallback& callback) { 58 const CompletionCallback& callback) {
59 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
60 return get_interface<PPB_TCPSocket_Private_0_5>()->Connect(
61 pp_resource(), host, port, callback.pp_completion_callback());
62 }
51 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 63 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
52 return get_interface<PPB_TCPSocket_Private_0_4>()->Connect( 64 return get_interface<PPB_TCPSocket_Private_0_4>()->Connect(
53 pp_resource(), host, port, callback.pp_completion_callback()); 65 pp_resource(), host, port, callback.pp_completion_callback());
54 } 66 }
55 if (has_interface<PPB_TCPSocket_Private_0_3>()) { 67 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
56 return get_interface<PPB_TCPSocket_Private_0_3>()->Connect( 68 return get_interface<PPB_TCPSocket_Private_0_3>()->Connect(
57 pp_resource(), host, port, callback.pp_completion_callback()); 69 pp_resource(), host, port, callback.pp_completion_callback());
58 } 70 }
59 return callback.MayForce(PP_ERROR_NOINTERFACE); 71 return callback.MayForce(PP_ERROR_NOINTERFACE);
60 } 72 }
61 73
62 int32_t TCPSocketPrivate::ConnectWithNetAddress( 74 int32_t TCPSocketPrivate::ConnectWithNetAddress(
63 const PP_NetAddress_Private* addr, 75 const PP_NetAddress_Private* addr,
64 const CompletionCallback& callback) { 76 const CompletionCallback& callback) {
77 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
78 return get_interface<PPB_TCPSocket_Private_0_5>()->ConnectWithNetAddress(
79 pp_resource(), addr, callback.pp_completion_callback());
80 }
65 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 81 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
66 return get_interface<PPB_TCPSocket_Private_0_4>()->ConnectWithNetAddress( 82 return get_interface<PPB_TCPSocket_Private_0_4>()->ConnectWithNetAddress(
67 pp_resource(), addr, callback.pp_completion_callback()); 83 pp_resource(), addr, callback.pp_completion_callback());
68 } 84 }
69 if (has_interface<PPB_TCPSocket_Private_0_3>()) { 85 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
70 return get_interface<PPB_TCPSocket_Private_0_3>()->ConnectWithNetAddress( 86 return get_interface<PPB_TCPSocket_Private_0_3>()->ConnectWithNetAddress(
71 pp_resource(), addr, callback.pp_completion_callback()); 87 pp_resource(), addr, callback.pp_completion_callback());
72 } 88 }
73 return callback.MayForce(PP_ERROR_NOINTERFACE); 89 return callback.MayForce(PP_ERROR_NOINTERFACE);
74 } 90 }
75 91
76 bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) { 92 bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) {
93 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
94 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_5>()->
95 GetLocalAddress(pp_resource(), local_addr);
96 return PP_ToBool(result);
97 }
77 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 98 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
78 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_4>()-> 99 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_4>()->
79 GetLocalAddress(pp_resource(), local_addr); 100 GetLocalAddress(pp_resource(), local_addr);
80 return PP_ToBool(result); 101 return PP_ToBool(result);
81 } 102 }
82 if (has_interface<PPB_TCPSocket_Private_0_3>()) { 103 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
83 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()-> 104 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()->
84 GetLocalAddress(pp_resource(), local_addr); 105 GetLocalAddress(pp_resource(), local_addr);
85 return PP_ToBool(result); 106 return PP_ToBool(result);
86 } 107 }
87 return false; 108 return false;
88 } 109 }
89 110
90 bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) { 111 bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) {
112 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
113 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_5>()->
114 GetRemoteAddress(pp_resource(), remote_addr);
115 return PP_ToBool(result);
116 }
91 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 117 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
92 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_4>()-> 118 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_4>()->
93 GetRemoteAddress(pp_resource(), remote_addr); 119 GetRemoteAddress(pp_resource(), remote_addr);
94 return PP_ToBool(result); 120 return PP_ToBool(result);
95 } 121 }
96 if (has_interface<PPB_TCPSocket_Private_0_3>()) { 122 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
97 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()-> 123 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()->
98 GetRemoteAddress(pp_resource(), remote_addr); 124 GetRemoteAddress(pp_resource(), remote_addr);
99 return PP_ToBool(result); 125 return PP_ToBool(result);
100 } 126 }
101 return false; 127 return false;
102 } 128 }
103 129
104 int32_t TCPSocketPrivate::SSLHandshake(const char* server_name, 130 int32_t TCPSocketPrivate::SSLHandshake(const char* server_name,
105 uint16_t server_port, 131 uint16_t server_port,
106 const CompletionCallback& callback) { 132 const CompletionCallback& callback) {
133 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
134 return get_interface<PPB_TCPSocket_Private_0_5>()->SSLHandshake(
135 pp_resource(), server_name, server_port,
136 callback.pp_completion_callback());
137 }
107 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 138 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
108 return get_interface<PPB_TCPSocket_Private_0_4>()->SSLHandshake( 139 return get_interface<PPB_TCPSocket_Private_0_4>()->SSLHandshake(
109 pp_resource(), server_name, server_port, 140 pp_resource(), server_name, server_port,
110 callback.pp_completion_callback()); 141 callback.pp_completion_callback());
111 } 142 }
112 if (has_interface<PPB_TCPSocket_Private_0_3>()) { 143 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
113 return get_interface<PPB_TCPSocket_Private_0_3>()->SSLHandshake( 144 return get_interface<PPB_TCPSocket_Private_0_3>()->SSLHandshake(
114 pp_resource(), server_name, server_port, 145 pp_resource(), server_name, server_port,
115 callback.pp_completion_callback()); 146 callback.pp_completion_callback());
116 } 147 }
117 return callback.MayForce(PP_ERROR_NOINTERFACE); 148 return callback.MayForce(PP_ERROR_NOINTERFACE);
118 } 149 }
119 150
120 X509CertificatePrivate TCPSocketPrivate::GetServerCertificate() { 151 X509CertificatePrivate TCPSocketPrivate::GetServerCertificate() {
152 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
153 return X509CertificatePrivate(PASS_REF,
154 get_interface<PPB_TCPSocket_Private_0_5>()->GetServerCertificate(
155 pp_resource()));
156 }
121 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 157 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
122 return X509CertificatePrivate(PASS_REF, 158 return X509CertificatePrivate(PASS_REF,
123 get_interface<PPB_TCPSocket_Private_0_4>()->GetServerCertificate( 159 get_interface<PPB_TCPSocket_Private_0_4>()->GetServerCertificate(
124 pp_resource())); 160 pp_resource()));
125 } 161 }
126 return X509CertificatePrivate(); 162 return X509CertificatePrivate();
127 } 163 }
128 164
129 bool TCPSocketPrivate::AddChainBuildingCertificate( 165 bool TCPSocketPrivate::AddChainBuildingCertificate(
130 const X509CertificatePrivate& cert, 166 const X509CertificatePrivate& cert,
131 bool trusted) { 167 bool trusted) {
168 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
169 return PP_ToBool(get_interface<PPB_TCPSocket_Private_0_5>()->
170 AddChainBuildingCertificate(pp_resource(), cert.pp_resource(),
171 PP_FromBool(trusted)));
172 }
132 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 173 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
133 return PP_ToBool(get_interface<PPB_TCPSocket_Private_0_4>()-> 174 return PP_ToBool(get_interface<PPB_TCPSocket_Private_0_4>()->
134 AddChainBuildingCertificate(pp_resource(), cert.pp_resource(), 175 AddChainBuildingCertificate(pp_resource(), cert.pp_resource(),
135 PP_FromBool(trusted))); 176 PP_FromBool(trusted)));
136 } 177 }
137 return false; 178 return false;
138 } 179 }
139 180
140 int32_t TCPSocketPrivate::Read(char* buffer, 181 int32_t TCPSocketPrivate::Read(char* buffer,
141 int32_t bytes_to_read, 182 int32_t bytes_to_read,
142 const CompletionCallback& callback) { 183 const CompletionCallback& callback) {
184 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
185 return get_interface<PPB_TCPSocket_Private_0_5>()->Read(
186 pp_resource(), buffer, bytes_to_read,
187 callback.pp_completion_callback());
188 }
143 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 189 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
144 return get_interface<PPB_TCPSocket_Private_0_4>()->Read( 190 return get_interface<PPB_TCPSocket_Private_0_4>()->Read(
145 pp_resource(), buffer, bytes_to_read, 191 pp_resource(), buffer, bytes_to_read,
146 callback.pp_completion_callback()); 192 callback.pp_completion_callback());
147 } 193 }
148 if (has_interface<PPB_TCPSocket_Private_0_3>()) { 194 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
149 return get_interface<PPB_TCPSocket_Private_0_3>()->Read( 195 return get_interface<PPB_TCPSocket_Private_0_3>()->Read(
150 pp_resource(), buffer, bytes_to_read, 196 pp_resource(), buffer, bytes_to_read,
151 callback.pp_completion_callback()); 197 callback.pp_completion_callback());
152 } 198 }
153 return callback.MayForce(PP_ERROR_NOINTERFACE); 199 return callback.MayForce(PP_ERROR_NOINTERFACE);
154 } 200 }
155 201
156 int32_t TCPSocketPrivate::Write(const char* buffer, 202 int32_t TCPSocketPrivate::Write(const char* buffer,
157 int32_t bytes_to_write, 203 int32_t bytes_to_write,
158 const CompletionCallback& callback) { 204 const CompletionCallback& callback) {
205 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
206 return get_interface<PPB_TCPSocket_Private_0_5>()->Write(
207 pp_resource(), buffer, bytes_to_write,
208 callback.pp_completion_callback());
209 }
159 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 210 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
160 return get_interface<PPB_TCPSocket_Private_0_4>()->Write( 211 return get_interface<PPB_TCPSocket_Private_0_4>()->Write(
161 pp_resource(), buffer, bytes_to_write, 212 pp_resource(), buffer, bytes_to_write,
162 callback.pp_completion_callback()); 213 callback.pp_completion_callback());
163 } 214 }
164 if (has_interface<PPB_TCPSocket_Private_0_3>()) { 215 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
165 return get_interface<PPB_TCPSocket_Private_0_3>()->Write( 216 return get_interface<PPB_TCPSocket_Private_0_3>()->Write(
166 pp_resource(), buffer, bytes_to_write, 217 pp_resource(), buffer, bytes_to_write,
167 callback.pp_completion_callback()); 218 callback.pp_completion_callback());
168 } 219 }
169 return callback.MayForce(PP_ERROR_NOINTERFACE); 220 return callback.MayForce(PP_ERROR_NOINTERFACE);
170 } 221 }
171 222
172 void TCPSocketPrivate::Disconnect() { 223 void TCPSocketPrivate::Disconnect() {
224 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
225 return get_interface<PPB_TCPSocket_Private_0_5>()->Disconnect(
226 pp_resource());
227 }
173 if (has_interface<PPB_TCPSocket_Private_0_4>()) { 228 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
174 return get_interface<PPB_TCPSocket_Private_0_4>()->Disconnect( 229 return get_interface<PPB_TCPSocket_Private_0_4>()->Disconnect(
175 pp_resource()); 230 pp_resource());
176 } 231 }
177 if (has_interface<PPB_TCPSocket_Private_0_3>()) { 232 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
178 return get_interface<PPB_TCPSocket_Private_0_3>()->Disconnect( 233 return get_interface<PPB_TCPSocket_Private_0_3>()->Disconnect(
179 pp_resource()); 234 pp_resource());
180 } 235 }
181 } 236 }
182 237
238 int32_t TCPSocketPrivate::SetOption(PP_TCPSocketOption_Private name,
239 const Var& value,
240 const CompletionCallback& callback) {
241 if (has_interface<PPB_TCPSocket_Private_0_5>()) {
242 return get_interface<PPB_TCPSocket_Private_0_5>()->SetOption(
243 pp_resource(), name, value.pp_var(), callback.pp_completion_callback());
244 }
245 return callback.MayForce(PP_ERROR_NOINTERFACE);
246 }
247
183 } // namespace pp 248 } // namespace pp
OLDNEW
« no previous file with comments | « ppapi/cpp/private/tcp_socket_private.h ('k') | ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698