aboutsummaryrefslogtreecommitdiffstats
path: root/libtransport/src/hicn/transport/interfaces
diff options
context:
space:
mode:
authorMauro Sardara <msardara@cisco.com>2019-02-04 11:06:18 +0100
committerAlberto Compagno <acompagn+fdio@cisco.com>2019-03-05 09:56:19 +0000
commit6d7704c1b497341fd6dd3c27e3f64d0db062ccc2 (patch)
tree668c6820653cd84da8474d330d2807a8765f96b5 /libtransport/src/hicn/transport/interfaces
parentca66305af16e2f8d8f271218ea71f132e6c21916 (diff)
[HICN-11] Rework on transport protocols improving components modularity
Change-Id: I6683ec5b494238dc93591c103d25275e89b9f267 Signed-off-by: Mauro Sardara <msardara@cisco.com>
Diffstat (limited to 'libtransport/src/hicn/transport/interfaces')
-rw-r--r--libtransport/src/hicn/transport/interfaces/async_transport.h8
-rw-r--r--libtransport/src/hicn/transport/interfaces/full_duplex_socket.cc33
-rw-r--r--libtransport/src/hicn/transport/interfaces/full_duplex_socket.h6
-rw-r--r--libtransport/src/hicn/transport/interfaces/rtc_socket_consumer.cc1
-rw-r--r--libtransport/src/hicn/transport/interfaces/rtc_socket_producer.cc1
-rw-r--r--libtransport/src/hicn/transport/interfaces/socket.h133
-rw-r--r--libtransport/src/hicn/transport/interfaces/socket_consumer.cc604
-rw-r--r--libtransport/src/hicn/transport/interfaces/socket_consumer.h736
-rw-r--r--libtransport/src/hicn/transport/interfaces/socket_options_default_values.h58
-rw-r--r--libtransport/src/hicn/transport/interfaces/socket_options_keys.h27
-rw-r--r--libtransport/src/hicn/transport/interfaces/socket_producer.cc554
-rw-r--r--libtransport/src/hicn/transport/interfaces/socket_producer.h585
12 files changed, 1152 insertions, 1594 deletions
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 <hicn/transport/interfaces/publication_options.h>
+#include <hicn/transport/interfaces/socket.h>
#include <hicn/transport/portability/portability.h>
-#include <hicn/transport/utils/sharable_vector.h>
#ifndef _WIN32
#include <sys/uio.h>
@@ -528,8 +528,7 @@ class AsyncReader {
// virtual void readBufferAvailable(uint8_t** buffer, std::size_t
// *buf_length) noexcept {}
- virtual void readBufferAvailable(
- utils::SharableVector<uint8_t> &&buffer) noexcept {}
+ virtual void readBufferAvailable(ContentBuffer &&buffer) noexcept {}
// virtual void readBufferAvailable(utils::SharableBuffer<uint8_t>&& 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<uint8_t> &&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 <hicn/transport/interfaces/full_duplex_socket.h>
#include <hicn/transport/interfaces/socket_options_default_values.h>
-#include <hicn/transport/utils/sharable_vector.h>
#include <memory>
@@ -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<utils::SharableVector<uint8_t>>()) {
+ 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<uint8_t> &&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<utils::SharableVector<uint8_t>>();
+ 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 <hicn/transport/interfaces/socket_consumer.h>
#include <hicn/transport/interfaces/socket_producer.h>
#include <hicn/transport/portability/portability.h>
-#include <hicn/transport/utils/sharable_vector.h>
#include <unordered_set>
#include <vector>
@@ -136,8 +135,7 @@ class AsyncFullDuplexSocket : public AsyncSocket,
const PublicationOptions &options,
WriteFlags flags = WriteFlags::NONE) override;
- virtual void write(WriteCallback *callback,
- utils::SharableVector<uint8_t> &&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<utils::SharableVector<uint8_t>> 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 <hicn/transport/interfaces/rtc_socket_consumer.h>
+#include <hicn/transport/protocols/rtc.h>
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 <hicn/transport/core/name.h>
#include <hicn/transport/interfaces/socket_options_default_values.h>
#include <hicn/transport/interfaces/socket_options_keys.h>
+#include <hicn/transport/protocols/statistics.h>
#include <hicn/transport/utils/crypto_suite.h>
#include <hicn/transport/utils/identity.h>
#include <hicn/transport/utils/verifier.h>
@@ -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<uint8_t>;
+using ContentBuffer = std::shared_ptr<std::vector<uint8_t>>;
using ConsumerInterestCallback =
std::function<void(ConsumerSocket &, const core::Interest &)>;
@@ -84,9 +87,8 @@ using ConsumerInterestCallback =
using ConsumerContentCallback =
std::function<void(ConsumerSocket &, std::size_t, const std::error_code &)>;
-using ConsumerTimerCallback =
- std::function<void(ConsumerSocket &, std::size_t,
- std::chrono::milliseconds &, float, uint32_t, uint32_t)>;
+using ConsumerTimerCallback = std::function<void(
+ ConsumerSocket &, const protocol::TransportStatistics &stats)>;
using ProducerContentCallback = std::function<void(
ProducerSocket &, const std::error_code &, uint64_t bytes_written)>;
@@ -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<Prefix> 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<Prefix> &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<Portal> &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 <hicn/transport/interfaces/socket_consumer.h>
+#include <hicn/transport/protocols/cbr.h>
+#include <hicn/transport/protocols/raaqm.h>
+#include <hicn/transport/protocols/rtc.h>
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<utils::Verifier>()),
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<VegasTransportProtocol>(this);
- break;
case TransportProtocolAlgorithms::CBR:
transport_protocol_ = std::make_shared<CbrTransportProtocol>(this);
break;
@@ -85,33 +85,31 @@ ConsumerSocket::~ConsumerSocket() {
void ConsumerSocket::connect() { portal_->connect(); }
-int ConsumerSocket::consume(const Name &name,
- utils::SharableVector<uint8_t> &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<utils::SharableVector<uint8_t>> 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<Prefix> 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<Prefix> &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<Portal> &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 <hicn/transport/interfaces/socket.h>
-
-#include <hicn/transport/protocols/cbr.h>
+#include <hicn/transport/interfaces/socket_options_default_values.h>
#include <hicn/transport/protocols/protocol.h>
-#include <hicn/transport/protocols/raaqm.h>
-#include <hicn/transport/protocols/rtc.h>
-#include <hicn/transport/protocols/vegas.h>
-
#include <hicn/transport/utils/event_thread.h>
-#include <hicn/transport/utils/sharable_vector.h>
#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<uint8_t> &receive_buffer);
+ int consume(const Name &name, ContentBuffer &receive_buffer);
- int asyncConsume(
- const Name &name,
- std::shared_ptr<utils::SharableVector<uint8_t>> 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<Prefix> 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<utils::Verifier> &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<std::vector<uint8_t>> &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<Prefix> &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<Portal> &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<utils::Verifier> &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<Portal> &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<std::vector<uint8_t>> &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<TransportProtocol> 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<utils::Verifier> verifier_;
PARCKeyId *key_id_;
bool verify_signature_;
- std::shared_ptr<utils::SharableVector<uint8_t>> 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<Name, std::shared_ptr<const Interest>>::iterator it;
-
- {
- std::lock_guard<std::mutex> 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<std::mutex> 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<Name, std::shared_ptr<const Interest>>::iterator it;
-
- {
- std::lock_guard<std::mutex> 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<std::mutex> 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<uint8_t> &&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<std::mutex> lock(pending_interests_mtx_);
- pending_interests_[interest.getName()] =
- std::static_pointer_cast<const Interest>(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<Prefix> 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<utils::Identity>(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<Prefix> &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<Portal> &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 <hicn/transport/interfaces/socket.h>
#include <hicn/transport/utils/content_store.h>
#include <hicn/transport/utils/event_thread.h>
-#include <hicn/transport/utils/sharable_vector.h>
#include <atomic>
#include <cmath>
@@ -26,8 +25,6 @@
#include <queue>
#include <thread>
-#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<BasePortal>,
void asyncProduce(const Name &suffix, const uint8_t *buf, size_t buffer_size);
- void asyncProduce(const Name &suffix,
- utils::SharableVector<uint8_t> &&output_buffer);
+ void asyncProduce(const Name &suffix, ContentBuffer &&output_buffer);
void asyncProduce(ContentObject &content_object);
@@ -75,125 +71,459 @@ class ProducerSocket : public Socket<BasePortal>,
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<Prefix> 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<Prefix> 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<utils::Identity> &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<Prefix> &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<Prefix> &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<Portal> &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<Portal> &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<utils::Identity> &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<BasePortal>,
// buffers
utils::ContentStore output_buffer_;
- std::unique_ptr<utils::Identity> identity_;
-
private:
utils::EventThread async_thread_;
@@ -215,7 +543,8 @@ class ProducerSocket : public Socket<BasePortal>,
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<Name, std::unordered_map<int, uint32_t>> seq_number_map_;
int signature_type_;
@@ -223,8 +552,7 @@ class ProducerSocket : public Socket<BasePortal>,
HashAlgorithm hash_algorithm_;
utils::CryptoSuite crypto_suite_;
- // std::unique_ptr<utils::Identity> identity_;
- // utils::Signer& signer_;
+ std::shared_ptr<utils::Identity> identity_;
// buffers
@@ -232,11 +560,6 @@ class ProducerSocket : public Socket<BasePortal>,
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<Name, std::shared_ptr<const Interest>> pending_interests_;
-#endif
-
// threads
std::thread listening_thread_;
std::thread processing_thread_;
@@ -268,4 +591,4 @@ class ProducerSocket : public Socket<BasePortal>,
} // namespace interface
-} // end namespace transport
+} // namespace transport