diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-09-13 13:24:23 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-09-13 13:24:23 +0100 |
commit | 84bd17328a4dc027e689ca7b2a85744d6e2b7cf5 (patch) | |
tree | e1d2e7c0f5b26500715c8cb17a12a391afc032b8 /src/curlOp.cpp | |
parent | 55439681e7a45489e5a77c2d6169f4b722525c96 (diff) | |
download | webstat-84bd17328a4dc027e689ca7b2a85744d6e2b7cf5.tar.bz2 webstat-84bd17328a4dc027e689ca7b2a85744d6e2b7cf5.tar.xz webstat-84bd17328a4dc027e689ca7b2a85744d6e2b7cf5.zip |
Create and perform UA lookup curl op when new user agent is encountered
Diffstat (limited to 'src/curlOp.cpp')
-rw-r--r-- | src/curlOp.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/curlOp.cpp b/src/curlOp.cpp new file mode 100644 index 0000000..1a4ad11 --- /dev/null +++ b/src/curlOp.cpp @@ -0,0 +1,41 @@ +#include "curlOp.hpp" +#include <string_view> + +namespace WebStat { + namespace { + size_t + stringAppend(const char * ptr, size_t size, size_t nmemb, std::string * result) + { + result->append(ptr, nmemb * size); + return nmemb * size; + } + } + + CurlOperation::CurlOperation() : hnd {curl_easy_init()}, err {} + { + curl_easy_setopt(hnd.get(), CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(hnd.get(), CURLOPT_MAXREDIRS, 50L); + curl_easy_setopt(hnd.get(), CURLOPT_TCP_KEEPALIVE, 1L); + curl_easy_setopt(hnd.get(), CURLOPT_FAILONERROR, 1L); + curl_easy_setopt(hnd.get(), CURLOPT_ERRORBUFFER, err.data()); + curl_easy_setopt(hnd.get(), CURLOPT_WRITEDATA, &result); + curl_easy_setopt(hnd.get(), CURLOPT_WRITEFUNCTION, &stringAppend); + } + + void + CurlOperation::addForm(const char * name, const std::string_view data) + { + if (!mime) { + mime.reset(curl_mime_init(hnd.get())); + curl_easy_setopt(hnd.get(), CURLOPT_MIMEPOST, mime.get()); + } + auto part = curl_mime_addpart(mime.get()); + curl_mime_data(part, data.data(), data.length()); + curl_mime_name(part, name); + } + + void + CurlOperation::onError(DB::Connection *) const + { + } +} |