diff options
Diffstat (limited to 'libtransport/src/hicn/transport/core/portal.h')
-rw-r--r-- | libtransport/src/hicn/transport/core/portal.h | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/libtransport/src/hicn/transport/core/portal.h b/libtransport/src/hicn/transport/core/portal.h index 0932b56c6..7efbc2009 100644 --- a/libtransport/src/hicn/transport/core/portal.h +++ b/libtransport/src/hicn/transport/core/portal.h @@ -22,7 +22,7 @@ #include <hicn/transport/core/name.h> #include <hicn/transport/core/pending_interest.h> #include <hicn/transport/core/prefix.h> -#include <hicn/transport/core/socket_connector.h> +#include <hicn/transport/core/udp_socket_connector.h> #include <hicn/transport/errors/errors.h> #include <hicn/transport/portability/portability.h> #include <hicn/transport/utils/log.h> @@ -222,22 +222,25 @@ class Portal { } TRANSPORT_ALWAYS_INLINE void stopEventsLoop(bool kill_connection = false) { - for (auto &pend_interest : pending_interest_hash_table_) { - pend_interest.second->cancelTimer(); - } - - clear(); - if (kill_connection) { - connector_.close(); + forwarder_interface_.closeConnection(); } - io_service_.post([this]() { io_service_.stop(); }); + io_service_.post([this]() { + clear(); + io_service_.stop(); + }); } TRANSPORT_ALWAYS_INLINE void killConnection() { connector_.close(); } - TRANSPORT_ALWAYS_INLINE void clear() { pending_interest_hash_table_.clear(); } + TRANSPORT_ALWAYS_INLINE void clear() { + for (auto &pend_interest : pending_interest_hash_table_) { + pend_interest.second->cancelTimer(); + } + + pending_interest_hash_table_.clear(); + } TRANSPORT_ALWAYS_INLINE asio::io_service &getIoService() { return io_service_; @@ -260,17 +263,16 @@ class Portal { return; } - if (packet_buffer->data()[0] == ForwarderInt::ack_code) { - // Hicn forwarder message + if (TRANSPORT_EXPECT_FALSE( + ForwarderInt::isControlMessage(packet_buffer->data()))) { processControlMessage(std::move(packet_buffer)); return; } - bool is_interest = Packet::isInterest(packet_buffer->data()); Packet::Format format = Packet::getFormatFromBuffer(packet_buffer->data()); if (TRANSPORT_EXPECT_TRUE(_is_tcp(format))) { - if (!is_interest) { + if (!Packet::isInterest(packet_buffer->data())) { processContentObject( ContentObject::Ptr(new ContentObject(std::move(packet_buffer)))); } else { @@ -329,8 +331,7 @@ class Portal { TRANSPORT_ALWAYS_INLINE void processControlMessage( Packet::MemBufPtr &&packet_buffer) { - // Control message as response to the route set by a producer. - // Do nothing + forwarder_interface_.processControlMessageReply(std::move(packet_buffer)); } private: |