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

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_0_4>() {
19 return PPB_TCPSOCKET_PRIVATE_INTERFACE; 19 return PPB_TCPSOCKET_PRIVATE_INTERFACE_0_4;
20 }
21
22 template <> const char* interface_name<PPB_TCPSocket_Private_0_3>() {
23 return PPB_TCPSOCKET_PRIVATE_INTERFACE_0_3;
20 } 24 }
21 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>() ||
yzshen1 2012/04/09 17:55:42 Please change all PPB_TCPSocket_Private to PPB_TCP
raymes 2012/04/09 19:35:50 Done.
30 has_interface<PPB_TCPSocket_Private_0_3>())) {
26 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private>()->Create( 31 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private>()->Create(
yzshen1 2012/04/09 17:55:42 And you need to handle 0.4 and 0.3 separately, jus
raymes 2012/04/09 19:35:50 Done.
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 }
53 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
54 return get_interface<PPB_TCPSocket_Private_0_3>()->Connect(
55 pp_resource(), host, port, callback.pp_completion_callback());
56 }
57 return callback.MayForce(PP_ERROR_NOINTERFACE);
47 } 58 }
48 59
49 int32_t TCPSocketPrivate::ConnectWithNetAddress( 60 int32_t TCPSocketPrivate::ConnectWithNetAddress(
50 const PP_NetAddress_Private* addr, 61 const PP_NetAddress_Private* addr,
51 const CompletionCallback& callback) { 62 const CompletionCallback& callback) {
52 if (!has_interface<PPB_TCPSocket_Private>()) 63 if (has_interface<PPB_TCPSocket_Private>()) {
53 return callback.MayForce(PP_ERROR_NOINTERFACE); 64 return get_interface<PPB_TCPSocket_Private>()->ConnectWithNetAddress(
54 return get_interface<PPB_TCPSocket_Private>()->ConnectWithNetAddress( 65 pp_resource(), addr, callback.pp_completion_callback());
55 pp_resource(), addr, callback.pp_completion_callback()); 66 }
67 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
68 return get_interface<PPB_TCPSocket_Private_0_3>()->ConnectWithNetAddress(
69 pp_resource(), addr, callback.pp_completion_callback());
70 }
71 return callback.MayForce(PP_ERROR_NOINTERFACE);
56 } 72 }
57 73
58 bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) { 74 bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) {
59 if (!has_interface<PPB_TCPSocket_Private>()) 75 if (has_interface<PPB_TCPSocket_Private>()) {
60 return false; 76 PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetLocalAddress(
61 77 pp_resource(), local_addr);
62 PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetLocalAddress( 78 return PP_ToBool(result);
63 pp_resource(), local_addr); 79 }
64 return PP_ToBool(result); 80 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
81 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()->
82 GetLocalAddress(pp_resource(), local_addr);
83 return PP_ToBool(result);
84 }
85 return false;
65 } 86 }
66 87
67 bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) { 88 bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) {
68 if (!has_interface<PPB_TCPSocket_Private>()) 89 if (has_interface<PPB_TCPSocket_Private>()) {
69 return false; 90 PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetRemoteAddress(
70 PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetRemoteAddress( 91 pp_resource(), remote_addr);
71 pp_resource(), remote_addr); 92 return PP_ToBool(result);
72 return PP_ToBool(result); 93 }
94 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
95 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()->
96 GetRemoteAddress(pp_resource(), remote_addr);
97 return PP_ToBool(result);
98 }
99 return false;
73 } 100 }
74 101
75 int32_t TCPSocketPrivate::SSLHandshake(const char* server_name, 102 int32_t TCPSocketPrivate::SSLHandshake(const char* server_name,
76 uint16_t server_port, 103 uint16_t server_port,
77 const CompletionCallback& callback) { 104 const CompletionCallback& callback) {
78 if (!has_interface<PPB_TCPSocket_Private>()) 105 if (has_interface<PPB_TCPSocket_Private>()) {
79 return callback.MayForce(PP_ERROR_NOINTERFACE); 106 return get_interface<PPB_TCPSocket_Private>()->SSLHandshake(
80 return get_interface<PPB_TCPSocket_Private>()->SSLHandshake( 107 pp_resource(), server_name, server_port,
81 pp_resource(), server_name, server_port, 108 callback.pp_completion_callback());
82 callback.pp_completion_callback()); 109 }
110 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
111 return get_interface<PPB_TCPSocket_Private_0_3>()->SSLHandshake(
112 pp_resource(), server_name, server_port,
113 callback.pp_completion_callback());
114 }
115 return callback.MayForce(PP_ERROR_NOINTERFACE);
116 }
117
118 X509CertificatePrivate TCPSocketPrivate::GetServerCertificate() {
119 if (has_interface<PPB_TCPSocket_Private>()) {
120 return X509CertificatePrivate(PASS_REF,
121 get_interface<PPB_TCPSocket_Private>()->GetServerCertificate(
122 pp_resource()));
123 }
124 return X509CertificatePrivate();
125 }
126
127 bool TCPSocketPrivate::AddChainBuildingCertificate(
128 const X509CertificatePrivate& cert,
129 bool trusted) {
130 if (has_interface<PPB_TCPSocket_Private>()) {
131 return PP_ToBool(get_interface<PPB_TCPSocket_Private>()->
132 AddChainBuildingCertificate(pp_resource(), cert.pp_resource(),
133 PP_FromBool(trusted)));
134 }
135 return false;
83 } 136 }
84 137
85 int32_t TCPSocketPrivate::Read(char* buffer, 138 int32_t TCPSocketPrivate::Read(char* buffer,
86 int32_t bytes_to_read, 139 int32_t bytes_to_read,
87 const CompletionCallback& callback) { 140 const CompletionCallback& callback) {
88 if (!has_interface<PPB_TCPSocket_Private>()) 141 if (has_interface<PPB_TCPSocket_Private>()) {
89 return callback.MayForce(PP_ERROR_NOINTERFACE); 142 return get_interface<PPB_TCPSocket_Private>()->Read(
90 return get_interface<PPB_TCPSocket_Private>()->Read( 143 pp_resource(), buffer, bytes_to_read,
91 pp_resource(), buffer, bytes_to_read, callback.pp_completion_callback()); 144 callback.pp_completion_callback());
145 }
146 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
147 return get_interface<PPB_TCPSocket_Private_0_3>()->Read(
148 pp_resource(), buffer, bytes_to_read,
149 callback.pp_completion_callback());
150 }
151 return callback.MayForce(PP_ERROR_NOINTERFACE);
92 } 152 }
93 153
94 int32_t TCPSocketPrivate::Write(const char* buffer, 154 int32_t TCPSocketPrivate::Write(const char* buffer,
95 int32_t bytes_to_write, 155 int32_t bytes_to_write,
96 const CompletionCallback& callback) { 156 const CompletionCallback& callback) {
97 if (!has_interface<PPB_TCPSocket_Private>()) 157 if (has_interface<PPB_TCPSocket_Private>()) {
98 return callback.MayForce(PP_ERROR_NOINTERFACE); 158 return get_interface<PPB_TCPSocket_Private>()->Write(
99 return get_interface<PPB_TCPSocket_Private>()->Write( 159 pp_resource(), buffer, bytes_to_write,
100 pp_resource(), buffer, bytes_to_write, callback.pp_completion_callback()); 160 callback.pp_completion_callback());
161 }
162 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
163 return get_interface<PPB_TCPSocket_Private_0_3>()->Write(
164 pp_resource(), buffer, bytes_to_write,
165 callback.pp_completion_callback());
166 }
167 return callback.MayForce(PP_ERROR_NOINTERFACE);
101 } 168 }
102 169
103 void TCPSocketPrivate::Disconnect() { 170 void TCPSocketPrivate::Disconnect() {
104 if (!has_interface<PPB_TCPSocket_Private>()) 171 if (has_interface<PPB_TCPSocket_Private>())
105 return; 172 return get_interface<PPB_TCPSocket_Private>()->Disconnect(pp_resource());
106 return get_interface<PPB_TCPSocket_Private>()->Disconnect(pp_resource()); 173 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
174 return get_interface<PPB_TCPSocket_Private_0_3>()->Disconnect(
175 pp_resource());
176 }
107 } 177 }
108 178
109 } // namespace pp 179 } // namespace pp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698