Chromium Code Reviews| Index: ppapi/cpp/private/tcp_socket_private.cc |
| diff --git a/ppapi/cpp/private/tcp_socket_private.cc b/ppapi/cpp/private/tcp_socket_private.cc |
| index e15f5378b9a5347b5c61b0ce0d92ab685dd37392..dad306c4ec32b1806a0e61d00933c2c4860c5c3c 100644 |
| --- a/ppapi/cpp/private/tcp_socket_private.cc |
| +++ b/ppapi/cpp/private/tcp_socket_private.cc |
| @@ -15,14 +15,19 @@ namespace pp { |
| namespace { |
| -template <> const char* interface_name<PPB_TCPSocket_Private>() { |
| - return PPB_TCPSOCKET_PRIVATE_INTERFACE; |
| +template <> const char* interface_name<PPB_TCPSocket_Private_0_4>() { |
| + return PPB_TCPSOCKET_PRIVATE_INTERFACE_0_4; |
| +} |
| + |
| +template <> const char* interface_name<PPB_TCPSocket_Private_0_3>() { |
| + return PPB_TCPSOCKET_PRIVATE_INTERFACE_0_3; |
| } |
| } // namespace |
| TCPSocketPrivate::TCPSocketPrivate(const InstanceHandle& instance) { |
| - if (has_interface<PPB_TCPSocket_Private>()) { |
| + 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.
|
| + has_interface<PPB_TCPSocket_Private_0_3>())) { |
| 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.
|
| instance.pp_instance())); |
| } |
| @@ -34,76 +39,141 @@ TCPSocketPrivate::TCPSocketPrivate(PassRef, PP_Resource resource) |
| // static |
| bool TCPSocketPrivate::IsAvailable() { |
| - return has_interface<PPB_TCPSocket_Private>(); |
| + return has_interface<PPB_TCPSocket_Private>() || |
| + has_interface<PPB_TCPSocket_Private_0_3>(); |
| } |
| int32_t TCPSocketPrivate::Connect(const char* host, |
| uint16_t port, |
| const CompletionCallback& callback) { |
| - if (!has_interface<PPB_TCPSocket_Private>()) |
| - return callback.MayForce(PP_ERROR_NOINTERFACE); |
| - return get_interface<PPB_TCPSocket_Private>()->Connect( |
| - pp_resource(), host, port, callback.pp_completion_callback()); |
| + if (has_interface<PPB_TCPSocket_Private>()) { |
| + return get_interface<PPB_TCPSocket_Private>()->Connect( |
| + pp_resource(), host, port, callback.pp_completion_callback()); |
| + } |
| + if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
| + return get_interface<PPB_TCPSocket_Private_0_3>()->Connect( |
| + pp_resource(), host, port, callback.pp_completion_callback()); |
| + } |
| + return callback.MayForce(PP_ERROR_NOINTERFACE); |
| } |
| int32_t TCPSocketPrivate::ConnectWithNetAddress( |
| const PP_NetAddress_Private* addr, |
| const CompletionCallback& callback) { |
| - if (!has_interface<PPB_TCPSocket_Private>()) |
| - return callback.MayForce(PP_ERROR_NOINTERFACE); |
| - return get_interface<PPB_TCPSocket_Private>()->ConnectWithNetAddress( |
| - pp_resource(), addr, callback.pp_completion_callback()); |
| + if (has_interface<PPB_TCPSocket_Private>()) { |
| + return get_interface<PPB_TCPSocket_Private>()->ConnectWithNetAddress( |
| + pp_resource(), addr, callback.pp_completion_callback()); |
| + } |
| + if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
| + return get_interface<PPB_TCPSocket_Private_0_3>()->ConnectWithNetAddress( |
| + pp_resource(), addr, callback.pp_completion_callback()); |
| + } |
| + return callback.MayForce(PP_ERROR_NOINTERFACE); |
| } |
| bool TCPSocketPrivate::GetLocalAddress(PP_NetAddress_Private* local_addr) { |
| - if (!has_interface<PPB_TCPSocket_Private>()) |
| - return false; |
| - |
| - PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetLocalAddress( |
| - pp_resource(), local_addr); |
| - return PP_ToBool(result); |
| + if (has_interface<PPB_TCPSocket_Private>()) { |
| + PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetLocalAddress( |
| + pp_resource(), local_addr); |
| + return PP_ToBool(result); |
| + } |
| + if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
| + PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()-> |
| + GetLocalAddress(pp_resource(), local_addr); |
| + return PP_ToBool(result); |
| + } |
| + return false; |
| } |
| bool TCPSocketPrivate::GetRemoteAddress(PP_NetAddress_Private* remote_addr) { |
| - if (!has_interface<PPB_TCPSocket_Private>()) |
| - return false; |
| - PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetRemoteAddress( |
| - pp_resource(), remote_addr); |
| - return PP_ToBool(result); |
| + if (has_interface<PPB_TCPSocket_Private>()) { |
| + PP_Bool result = get_interface<PPB_TCPSocket_Private>()->GetRemoteAddress( |
| + pp_resource(), remote_addr); |
| + return PP_ToBool(result); |
| + } |
| + if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
| + PP_Bool result = get_interface<PPB_TCPSocket_Private_0_3>()-> |
| + GetRemoteAddress(pp_resource(), remote_addr); |
| + return PP_ToBool(result); |
| + } |
| + return false; |
| } |
| int32_t TCPSocketPrivate::SSLHandshake(const char* server_name, |
| uint16_t server_port, |
| const CompletionCallback& callback) { |
| - if (!has_interface<PPB_TCPSocket_Private>()) |
| - return callback.MayForce(PP_ERROR_NOINTERFACE); |
| - return get_interface<PPB_TCPSocket_Private>()->SSLHandshake( |
| - pp_resource(), server_name, server_port, |
| - callback.pp_completion_callback()); |
| + if (has_interface<PPB_TCPSocket_Private>()) { |
| + return get_interface<PPB_TCPSocket_Private>()->SSLHandshake( |
| + pp_resource(), server_name, server_port, |
| + callback.pp_completion_callback()); |
| + } |
| + if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
| + return get_interface<PPB_TCPSocket_Private_0_3>()->SSLHandshake( |
| + pp_resource(), server_name, server_port, |
| + callback.pp_completion_callback()); |
| + } |
| + return callback.MayForce(PP_ERROR_NOINTERFACE); |
| +} |
| + |
| +X509CertificatePrivate TCPSocketPrivate::GetServerCertificate() { |
| + if (has_interface<PPB_TCPSocket_Private>()) { |
| + return X509CertificatePrivate(PASS_REF, |
| + get_interface<PPB_TCPSocket_Private>()->GetServerCertificate( |
| + pp_resource())); |
| + } |
| + return X509CertificatePrivate(); |
| +} |
| + |
| +bool TCPSocketPrivate::AddChainBuildingCertificate( |
| + const X509CertificatePrivate& cert, |
| + bool trusted) { |
| + if (has_interface<PPB_TCPSocket_Private>()) { |
| + return PP_ToBool(get_interface<PPB_TCPSocket_Private>()-> |
| + AddChainBuildingCertificate(pp_resource(), cert.pp_resource(), |
| + PP_FromBool(trusted))); |
| + } |
| + return false; |
| } |
| int32_t TCPSocketPrivate::Read(char* buffer, |
| int32_t bytes_to_read, |
| const CompletionCallback& callback) { |
| - if (!has_interface<PPB_TCPSocket_Private>()) |
| - return callback.MayForce(PP_ERROR_NOINTERFACE); |
| - return get_interface<PPB_TCPSocket_Private>()->Read( |
| - pp_resource(), buffer, bytes_to_read, callback.pp_completion_callback()); |
| + if (has_interface<PPB_TCPSocket_Private>()) { |
| + return get_interface<PPB_TCPSocket_Private>()->Read( |
| + pp_resource(), buffer, bytes_to_read, |
| + callback.pp_completion_callback()); |
| + } |
| + if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
| + return get_interface<PPB_TCPSocket_Private_0_3>()->Read( |
| + pp_resource(), buffer, bytes_to_read, |
| + callback.pp_completion_callback()); |
| + } |
| + return callback.MayForce(PP_ERROR_NOINTERFACE); |
| } |
| int32_t TCPSocketPrivate::Write(const char* buffer, |
| int32_t bytes_to_write, |
| const CompletionCallback& callback) { |
| - if (!has_interface<PPB_TCPSocket_Private>()) |
| - return callback.MayForce(PP_ERROR_NOINTERFACE); |
| - return get_interface<PPB_TCPSocket_Private>()->Write( |
| - pp_resource(), buffer, bytes_to_write, callback.pp_completion_callback()); |
| + if (has_interface<PPB_TCPSocket_Private>()) { |
| + return get_interface<PPB_TCPSocket_Private>()->Write( |
| + pp_resource(), buffer, bytes_to_write, |
| + callback.pp_completion_callback()); |
| + } |
| + if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
| + return get_interface<PPB_TCPSocket_Private_0_3>()->Write( |
| + pp_resource(), buffer, bytes_to_write, |
| + callback.pp_completion_callback()); |
| + } |
| + return callback.MayForce(PP_ERROR_NOINTERFACE); |
| } |
| void TCPSocketPrivate::Disconnect() { |
| - if (!has_interface<PPB_TCPSocket_Private>()) |
| - return; |
| - return get_interface<PPB_TCPSocket_Private>()->Disconnect(pp_resource()); |
| + if (has_interface<PPB_TCPSocket_Private>()) |
| + return get_interface<PPB_TCPSocket_Private>()->Disconnect(pp_resource()); |
| + if (has_interface<PPB_TCPSocket_Private_0_3>()) { |
| + return get_interface<PPB_TCPSocket_Private_0_3>()->Disconnect( |
| + pp_resource()); |
| + } |
| } |
| } // namespace pp |