| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "webkit/plugins/ppapi/ppb_tcp_server_socket_private_impl.h" |
| |
| #include "base/logging.h" |
| #include "webkit/plugins/ppapi/host_globals.h" |
| #include "webkit/plugins/ppapi/plugin_delegate.h" |
| #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" |
| #include "webkit/plugins/ppapi/ppb_tcp_socket_private_impl.h" |
| #include "webkit/plugins/ppapi/resource_helper.h" |
| |
| namespace webkit { |
| namespace ppapi { |
| |
| PPB_TCPServerSocket_Private_Impl::PPB_TCPServerSocket_Private_Impl( |
| PP_Instance instance) |
| : ::ppapi::PPB_TCPServerSocket_Shared(instance) { |
| } |
| |
| PPB_TCPServerSocket_Private_Impl::~PPB_TCPServerSocket_Private_Impl() { |
| StopListening(); |
| } |
| |
| PP_Resource PPB_TCPServerSocket_Private_Impl::CreateResource( |
| PP_Instance instance) { |
| PPB_TCPServerSocket_Private_Impl* socket = |
| new PPB_TCPServerSocket_Private_Impl(instance); |
| return socket->GetReference(); |
| } |
| |
| void PPB_TCPServerSocket_Private_Impl::OnAcceptCompleted( |
| bool succeeded, |
| uint32 accepted_socket_id, |
| const PP_NetAddress_Private& local_addr, |
| const PP_NetAddress_Private& remote_addr) { |
| if (!::ppapi::TrackedCallback::IsPending(accept_callback_) || |
| !tcp_socket_buffer_) { |
| NOTREACHED(); |
| return; |
| } |
| |
| if (succeeded) { |
| *tcp_socket_buffer_ = |
| PPB_TCPSocket_Private_Impl::CreateConnectedSocket(pp_instance(), |
| accepted_socket_id, |
| local_addr, |
| remote_addr); |
| } |
| tcp_socket_buffer_ = NULL; |
| |
| ::ppapi::TrackedCallback::ClearAndRun(&accept_callback_, |
| succeeded ? PP_OK : PP_ERROR_FAILED); |
| } |
| |
| void PPB_TCPServerSocket_Private_Impl::SendListen( |
| const PP_NetAddress_Private& addr, |
| int32_t backlog) { |
| PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this); |
| if (!plugin_delegate) |
| return; |
| |
| plugin_delegate->TCPServerSocketListen(pp_resource(), addr, backlog); |
| } |
| |
| void PPB_TCPServerSocket_Private_Impl::SendAccept() { |
| PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this); |
| if (!plugin_delegate) |
| return; |
| |
| plugin_delegate->TCPServerSocketAccept(socket_id_); |
| } |
| |
| void PPB_TCPServerSocket_Private_Impl::SendStopListening() { |
| PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this); |
| if (!plugin_delegate) |
| return; |
| |
| plugin_delegate->TCPServerSocketStopListening(pp_resource(), socket_id_); |
| } |
| |
| } // namespace ppapi |
| } // namespace webkit |