blob: 0772cb8d971133367cdf7af0eaab998466661564 [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:26 +00001/*
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
Steve Anton10542f22019-01-11 09:11:00 -080011#ifndef RTC_BASE_ASYNC_SOCKET_H_
12#define RTC_BASE_ASYNC_SOCKET_H_
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000013
Yves Gerey3e707812018-11-28 16:47:49 +010014#include <stddef.h>
15#include <stdint.h>
16
Niels Möller8729d782021-08-11 11:22:44 +020017#include <memory>
18
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020019#include "rtc_base/socket.h"
Steve Anton10542f22019-01-11 09:11:00 -080020#include "rtc_base/socket_address.h"
Artem Titove41c4332018-07-25 15:04:28 +020021#include "rtc_base/third_party/sigslot/sigslot.h"
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000022
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020023namespace rtc {
24
Niels Möllerd0b88792021-08-12 10:32:30 +020025class AsyncSocketAdapter : public Socket, public sigslot::has_slots<> {
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020026 public:
Niels Möller8729d782021-08-11 11:22:44 +020027 // Takes ownership of the passed in socket.
28 // TODO(bugs.webrtc.org/6424): Change to unique_ptr here and in callers.
Niels Möllerd0b88792021-08-12 10:32:30 +020029 explicit AsyncSocketAdapter(Socket* socket);
Niels Möller8729d782021-08-11 11:22:44 +020030
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020031 SocketAddress GetLocalAddress() const override;
32 SocketAddress GetRemoteAddress() const override;
33 int Bind(const SocketAddress& addr) override;
34 int Connect(const SocketAddress& addr) override;
35 int Send(const void* pv, size_t cb) override;
36 int SendTo(const void* pv, size_t cb, const SocketAddress& addr) override;
37 int Recv(void* pv, size_t cb, int64_t* timestamp) override;
38 int RecvFrom(void* pv,
39 size_t cb,
40 SocketAddress* paddr,
41 int64_t* timestamp) override;
42 int Listen(int backlog) override;
Niels Möllerd0b88792021-08-12 10:32:30 +020043 Socket* Accept(SocketAddress* paddr) override;
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020044 int Close() override;
45 int GetError() const override;
46 void SetError(int error) override;
47 ConnState GetState() const override;
48 int GetOption(Option opt, int* value) override;
49 int SetOption(Option opt, int value) override;
50
51 protected:
Niels Möllerd0b88792021-08-12 10:32:30 +020052 virtual void OnConnectEvent(Socket* socket);
53 virtual void OnReadEvent(Socket* socket);
54 virtual void OnWriteEvent(Socket* socket);
55 virtual void OnCloseEvent(Socket* socket, int err);
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020056
Niels Möllerd0b88792021-08-12 10:32:30 +020057 Socket* GetSocket() const { return socket_.get(); }
Niels Möller8729d782021-08-11 11:22:44 +020058
59 private:
Niels Möllerd0b88792021-08-12 10:32:30 +020060 const std::unique_ptr<Socket> socket_;
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020061};
62
63} // namespace rtc
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000064
Steve Anton10542f22019-01-11 09:11:00 -080065#endif // RTC_BASE_ASYNC_SOCKET_H_