15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/udp/udp_server_socket.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/rand_callback.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UDPServerSocket::UDPServerSocket(net::NetLog* net_log, 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::NetLog::Source& source) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : socket_(DatagramSocket::DEFAULT_BIND, 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RandIntCallback(), 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net_log, 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UDPServerSocket::~UDPServerSocket() { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int UDPServerSocket::Listen(const IPEndPoint& address) { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return socket_.Bind(address); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int UDPServerSocket::RecvFrom(IOBuffer* buf, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int buf_len, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPEndPoint* address, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CompletionCallback& callback) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return socket_.RecvFrom(buf, buf_len, address, callback); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int UDPServerSocket::SendTo(IOBuffer* buf, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int buf_len, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPEndPoint& address, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CompletionCallback& callback) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return socket_.SendTo(buf, buf_len, address, callback); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint UDPServerSocket::SetReceiveBufferSize(int32 size) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return socket_.SetReceiveBufferSize(size); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint UDPServerSocket::SetSendBufferSize(int32 size) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return socket_.SetSendBufferSize(size); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UDPServerSocket::Close() { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) socket_.Close(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int UDPServerSocket::GetPeerAddress(IPEndPoint* address) const { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return socket_.GetPeerAddress(address); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int UDPServerSocket::GetLocalAddress(IPEndPoint* address) const { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return socket_.GetLocalAddress(address); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const BoundNetLog& UDPServerSocket::NetLog() const { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return socket_.NetLog(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UDPServerSocket::AllowAddressReuse() { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) socket_.AllowAddressReuse(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UDPServerSocket::AllowBroadcast() { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) socket_.AllowBroadcast(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)int UDPServerSocket::JoinGroup(const IPAddressNumber& group_address) const { 73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return socket_.JoinGroup(group_address); 74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)int UDPServerSocket::LeaveGroup(const IPAddressNumber& group_address) const { 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return socket_.LeaveGroup(group_address); 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int UDPServerSocket::SetMulticastInterface(uint32 interface_index) { 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return socket_.SetMulticastInterface(interface_index); 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)int UDPServerSocket::SetMulticastTimeToLive(int time_to_live) { 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return socket_.SetMulticastTimeToLive(time_to_live); 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)int UDPServerSocket::SetMulticastLoopbackMode(bool loopback) { 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return socket_.SetMulticastLoopbackMode(loopback); 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)int UDPServerSocket::SetDiffServCodePoint(DiffServCodePoint dscp) { 938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return socket_.SetDiffServCodePoint(dscp); 948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void UDPServerSocket::DetachFromThread() { 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) socket_.DetachFromThread(); 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 101