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..fce08b8bd0e1f9e4b265ed25a7cfb3a8992dc070 100644 |
| --- a/ppapi/cpp/private/tcp_socket_private.cc |
| +++ b/ppapi/cpp/private/tcp_socket_private.cc |
| @@ -19,10 +19,15 @@ template <> const char* interface_name<PPB_TCPSocket_Private>() { |
| return PPB_TCPSOCKET_PRIVATE_INTERFACE; |
|
yzshen1
2012/04/06 19:24:33
ditto.
raymes
2012/04/06 23:22:47
Done.
|
| } |
| +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>() || |
| + 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.
|
| PassRefFromConstructor(get_interface<PPB_TCPSocket_Private>()->Create( |
| instance.pp_instance())); |
| } |
| @@ -34,76 +39,129 @@ 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, |
|
yzshen1
2012/04/06 19:24:33
wrong indent. (and also line 108)
raymes
2012/04/06 23:22:47
Done.
|
| + 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); |
| +} |
| + |
| +X509Certificate TCPSocketPrivate::GetServerCertificate() { |
| + 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.
|
| + return X509Certificate( |
| + 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
|
| + pp_resource())); |
| + return X509Certificate(); |
| +} |
| + |
| +bool TCPSocketPrivate::AddChainBuildingCertificate(const X509Certificate& 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 |