75 lines
2.0 KiB
C++
75 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "std.cpp"
|
|
#include "Packer.h"
|
|
|
|
#define COMMAND_TUNNEL_START_TCP 62
|
|
#define COMMAND_TUNNEL_START_UDP 63
|
|
#define COMMAND_TUNNEL_WRITE_TCP 64
|
|
#define COMMAND_TUNNEL_WRITE_UDP 65
|
|
#define COMMAND_TUNNEL_CLOSE 66
|
|
#define COMMAND_TUNNEL_REVERSE 67
|
|
#define COMMAND_TUNNEL_ACCEPT 68
|
|
#define COMMAND_TUNNEL_PAUSE 69
|
|
#define COMMAND_TUNNEL_RESUME 70
|
|
|
|
#define TUNNEL_CREATE_SUCCESS 0
|
|
#define TUNNEL_CREATE_ERROR 1
|
|
|
|
#define TUNNEL_STATE_CLOSE 0
|
|
#define TUNNEL_STATE_READY 1
|
|
#define TUNNEL_STATE_CONNECT 2
|
|
|
|
#define TUNNEL_MODE_SEND_TCP 0
|
|
#define TUNNEL_MODE_SEND_UDP 1
|
|
#define TUNNEL_MODE_REVERSE_TCP 2
|
|
|
|
#define TUNNEL_BUFFER_HIGH_WATERMARK 0x400000 // 4MB: stop reading
|
|
#define TUNNEL_BUFFER_LOW_WATERMARK 0x100000 // 1MB: resume reading
|
|
#define TUNNEL_BUFFER_HARD_CAP 0x1000000 // 16MB: close channel
|
|
|
|
struct TunnelData {
|
|
ULONG channelID;
|
|
ULONG type;
|
|
SOCKET sock;
|
|
BYTE state;
|
|
BYTE mode;
|
|
ULONG i_address;
|
|
WORD port;
|
|
ULONG waitTime;
|
|
ULONG startTick;
|
|
ULONG closeTimer;
|
|
CHAR* writeBuffer;
|
|
ULONG writeBufferSize;
|
|
BOOL paused;
|
|
BOOL server_paused;
|
|
};
|
|
|
|
class Proxyfire
|
|
{
|
|
public:
|
|
Vector<TunnelData> tunnels;
|
|
|
|
void ProcessTunnels(Packer* packer);
|
|
|
|
void CheckProxy(Packer* packer);
|
|
ULONG RecvProxy(Packer* packer);
|
|
void FlushProxy(Packer* packer);
|
|
void CloseProxy();
|
|
|
|
void ConnectMessageTCP(ULONG channelId, ULONG type, CHAR* address, WORD port, Packer* outPacker);
|
|
void ConnectMessageUDP(ULONG channelId, CHAR* address, WORD port, Packer* outPacker);
|
|
void ConnectWriteTCP(ULONG channelId, CHAR* data, ULONG dataSize, Packer* outPacker);
|
|
|
|
void ConnectWriteUDP(ULONG channelId, CHAR* data, ULONG dataSize);
|
|
void ConnectClose(ULONG channelId);
|
|
void ConnectMessageReverse(ULONG tunnelId, WORD port, Packer* outPacker);
|
|
|
|
void ConnectPause(ULONG channelId);
|
|
void ConnectResume(ULONG channelId);
|
|
|
|
void AddProxyData(ULONG channelId, ULONG type, SOCKET sock, ULONG waitTime, ULONG mode, ULONG address, WORD port, ULONG state);
|
|
|
|
static void* operator new(size_t sz);
|
|
static void operator delete(void* p) noexcept;
|
|
}; |