Index: content/browser/renderer_host/pepper/pepper_udp_socket_private_shared.cc |
diff --git a/content/browser/renderer_host/pepper/pepper_udp_socket.cc b/content/browser/renderer_host/pepper/pepper_udp_socket_private_shared.cc |
similarity index 54% |
copy from content/browser/renderer_host/pepper/pepper_udp_socket.cc |
copy to content/browser/renderer_host/pepper/pepper_udp_socket_private_shared.cc |
index b6c6d780543e3080cc6b63a5525b0f10277a8e70..ecbf6030c20ca44815d076baa3da726c9e59ab1c 100644 |
--- a/content/browser/renderer_host/pepper/pepper_udp_socket.cc |
+++ b/content/browser/renderer_host/pepper/pepper_udp_socket_private_shared.cc |
@@ -2,60 +2,67 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "content/browser/renderer_host/pepper/pepper_udp_socket.h" |
+#include "content/browser/renderer_host/pepper/pepper_udp_socket_private_shared.h" |
#include <string.h> |
#include "base/compiler_specific.h" |
#include "base/logging.h" |
-#include "content/browser/renderer_host/pepper/pepper_message_filter.h" |
#include "content/public/browser/browser_thread.h" |
#include "net/base/io_buffer.h" |
#include "net/base/net_errors.h" |
#include "net/udp/udp_server_socket.h" |
-#include "ppapi/proxy/ppapi_messages.h" |
+#include "ppapi/c/private/ppb_net_address_private.h" |
+#include "ppapi/c/private/ppb_udp_socket_private.h" |
#include "ppapi/shared_impl/private/net_address_private_impl.h" |
using ppapi::NetAddressPrivateImpl; |
namespace content { |
-PepperUDPSocket::PepperUDPSocket( |
- PepperMessageFilter* manager, |
- int32 routing_id, |
- uint32 plugin_dispatcher_id, |
- uint32 socket_id) |
- : manager_(manager), |
- routing_id_(routing_id), |
- plugin_dispatcher_id_(plugin_dispatcher_id), |
- socket_id_(socket_id), |
- allow_address_reuse_(false), |
- allow_broadcast_(false) { |
- DCHECK(manager); |
+PepperUDPSocketPrivateShared::PepperUDPSocketPrivateShared() |
+ : allow_address_reuse_(false), |
+ allow_broadcast_(false), |
+ closed_(false), |
+ weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
} |
-PepperUDPSocket::~PepperUDPSocket() { |
+PepperUDPSocketPrivateShared::~PepperUDPSocketPrivateShared() { |
// Make sure there are no further callbacks from socket_. |
if (socket_.get()) |
socket_->Close(); |
} |
-void PepperUDPSocket::AllowAddressReuse(bool value) { |
- allow_address_reuse_ = value; |
+void PepperUDPSocketPrivateShared::SetBoolSocketFeature(int32_t name, |
+ bool value) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ DCHECK(!socket_.get()); |
+ DCHECK(!closed()); |
+ |
+ switch(static_cast<PP_UDPSocketFeature_Private>(name)) { |
+ case PP_UDPSOCKETFEATURE_ADDRESS_REUSE: |
+ allow_address_reuse_ = value; |
+ break; |
+ case PP_UDPSOCKETFEATURE_BROADCAST: |
+ allow_broadcast_ = value; |
+ break; |
+ default: |
+ NOTREACHED(); |
+ break; |
+ } |
} |
-void PepperUDPSocket::AllowBroadcast(bool value) { |
- allow_broadcast_ = value; |
-} |
+void PepperUDPSocketPrivateShared::Bind(const PP_NetAddress_Private& addr) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ DCHECK(!closed()); |
-void PepperUDPSocket::Bind(const PP_NetAddress_Private& addr) { |
socket_.reset(new net::UDPServerSocket(NULL, net::NetLog::Source())); |
net::IPAddressNumber address; |
int port; |
if (!socket_.get() || |
!NetAddressPrivateImpl::NetAddressToIPEndPoint(addr, &address, &port)) { |
- SendBindACKError(); |
+ SendBindError(); |
return; |
} |
@@ -68,40 +75,48 @@ void PepperUDPSocket::Bind(const PP_NetAddress_Private& addr) { |
if (result == net::OK && |
socket_->GetLocalAddress(&bound_address_) != net::OK) { |
- SendBindACKError(); |
+ SendBindError(); |
return; |
} |
OnBindCompleted(result); |
} |
-void PepperUDPSocket::RecvFrom(int32_t num_bytes) { |
+void PepperUDPSocketPrivateShared::RecvFrom(int32_t num_bytes) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ DCHECK(socket_.get()); |
+ DCHECK(!closed()); |
+ |
if (recvfrom_buffer_.get()) { |
- SendRecvFromACKError(); |
+ SendRecvFromError(); |
return; |
} |
recvfrom_buffer_ = new net::IOBuffer(num_bytes); |
int result = socket_->RecvFrom( |
recvfrom_buffer_, num_bytes, &recvfrom_address_, |
- base::Bind(&PepperUDPSocket::OnRecvFromCompleted, |
- base::Unretained(this))); |
+ base::Bind(&PepperUDPSocketPrivateShared::OnRecvFromCompleted, |
+ weak_factory_.GetWeakPtr())); |
if (result != net::ERR_IO_PENDING) |
OnRecvFromCompleted(result); |
} |
-void PepperUDPSocket::SendTo(const std::string& data, |
+void PepperUDPSocketPrivateShared::SendTo(const std::string& data, |
const PP_NetAddress_Private& addr) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ DCHECK(socket_.get()); |
+ DCHECK(!closed()); |
+ |
if (sendto_buffer_.get() || data.empty()) { |
- SendSendToACKError(); |
+ SendSendToError(); |
return; |
} |
net::IPAddressNumber address; |
int port; |
if (!NetAddressPrivateImpl::NetAddressToIPEndPoint(addr, &address, &port)) { |
- SendSendToACKError(); |
+ SendSendToError(); |
return; |
} |
@@ -111,44 +126,46 @@ void PepperUDPSocket::SendTo(const std::string& data, |
memcpy(sendto_buffer_->data(), data.data(), data_size); |
int result = socket_->SendTo( |
sendto_buffer_, data_size, net::IPEndPoint(address, port), |
- base::Bind(&PepperUDPSocket::OnSendToCompleted, base::Unretained(this))); |
+ base::Bind(&PepperUDPSocketPrivateShared::OnSendToCompleted, |
+ weak_factory_.GetWeakPtr())); |
if (result != net::ERR_IO_PENDING) |
OnSendToCompleted(result); |
} |
-void PepperUDPSocket::SendRecvFromACKError() { |
- PP_NetAddress_Private addr = NetAddressPrivateImpl::kInvalidNetAddress; |
- manager_->Send(new PpapiMsg_PPBUDPSocket_RecvFromACK( |
- routing_id_, plugin_dispatcher_id_, socket_id_, false, std::string(), |
- addr)); |
+void PepperUDPSocketPrivateShared::Close() { |
+ if (socket_.get()) |
+ socket_->Close(); |
+ closed_ = true; |
} |
-void PepperUDPSocket::SendSendToACKError() { |
- manager_->Send(new PpapiMsg_PPBUDPSocket_SendToACK( |
- routing_id_, plugin_dispatcher_id_, socket_id_, false, 0)); |
+void PepperUDPSocketPrivateShared::SendBindError() { |
+ PP_NetAddress_Private addr = NetAddressPrivateImpl::kInvalidNetAddress; |
+ SendBindReply(false, addr); |
} |
-void PepperUDPSocket::SendBindACKError() { |
+void PepperUDPSocketPrivateShared::SendRecvFromError() { |
PP_NetAddress_Private addr = NetAddressPrivateImpl::kInvalidNetAddress; |
- manager_->Send(new PpapiMsg_PPBUDPSocket_BindACK( |
- routing_id_, plugin_dispatcher_id_, socket_id_, false, addr)); |
+ SendRecvFromReply(false, "", addr); |
+} |
+ |
+void PepperUDPSocketPrivateShared::SendSendToError() { |
+ SendSendToReply(false, 0); |
} |
-void PepperUDPSocket::OnBindCompleted(int result) { |
+void PepperUDPSocketPrivateShared::OnBindCompleted(int result) { |
PP_NetAddress_Private addr = NetAddressPrivateImpl::kInvalidNetAddress; |
if (result < 0 || |
!NetAddressPrivateImpl::IPEndPointToNetAddress(bound_address_.address(), |
bound_address_.port(), |
&addr)) { |
- SendBindACKError(); |
+ SendBindError(); |
} else { |
- manager_->Send(new PpapiMsg_PPBUDPSocket_BindACK( |
- routing_id_, plugin_dispatcher_id_, socket_id_, true, addr)); |
+ SendBindReply(true, addr); |
} |
} |
-void PepperUDPSocket::OnRecvFromCompleted(int result) { |
+void PepperUDPSocketPrivateShared::OnRecvFromCompleted(int result) { |
DCHECK(recvfrom_buffer_.get()); |
// Convert IPEndPoint we get back from RecvFrom to a PP_NetAddress_Private, |
@@ -159,25 +176,23 @@ void PepperUDPSocket::OnRecvFromCompleted(int result) { |
recvfrom_address_.address(), |
recvfrom_address_.port(), |
&addr)) { |
- SendRecvFromACKError(); |
+ SendRecvFromError(); |
} else { |
- manager_->Send(new PpapiMsg_PPBUDPSocket_RecvFromACK( |
- routing_id_, plugin_dispatcher_id_, socket_id_, true, |
- std::string(recvfrom_buffer_->data(), result), addr)); |
+ SendRecvFromReply(true, |
+ std::string(recvfrom_buffer_->data(), result), |
+ addr); |
} |
recvfrom_buffer_ = NULL; |
} |
-void PepperUDPSocket::OnSendToCompleted(int result) { |
+void PepperUDPSocketPrivateShared::OnSendToCompleted(int result) { |
DCHECK(sendto_buffer_.get()); |
- if (result < 0) { |
- SendSendToACKError(); |
- } else { |
- manager_->Send(new PpapiMsg_PPBUDPSocket_SendToACK( |
- routing_id_, plugin_dispatcher_id_, socket_id_, true, result)); |
- } |
+ if (result < 0) |
+ SendSendToError(); |
+ else |
+ SendSendToReply(true, result); |
sendto_buffer_ = NULL; |
} |