📄 proxy1.pas
字号:
unit proxy1;
interface
uses classes, proxy2, httpProxyExtend, WSocket, Dialogs;
const
ProxyServerVersion = 100;
ProxyServerCopyright = 'All rights reserved by Thorsten Schmidt';
type
TProxyServer = class;
TProxyClientConnectEvent = procedure (Sender : TObject;
Client : TProxyClient;
Error : Word) of object;
TProxyServer = class(TWSocket)
protected
FConnectionType : TConnection;
FListening : boolean;
FClientClass : TProxyClientClass;
FClientNum : LongInt;
FMaxClients : LongInt;
Proc_OnClientConnect : TProxyClientConnectEvent;
Proc_OnClientDisconnect : TProxyClientConnectEvent;
Proc_P1_Dbgout : TProxyClientEvent;
Proc_P2_Dbgout : TProxyClientEvent;
Proc_VIP_Dbgout : TProxyClientEvent;
Proc_P1_DataReceived, Proc_P2_DataReceived : TProxyClientData;
Proc_P1_HttpHeader, Proc_P1_HttpHeaderModified, Proc_P2_HttpHeader : TProxyClientData;
Proc_P1_HttpContent, Proc_P2_HttpContent : TProxyClientData;
dest_addr, dest_port, dest_proto : string;
FssocksAuthentication : TSocksAuthentication;
FsSocksLevel : string;
FsSocksPassword : string;
FsSocksPort : string;
FsSocksServer : string;
FsSocksUsercode : string;
procedure ClientDestroy(Sender : TObject);
procedure donothing(Sender : Tobject);
procedure AddListEntry(toadd : TProxyClient);
procedure DelListEntry(todel : TProxyClient);
function GetClientCount : Integer; virtual;
function GetClient(nIndex : Integer) : TProxyClientClass; virtual;
procedure TriggerSessionAvailable(Error : Word); override;
procedure TriggerClientConnect(Client : TProxyClient; Error : Word); virtual;
procedure TriggerClientDisconnect(Client : TProxyClient; Error : Word); virtual;
public
FClientList : TList;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function start : boolean ; // listen_port, listen_protocol and listen_addr must be set directly
function shutdown : boolean; reintroduce;
// closes all running connections and stops listening
function pause : boolean; reintroduce;
// pauses all running connections and pauses listening
function resume : boolean; reintroduce;
{ Check if a given object is one of our clients }
function IsClient(SomeThing : TObject) : Boolean;
{ TWSocketClient derived class to instanciate for each client }
{ Client[] give direct access to anyone of our clients }
property Client[nIndex : Integer] : TProxyClientClass
read GetClient;
published
property ClientClass : TProxyClientClass
read FClientClass
write FClientClass;
{ How many active clients we currently have }
property ClientCount : Integer
read GetClientCount;
{ -1 = infinite amount of clients; 0 = no clients are accepted }
property MaxClients : LongInt read FMaxClients
write FMaxClients;
{ Triggered when a client disconnect }
property OnClientDisconnect : TProxyClientConnectEvent
read Proc_OnClientDisconnect
write Proc_OnClientDisconnect;
{ Triggerred when a new client is connecting }
property OnClientConnect : TProxyClientConnectEvent
read Proc_OnClientConnect
write Proc_OnClientConnect;
{ Triggered when line 1/2 produces a message }
property OnP1Message : TProxyClientEvent
read Proc_P1_dbgout
write Proc_P1_dbgout;
property OnP2Message : TProxyClientEvent
read Proc_P2_dbgout
write Proc_P2_dbgout;
property OnVIPMessage : TProxyClientEvent //wird nur von TNew benutzt
read Proc_VIP_dbgout
write Proc_VIP_dbgout;
{ Triggered when line 1/2 receives data }
property OnP1DataReceived : TProxyClientData
read Proc_P1_DataReceived
write Proc_P1_DataReceived;
property OnP2DataReceived : TProxyClientData
read Proc_P2_DataReceived
write Proc_P2_DataReceived;
//HTTP spezifische Events
property OnP1HttpHeader : TProxyClientData
read Proc_P1_HttpHeader
write Proc_P1_HttpHeader;
property OnP1HttpHeaderModified : TProxyClientData
read Proc_P1_HttpHeaderModified
write Proc_P1_HttpHeaderModified;
property OnP2HttpHeader : TProxyClientData
read Proc_P2_HttpHeader
write Proc_P2_HttpHeader;
property OnP1HttpContent : TProxyClientData
read Proc_P1_HttpContent
write Proc_P1_HttpContent;
property OnP2HttpContent : TProxyClientData
read Proc_P2_HttpContent
write Proc_P2_HttpContent;
{Mu
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -