Audacity 3.2.0
Public Member Functions | Private Attributes | List of all members
audacity::network_manager::CurlResponseFactory Class Referencefinal

#include <CurlResponseFactory.h>

Inheritance diagram for audacity::network_manager::CurlResponseFactory:
[legend]
Collaboration diagram for audacity::network_manager::CurlResponseFactory:
[legend]

Public Member Functions

 CurlResponseFactory ()
 
void setProxy (const std::string &proxy) override
 
ResponsePtr performRequest (RequestVerb verb, const Request &request) override
 
ResponsePtr performRequest (RequestVerb verb, const Request &request, const void *data, size_t size) override
 
ResponsePtr performRequest (RequestVerb verb, const Request &request, std::unique_ptr< MultipartData > form) override
 
void terminate () override
 
- Public Member Functions inherited from audacity::network_manager::IResponseFactory
virtual ~IResponseFactory ()=default
 
virtual void setProxy (const std::string &proxy)=0
 
virtual ResponsePtr performRequest (RequestVerb verb, const Request &request)=0
 
virtual ResponsePtr performRequest (RequestVerb verb, const Request &request, const void *data, size_t size)=0
 
virtual ResponsePtr performRequest (RequestVerb verb, const Request &request, std::unique_ptr< MultipartData > form)=0
 
virtual void terminate ()=0
 

Private Attributes

std::unique_ptr< CurlHandleManagermHandleManager { std::make_unique<CurlHandleManager> () }
 
std::unique_ptr< ThreadPool > mThreadPool
 

Detailed Description

Definition at line 28 of file CurlResponseFactory.h.

Constructor & Destructor Documentation

◆ CurlResponseFactory()

audacity::network_manager::CurlResponseFactory::CurlResponseFactory ( )

Definition at line 25 of file CurlResponseFactory.cpp.

26 : mThreadPool (std::make_unique<ThreadPool>(
27 std::max (
29 std::thread::hardware_concurrency ()
30 )))
31{
32
33}
constexpr decltype(std::thread::hardware_concurrency()) MIN_CURL_THREADS

Member Function Documentation

◆ performRequest() [1/3]

ResponsePtr audacity::network_manager::CurlResponseFactory::performRequest ( RequestVerb  verb,
const Request request 
)
overridevirtual

Implements audacity::network_manager::IResponseFactory.

Definition at line 40 of file CurlResponseFactory.cpp.

41{
42 return performRequest (verb, request, nullptr, 0);
43}
ResponsePtr performRequest(RequestVerb verb, const Request &request) override

References performRequest().

Referenced by performRequest().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ performRequest() [2/3]

ResponsePtr audacity::network_manager::CurlResponseFactory::performRequest ( RequestVerb  verb,
const Request request,
const void *  data,
size_t  size 
)
overridevirtual

Implements audacity::network_manager::IResponseFactory.

Definition at line 45 of file CurlResponseFactory.cpp.

46{
47 if (!mThreadPool)
48 return {};
49
50 std::shared_ptr<CurlResponse> response = std::make_shared<CurlResponse> (
51 verb, request, mHandleManager.get ()
52 );
53
54 std::vector<uint8_t> buffer;
55
56 if (data != nullptr && size != 0)
57 {
58 const uint8_t* start = static_cast<const uint8_t*>(data);
59 const uint8_t* end = static_cast<const uint8_t*>(data) + size;
60
61 buffer.insert (buffer.begin (), start, end);
62 }
63
64 mThreadPool->enqueue ([response, dataBuffer = std::move (buffer)]() {
65 if (!dataBuffer.empty())
66 response->setPayload (dataBuffer.data (), dataBuffer.size ());
67
68 response->perform ();
69 });
70
71 return response;
72}
std::unique_ptr< CurlHandleManager > mHandleManager
auto end(const Ptr< Type, BaseDeleter > &p)
Enables range-for.
Definition: PackedArray.h:159

References PackedArray::end(), mHandleManager, mThreadPool, and size.

Here is the call graph for this function:

◆ performRequest() [3/3]

ResponsePtr audacity::network_manager::CurlResponseFactory::performRequest ( RequestVerb  verb,
const Request request,
std::unique_ptr< MultipartData form 
)
overridevirtual

Implements audacity::network_manager::IResponseFactory.

Definition at line 74 of file CurlResponseFactory.cpp.

77{
78 if (!mThreadPool)
79 return {};
80
81 std::shared_ptr<CurlResponse> response =
82 std::make_shared<CurlResponse>(verb, request, mHandleManager.get());
83
84
85 mThreadPool->enqueue(
86 [response, rawForm = form.release()]() mutable
87 {
88 if (rawForm != nullptr && !rawForm->IsEmpty())
89 response->setForm(std::unique_ptr<MultipartData>(rawForm));
90
91 response->perform();
92 });
93
94 return response;
95}

References mHandleManager, and mThreadPool.

◆ setProxy()

void audacity::network_manager::CurlResponseFactory::setProxy ( const std::string &  proxy)
overridevirtual

Implements audacity::network_manager::IResponseFactory.

Definition at line 35 of file CurlResponseFactory.cpp.

36{
37 mHandleManager->setProxy (proxy);
38}

References mHandleManager.

◆ terminate()

void audacity::network_manager::CurlResponseFactory::terminate ( )
overridevirtual

Implements audacity::network_manager::IResponseFactory.

Definition at line 97 of file CurlResponseFactory.cpp.

98{
99 mThreadPool.reset ();
100 mHandleManager.reset ();
101}

References mHandleManager, and mThreadPool.

Member Data Documentation

◆ mHandleManager

std::unique_ptr<CurlHandleManager> audacity::network_manager::CurlResponseFactory::mHandleManager { std::make_unique<CurlHandleManager> () }
private

Definition at line 42 of file CurlResponseFactory.h.

Referenced by performRequest(), setProxy(), and terminate().

◆ mThreadPool

std::unique_ptr<ThreadPool> audacity::network_manager::CurlResponseFactory::mThreadPool
private

Definition at line 43 of file CurlResponseFactory.h.

Referenced by performRequest(), and terminate().


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