From 6d7704c1b497341fd6dd3c27e3f64d0db062ccc2 Mon Sep 17 00:00:00 2001 From: Mauro Sardara Date: Mon, 4 Feb 2019 11:06:18 +0100 Subject: [HICN-11] Rework on transport protocols improving components modularity Change-Id: I6683ec5b494238dc93591c103d25275e89b9f267 Signed-off-by: Mauro Sardara --- .../hicn/transport/interfaces/async_transport.h | 8 +- .../transport/interfaces/full_duplex_socket.cc | 33 +- .../hicn/transport/interfaces/full_duplex_socket.h | 6 +- .../transport/interfaces/rtc_socket_consumer.cc | 1 + .../transport/interfaces/rtc_socket_producer.cc | 1 - .../src/hicn/transport/interfaces/socket.h | 133 +--- .../hicn/transport/interfaces/socket_consumer.cc | 604 +---------------- .../hicn/transport/interfaces/socket_consumer.h | 736 +++++++++++++++++---- .../interfaces/socket_options_default_values.h | 58 +- .../transport/interfaces/socket_options_keys.h | 27 +- .../hicn/transport/interfaces/socket_producer.cc | 554 +--------------- .../hicn/transport/interfaces/socket_producer.h | 585 ++++++++++++---- 12 files changed, 1152 insertions(+), 1594 deletions(-) (limited to 'libtransport/src/hicn/transport/interfaces') diff --git a/libtransport/src/hicn/transport/interfaces/async_transport.h b/libtransport/src/hicn/transport/interfaces/async_transport.h index 2911377a4..692dd318c 100644 --- a/libtransport/src/hicn/transport/interfaces/async_transport.h +++ b/libtransport/src/hicn/transport/interfaces/async_transport.h @@ -17,8 +17,8 @@ #pragma once #include +#include #include -#include #ifndef _WIN32 #include @@ -528,8 +528,7 @@ class AsyncReader { // virtual void readBufferAvailable(uint8_t** buffer, std::size_t // *buf_length) noexcept {} - virtual void readBufferAvailable( - utils::SharableVector &&buffer) noexcept {} + virtual void readBufferAvailable(ContentBuffer &&buffer) noexcept {} // virtual void readBufferAvailable(utils::SharableBuffer&& buffer) // noexcept {} @@ -612,8 +611,7 @@ class AsyncWriter { * shutdownWriteNow()). When closing the socket this way, writeErr() will * still be invoked once for each outstanding write operation. */ - virtual void write(WriteCallback *callback, - utils::SharableVector &&output_buffer, + virtual void write(WriteCallback *callback, ContentBuffer &&output_buffer, const PublicationOptions &options, WriteFlags flags = WriteFlags::NONE) = 0; diff --git a/libtransport/src/hicn/transport/interfaces/full_duplex_socket.cc b/libtransport/src/hicn/transport/interfaces/full_duplex_socket.cc index 0a091d94e..3bb51e72e 100644 --- a/libtransport/src/hicn/transport/interfaces/full_duplex_socket.cc +++ b/libtransport/src/hicn/transport/interfaces/full_duplex_socket.cc @@ -15,7 +15,6 @@ #include #include -#include #include @@ -45,7 +44,7 @@ AsyncFullDuplexSocket::AsyncFullDuplexSocket(const Prefix &locator, internal_signal_callback_(new OnSignalCallback(*this)), send_timeout_milliseconds_(~0), counters_({0}), - receive_buffer_(std::make_shared>()) { + receive_buffer_(ContentBuffer()) { using namespace transport; using namespace std::placeholders; producer_->registerPrefix(locator); @@ -64,11 +63,10 @@ AsyncFullDuplexSocket::AsyncFullDuplexSocket(const Prefix &locator, producer_->connect(); - consumer_->setSocketOption( - ConsumerCallbacksOptions::CONTENT_OBJECT_TO_VERIFY, - (ConsumerContentObjectVerificationCallback)[](ConsumerSocket & s, - const ContentObject &c) - ->bool { return true; }); + consumer_->setSocketOption(ConsumerCallbacksOptions::CONTENT_OBJECT_TO_VERIFY, + (ConsumerContentObjectVerificationCallback)[]( + ConsumerSocket & s, const ContentObject &c) + ->bool { return true; }); ConsumerContentCallback consumer_callback = std::bind(&AsyncFullDuplexSocket::onContentRetrieved, this, _1, _2, _3); @@ -200,17 +198,18 @@ void AsyncFullDuplexSocket::write(WriteCallback *callback, const void *buf, } } -void AsyncFullDuplexSocket::write( - WriteCallback *callback, utils::SharableVector &&output_buffer, - const PublicationOptions &options, WriteFlags flags) { +void AsyncFullDuplexSocket::write(WriteCallback *callback, + ContentBuffer &&output_buffer, + const PublicationOptions &options, + WriteFlags flags) { using namespace transport; // 1 asynchronously write the content. I assume here the // buffer contains the whole application frame. FIXME: check // if this is true and fix it accordingly - std::cout << "Size of the PAYLOAD: " << output_buffer.size() << std::endl; + std::cout << "Size of the PAYLOAD: " << output_buffer->size() << std::endl; - if (output_buffer.size() > + if (output_buffer->size() > core::Packet::default_mtu - sizeof(PayloadMessage)) { TRANSPORT_LOGI("Producing content with name %s", options.name.toString().c_str()); @@ -218,8 +217,8 @@ void AsyncFullDuplexSocket::write( signalProductionToSubscribers(options.name); } else { TRANSPORT_LOGI("Sending payload through interest"); - piggybackPayloadToSubscribers(options.name, &output_buffer[0], - output_buffer.size()); + piggybackPayloadToSubscribers(options.name, &(*output_buffer)[0], + output_buffer->size()); } } @@ -350,10 +349,10 @@ AsyncFullDuplexSocket::decodeSynchronizationMessage( // The interest contains the payload directly. // We saved one round trip :) - auto buffer = std::make_shared>(); + auto buffer = ContentBuffer(); const uint8_t *data = mesg.data() + sizeof(PayloadMessage); buffer->assign(data, data + mesg.length() - sizeof(PayloadMessage)); - read_callback_->readBufferAvailable(std::move(*buffer)); + read_callback_->readBufferAvailable(std::move(buffer)); return createAck(); } default: { @@ -401,7 +400,7 @@ void AsyncFullDuplexSocket::onContentRetrieved(ConsumerSocket &s, TRANSPORT_LOGI("Received content with size %zu", size); if (!ec) { - read_callback_->readBufferAvailable(std::move(*receive_buffer_)); + read_callback_->readBufferAvailable(std::move(receive_buffer_)); } else { TRANSPORT_LOGE("Error retrieving content."); } diff --git a/libtransport/src/hicn/transport/interfaces/full_duplex_socket.h b/libtransport/src/hicn/transport/interfaces/full_duplex_socket.h index f881bea54..b47432460 100644 --- a/libtransport/src/hicn/transport/interfaces/full_duplex_socket.h +++ b/libtransport/src/hicn/transport/interfaces/full_duplex_socket.h @@ -24,7 +24,6 @@ #include #include #include -#include #include #include @@ -136,8 +135,7 @@ class AsyncFullDuplexSocket : public AsyncSocket, const PublicationOptions &options, WriteFlags flags = WriteFlags::NONE) override; - virtual void write(WriteCallback *callback, - utils::SharableVector &&output_buffer, + virtual void write(WriteCallback *callback, ContentBuffer &&output_buffer, const PublicationOptions &options, WriteFlags flags = WriteFlags::NONE) override; @@ -247,7 +245,7 @@ class AsyncFullDuplexSocket : public AsyncSocket, uint32_t send_timeout_milliseconds_; struct Counters counters_; - std::shared_ptr> receive_buffer_; + ContentBuffer receive_buffer_; }; } // namespace interface diff --git a/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.cc b/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.cc index ef952a891..a24e3883c 100644 --- a/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.cc +++ b/libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.cc @@ -14,6 +14,7 @@ */ #include +#include namespace transport { diff --git a/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.cc b/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.cc index ede1ff247..c07ca7989 100644 --- a/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.cc +++ b/libtransport/src/hicn/transport/interfaces/rtc_socket_producer.cc @@ -159,7 +159,6 @@ void RTCProducerSocket::onInterest(Interest::Ptr &&interest) { if (interestSeg < currentSeg_ || interestSeg > (max_gap + currentSeg_)) { sendNack(*interest); } - // else drop packet } void RTCProducerSocket::sendNack(const Interest &interest) { diff --git a/libtransport/src/hicn/transport/interfaces/socket.h b/libtransport/src/hicn/transport/interfaces/socket.h index 14ef86422..7d50d0fbd 100644 --- a/libtransport/src/hicn/transport/interfaces/socket.h +++ b/libtransport/src/hicn/transport/interfaces/socket.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -40,7 +41,8 @@ namespace transport { namespace protocol { class IcnObserver; -} +class TransportStatistics; +} // namespace protocol namespace interface { @@ -77,6 +79,7 @@ using BasePortal = HicnForwarderPortal; using PayloadType = core::PayloadType; using Prefix = core::Prefix; using Array = utils::Array; +using ContentBuffer = std::shared_ptr>; using ConsumerInterestCallback = std::function; @@ -84,9 +87,8 @@ using ConsumerInterestCallback = using ConsumerContentCallback = std::function; -using ConsumerTimerCallback = - std::function; +using ConsumerTimerCallback = std::function; using ProducerContentCallback = std::function; @@ -132,129 +134,6 @@ class Socket { virtual void connect() = 0; - virtual int setSocketOption(int socket_option_key, - uint32_t socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - double socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - bool socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - core::Name socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - std::list socket_option_value) = 0; - - virtual int setSocketOption( - int socket_option_key, - ProducerContentObjectCallback socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - ProducerInterestCallback socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - ProducerContentCallback socket_option_value) = 0; - - virtual int setSocketOption( - int socket_option_key, - ConsumerContentObjectVerificationCallback socket_option_value) = 0; - - virtual int setSocketOption( - int socket_option_key, - ConsumerContentObjectCallback socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - ConsumerInterestCallback socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - ConsumerContentCallback socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - ConsumerManifestCallback socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - IcnObserver *socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - core::HashAlgorithm socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - utils::CryptoSuite socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - const utils::Identity &socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - ConsumerTimerCallback socket_option_value) = 0; - - virtual int setSocketOption(int socket_option_key, - const std::string &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - uint32_t &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - double &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - bool &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - core::Name &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - std::list &socket_option_value) = 0; - - virtual int getSocketOption( - int socket_option_key, - ProducerContentObjectCallback &socket_option_value) = 0; - - virtual int getSocketOption( - int socket_option_key, ProducerInterestCallback &socket_option_value) = 0; - - virtual int getSocketOption( - int socket_option_key, - ConsumerContentObjectVerificationCallback &socket_option_value) = 0; - - virtual int getSocketOption( - int socket_option_key, - ConsumerContentObjectCallback &socket_option_value) = 0; - - virtual int getSocketOption( - int socket_option_key, ConsumerInterestCallback &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - ConsumerContentCallback &socket_option_value) = 0; - - virtual int getSocketOption( - int socket_option_key, ConsumerManifestCallback &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - ProducerContentCallback &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - std::shared_ptr &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - IcnObserver **socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - core::HashAlgorithm &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - utils::CryptoSuite &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - utils::Identity &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - std::string &socket_option_value) = 0; - - virtual int getSocketOption(int socket_option_key, - ConsumerTimerCallback &socket_option_value) = 0; - protected: virtual ~Socket(){}; diff --git a/libtransport/src/hicn/transport/interfaces/socket_consumer.cc b/libtransport/src/hicn/transport/interfaces/socket_consumer.cc index eacaf932b..febe66853 100644 --- a/libtransport/src/hicn/transport/interfaces/socket_consumer.cc +++ b/libtransport/src/hicn/transport/interfaces/socket_consumer.cc @@ -14,6 +14,9 @@ */ #include +#include +#include +#include namespace transport { @@ -43,6 +46,7 @@ ConsumerSocket::ConsumerSocket(int protocol, asio::io_service &io_service) rate_estimation_observer_(nullptr), rate_estimation_choice_(0), is_async_(false), + verifier_(std::make_shared()), verify_signature_(false), content_buffer_(nullptr), on_interest_output_(VOID_HANDLER), @@ -55,12 +59,8 @@ ConsumerSocket::ConsumerSocket(int protocol, asio::io_service &io_service) on_payload_retrieved_(VOID_HANDLER), virtual_download_(false), rtt_stats_(false), - timer_(portal_->getIoService()), timer_interval_milliseconds_(0) { switch (protocol) { - case TransportProtocolAlgorithms::VEGAS: - transport_protocol_ = std::make_shared(this); - break; case TransportProtocolAlgorithms::CBR: transport_protocol_ = std::make_shared(this); break; @@ -85,33 +85,31 @@ ConsumerSocket::~ConsumerSocket() { void ConsumerSocket::connect() { portal_->connect(); } -int ConsumerSocket::consume(const Name &name, - utils::SharableVector &receive_buffer) { +int ConsumerSocket::consume(const Name &name, ContentBuffer &receive_buffer) { if (transport_protocol_->isRunning()) { return CONSUMER_BUSY; } - content_buffer_ = receive_buffer.shared_from_this(); + content_buffer_ = receive_buffer; network_name_ = name; network_name_.setSuffix(0); is_async_ = false; - transport_protocol_->start(receive_buffer); + transport_protocol_->start(); return CONSUMER_FINISHED; } -int ConsumerSocket::asyncConsume( - const Name &name, - std::shared_ptr> receive_buffer) { - // XXX Try to move the name here, instead of copying it!! +int ConsumerSocket::asyncConsume(const Name &name, + ContentBuffer &receive_buffer) { if (!async_downloader_.stopped()) { async_downloader_.add([this, receive_buffer, name]() { network_name_ = std::move(name); network_name_.setSuffix(0); is_async_ = true; - transport_protocol_->start(*receive_buffer); + content_buffer_ = receive_buffer; + transport_protocol_->start(); }); } @@ -150,586 +148,6 @@ asio::io_service &ConsumerSocket::getIoService() { return portal_->getIoService(); } -int ConsumerSocket::setSocketOption(int socket_option_key, - double socket_option_value) { - switch (socket_option_key) { - case MIN_WINDOW_SIZE: - min_window_size_ = socket_option_value; - return SOCKET_OPTION_SET; - - case MAX_WINDOW_SIZE: - max_window_size_ = socket_option_value; - return SOCKET_OPTION_SET; - - case CURRENT_WINDOW_SIZE: - current_window_size_ = socket_option_value; - return SOCKET_OPTION_SET; - - case GAMMA_VALUE: - gamma_ = socket_option_value; - return SOCKET_OPTION_SET; - - case BETA_VALUE: - beta_ = socket_option_value; - return SOCKET_OPTION_SET; - - case DROP_FACTOR: - drop_factor_ = socket_option_value; - return SOCKET_OPTION_SET; - - case MINIMUM_DROP_PROBABILITY: - minimum_drop_probability_ = socket_option_value; - return SOCKET_OPTION_SET; - - case RATE_ESTIMATION_ALPHA: - if (socket_option_value >= 0 && socket_option_value < 1) { - rate_estimation_alpha_ = socket_option_value; - } else { - rate_estimation_alpha_ = ALPHA; - } - return SOCKET_OPTION_SET; - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ConsumerSocket::setSocketOption(int socket_option_key, - uint32_t socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::INPUT_BUFFER_SIZE: - input_buffer_size_ = socket_option_value; - return SOCKET_OPTION_SET; - - case GeneralTransportOptions::OUTPUT_BUFFER_SIZE: - output_buffer_size_ = socket_option_value; - return SOCKET_OPTION_SET; - - case GeneralTransportOptions::MAX_INTEREST_RETX: - max_retransmissions_ = socket_option_value; - return SOCKET_OPTION_SET; - - case GeneralTransportOptions::INTEREST_LIFETIME: - interest_lifetime_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ConsumerCallbacksOptions::INTEREST_RETRANSMISSION: - if (socket_option_value == VOID_HANDLER) { - on_interest_retransmission_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ConsumerCallbacksOptions::INTEREST_EXPIRED: - if (socket_option_value == VOID_HANDLER) { - on_interest_timeout_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ConsumerCallbacksOptions::INTEREST_SATISFIED: - if (socket_option_value == VOID_HANDLER) { - on_interest_satisfied_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ConsumerCallbacksOptions::INTEREST_OUTPUT: - if (socket_option_value == VOID_HANDLER) { - on_interest_output_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ConsumerCallbacksOptions::CONTENT_OBJECT_INPUT: - if (socket_option_value == VOID_HANDLER) { - on_content_object_input_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ConsumerCallbacksOptions::CONTENT_OBJECT_TO_VERIFY: - if (socket_option_value == VOID_HANDLER) { - on_content_object_verification_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ConsumerCallbacksOptions::CONTENT_RETRIEVED: - if (socket_option_value == VOID_HANDLER) { - on_payload_retrieved_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case RateEstimationOptions::RATE_ESTIMATION_BATCH_PARAMETER: - if (socket_option_value > 0) { - rate_estimation_batching_parameter_ = socket_option_value; - } else { - rate_estimation_batching_parameter_ = BATCH; - } - return SOCKET_OPTION_SET; - - case RateEstimationOptions::RATE_ESTIMATION_CHOICE: - if (socket_option_value > 0) { - rate_estimation_choice_ = socket_option_value; - } else { - rate_estimation_choice_ = RATE_CHOICE; - } - return SOCKET_OPTION_SET; - - case GeneralTransportOptions::TIMER_INTERVAL: - timer_interval_milliseconds_ = socket_option_value; - TRANSPORT_LOGD("Ok set %d", timer_interval_milliseconds_); - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ConsumerSocket::setSocketOption(int socket_option_key, - bool socket_option_value) { - switch (socket_option_key) { - case OtherOptions::VIRTUAL_DOWNLOAD: - virtual_download_ = socket_option_value; - return SOCKET_OPTION_SET; - - case RaaqmTransportOptions::RTT_STATS: - rtt_stats_ = socket_option_value; - return SOCKET_OPTION_SET; - - case GeneralTransportOptions::VERIFY_SIGNATURE: - verify_signature_ = socket_option_value; - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ConsumerSocket::setSocketOption(int socket_option_key, - Name socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::NETWORK_NAME: - network_name_ = socket_option_value; - return SOCKET_OPTION_SET; - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ConsumerSocket::setSocketOption(int socket_option_key, - std::list socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ConsumerSocket::setSocketOption( - int socket_option_key, ConsumerContentObjectCallback socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::CONTENT_OBJECT_INPUT: - on_content_object_input_ = socket_option_value; - ; - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ConsumerSocket::setSocketOption( - int socket_option_key, ProducerContentObjectCallback socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ConsumerSocket::setSocketOption( - int socket_option_key, - ConsumerContentObjectVerificationCallback socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::CONTENT_OBJECT_TO_VERIFY: - on_content_object_verification_ = socket_option_value; - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ConsumerSocket::setSocketOption( - int socket_option_key, ConsumerInterestCallback socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::INTEREST_RETRANSMISSION: - on_interest_retransmission_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ConsumerCallbacksOptions::INTEREST_OUTPUT: - on_interest_output_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ConsumerCallbacksOptions::INTEREST_EXPIRED: - on_interest_timeout_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ConsumerCallbacksOptions::INTEREST_SATISFIED: - on_interest_satisfied_ = socket_option_value; - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ConsumerSocket::setSocketOption( - int socket_option_key, ProducerInterestCallback socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ConsumerSocket::setSocketOption( - int socket_option_key, ConsumerContentCallback socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::CONTENT_RETRIEVED: - on_payload_retrieved_ = socket_option_value; - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ConsumerSocket::setSocketOption( - int socket_option_key, ConsumerManifestCallback socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::MANIFEST_INPUT: - on_manifest_ = socket_option_value; - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ConsumerSocket::setSocketOption( - int socket_option_key, ProducerContentCallback socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ConsumerSocket::setSocketOption(int socket_option_key, - IcnObserver *socket_option_value) { - if (socket_option_key == RateEstimationOptions::RATE_ESTIMATION_OBSERVER) { - rate_estimation_observer_ = socket_option_value; - return SOCKET_OPTION_SET; - } - - return SOCKET_OPTION_NOT_SET; -} - -int ConsumerSocket::setSocketOption(int socket_option_key, - HashAlgorithm socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ConsumerSocket::setSocketOption(int socket_option_key, - utils::CryptoSuite socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ConsumerSocket::setSocketOption( - int socket_option_key, const utils::Identity &socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ConsumerSocket::setSocketOption(int socket_option_key, - const std::string &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::CERTIFICATE: - key_id_ = verifier_.addKeyFromCertificate(socket_option_value); - - if (key_id_ != nullptr) { - return SOCKET_OPTION_SET; - } - - break; - - case DataLinkOptions::OUTPUT_INTERFACE: - output_interface_ = socket_option_value; - portal_->setOutputInterface(output_interface_); - return SOCKET_OPTION_SET; - } - - return SOCKET_OPTION_NOT_SET; -} - -int ConsumerSocket::setSocketOption(int socket_option_key, - ConsumerTimerCallback socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::TIMER_EXPIRES: - on_timer_expires_ = socket_option_value; - return SOCKET_OPTION_SET; - } - - return SOCKET_OPTION_NOT_SET; -} - -int ConsumerSocket::getSocketOption(int socket_option_key, - double &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::MIN_WINDOW_SIZE: - socket_option_value = min_window_size_; - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::MAX_WINDOW_SIZE: - socket_option_value = max_window_size_; - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::CURRENT_WINDOW_SIZE: - socket_option_value = current_window_size_; - return SOCKET_OPTION_GET; - - // RAAQM parameters - - case RaaqmTransportOptions::GAMMA_VALUE: - socket_option_value = gamma_; - return SOCKET_OPTION_GET; - - case RaaqmTransportOptions::BETA_VALUE: - socket_option_value = beta_; - return SOCKET_OPTION_GET; - - case RaaqmTransportOptions::DROP_FACTOR: - socket_option_value = drop_factor_; - return SOCKET_OPTION_GET; - - case RaaqmTransportOptions::MINIMUM_DROP_PROBABILITY: - socket_option_value = minimum_drop_probability_; - return SOCKET_OPTION_GET; - - case RateEstimationOptions::RATE_ESTIMATION_ALPHA: - socket_option_value = rate_estimation_alpha_; - return SOCKET_OPTION_GET; - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ConsumerSocket::getSocketOption(int socket_option_key, - uint32_t &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::INPUT_BUFFER_SIZE: - socket_option_value = (uint32_t)input_buffer_size_; - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::OUTPUT_BUFFER_SIZE: - socket_option_value = (uint32_t)output_buffer_size_; - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::MAX_INTEREST_RETX: - socket_option_value = max_retransmissions_; - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::INTEREST_LIFETIME: - socket_option_value = interest_lifetime_; - return SOCKET_OPTION_GET; - - case RaaqmTransportOptions::SAMPLE_NUMBER: - socket_option_value = sample_number_; - return SOCKET_OPTION_GET; - - case RateEstimationOptions::RATE_ESTIMATION_BATCH_PARAMETER: - socket_option_value = rate_estimation_batching_parameter_; - return SOCKET_OPTION_GET; - - case RateEstimationOptions::RATE_ESTIMATION_CHOICE: - socket_option_value = rate_estimation_choice_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ConsumerSocket::getSocketOption(int socket_option_key, - bool &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::ASYNC_MODE: - socket_option_value = is_async_; - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::RUNNING: - socket_option_value = transport_protocol_->isRunning(); - return SOCKET_OPTION_GET; - - case OtherOptions::VIRTUAL_DOWNLOAD: - socket_option_value = virtual_download_; - return SOCKET_OPTION_GET; - - case RaaqmTransportOptions::RTT_STATS: - socket_option_value = rtt_stats_; - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::VERIFY_SIGNATURE: - socket_option_value = verify_signature_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ConsumerSocket::getSocketOption(int socket_option_key, - Name &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::NETWORK_NAME: - socket_option_value = network_name_; - return SOCKET_OPTION_GET; - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ConsumerSocket::getSocketOption(int socket_option_key, - std::list &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ConsumerSocket::getSocketOption( - int socket_option_key, ConsumerContentObjectCallback &socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::CONTENT_OBJECT_INPUT: - socket_option_value = on_content_object_input_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ConsumerSocket::getSocketOption( - int socket_option_key, ProducerContentObjectCallback &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ConsumerSocket::getSocketOption( - int socket_option_key, - ConsumerContentObjectVerificationCallback &socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::CONTENT_OBJECT_TO_VERIFY: - socket_option_value = on_content_object_verification_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ConsumerSocket::getSocketOption( - int socket_option_key, ConsumerInterestCallback &socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::INTEREST_RETRANSMISSION: - socket_option_value = on_interest_retransmission_; - return SOCKET_OPTION_GET; - - case ConsumerCallbacksOptions::INTEREST_OUTPUT: - socket_option_value = on_interest_output_; - return SOCKET_OPTION_GET; - - case ConsumerCallbacksOptions::INTEREST_EXPIRED: - socket_option_value = on_interest_timeout_; - return SOCKET_OPTION_GET; - - case ConsumerCallbacksOptions::INTEREST_SATISFIED: - socket_option_value = on_interest_satisfied_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ConsumerSocket::getSocketOption( - int socket_option_key, ProducerInterestCallback &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ConsumerSocket::getSocketOption( - int socket_option_key, ConsumerContentCallback &socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::CONTENT_RETRIEVED: - socket_option_value = on_payload_retrieved_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ConsumerSocket::getSocketOption( - int socket_option_key, ConsumerManifestCallback &socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::MANIFEST_INPUT: - socket_option_value = on_manifest_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ConsumerSocket::getSocketOption( - int socket_option_key, std::shared_ptr &socket_option_value) { - switch (socket_option_key) { - case PORTAL: - socket_option_value = portal_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ConsumerSocket::getSocketOption(int socket_option_key, - IcnObserver **socket_option_value) { - if (socket_option_key == RATE_ESTIMATION_OBSERVER) { - *socket_option_value = (rate_estimation_observer_); - return SOCKET_OPTION_GET; - } - - return SOCKET_OPTION_NOT_GET; -} - -int ConsumerSocket::getSocketOption(int socket_option_key, - HashAlgorithm &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ConsumerSocket::getSocketOption(int socket_option_key, - utils::CryptoSuite &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ConsumerSocket::getSocketOption(int socket_option_key, - utils::Identity &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ConsumerSocket::getSocketOption( - int socket_option_key, ProducerContentCallback &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ConsumerSocket::getSocketOption(int socket_option_key, - std::string &socket_option_value) { - switch (socket_option_key) { - case DataLinkOptions::OUTPUT_INTERFACE: - socket_option_value = output_interface_; - return SOCKET_OPTION_GET; - } - - return SOCKET_OPTION_NOT_GET; -} - -int ConsumerSocket::getSocketOption( - int socket_option_key, ConsumerTimerCallback &socket_option_value) { - switch (socket_option_key) { - case ConsumerCallbacksOptions::TIMER_EXPIRES: - socket_option_value = on_timer_expires_; - return SOCKET_OPTION_GET; - } - - return SOCKET_OPTION_NOT_GET; -} - } // namespace interface } // end namespace transport diff --git a/libtransport/src/hicn/transport/interfaces/socket_consumer.h b/libtransport/src/hicn/transport/interfaces/socket_consumer.h index 536d2fde3..0f1ad537c 100644 --- a/libtransport/src/hicn/transport/interfaces/socket_consumer.h +++ b/libtransport/src/hicn/transport/interfaces/socket_consumer.h @@ -16,15 +16,9 @@ #pragma once #include - -#include +#include #include -#include -#include -#include - #include -#include #define CONSUMER_FINISHED 0 #define CONSUMER_BUSY 1 @@ -35,11 +29,6 @@ namespace transport { namespace interface { class ConsumerSocket : public BaseSocket { - friend class protocol::TransportProtocol; - friend class protocol::VegasTransportProtocol; - friend class protocol::RaaqmTransportProtocol; - friend class protocol::CbrTransportProtocol; - public: explicit ConsumerSocket(int protocol); explicit ConsumerSocket(int protocol, asio::io_service &io_service); @@ -48,11 +37,9 @@ class ConsumerSocket : public BaseSocket { void connect() override; - int consume(const Name &name, utils::SharableVector &receive_buffer); + int consume(const Name &name, ContentBuffer &receive_buffer); - int asyncConsume( - const Name &name, - std::shared_ptr> receive_buffer); + int asyncConsume(const Name &name, ContentBuffer &receive_buffer); void asyncSendInterest(Interest::Ptr &&interest, Portal::ConsumerCallback *callback); @@ -63,126 +50,630 @@ class ConsumerSocket : public BaseSocket { asio::io_service &getIoService() override; - int setSocketOption(int socket_option_key, - uint32_t socket_option_value) override; - - int setSocketOption(int socket_option_key, - double socket_option_value) override; - - int setSocketOption(int socket_option_key, bool socket_option_value) override; - - int setSocketOption(int socket_option_key, Name socket_option_value) override; + TRANSPORT_ALWAYS_INLINE int setSocketOption(int socket_option_key, + double socket_option_value) { + switch (socket_option_key) { + case MIN_WINDOW_SIZE: + min_window_size_ = socket_option_value; + break; + + case MAX_WINDOW_SIZE: + max_window_size_ = socket_option_value; + break; + + case CURRENT_WINDOW_SIZE: + current_window_size_ = socket_option_value; + break; + + case GAMMA_VALUE: + gamma_ = socket_option_value; + break; + + case BETA_VALUE: + beta_ = socket_option_value; + break; + + case DROP_FACTOR: + drop_factor_ = socket_option_value; + break; + + case MINIMUM_DROP_PROBABILITY: + minimum_drop_probability_ = socket_option_value; + break; + + case RATE_ESTIMATION_ALPHA: + if (socket_option_value >= 0 && socket_option_value < 1) { + rate_estimation_alpha_ = socket_option_value; + } else { + rate_estimation_alpha_ = default_values::alpha; + } + break; + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption(int socket_option_key, + uint32_t socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::INPUT_BUFFER_SIZE: + input_buffer_size_ = socket_option_value; + break; + + case GeneralTransportOptions::OUTPUT_BUFFER_SIZE: + output_buffer_size_ = socket_option_value; + break; + + case GeneralTransportOptions::MAX_INTEREST_RETX: + max_retransmissions_ = socket_option_value; + break; + + case GeneralTransportOptions::INTEREST_LIFETIME: + interest_lifetime_ = socket_option_value; + break; + + case ConsumerCallbacksOptions::INTEREST_RETRANSMISSION: + if (socket_option_value == VOID_HANDLER) { + on_interest_retransmission_ = VOID_HANDLER; + break; + } + + case ConsumerCallbacksOptions::INTEREST_EXPIRED: + if (socket_option_value == VOID_HANDLER) { + on_interest_timeout_ = VOID_HANDLER; + break; + } + + case ConsumerCallbacksOptions::INTEREST_SATISFIED: + if (socket_option_value == VOID_HANDLER) { + on_interest_satisfied_ = VOID_HANDLER; + break; + } + + case ConsumerCallbacksOptions::INTEREST_OUTPUT: + if (socket_option_value == VOID_HANDLER) { + on_interest_output_ = VOID_HANDLER; + break; + } + + case ConsumerCallbacksOptions::CONTENT_OBJECT_INPUT: + if (socket_option_value == VOID_HANDLER) { + on_content_object_input_ = VOID_HANDLER; + break; + } + + case ConsumerCallbacksOptions::CONTENT_OBJECT_TO_VERIFY: + if (socket_option_value == VOID_HANDLER) { + on_content_object_verification_ = VOID_HANDLER; + break; + } + + case ConsumerCallbacksOptions::CONTENT_RETRIEVED: + if (socket_option_value == VOID_HANDLER) { + on_payload_retrieved_ = VOID_HANDLER; + break; + } + + case RateEstimationOptions::RATE_ESTIMATION_BATCH_PARAMETER: + if (socket_option_value > 0) { + rate_estimation_batching_parameter_ = socket_option_value; + } else { + rate_estimation_batching_parameter_ = default_values::batch; + } + break; + + case RateEstimationOptions::RATE_ESTIMATION_CHOICE: + if (socket_option_value > 0) { + rate_estimation_choice_ = socket_option_value; + } else { + rate_estimation_choice_ = default_values::rate_choice; + } + break; + + case GeneralTransportOptions::STATS_INTERVAL: + timer_interval_milliseconds_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption(int socket_option_key, + bool socket_option_value) { + switch (socket_option_key) { + case OtherOptions::VIRTUAL_DOWNLOAD: + virtual_download_ = socket_option_value; + break; + + case RaaqmTransportOptions::RTT_STATS: + rtt_stats_ = socket_option_value; + break; + + case GeneralTransportOptions::VERIFY_SIGNATURE: + verify_signature_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption(int socket_option_key, + Name *socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::NETWORK_NAME: + network_name_ = *socket_option_value; + break; + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, + ConsumerContentObjectCallback socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::CONTENT_OBJECT_INPUT: + on_content_object_input_ = socket_option_value; + break; - int setSocketOption(int socket_option_key, - std::list socket_option_value) override; + default: + return SOCKET_OPTION_NOT_SET; + } - int setSocketOption( - int socket_option_key, - ProducerContentObjectCallback socket_option_value) override; + return SOCKET_OPTION_SET; + } - int setSocketOption( + TRANSPORT_ALWAYS_INLINE int setSocketOption( int socket_option_key, - ConsumerContentObjectVerificationCallback socket_option_value) override; - - int setSocketOption( + ConsumerContentObjectVerificationCallback socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::CONTENT_OBJECT_TO_VERIFY: + on_content_object_verification_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, ConsumerInterestCallback socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::INTEREST_RETRANSMISSION: + on_interest_retransmission_ = socket_option_value; + break; + + case ConsumerCallbacksOptions::INTEREST_OUTPUT: + on_interest_output_ = socket_option_value; + break; + + case ConsumerCallbacksOptions::INTEREST_EXPIRED: + on_interest_timeout_ = socket_option_value; + break; + + case ConsumerCallbacksOptions::INTEREST_SATISFIED: + on_interest_satisfied_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, ConsumerContentCallback socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::CONTENT_RETRIEVED: + on_payload_retrieved_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, ConsumerManifestCallback socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::MANIFEST_INPUT: + on_manifest_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, IcnObserver *socket_option_value) { + switch (socket_option_key) { + case RateEstimationOptions::RATE_ESTIMATION_OBSERVER: + rate_estimation_observer_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( int socket_option_key, - ConsumerContentObjectCallback socket_option_value) override; - - int setSocketOption(int socket_option_key, - ConsumerInterestCallback socket_option_value) override; - - int setSocketOption(int socket_option_key, - ProducerInterestCallback socket_option_value) override; - - int setSocketOption(int socket_option_key, - ConsumerContentCallback socket_option_value) override; + const std::shared_ptr &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::VERIFIER: + verifier_ = socket_option_value; + break; - int setSocketOption(int socket_option_key, - ConsumerManifestCallback socket_option_value) override; + default: + return SOCKET_OPTION_NOT_SET; + } - int setSocketOption(int socket_option_key, - IcnObserver *socket_option_value) override; + return SOCKET_OPTION_SET; + } - int setSocketOption(int socket_option_key, - HashAlgorithm socket_option_value) override; - - int setSocketOption(int socket_option_key, - utils::CryptoSuite crypto_suite) override; - - int setSocketOption(int socket_option_key, - const utils::Identity &crypto_suite) override; - - int setSocketOption(int socket_option_key, - const std::string &socket_option_value) override; + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, + const std::shared_ptr> &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::APPLICATION_BUFFER: + content_buffer_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, const std::string &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::CERTIFICATE: + key_id_ = verifier_->addKeyFromCertificate(socket_option_value); + + if (key_id_ != nullptr) { + break; + } + + case DataLinkOptions::OUTPUT_INTERFACE: + output_interface_ = socket_option_value; + portal_->setOutputInterface(output_interface_); + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, ConsumerTimerCallback socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::STATS_SUMMARY: + stats_summary_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption(int socket_option_key, + double &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::MIN_WINDOW_SIZE: + socket_option_value = min_window_size_; + break; + + case GeneralTransportOptions::MAX_WINDOW_SIZE: + socket_option_value = max_window_size_; + break; + + case GeneralTransportOptions::CURRENT_WINDOW_SIZE: + socket_option_value = current_window_size_; + break; + + // RAAQM parameters + + case RaaqmTransportOptions::GAMMA_VALUE: + socket_option_value = gamma_; + break; + + case RaaqmTransportOptions::BETA_VALUE: + socket_option_value = beta_; + break; + + case RaaqmTransportOptions::DROP_FACTOR: + socket_option_value = drop_factor_; + break; + + case RaaqmTransportOptions::MINIMUM_DROP_PROBABILITY: + socket_option_value = minimum_drop_probability_; + break; + + case RateEstimationOptions::RATE_ESTIMATION_ALPHA: + socket_option_value = rate_estimation_alpha_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption(int socket_option_key, + uint32_t &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::INPUT_BUFFER_SIZE: + socket_option_value = input_buffer_size_; + break; + + case GeneralTransportOptions::OUTPUT_BUFFER_SIZE: + socket_option_value = output_buffer_size_; + break; + + case GeneralTransportOptions::MAX_INTEREST_RETX: + socket_option_value = max_retransmissions_; + break; + + case GeneralTransportOptions::INTEREST_LIFETIME: + socket_option_value = interest_lifetime_; + break; + + case RaaqmTransportOptions::SAMPLE_NUMBER: + socket_option_value = sample_number_; + break; + + case RateEstimationOptions::RATE_ESTIMATION_BATCH_PARAMETER: + socket_option_value = rate_estimation_batching_parameter_; + break; + + case RateEstimationOptions::RATE_ESTIMATION_CHOICE: + socket_option_value = rate_estimation_choice_; + break; + + case GeneralTransportOptions::STATS_INTERVAL: + socket_option_value = timer_interval_milliseconds_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption(int socket_option_key, + bool &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::ASYNC_MODE: + socket_option_value = is_async_; + break; - int setSocketOption(int socket_option_key, - ConsumerTimerCallback socket_option_value) override; + case GeneralTransportOptions::RUNNING: + socket_option_value = transport_protocol_->isRunning(); + break; - int setSocketOption(int socket_option_key, - ProducerContentCallback socket_option_value) override; + case OtherOptions::VIRTUAL_DOWNLOAD: + socket_option_value = virtual_download_; + break; + + case RaaqmTransportOptions::RTT_STATS: + socket_option_value = rtt_stats_; + break; - int getSocketOption(int socket_option_key, - uint32_t &socket_option_value) override; + case GeneralTransportOptions::VERIFY_SIGNATURE: + socket_option_value = verify_signature_; + break; - int getSocketOption(int socket_option_key, - double &socket_option_value) override; + default: + return SOCKET_OPTION_NOT_GET; + } - int getSocketOption(int socket_option_key, - bool &socket_option_value) override; + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption(int socket_option_key, + Name **socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::NETWORK_NAME: + *socket_option_value = &network_name_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, + ConsumerContentObjectCallback **socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::CONTENT_OBJECT_INPUT: + *socket_option_value = &on_content_object_input_; + break; - int getSocketOption(int socket_option_key, - Name &socket_option_value) override; + default: + return SOCKET_OPTION_NOT_GET; + } - int getSocketOption(int socket_option_key, - std::list &socket_option_value) override; + return SOCKET_OPTION_GET; + } - int getSocketOption( + TRANSPORT_ALWAYS_INLINE int getSocketOption( int socket_option_key, - ProducerContentObjectCallback &socket_option_value) override; - - int getSocketOption( + ConsumerContentObjectVerificationCallback **socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::CONTENT_OBJECT_TO_VERIFY: + *socket_option_value = &on_content_object_verification_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, ConsumerInterestCallback **socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::INTEREST_RETRANSMISSION: + *socket_option_value = &on_interest_retransmission_; + break; + + case ConsumerCallbacksOptions::INTEREST_OUTPUT: + *socket_option_value = &on_interest_output_; + break; + + case ConsumerCallbacksOptions::INTEREST_EXPIRED: + *socket_option_value = &on_interest_timeout_; + break; + + case ConsumerCallbacksOptions::INTEREST_SATISFIED: + *socket_option_value = &on_interest_satisfied_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, ConsumerContentCallback **socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::CONTENT_RETRIEVED: + *socket_option_value = &on_payload_retrieved_; + return SOCKET_OPTION_GET; + + default: + return SOCKET_OPTION_NOT_GET; + } + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, ConsumerManifestCallback **socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::MANIFEST_INPUT: + *socket_option_value = &on_manifest_; + break; + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, std::shared_ptr &socket_option_value) { + switch (socket_option_key) { + case PORTAL: + socket_option_value = portal_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, IcnObserver **socket_option_value) { + switch (socket_option_key) { + case RateEstimationOptions::RATE_ESTIMATION_OBSERVER: + *socket_option_value = (rate_estimation_observer_); + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( int socket_option_key, - ConsumerContentObjectVerificationCallback &socket_option_value) override; - - int getSocketOption( + std::shared_ptr &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::VERIFIER: + socket_option_value = verifier_; + break; + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( int socket_option_key, - ConsumerContentObjectCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ConsumerInterestCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ProducerInterestCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ConsumerContentCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ConsumerManifestCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - std::shared_ptr &socket_option_value) override; - - int getSocketOption(int socket_option_key, - IcnObserver **socket_option_value) override; - - int getSocketOption(int socket_option_key, - HashAlgorithm &socket_option_value) override; - - int getSocketOption(int socket_option_key, - utils::CryptoSuite &crypto_suite) override; - - int getSocketOption(int socket_option_key, - utils::Identity &crypto_suite) override; - - int getSocketOption(int socket_option_key, - std::string &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ConsumerTimerCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ProducerContentCallback &socket_option_value) override; + std::shared_ptr> &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::APPLICATION_BUFFER: + socket_option_value = content_buffer_; + break; + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, std::string &socket_option_value) { + switch (socket_option_key) { + case DataLinkOptions::OUTPUT_INTERFACE: + socket_option_value = output_interface_; + break; + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, ConsumerTimerCallback **socket_option_value) { + switch (socket_option_key) { + case ConsumerCallbacksOptions::STATS_SUMMARY: + *socket_option_value = &stats_summary_; + break; + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } protected: std::shared_ptr transport_protocol_; @@ -208,7 +699,6 @@ class ConsumerSocket : public BaseSocket { size_t input_buffer_size_; // RAAQM Parameters - double minimum_drop_probability_; unsigned int sample_number_; double gamma_; @@ -223,11 +713,12 @@ class ConsumerSocket : public BaseSocket { bool is_async_; - utils::Verifier verifier_; + // Verification parameters + std::shared_ptr verifier_; PARCKeyId *key_id_; bool verify_signature_; - std::shared_ptr> content_buffer_; + ContentBuffer content_buffer_; ConsumerInterestCallback on_interest_retransmission_; ConsumerInterestCallback on_interest_output_; @@ -242,16 +733,13 @@ class ConsumerSocket : public BaseSocket { ConsumerContentCallback on_payload_retrieved_; - ConsumerTimerCallback on_timer_expires_; + ConsumerTimerCallback stats_summary_; // Virtual download for traffic generator bool virtual_download_; bool rtt_stats_; - Time t0_; - Time t1_; - asio::steady_timer timer_; uint32_t timer_interval_milliseconds_; }; diff --git a/libtransport/src/hicn/transport/interfaces/socket_options_default_values.h b/libtransport/src/hicn/transport/interfaces/socket_options_default_values.h index f9cbb5a44..142228aeb 100644 --- a/libtransport/src/hicn/transport/interfaces/socket_options_default_values.h +++ b/libtransport/src/hicn/transport/interfaces/socket_options_default_values.h @@ -25,37 +25,39 @@ namespace interface { namespace default_values { -const uint32_t interest_lifetime = 1001; // milliseconds -const uint32_t never_expire_time = HICN_MAX_LIFETIME; -const uint32_t content_object_expiry_time = - never_expire_time; // milliseconds -> 50 seconds -const uint32_t content_object_packet_size = 1500; // The ethernet MTU -const uint32_t producer_socket_input_buffer_size = 150000; // Interests -const uint32_t producer_socket_output_buffer_size = 150000; // Content Object -const uint32_t log_2_default_buffer_size = 12; -const uint32_t signature_size = 260; // bytes -const uint32_t key_locator_size = 60; // bytes -const uint32_t limit_guard = 80; // bytes -const uint32_t min_window_size = 1; // Interests -const uint32_t max_window_size = 128000; // Interests -const uint32_t digest_size = 34; // bytes -const uint32_t max_out_of_order_segments = 3; // content object +static constexpr uint32_t interest_lifetime = 1001; // milliseconds +static constexpr uint32_t never_expire_time = HICN_MAX_LIFETIME; +static constexpr uint32_t content_object_expiry_time = + never_expire_time; // milliseconds -> 50 seconds +static constexpr uint32_t content_object_packet_size = + 1500; // The ethernet MTU +static constexpr uint32_t producer_socket_input_buffer_size = + 150000; // Interests +static constexpr uint32_t producer_socket_output_buffer_size = + 150000; // Content Object +static constexpr uint32_t log_2_default_buffer_size = 12; +static constexpr uint32_t signature_size = 260; // bytes +static constexpr uint32_t key_locator_size = 60; // bytes +static constexpr uint32_t limit_guard = 80; // bytes +static constexpr uint32_t min_window_size = 1; // Interests +static constexpr uint32_t max_window_size = 256; // Interests +static constexpr uint32_t digest_size = 34; // bytes +static constexpr uint32_t max_out_of_order_segments = 3; // content object // RAAQM -const int sample_number = 30; -const double gamma_value = 1; -const double beta_value = 0.8; -const double drop_factor = 0.2; -const double minimum_drop_probability = 0.00001; -const int path_id = 0; -const double rate_alpha = 0.8; +static constexpr int sample_number = 30; +static constexpr double gamma_value = 1; +static constexpr double beta_value = 0.8; +static constexpr double drop_factor = 0.2; +static constexpr double minimum_drop_probability = 0.00001; +static constexpr int path_id = 0; +static constexpr double rate_alpha = 0.8; -// Vegas -const double alpha = 1 / 8; -const double beta = 1 / 4; -const uint16_t k = 4; -const std::chrono::milliseconds clock_granularity = - std::chrono::milliseconds(100); +// Rate estimation +static constexpr uint32_t batch = 50; +static constexpr uint32_t kv = 20; +static constexpr double alpha = 0.8; +static constexpr uint32_t rate_choice = 0; // maximum allowed values const uint32_t transport_protocol_min_retransmissions = 0; diff --git a/libtransport/src/hicn/transport/interfaces/socket_options_keys.h b/libtransport/src/hicn/transport/interfaces/socket_options_keys.h index 1afad2b48..bcf049310 100644 --- a/libtransport/src/hicn/transport/interfaces/socket_options_keys.h +++ b/libtransport/src/hicn/transport/interfaces/socket_options_keys.h @@ -21,9 +21,8 @@ namespace interface { typedef enum { RAAQM = 0, - VEGAS = 1, - CBR = 3, - RTC = 4, + CBR = 1, + RTC = 2, } TransportProtocolAlgorithms; typedef enum { @@ -44,12 +43,14 @@ typedef enum { MAKE_MANIFEST = 116, PORTAL = 117, RUNNING = 118, - HASH_ALGORITHM = 119, - CRYPTO_SUITE = 120, - IDENTITY = 121, - CERTIFICATE = 122, - VERIFY_SIGNATURE = 123, - TIMER_INTERVAL = 124 + APPLICATION_BUFFER = 119, + HASH_ALGORITHM = 120, + CRYPTO_SUITE = 121, + IDENTITY = 122, + VERIFIER = 123, + CERTIFICATE = 124, + VERIFY_SIGNATURE = 125, + STATS_INTERVAL = 126 } GeneralTransportOptions; typedef enum { @@ -78,7 +79,7 @@ typedef enum { MANIFEST_INPUT = 412, CONTENT_OBJECT_TO_VERIFY = 413, CONTENT_RETRIEVED = 414, - TIMER_EXPIRES = 415 + STATS_SUMMARY = 415 } ConsumerCallbacksOptions; typedef enum { @@ -96,11 +97,11 @@ typedef enum { typedef enum { OUTPUT_INTERFACE = 601 } DataLinkOptions; -typedef enum { VIRTUAL_DOWNLOAD = 601, USE_CFG_FILE = 603 } OtherOptions; +typedef enum { VIRTUAL_DOWNLOAD = 701, USE_CFG_FILE = 702 } OtherOptions; typedef enum { - SHA_256 = 701, - RSA_256 = 702, + SHA_256 = 801, + RSA_256 = 802, } SignatureType; } // namespace interface diff --git a/libtransport/src/hicn/transport/interfaces/socket_producer.cc b/libtransport/src/hicn/transport/interfaces/socket_producer.cc index 66c656924..497c40c99 100644 --- a/libtransport/src/hicn/transport/interfaces/socket_producer.cc +++ b/libtransport/src/hicn/transport/interfaces/socket_producer.cc @@ -122,23 +122,7 @@ void ProducerSocket::passContentObjectToCallbacks( on_content_object_output_(*this, *content_object); } -#ifndef PUSH_API - std::unordered_map>::iterator it; - - { - std::lock_guard lock(pending_interests_mtx_); - it = pending_interests_.find(content_object->getName()); - } - - if (it != pending_interests_.end()) { - content_object->setLocator(it->second->getLocator()); - portal_->sendContentObject(*content_object); - std::lock_guard lock(pending_interests_mtx_); - pending_interests_.erase(it); - } -#else portal_->sendContentObject(*content_object); -#endif } } @@ -154,23 +138,7 @@ void ProducerSocket::produce(ContentObject &content_object) { on_content_object_output_(*this, content_object); } -#ifndef PUSH_API - std::unordered_map>::iterator it; - - { - std::lock_guard lock(pending_interests_mtx_); - it = pending_interests_.find(content_object.getName()); - } - - if (it != pending_interests_.end()) { - content_object.setLocator(it->second->getLocator()); - portal_->sendContentObject(content_object); - std::lock_guard lock(pending_interests_mtx_); - pending_interests_.erase(it); - } -#else portal_->sendContentObject(content_object); -#endif } uint32_t ProducerSocket::produce(Name content_name, const uint8_t *buf, @@ -307,10 +275,6 @@ uint32_t ProducerSocket::produce(Name content_name, const uint8_t *buf, content_name.setSuffix(current_segment), format); content_object->setLifetime(content_object_expiry_time_); - if (!making_manifest_ && identity_) { - content_object->setSignatureSize(signature_length); - } - if (packaged_segments == number_of_segments - 1) { content_object->appendPayload(&buf[bytes_segmented], buffer_size - bytes_segmented); @@ -389,14 +353,12 @@ void ProducerSocket::asyncProduce(const Name &suffix, const uint8_t *buf, } } -void ProducerSocket::asyncProduce( - const Name &suffix, utils::SharableVector &&output_buffer) { +void ProducerSocket::asyncProduce(const Name &suffix, + ContentBuffer &&output_buffer) { if (!async_thread_.stopped()) { async_thread_.add( [this, suff = suffix, buffer = std::move(output_buffer)]() { - TRANSPORT_LOGI("FOR REAL!!!!!! --> Producing content with name %s", - suff.toString().c_str()); - produce(suff, &buffer[0], buffer.size(), true); + produce(suff, &(*buffer)[0], buffer->size(), true); }); } } @@ -420,524 +382,14 @@ void ProducerSocket::onInterest(Interest &interest) { portal_->sendContentObject(*content_object); } else { -#ifndef PUSH_API - { - std::lock_guard lock(pending_interests_mtx_); - pending_interests_[interest.getName()] = - std::static_pointer_cast(interest.shared_from_this()); - } -#endif - if (on_interest_process_ != VOID_HANDLER) { - // external_io_service_.post([this, &interest] () { on_interest_process_(*this, interest); - // }); } } } asio::io_service &ProducerSocket::getIoService() { return io_service_; } -int ProducerSocket::setSocketOption(int socket_option_key, - uint32_t socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::DATA_PACKET_SIZE: - if (socket_option_value < default_values::max_content_object_size && - socket_option_value > 0) { - data_packet_size_ = socket_option_value; - return SOCKET_OPTION_SET; - } else { - return SOCKET_OPTION_NOT_SET; - } - - case GeneralTransportOptions::INPUT_BUFFER_SIZE: - if (socket_option_value >= 1) { - input_buffer_capacity_ = socket_option_value; - return SOCKET_OPTION_SET; - } else { - return SOCKET_OPTION_NOT_SET; - } - - case GeneralTransportOptions::OUTPUT_BUFFER_SIZE: - output_buffer_.setLimit(socket_option_value); - return SOCKET_OPTION_SET; - - case GeneralTransportOptions::CONTENT_OBJECT_EXPIRY_TIME: - content_object_expiry_time_ = socket_option_value; - return SOCKET_OPTION_SET; - - case GeneralTransportOptions::SIGNATURE_TYPE: - if (socket_option_value == SOCKET_OPTION_DEFAULT) { - signature_type_ = SHA_256; - } else { - signature_type_ = socket_option_value; - } - - if (signature_type_ == SHA_256 || signature_type_ == RSA_256) { - signature_size_ = 32; - } - - case ProducerCallbacksOptions::INTEREST_INPUT: - if (socket_option_value == VOID_HANDLER) { - on_interest_input_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ProducerCallbacksOptions::INTEREST_DROP: - if (socket_option_value == VOID_HANDLER) { - on_interest_dropped_input_buffer_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ProducerCallbacksOptions::INTEREST_PASS: - if (socket_option_value == VOID_HANDLER) { - on_interest_inserted_input_buffer_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ProducerCallbacksOptions::CACHE_HIT: - if (socket_option_value == VOID_HANDLER) { - on_interest_satisfied_output_buffer_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ProducerCallbacksOptions::CACHE_MISS: - if (socket_option_value == VOID_HANDLER) { - on_interest_process_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ProducerCallbacksOptions::NEW_CONTENT_OBJECT: - if (socket_option_value == VOID_HANDLER) { - on_new_segment_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ProducerCallbacksOptions::CONTENT_OBJECT_SIGN: - if (socket_option_value == VOID_HANDLER) { - on_content_object_to_sign_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ProducerCallbacksOptions::CONTENT_OBJECT_READY: - if (socket_option_value == VOID_HANDLER) { - on_content_object_in_output_buffer_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - case ProducerCallbacksOptions::CONTENT_OBJECT_OUTPUT: - if (socket_option_value == VOID_HANDLER) { - on_content_object_output_ = VOID_HANDLER; - return SOCKET_OPTION_SET; - } - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ProducerSocket::setSocketOption(int socket_option_key, - double socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ProducerSocket::setSocketOption(int socket_option_key, - bool socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::MAKE_MANIFEST: - making_manifest_ = socket_option_value; - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ProducerSocket::setSocketOption(int socket_option_key, - Name socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ProducerSocket::setSocketOption(int socket_option_key, - std::list socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::NETWORK_NAME: - served_namespaces_ = socket_option_value; - default: - return SOCKET_OPTION_NOT_SET; - } - - return SOCKET_OPTION_SET; -} - -int ProducerSocket::setSocketOption( - int socket_option_key, ProducerContentObjectCallback socket_option_value) { - switch (socket_option_key) { - case ProducerCallbacksOptions::NEW_CONTENT_OBJECT: - on_new_segment_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ProducerCallbacksOptions::CONTENT_OBJECT_SIGN: - on_content_object_to_sign_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ProducerCallbacksOptions::CONTENT_OBJECT_READY: - on_content_object_in_output_buffer_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ProducerCallbacksOptions::CONTENT_OBJECT_OUTPUT: - on_content_object_output_ = socket_option_value; - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ProducerSocket::setSocketOption( - int socket_option_key, ProducerInterestCallback socket_option_value) { - switch (socket_option_key) { - case ProducerCallbacksOptions::INTEREST_INPUT: - on_interest_input_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ProducerCallbacksOptions::INTEREST_DROP: - on_interest_dropped_input_buffer_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ProducerCallbacksOptions::INTEREST_PASS: - on_interest_inserted_input_buffer_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ProducerCallbacksOptions::CACHE_HIT: - on_interest_satisfied_output_buffer_ = socket_option_value; - return SOCKET_OPTION_SET; - - case ProducerCallbacksOptions::CACHE_MISS: - on_interest_process_ = socket_option_value; - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ProducerSocket::setSocketOption( - int socket_option_key, ProducerContentCallback socket_option_value) { - switch (socket_option_key) { - case ProducerCallbacksOptions::CONTENT_PRODUCED: - on_content_produced_ = socket_option_value; - return SOCKET_OPTION_SET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ProducerSocket::setSocketOption( - int socket_option_key, ConsumerContentObjectCallback socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ProducerSocket::setSocketOption( - int socket_option_key, - ConsumerContentObjectVerificationCallback socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ProducerSocket::setSocketOption( - int socket_option_key, ConsumerInterestCallback socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ProducerSocket::setSocketOption( - int socket_option_key, ConsumerContentCallback socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ProducerSocket::setSocketOption( - int socket_option_key, ConsumerManifestCallback socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ProducerSocket::setSocketOption(int socket_option_key, - HashAlgorithm socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::HASH_ALGORITHM: - hash_algorithm_ = socket_option_value; - return SOCKET_OPTION_SET; - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ProducerSocket::setSocketOption(int socket_option_key, - utils::CryptoSuite socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::CRYPTO_SUITE: - crypto_suite_ = socket_option_value; - return SOCKET_OPTION_SET; - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ProducerSocket::setSocketOption( - int socket_option_key, const utils::Identity &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::IDENTITY: - identity_.reset(); - identity_ = std::make_unique(socket_option_value); - return SOCKET_OPTION_SET; - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ProducerSocket::setSocketOption(int socket_option_key, - const std::string &socket_option_value) { - switch (socket_option_key) { - case DataLinkOptions::OUTPUT_INTERFACE: - output_interface_ = socket_option_value; - portal_->setOutputInterface(output_interface_); - return SOCKET_OPTION_SET; - } - - return SOCKET_OPTION_NOT_SET; -} - -int ProducerSocket::setSocketOption( - int socket_option_key, - interface::ConsumerTimerCallback socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ProducerSocket::getSocketOption(int socket_option_key, - uint32_t &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::INPUT_BUFFER_SIZE: - socket_option_value = (int)input_buffer_capacity_; - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::OUTPUT_BUFFER_SIZE: - socket_option_value = (uint32_t)output_buffer_.getLimit(); - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::DATA_PACKET_SIZE: - socket_option_value = (uint32_t)data_packet_size_; - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::CONTENT_OBJECT_EXPIRY_TIME: - socket_option_value = content_object_expiry_time_; - return SOCKET_OPTION_GET; - - case GeneralTransportOptions::SIGNATURE_TYPE: - socket_option_value = signature_type_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ProducerSocket::getSocketOption(int socket_option_key, - double &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ProducerSocket::getSocketOption(int socket_option_key, - bool &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::MAKE_MANIFEST: - socket_option_value = making_manifest_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ProducerSocket::getSocketOption(int socket_option_key, - Name &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ProducerSocket::getSocketOption(int socket_option_key, - std::list &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::NETWORK_NAME: - - socket_option_value = served_namespaces_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ProducerSocket::getSocketOption( - int socket_option_key, ProducerContentObjectCallback &socket_option_value) { - switch (socket_option_key) { - case ProducerCallbacksOptions::NEW_CONTENT_OBJECT: - socket_option_value = on_new_segment_; - return SOCKET_OPTION_GET; - - case ProducerCallbacksOptions::CONTENT_OBJECT_SIGN: - socket_option_value = on_content_object_to_sign_; - return SOCKET_OPTION_GET; - - case ProducerCallbacksOptions::CONTENT_OBJECT_READY: - socket_option_value = on_content_object_in_output_buffer_; - return SOCKET_OPTION_GET; - - case ProducerCallbacksOptions::CONTENT_OBJECT_OUTPUT: - socket_option_value = on_content_object_output_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ProducerSocket::getSocketOption( - int socket_option_key, ProducerContentCallback &socket_option_value) { - switch (socket_option_key) { - case ProducerCallbacksOptions::CONTENT_PRODUCED: - socket_option_value = on_content_produced_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ProducerSocket::getSocketOption( - int socket_option_key, ProducerInterestCallback &socket_option_value) { - switch (socket_option_key) { - case ProducerCallbacksOptions::INTEREST_INPUT: - socket_option_value = on_interest_input_; - return SOCKET_OPTION_GET; - - case ProducerCallbacksOptions::INTEREST_DROP: - socket_option_value = on_interest_dropped_input_buffer_; - return SOCKET_OPTION_GET; - - case ProducerCallbacksOptions::INTEREST_PASS: - socket_option_value = on_interest_inserted_input_buffer_; - return SOCKET_OPTION_GET; - - case CACHE_HIT: - socket_option_value = on_interest_satisfied_output_buffer_; - return SOCKET_OPTION_GET; - - case CACHE_MISS: - socket_option_value = on_interest_process_; - return SOCKET_OPTION_GET; - - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ProducerSocket::getSocketOption( - int socket_option_key, ConsumerContentObjectCallback &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ProducerSocket::getSocketOption( - int socket_option_key, - ConsumerContentObjectVerificationCallback &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ProducerSocket::getSocketOption( - int socket_option_key, ConsumerInterestCallback &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ProducerSocket::getSocketOption( - int socket_option_key, ConsumerContentCallback &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ProducerSocket::getSocketOption( - int socket_option_key, ConsumerManifestCallback &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ProducerSocket::getSocketOption( - int socket_option_key, std::shared_ptr &socket_option_value) { - switch (socket_option_key) { - case PORTAL: - socket_option_value = portal_; - return SOCKET_OPTION_GET; - } - - return SOCKET_OPTION_NOT_GET; -} - -int ProducerSocket::getSocketOption(int socket_option_key, - IcnObserver **socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - -int ProducerSocket::setSocketOption(int socket_option_key, - IcnObserver *socket_option_value) { - return SOCKET_OPTION_NOT_SET; -} - -int ProducerSocket::getSocketOption(int socket_option_key, - HashAlgorithm &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::HASH_ALGORITHM: - socket_option_value = hash_algorithm_; - return SOCKET_OPTION_GET; - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ProducerSocket::getSocketOption(int socket_option_key, - utils::CryptoSuite &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::HASH_ALGORITHM: - socket_option_value = crypto_suite_; - return SOCKET_OPTION_GET; - default: - return SOCKET_OPTION_NOT_GET; - } -} - -int ProducerSocket::getSocketOption(int socket_option_key, - utils::Identity &socket_option_value) { - switch (socket_option_key) { - case GeneralTransportOptions::IDENTITY: - if (identity_) { - socket_option_value = *identity_; - return SOCKET_OPTION_SET; - } - default: - return SOCKET_OPTION_NOT_SET; - } -} - -int ProducerSocket::getSocketOption(int socket_option_key, - std::string &socket_option_value) { - switch (socket_option_key) { - case DataLinkOptions::OUTPUT_INTERFACE: - socket_option_value = output_interface_; - return SOCKET_OPTION_GET; - } - - return SOCKET_OPTION_NOT_GET; -} - -int ProducerSocket::getSocketOption( - int socket_option_key, - interface::ConsumerTimerCallback &socket_option_value) { - return SOCKET_OPTION_NOT_GET; -} - } // namespace interface } // end namespace transport diff --git a/libtransport/src/hicn/transport/interfaces/socket_producer.h b/libtransport/src/hicn/transport/interfaces/socket_producer.h index d51464b77..4f38fb30e 100644 --- a/libtransport/src/hicn/transport/interfaces/socket_producer.h +++ b/libtransport/src/hicn/transport/interfaces/socket_producer.h @@ -18,7 +18,6 @@ #include #include #include -#include #include #include @@ -26,8 +25,6 @@ #include #include -#define PUSH_API 1 - #define REGISTRATION_NOT_ATTEMPTED 0 #define REGISTRATION_SUCCESS 1 #define REGISTRATION_FAILURE 2 @@ -56,8 +53,7 @@ class ProducerSocket : public Socket, void asyncProduce(const Name &suffix, const uint8_t *buf, size_t buffer_size); - void asyncProduce(const Name &suffix, - utils::SharableVector &&output_buffer); + void asyncProduce(const Name &suffix, ContentBuffer &&output_buffer); void asyncProduce(ContentObject &content_object); @@ -75,125 +71,459 @@ class ProducerSocket : public Socket, onInterest(*interest); }; - int setSocketOption(int socket_option_key, - uint32_t socket_option_value) override; - - int setSocketOption(int socket_option_key, - double socket_option_value) override; - - int setSocketOption(int socket_option_key, bool socket_option_value) override; - - int setSocketOption(int socket_option_key, Name socket_option_value) override; - - int setSocketOption(int socket_option_key, - std::list socket_option_value) override; - - int setSocketOption( + TRANSPORT_ALWAYS_INLINE int setSocketOption(int socket_option_key, + uint32_t socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::DATA_PACKET_SIZE: + if (socket_option_value < default_values::max_content_object_size && + socket_option_value > 0) { + data_packet_size_ = socket_option_value; + break; + } + + case GeneralTransportOptions::INPUT_BUFFER_SIZE: + if (socket_option_value >= 1) { + input_buffer_capacity_ = socket_option_value; + break; + } + + case GeneralTransportOptions::OUTPUT_BUFFER_SIZE: + output_buffer_.setLimit(socket_option_value); + break; + + case GeneralTransportOptions::CONTENT_OBJECT_EXPIRY_TIME: + content_object_expiry_time_ = socket_option_value; + break; + + case GeneralTransportOptions::SIGNATURE_TYPE: + if (socket_option_value == SOCKET_OPTION_DEFAULT) { + signature_type_ = SHA_256; + } else { + signature_type_ = socket_option_value; + } + + if (signature_type_ == SHA_256 || signature_type_ == RSA_256) { + signature_size_ = 32; + } + + break; + + case ProducerCallbacksOptions::INTEREST_INPUT: + if (socket_option_value == VOID_HANDLER) { + on_interest_input_ = VOID_HANDLER; + break; + } + + case ProducerCallbacksOptions::INTEREST_DROP: + if (socket_option_value == VOID_HANDLER) { + on_interest_dropped_input_buffer_ = VOID_HANDLER; + break; + } + + case ProducerCallbacksOptions::INTEREST_PASS: + if (socket_option_value == VOID_HANDLER) { + on_interest_inserted_input_buffer_ = VOID_HANDLER; + break; + } + + case ProducerCallbacksOptions::CACHE_HIT: + if (socket_option_value == VOID_HANDLER) { + on_interest_satisfied_output_buffer_ = VOID_HANDLER; + break; + } + + case ProducerCallbacksOptions::CACHE_MISS: + if (socket_option_value == VOID_HANDLER) { + on_interest_process_ = VOID_HANDLER; + break; + } + + case ProducerCallbacksOptions::NEW_CONTENT_OBJECT: + if (socket_option_value == VOID_HANDLER) { + on_new_segment_ = VOID_HANDLER; + break; + } + + case ProducerCallbacksOptions::CONTENT_OBJECT_SIGN: + if (socket_option_value == VOID_HANDLER) { + on_content_object_to_sign_ = VOID_HANDLER; + break; + } + + case ProducerCallbacksOptions::CONTENT_OBJECT_READY: + if (socket_option_value == VOID_HANDLER) { + on_content_object_in_output_buffer_ = VOID_HANDLER; + break; + } + + case ProducerCallbacksOptions::CONTENT_OBJECT_OUTPUT: + if (socket_option_value == VOID_HANDLER) { + on_content_object_output_ = VOID_HANDLER; + break; + } + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption(int socket_option_key, + bool socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::MAKE_MANIFEST: + making_manifest_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption(int socket_option_key, + Name *socket_option_value) { + return SOCKET_OPTION_NOT_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, std::list socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::NETWORK_NAME: + served_namespaces_ = socket_option_value; + break; + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( int socket_option_key, - ProducerContentObjectCallback socket_option_value) override; - - int setSocketOption(int socket_option_key, - ProducerInterestCallback socket_option_value) override; - - int setSocketOption( + ProducerContentObjectCallback socket_option_value) { + switch (socket_option_key) { + case ProducerCallbacksOptions::NEW_CONTENT_OBJECT: + on_new_segment_ = socket_option_value; + break; + + case ProducerCallbacksOptions::CONTENT_OBJECT_SIGN: + on_content_object_to_sign_ = socket_option_value; + break; + + case ProducerCallbacksOptions::CONTENT_OBJECT_READY: + on_content_object_in_output_buffer_ = socket_option_value; + break; + + case ProducerCallbacksOptions::CONTENT_OBJECT_OUTPUT: + on_content_object_output_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, ProducerInterestCallback socket_option_value) { + switch (socket_option_key) { + case ProducerCallbacksOptions::INTEREST_INPUT: + on_interest_input_ = socket_option_value; + break; + + case ProducerCallbacksOptions::INTEREST_DROP: + on_interest_dropped_input_buffer_ = socket_option_value; + break; + + case ProducerCallbacksOptions::INTEREST_PASS: + on_interest_inserted_input_buffer_ = socket_option_value; + break; + + case ProducerCallbacksOptions::CACHE_HIT: + on_interest_satisfied_output_buffer_ = socket_option_value; + break; + + case ProducerCallbacksOptions::CACHE_MISS: + on_interest_process_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, ProducerContentCallback socket_option_value) { + switch (socket_option_key) { + case ProducerCallbacksOptions::CONTENT_PRODUCED: + on_content_produced_ = socket_option_value; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, HashAlgorithm socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::HASH_ALGORITHM: + hash_algorithm_ = socket_option_value; + break; + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, utils::CryptoSuite socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::CRYPTO_SUITE: + crypto_suite_ = socket_option_value; + break; + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( int socket_option_key, - ConsumerContentObjectVerificationCallback socket_option_value) override; - - int setSocketOption( + const std::shared_ptr &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::IDENTITY: + identity_ = socket_option_value; + break; + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + } + + TRANSPORT_ALWAYS_INLINE int setSocketOption( + int socket_option_key, const std::string &socket_option_value) { + switch (socket_option_key) { + case DataLinkOptions::OUTPUT_INTERFACE: + output_interface_ = socket_option_value; + portal_->setOutputInterface(output_interface_); + break; + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_SET; + ; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption(int socket_option_key, + uint32_t &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::INPUT_BUFFER_SIZE: + socket_option_value = input_buffer_capacity_; + break; + + case GeneralTransportOptions::OUTPUT_BUFFER_SIZE: + socket_option_value = output_buffer_.getLimit(); + break; + + case GeneralTransportOptions::DATA_PACKET_SIZE: + socket_option_value = data_packet_size_; + break; + + case GeneralTransportOptions::CONTENT_OBJECT_EXPIRY_TIME: + socket_option_value = content_object_expiry_time_; + break; + + case GeneralTransportOptions::SIGNATURE_TYPE: + socket_option_value = signature_type_; + break; + + default: + return SOCKET_OPTION_NOT_SET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption(int socket_option_key, + bool &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::MAKE_MANIFEST: + socket_option_value = making_manifest_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, std::list &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::NETWORK_NAME: + socket_option_value = served_namespaces_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( int socket_option_key, - ConsumerContentObjectCallback socket_option_value) override; - - int setSocketOption(int socket_option_key, - ConsumerInterestCallback socket_option_value) override; - - int setSocketOption(int socket_option_key, - ConsumerContentCallback socket_option_value) override; - - int setSocketOption(int socket_option_key, - ConsumerManifestCallback socket_option_value) override; - - int setSocketOption(int socket_option_key, IcnObserver *obs) override; - - int setSocketOption(int socket_option_key, - HashAlgorithm socket_option_value) override; - - int setSocketOption(int socket_option_key, - utils::CryptoSuite socket_option_value) override; - - int setSocketOption(int socket_option_key, - const utils::Identity &socket_option_value) override; - - int setSocketOption(int socket_option_key, - const std::string &socket_option_value) override; - - int setSocketOption(int socket_option_key, - ConsumerTimerCallback socket_option_value) override; - - int setSocketOption(int socket_option_key, - ProducerContentCallback socket_option_value) override; - - int getSocketOption(int socket_option_key, - uint32_t &socket_option_value) override; - - int getSocketOption(int socket_option_key, - double &socket_option_value) override; - - int getSocketOption(int socket_option_key, - bool &socket_option_value) override; - - int getSocketOption(int socket_option_key, - Name &socket_option_value) override; - - int getSocketOption(int socket_option_key, - std::list &socket_option_value) override; - - int getSocketOption( - int socket_option_key, - ProducerContentObjectCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ProducerInterestCallback &socket_option_value) override; - - int getSocketOption( + ProducerContentObjectCallback **socket_option_value) { + switch (socket_option_key) { + case ProducerCallbacksOptions::NEW_CONTENT_OBJECT: + *socket_option_value = &on_new_segment_; + break; + + case ProducerCallbacksOptions::CONTENT_OBJECT_SIGN: + *socket_option_value = &on_content_object_to_sign_; + break; + + case ProducerCallbacksOptions::CONTENT_OBJECT_READY: + *socket_option_value = &on_content_object_in_output_buffer_; + break; + + case ProducerCallbacksOptions::CONTENT_OBJECT_OUTPUT: + *socket_option_value = &on_content_object_output_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, ProducerContentCallback **socket_option_value) { + switch (socket_option_key) { + case ProducerCallbacksOptions::CONTENT_PRODUCED: + *socket_option_value = &on_content_produced_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, ProducerInterestCallback **socket_option_value) { + switch (socket_option_key) { + case ProducerCallbacksOptions::INTEREST_INPUT: + *socket_option_value = &on_interest_input_; + break; + + case ProducerCallbacksOptions::INTEREST_DROP: + *socket_option_value = &on_interest_dropped_input_buffer_; + break; + + case ProducerCallbacksOptions::INTEREST_PASS: + *socket_option_value = &on_interest_inserted_input_buffer_; + break; + + case CACHE_HIT: + *socket_option_value = &on_interest_satisfied_output_buffer_; + break; + + case CACHE_MISS: + *socket_option_value = &on_interest_process_; + break; + + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, std::shared_ptr &socket_option_value) { + switch (socket_option_key) { + case PORTAL: + socket_option_value = portal_; + break; + default: + return SOCKET_OPTION_NOT_GET; + ; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, HashAlgorithm &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::HASH_ALGORITHM: + socket_option_value = hash_algorithm_; + break; + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, utils::CryptoSuite &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::HASH_ALGORITHM: + socket_option_value = crypto_suite_; + break; + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( int socket_option_key, - ConsumerContentObjectVerificationCallback &socket_option_value) override; - - int getSocketOption( - int socket_option_key, - ConsumerContentObjectCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ConsumerInterestCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ConsumerContentCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ConsumerManifestCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - std::shared_ptr &socket_option_value) override; - - int getSocketOption(int socket_option_key, - IcnObserver **socket_option_value) override; - - int getSocketOption(int socket_option_key, - HashAlgorithm &socket_option_value) override; - - int getSocketOption(int socket_option_key, - utils::CryptoSuite &socket_option_value) override; - - int getSocketOption(int socket_option_key, - utils::Identity &socket_option_value) override; - - int getSocketOption(int socket_option_key, - std::string &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ProducerContentCallback &socket_option_value) override; - - int getSocketOption(int socket_option_key, - ConsumerTimerCallback &socket_option_value) override; + std::shared_ptr &socket_option_value) { + switch (socket_option_key) { + case GeneralTransportOptions::IDENTITY: + if (identity_) { + socket_option_value = identity_; + break; + } + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } + + TRANSPORT_ALWAYS_INLINE int getSocketOption( + int socket_option_key, std::string &socket_option_value) { + switch (socket_option_key) { + case DataLinkOptions::OUTPUT_INTERFACE: + socket_option_value = output_interface_; + break; + default: + return SOCKET_OPTION_NOT_GET; + } + + return SOCKET_OPTION_GET; + } protected: asio::io_service internal_io_service_; @@ -206,8 +536,6 @@ class ProducerSocket : public Socket, // buffers utils::ContentStore output_buffer_; - std::unique_ptr identity_; - private: utils::EventThread async_thread_; @@ -215,7 +543,8 @@ class ProducerSocket : public Socket, bool making_manifest_; - // map for storing sequence numbers for several calls of the publish function + // map for storing sequence numbers for several calls of the publish + // function std::unordered_map> seq_number_map_; int signature_type_; @@ -223,8 +552,7 @@ class ProducerSocket : public Socket, HashAlgorithm hash_algorithm_; utils::CryptoSuite crypto_suite_; - // std::unique_ptr identity_; - // utils::Signer& signer_; + std::shared_ptr identity_; // buffers @@ -232,11 +560,6 @@ class ProducerSocket : public Socket, std::atomic_size_t input_buffer_capacity_; std::atomic_size_t input_buffer_size_; -#ifndef PUSH_API - std::mutex pending_interests_mtx_; - std::unordered_map> pending_interests_; -#endif - // threads std::thread listening_thread_; std::thread processing_thread_; @@ -268,4 +591,4 @@ class ProducerSocket : public Socket, } // namespace interface -} // end namespace transport +} // namespace transport -- cgit 1.2.3-korg