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

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
« no previous file with comments | « ppapi/cpp/private/tcp_socket_private.h ('k') | ppapi/cpp/private/x509_certificate_private.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_0_4>()) {
26 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private>()->Create( 30 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private_0_4>()->Create(
31 instance.pp_instance()));
32 } else if (has_interface<PPB_TCPSocket_Private_0_3>()) {
33 PassRefFromConstructor(get_interface<PPB_TCPSocket_Private_0_3>()->Create(
27 instance.pp_instance())); 34 instance.pp_instance()));
28 } 35 }
29 } 36 }
30 37
31 TCPSocketPrivate::TCPSocketPrivate(PassRef, PP_Resource resource) 38 TCPSocketPrivate::TCPSocketPrivate(PassRef, PP_Resource resource)
32 : Resource(PASS_REF, resource) { 39 : Resource(PASS_REF, resource) {
33 } 40 }
34 41
35 // static 42 // static
36 bool TCPSocketPrivate::IsAvailable() { 43 bool TCPSocketPrivate::IsAvailable() {
37 return has_interface<PPB_TCPSocket_Private>(); 44 return has_interface<PPB_TCPSocket_Private_0_4>() ||
45 has_interface<PPB_TCPSocket_Private_0_3>();
38 } 46 }
39 47
40 int32_t TCPSocketPrivate::Connect(const char* host, 48 int32_t TCPSocketPrivate::Connect(const char* host,
41 uint16_t port, 49 uint16_t port,
42 const CompletionCallback& callback) { 50 const CompletionCallback& callback) {
43 if (!has_interface<PPB_TCPSocket_Private>()) 51 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
44 return callback.MayForce(PP_ERROR_NOINTERFACE); 52 return get_interface<PPB_TCPSocket_Private_0_4>()->Connect(
45 return get_interface<PPB_TCPSocket_Private>()->Connect( 53 pp_resource(), host, port, callback.pp_completion_callback());
46 pp_resource(), host, port, callback.pp_completion_callback()); 54 }
55 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
56 return get_interface<PPB_TCPSocket_Private_0_3>()->Connect(
57 pp_resource(), host, port, callback.pp_completion_callback());
58 }
59 return callback.MayForce(PP_ERROR_NOINTERFACE);
47 } 60 }
48 61
49 int32_t TCPSocketPrivate::ConnectWithNetAddress( 62 int32_t TCPSocketPrivate::ConnectWithNetAddress(
50 const PP_NetAddress_Private* addr, 63 const PP_NetAddress_Private* addr,
51 const CompletionCallback& callback) { 64 const CompletionCallback& callback) {
52 if (!has_interface<PPB_TCPSocket_Private>()) 65 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
53 return callback.MayForce(PP_ERROR_NOINTERFACE); 66 return get_interface<PPB_TCPSocket_Private_0_4>()->ConnectWithNetAddress(
54 return get_interface<PPB_TCPSocket_Private>()->ConnectWithNetAddress( 67 pp_resource(), addr, callback.pp_completion_callback());
55 pp_resource(), addr, callback.pp_completion_callback()); 68 }
69 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
70 return get_interface<PPB_TCPSocket_Private_0_3>()->ConnectWithNetAddress(
71 pp_resource(), addr, callback.pp_completion_callback());
72 }
73 return callback.MayForce(PP_ERROR_NOINTERFACE);
56 } 74 }
57 75
58 bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) { 76 bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) {
59 if (!has_interface<PPB_TCPSocket_Private>()) 77 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
60 return false; 78 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_4>()->
61 79 GetLocalAddress(pp_resource(), local_addr);
62 PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetLocalAddress( 80 return PP_ToBool(result);
63 pp_resource(), local_addr); 81 }
64 return PP_ToBool(result); 82 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
83 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()->
84 GetLocalAddress(pp_resource(), local_addr);
85 return PP_ToBool(result);
86 }
87 return false;
65 } 88 }
66 89
67 bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) { 90 bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) {
68 if (!has_interface<PPB_TCPSocket_Private>()) 91 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
69 return false; 92 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_4>()->
70 PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetRemoteAddress( 93 GetRemoteAddress(pp_resource(), remote_addr);
71 pp_resource(), remote_addr); 94 return PP_ToBool(result);
72 return PP_ToBool(result); 95 }
96 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
97 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()->
98 GetRemoteAddress(pp_resource(), remote_addr);
99 return PP_ToBool(result);
100 }
101 return false;
73 } 102 }
74 103
75 int32_t TCPSocketPrivate::SSLHandshake(const char* server_name, 104 int32_t TCPSocketPrivate::SSLHandshake(const char* server_name,
76 uint16_t server_port, 105 uint16_t server_port,
77 const CompletionCallback& callback) { 106 const CompletionCallback& callback) {
78 if (!has_interface<PPB_TCPSocket_Private>()) 107 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
79 return callback.MayForce(PP_ERROR_NOINTERFACE); 108 return get_interface<PPB_TCPSocket_Private_0_4>()->SSLHandshake(
80 return get_interface<PPB_TCPSocket_Private>()->SSLHandshake( 109 pp_resource(), server_name, server_port,
81 pp_resource(), server_name, server_port, 110 callback.pp_completion_callback());
82 callback.pp_completion_callback()); 111 }
112 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
113 return get_interface<PPB_TCPSocket_Private_0_3>()->SSLHandshake(
114 pp_resource(), server_name, server_port,
115 callback.pp_completion_callback());
116 }
117 return callback.MayForce(PP_ERROR_NOINTERFACE);
118 }
119
120 X509CertificatePrivate TCPSocketPrivate::GetServerCertificate() {
121 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
122 return X509CertificatePrivate(PASS_REF,
123 get_interface<PPB_TCPSocket_Private_0_4>()->GetServerCertificate(
124 pp_resource()));
125 }
126 return X509CertificatePrivate();
127 }
128
129 bool TCPSocketPrivate::AddChainBuildingCertificate(
130 const X509CertificatePrivate& cert,
131 bool trusted) {
132 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
133 return PP_ToBool(get_interface<PPB_TCPSocket_Private_0_4>()->
134 AddChainBuildingCertificate(pp_resource(), cert.pp_resource(),
135 PP_FromBool(trusted)));
136 }
137 return false;
83 } 138 }
84 139
85 int32_t TCPSocketPrivate::Read(char* buffer, 140 int32_t TCPSocketPrivate::Read(char* buffer,
86 int32_t bytes_to_read, 141 int32_t bytes_to_read,
87 const CompletionCallback& callback) { 142 const CompletionCallback& callback) {
88 if (!has_interface<PPB_TCPSocket_Private>()) 143 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
89 return callback.MayForce(PP_ERROR_NOINTERFACE); 144 return get_interface<PPB_TCPSocket_Private_0_4>()->Read(
90 return get_interface<PPB_TCPSocket_Private>()->Read( 145 pp_resource(), buffer, bytes_to_read,
91 pp_resource(), buffer, bytes_to_read, callback.pp_completion_callback()); 146 callback.pp_completion_callback());
147 }
148 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
149 return get_interface<PPB_TCPSocket_Private_0_3>()->Read(
150 pp_resource(), buffer, bytes_to_read,
151 callback.pp_completion_callback());
152 }
153 return callback.MayForce(PP_ERROR_NOINTERFACE);
92 } 154 }
93 155
94 int32_t TCPSocketPrivate::Write(const char* buffer, 156 int32_t TCPSocketPrivate::Write(const char* buffer,
95 int32_t bytes_to_write, 157 int32_t bytes_to_write,
96 const CompletionCallback& callback) { 158 const CompletionCallback& callback) {
97 if (!has_interface<PPB_TCPSocket_Private>()) 159 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
98 return callback.MayForce(PP_ERROR_NOINTERFACE); 160 return get_interface<PPB_TCPSocket_Private_0_4>()->Write(
99 return get_interface<PPB_TCPSocket_Private>()->Write( 161 pp_resource(), buffer, bytes_to_write,
100 pp_resource(), buffer, bytes_to_write, callback.pp_completion_callback()); 162 callback.pp_completion_callback());
163 }
164 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
165 return get_interface<PPB_TCPSocket_Private_0_3>()->Write(
166 pp_resource(), buffer, bytes_to_write,
167 callback.pp_completion_callback());
168 }
169 return callback.MayForce(PP_ERROR_NOINTERFACE);
101 } 170 }
102 171
103 void TCPSocketPrivate::Disconnect() { 172 void TCPSocketPrivate::Disconnect() {
104 if (!has_interface<PPB_TCPSocket_Private>()) 173 if (has_interface<PPB_TCPSocket_Private_0_4>()) {
105 return; 174 return get_interface<PPB_TCPSocket_Private_0_4>()->Disconnect(
106 return get_interface<PPB_TCPSocket_Private>()->Disconnect(pp_resource()); 175 pp_resource());
176 }
177 if (has_interface<PPB_TCPSocket_Private_0_3>()) {
178 return get_interface<PPB_TCPSocket_Private_0_3>()->Disconnect(
179 pp_resource());
180 }
107 } 181 }
108 182
109 } // namespace pp 183 } // namespace pp
OLDNEW
« no previous file with comments | « ppapi/cpp/private/tcp_socket_private.h ('k') | ppapi/cpp/private/x509_certificate_private.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698