Merge commit '77f3cfbba80d4cef603fc644a7f3848d5249b039' into pullstream
This commit is contained in:
commit
b9b2b8aaed
@ -48,7 +48,8 @@ namespace
|
||||
public:
|
||||
|
||||
explicit cBlockingHTTPCallbacks(std::shared_ptr<cEvent> a_Event, AString & a_ResponseBody) :
|
||||
m_Event(std::move(a_Event)), m_ResponseBody(a_ResponseBody)
|
||||
m_Event(std::move(a_Event)), m_ResponseBody(a_ResponseBody),
|
||||
m_IsError(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -60,6 +61,7 @@ namespace
|
||||
void OnError(const AString & a_ErrorMsg) override
|
||||
{
|
||||
LOGERROR("%s %d: HTTP Error: %s", __FILE__, __LINE__, a_ErrorMsg.c_str());
|
||||
m_IsError = true;
|
||||
m_Event->Set();
|
||||
}
|
||||
|
||||
@ -72,6 +74,9 @@ namespace
|
||||
|
||||
/** The accumulator for the partial body data, so that OnBodyFinished() can send the entire thing at once. */
|
||||
AString & m_ResponseBody;
|
||||
|
||||
/** Indicates whether an error was encountered while processing the request. */
|
||||
bool m_IsError;
|
||||
};
|
||||
}
|
||||
|
||||
@ -762,14 +767,18 @@ std::pair<bool, AString> cUrlClient::BlockingRequest(
|
||||
{
|
||||
auto EvtFinished = std::make_shared<cEvent>();
|
||||
AString Response;
|
||||
auto Callbacks = std::make_unique<cBlockingHTTPCallbacks>(EvtFinished, Response);
|
||||
auto [Success, ErrorMessage] = cUrlClient::Request(a_Method, a_URL, std::move(Callbacks), std::move(a_Headers), a_Body, a_Options);
|
||||
auto Callbacks = std::make_shared<cBlockingHTTPCallbacks>(EvtFinished, Response);
|
||||
auto [Success, ErrorMessage] = cUrlClient::Request(a_Method, a_URL, Callbacks, std::move(a_Headers), a_Body, a_Options);
|
||||
if (Success)
|
||||
{
|
||||
if (!EvtFinished->Wait(10000))
|
||||
{
|
||||
return std::make_pair(false, "Timeout");
|
||||
}
|
||||
if (Callbacks->m_IsError)
|
||||
{
|
||||
return std::make_pair(false, AString());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -103,7 +103,7 @@ public:
|
||||
for such a response; instead, the redirect is silently attempted. */
|
||||
virtual void OnRedirecting(const AString & a_NewLocation) {}
|
||||
};
|
||||
using cCallbacksPtr = std::unique_ptr<cCallbacks>;
|
||||
using cCallbacksPtr = std::shared_ptr<cCallbacks>;
|
||||
|
||||
|
||||
/** Used for HTTP status codes. */
|
||||
@ -163,10 +163,9 @@ public:
|
||||
const AStringMap & a_Options = {}
|
||||
);
|
||||
|
||||
/** The method will run a thread blocking HTTP request. Any error handling
|
||||
is done inside the functions. Check the LOG or stdout for any occurring
|
||||
errors. Other parameters are the same as for the regular request method.
|
||||
The return value is if the request was successful and the response. */
|
||||
/** Sends a generic request and block until a response is received or an error occurs.
|
||||
The first returned value specifies whether the response was received successfully.
|
||||
If successful, the second value provides the actual response data. */
|
||||
static std::pair<bool, AString> BlockingRequest(
|
||||
const AString & a_Method,
|
||||
const AString & a_URL,
|
||||
|
Loading…
x
Reference in New Issue
Block a user