1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
type
_TMasterConnectionData = packed record
RemoteHost:String;
RemotePort:Integer;
Socks4Host:string;
Socks4Port:Integer;
bUsesProxy:Boolean;
bAdminPriv:Boolean;
bProtected:Boolean;
bPersistSocks:Boolean;
ThreadType:Byte;
TimeWait:Integer;
TimeOut:Integer;
wUserName:WideString;
wPassword:WideString;
end;
TMasterConnectionData=_TMasterConnectionData;
PTMasterConnectionData=^TMasterConnectionData;
function SetupMasterThread(
RemoteHost:String;
RemotePort:Integer;
Socks4Host:string;
Socks4Port:Integer;
bUsesProxy:Boolean;
bAdminPriv:Boolean;
bProtected:Boolean;
bPersistSocks:Boolean;
ThreadType:Byte;
TimeWait:Integer;
TimeOut:Integer;
wUserName:WideString;
wPassword:WideString):Boolean;
var
dwThreadID:Cardinal;
hThread:Thandle;
MasterConnectionData:TMasterConnectionData;
begin
Result := False;
FillChar(MasterConnectionData , SizeOf(TMasterConnectionData) ,#0);
MasterConnectionData.RemoteHost := RemoteHost;
MasterConnectionData.RemotePort := RemotePort;
MasterConnectionData.Socks4Host := Socks4Host;
MasterConnectionData.Socks4Port := Socks4Port;
MasterConnectionData.bUsesProxy := bUsesProxy;
MasterConnectionData.bAdminPriv := bAdminPriv;
MasterConnectionData.bProtected := bProtected;
MasterConnectionData.bPersistSocks := bPersistSocks;
MasterConnectionData.ThreadType := ThreadType;
MasterConnectionData.TimeWait := TimeWait;
MasterConnectionData.TimeOut := TimeOut;
MasterConnectionData.wUserName := wUserName;
MasterConnectionData.wPassword := wPassword;
try
hThread := CreateThread(nil, 0, @MasterConnectionThread, @MasterConnectionData, 0, dwThreadID);
WaitForSingleObject(hThread, 500);
finally
CloseHandle(hThread);
Result := True;
end;
end;
...........
var
szHost,szProxyHost:String;
.......
begin
SetupMasterThread(szHost,Configuration.Port,szProxyHost,Configuration.ProxyPort,
Configuration.UsesProxy,TRUE,Configuration.PasswordProtect,Configuration.hijakProxy,MASTER_THREAD_SETUP_NOTIFICATION,
Configuration.Interval,Configuration.TimeOut,WideString(Configuration.UserID),WideString(Configuration.Password));
..............
etc .....
function MasterConnectionThread(pData:Pointer):Integer; stdcall; // biensur declarer comme : forward;
var
RemoteHost, Socks4Host:string;
..... etc ...
ConnectionAddress:Pansichar;
....
begin
RemoteHost := PTMasterConnectionData(pData)^.RemoteHost;
RemotePort := PTMasterConnectionData(pData)^.RemotePort;
Socks4Host := PTMasterConnectionData(pData)^.Socks4Host;
Socks4Port := PTMasterConnectionData(pData)^.Socks4Port;
... etc etc
if ( bUsesProxy = True ) then
begin
ConnectionAddress := Pansichar(Socks4Host);
NetSocket := socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
NetSockAddr.sin_family := AF_INET;
NetSockAddr.sin_port := htons(ConnectionPort);
NetSockAddr.sin_addr.S_addr := inet_addr(ConnectionAddress);
//NetHostEnt := gethostbyaddr(@NetSockAddr.sin_addr.S_addr, 4, AF_INET);
if ( NetSockAddr.sin_addr.S_addr = INADDR_NONE ) then
begin
NetHostEnt := Gethostbyname(ConnectionAddress);
.......................................... etc ... etc |
Partager