Repo-Init
 
Loading...
Searching...
No Matches
Http.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
5#include <HttpStatusCodes_C++11.h>
6#include <curl/curl.h>
7
9constexpr int HTTP_TIMEOUT_MS = 1000;
10
15struct curlMemory {
16 std::string data;
17};
18
48
53class HTTP {
54 private:
56 CURL *_curl = curl_easy_init();
58 std::unique_ptr<curlMemory> _data = std::make_unique<curlMemory>();
60 std::string _hostAddr;
61
67 void setCommonFields(const std::string &fullURL, CURLoption method);
68
75 void setCommonFields(const std::string &fullURL, CURLoption method, const std::string &payload);
76
85 static size_t writeDataCallback(const char *contents, size_t size, size_t nmemb, std::string *userp);
86
93 CURLcode performRequest(HttpStatus::Code &statusCode, std::string &receivedData);
94
95 public:
101 explicit HTTP(std::string addr, int timeoutInMs = HTTP_TIMEOUT_MS);
102
104 HTTP(const HTTP & /*unused*/) = delete;
105
107 HTTP(HTTP && /*unused*/) = delete;
108
110 HTTP &operator=(HTTP /*unused*/) = delete;
111
113 HTTP &operator=(HTTP && /*unused*/) = delete;
114
121 template <typename T> bool setOption(CURLoption option, T value)
122 {
123 return curl_easy_setopt(_curl, option, value) == CURLE_OK;
124 }
125
130 [[nodiscard]] const std::string &getHostAddress() const { return _hostAddr; }
131
139 CURLcode sendGETRequest(const std::string &index, std::string &receivedData, HttpStatus::Code &statusCode);
140
148 CURLcode sendHEADRequest(const std::string &index, std::string &receivedData, HttpStatus::Code &statusCode);
149
158 CURLcode sendPOSTRequest(const std::string &index, const std::string &payload, std::string &receivedData,
159 HttpStatus::Code &statusCode);
160
169 CURLcode sendPUTRequest(const std::string &index, const std::string &payload, std::string &receivedData,
170 HttpStatus::Code &statusCode);
171
177
181 ~HTTP();
182};
constexpr int HTTP_TIMEOUT_MS
HTTP connection timeout in milliseconds.
Definition Http.hpp:9
Definition Http.hpp:53
const std::string & getHostAddress() const
Definition Http.hpp:130
CURLcode sendPUTRequest(const std::string &index, const std::string &payload, std::string &receivedData, HttpStatus::Code &statusCode)
Definition Http.cpp:91
HTTP(std::string addr, int timeoutInMs=HTTP_TIMEOUT_MS)
Definition Http.cpp:52
CURLcode sendHEADRequest(const std::string &index, std::string &receivedData, HttpStatus::Code &statusCode)
Definition Http.cpp:76
HTTP & operator=(HTTP)=delete
Copy assignment operator.
HTTP(const HTTP &)=delete
Copy constructor.
CURLcode sendPOSTRequest(const std::string &index, const std::string &payload, std::string &receivedData, HttpStatus::Code &statusCode)
Definition Http.cpp:83
HTTP(HTTP &&)=delete
Move constructor.
CURLcode performRequest(HttpStatus::Code &statusCode, std::string &receivedData)
Definition Http.cpp:24
HTTP & operator=(HTTP &&)=delete
Move assignment operator.
bool setOption(CURLoption option, T value)
Definition Http.hpp:121
CURL * _curl
CURL handler.
Definition Http.hpp:56
std::unique_ptr< curlMemory > _data
Memory structure for CURL.
Definition Http.hpp:58
static size_t writeDataCallback(const char *contents, size_t size, size_t nmemb, std::string *userp)
Definition Http.cpp:39
~HTTP()
Definition Http.cpp:132
void setCommonFields(const std::string &fullURL, CURLoption method)
Definition Http.cpp:6
CURLcode sendGETRequest(const std::string &index, std::string &receivedData, HttpStatus::Code &statusCode)
Definition Http.cpp:69
HTTPStats getStats()
Definition Http.cpp:99
std::string _hostAddr
Full path of server.
Definition Http.hpp:60
long startTransferTime
Total processing time for starting transfer in microseconds.
Definition Http.hpp:44
size_t requestBytes
Total request size in bytes.
Definition Http.hpp:30
long uploadSpeed
Upload bandwidth in Bps.
Definition Http.hpp:32
long preTransferTime
Total processing time for pre-transfer period in microseconds.
Definition Http.hpp:40
size_t headerBytes
Total header size in bytes.
Definition Http.hpp:28
size_t uploadBytes
Total uploaded bytes.
Definition Http.hpp:24
long nameLookupTime
Total processing time for name lookup in microseconds.
Definition Http.hpp:38
long totalTime
Total processing time in microseconds.
Definition Http.hpp:46
long redirectTime
Total processing time for redirections in microseconds.
Definition Http.hpp:42
size_t downloadBytes
Total downloaded bytes.
Definition Http.hpp:26
long connectionTime
Total processing time for connection in microseconds.
Definition Http.hpp:36
long downloadSpeed
Download bandwidth in Bps.
Definition Http.hpp:34
std::string data
Definition Http.hpp:16