1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_UDP_SOCKET_MESSAGE_FILTER_H_ 6#define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_UDP_SOCKET_MESSAGE_FILTER_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/callback.h" 12#include "base/compiler_specific.h" 13#include "base/memory/ref_counted.h" 14#include "base/memory/scoped_ptr.h" 15#include "content/common/content_export.h" 16#include "content/public/common/process_type.h" 17#include "net/base/completion_callback.h" 18#include "net/base/ip_endpoint.h" 19#include "ppapi/c/pp_instance.h" 20#include "ppapi/c/pp_stdint.h" 21#include "ppapi/c/ppb_udp_socket.h" 22#include "ppapi/host/resource_message_filter.h" 23 24struct PP_NetAddress_Private; 25 26namespace net { 27class IOBuffer; 28class IOBufferWithSize; 29class UDPServerSocket; 30} 31 32namespace ppapi { 33 34class SocketOptionData; 35 36namespace host { 37struct ReplyMessageContext; 38} 39} 40 41namespace content { 42 43class BrowserPpapiHostImpl; 44struct SocketPermissionRequest; 45 46class CONTENT_EXPORT PepperUDPSocketMessageFilter 47 : public ppapi::host::ResourceMessageFilter { 48 public: 49 PepperUDPSocketMessageFilter(BrowserPpapiHostImpl* host, 50 PP_Instance instance, 51 bool private_api); 52 53 static size_t GetNumInstances(); 54 55 protected: 56 virtual ~PepperUDPSocketMessageFilter(); 57 58 private: 59 // ppapi::host::ResourceMessageFilter overrides. 60 virtual scoped_refptr<base::TaskRunner> OverrideTaskRunnerForMessage( 61 const IPC::Message& message) OVERRIDE; 62 virtual int32_t OnResourceMessageReceived( 63 const IPC::Message& msg, 64 ppapi::host::HostMessageContext* context) OVERRIDE; 65 66 int32_t OnMsgSetOption(const ppapi::host::HostMessageContext* context, 67 PP_UDPSocket_Option name, 68 const ppapi::SocketOptionData& value); 69 int32_t OnMsgBind(const ppapi::host::HostMessageContext* context, 70 const PP_NetAddress_Private& addr); 71 int32_t OnMsgSendTo(const ppapi::host::HostMessageContext* context, 72 const std::string& data, 73 const PP_NetAddress_Private& addr); 74 int32_t OnMsgClose(const ppapi::host::HostMessageContext* context); 75 int32_t OnMsgRecvSlotAvailable( 76 const ppapi::host::HostMessageContext* context); 77 78 void DoBind(const ppapi::host::ReplyMessageContext& context, 79 const PP_NetAddress_Private& addr); 80 void DoRecvFrom(); 81 void DoSendTo(const ppapi::host::ReplyMessageContext& context, 82 const std::string& data, 83 const PP_NetAddress_Private& addr); 84 void Close(); 85 86 void OnRecvFromCompleted(int net_result); 87 void OnSendToCompleted(const ppapi::host::ReplyMessageContext& context, 88 int net_result); 89 90 void SendBindReply(const ppapi::host::ReplyMessageContext& context, 91 int32_t result, 92 const PP_NetAddress_Private& addr); 93 void SendRecvFromResult(int32_t result, 94 const std::string& data, 95 const PP_NetAddress_Private& addr); 96 void SendSendToReply(const ppapi::host::ReplyMessageContext& context, 97 int32_t result, 98 int32_t bytes_written); 99 100 void SendBindError(const ppapi::host::ReplyMessageContext& context, 101 int32_t result); 102 void SendRecvFromError(int32_t result); 103 void SendSendToError(const ppapi::host::ReplyMessageContext& context, 104 int32_t result); 105 106 bool allow_address_reuse_; 107 bool allow_broadcast_; 108 109 scoped_ptr<net::UDPServerSocket> socket_; 110 bool closed_; 111 112 scoped_refptr<net::IOBuffer> recvfrom_buffer_; 113 scoped_refptr<net::IOBufferWithSize> sendto_buffer_; 114 115 net::IPEndPoint recvfrom_address_; 116 117 size_t remaining_recv_slots_; 118 119 bool external_plugin_; 120 bool private_api_; 121 122 int render_process_id_; 123 int render_frame_id_; 124 125 DISALLOW_COPY_AND_ASSIGN(PepperUDPSocketMessageFilter); 126}; 127 128} // namespace content 129 130#endif // CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_UDP_SOCKET_MESSAGE_FILTER_H_ 131