diff src/core/http.cc @ 301:b1f625b0227c

*: convert all files CRLF -> LF some files were in DOS format, others were in unix. now everything (that at least is under our control) should all be the same format
author Paper <paper@paper.us.eu.org>
date Mon, 13 May 2024 15:04:51 -0400
parents 9a88e1725fd2
children b1f4d1867ab1
line wrap: on
line diff
--- a/src/core/http.cc	Mon May 13 14:56:37 2024 -0400
+++ b/src/core/http.cc	Mon May 13 15:04:51 2024 -0400
@@ -1,138 +1,138 @@
-#include "core/http.h"
-#include "core/session.h"
-#include <QByteArray>
-#include <curl/curl.h>
-#include <iostream>
-#include <string>
-#include <vector>
-
-namespace HTTP {
-
-static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userdata) {
-	reinterpret_cast<QByteArray*>(userdata)->append(reinterpret_cast<char*>(contents), size * nmemb);
-	return size * nmemb;
-}
-
-QByteArray Request(const std::string& url, const std::vector<std::string>& headers, const std::string& data, Type type) {
-	struct curl_slist* list = NULL;
-	QByteArray userdata;
-
-	CURL* curl = curl_easy_init();
-	if (curl) {
-		for (const std::string& h : headers)
-			list = curl_slist_append(list, h.c_str());
-
-		curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
-		if (type == Type::Post)
-			curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());
-		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
-		curl_easy_setopt(curl, CURLOPT_WRITEDATA, &userdata);
-		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &WriteCallback);
-		/* Use system certs... useful on Windows. */
-		curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA);
-		curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); // threading
-		CURLcode res = curl_easy_perform(curl);
-		session.IncrementRequests();
-		curl_easy_cleanup(curl);
-		if (res != CURLE_OK)
-			std::cerr << "curl_easy_perform(curl) failed!: " << curl_easy_strerror(res) << std::endl;
-	}
-	return userdata;
-}
-
-/* this function is static */
-size_t RequestThread::WriteCallback(void* contents, size_t size, size_t nmemb, void* userdata) {
-	RequestThread* thread = reinterpret_cast<RequestThread*>(userdata);
-
-	const std::lock_guard<std::mutex> lock(thread->callback_data_mutex_);
-
-	/* stop writing, then! */
-	if (thread->cancelled_)
-		return CURL_WRITEFUNC_ERROR;
-
-	/* else, continue on as normal */
-	thread->array_.append(reinterpret_cast<char*>(contents), size * nmemb);
-	return size * nmemb;
-}
-
-RequestThread::RequestThread(Type type, QObject* parent) : QThread(parent) {
-	SetType(type);
-}
-
-RequestThread::RequestThread(const std::string& url, const std::vector<std::string>& headers,
-	                         const std::string& data, Type type, QObject* parent)
-	: QThread(parent) {
-	SetUrl(url);
-	SetData(data);
-	SetHeaders(headers);
-	SetType(type);
-}
-
-RequestThread::~RequestThread() {
-	/* block until the function can safely exit.
-	 *
-	 * this sucks. find out a better way to do this, which will probably
-	 * be to put all of the threads in a pool */
-	Stop();
-	wait();
-}
-
-void RequestThread::SetUrl(const std::string& url) {
-	url_ = url;
-}
-
-void RequestThread::SetHeaders(const std::vector<std::string>& headers) {
-	headers_ = headers;
-}
-
-void RequestThread::SetData(const std::string& data) {
-	data_ = data;
-}
-
-void RequestThread::SetType(Type type) {
-	type_ = type;
-}
-
-void RequestThread::run() {
-	struct curl_slist* list = NULL;
-
-	CURL* curl = curl_easy_init();
-	if (curl) {
-		curl_easy_setopt(curl, CURLOPT_URL, url_.c_str());
-
-		if (type_ == Type::Post)
-			curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data_.c_str());
-
-		for (const std::string& h : headers_)
-			list = curl_slist_append(list, h.c_str());
-		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
-
-		curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);
-		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &RequestThread::WriteCallback);
-
-		/* Use system certs... useful on Windows. */
-		curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA);
-
-		/* does something with threading, don't remember what though */
-		curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
-
-		CURLcode res = curl_easy_perform(curl);
-		session.IncrementRequests();
-		curl_easy_cleanup(curl);
-
-		callback_data_mutex_.lock();
-		if (res != CURLE_OK && !(res == CURLE_WRITE_ERROR && cancelled_))
-			std::cerr << "curl_easy_perform(curl) failed!: " << curl_easy_strerror(res) << std::endl;
-		callback_data_mutex_.unlock();
-	}
-
-	emit ReceivedData(array_);
-	array_.clear();
-}
-
-void RequestThread::Stop() {
-	const std::lock_guard<std::mutex> lock(callback_data_mutex_);
-	cancelled_ = true;
-}
-
-} // namespace HTTP
+#include "core/http.h"
+#include "core/session.h"
+#include <QByteArray>
+#include <curl/curl.h>
+#include <iostream>
+#include <string>
+#include <vector>
+
+namespace HTTP {
+
+static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userdata) {
+	reinterpret_cast<QByteArray*>(userdata)->append(reinterpret_cast<char*>(contents), size * nmemb);
+	return size * nmemb;
+}
+
+QByteArray Request(const std::string& url, const std::vector<std::string>& headers, const std::string& data, Type type) {
+	struct curl_slist* list = NULL;
+	QByteArray userdata;
+
+	CURL* curl = curl_easy_init();
+	if (curl) {
+		for (const std::string& h : headers)
+			list = curl_slist_append(list, h.c_str());
+
+		curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
+		if (type == Type::Post)
+			curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());
+		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
+		curl_easy_setopt(curl, CURLOPT_WRITEDATA, &userdata);
+		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &WriteCallback);
+		/* Use system certs... useful on Windows. */
+		curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA);
+		curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); // threading
+		CURLcode res = curl_easy_perform(curl);
+		session.IncrementRequests();
+		curl_easy_cleanup(curl);
+		if (res != CURLE_OK)
+			std::cerr << "curl_easy_perform(curl) failed!: " << curl_easy_strerror(res) << std::endl;
+	}
+	return userdata;
+}
+
+/* this function is static */
+size_t RequestThread::WriteCallback(void* contents, size_t size, size_t nmemb, void* userdata) {
+	RequestThread* thread = reinterpret_cast<RequestThread*>(userdata);
+
+	const std::lock_guard<std::mutex> lock(thread->callback_data_mutex_);
+
+	/* stop writing, then! */
+	if (thread->cancelled_)
+		return CURL_WRITEFUNC_ERROR;
+
+	/* else, continue on as normal */
+	thread->array_.append(reinterpret_cast<char*>(contents), size * nmemb);
+	return size * nmemb;
+}
+
+RequestThread::RequestThread(Type type, QObject* parent) : QThread(parent) {
+	SetType(type);
+}
+
+RequestThread::RequestThread(const std::string& url, const std::vector<std::string>& headers,
+	                         const std::string& data, Type type, QObject* parent)
+	: QThread(parent) {
+	SetUrl(url);
+	SetData(data);
+	SetHeaders(headers);
+	SetType(type);
+}
+
+RequestThread::~RequestThread() {
+	/* block until the function can safely exit.
+	 *
+	 * this sucks. find out a better way to do this, which will probably
+	 * be to put all of the threads in a pool */
+	Stop();
+	wait();
+}
+
+void RequestThread::SetUrl(const std::string& url) {
+	url_ = url;
+}
+
+void RequestThread::SetHeaders(const std::vector<std::string>& headers) {
+	headers_ = headers;
+}
+
+void RequestThread::SetData(const std::string& data) {
+	data_ = data;
+}
+
+void RequestThread::SetType(Type type) {
+	type_ = type;
+}
+
+void RequestThread::run() {
+	struct curl_slist* list = NULL;
+
+	CURL* curl = curl_easy_init();
+	if (curl) {
+		curl_easy_setopt(curl, CURLOPT_URL, url_.c_str());
+
+		if (type_ == Type::Post)
+			curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data_.c_str());
+
+		for (const std::string& h : headers_)
+			list = curl_slist_append(list, h.c_str());
+		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
+
+		curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);
+		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &RequestThread::WriteCallback);
+
+		/* Use system certs... useful on Windows. */
+		curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA);
+
+		/* does something with threading, don't remember what though */
+		curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
+
+		CURLcode res = curl_easy_perform(curl);
+		session.IncrementRequests();
+		curl_easy_cleanup(curl);
+
+		callback_data_mutex_.lock();
+		if (res != CURLE_OK && !(res == CURLE_WRITE_ERROR && cancelled_))
+			std::cerr << "curl_easy_perform(curl) failed!: " << curl_easy_strerror(res) << std::endl;
+		callback_data_mutex_.unlock();
+	}
+
+	emit ReceivedData(array_);
+	array_.clear();
+}
+
+void RequestThread::Stop() {
+	const std::lock_guard<std::mutex> lock(callback_data_mutex_);
+	cancelled_ = true;
+}
+
+} // namespace HTTP