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

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

Issue 9699100: Add functionality to pppapi TCPSocket to support secure sockets in flash (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 8 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>() { 18 template <> const char* interface_name<PPB_TCPSocket_Private>() {
yzshen1 2012/04/06 19:24:33 Please explicitly add 0_4 for this one.
raymes 2012/04/06 23:22:47 Done.
19 return PPB_TCPSOCKET_PRIVATE_INTERFACE; 19 return PPB_TCPSOCKET_PRIVATE_INTERFACE;
yzshen1 2012/04/06 19:24:33 ditto.
raymes 2012/04/06 23:22:47 Done.
20 } 20 }
21 21
22 template <> const char* interface_name<PPB_TCPSocket_Private_0_3>() {
23 return PPB_TCPSOCKET_PRIVATE_INTERFACE_0_3;
24 }
25
22 } // namespace 26 } // namespace
23 27
24 TCPSocketPrivate::TCPSocketPrivate(const InstanceHandle& instance) { 28 TCPSocketPrivate::TCPSocketPrivate(const InstanceHandle& instance) {
25 if (has_interface<PPB_TCPSocket_Private>()) { 29 if ((has_interface<PPB_TCPSocket_Private>() ||
30 has_interface<PPB_TCPSocket_Private_0_3>()) && instance.pp_instance()) {
yzshen1 2012/04/06 19:24:33 I used to be told to not validate instance here. B
raymes 2012/04/06 23:22:47 Done.
26 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private>()->Create( 31 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private>()->Create(
27 instance.pp_instance())); 32 instance.pp_instance()));
28 } 33 }
29 } 34 }
30 35
31 TCPSocketPrivate::TCPSocketPrivate(PassRef, PP_Resource resource) 36 TCPSocketPrivate::TCPSocketPrivate(PassRef, PP_Resource resource)
32 : Resource(PASS_REF, resource) { 37 : Resource(PASS_REF, resource) {
33 } 38 }
34 39
35 // static 40 // static
36 bool TCPSocketPrivate::IsAvailable() { 41 bool TCPSocketPrivate::IsAvailable() {
37 return has_interface<PPB_TCPSocket_Private>(); 42 return has_interface<PPB_TCPSocket_Private>() ||
43 has_interface<PPB_TCPSocket_Private_0_3>();
38 } 44 }
39 45
40 int32_t TCPSocketPrivate::Connect(const char* host, 46 int32_t TCPSocketPrivate::Connect(const char* host,
41 uint16_t port, 47 uint16_t port,
42 const CompletionCallback& callback) { 48 const CompletionCallback& callback) {
43 if (!has_interface<PPB_TCPSocket_Private>()) 49 if (has_interface<PPB_TCPSocket_Private>())
44 return callback.MayForce(PP_ERROR_NOINTERFACE); 50 return get_interface<PPB_TCPSocket_Private>()->Connect(
45 return get_interface<PPB_TCPSocket_Private>()->Connect( 51 pp_resource(), host, port, callback.pp_completion_callback());
46 pp_resource(), host, port, callback.pp_completion_callback()); 52 if (has_interface<PPB_TCPSocket_Private_0_3>())
53 return get_interface<PPB_TCPSocket_Private_0_3>()->Connect(
54 pp_resource(), host, port, callback.pp_completion_callback());
55 return callback.MayForce(PP_ERROR_NOINTERFACE);
47 } 56 }
48 57
49 int32_t TCPSocketPrivate::ConnectWithNetAddress( 58 int32_t TCPSocketPrivate::ConnectWithNetAddress(
50 const PP_NetAddress_Private* addr, 59 const PP_NetAddress_Private* addr,
51 const CompletionCallback& callback) { 60 const CompletionCallback& callback) {
52 if (!has_interface<PPB_TCPSocket_Private>()) 61 if (has_interface<PPB_TCPSocket_Private>())
53 return callback.MayForce(PP_ERROR_NOINTERFACE); 62 return get_interface<PPB_TCPSocket_Private>()->ConnectWithNetAddress(
54 return get_interface<PPB_TCPSocket_Private>()->ConnectWithNetAddress( 63 pp_resource(), addr, callback.pp_completion_callback());
55 pp_resource(), addr, callback.pp_completion_callback()); 64 if (has_interface<PPB_TCPSocket_Private_0_3>())
65 return get_interface<PPB_TCPSocket_Private_0_3>()->ConnectWithNetAddress(
66 pp_resource(), addr, callback.pp_completion_callback());
67 return callback.MayForce(PP_ERROR_NOINTERFACE);
56 } 68 }
57 69
58 bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) { 70 bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) {
59 if (!has_interface<PPB_TCPSocket_Private>()) 71 if (has_interface<PPB_TCPSocket_Private>()) {
60 return false; 72 PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetLocalAddress(
61 73 pp_resource(), local_addr);
62 PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetLocalAddress( 74 return PP_ToBool(result);
63 pp_resource(), local_addr); 75 }
64 return PP_ToBool(result); 76 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
77 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()->
78 GetLocalAddress(pp_resource(), local_addr);
79 return PP_ToBool(result);
80 }
81 return false;
65 } 82 }
66 83
67 bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) { 84 bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) {
68 if (!has_interface<PPB_TCPSocket_Private>()) 85 if (has_interface<PPB_TCPSocket_Private>()) {
69 return false; 86 PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetRemoteAddress(
70 PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetRemoteAddress( 87 pp_resource(), remote_addr);
71 pp_resource(), remote_addr); 88 return PP_ToBool(result);
72 return PP_ToBool(result); 89 }
90 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
91 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()->
92 GetRemoteAddress(pp_resource(), remote_addr);
93 return PP_ToBool(result);
94 }
95 return false;
73 } 96 }
74 97
75 int32_t TCPSocketPrivate::SSLHandshake(const char* server_name, 98 int32_t TCPSocketPrivate::SSLHandshake(const char* server_name,
76 uint16_t server_port, 99 uint16_t server_port,
77 const CompletionCallback& callback) { 100 const CompletionCallback& callback) {
78 if (!has_interface<PPB_TCPSocket_Private>()) 101 if (has_interface<PPB_TCPSocket_Private>()) {
79 return callback.MayForce(PP_ERROR_NOINTERFACE); 102 return get_interface<PPB_TCPSocket_Private>()->SSLHandshake(
80 return get_interface<PPB_TCPSocket_Private>()->SSLHandshake( 103 pp_resource(), server_name, server_port,
yzshen1 2012/04/06 19:24:33 wrong indent. (and also line 108)
raymes 2012/04/06 23:22:47 Done.
81 pp_resource(), server_name, server_port, 104 callback.pp_completion_callback());
82 callback.pp_completion_callback()); 105 }
106 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
107 return get_interface<PPB_TCPSocket_Private_0_3>()->SSLHandshake(
108 pp_resource(), server_name, server_port,
109 callback.pp_completion_callback());
110 }
111 return callback.MayForce(PP_ERROR_NOINTERFACE);
112 }
113
114 X509Certificate TCPSocketPrivate::GetServerCertificate() {
115 if (has_interface<PPB_TCPSocket_Private>())
yzshen1 2012/04/06 19:24:33 Use {} for more-than-one-line body, please. (And p
raymes 2012/04/06 23:22:47 Done.
116 return X509Certificate(
117 get_interface<PPB_TCPSocket_Private>()->GetServerCertificate(
yzshen1 2012/04/06 19:24:33 The handling of ref count here is probably incorre
raymes 2012/04/06 23:22:47 Thanks, I actually didn't know the regular constru
118 pp_resource()));
119 return X509Certificate();
120 }
121
122 bool TCPSocketPrivate::AddChainBuildingCertificate(const X509Certificate& cert,
123 bool trusted) {
124 if (has_interface<PPB_TCPSocket_Private>())
125 return PP_ToBool(get_interface<PPB_TCPSocket_Private>()->
126 AddChainBuildingCertificate(pp_resource(), cert.pp_resource(),
127 PP_FromBool(trusted)));
128 return false;
83 } 129 }
84 130
85 int32_t TCPSocketPrivate::Read(char* buffer, 131 int32_t TCPSocketPrivate::Read(char* buffer,
86 int32_t bytes_to_read, 132 int32_t bytes_to_read,
87 const CompletionCallback& callback) { 133 const CompletionCallback& callback) {
88 if (!has_interface<PPB_TCPSocket_Private>()) 134 if (has_interface<PPB_TCPSocket_Private>())
89 return callback.MayForce(PP_ERROR_NOINTERFACE); 135 return get_interface<PPB_TCPSocket_Private>()->Read(
90 return get_interface<PPB_TCPSocket_Private>()->Read( 136 pp_resource(), buffer, bytes_to_read,
91 pp_resource(), buffer, bytes_to_read, callback.pp_completion_callback()); 137 callback.pp_completion_callback());
138 if (has_interface<PPB_TCPSocket_Private_0_3>())
139 return get_interface<PPB_TCPSocket_Private_0_3>()->Read(
140 pp_resource(), buffer, bytes_to_read,
141 callback.pp_completion_callback());
142 return callback.MayForce(PP_ERROR_NOINTERFACE);
92 } 143 }
93 144
94 int32_t TCPSocketPrivate::Write(const char* buffer, 145 int32_t TCPSocketPrivate::Write(const char* buffer,
95 int32_t bytes_to_write, 146 int32_t bytes_to_write,
96 const CompletionCallback& callback) { 147 const CompletionCallback& callback) {
97 if (!has_interface<PPB_TCPSocket_Private>()) 148 if (has_interface<PPB_TCPSocket_Private>())
98 return callback.MayForce(PP_ERROR_NOINTERFACE); 149 return get_interface<PPB_TCPSocket_Private>()->Write(
99 return get_interface<PPB_TCPSocket_Private>()->Write( 150 pp_resource(), buffer, bytes_to_write,
100 pp_resource(), buffer, bytes_to_write, callback.pp_completion_callback()); 151 callback.pp_completion_callback());
152 if (has_interface<PPB_TCPSocket_Private_0_3>())
153 return get_interface<PPB_TCPSocket_Private_0_3>()->Write(
154 pp_resource(), buffer, bytes_to_write,
155 callback.pp_completion_callback());
156 return callback.MayForce(PP_ERROR_NOINTERFACE);
101 } 157 }
102 158
103 void TCPSocketPrivate::Disconnect() { 159 void TCPSocketPrivate::Disconnect() {
104 if (!has_interface<PPB_TCPSocket_Private>()) 160 if (has_interface<PPB_TCPSocket_Private>())
105 return; 161 return get_interface<PPB_TCPSocket_Private>()->Disconnect(pp_resource());
106 return get_interface<PPB_TCPSocket_Private>()->Disconnect(pp_resource()); 162 if (has_interface<PPB_TCPSocket_Private_0_3>())
163 return get_interface<PPB_TCPSocket_Private_0_3>()->Disconnect(
164 pp_resource());
107 } 165 }
108 166
109 } // namespace pp 167 } // namespace pp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698