aboutsummaryrefslogtreecommitdiffstats
path: root/libtransport/src/hicn/transport/protocols/protocol.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libtransport/src/hicn/transport/protocols/protocol.cc')
-rw-r--r--libtransport/src/hicn/transport/protocols/protocol.cc52
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