diff options
author | Angelo Mantellini <angelo.mantellini@cisco.com> | 2020-02-27 16:06:50 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@fd.io> | 2020-02-27 16:06:50 +0000 |
commit | ee91ccd88a2fe1de74e4128ef84840e58ec70295 (patch) | |
tree | 9a435acaee53a8d455b1c1f8212f20ffb9a4de70 /libtransport/src | |
parent | 0fe06328d8bb8a174f0e9a246b437e5eaf2a7628 (diff) | |
parent | 443f9e81c2f721898c1e7edf2940172fef6f55fe (diff) |
Merge "[HICN-539] Expose portal APIs to applications"
Diffstat (limited to 'libtransport/src')
-rw-r--r-- | libtransport/src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | libtransport/src/core/pending_interest.h | 7 | ||||
-rw-r--r-- | libtransport/src/core/portal.h | 54 | ||||
-rw-r--r-- | libtransport/src/implementation/socket_producer.h | 2 | ||||
-rw-r--r-- | libtransport/src/interfaces/CMakeLists.txt | 1 | ||||
-rw-r--r-- | libtransport/src/interfaces/portal.cc | 100 | ||||
-rw-r--r-- | libtransport/src/protocols/protocol.h | 13 |
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_; |