diff options
author | yzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-20 15:29:13 +0000 |
---|---|---|
committer | yzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-20 15:29:13 +0000 |
commit | 92576792823018d937fc58e74267b0d30663e459 (patch) | |
tree | a80543169bea29b7fee7346387a1a0e1d6b34090 /ppapi/cpp/tcp_socket.cc | |
parent | 5603a6cf5fb7197f509b894e45bdc733e720b28a (diff) | |
download | chromium_src-92576792823018d937fc58e74267b0d30663e459.zip chromium_src-92576792823018d937fc58e74267b0d30663e459.tar.gz chromium_src-92576792823018d937fc58e74267b0d30663e459.tar.bz2 |
PPB_TCPSocket: add support for TCP server socket operations.
BUG=262601
TEST=new tests in test_tcp_socket.
Review URL: https://chromiumcodereview.appspot.com/24195004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@224383 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/cpp/tcp_socket.cc')
-rw-r--r-- | ppapi/cpp/tcp_socket.cc | 72 |
1 files changed, 69 insertions, 3 deletions
diff --git a/ppapi/cpp/tcp_socket.cc b/ppapi/cpp/tcp_socket.cc index f0002fa..ab08ff3 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()); |