blob: 823c88fcab254a35b47dca2037a60ef1556b9aea [file] [log] [blame]
deadbeefd1c09982017-01-18 15:16:37 -08001/*
2 * Copyright 2016 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_P2P_BASE_UDPTRANSPORT_H_
12#define WEBRTC_P2P_BASE_UDPTRANSPORT_H_
13
14#include <memory>
15#include <string>
16
kwiberg84f6a3f2017-09-05 08:43:13 -070017#include "webrtc/api/optional.h"
deadbeefe814a0d2017-02-25 18:15:09 -080018#include "webrtc/api/ortc/udptransportinterface.h"
deadbeef5bd5ca32017-02-10 11:31:50 -080019#include "webrtc/p2p/base/packettransportinternal.h"
Edward Lemurc20978e2017-07-06 19:44:34 +020020#include "webrtc/rtc_base/asyncpacketsocket.h" // For PacketOptions.
Edward Lemurc20978e2017-07-06 19:44:34 +020021#include "webrtc/rtc_base/thread_checker.h"
deadbeefd1c09982017-01-18 15:16:37 -080022
23namespace rtc {
24class AsyncPacketSocket;
25struct PacketTime;
26struct SentPacket;
27class SocketAddress;
28}
29
30namespace cricket {
31
32// Implementation of UdpTransportInterface.
33// Used by OrtcFactory.
deadbeefe814a0d2017-02-25 18:15:09 -080034class UdpTransport : public rtc::PacketTransportInternal,
35 public webrtc::UdpTransportInterface {
deadbeefd1c09982017-01-18 15:16:37 -080036 public:
37 // |transport_name| is only used for identification/logging.
38 // |socket| must be non-null.
39 UdpTransport(const std::string& transport_name,
40 std::unique_ptr<rtc::AsyncPacketSocket> socket);
41 ~UdpTransport();
42
43 // Overrides of UdpTransportInterface, used by the API consumer.
44 rtc::SocketAddress GetLocalAddress() const override;
45 bool SetRemoteAddress(const rtc::SocketAddress& addr) override;
46 rtc::SocketAddress GetRemoteAddress() const override;
47
deadbeef5bd5ca32017-02-10 11:31:50 -080048 // Overrides of PacketTransportInternal, used by webrtc internally.
zhihuangb2cdd932017-01-19 16:54:25 -080049 std::string debug_name() const override { return transport_name_; }
deadbeefd1c09982017-01-18 15:16:37 -080050
51 bool receiving() const override {
52 // TODO(johan): Implement method and signal.
53 return true;
54 }
55
56 bool writable() const override;
57
58 int SendPacket(const char* data,
59 size_t len,
60 const rtc::PacketOptions& options,
61 int flags) override;
62
63 int SetOption(rtc::Socket::Option opt, int value) override { return 0; }
64
65 int GetError() override { return send_error_; }
66
deadbeefe814a0d2017-02-25 18:15:09 -080067 protected:
68 PacketTransportInternal* GetInternal() override { return this; }
69
deadbeefd1c09982017-01-18 15:16:37 -080070 private:
71 void OnSocketReadPacket(rtc::AsyncPacketSocket* socket,
72 const char* data,
73 size_t len,
74 const rtc::SocketAddress& remote_addr,
75 const rtc::PacketTime& packet_time);
76 void OnSocketSentPacket(rtc::AsyncPacketSocket* socket,
77 const rtc::SentPacket& packet);
78 bool IsLocalConsistent();
79 std::string transport_name_;
80 int send_error_ = 0;
81 std::unique_ptr<rtc::AsyncPacketSocket> socket_;
82 // If not set, will be an "nil" address ("IsNil" returns true).
83 rtc::SocketAddress remote_address_;
84 rtc::ThreadChecker network_thread_checker_;
85};
deadbeefe814a0d2017-02-25 18:15:09 -080086
deadbeefd1c09982017-01-18 15:16:37 -080087} // namespace cricket
88
89#endif // WEBRTC_P2P_BASE_UDPTRANSPORT_H_