* Made creating socket handler configurable

git-svn-id: trunk@27570 -
This commit is contained in:
michael 2014-04-13 20:23:01 +00:00
parent 67e8a3bf54
commit cd05deafc2

View File

@ -40,6 +40,8 @@ Type
// During read of content, of Server did not specify contentlength, -1 is passed.
// CurrentPos is reset to 0 when the actual content is read, i.e. it is the position in the data, discarding header size.
TDataEvent = Procedure (Sender : TObject; Const ContentLength, CurrentPos : Int64) of object;
// Use this to set up a socket handler. UseSSL is true if protocol was https
TGetSocketHandlerEvent = Procedure (Sender : TObject; Const UseSSL : Boolean; Out AHandler : TSocketHandler) of object;
{ TFPCustomHTTPClient }
TFPCustomHTTPClient = Class(TComponent)
@ -65,6 +67,7 @@ Type
FSocket : TInetSocket;
FBuffer : Ansistring;
FUserName: String;
FOnGetSocketHandler : TGetSocketHandlerEvent;
function CheckContentLength: Int64;
function CheckTransferEncoding: string;
function GetCookies: TStrings;
@ -101,6 +104,8 @@ Type
Procedure DoMethod(Const AMethod,AURL : String; Stream : TStream; Const AllowedResponseCodes : Array of Integer); virtual;
// Send request to server: construct request line and send headers and request body.
Procedure SendRequest(const AMethod: String; URI: TURI); virtual;
// Create socket handler for protocol AProtocol. Calls OnGetSocketHandler.
Function GetSocketHandler(Const UseSSL : Boolean) : TSocketHandler; virtual;
Public
Constructor Create(AOwner: TComponent); override;
Destructor Destroy; override;
@ -239,6 +244,8 @@ Type
Property OnDataReceived : TDataEvent Read FOnDataReceived Write FOnDataReceived;
// Called when headers have been processed.
Property OnHeaders : TNotifyEvent Read FOnHeaders Write FOnHeaders;
// Called to create socket handler. If not set, or Nil is returned, a standard socket handler is created.
Property OnGetSocketHandler : TGetSocketHandlerEvent Read FOnGetSocketHandler Write FOnGetSocketHandler;
end;
@ -411,6 +418,19 @@ begin
Result:=Result+'?'+URI.Params;
end;
Function TFPCustomHTTPClient.GetSocketHandler(Const UseSSL : Boolean) : TSocketHandler;
begin
Result:=Nil;
if Assigned(FonGetSocketHandler) then
FOnGetSocketHandler(Self,UseSSL,Result);
if (Result=Nil) then
If UseSSL then
Result:=TSSLSocketHandler.Create
else
Result:=TSocketHandler.Create;
end;
procedure TFPCustomHTTPClient.ConnectToServer(const AHost: String;
APort: Integer; UseSSL : Boolean = False);
@ -424,10 +444,7 @@ begin
Aport:=443
else
Aport:=80;
If UseSSL then
G:=TSSLSocketHandler.Create
else
G:=TSocketHandler.Create;
G:=GetSocketHandler(UseSSL);
FSocket:=TInetSocket.Create(AHost,APort,G);
FSocket.Connect;
end;