18 #include <protocols/datagram_reassembly.h>
19 #include <protocols/rtc/rtc_ldr.h>
20 #include <protocols/rtc/rtc_rc.h>
21 #include <protocols/rtc/rtc_state.h>
22 #include <protocols/transport_protocol.h>
24 #include <unordered_set>
39 using TransportProtocol::start;
41 using TransportProtocol::stop;
43 void resume()
override;
48 enum class SyncState { catch_up = 0, in_sync = 1, last };
53 void reset()
override;
55 void inactiveProducer();
62 void computeMaxSyncWindow();
63 void updateSyncWindow();
64 void decreaseSyncWindow();
67 void sendRtxInterest(uint32_t seq);
68 void sendProbeInterest(uint32_t seq);
69 void scheduleNextInterests()
override;
70 void onInterestTimeout(Interest::Ptr &interest,
const Name &name)
override;
73 void onContentObjectReceived(
Interest &interest,
75 std::error_code &ec)
override;
77 const std::error_code &reason)
override {}
78 void onReassemblyFailed(std::uint32_t missing_segment)
override {}
81 void sendStatsToApp(uint32_t retx_count, uint32_t received_bytes,
82 uint32_t sent_interests, uint32_t lost_data,
83 uint32_t definitely_lost, uint32_t recovered_losses,
84 uint32_t received_nacks, uint32_t received_fec);
87 void onFecPackets(std::vector<std::pair<uint32_t, fec::buffer>> &packets);
90 bool start_send_interest_;
91 SyncState current_state_;
93 uint32_t current_sync_win_;
94 uint32_t max_sync_win_;
97 std::unique_ptr<asio::steady_timer> round_timer_;
100 std::unique_ptr<asio::steady_timer> scheduler_timer_;
101 bool scheduler_timer_on_;
102 uint64_t last_interest_sent_time_;
103 uint64_t last_interest_sent_seq_;
107 uint32_t max_aggregated_interest_;
110 uint32_t max_sent_int_;
114 std::unique_ptr<asio::steady_timer> pacing_timer_;
115 bool pacing_timer_on_;
118 std::unordered_set<uint32_t> timeouts_or_nacks_;
120 std::shared_ptr<RTCState> state_;
121 std::shared_ptr<RTCRateControl> rc_;
122 std::shared_ptr<RTCLossDetectionAndRecovery> ldr_;