aboutsummaryrefslogtreecommitdiffstats
path: root/libtransport/src
diff options
context:
space:
mode:
authorAngelo Mantellini <angelo.mantellini@cisco.com>2020-02-27 16:06:50 +0000
committerGerrit Code Review <gerrit@fd.io>2020-02-27 16:06:50 +0000
commitee91ccd88a2fe1de74e4128ef84840e58ec70295 (patch)
tree9a435acaee53a8d455b1c1f8212f20ffb9a4de70 /libtransport/src
parent0fe06328d8bb8a174f0e9a246b437e5eaf2a7628 (diff)
parent443f9e81c2f721898c1e7edf2940172fef6f55fe (diff)
Merge "[HICN-539] Expose portal APIs to applications"
Diffstat (limited to 'libtransport/src')
-rw-r--r--libtransport/src/CMakeLists.txt1
-rw-r--r--libtransport/src/core/pending_interest.h7
-rw-r--r--libtransport/src/core/portal.h54
-rw-r--r--libtransport/src/implementation/socket_producer.h2
-rw-r--r--libtransport/src/interfaces/CMakeLists.txt1
-rw-r--r--libtransport/src/interfaces/portal.cc100
-rw-r--r--libtransport/src/protocols/protocol.h13
7 files changed, 118 insertions, 60 deletions
diff --git a/libtransport/src/CMakeLists.txt b/libtransport/src/CMakeLists.txt
index a182998e3..c92393775 100644
--- a/libtransport/src/CMakeLists.txt
+++ b/libtransport/src/CMakeLists.txt
@@ -42,7 +42,6 @@ list(INSERT LIBTRANSPORT_INTERNAL_INCLUDE_DIRS 0
)
set(LIBTRANSPORT_INCLUDE_DIRS
- ${CMAKE_CURRENT_BINARY_DIR}
${LIBTRANSPORT_INCLUDE_DIRS}
"" CACHE INTERNAL
"" FORCE
diff --git a/libtransport/src/core/pending_interest.h b/libtransport/src/core/pending_interest.h
index 87fed5073..d9ec2ed40 100644
--- a/libtransport/src/core/pending_interest.h
+++ b/libtransport/src/core/pending_interest.h
@@ -19,6 +19,7 @@
#include <hicn/transport/core/content_object.h>
#include <hicn/transport/core/interest.h>
#include <hicn/transport/core/name.h>
+#include <hicn/transport/interfaces/portal.h>
#include <hicn/transport/portability/portability.h>
#include <utils/deadline_timer.h>
@@ -36,10 +37,8 @@ class RawSocketInterface;
template <typename ForwarderInt>
class Portal;
-typedef std::function<void(Interest::Ptr &&, ContentObject::Ptr &&)>
- OnContentObjectCallback;
-typedef std::function<void(Interest::Ptr &&)> OnInterestTimeoutCallback;
-typedef std::function<void(const std::error_code &)> TimerCallback;
+using OnContentObjectCallback = interface::Portal::OnContentObjectCallback;
+using OnInterestTimeoutCallback = interface::Portal::OnInterestTimeoutCallback;
class PendingInterest {
friend class Portal<HicnForwarderInterface>;
diff --git a/libtransport/src/core/portal.h b/libtransport/src/core/portal.h
index d7c463dfd..cf1010068 100644
--- a/libtransport/src/core/portal.h
+++ b/libtransport/src/core/portal.h
@@ -21,6 +21,7 @@
#include <hicn/transport/core/name.h>
#include <hicn/transport/core/prefix.h>
#include <hicn/transport/errors/errors.h>
+#include <hicn/transport/interfaces/portal.h>
#include <hicn/transport/portability/portability.h>
#include <hicn/transport/utils/log.h>
@@ -39,8 +40,6 @@
#include <queue>
#include <unordered_map>
-#define UNSET_CALLBACK 0
-
namespace transport {
namespace core {
@@ -230,36 +229,7 @@ class Pool {
using PendingInterestHashTable =
std::unordered_map<uint32_t, PendingInterest::Ptr>;
-template <typename PrefixType>
-class BasicBindConfig {
- static_assert(std::is_same<Prefix, PrefixType>::value,
- "Prefix must be a Prefix type.");
-
- const uint32_t standard_cs_reserved = 5000;
-
- public:
- template <typename T>
- BasicBindConfig(T &&prefix)
- : prefix_(std::forward<T &&>(prefix)),
- content_store_reserved_(standard_cs_reserved) {}
-
- template <typename T>
- BasicBindConfig(T &&prefix, uint32_t cs_reserved)
- : prefix_(std::forward<T &&>(prefix)),
- content_store_reserved_(cs_reserved) {}
-
- TRANSPORT_ALWAYS_INLINE const PrefixType &prefix() const { return prefix_; }
-
- TRANSPORT_ALWAYS_INLINE uint32_t csReserved() const {
- return content_store_reserved_;
- }
-
- private:
- PrefixType prefix_;
- uint32_t content_store_reserved_;
-};
-
-using BindConfig = BasicBindConfig<Prefix>;
+using interface::BindConfig;
/**
* Portal is a opaque class which is used for sending/receiving interest/data
@@ -290,24 +260,8 @@ class Portal {
"ForwarderInt must inherit from ForwarderInterface!");
public:
- /**
- * Consumer callback is an abstract class containing two methods to be
- * implemented by a consumer application.
- */
- class ConsumerCallback {
- public:
- virtual void onContentObject(Interest::Ptr &&i, ContentObject::Ptr &&c) = 0;
- virtual void onTimeout(Interest::Ptr &&i) = 0;
- };
-
- /**
- * Producer callback is an abstract class containing two methods to be
- * implemented by a producer application.
- */
- class ProducerCallback {
- public:
- virtual void onInterest(Interest::Ptr &&i) = 0;
- };
+ using ConsumerCallback = interface::Portal::ConsumerCallback;
+ using ProducerCallback = interface::Portal::ProducerCallback;
Portal() : Portal(internal_io_service_) {}
diff --git a/libtransport/src/implementation/socket_producer.h b/libtransport/src/implementation/socket_producer.h
index 54fca4fdf..d4a239cf6 100644
--- a/libtransport/src/implementation/socket_producer.h
+++ b/libtransport/src/implementation/socket_producer.h
@@ -426,6 +426,8 @@ class ProducerSocket : public Socket<BasePortal>,
onInterest(*interest);
};
+ virtual void onError(std::error_code ec) override {}
+
virtual int setSocketOption(int socket_option_key,
uint32_t socket_option_value) {
switch (socket_option_key) {
diff --git a/libtransport/src/interfaces/CMakeLists.txt b/libtransport/src/interfaces/CMakeLists.txt
index daf4b31e5..e1d144596 100644
--- a/libtransport/src/interfaces/CMakeLists.txt
+++ b/libtransport/src/interfaces/CMakeLists.txt
@@ -17,6 +17,7 @@ list(APPEND SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/rtc_socket_producer.cc
${CMAKE_CURRENT_SOURCE_DIR}/socket_producer.cc
${CMAKE_CURRENT_SOURCE_DIR}/socket_consumer.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/portal.cc
${CMAKE_CURRENT_SOURCE_DIR}/callbacks.cc
)
diff --git a/libtransport/src/interfaces/portal.cc b/libtransport/src/interfaces/portal.cc
new file mode 100644
index 000000000..36cbd0c3b
--- /dev/null
+++ b/libtransport/src/interfaces/portal.cc
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2020 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <hicn/transport/interfaces/portal.h>
+
+#include <implementation/socket.h>
+
+namespace transport {
+namespace interface {
+
+using implementation::BasePortal;
+
+Portal::Portal() { implementation_ = new implementation::BasePortal(); }
+
+Portal::Portal(asio::io_service &io_service) {
+ implementation_ = new BasePortal(io_service);
+}
+
+Portal::~Portal() { delete reinterpret_cast<BasePortal *>(implementation_); }
+
+void Portal::setConsumerCallback(ConsumerCallback *consumer_callback) {
+ reinterpret_cast<BasePortal *>(implementation_)
+ ->setConsumerCallback(consumer_callback);
+}
+
+void Portal::setProducerCallback(ProducerCallback *producer_callback) {
+ reinterpret_cast<BasePortal *>(implementation_)
+ ->setProducerCallback(producer_callback);
+}
+
+void Portal::connect(bool is_consumer) {
+ reinterpret_cast<BasePortal *>(implementation_)->connect(is_consumer);
+}
+
+bool Portal::interestIsPending(const core::Name &name) {
+ return reinterpret_cast<BasePortal *>(implementation_)
+ ->interestIsPending(name);
+}
+
+void Portal::sendInterest(
+ core::Interest::Ptr &&interest,
+ OnContentObjectCallback &&on_content_object_callback,
+ OnInterestTimeoutCallback &&on_interest_timeout_callback) {
+ reinterpret_cast<BasePortal *>(implementation_)
+ ->sendInterest(std::move(interest), std::move(on_content_object_callback),
+ std::move(on_interest_timeout_callback));
+}
+
+void Portal::bind(const BindConfig &config) {
+ reinterpret_cast<BasePortal *>(implementation_)->bind(config);
+}
+
+void Portal::runEventsLoop() {
+ reinterpret_cast<BasePortal *>(implementation_)->runEventsLoop();
+}
+
+void Portal::runOneEvent() {
+ reinterpret_cast<BasePortal *>(implementation_)->runOneEvent();
+}
+
+void Portal::sendContentObject(core::ContentObject &content_object) {
+ reinterpret_cast<BasePortal *>(implementation_)
+ ->sendContentObject(content_object);
+}
+
+void Portal::stopEventsLoop() {
+ reinterpret_cast<BasePortal *>(implementation_)->stopEventsLoop();
+}
+
+void Portal::killConnection() {
+ reinterpret_cast<BasePortal *>(implementation_)->killConnection();
+}
+
+void Portal::clear() {
+ reinterpret_cast<BasePortal *>(implementation_)->clear();
+}
+
+asio::io_service &Portal::getIoService() {
+ return reinterpret_cast<BasePortal *>(implementation_)->getIoService();
+}
+
+void Portal::registerRoute(core::Prefix &prefix) {
+ reinterpret_cast<BasePortal *>(implementation_)->registerRoute(prefix);
+}
+
+} // namespace interface
+
+} // namespace transport \ No newline at end of file
diff --git a/libtransport/src/protocols/protocol.h b/libtransport/src/protocols/protocol.h
index c094adaae..949380959 100644
--- a/libtransport/src/protocols/protocol.h
+++ b/libtransport/src/protocols/protocol.h
@@ -67,15 +67,18 @@ class TransportProtocol : public implementation::BasePortal::ConsumerCallback,
// Events generated by the indexing
virtual void onContentReassembled(std::error_code ec);
- virtual void onPacketDropped(Interest::Ptr &&interest,
- ContentObject::Ptr &&content_object) = 0;
- virtual void onReassemblyFailed(std::uint32_t missing_segment) = 0;
+ virtual void onPacketDropped(
+ Interest::Ptr &&interest,
+ ContentObject::Ptr &&content_object) override = 0;
+ virtual void onReassemblyFailed(std::uint32_t missing_segment) override = 0;
protected:
// Consumer Callback
virtual void reset() = 0;
- virtual void onContentObject(Interest::Ptr &&i, ContentObject::Ptr &&c) = 0;
- virtual void onTimeout(Interest::Ptr &&i) = 0;
+ virtual void onContentObject(Interest::Ptr &&i,
+ ContentObject::Ptr &&c) override = 0;
+ virtual void onTimeout(Interest::Ptr &&i) override = 0;
+ virtual void onError(std::error_code ec) override {}
protected:
implementation::ConsumerSocket *socket_;