18 #include <hicn/transport/interfaces/callbacks.h>
19 #include <hicn/transport/interfaces/socket_consumer.h>
20 #include <hicn/transport/interfaces/statistics.h>
21 #include <hicn/transport/utils/object_pool.h>
22 #include <implementation/socket.h>
23 #include <protocols/data_processing_events.h>
24 #include <protocols/fec_base.h>
25 #include <protocols/indexer.h>
26 #include <protocols/reassembly.h>
37 class IndexVerificationManager;
39 using ReadCallback = interface::ConsumerSocket::ReadCallback;
43 static constexpr std::size_t interest_pool_size = 4096;
45 friend class ManifestIndexManager;
53 TRANSPORT_ALWAYS_INLINE
bool isRunning() {
return is_running_; }
59 virtual void resume();
69 virtual void scheduleNextInterests() = 0;
72 virtual void onContentReassembled(std::error_code ec);
73 virtual void onPacketDropped(
Interest &interest,
75 const std::error_code &ec)
override = 0;
76 virtual void onReassemblyFailed(std::uint32_t missing_segment)
override = 0;
80 std::error_code &ec) = 0;
81 virtual void onInterestTimeout(Interest::Ptr &i,
const Name &n) = 0;
83 virtual void sendInterest(
const Name &interest_name,
84 std::array<uint32_t, MAX_AGGREGATED_INTEREST>
85 *additional_suffixes =
nullptr,
88 template <
typename FECHandler,
typename AllocatorHandler>
89 void enableFEC(FECHandler &&fec_handler,
90 AllocatorHandler &&allocator_handler) {
93 if (
const char *fec_str = std::getenv(
"TRANSPORT_FEC_TYPE")) {
94 LOG(INFO) <<
"Using FEC " << fec_str;
95 fec_type_ = fec::FECUtils::fecTypeFromString(fec_str);
98 if (fec_type_ == fec::FECType::UNKNOWN) {
102 fec_decoder_ = fec::FECUtils::getDecoder(
103 fec_type_, indexer_verifier_->getFirstSuffix());
104 fec_decoder_->setFECCallback(std::forward<FECHandler>(fec_handler));
105 fec_decoder_->setBufferCallback(
106 std::forward<AllocatorHandler>(allocator_handler));
107 indexer_verifier_->enableFec(fec_type_);
111 virtual void reset();
115 void onContentObject(Interest &i, ContentObject &c)
override;
116 void onTimeout(Interest::Ptr &i,
const Name &n)
override;
117 void onError(std::error_code ec)
override {}
120 implementation::ConsumerSocket *socket_;
121 std::unique_ptr<Indexer> indexer_verifier_;
122 std::unique_ptr<Reassembly> reassembly_;
123 std::unique_ptr<fec::ConsumerFEC> fec_decoder_;
124 std::shared_ptr<core::Portal> portal_;
126 std::atomic<bool> is_first_;
127 interface::TransportStatistics *stats_;
130 interface::ConsumerInterestCallback *on_interest_retransmission_;
131 interface::ConsumerInterestCallback *on_interest_output_;
132 interface::ConsumerInterestCallback *on_interest_timeout_;
133 interface::ConsumerInterestCallback *on_interest_satisfied_;
134 interface::ConsumerContentObjectCallback *on_content_object_input_;
135 interface::ConsumerContentObjectCallback *on_content_object_;
136 interface::ConsumerTimerCallback *stats_summary_;
137 ReadCallback *on_payload_;
141 fec::FECType fec_type_;
144 std::atomic<bool> is_running_;