Utility class to fetch a versioned and segmented object. More...
#include <ndn-cxx/util/segment-fetcher.hpp>
Public Types | |
enum | ErrorCode { INTEREST_TIMEOUT = 1 , DATA_HAS_NO_SEGMENT = 2 , SEGMENT_VALIDATION_FAIL = 3 , NACK_ERROR = 4 , FINALBLOCKID_NOT_SEGMENT = 5 } |
Error codes passed to onError. More... | |
using | Options = SegmentFetcherOptions |
Public Member Functions | |
void | stop () |
Stops fetching. More... | |
Static Public Member Functions | |
static shared_ptr< SegmentFetcher > | start (Face &face, const Interest &baseInterest, security::Validator &validator, const Options &options={}) |
Initiates segment fetching. More... | |
Public Attributes | |
signal::Signal< SegmentFetcher > | afterSegmentNacked |
Emitted whenever an Interest for a data segment is nacked. More... | |
signal::Signal< SegmentFetcher, Data > | afterSegmentReceived |
Emitted whenever a data segment received. More... | |
signal::Signal< SegmentFetcher > | afterSegmentTimedOut |
Emitted whenever an Interest for a data segment times out. More... | |
signal::Signal< SegmentFetcher, Data > | afterSegmentValidated |
Emitted whenever a received data segment has been successfully validated. More... | |
signal::Signal< SegmentFetcher, ConstBufferPtr > | onComplete |
Emitted upon successful retrieval of the complete object (all segments). More... | |
signal::Signal< SegmentFetcher, uint32_t, std::string > | onError |
Emitted when the retrieval could not be completed due to an error. More... | |
signal::Signal< SegmentFetcher > | onInOrderComplete |
Emitted on successful retrieval of all segments in 'in order' mode. More... | |
signal::Signal< SegmentFetcher, ConstBufferPtr > | onInOrderData |
Emitted after each data segment in segment order has been validated. More... | |
Utility class to fetch a versioned and segmented object.
SegmentFetcher assumes that segments in the object are named /<prefix>/<version>/<segment>
, where:
<prefix>
is an arbitrary name prefix;<version>
is the version number (VersionNameComponent);<segment>
is the segment number (SegmentNameComponent).The number of segments in the object is generally unknown until a Data packet containing a FinalBlockId
field is received and validated.
The version can either be provided by the application or be discovered at the beginning of the fetching process. By default, SegmentFetcher will attempt to probe the latest version of the object by requesting only "fresh" segments during the initial discovery phase. This behavior can be turned off by setting Options::probeLatestVersion to false.
SegmentFetcher implements the following logic:
<version>
component and requires probing the latest version of the object, an Interest with CanBePrefix and MustBeFresh is sent to discover a fresh version. Otherwise, only CanBePrefix is set.version = data.getName().get(-2).toVersion()
./<prefix>/<version>/<segment=(N)>
.If an error occurs during the fetching process, onError is signaled with one of the error codes from SegmentFetcher::ErrorCode.
A Validator instance must be specified to validate individual segments. Every time a segment has been successfully validated, afterSegmentValidated will be signaled.
Example:
Definition at line 126 of file segment-fetcher.hpp.
Definition at line 145 of file segment-fetcher.hpp.
Error codes passed to onError.
Enumerator | |
---|---|
INTEREST_TIMEOUT | Retrieval timed out because the maximum timeout between the successful receipt of segments was exceeded. |
DATA_HAS_NO_SEGMENT | One of the retrieved Data packets lacked a segment number in the last Name component (excl. implicit digest) |
SEGMENT_VALIDATION_FAIL | One of the retrieved segments failed user-provided validation. |
NACK_ERROR | An unrecoverable Nack was received during retrieval. |
FINALBLOCKID_NOT_SEGMENT | A received FinalBlockId did not contain a segment component. |
Definition at line 132 of file segment-fetcher.hpp.
|
static |
Initiates segment fetching.
Transfer completion, failure, and progress are indicated via signals.
face | Reference to the Face that should be used to fetch data. |
baseInterest | Interest for the initial segment of requested data. This Interest may include certain fields, such as ForwardingHint, that will propagate to all subsequent Interests sent by this SegmentFetcher. As a special case, the initial Interest will be forced to include the CanBePrefix field, which will not be included in subsequent Interests. If Options::probeLatestVersion is true, the initial Interest will also be forced to include the MustBeFresh field, while all subsequent Interests will not include it. |
validator | Reference to the Validator the fetcher will use to validate data. The caller must ensure the validator remains valid until either onComplete or onError has been signaled. |
options | Options controlling the transfer. |
Definition at line 76 of file segment-fetcher.cpp.
void ndn::SegmentFetcher::stop | ( | ) |
Stops fetching.
This cancels all interests that are still pending.
Definition at line 88 of file segment-fetcher.cpp.
signal::Signal<SegmentFetcher> ndn::SegmentFetcher::afterSegmentNacked |
Emitted whenever an Interest for a data segment is nacked.
Definition at line 278 of file segment-fetcher.hpp.
signal::Signal<SegmentFetcher, Data> ndn::SegmentFetcher::afterSegmentReceived |
Emitted whenever a data segment received.
Definition at line 268 of file segment-fetcher.hpp.
signal::Signal<SegmentFetcher> ndn::SegmentFetcher::afterSegmentTimedOut |
Emitted whenever an Interest for a data segment times out.
Definition at line 283 of file segment-fetcher.hpp.
signal::Signal<SegmentFetcher, Data> ndn::SegmentFetcher::afterSegmentValidated |
Emitted whenever a received data segment has been successfully validated.
Definition at line 273 of file segment-fetcher.hpp.
signal::Signal<SegmentFetcher, ConstBufferPtr> ndn::SegmentFetcher::onComplete |
Emitted upon successful retrieval of the complete object (all segments).
Definition at line 256 of file segment-fetcher.hpp.
signal::Signal<SegmentFetcher, uint32_t, std::string> ndn::SegmentFetcher::onError |
Emitted when the retrieval could not be completed due to an error.
Handlers are provided with an error code and a string error message.
Definition at line 263 of file segment-fetcher.hpp.
signal::Signal<SegmentFetcher> ndn::SegmentFetcher::onInOrderComplete |
Emitted on successful retrieval of all segments in 'in order' mode.
Definition at line 295 of file segment-fetcher.hpp.
signal::Signal<SegmentFetcher, ConstBufferPtr> ndn::SegmentFetcher::onInOrderData |
Emitted after each data segment in segment order has been validated.
Definition at line 289 of file segment-fetcher.hpp.