mirror of
https://github.com/oxen-io/lokinet-control-panel.git
synced 2023-12-14 05:53:00 +01:00
84 lines
2.4 KiB
C++
84 lines
2.4 KiB
C++
#include "HttpClient.hpp"
|
|
|
|
#include <QObject>
|
|
#include <QNetworkConfiguration>
|
|
|
|
// HttpClient Constructor
|
|
HttpClient::HttpClient() {
|
|
m_networkManager = new QNetworkAccessManager();
|
|
|
|
// update QNAM's config with a much lower timeout value since this goes over localhost
|
|
QNetworkConfiguration qnamConf = m_networkManager->activeConfiguration();
|
|
qnamConf.setConnectTimeout(250); // in milliseconds
|
|
m_networkManager->setConfiguration(qnamConf);
|
|
|
|
QObject::connect(m_networkManager, &QNetworkAccessManager::finished, this, [=](QNetworkReply *reply) {
|
|
|
|
uint32_t callbackId = reply->property("callbackId").toUInt();
|
|
|
|
std::unique_lock<std::mutex> lock(m_callbackMutex);
|
|
|
|
auto itr = m_callbackMap.find(callbackId);
|
|
Q_ASSERT(itr != m_callbackMap.end());
|
|
|
|
// pull our callback out of the map
|
|
auto callback = itr->second;
|
|
m_callbackMap.erase(itr);
|
|
|
|
lock.unlock();
|
|
|
|
callback(reply);
|
|
|
|
reply->deleteLater();
|
|
});
|
|
}
|
|
|
|
// HttpClient Destructor
|
|
HttpClient::~HttpClient() {
|
|
delete m_networkManager;
|
|
m_networkManager = nullptr;
|
|
}
|
|
|
|
// HttpClient::request
|
|
void HttpClient::postJson(const std::string& url, const std::string& payload, ReplyCallback callback) {
|
|
|
|
std::lock_guard<std::mutex> guard(m_callbackMutex);
|
|
|
|
m_lastCallbackId++;
|
|
m_callbackMap[m_lastCallbackId] = callback;
|
|
|
|
QNetworkRequest request;
|
|
request.setUrl(QUrl(url.c_str()));
|
|
|
|
// qDebug() << "POSTing to " << url.c_str();
|
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
|
request.setRawHeader("Host", "localhost");
|
|
|
|
QNetworkReply* reply = m_networkManager->post(request, QByteArray(payload.c_str()));
|
|
|
|
// set our callbackId on this reply so that we can correlate the response with the callback
|
|
reply->setProperty("callbackId", QVariant(m_lastCallbackId));
|
|
|
|
}
|
|
|
|
// HttpClient::request
|
|
void HttpClient::get(const std::string& url, ReplyCallback callback) {
|
|
|
|
std::lock_guard<std::mutex> guard(m_callbackMutex);
|
|
|
|
// TODO: DRY
|
|
m_lastCallbackId++;
|
|
m_callbackMap[m_lastCallbackId] = callback;
|
|
|
|
QNetworkRequest request;
|
|
request.setUrl(QUrl(url.c_str()));
|
|
|
|
request.setRawHeader("Host", "localhost");
|
|
|
|
QNetworkReply* reply = m_networkManager->get(request);
|
|
|
|
// set our callbackId on this reply so that we can correlate the response with the callback
|
|
reply->setProperty("callbackId", QVariant(m_lastCallbackId));
|
|
|
|
}
|
|
|