diff options
author | Mauro <you@example.com> | 2021-06-30 07:57:22 +0000 |
---|---|---|
committer | Mauro Sardara <msardara@cisco.com> | 2021-07-06 16:16:04 +0000 |
commit | 08233d44a6cfde878d7e10bca38ae935ed1c8fd5 (patch) | |
tree | 7ecc534d55bdc7e8dd15ecab084720910bcdf4d9 /libtransport/src/protocols/production_protocol.h | |
parent | 147ba39bed26887f5eba84757e2463ab8e370a9a (diff) |
[HICN-713] Transport Library Major Refactoring 2
Co-authored-by: Luca Muscariello <muscariello@ieee.org>
Co-authored-by: Michele Papalini <micpapal@cisco.com>
Co-authored-by: Olivier Roques <oroques+fdio@cisco.com>
Co-authored-by: Giulio Grassi <gigrassi@cisco.com>
Signed-off-by: Mauro Sardara <msardara@cisco.com>
Change-Id: I5b2c667bad66feb45abdb5effe22ed0f6c85d1c2
Diffstat (limited to 'libtransport/src/protocols/production_protocol.h')
-rw-r--r-- | libtransport/src/protocols/production_protocol.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libtransport/src/protocols/production_protocol.h b/libtransport/src/protocols/production_protocol.h index 780972321..7366311eb 100644 --- a/libtransport/src/protocols/production_protocol.h +++ b/libtransport/src/protocols/production_protocol.h @@ -20,6 +20,8 @@ #include <hicn/transport/interfaces/statistics.h> #include <hicn/transport/utils/object_pool.h> #include <implementation/socket.h> +#include <protocols/fec_base.h> +#include <protocols/fec_utils.h> #include <utils/content_store.h> #include <atomic> @@ -67,6 +69,27 @@ class ProductionProtocol : public Portal::ProducerCallback { virtual void onInterest(core::Interest &i) override = 0; virtual void onError(std::error_code ec) override{}; + template <typename FECHandler, typename AllocatorHandler> + void enableFEC(FECHandler &&fec_handler, + AllocatorHandler &&allocator_handler) { + if (!fec_encoder_) { + // Try to get FEC from environment + if (const char *fec_str = std::getenv("TRANSPORT_FEC_TYPE")) { + LOG(INFO) << "Using FEC " << fec_str; + fec_type_ = fec::FECUtils::fecTypeFromString(fec_str); + } + + if (fec_type_ == fec::FECType::UNKNOWN) { + return; + } + + fec_encoder_ = fec::FECUtils::getEncoder(fec_type_, 1); + fec_encoder_->setFECCallback(std::forward<FECHandler>(fec_handler)); + fec_encoder_->setBufferCallback( + std::forward<AllocatorHandler>(allocator_handler)); + } + } + protected: implementation::ProducerSocket *socket_; @@ -78,6 +101,7 @@ class ProductionProtocol : public Portal::ProducerCallback { std::shared_ptr<Portal> portal_; std::atomic<bool> is_running_; interface::ProductionStatistics *stats_; + std::unique_ptr<fec::ProducerFEC> fec_encoder_; // Callbacks interface::ProducerInterestCallback *on_interest_input_; @@ -101,7 +125,12 @@ class ProductionProtocol : public Portal::ProducerCallback { // List ot routes served by current producer protocol std::list<Prefix> served_namespaces_; + // Signature and manifest + std::shared_ptr<auth::Signer> signer_; + bool making_manifest_; + bool is_async_; + fec::FECType fec_type_; }; } // end namespace protocol |