28 #ifndef NDN_UTIL_SEGMENT_FETCHER_HPP 29 #define NDN_UTIL_SEGMENT_FETCHER_HPP 163 static shared_ptr<SegmentFetcher>
178 class PendingSegment;
183 shouldStop(
const weak_ptr<SegmentFetcher>& weakSelf);
186 fetchFirstSegment(
const Interest& baseInterest,
bool isRetransmission);
189 fetchSegmentsInWindow(
const Interest& origInterest);
192 sendInterest(uint64_t segNum,
const Interest& interest,
bool isRetransmission);
195 afterSegmentReceivedCb(
const Interest& origInterest,
const Data& data,
196 const weak_ptr<SegmentFetcher>& weakSelf);
199 afterValidationSuccess(
const Data& data,
const Interest& origInterest,
200 std::map<uint64_t, PendingSegment>::iterator pendingSegmentIt,
201 const weak_ptr<SegmentFetcher>& weakSelf);
204 afterValidationFailure(
const Data& data,
206 const weak_ptr<SegmentFetcher>& weakSelf);
210 const weak_ptr<SegmentFetcher>& weakSelf);
213 afterTimeoutCb(
const Interest& origInterest,
214 const weak_ptr<SegmentFetcher>& weakSelf);
217 afterNackOrTimeout(
const Interest& origInterest);
229 signalError(uint32_t code,
const std::string& msg);
232 updateRetransmittedSegment(uint64_t segmentNum,
237 cancelExcessInFlightSegments();
240 checkAllSegmentsReceived();
279 enum class SegmentState {
295 static constexpr
double MIN_SSTHRESH = 2.0;
297 shared_ptr<SegmentFetcher> m_this;
304 time::milliseconds m_timeout;
307 std::queue<uint64_t> m_retxQueue;
308 Name m_versionedDataName;
309 uint64_t m_nextSegmentNum;
312 int64_t m_nSegmentsInFlight;
314 uint64_t m_highInterest;
318 int64_t m_nBytesReceived;
320 std::map<uint64_t, Buffer> m_receivedSegments;
321 std::map<uint64_t, PendingSegment> m_pendingSegments;
327 #endif // NDN_UTIL_SEGMENT_FETCHER_HPP
time::milliseconds interestLifetime
lifetime of sent Interests - independent of Interest timeout
An unrecoverable Nack was received during retrieval.
double mdCoef
multiplicative decrease coefficient
Signal< SegmentFetcher, ConstBufferPtr > onComplete
Emits upon successful retrieval of the complete data.
time::milliseconds maxTimeout
maximum allowed time between successful receipt of segments
bool useConstantInterestTimeout
if true, Interest timeout is kept at maxTimeout
Utility class to fetch the latest version of a segmented object.
Represents an Interest packet.
provides a lightweight signal / event system
void stop()
Stops fetching.
A handle for a scheduled event.
represents a Network Nack
double aiStep
additive increase step (in segments)
bool disableCwa
disable Conservative Window Adaptation
One of the retrieved segments failed user-provided validation.
ErrorCode
Error codes passed to onError.
A handle of pending Interest.
static shared_ptr< SegmentFetcher > start(Face &face, const Interest &baseInterest, security::v2::Validator &validator, const Options &options=Options())
Initiates segment fetching.
Signal< SegmentFetcher > afterSegmentNacked
Emits whenever an Interest for a data segment is nacked.
Provide a communication channel with local or remote NDN forwarder.
Signal< SegmentFetcher, Data > afterSegmentValidated
Emits whenever a received data segment has been successfully validated.
Retrieval timed out because the maximum timeout between the successful receipt of segments was exceed...
#define NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PRIVATE
One of the retrieved Data packets lacked a segment number in the last Name component (excl...
Represents an absolute name.
double initSsthresh
initial slow start threshold
Generic time-based scheduler.
double initCwnd
initial congestion window size
bool ignoreCongMarks
disable window decrease after congestion mark received
bool resetCwndToInit
reduce cwnd to initCwnd when loss event occurs
Signal< SegmentFetcher, Data > afterSegmentReceived
Emits whenever a data segment received.
Signal< SegmentFetcher > afterSegmentTimedOut
Emits whenever an Interest for a data segment times out.
RttEstimator::Options rttOptions
options for RTT estimator
Validation error code and optional detailed error message.
Signal< SegmentFetcher, uint32_t, std::string > onError
Emits when the retrieval could not be completed due to an error.
Represents a Data packet.
A received FinalBlockId did not contain a segment component.
bool useConstantCwnd
if true, window size is kept at initCwnd
Interface for validating data and interest packets.