72 lines
2.1 KiB
C++
72 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include <netinet/in.h>
|
|
#include <misc/queue.h>
|
|
#include <protocol/buffers.h>
|
|
#include <event.h>
|
|
|
|
namespace ts {
|
|
namespace flood {
|
|
union IPv4 {
|
|
uint32_t addr;
|
|
struct __attribute__ ((__packed__)) {
|
|
uint8_t _1;
|
|
uint8_t _2;
|
|
uint8_t _3;
|
|
uint8_t _4;
|
|
};
|
|
|
|
inline std::string string(){
|
|
std::stringstream ss;
|
|
ss << (int) _1 << "." << (int) _2 << "." << (int) _3 << "." << (int) _4;
|
|
return ss.str();
|
|
}
|
|
};
|
|
|
|
class TSClient;
|
|
enum ProxyState {
|
|
PROXY_UNCONNECTED,
|
|
PROXY_INIT_METHODS,
|
|
PROXY_INIT_CONNECTION,
|
|
PROXY_CONNECTED
|
|
};
|
|
|
|
class ProxiedClient {
|
|
public:
|
|
ProxiedClient(event_base*,const sockaddr_in& proxyAddr, const sockaddr_in& remoteAddr);
|
|
~ProxiedClient();
|
|
|
|
bool connect();
|
|
void disconnect();
|
|
void closeConnection();
|
|
|
|
void handleMessage(const std::string& message);
|
|
void sendMessage(const std::string &);
|
|
private:
|
|
static void handleEventRead(int, short, void*);
|
|
static void handleEventWrite(int, short, void*);
|
|
|
|
void requestProxyConnection();
|
|
void handleProxyMessage(const std::string &);
|
|
|
|
void proxyInizalisized();
|
|
|
|
event_base* evBase = nullptr;
|
|
event* rEvent = nullptr;
|
|
event* wEvent = nullptr;
|
|
int fileDescriptor;
|
|
ProxyState state = ProxyState::PROXY_UNCONNECTED;
|
|
threads::Mutex stateLock;
|
|
sockaddr_in* proxyAddr = nullptr;
|
|
sockaddr_in* relayAddr = nullptr;
|
|
sockaddr_in* localAddr = nullptr;
|
|
sockaddr_in* remoteAddr = nullptr;
|
|
|
|
TAILQ_HEAD(, buffer::RawBuffer) writeQueue;
|
|
threads::Mutex queueLock;
|
|
|
|
TSClient* client = nullptr;
|
|
};
|
|
}
|
|
} |