uvco 0.1
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
uvco::CurlRequest Class Reference

#include <curl.h>

Public Types

enum class  Method { GET , POST }
 

Public Member Functions

 CurlRequest (const CurlRequest &)=delete
 
 CurlRequest (CurlRequest &&)=delete
 
CurlRequestoperator= (const CurlRequest &)=delete
 
CurlRequestoperator= (CurlRequest &&)=delete
 
 ~CurlRequest ()
 
void setTimeoutMs (long timeoutMs)
 
MultiPromise< std::string > start ()
 
std::optional< long > statusCode () const
 Return the status code of the request after it has finished.
 

Private Member Functions

 CurlRequest (std::weak_ptr< UvCurlContext_ > context, Method method, std::string url)
 Initialize a GET request.
 
 CurlRequest (std::weak_ptr< UvCurlContext_ > context, Method method, std::string url, std::span< const std::pair< std::string, std::string > > fields)
 Initialize a POST request.
 

Private Attributes

std::unique_ptr< CurlRequestCore_core_
 

Friends

class Curl
 

Member Enumeration Documentation

◆ Method

enum class uvco::CurlRequest::Method
strong
Enumerator
GET 
POST 

Constructor & Destructor Documentation

◆ CurlRequest() [1/4]

uvco::CurlRequest::CurlRequest ( const CurlRequest )
delete

◆ CurlRequest() [2/4]

uvco::CurlRequest::CurlRequest ( CurlRequest &&  )
delete

◆ ~CurlRequest()

uvco::CurlRequest::~CurlRequest ( )
default

◆ CurlRequest() [3/4]

uvco::CurlRequest::CurlRequest ( std::weak_ptr< UvCurlContext_ context,
Method  method,
std::string  url 
)
private

Initialize a GET request.

535 : core_{std::make_unique<CurlRequestCore_>(std::move(context))} {
536 switch (method) {
537 case Method::GET:
538 core_->initGet(std::move(url));
539 break;
540 default:
541 BOOST_ASSERT(false);
542 }
543}
std::unique_ptr< CurlRequestCore_ > core_
Definition curl.h:73

◆ CurlRequest() [4/4]

uvco::CurlRequest::CurlRequest ( std::weak_ptr< UvCurlContext_ context,
Method  method,
std::string  url,
std::span< const std::pair< std::string, std::string > >  fields 
)
private

Initialize a POST request.

548 : core_{std::make_unique<CurlRequestCore_>(std::move(context))} {
549
550 switch (method) {
551 case Method::POST:
552 core_->initPost(std::move(url), fields);
553 break;
554 default:
555 BOOST_ASSERT(false);
556 }
557}

Member Function Documentation

◆ operator=() [1/2]

CurlRequest & uvco::CurlRequest::operator= ( const CurlRequest )
delete

◆ operator=() [2/2]

CurlRequest & uvco::CurlRequest::operator= ( CurlRequest &&  )
delete

◆ setTimeoutMs()

void uvco::CurlRequest::setTimeoutMs ( long  timeoutMs)
559 {
560 curl_easy_setopt(core_->easyHandle_, CURLOPT_TIMEOUT_MS, timeoutMs);
561}

◆ start()

MultiPromise< std::string > uvco::CurlRequest::start ( )

Start the request. This method is a generator that yields received chunks of the remote resource. Make sure to always co_await the returned MultiPromise until receiving a std::nullopt.

The Curl instance must not be closed before the request has finished.

567 {
568 // Run transfer of response.
569
570 while (true) {
571 auto result = co_await *core_;
572 if (result.has_value()) {
573 co_yield std::move(result.value());
574 continue;
575 }
576 // End of stream.
577 break;
578 }
579
580 if (core_->curlStatus() && core_->curlStatus().value() != CURLE_OK) {
581 throw CurlException(core_->curlStatus().value(), std::string{core_->url()});
582 }
583 if (core_->uvStatus() && core_->uvStatus().value() != 0) {
584 throw UvcoException{
585 core_->uvStatus().value(),
586 fmt::format("Socket error while fetching {}", core_->url())};
587 }
588
589 co_return;
590}

◆ statusCode()

std::optional< long > uvco::CurlRequest::statusCode ( ) const

Return the status code of the request after it has finished.

563 {
564 return core_->responseCode();
565}

Friends And Related Symbol Documentation

◆ Curl

friend class Curl
friend

Member Data Documentation

◆ core_

std::unique_ptr<CurlRequestCore_> uvco::CurlRequest::core_
private

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