Mercurial > minori
annotate src/core/http.cc @ 389:1e5d922fe82b
kitsu: implement UpdateAnimeEntry
yay... i guess
| author | Paper <paper@tflc.us> |
|---|---|
| date | Thu, 06 Nov 2025 12:21:35 -0500 |
| parents | aa38b904de4f |
| children | 2d3e10319112 |
| rev | line source |
|---|---|
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
1 #include "core/http.h" |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
2 #include "core/session.h" |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
3 #include <QByteArray> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
4 #include <curl/curl.h> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
5 #include <iostream> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
6 #include <string> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
7 #include <vector> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
8 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
9 namespace HTTP { |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
10 |
| 369 | 11 std::string UrlEncode(const std::string &data) |
| 12 { | |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
13 /* why do I need to init curl just for this? wtf? */ |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
14 CURL *curl = curl_easy_init(); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
15 if (!curl) |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
16 return ""; /* no way! */ |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
17 |
| 369 | 18 char *output = curl_easy_escape(curl, data.data(), data.size()); |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
19 if (!output) { |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
20 curl_easy_cleanup(curl); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
21 return ""; |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
22 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
23 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
24 std::string str(output); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
25 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
26 curl_free(output); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
27 curl_easy_cleanup(curl); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
28 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
29 return str; |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
30 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
31 |
| 369 | 32 std::string UrlDecode(const std::string &data) |
| 33 { | |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
34 CURL *curl = curl_easy_init(); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
35 if (!curl) |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
36 return ""; |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
37 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
38 int outlength; |
| 369 | 39 char *output = curl_easy_unescape(curl, data.data(), data.size(), &outlength); |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
40 if (!output) { |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
41 curl_easy_cleanup(curl); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
42 return ""; |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
43 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
44 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
45 std::string str(output, outlength); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
46 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
47 curl_free(output); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
48 curl_easy_cleanup(curl); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
49 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
50 return str; |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
51 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
52 |
| 369 | 53 std::string EncodeParamsList(std::string base, const std::map<std::string, std::string> ¶ms) |
| 54 { | |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
55 std::size_t count = 0; |
| 369 | 56 for (const auto ¶m : params) { |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
57 base += (!count ? "?" : "&"); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
58 base += UrlEncode(param.first); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
59 base += "="; |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
60 base += UrlEncode(param.second); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
61 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
62 count++; |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
63 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
64 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
65 return base; |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
66 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
67 |
| 369 | 68 static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userdata) |
| 69 { | |
| 70 reinterpret_cast<QByteArray *>(userdata)->append(reinterpret_cast<char *>(contents), size * nmemb); | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
71 return size * nmemb; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
72 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
73 |
| 369 | 74 QByteArray Request(const std::string &url, const std::vector<std::string> &headers, const std::string &data, Type type) |
| 75 { | |
| 76 struct curl_slist *list = NULL; | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
77 QByteArray userdata; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
78 |
| 369 | 79 CURL *curl = curl_easy_init(); |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
80 if (curl) { |
| 369 | 81 for (const std::string &h : headers) |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
82 list = curl_slist_append(list, h.c_str()); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
83 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
84 curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); |
| 389 | 85 if (type == Type::Post || type == Type::Patch) |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
86 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str()); |
| 389 | 87 if (type == Type::Patch) |
| 88 curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH"); | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
89 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
90 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &userdata); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
91 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &WriteCallback); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
92 /* Use system certs... useful on Windows. */ |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
93 curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA); |
|
385
aa38b904de4f
http: fix incorrect type in curl_easy_setopt
Paper <paper@tflc.us>
parents:
369
diff
changeset
|
94 curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); // threading |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
95 CURLcode res = curl_easy_perform(curl); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
96 session.IncrementRequests(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
97 curl_easy_cleanup(curl); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
98 if (res != CURLE_OK) |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
99 session.SetStatusBar(std::string("curl_easy_perform(curl) failed!: ") + curl_easy_strerror(res)); |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
100 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
101 return userdata; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
102 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
103 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
104 /* this function is static */ |
| 369 | 105 size_t RequestThread::WriteCallback(void *contents, size_t size, size_t nmemb, void *userdata) |
| 106 { | |
| 107 RequestThread *thread = reinterpret_cast<RequestThread *>(userdata); | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
108 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
109 const std::lock_guard<std::mutex> lock(thread->callback_data_mutex_); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
110 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
111 /* stop writing, then! */ |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
112 if (thread->cancelled_) |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
113 return CURL_WRITEFUNC_ERROR; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
114 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
115 /* else, continue on as normal */ |
| 369 | 116 thread->array_.append(reinterpret_cast<char *>(contents), size * nmemb); |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
117 return size * nmemb; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
118 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
119 |
| 369 | 120 RequestThread::RequestThread(Type type, QObject *parent) : QThread(parent) |
| 121 { | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
122 SetType(type); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
123 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
124 |
| 369 | 125 RequestThread::RequestThread(const std::string &url, const std::vector<std::string> &headers, const std::string &data, |
| 126 Type type, QObject *parent) | |
| 127 : QThread(parent) | |
| 128 { | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
129 SetUrl(url); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
130 SetData(data); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
131 SetHeaders(headers); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
132 SetType(type); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
133 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
134 |
| 369 | 135 RequestThread::~RequestThread() |
| 136 { | |
|
319
d928ec7b6a0d
services/kitsu: implement GetAnimeList()
Paper <paper@paper.us.eu.org>
parents:
317
diff
changeset
|
137 /* block until the function can safely exit */ |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
138 Stop(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
139 wait(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
140 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
141 |
| 369 | 142 void RequestThread::SetUrl(const std::string &url) |
| 143 { | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
144 url_ = url; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
145 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
146 |
| 369 | 147 void RequestThread::SetHeaders(const std::vector<std::string> &headers) |
| 148 { | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
149 headers_ = headers; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
150 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
151 |
| 369 | 152 void RequestThread::SetData(const std::string &data) |
| 153 { | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
154 data_ = data; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
155 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
156 |
| 369 | 157 void RequestThread::SetType(Type type) |
| 158 { | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
159 type_ = type; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
160 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
161 |
| 369 | 162 void RequestThread::run() |
| 163 { | |
| 164 struct curl_slist *list = NULL; | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
165 |
| 369 | 166 CURL *curl = curl_easy_init(); |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
167 if (curl) { |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
168 curl_easy_setopt(curl, CURLOPT_URL, url_.c_str()); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
169 |
| 389 | 170 if (type_ == Type::Post || type_ == Type::Patch) |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
171 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data_.c_str()); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
172 |
| 369 | 173 for (const std::string &h : headers_) |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
174 list = curl_slist_append(list, h.c_str()); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
175 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
176 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
177 curl_easy_setopt(curl, CURLOPT_WRITEDATA, this); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
178 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &RequestThread::WriteCallback); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
179 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
180 /* Use system certs... useful on Windows. */ |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
181 curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
182 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
183 /* does something with threading, don't remember what though */ |
|
385
aa38b904de4f
http: fix incorrect type in curl_easy_setopt
Paper <paper@tflc.us>
parents:
369
diff
changeset
|
184 curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
185 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
186 CURLcode res = curl_easy_perform(curl); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
187 session.IncrementRequests(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
188 curl_easy_cleanup(curl); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
189 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
190 callback_data_mutex_.lock(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
191 if (res != CURLE_OK && !(res == CURLE_WRITE_ERROR && cancelled_)) |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
192 session.SetStatusBar(std::string("curl_easy_perform(curl) failed!: ") + curl_easy_strerror(res)); |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
193 callback_data_mutex_.unlock(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
194 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
195 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
196 emit ReceivedData(array_); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
197 array_.clear(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
198 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
199 |
| 369 | 200 void RequestThread::Stop() |
| 201 { | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
202 const std::lock_guard<std::mutex> lock(callback_data_mutex_); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
203 cancelled_ = true; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
204 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
205 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
291
diff
changeset
|
206 } // namespace HTTP |
