1#ifndef ENGINE_SHARED_HTTP_H
2#define ENGINE_SHARED_HTTP_H
11#include <condition_variable>
15#include <unordered_map>
226 double Size()
const {
return m_Size.load(std::memory_order_relaxed); }
256 auto pResult = std::make_unique<CHttpRequest>(
pUrl);
263 return std::make_unique<CHttpRequest>(
pUrl);
284 auto pResult = std::make_unique<CHttpRequest>(
pUrl);
292 auto pResult = std::make_unique<CHttpRequest>(
pUrl);
326 std::optional<std::chrono::time_point<std::chrono::steady_clock>>
m_ShutdownTime;
340 void Run(std::shared_ptr<IHttpRequest>
pRequest)
override;
const SHA256_DIGEST SHA256_ZEROED
Definition hash.cpp:6
void FailOnErrorStatus(bool FailOnErrorStatus)
Definition http.h:169
void WriteToFileAndMemory(IStorage *pStorage, const char *pDest, int StorageType)
Definition http.cpp:522
bool m_SkipByFileTime
Definition http.h:90
static size_t HeaderCallback(char *pData, size_t Size, size_t Number, void *pUser)
Definition http.cpp:350
const SHA256_DIGEST & ResultSha256() const
Definition http.cpp:558
int64_t m_MaxResponseSize
Definition http.h:93
static int ProgressCallback(void *pUser, double DlTotal, double DlCurr, double UlTotal, double UlCurr)
Definition http.cpp:361
REQUEST
Definition http.h:59
bool ConfigureHandle(void *pHandle)
Definition http.cpp:148
HTTPLOG m_LogProgress
Definition http.h:120
void * m_pHeaders
Definition http.h:85
bool m_HeadersEnded
Definition http.h:132
const char * Dest()
Definition http.h:213
char m_aUrl[256]
Definition http.h:83
SHA256_DIGEST m_ActualSha256
Definition http.h:97
std::mutex m_WaitMutex
Definition http.h:128
void Result(unsigned char **ppResult, size_t *pResultLength) const
Definition http.cpp:542
virtual ~CHttpRequest()
Definition http.cpp:71
char m_aDestAbsolute[IO_MAX_PATH_LENGTH]
Definition http.h:114
std::atomic< int > m_Progress
Definition http.h:119
void IpResolve(IPRESOLVE IpResolve)
Definition http.h:168
void Abort()
Definition http.h:234
std::optional< int64_t > m_ResultLastModified
Definition http.h:134
REQUEST m_Type
Definition http.h:95
void Header(const char *pNameColonValue)
Definition http.cpp:528
static constexpr const char * GetRequestType(REQUEST Type)
Definition http.h:66
void Wait()
Definition http.cpp:533
json_value * ResultJson() const
Definition http.cpp:550
void MaxResponseSize(int64_t MaxResponseSize)
Definition http.h:166
size_t m_BodyLength
Definition http.h:87
double Size() const
Definition http.h:226
IPRESOLVE m_IpResolve
Definition http.h:121
SHA256_DIGEST m_ExpectedSha256
Definition http.h:99
void WriteToMemory()
Definition http.h:171
std::optional< int64_t > ResultAgeSeconds() const
Definition http.cpp:570
unsigned char * m_pBuffer
Definition http.h:108
bool m_WriteToMemory
Definition http.h:101
void OnCompletionInternal(void *pHandle, unsigned int Result)
Definition http.cpp:371
int m_StorageType
Definition http.h:112
void WriteToFile(IStorage *pStorage, const char *pDest, int StorageType)
Definition http.cpp:505
void Timeout(CTimeout Timeout)
Definition http.h:163
std::atomic< double > m_Size
Definition http.h:117
int StatusCode() const
Definition http.cpp:564
EHttpState State() const
Definition http.h:228
bool ShouldSkipRequest()
Definition http.cpp:105
virtual void OnCompletion(EHttpState State)
Definition http.h:157
void Head()
Definition http.h:184
void ExpectSha256(const SHA256_DIGEST &Sha256)
Definition http.h:183
std::atomic< double > m_Current
Definition http.h:118
std::optional< int64_t > ResultLastModified() const
Definition http.cpp:580
int Progress() const
Definition http.h:227
size_t OnData(char *pData, size_t DataSize)
Definition http.cpp:310
static size_t WriteCallback(char *pData, size_t Size, size_t Number, void *pUser)
Definition http.cpp:356
std::optional< int64_t > m_ResultDate
Definition http.h:133
size_t m_BufferSize
Definition http.h:107
void HeaderInt(const char *pName, int Value)
Definition http.h:206
virtual void OnProgress()
Definition http.h:156
void Post(const unsigned char *pData, size_t DataLength)
Definition http.h:185
CTimeout m_Timeout
Definition http.h:92
bool m_WriteToFile
Definition http.h:102
uint64_t m_ResponseLength
Definition http.h:104
char m_aDestAbsoluteTmp[IO_MAX_PATH_LENGTH]
Definition http.h:113
void ValidateBeforeOverwrite(bool ValidateBeforeOverwrite)
Definition http.h:182
int m_StatusCode
Definition http.h:131
IOHANDLE m_File
Definition http.h:111
unsigned char * m_pBody
Definition http.h:86
void OnValidation(bool Success)
Definition http.cpp:480
std::atomic< EHttpState > m_State
Definition http.h:126
std::atomic< bool > m_Abort
Definition http.h:127
std::condition_variable m_WaitCondition
Definition http.h:129
char m_aDest[IO_MAX_PATH_LENGTH]
Definition http.h:115
int64_t m_IfModifiedSince
Definition http.h:94
SHA256_CTX m_ActualSha256Ctx
Definition http.h:98
bool BeforeInit()
Definition http.cpp:119
void HeaderString(const char *pName, const char *pValue)
Definition http.h:200
double Current() const
Definition http.h:225
bool m_ValidateBeforeOverwrite
Definition http.h:89
char m_aErr[256]
Definition http.h:125
bool Done() const
Definition http.h:229
void PostJson(const char *pJson)
Definition http.h:192
void SkipByFileTime(bool SkipByFileTime)
Definition http.h:165
void LogProgress(HTTPLOG LogProgress)
Definition http.h:167
bool m_FailOnErrorStatus
Definition http.h:123
size_t OnHeader(char *pHeader, size_t HeaderSize)
Definition http.cpp:264
std::atomic< bool > m_Shutdown
Definition http.h:327
void Run(std::shared_ptr< IHttpRequest > pRequest) override
Definition http.cpp:797
std::chrono::milliseconds m_ShutdownDelay
Definition http.h:325
~CHttp()
Definition http.cpp:822
std::atomic< EState > m_State
Definition http.h:322
std::unordered_map< void *, std::shared_ptr< CHttpRequest > > m_RunningRequests
Definition http.h:324
EState
Definition http.h:312
@ ERROR
Definition http.h:315
@ UNINITIALIZED
Definition http.h:313
@ RUNNING
Definition http.h:314
void Shutdown() override
Definition http.cpp:812
std::optional< std::chrono::time_point< std::chrono::steady_clock > > m_ShutdownTime
Definition http.h:326
std::condition_variable m_Cv
Definition http.h:321
std::mutex m_Lock
Definition http.h:320
std::deque< std::shared_ptr< CHttpRequest > > m_PendingRequests
Definition http.h:323
static void ThreadMain(void *pUser)
Definition http.cpp:607
void * m_pMultiH
Definition http.h:330
void RunLoop()
Definition http.cpp:613
bool Init(std::chrono::milliseconds ShutdownDelay)
Definition http.cpp:586
void * m_pThread
Definition http.h:318
long m_TimeoutMs
Definition http.h:49
long m_ConnectTimeoutMs
Definition http.h:48
long m_LowSpeedLimit
Definition http.h:50
long m_LowSpeedTime
Definition http.h:51
struct _json_value json_value
Definition serverbrowser.h:17
void dbg_break()
Definition system.cpp:156
#define dbg_assert(test, fmt,...)
Definition system.h:64
void mem_copy(void *dest, const void *source, size_t size)
Definition system.cpp:180
int str_length(const char *str)
Definition system.cpp:3073
std::unique_ptr< CHttpRequest > HttpGet(const char *pUrl)
Definition http.h:261
std::unique_ptr< CHttpRequest > HttpHead(const char *pUrl)
Definition http.h:254
std::unique_ptr< CHttpRequest > HttpPost(const char *pUrl, const unsigned char *pData, size_t DataLength)
Definition http.h:282
IPRESOLVE
Definition http.h:39
std::unique_ptr< CHttpRequest > HttpGetFile(const char *pUrl, IStorage *pStorage, const char *pOutputFile, int StorageType)
Definition http.h:266
void EscapeUrl(char *pBuf, int Size, const char *pStr)
Definition http.cpp:51
std::unique_ptr< CHttpRequest > HttpGetBoth(const char *pUrl, IStorage *pStorage, const char *pOutputFile, int StorageType)
Definition http.h:274
std::unique_ptr< CHttpRequest > HttpPostJson(const char *pUrl, const char *pJson)
Definition http.h:290
EHttpState
Definition http.h:23
bool HttpHasIpresolveBug()
Definition http.cpp:58
HTTPLOG
Definition http.h:32
#define str_format
Definition system.cpp:3110
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:49