1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_SOCKET_UDP_SERVER_SOCKET_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_SOCKET_UDP_SERVER_SOCKET_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "net/base/completion_once_callback.h" 11*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 12*6777b538SAndroid Build Coastguard Worker #include "net/socket/datagram_server_socket.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/socket/udp_socket.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace net { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker class IPAddress; 18*6777b538SAndroid Build Coastguard Worker class IPEndPoint; 19*6777b538SAndroid Build Coastguard Worker class NetLog; 20*6777b538SAndroid Build Coastguard Worker struct NetLogSource; 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker // A server socket that uses UDP as the transport layer. 23*6777b538SAndroid Build Coastguard Worker class NET_EXPORT UDPServerSocket : public DatagramServerSocket { 24*6777b538SAndroid Build Coastguard Worker public: 25*6777b538SAndroid Build Coastguard Worker UDPServerSocket(net::NetLog* net_log, const net::NetLogSource& source); 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker UDPServerSocket(const UDPServerSocket&) = delete; 28*6777b538SAndroid Build Coastguard Worker UDPServerSocket& operator=(const UDPServerSocket&) = delete; 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker ~UDPServerSocket() override; 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker // Implement DatagramServerSocket: 33*6777b538SAndroid Build Coastguard Worker int Listen(const IPEndPoint& address) override; 34*6777b538SAndroid Build Coastguard Worker int RecvFrom(IOBuffer* buf, 35*6777b538SAndroid Build Coastguard Worker int buf_len, 36*6777b538SAndroid Build Coastguard Worker IPEndPoint* address, 37*6777b538SAndroid Build Coastguard Worker CompletionOnceCallback callback) override; 38*6777b538SAndroid Build Coastguard Worker int SendTo(IOBuffer* buf, 39*6777b538SAndroid Build Coastguard Worker int buf_len, 40*6777b538SAndroid Build Coastguard Worker const IPEndPoint& address, 41*6777b538SAndroid Build Coastguard Worker CompletionOnceCallback callback) override; 42*6777b538SAndroid Build Coastguard Worker int SetReceiveBufferSize(int32_t size) override; 43*6777b538SAndroid Build Coastguard Worker int SetSendBufferSize(int32_t size) override; 44*6777b538SAndroid Build Coastguard Worker int SetDoNotFragment() override; 45*6777b538SAndroid Build Coastguard Worker int SetRecvTos() override; 46*6777b538SAndroid Build Coastguard Worker void SetMsgConfirm(bool confirm) override; 47*6777b538SAndroid Build Coastguard Worker void Close() override; 48*6777b538SAndroid Build Coastguard Worker int GetPeerAddress(IPEndPoint* address) const override; 49*6777b538SAndroid Build Coastguard Worker int GetLocalAddress(IPEndPoint* address) const override; 50*6777b538SAndroid Build Coastguard Worker void UseNonBlockingIO() override; 51*6777b538SAndroid Build Coastguard Worker const NetLogWithSource& NetLog() const override; 52*6777b538SAndroid Build Coastguard Worker void AllowAddressReuse() override; 53*6777b538SAndroid Build Coastguard Worker void AllowBroadcast() override; 54*6777b538SAndroid Build Coastguard Worker void AllowAddressSharingForMulticast() override; 55*6777b538SAndroid Build Coastguard Worker int JoinGroup(const IPAddress& group_address) const override; 56*6777b538SAndroid Build Coastguard Worker int LeaveGroup(const IPAddress& group_address) const override; 57*6777b538SAndroid Build Coastguard Worker int SetMulticastInterface(uint32_t interface_index) override; 58*6777b538SAndroid Build Coastguard Worker int SetMulticastTimeToLive(int time_to_live) override; 59*6777b538SAndroid Build Coastguard Worker int SetMulticastLoopbackMode(bool loopback) override; 60*6777b538SAndroid Build Coastguard Worker int SetDiffServCodePoint(DiffServCodePoint dscp) override; 61*6777b538SAndroid Build Coastguard Worker int SetTos(DiffServCodePoint dscp, EcnCodePoint ecn) override; 62*6777b538SAndroid Build Coastguard Worker void DetachFromThread() override; 63*6777b538SAndroid Build Coastguard Worker DscpAndEcn GetLastTos() const override; 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker private: 66*6777b538SAndroid Build Coastguard Worker UDPSocket socket_; 67*6777b538SAndroid Build Coastguard Worker bool allow_address_reuse_ = false; 68*6777b538SAndroid Build Coastguard Worker bool allow_broadcast_ = false; 69*6777b538SAndroid Build Coastguard Worker bool allow_address_sharing_for_multicast_ = false; 70*6777b538SAndroid Build Coastguard Worker }; 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker } // namespace net 73*6777b538SAndroid Build Coastguard Worker 74*6777b538SAndroid Build Coastguard Worker #endif // NET_SOCKET_UDP_SERVER_SOCKET_H_ 75