Files
UnlockedByDaylight/src/unlocker/proxy.h
T
2026-04-11 12:59:24 -03:00

59 lines
1.3 KiB
C++

#pragma once
#include <thread>
#include <atomic>
#include <string>
#include <vector>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include "ssl.h"
#include <nerutils/callback.h>
/*
TO-DO:
use random port, test availability
*/
#define PROXY_PORT 58421
#define PROXY_THREAD_COUNT 256
typedef unsigned __int64 SOCKET;
class Proxy
{
public:
Proxy();
~Proxy();
bool init();
void shutdown();
CallbackEvent<std::string&, const std::string&, std::string&> OnClientRequest;
CallbackEvent<const std::string&, std::string&, std::string&> OnServerResponse;
void addWhitelistDomain(const std::string& domain);
private:
void loop();
void handleClient(SOCKET clientSocket);
bool initSSL();
void cleanupSSL();
SOCKET _listenSocket = 0;
std::thread _workerThread;
std::atomic<bool> _running = false;
std::vector<std::thread> _poolThreads;
std::queue<SOCKET> _clientQueue;
std::mutex _queueMutex;
std::condition_variable _queueCond;
CertManager _certManager;
SSL_CTX* _clientCtx = nullptr;
std::vector<std::string> _whitelistDomains;
};