1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be
3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file.
4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#ifndef NET_SOCKET_UDP_SERVER_SOCKET_H_
6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#define NET_SOCKET_UDP_SERVER_SOCKET_H_
7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#pragma once
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "net/base/completion_callback.h"
10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "net/udp/datagram_server_socket.h"
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "net/udp/udp_socket.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace net {
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass IPEndPoint;
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass BoundNetLog;
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// A client socket that uses UDP as the transport layer.
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass UDPServerSocket : public DatagramServerSocket {
20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public:
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  UDPServerSocket(net::NetLog* net_log,
22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                  const net::NetLog::Source& source);
23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual ~UDPServerSocket();
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Implement DatagramServerSocket:
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual int Listen(const IPEndPoint& address);
27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual int RecvFrom(IOBuffer* buf,
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       int buf_len,
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                       IPEndPoint* address,
30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       CompletionCallback* callback);
31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual int SendTo(IOBuffer* buf,
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                     int buf_len,
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     const IPEndPoint& address,
34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                     CompletionCallback* callback);
35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void Close();
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual int GetPeerAddress(IPEndPoint* address) const;
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual int GetLocalAddress(IPEndPoint* address) const;
38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private:
40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  UDPSocket socket_;
41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  DISALLOW_COPY_AND_ASSIGN(UDPServerSocket);
42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen};
43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}  // namespace net
45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif  // NET_SOCKET_UDP_SERVER_SOCKET_H_
47