proxy: add experimental async mode

This commit is contained in:
Vaxry
2025-04-15 16:55:21 +01:00
parent 5d7f0bb322
commit 5893be77c3
6 changed files with 76 additions and 23 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include <pistache/http.h>
#include <mutex>
// Giga hack, but we need it cuz the API is quite awkward and incomplete
#define private public
@@ -11,9 +12,6 @@ class CServerHandler : public Pistache::Http::Handler {
HTTP_PROTOTYPE(CServerHandler)
void init();
void finish();
void onRequest(const Pistache::Http::Request& req, Pistache::Http::ResponseWriter response);
void onTimeout(const Pistache::Http::Request& request, Pistache::Http::ResponseWriter response);
@@ -21,6 +19,8 @@ class CServerHandler : public Pistache::Http::Handler {
private:
void serveStop(const Pistache::Http::Request& req, Pistache::Http::ResponseWriter& response, int difficulty);
void proxyPass(const Pistache::Http::Request& req, Pistache::Http::ResponseWriter& response);
void proxyPassInternal(const Pistache::Http::Request& req, Pistache::Http::ResponseWriter& response, bool async = false);
void proxyPassAsync(const Pistache::Http::Request& req, Pistache::Http::ResponseWriter& response);
void challengeSubmitted(const Pistache::Http::Request& req, Pistache::Http::ResponseWriter& response);
std::string fingerprintForRequest(const Pistache::Http::Request& req);
std::string ipForRequest(const Pistache::Http::Request& req);
@@ -38,5 +38,18 @@ class CServerHandler : public Pistache::Http::Handler {
std::string error = "";
};
Pistache::Http::Experimental::Client* m_client = nullptr;
struct SProxiedRequest {
SProxiedRequest(const Pistache::Http::Request& r, Pistache::Http::ResponseWriter& resp) : req(r), response(std::move(resp)) {
;
}
Pistache::Http::Request req;
Pistache::Http::ResponseWriter response;
std::thread requestThread;
};
struct {
std::vector<std::shared_ptr<SProxiedRequest>> queue;
std::shared_ptr<std::mutex> queueMutex = std::make_shared<std::mutex>();
} m_asyncProxyQueue;
};