OLD | NEW |
---|---|
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) { |
51 if (has_interface<PPB_TCPSocket_Private_0_4>()) { | |
yzshen1
2013/02/08 21:51:11
I am not sure whether we want to make this change.
Wez
2013/02/10 04:47:02
This change was suggested by dmichael@ - let's dis
yzshen1
2013/02/12 17:39:58
Sounds good.
On 2013/02/10 04:47:02, Wez wrote:
| |
52 return get_interface<PPB_TCPSocket_Private_0_4>()->Connect( | |
53 pp_resource(), host, port, callback.pp_completion_callback()); | |
54 } | |
55 if (has_interface<PPB_TCPSocket_Private_0_3>()) { | 59 if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
56 return get_interface<PPB_TCPSocket_Private_0_3>()->Connect( | 60 return get_interface<PPB_TCPSocket_Private_0_3>()->Connect( |
57 pp_resource(), host, port, callback.pp_completion_callback()); | 61 pp_resource(), host, port, callback.pp_completion_callback()); |
58 } | 62 } |
59 return callback.MayForce(PP_ERROR_NOINTERFACE); | 63 return callback.MayForce(PP_ERROR_NOINTERFACE); |
60 } | 64 } |
61 | 65 |
62 int32_t TCPSocketPrivate::ConnectWithNetAddress( | 66 int32_t TCPSocketPrivate::ConnectWithNetAddress( |
63 const PP_NetAddress_Private* addr, | 67 const PP_NetAddress_Private* addr, |
64 const CompletionCallback& callback) { | 68 const CompletionCallback& callback) { |
65 if (has_interface<PPB_TCPSocket_Private_0_4>()) { | |
66 return get_interface<PPB_TCPSocket_Private_0_4>()->ConnectWithNetAddress( | |
67 pp_resource(), addr, callback.pp_completion_callback()); | |
68 } | |
69 if (has_interface<PPB_TCPSocket_Private_0_3>()) { | 69 if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
70 return get_interface<PPB_TCPSocket_Private_0_3>()->ConnectWithNetAddress( | 70 return get_interface<PPB_TCPSocket_Private_0_3>()->ConnectWithNetAddress( |
71 pp_resource(), addr, callback.pp_completion_callback()); | 71 pp_resource(), addr, callback.pp_completion_callback()); |
72 } | 72 } |
73 return callback.MayForce(PP_ERROR_NOINTERFACE); | 73 return callback.MayForce(PP_ERROR_NOINTERFACE); |
74 } | 74 } |
75 | 75 |
76 bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) { | 76 bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) { |
77 if (has_interface<PPB_TCPSocket_Private_0_4>()) { | |
78 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_4>()-> | |
79 GetLocalAddress(pp_resource(), local_addr); | |
80 return PP_ToBool(result); | |
81 } | |
82 if (has_interface<PPB_TCPSocket_Private_0_3>()) { | 77 if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
83 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()-> | 78 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()-> |
84 GetLocalAddress(pp_resource(), local_addr); | 79 GetLocalAddress(pp_resource(), local_addr); |
85 return PP_ToBool(result); | 80 return PP_ToBool(result); |
86 } | 81 } |
87 return false; | 82 return false; |
88 } | 83 } |
89 | 84 |
90 bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) { | 85 bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) { |
91 if (has_interface<PPB_TCPSocket_Private_0_4>()) { | |
92 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_4>()-> | |
93 GetRemoteAddress(pp_resource(), remote_addr); | |
94 return PP_ToBool(result); | |
95 } | |
96 if (has_interface<PPB_TCPSocket_Private_0_3>()) { | 86 if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
97 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()-> | 87 PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()-> |
98 GetRemoteAddress(pp_resource(), remote_addr); | 88 GetRemoteAddress(pp_resource(), remote_addr); |
99 return PP_ToBool(result); | 89 return PP_ToBool(result); |
100 } | 90 } |
101 return false; | 91 return false; |
102 } | 92 } |
103 | 93 |
104 int32_t TCPSocketPrivate::SSLHandshake(const char* server_name, | 94 int32_t TCPSocketPrivate::SSLHandshake(const char* server_name, |
105 uint16_t server_port, | 95 uint16_t server_port, |
106 const CompletionCallback& callback) { | 96 const CompletionCallback& callback) { |
107 if (has_interface<PPB_TCPSocket_Private_0_4>()) { | |
108 return get_interface<PPB_TCPSocket_Private_0_4>()->SSLHandshake( | |
109 pp_resource(), server_name, server_port, | |
110 callback.pp_completion_callback()); | |
111 } | |
112 if (has_interface<PPB_TCPSocket_Private_0_3>()) { | 97 if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
113 return get_interface<PPB_TCPSocket_Private_0_3>()->SSLHandshake( | 98 return get_interface<PPB_TCPSocket_Private_0_3>()->SSLHandshake( |
114 pp_resource(), server_name, server_port, | 99 pp_resource(), server_name, server_port, |
115 callback.pp_completion_callback()); | 100 callback.pp_completion_callback()); |
116 } | 101 } |
117 return callback.MayForce(PP_ERROR_NOINTERFACE); | 102 return callback.MayForce(PP_ERROR_NOINTERFACE); |
118 } | 103 } |
119 | 104 |
120 X509CertificatePrivate TCPSocketPrivate::GetServerCertificate() { | 105 X509CertificatePrivate TCPSocketPrivate::GetServerCertificate() { |
121 if (has_interface<PPB_TCPSocket_Private_0_4>()) { | 106 if (has_interface<PPB_TCPSocket_Private_0_4>()) { |
(...skipping 11 matching lines...) Expand all Loading... | |
133 return PP_ToBool(get_interface<PPB_TCPSocket_Private_0_4>()-> | 118 return PP_ToBool(get_interface<PPB_TCPSocket_Private_0_4>()-> |
134 AddChainBuildingCertificate(pp_resource(), cert.pp_resource(), | 119 AddChainBuildingCertificate(pp_resource(), cert.pp_resource(), |
135 PP_FromBool(trusted))); | 120 PP_FromBool(trusted))); |
136 } | 121 } |
137 return false; | 122 return false; |
138 } | 123 } |
139 | 124 |
140 int32_t TCPSocketPrivate::Read(char* buffer, | 125 int32_t TCPSocketPrivate::Read(char* buffer, |
141 int32_t bytes_to_read, | 126 int32_t bytes_to_read, |
142 const CompletionCallback& callback) { | 127 const CompletionCallback& callback) { |
143 if (has_interface<PPB_TCPSocket_Private_0_4>()) { | |
144 return get_interface<PPB_TCPSocket_Private_0_4>()->Read( | |
145 pp_resource(), buffer, bytes_to_read, | |
146 callback.pp_completion_callback()); | |
147 } | |
148 if (has_interface<PPB_TCPSocket_Private_0_3>()) { | 128 if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
149 return get_interface<PPB_TCPSocket_Private_0_3>()->Read( | 129 return get_interface<PPB_TCPSocket_Private_0_3>()->Read( |
150 pp_resource(), buffer, bytes_to_read, | 130 pp_resource(), buffer, bytes_to_read, |
151 callback.pp_completion_callback()); | 131 callback.pp_completion_callback()); |
152 } | 132 } |
153 return callback.MayForce(PP_ERROR_NOINTERFACE); | 133 return callback.MayForce(PP_ERROR_NOINTERFACE); |
154 } | 134 } |
155 | 135 |
156 int32_t TCPSocketPrivate::Write(const char* buffer, | 136 int32_t TCPSocketPrivate::Write(const char* buffer, |
157 int32_t bytes_to_write, | 137 int32_t bytes_to_write, |
158 const CompletionCallback& callback) { | 138 const CompletionCallback& callback) { |
159 if (has_interface<PPB_TCPSocket_Private_0_4>()) { | |
160 return get_interface<PPB_TCPSocket_Private_0_4>()->Write( | |
161 pp_resource(), buffer, bytes_to_write, | |
162 callback.pp_completion_callback()); | |
163 } | |
164 if (has_interface<PPB_TCPSocket_Private_0_3>()) { | 139 if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
165 return get_interface<PPB_TCPSocket_Private_0_3>()->Write( | 140 return get_interface<PPB_TCPSocket_Private_0_3>()->Write( |
166 pp_resource(), buffer, bytes_to_write, | 141 pp_resource(), buffer, bytes_to_write, |
167 callback.pp_completion_callback()); | 142 callback.pp_completion_callback()); |
168 } | 143 } |
169 return callback.MayForce(PP_ERROR_NOINTERFACE); | 144 return callback.MayForce(PP_ERROR_NOINTERFACE); |
170 } | 145 } |
171 | 146 |
172 void TCPSocketPrivate::Disconnect() { | 147 void TCPSocketPrivate::Disconnect() { |
173 if (has_interface<PPB_TCPSocket_Private_0_4>()) { | |
174 return get_interface<PPB_TCPSocket_Private_0_4>()->Disconnect( | |
175 pp_resource()); | |
176 } | |
177 if (has_interface<PPB_TCPSocket_Private_0_3>()) { | 148 if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
178 return get_interface<PPB_TCPSocket_Private_0_3>()->Disconnect( | 149 return get_interface<PPB_TCPSocket_Private_0_3>()->Disconnect( |
179 pp_resource()); | 150 pp_resource()); |
180 } | 151 } |
181 } | 152 } |
182 | 153 |
154 int32_t TCPSocketPrivate::SetSocketFeature(PP_TCPSocketFeature_Private name, | |
155 const Var& value, | |
156 const CompletionCallback& callback) { | |
157 if (has_interface<PPB_TCPSocket_Private_0_5>()) { | |
158 return get_interface<PPB_TCPSocket_Private_0_5>()->SetSocketFeature( | |
159 pp_resource(), name, value.pp_var(), callback.pp_completion_callback()); | |
160 } | |
161 return callback.MayForce(PP_ERROR_NOINTERFACE); | |
162 } | |
163 | |
183 } // namespace pp | 164 } // namespace pp |
OLD | NEW |