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