diff options
Diffstat (limited to 'libtransport/src/hicn/transport/protocols/protocol.cc')
-rw-r--r-- | libtransport/src/hicn/transport/protocols/protocol.cc | 52 |
1 files changed, 39 insertions, 13 deletions
diff --git a/libtransport/src/hicn/transport/protocols/protocol.cc b/libtransport/src/hicn/transport/protocols/protocol.cc index ea4fd6dbf..9caa2eca7 100644 --- a/libtransport/src/hicn/transport/protocols/protocol.cc +++ b/libtransport/src/hicn/transport/protocols/protocol.cc @@ -20,24 +20,50 @@ namespace transport { namespace protocol { -TransportProtocol::TransportProtocol(interface::BaseSocket *icn_socket) - : socket_(dynamic_cast<interface::ConsumerSocket *>(icn_socket)), - is_running_(false), - interest_pool_() { - // Create pool of interests - increasePoolSize(); +using namespace interface; + +TransportProtocol::TransportProtocol(interface::ConsumerSocket *icn_socket) + : socket_(icn_socket), is_running_(false) { + socket_->getSocketOption(GeneralTransportOptions::PORTAL, portal_); +} + +int TransportProtocol::start() { + // If the protocol is already running, return + if (is_running_) return -1; + + // Set the protocol as running + is_running_ = true; + + // Reset the protocol state machine + reset(); + + // Schedule next interests + scheduleNextInterests(); + + // Start Event loop + portal_->runEventsLoop(); + + // Not running anymore + is_running_ = false; + + return 0; } -TransportProtocol::~TransportProtocol() {} +void TransportProtocol::stop() { + is_running_ = false; + portal_->stopEventsLoop(); +} + +void TransportProtocol::resume() { + if (is_running_) return; + + is_running_ = true; -void TransportProtocol::updatePortal() { portal_ = socket_->portal_; } + scheduleNextInterests(); -bool TransportProtocol::isRunning() { return is_running_; } + portal_->runEventsLoop(); -void TransportProtocol::increasePoolSize(std::size_t size) { - for (std::size_t i = 0; i < size; i++) { - interest_pool_.add(new Interest()); - } + is_running_ = false; } } // end namespace protocol |