libzypp  17.31.31
zyppng::CurlMultiPartHandler Class Reference

The CurlMultiPartHandler class. More...

#include </home/abuild/rpmbuild/BUILD/libzypp-17.31.31/zypp-curl/ng/network/curlmultiparthandler.h>

Inheritance diagram for zyppng::CurlMultiPartHandler:

Classes

struct  Range
 

Public Types

enum  ProtocolMode { ProtocolMode::Basic, ProtocolMode::HTTP }
 
enum  State { Pending, Running, Finished, Error }
 
using CheckSumBytes = UByteArray
 
using Code = NetworkRequestError::Type
 

Public Member Functions

 CurlMultiPartHandler (ProtocolMode mode, void *easyHandle, std::vector< Range > &ranges, CurlMultiPartDataReceiver &receiver)
 
 ~CurlMultiPartHandler ()
 
void * easyHandle () const
 
bool canRecover () const
 
bool hasMoreWork () const
 
bool hasError () const
 
Code lastError () const
 
const std::string & lastErrorMessage () const
 
bool validateRange (Range &rng)
 
bool prepare ()
 
bool prepareToContinue ()
 
void finalize ()
 
bool verifyData ()
 
std::optional< size_t > reportedFileSize () const
 
std::optional< off_t > currentRange () const
 

Static Public Attributes

static constexpr unsigned _rangeAttempt []
 
static constexpr unsigned _rangeAttemptSize = ( sizeof( _rangeAttempt ) / sizeof(unsigned) )
 

Private Member Functions

void setCode (Code c, std::string msg, bool force=false)
 
size_t hdrcallback (char *ptr, size_t size, size_t nmemb)
 
size_t wrtcallback (char *ptr, size_t size, size_t nmemb)
 
bool parseContentRangeHeader (const std::string_view &line, size_t &start, size_t &len, size_t &fileLen)
 
bool parseContentTypeMultiRangeHeader (const std::string_view &line, std::string &boundary)
 
bool checkIfRangeChkSumIsValid (Range &rng)
 
void setRangeState (Range &rng, State state)
 

Static Private Member Functions

static size_t curl_hdrcallback (char *ptr, size_t size, size_t nmemb, void *userdata)
 
static size_t curl_wrtcallback (char *ptr, size_t size, size_t nmemb, void *userdata)
 

Private Attributes

ProtocolMode _protocolMode = ProtocolMode::HTTP
 
void * _easyHandle = nullptr
 
CurlMultiPartDataReceiver_receiver
 
Code _lastCode = Code::NoError
 
std::string _lastErrorMsg
 
bool _allHeadersReceived = false
 
bool _gotContentRangeInfo = false
 
bool _isMuliPartResponse = false
 
std::string _seperatorString
 The seperator string for multipart responses as defined in RFC 7233 Section 4.1. More...
 
std::vector< char > _rangePrefaceBuffer
 Here we buffer. More...
 
std::optional< off_t > _currentRange
 
std::optional< Range_currentSrvRange
 
std::optional< size_t > _reportedFileSize
 Filesize as reported by the content range or byte range headers. More...
 
unsigned _rangeAttemptIdx = 0
 
std::vector< Range > & _requestedRanges
 the requested ranges that need to be downloaded More...
 

Detailed Description

The CurlMultiPartHandler class.

multirange support for HTTP requests (https://tools.ietf.org/html/rfc7233), if not operating on a HTTP/HTTPS URL this will batch multirange requests one by one, so maybe don't use it there

Definition at line 63 of file curlmultiparthandler.h.

Member Typedef Documentation

◆ CheckSumBytes

Definition at line 95 of file curlmultiparthandler.h.

◆ Code

Member Enumeration Documentation

◆ ProtocolMode

Enumerator
Basic 
HTTP 

Definition at line 67 of file curlmultiparthandler.h.

◆ State

Enumerator
Pending 
Running 
Finished 
Error 

Definition at line 88 of file curlmultiparthandler.h.

Constructor & Destructor Documentation

◆ CurlMultiPartHandler()

zyppng::CurlMultiPartHandler::CurlMultiPartHandler ( ProtocolMode  mode,
void *  easyHandle,
std::vector< Range > &  ranges,
CurlMultiPartDataReceiver receiver 
)

Definition at line 88 of file curlmultiparthandler.cc.

◆ ~CurlMultiPartHandler()

zyppng::CurlMultiPartHandler::~CurlMultiPartHandler ( )

Definition at line 101 of file curlmultiparthandler.cc.

Member Function Documentation

◆ easyHandle()

void * zyppng::CurlMultiPartHandler::easyHandle ( ) const

Definition at line 421 of file curlmultiparthandler.cc.

◆ canRecover()

bool zyppng::CurlMultiPartHandler::canRecover ( ) const

Definition at line 426 of file curlmultiparthandler.cc.

◆ hasMoreWork()

bool zyppng::CurlMultiPartHandler::hasMoreWork ( ) const

Definition at line 436 of file curlmultiparthandler.cc.

◆ hasError()

bool zyppng::CurlMultiPartHandler::hasError ( ) const

Definition at line 442 of file curlmultiparthandler.cc.

◆ lastError()

CurlMultiPartHandler::Code zyppng::CurlMultiPartHandler::lastError ( ) const

Definition at line 447 of file curlmultiparthandler.cc.

◆ lastErrorMessage()

const std::string & zyppng::CurlMultiPartHandler::lastErrorMessage ( ) const

Definition at line 452 of file curlmultiparthandler.cc.

◆ validateRange()

bool zyppng::CurlMultiPartHandler::validateRange ( Range rng)

Definition at line 672 of file curlmultiparthandler.cc.

◆ prepare()

bool zyppng::CurlMultiPartHandler::prepare ( )

Definition at line 508 of file curlmultiparthandler.cc.

◆ prepareToContinue()

bool zyppng::CurlMultiPartHandler::prepareToContinue ( )

Definition at line 457 of file curlmultiparthandler.cc.

◆ finalize()

void zyppng::CurlMultiPartHandler::finalize ( )

Definition at line 476 of file curlmultiparthandler.cc.

◆ verifyData()

bool zyppng::CurlMultiPartHandler::verifyData ( )

Definition at line 488 of file curlmultiparthandler.cc.

◆ reportedFileSize()

std::optional< size_t > zyppng::CurlMultiPartHandler::reportedFileSize ( ) const

Definition at line 720 of file curlmultiparthandler.cc.

◆ currentRange()

std::optional< off_t > zyppng::CurlMultiPartHandler::currentRange ( ) const

Definition at line 715 of file curlmultiparthandler.cc.

◆ setCode()

void zyppng::CurlMultiPartHandler::setCode ( Code  c,
std::string  msg,
bool  force = false 
)
private

Definition at line 629 of file curlmultiparthandler.cc.

◆ curl_hdrcallback()

size_t zyppng::CurlMultiPartHandler::curl_hdrcallback ( char *  ptr,
size_t  size,
size_t  nmemb,
void *  userdata 
)
staticprivate

Definition at line 33 of file curlmultiparthandler.cc.

◆ curl_wrtcallback()

size_t zyppng::CurlMultiPartHandler::curl_wrtcallback ( char *  ptr,
size_t  size,
size_t  nmemb,
void *  userdata 
)
staticprivate

Definition at line 42 of file curlmultiparthandler.cc.

◆ hdrcallback()

size_t zyppng::CurlMultiPartHandler::hdrcallback ( char *  ptr,
size_t  size,
size_t  nmemb 
)
private

Definition at line 111 of file curlmultiparthandler.cc.

◆ wrtcallback()

size_t zyppng::CurlMultiPartHandler::wrtcallback ( char *  ptr,
size_t  size,
size_t  nmemb 
)
private

Definition at line 190 of file curlmultiparthandler.cc.

◆ parseContentRangeHeader()

bool zyppng::CurlMultiPartHandler::parseContentRangeHeader ( const std::string_view &  line,
size_t &  start,
size_t &  len,
size_t &  fileLen 
)
private

Definition at line 639 of file curlmultiparthandler.cc.

◆ parseContentTypeMultiRangeHeader()

bool zyppng::CurlMultiPartHandler::parseContentTypeMultiRangeHeader ( const std::string_view &  line,
std::string &  boundary 
)
private

Definition at line 658 of file curlmultiparthandler.cc.

◆ checkIfRangeChkSumIsValid()

bool zyppng::CurlMultiPartHandler::checkIfRangeChkSumIsValid ( Range rng)
private

Definition at line 688 of file curlmultiparthandler.cc.

◆ setRangeState()

void zyppng::CurlMultiPartHandler::setRangeState ( Range rng,
State  state 
)
private

Definition at line 708 of file curlmultiparthandler.cc.

Member Data Documentation

◆ _rangeAttempt

constexpr unsigned zyppng::CurlMultiPartHandler::_rangeAttempt[]
static
Initial value:
= {
255,
127,
63,
15,
5,
1
}

Definition at line 77 of file curlmultiparthandler.h.

◆ _rangeAttemptSize

constexpr unsigned zyppng::CurlMultiPartHandler::_rangeAttemptSize = ( sizeof( _rangeAttempt ) / sizeof(unsigned) )
static

Definition at line 86 of file curlmultiparthandler.h.

◆ _protocolMode

ProtocolMode zyppng::CurlMultiPartHandler::_protocolMode = ProtocolMode::HTTP
private

Definition at line 160 of file curlmultiparthandler.h.

◆ _easyHandle

void* zyppng::CurlMultiPartHandler::_easyHandle = nullptr
private

Definition at line 161 of file curlmultiparthandler.h.

◆ _receiver

CurlMultiPartDataReceiver& zyppng::CurlMultiPartHandler::_receiver
private

Definition at line 162 of file curlmultiparthandler.h.

◆ _lastCode

Code zyppng::CurlMultiPartHandler::_lastCode = Code::NoError
private

Definition at line 164 of file curlmultiparthandler.h.

◆ _lastErrorMsg

std::string zyppng::CurlMultiPartHandler::_lastErrorMsg
private

Definition at line 165 of file curlmultiparthandler.h.

◆ _allHeadersReceived

bool zyppng::CurlMultiPartHandler::_allHeadersReceived = false
private

Definition at line 167 of file curlmultiparthandler.h.

◆ _gotContentRangeInfo

bool zyppng::CurlMultiPartHandler::_gotContentRangeInfo = false
private

Definition at line 168 of file curlmultiparthandler.h.

◆ _isMuliPartResponse

bool zyppng::CurlMultiPartHandler::_isMuliPartResponse = false
private

Definition at line 169 of file curlmultiparthandler.h.

◆ _seperatorString

std::string zyppng::CurlMultiPartHandler::_seperatorString
private

The seperator string for multipart responses as defined in RFC 7233 Section 4.1.

Definition at line 171 of file curlmultiparthandler.h.

◆ _rangePrefaceBuffer

std::vector<char> zyppng::CurlMultiPartHandler::_rangePrefaceBuffer
private

Here we buffer.

Definition at line 172 of file curlmultiparthandler.h.

◆ _currentRange

std::optional<off_t> zyppng::CurlMultiPartHandler::_currentRange
private

Definition at line 174 of file curlmultiparthandler.h.

◆ _currentSrvRange

std::optional<Range> zyppng::CurlMultiPartHandler::_currentSrvRange
private

Definition at line 175 of file curlmultiparthandler.h.

◆ _reportedFileSize

std::optional<size_t> zyppng::CurlMultiPartHandler::_reportedFileSize
private

Filesize as reported by the content range or byte range headers.

Definition at line 176 of file curlmultiparthandler.h.

◆ _rangeAttemptIdx

unsigned zyppng::CurlMultiPartHandler::_rangeAttemptIdx = 0
private

Definition at line 178 of file curlmultiparthandler.h.

◆ _requestedRanges

std::vector<Range>& zyppng::CurlMultiPartHandler::_requestedRanges
private

the requested ranges that need to be downloaded

Definition at line 179 of file curlmultiparthandler.h.


The documentation for this class was generated from the following files: