blob: 541910e79360fa9a726761c8a34cea00febececc [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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef P2P_BASE_UDPTRANSPORT_H_
12#define P2P_BASE_UDPTRANSPORT_H_
deadbeefd1c09982017-01-18 15:16:37 -080013
14#include <memory>
15#include <string>
16
Danil Chapovalov00c71832018-06-15 15:58:38 +020017#include "absl/types/optional.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020018#include "api/ortc/udptransportinterface.h"
19#include "p2p/base/packettransportinternal.h"
20#include "rtc_base/asyncpacketsocket.h" // For PacketOptions.
21#include "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);
Steve Anton33f69db2017-10-30 10:01:15 -070041 ~UdpTransport() override;
deadbeefd1c09982017-01-18 15:16:37 -080042
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.
Zhi Huang942bc2e2017-11-13 13:26:07 -080049 const std::string& transport_name() const override;
deadbeefd1c09982017-01-18 15:16:37 -080050
Steve Anton33f69db2017-10-30 10:01:15 -070051 bool receiving() const override;
deadbeefd1c09982017-01-18 15:16:37 -080052
53 bool writable() const override;
54
55 int SendPacket(const char* data,
56 size_t len,
57 const rtc::PacketOptions& options,
58 int flags) override;
59
Steve Anton33f69db2017-10-30 10:01:15 -070060 int SetOption(rtc::Socket::Option opt, int value) override;
deadbeefd1c09982017-01-18 15:16:37 -080061
Steve Anton33f69db2017-10-30 10:01:15 -070062 int GetError() override;
deadbeefd1c09982017-01-18 15:16:37 -080063
Danil Chapovalov00c71832018-06-15 15:58:38 +020064 absl::optional<rtc::NetworkRoute> network_route() const override;
Zhi Huang942bc2e2017-11-13 13:26:07 -080065
deadbeefe814a0d2017-02-25 18:15:09 -080066 protected:
Steve Anton33f69db2017-10-30 10:01:15 -070067 PacketTransportInternal* GetInternal() override;
deadbeefe814a0d2017-02-25 18:15:09 -080068
deadbeefd1c09982017-01-18 15:16:37 -080069 private:
70 void OnSocketReadPacket(rtc::AsyncPacketSocket* socket,
71 const char* data,
72 size_t len,
73 const rtc::SocketAddress& remote_addr,
74 const rtc::PacketTime& packet_time);
75 void OnSocketSentPacket(rtc::AsyncPacketSocket* socket,
76 const rtc::SentPacket& packet);
77 bool IsLocalConsistent();
Zhi Huang942bc2e2017-11-13 13:26:07 -080078
deadbeefd1c09982017-01-18 15:16:37 -080079 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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020089#endif // P2P_BASE_UDPTRANSPORT_H_