Index: ppapi/cpp/tcp_socket.cc |
diff --git a/ppapi/cpp/tcp_socket.cc b/ppapi/cpp/tcp_socket.cc |
index f0002fa5545462f31f6fc97b7a98517459b220bf..ab08ff3626c66b36da23094ca5305ed286468177 100644 |
--- a/ppapi/cpp/tcp_socket.cc |
+++ b/ppapi/cpp/tcp_socket.cc |
@@ -17,13 +17,20 @@ template <> const char* interface_name<PPB_TCPSocket_1_0>() { |
return PPB_TCPSOCKET_INTERFACE_1_0; |
} |
+template <> const char* interface_name<PPB_TCPSocket_1_1>() { |
+ return PPB_TCPSOCKET_INTERFACE_1_1; |
+} |
+ |
} // namespace |
TCPSocket::TCPSocket() { |
} |
TCPSocket::TCPSocket(const InstanceHandle& instance) { |
- if (has_interface<PPB_TCPSocket_1_0>()) { |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ PassRefFromConstructor(get_interface<PPB_TCPSocket_1_1>()->Create( |
+ instance.pp_instance())); |
+ } else if (has_interface<PPB_TCPSocket_1_0>()) { |
PassRefFromConstructor(get_interface<PPB_TCPSocket_1_0>()->Create( |
instance.pp_instance())); |
} |
@@ -46,11 +53,25 @@ TCPSocket& TCPSocket::operator=(const TCPSocket& other) { |
// static |
bool TCPSocket::IsAvailable() { |
- return has_interface<PPB_TCPSocket_1_0>(); |
+ return has_interface<PPB_TCPSocket_1_1>() || |
+ has_interface<PPB_TCPSocket_1_0>(); |
+} |
+ |
+int32_t TCPSocket::Bind(const NetAddress& addr, |
+ const CompletionCallback& callback) { |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ return get_interface<PPB_TCPSocket_1_1>()->Bind( |
+ pp_resource(), addr.pp_resource(), callback.pp_completion_callback()); |
+ } |
+ return callback.MayForce(PP_ERROR_NOINTERFACE); |
} |
int32_t TCPSocket::Connect(const NetAddress& addr, |
const CompletionCallback& callback) { |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ return get_interface<PPB_TCPSocket_1_1>()->Connect( |
+ pp_resource(), addr.pp_resource(), callback.pp_completion_callback()); |
+ } |
if (has_interface<PPB_TCPSocket_1_0>()) { |
return get_interface<PPB_TCPSocket_1_0>()->Connect( |
pp_resource(), addr.pp_resource(), callback.pp_completion_callback()); |
@@ -59,6 +80,11 @@ int32_t TCPSocket::Connect(const NetAddress& addr, |
} |
NetAddress TCPSocket::GetLocalAddress() const { |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ return NetAddress( |
+ PASS_REF, |
+ get_interface<PPB_TCPSocket_1_1>()->GetLocalAddress(pp_resource())); |
+ } |
if (has_interface<PPB_TCPSocket_1_0>()) { |
return NetAddress( |
PASS_REF, |
@@ -68,6 +94,11 @@ NetAddress TCPSocket::GetLocalAddress() const { |
} |
NetAddress TCPSocket::GetRemoteAddress() const { |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ return NetAddress( |
+ PASS_REF, |
+ get_interface<PPB_TCPSocket_1_1>()->GetRemoteAddress(pp_resource())); |
+ } |
if (has_interface<PPB_TCPSocket_1_0>()) { |
return NetAddress( |
PASS_REF, |
@@ -79,6 +110,11 @@ NetAddress TCPSocket::GetRemoteAddress() const { |
int32_t TCPSocket::Read(char* buffer, |
int32_t bytes_to_read, |
const CompletionCallback& callback) { |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ return get_interface<PPB_TCPSocket_1_1>()->Read( |
+ pp_resource(), buffer, bytes_to_read, |
+ callback.pp_completion_callback()); |
+ } |
if (has_interface<PPB_TCPSocket_1_0>()) { |
return get_interface<PPB_TCPSocket_1_0>()->Read( |
pp_resource(), buffer, bytes_to_read, |
@@ -90,6 +126,11 @@ int32_t TCPSocket::Read(char* buffer, |
int32_t TCPSocket::Write(const char* buffer, |
int32_t bytes_to_write, |
const CompletionCallback& callback) { |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ return get_interface<PPB_TCPSocket_1_1>()->Write( |
+ pp_resource(), buffer, bytes_to_write, |
+ callback.pp_completion_callback()); |
+ } |
if (has_interface<PPB_TCPSocket_1_0>()) { |
return get_interface<PPB_TCPSocket_1_0>()->Write( |
pp_resource(), buffer, bytes_to_write, |
@@ -98,14 +139,39 @@ int32_t TCPSocket::Write(const char* buffer, |
return callback.MayForce(PP_ERROR_NOINTERFACE); |
} |
+int32_t TCPSocket::Listen(int32_t backlog, |
+ const CompletionCallback& callback) { |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ return get_interface<PPB_TCPSocket_1_1>()->Listen( |
+ pp_resource(), backlog, callback.pp_completion_callback()); |
+ } |
+ return callback.MayForce(PP_ERROR_NOINTERFACE); |
+} |
+ |
+int32_t TCPSocket::Accept( |
+ const CompletionCallbackWithOutput<TCPSocket>& callback) { |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ return get_interface<PPB_TCPSocket_1_1>()->Accept( |
+ pp_resource(), callback.output(), callback.pp_completion_callback()); |
+ } |
+ return callback.MayForce(PP_ERROR_NOINTERFACE); |
+} |
+ |
void TCPSocket::Close() { |
- if (has_interface<PPB_TCPSocket_1_0>()) |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ get_interface<PPB_TCPSocket_1_1>()->Close(pp_resource()); |
+ } else if (has_interface<PPB_TCPSocket_1_0>()) { |
get_interface<PPB_TCPSocket_1_0>()->Close(pp_resource()); |
+ } |
} |
int32_t TCPSocket::SetOption(PP_TCPSocket_Option name, |
const Var& value, |
const CompletionCallback& callback) { |
+ if (has_interface<PPB_TCPSocket_1_1>()) { |
+ return get_interface<PPB_TCPSocket_1_1>()->SetOption( |
+ pp_resource(), name, value.pp_var(), callback.pp_completion_callback()); |
+ } |
if (has_interface<PPB_TCPSocket_1_0>()) { |
return get_interface<PPB_TCPSocket_1_0>()->SetOption( |
pp_resource(), name, value.pp_var(), callback.pp_completion_callback()); |