diff options
Diffstat (limited to 'libtransport/src/hicn/transport/protocols/manifest_indexing_manager.cc')
-rw-r--r-- | libtransport/src/hicn/transport/protocols/manifest_indexing_manager.cc | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/libtransport/src/hicn/transport/protocols/manifest_indexing_manager.cc b/libtransport/src/hicn/transport/protocols/manifest_indexing_manager.cc index 9af6a5c3a..05cabc60d 100644 --- a/libtransport/src/hicn/transport/protocols/manifest_indexing_manager.cc +++ b/libtransport/src/hicn/transport/protocols/manifest_indexing_manager.cc @@ -29,6 +29,7 @@ ManifestIndexManager::ManifestIndexManager( interface::ConsumerSocket *icn_socket, TransportProtocol *next_interest) : IncrementalIndexManager(icn_socket), PacketManager<Interest>(1024), + manifests_in_flight_(0), next_reassembly_segment_(suffix_queue_.end()), next_to_retrieve_segment_(suffix_queue_.end()), suffix_manifest_(core::NextSegmentCalculationStrategy::INCREMENTAL, 0), @@ -86,7 +87,14 @@ bool ManifestIndexManager::onManifest( // Set the iterators to the beginning of the suffix queue next_reassembly_segment_ = suffix_queue_.begin(); // Set number of segments in manifests assuming the first one is full - suffix_manifest_.setNbSegments(std::distance(_it, _end) - 1); + suffix_manifest_.setNbSegments( + std::distance(manifest->getSuffixList().begin(), + manifest->getSuffixList().end()) - + 1); + suffix_manifest_.setSuffixStrategy( + manifest->getNextSegmentCalculationStrategy()); + } else if (manifests_in_flight_) { + manifests_in_flight_--; } if (TRANSPORT_EXPECT_FALSE(manifest->isFinalManifest() || @@ -110,6 +118,10 @@ bool ManifestIndexManager::onManifest( // Manifest namespace Name &name = manifest->getWritableName(); + if (manifests_in_flight_ >= MAX_MANIFESTS_IN_FLIGHT) { + break; + } + // Send as many manifest as required for filling window. do { segment_count += suffix_manifest_.getNbSegments(); @@ -132,8 +144,10 @@ bool ManifestIndexManager::onManifest( std::placeholders::_1, std::placeholders::_2), std::bind(&ManifestIndexManager::onManifestTimeout, this, std::placeholders::_1)); + manifests_in_flight_++; } while (segment_count < current_window_size && - suffix_manifest_.getSuffix() < final_suffix_); + suffix_manifest_.getSuffix() < final_suffix_ && + manifests_in_flight_ < MAX_MANIFESTS_IN_FLIGHT); break; } |