Hi
Thanks for fast respond ....
I put code (for logging) on event OnBgException ...
Result:
[12:21:19.814] Logger:12:21:19:770 State = httpNotConnected
[12:21:19.815] Logger:12:21:19:770 Login "www..."
[12:21:19.816] Logger:12:21:19:773 State = httpDnsLookup
[12:21:19.817] Logger:12:21:19:817 State = httpDnsLookupDone
[12:21:19.819] Logger:12:21:19:819 connect to "IP"/443
[12:21:19.822] Logger:12:21:19:822 00AA6F20 Socket handle created 968
[12:21:19.825] Logger:12:21:19:824 TWSocket will connect to "IP":443
[12:21:19.843] Logger:12:21:19:843 SessionConnected
[12:21:19.844] Logger:12:21:19:843 00AA6F20
TCustomSslWSocket.Do_FD_WRITE 968
*[12:21:21.159] TMyHTTPSCli.SslHttpCliBgException=Access violation at
address 5D2571E4 in module 'SSLEAY32.DLL'. Read of address 00000034
(this is event OnBgException)*
[12:21:21.162] Logger:12:21:21:162 State = httpAborting
[12:21:21.164] Logger:12:21:21:164 00AA6F20 *CloseCalled 968
[12:21:21.167] Logger:12:21:21:167 00AA6F20 TCustomWSocket.Shutdown 1 968
[12:21:21.170] Logger:12:21:21:170 SessionClosed Error: 0
[12:21:21.174] Logger:12:21:21:174 State = httpReady
*My code:
*....
type THttpsThread = class(TThread)*
...
*constructor THttpsThread.Create;
begin
inherited Create(False);
IcsLogger := TIcsLogger.Create(nil);
with IcsLogger do
begin
Name := 'IcsLogger1';
TimeStampFormatString := 'hh:nn:ss:zzz';
TimeStampSeparator := ' ';
LogFileOption := lfoOverwrite;
LogFileEncoding := lfeUtf8;
LogFileName := 'Debug_Out_HttpsTst.txt';
LogOptions := [loDestEvent, loDestFile, loDestOutDebug, loAddStamp,
loWsockErr,
loWsockInfo, loWsockDump, loSslErr, loSslInfo,
loSslDump, loProtSpecErr,
loProtSpecInfo, loProtSpecDump];
OnIcsLogEvent := IcsLoggerIcsLogEvent;
end;
SslContextCli := TSslContext.Create(nil);
with SslContextCli do
begin
Name := 'SslContext';
IcsLogger := IcsLogger;
SslCipherList := 'ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH';
SslCaFile:='';
SslCAFile:='';
SslCRLFile:='';
SslCRLPath:='';
SslDefaultSessionIDContext:='';
SslDHParamFile:='';
SslECDHMethod := sslECDH_P256;
SslOptions := [sslOpt_MICROSOFT_SESS_ID_BUG,
sslOpt_NETSCAPE_CHALLENGE_BUG,
sslOpt_NETSCAPE_REUSE_CIPHER_CHANGE_BUG,
sslOpt_MICROSOFT_BIG_SSLV3_BUFFER,
sslOpt_SSLEAY_080_CLIENT_DH_BUG, sslOpt_TLS_D5_BUG,
sslOpt_TLS_BLOCK_PADDING_BUG,
sslOpt_TLS_ROLLBACK_BUG, sslOpt_NO_SSLv2,
sslOpt_NO_SSLv3, sslOpt_NETSCAPE_CA_DN_BUG,
sslOpt_NETSCAPE_DEMO_CIPHER_CHANGE_BUG];
SslPassPhrase := 'password';
SslCertFile := "Path to pem cert file";
SslPrivKeyFile := "Path to pem cert file";
SslSessionCacheModes := [sslSESS_CACHE_CLIENT,
sslSESS_CACHE_NO_INTERNAL_LOOKUP, sslSESS_CACHE_NO_INTERNAL_STORE];
SslSessionCacheSize := 20480;
SslSessionTimeout := 300;
SslVerifyDepth := 9;
SslVerifyPeer := False;
SslVerifyPeerModes := [SslVerifyMode_PEER];
SslVerifyFlags := [];
SslVersionMethod := sslBestVer_CLIENT;
AutoEnableBuiltinEngines := False;
end;
SslAvlSessionCache := TSslAvlSessionCache.Create(nil);
with SslAvlSessionCache do
begin
Name := 'SslAvlSessionCache1';
IcsLogger := IcsLogger;
IdleTimeout := 30;
FlushInterval := 10000;
MaxCacheSize := 1000;
end;
SslHttpCli := TSslHttpCli.Create(nil);
FClientCerts := nil;
SslHttpCli.CtrlSocket.OnBgException := BackgroundException;
with SslHttpCli do
begin
Name := 'SslHttpCli';
LocalAddr := '0.0.0.0';
LocalAddr6 := '::';
ProxyPort := '80';
Agent := 'Mozilla/4.0 (compatible; ICS; MSIE 4.0)';
Accept := '';
ProxyConnection := 'Keep-Alive';
NoCache := True;
ContentTypePost := 'application/x-www-form-urlencoded';
RequestVer := '1.0';
FollowRelocation := False;
LocationChangeMaxCount := 5;
ServerAuth := httpAuthNone;
ProxyAuth := httpAuthNone;
BandwidthLimit := 10000;
BandwidthSampling := 1000;
Options := [];
IcsLogger := IcsLogger;
Timeout := 30;
SocksLevel := '5';
OnDocBegin := SslHttpCliDocBegin;
OnRequestDone := SslHttpCliRequestDone;
OnSendBegin := SslHttpCliSendBegin;
OnSendEnd := SslHttpCliSendEnd;
OnSslCliCertRequest := SslHttpCliSslCliCertRequest;
OnSslCliGetSession := SslHttpCliSslCliGetSession;
OnSslCliNewSession := SslHttpCliSslCliNewSession;
OnSslHandshakeDone := SslHttpCliSslHandshakeDone;
OnSslVerifyPeer := SslHttpCliSslVerifyPeer;
end;
FreeOnTerminate:=True;
end;
procedure TMyHTTPSCli.PrepareCli;
const
SocksLevelValues : array [0..2] of String = ('5', '4A', '4');
SslVersions : array [0..5] of TSslVersionMethod =
(sslBestVer_CLIENT,sslV2_CLIENT,sslV3_CLIENT,sslTLS_V1_CLIENT,sslTLS_V1_1_CLIENT,sslTLS_V1_2_CLIENT);
{ V8.01 }
var
cli:TSslHttpCli;
begin
cli:=SslHttpCli;
cli.SslContext:=nil;
cli.SslContext:=SslContextCli;
cli.ContentTypePost:= 'text/xml';
Cli.SslAcceptableHosts.Clear;
Cli.SslAcceptableHosts.Add('www ...');
cli.Accept:='text/xml';
cli.AcceptLanguage:='en';
cli.Timeout:=30;
cli.ProxyConnection:='';
cli.Username:='';
cli.Password:='';
cli.ModifiedSince := 0;
cli.SocksServer := '';
cli.SocksPort := '';
cli.SocksLevel := '5';
cli.RequestVer := '1.0';
cli.URL := 'https:// .......';
cli.SslContext.SslVerifyPeer := false;
cli.SslPassPhrase := 'password';
cli.SslCertFile := "Path to pem cert file";
cli.SslPrivKeyFile := "Path to pem cert file";
cli.SslContext.SslVersionMethod := sslBestVer_CLIENT; { V8.01 }
cli.SslContext.SslCipherList :=
'ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH'; { V8.01 }
cli.SslContext.SslDHParamFile := ''; { V8.01 }
{ V8.01 - set options to force a single SSL/TLS version, not normally a
good idea,
but seems only reliable way of forcing use of a specific version }
cli.SslContext.SslOptions := cli.SslContext.SslOptions +
[sslOpt_NO_SSLv2, sslOpt_NO_SSLv3,
sslOpt_NO_TLSv1, sslOpt_NO_TLSv1_1,
sslOpt_NO_TLSv1_2];
if cli.SslContext.SslVersionMethod = sslV2_CLIENT then
cli.SslContext.SslOptions := cli.SslContext.SslOptions -
[sslOpt_NO_SSLv2]
else if cli.SslContext.SslVersionMethod = sslV3_CLIENT then
cli.SslContext.SslOptions := cli.SslContext.SslOptions -
[sslOpt_NO_SSLv3]
else if cli.SslContext.SslVersionMethod = sslTLS_V1_CLIENT then
cli.SslContext.SslOptions := cli.SslContext.SslOptions -
[sslOpt_NO_TLSv1]
else if cli.SslContext.SslVersionMethod = sslTLS_V1_1_CLIENT then
cli.SslContext.SslOptions := cli.SslContext.SslOptions -
[sslOpt_NO_TLSv1_1]
else if cli.SslContext.SslVersionMethod = sslTLS_V1_2_CLIENT then
cli.SslContext.SslOptions := cli.SslContext.SslOptions -
[sslOpt_NO_TLSv1_2]
else
cli.SslContext.SslOptions := cli.SslContext.SslOptions -
[sslOpt_NO_SSLv2, sslOpt_NO_SSLv3,
sslOpt_NO_TLSv1,
sslOpt_NO_TLSv1_1, sslOpt_NO_TLSv1_2];
try
cli.SslContext.InitContext; { V8.01 get any error now before
making request }
except
on E:Exception do begin
....
Exit;
end;
end;
end;
function TMyHTTPSCli.PostData(sData:string):boolean;
var
Cli:TSslHttpCli;
begin
try
try
Cli:=SslHttpCli;
Cli.CtrlSocket.ResetSSL;
Cli.SslContext.DeInitContext;
Cli.SendStream:= TStringStream.Create(sData);
PrepareCliTelekom(provider, val);
if not Cli.SslContext.IsCtxInitialized then Exit; { V8.01 }
DispMessage('HTTPS Connecting...',DISP_SMS, clBlue);
PrepareCli;
Cli.Post;
except
on E:Exception do begin
...
Exit;
end;
end;
finally
if Assigned(Cli.SendStream) then begin
Cli.SendStream.Free;
Cli.SendStream := nil;
end;
if Assigned(Cli.RcvdStream) then begin
Cli.RcvdStream.Free;
Cli.RcvdStream := nil;
end;
end;
end;
When I put this code on the Form (the form create all components), all
work ok.
Where I made mistake?
Regards
Boris
Signature
------------------------------------------------------------------------
Angus Robertson - Magenta Systems Ltd je 9/23/2015 ob 11:35 AM napisal:
How can I use TSslHttpCli in multi threading app.
There are no errors in the log you posted, only an abort after connect, you'll
need
to debug your code.
Angus
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be