Below a simple test program, if you don't have ICS-SSL exchange
TSslHttpCli by THttpCli. Does it work for you?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OverbyteIcsWndControl, OverbyteIcsHttpProt, StdCtrls;
type
TMyThread = class(TThread)
public
procedure Execute; override;
end;
TForm1 = class(TForm)
SslHttpCli1: TSslHttpCli;
SslHttpCli2: TSslHttpCli;
btnAttachTothread: TButton;
btnAttachtoMainThread: TButton;
procedure btnAttachTothreadClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnAttachtoMainThreadClick(Sender: TObject);
private
FThread : TMyThread;
public
{ Public declarations }
protected
procedure WmAttachMain(var Msg: TMessage); message WM_USER + 3;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyThread }
procedure TMyThread.Execute;
var
Msg: tagMsg;
begin
while GetMessage(Msg, 0, 0, 0) do
begin
if Msg.message = WM_USER + 1 then
TSslHttpCli(Msg.WParam).ThreadAttach
else if Msg.message = WM_USER + 2 then
begin
TSslHttpCli(Msg.WParam).ThreadDetach;
Postmessage(Form1.Handle, WM_USER + 3, Msg.WParam, 0);
end
else begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
Terminate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FThread := TMyThread.Create(False);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
PostThreadMessage(FThread.ThreadID, WM_QUIT, 0, 0);
end;
procedure TForm1.WmAttachMain(var Msg: TMessage);
begin
TSslHttpCli(Msg.WParam).ThreadAttach;
end;
procedure TForm1.btnAttachtoMainThreadClick(Sender: TObject);
begin
PostThreadMessage(FThread.ThreadID, WM_USER + 2, Integer(SslHttpCli1), 0);
PostThreadMessage(FThread.ThreadID, WM_USER + 2, Integer(SslHttpCli2), 0);
end;
procedure TForm1.btnAttachTothreadClick(Sender: TObject);
begin
SslHttpCli1.ThreadDetach;
PostThreadMessage(FThread.ThreadID, WM_USER + 1, Integer(SslHttpCli1), 0);
SslHttpCli2.ThreadDetach;
PostThreadMessage(FThread.ThreadID, WM_USER + 1, Integer(SslHttpCli2), 0);
end;
end.
// DFM //
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 293
ClientWidth = 426
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object btnAttachTothread: TButton
Left = 38
Top = 88
Width = 127
Height = 25
Caption = 'AttachTothread'
TabOrder = 0
OnClick = btnAttachTothreadClick
end
object btnAttachtoMainThread: TButton
Left = 38
Top = 119
Width = 127
Height = 25
Caption = 'AttachtoMainThread'
TabOrder = 1
OnClick = btnAttachtoMainThreadClick
end
object SslHttpCli1: TSslHttpCli
LocalAddr = '0.0.0.0'
ProxyPort = '80'
Agent = 'Mozilla/4.0 (compatible; ICS)'
Accept = 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*'
NoCache = False
ContentTypePost = 'application/x-www-form-urlencoded'
MultiThreaded = False
RequestVer = '1.0'
FollowRelocation = True
LocationChangeMaxCount = 5
BandwidthLimit = 10000
BandwidthSampling = 1000
Options = []
SocksAuthentication = socksNoAuthentication
Left = 32
Top = 36
end
object SslHttpCli2: TSslHttpCli
LocalAddr = '0.0.0.0'
ProxyPort = '80'
Agent = 'Mozilla/4.0 (compatible; ICS)'
Accept = 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*'
NoCache = False
ContentTypePost = 'application/x-www-form-urlencoded'
MultiThreaded = False
RequestVer = '1.0'
FollowRelocation = True
LocationChangeMaxCount = 5
BandwidthLimit = 10000
BandwidthSampling = 1000
Options = []
SocksAuthentication = socksNoAuthentication
Left = 64
Top = 36
end
end
Fastream Technologies wrote:
> Hello,
>
> ----- Original Message -----
> From: "Arno Garrels" <[EMAIL PROTECTED]>
> To: "ICS support mailing" <[email protected]>
> Sent: Thursday, June 08, 2006 7:48 PM
> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>
>
>> Fastream Technologies wrote:
>>> Arno,
>>>
>>> In the last code you sent, this problem STILL exists!
>>
>> I'm afraid, the fix below is in the code since Monday.
>
> Perhaps we need another -more comprehensive- fix. Francois, AFAIK you
> were able to reproduce the problem, right? Could you check with the
> latest code. Something must have gone bad because when I said it was
> fixed, it was fixed.
>
>>
>>> The other
>>> problem was because of wrong package lib included in the project.
>>
>> What "other problem" do you mean (sounds very mysterious to me)?
>
> I mean the half downloads problem. That was because two ics packages
> were linked. :o( Sorry for bothering you guys. Your suggestion that
> the package was not good worked for me to find out...
>
> Best Regards,
>
> SZ
>
>>
>>> Sorry for that.
>>>
>>> Best Regards,
>>>
>>> SZ
>>>
>>> ----- Original Message -----
>>> From: "Francois PIETTE" <[EMAIL PROTECTED]>
>>> To: "ICS support mailing" <[email protected]>
>>> Sent: Monday, June 05, 2006 2:35 PM
>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>>
>>>
>>>> Still one problem. Arno fixed it (He sent a private message to me).
>>>> Move the line
>>>> FWndHandler := nil; // THIS ONE ADDED
>>>> from ThreadDetach to DeallocateHWnd so that the later looks like:
>>>> procedure TIcsWndControl.DeallocateHWnd;
>>>> begin
>>>> if FHandle = 0 then
>>>> Exit; // Already done
>>>>
>>>> GWndHandlerPool.Lock;
>>>> try
>>>> FreeMsgHandlers;
>>>> if Assigned(FWndHandler) and (FWndHandler.FMsgCnt <= 0) then
>>>> GWndHandlerPool.FreeWndHandler(FWndHandler);
>>>> FHandle := 0;
>>>> FWndHandler := nil; // THIS ONE ADDED
>>>> finally
>>>> GWndHandlerPool.UnLock;
>>>> end;
>>>> end;
>>>>
>>>> Thank to Arno.
>>>>
>>>> --
>>>> Contribute to the SSL Effort. Visit
>>>> http://www.overbyte.be/eng/ssl.html --
>>>> [EMAIL PROTECTED]
>>>> http://www.overbyte.be
>>>>
>>>>
>>>>
>>>> ----- Original Message -----
>>>> From: "Francois PIETTE" <[EMAIL PROTECTED]>
>>>> To: "ICS support mailing" <[email protected]>
>>>> Sent: Monday, June 05, 2006 1:11 PM
>>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>>>
>>>>
>>>>> Problem fixed !
>>>>>
>>>>> In OverbyteIcsHttpProt.pas, add:
>>>>>
>>>>> {$IFDEF COMPILER2_UP}
>>>>> procedure THttpCli.ThreadAttach;
>>>>> begin
>>>>> inherited ThreadAttach;
>>>>> FCtrlSocket.ThreadAttach;
>>>>> end;
>>>>>
>>>>> procedure THttpCli.ThreadDetach;
>>>>> begin
>>>>> inherited ThreadDetach;
>>>>> FCtrlSocket.ThreadDetach;
>>>>> end;
>>>>> {$ENDIF}
>>>>>
>>>>> Don't forget to add the declarations in the public section.
>>>>>
>>>>> In OverbyteIcsWndControl, add a line in ThreadDetach so that it
>>>>> looks like:
>>>>> procedure TIcsWndControl.ThreadDetach;
>>>>> begin
>>>>> if GetCurrentThreadID <> FThreadID then
>>>>> raise EIcsException.Create('Cannot detach from another
>>>>> thread'); Self.DeallocateHWnd;
>>>>> FWndHandler := nil; // THIS ONE ADDED
>>>>> end;
>>>>>
>>>>>
>>>>> In OverbyteIcsWSocket.pas, delete the declaration of
>>>>> TCustomWSocket.FThreadID.
>>>>>
>>>>> That's it.
>>>>> Should work. At least it work in my small test prog:
>>>>> Create a form, drop a TButton, a TMemo and a THttpCli. Add the
>>>>> following code:
>>>>>
>>>>> unit OverbyteIcsSimpleThread1;
>>>>>
>>>>> interface
>>>>>
>>>>> uses
>>>>> Windows, Messages, SysUtils, Variants, Classes, Graphics,
>>>>> Controls, Forms,
>>>>> Dialogs, StdCtrls, OverbyteIcsWndControl, OverbyteIcsWSocket,
>>>>> OverbyteIcsHttpProt;
>>>>>
>>>>> type
>>>>> TWorkerThread = class(TThread)
>>>>> public
>>>>> FHttpCli : THttpCli;
>>>>> procedure HttpCliRequestDone(Sender : TObject; RqType:
>>>>> THttpRequest; ErrCode : Word);
>>>>> procedure Execute; override;
>>>>> procedure ShowDoc;
>>>>> end;
>>>>>
>>>>> TForm1 = class(TForm)
>>>>> HttpCli1: THttpCli;
>>>>> DoButton: TButton;
>>>>> Memo1: TMemo;
>>>>> procedure DoButtonClick(Sender: TObject);
>>>>> private
>>>>> FWorkerThread : TWorkerThread;
>>>>> end;
>>>>>
>>>>> var
>>>>> Form1: TForm1;
>>>>>
>>>>> implementation
>>>>>
>>>>> {$R *.dfm}
>>>>>
>>>>> procedure TWorkerThread.Execute;
>>>>> begin
>>>>> FHttpCli.ThreadAttach;
>>>>> FHttpCli.MultiThreaded := TRUE;
>>>>> FHttpCli.URL := 'http://localhost';
>>>>> FHttpCli.RcvdStream := TMemoryStream.Create;
>>>>> FHttpCli.OnRequestDone := HttpCliRequestDone;
>>>>> FHttpCli.GetASync;
>>>>> FHttpCli.MessageLoop;
>>>>> FHttpCli.ThreadDetach;
>>>>> FHttpCli.MultiThreaded := FALSE;
>>>>> end;
>>>>>
>>>>> procedure TWorkerThread.HttpCliRequestDone(Sender : TObject;
>>>>> RqType: THttpRequest; ErrCode : Word);
>>>>> begin
>>>>> FHttpCli.RcvdStream.Seek(0, 0);
>>>>> Synchronize(ShowDoc);
>>>>> FHttpCli.RcvdStream.Free;
>>>>> FHttpCli.RcvdStream := nil;
>>>>> PostMessage(FHttpCli.Handle, WM_QUIT, 0, 0);
>>>>> end;
>>>>>
>>>>> procedure TWorkerThread.ShowDoc;
>>>>> begin
>>>>> Form1.Memo1.Lines.LoadFromStream(FHttpCli.RcvdStream);
>>>>> end;
>>>>>
>>>>> procedure TForm1.DoButtonClick(Sender: TObject);
>>>>> begin
>>>>> HttpCli1.ThreadDetach;
>>>>> FWorkerThread := TWorkerThread.Create(TRUE);
>>>>> FWorkerThread.FreeOnTerminate := TRUE;
>>>>> FWorkerThread.FHttpCli := HttpCli1;
>>>>> FWorkerThread.Resume;
>>>>> end;
>>>>>
>>>>> end.
>>>>> --
>>>>> [EMAIL PROTECTED]
>>>>> http://www.overbyte.be
>>>>>
>>>>>
>>>>>
>>>>> ----- Original Message -----
>>>>> From: "Francois PIETTE" <[EMAIL PROTECTED]>
>>>>> To: "ICS support mailing" <[email protected]>
>>>>> Sent: Monday, June 05, 2006 12:25 PM
>>>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>>>>
>>>>>
>>>>>> Yes, I found the problem. More complex to solve than what I
>>>>>> thought first.
>>>>>>
>>>>>> --
>>>>>> [EMAIL PROTECTED]
>>>>>> http://www.overbyte.be
>>>>>>
>>>>>> ----- Original Message -----
>>>>>> From: "Fastream Technologies" <[EMAIL PROTECTED]>
>>>>>> To: "ICS support mailing" <[email protected]>
>>>>>> Sent: Monday, June 05, 2006 11:37 AM
>>>>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>>>>>
>>>>>>
>>>>>>> Francois,
>>>>>>>
>>>>>>> Have you been able to reproduce the problem there?
>>>>>>>
>>>>>>> Regards,
>>>>>>>
>>>>>>> SZ
>>>>>>>
>>>>>>> ----- Original Message -----
>>>>>>> From: "Fastream Technologies" <[EMAIL PROTECTED]>
>>>>>>> To: "ICS support mailing" <[email protected]>
>>>>>>> Sent: Sunday, June 04, 2006 6:24 PM
>>>>>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>>>>>>
>>>>>>>
>>>>>>>> AFAIU, instead of FWindowHandle being defined as window, we now
>>>>>>>> have the
>>>>>>>> entire hierarchy being derived from a Twndcontrol which pools
>>>>>>>> and shares
>>>>>>>> the
>>>>>>>> windows. But I am clueless in terms of this bug as well. I
>>>>>>>> sent a private
>>>>>>>> email to Francois asking for consultancy about this.
>>>>>>>>
>>>>>>>> Thanks anyway,
>>>>>>>>
>>>>>>>> SZ
>>>>>>>>
>>>>>>>> ----- Original Message -----
>>>>>>>> From: "Arno Garrels" <[EMAIL PROTECTED]>
>>>>>>>> To: "ICS support mailing" <[email protected]>
>>>>>>>> Sent: Sunday, June 04, 2006 6:06 PM
>>>>>>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>>>>>>>
>>>>>>>>
>>>>>>>>> Fastream Technologies wrote:
>>>>>>>>>> Nothing changes. This is my second answer to this question as
>>>>>>>>>> sometimes my email server gets swamped :(...
>>>>>>>>>>
>>>>>>>>>> I still get the exception even though the package compiles
>>>>>>>>>> with no errors.
>>>>>>>>>
>>>>>>>>> Looks like a bit more complicated. Francois probably knows
>>>>>>>>> better how to fix it, I still haven't fully got the logic of
>>>>>>>>> the new version, sorry.
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Regards,
>>>>>>>>>>
>>>>>>>>>> SZ
>>>>>>>>>>
>>>>>>>>>> ----- Original Message -----
>>>>>>>>>> From: "Arno Garrels" <[EMAIL PROTECTED]>
>>>>>>>>>> To: "ICS support mailing" <[email protected]>
>>>>>>>>>> Sent: Sunday, June 04, 2006 5:31 PM
>>>>>>>>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Fastream Technologies wrote:
>>>>>>>>>>>> It is used here:
>>>>>>>>>>>
>>>>>>>>>>> Yes I know, but what happens? As Francois already supposed
>>>>>>>>>>> it is in fact redefined and never assigned in
>>>>>>>>>>> TCustomWSocket.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ---
>>>>>>>>>>> Arno Garrels [TeamICS]
>>>>>>>>>>> http://www.overbyte.be/eng/overbyte/teamics.html
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> To unsubscribe or change your settings for TWSocket mailing
>>>>>>>>>>> list please goto
>>>>>>>>>>> http://www.elists.org/mailman/listinfo/twsocket Visit our
>>>>>>>>>>> website at http://www.overbyte.be
>>>>>>>>> --
>>>>>>>>> To unsubscribe or change your settings for TWSocket mailing
>>>>>>>>> list please goto
>>>>>>>>> http://www.elists.org/mailman/listinfo/twsocket Visit our
>>>>>>>>> website at http://www.overbyte.be
>>>>>>>>
>>>>>>>> --
>>>>>>>> To unsubscribe or change your settings for TWSocket mailing
>>>>>>>> list please goto
>>>>>>>> http://www.elists.org/mailman/listinfo/twsocket Visit our
>>>>>>>> website at http://www.overbyte.be
>>>>>>>
>>>>>>> --
>>>>>>> To unsubscribe or change your settings for TWSocket mailing list
>>>>>>> please goto http://www.elists.org/mailman/listinfo/twsocket
>>>>>>> Visit our website at http://www.overbyte.be
>>>>>>
>>>>>> --
>>>>>> To unsubscribe or change your settings for TWSocket mailing list
>>>>>> please goto http://www.elists.org/mailman/listinfo/twsocket
>>>>>> Visit our website at http://www.overbyte.be
>>>>>
>>>>> --
>>>>> To unsubscribe or change your settings for TWSocket mailing list
>>>>> please goto http://www.elists.org/mailman/listinfo/twsocket
>>>>> Visit our website at http://www.overbyte.be
>>>>
>>>> --
>>>> To unsubscribe or change your settings for TWSocket mailing list
>>>> please goto http://www.elists.org/mailman/listinfo/twsocket
>>>> Visit our website at http://www.overbyte.be
>> --
>> To unsubscribe or change your settings for TWSocket mailing list
>> please goto http://www.elists.org/mailman/listinfo/twsocket
>> Visit our website at http://www.overbyte.be
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be