• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_BASE_ASYNCUDPSOCKET_H_
12 #define WEBRTC_BASE_ASYNCUDPSOCKET_H_
13 
14 #include "webrtc/base/asyncpacketsocket.h"
15 #include "webrtc/base/scoped_ptr.h"
16 #include "webrtc/base/socketfactory.h"
17 
18 namespace rtc {
19 
20 // Provides the ability to receive packets asynchronously.  Sends are not
21 // buffered since it is acceptable to drop packets under high load.
22 class AsyncUDPSocket : public AsyncPacketSocket {
23  public:
24   // Binds |socket| and creates AsyncUDPSocket for it. Takes ownership
25   // of |socket|. Returns NULL if bind() fails (|socket| is destroyed
26   // in that case).
27   static AsyncUDPSocket* Create(AsyncSocket* socket,
28                                 const SocketAddress& bind_address);
29   // Creates a new socket for sending asynchronous UDP packets using an
30   // asynchronous socket from the given factory.
31   static AsyncUDPSocket* Create(SocketFactory* factory,
32                                 const SocketAddress& bind_address);
33   explicit AsyncUDPSocket(AsyncSocket* socket);
34   virtual ~AsyncUDPSocket();
35 
36   virtual SocketAddress GetLocalAddress() const;
37   virtual SocketAddress GetRemoteAddress() const;
38   virtual int Send(const void *pv, size_t cb,
39                    const rtc::PacketOptions& options);
40   virtual int SendTo(const void *pv, size_t cb, const SocketAddress& addr,
41                      const rtc::PacketOptions& options);
42   virtual int Close();
43 
44   virtual State GetState() const;
45   virtual int GetOption(Socket::Option opt, int* value);
46   virtual int SetOption(Socket::Option opt, int value);
47   virtual int GetError() const;
48   virtual void SetError(int error);
49 
50  private:
51   // Called when the underlying socket is ready to be read from.
52   void OnReadEvent(AsyncSocket* socket);
53   // Called when the underlying socket is ready to send.
54   void OnWriteEvent(AsyncSocket* socket);
55 
56   scoped_ptr<AsyncSocket> socket_;
57   char* buf_;
58   size_t size_;
59 };
60 
61 }  // namespace rtc
62 
63 #endif  // WEBRTC_BASE_ASYNCUDPSOCKET_H_
64