Browse Source

fcl-web: made TFPCustomHTTPServer.CreateUpgradeHandlerList virtual

mattias 2 years ago
parent
commit
7056ec1a87
1 changed files with 26 additions and 28 deletions
  1. 26 28
      packages/fcl-web/src/base/fphttpserver.pp

+ 26 - 28
packages/fcl-web/src/base/fphttpserver.pp

@@ -89,7 +89,7 @@ Type
     // Read the request content
     // Read the request content
     procedure ReadRequestContent(ARequest: TFPHTTPConnectionRequest); virtual;
     procedure ReadRequestContent(ARequest: TFPHTTPConnectionRequest); virtual;
     // Allow descendents to handle unknown headers
     // Allow descendents to handle unknown headers
-    procedure UnknownHeader(ARequest: TFPHTTPConnectionRequest; const AHeader: String); virtual;
+    procedure UnknownHeader({%H-}ARequest: TFPHTTPConnectionRequest; const {%H-}AHeader: String); virtual;
     // Handle request error, calls OnRequestError
     // Handle request error, calls OnRequestError
     procedure HandleRequestError(E : Exception); virtual;
     procedure HandleRequestError(E : Exception); virtual;
     // Handle unexpected error, calls OnUnexpectedError
     // Handle unexpected error, calls OnUnexpectedError
@@ -190,13 +190,12 @@ Type
 
 
   TFPHTTPServerConnectionListHandler = Class(TFPHTTPServerConnectionHandler)
   TFPHTTPServerConnectionListHandler = Class(TFPHTTPServerConnectionHandler)
   Private
   Private
-
     FList: TConnectionList;
     FList: TConnectionList;
   Protected
   Protected
     Type
     Type
       TConnectionIterator = Procedure (aConnection :TFPHTTPConnection; var aContinue : boolean) of object;
       TConnectionIterator = Procedure (aConnection :TFPHTTPConnection; var aContinue : boolean) of object;
     Function CreateList : TConnectionList;
     Function CreateList : TConnectionList;
-    Procedure CloseConnectionSocket(aConnection :TFPHTTPConnection; var aContinue : boolean);
+    Procedure CloseConnectionSocket(aConnection :TFPHTTPConnection; var {%H-}aContinue : boolean);
     Procedure Foreach(aIterator : TConnectionIterator);
     Procedure Foreach(aIterator : TConnectionIterator);
     Procedure RemoveConnection(aConnection :TFPHTTPConnection); override;
     Procedure RemoveConnection(aConnection :TFPHTTPConnection); override;
   Public
   Public
@@ -255,8 +254,8 @@ Type
          Property OnDone : TNotifyEvent Read FOnDone;
          Property OnDone : TNotifyEvent Read FOnDone;
        end;
        end;
     procedure ConnectionDone(Sender: TObject); virtual;
     procedure ConnectionDone(Sender: TObject); virtual;
-    procedure ScheduleRequest(aConnection: TFPHTTPConnection);virtual;
-    procedure CheckRequest(aConnection: TFPHTTPConnection; var aContinue : Boolean);virtual;
+    procedure ScheduleRequest(aConnection: TFPHTTPConnection); virtual;
+    procedure CheckRequest(aConnection: TFPHTTPConnection; var {%H-}aContinue: Boolean); virtual;
   Public
   Public
     Procedure CloseSockets; override;
     Procedure CloseSockets; override;
     procedure CheckRequests; override;
     procedure CheckRequests; override;
@@ -300,7 +299,6 @@ Type
 
 
   { TConnectionList }
   { TConnectionList }
 
 
-
   THTTPLogEvent = Procedure (aSender : TObject; aType: TEventType; Const Msg : String) of object;
   THTTPLogEvent = Procedure (aSender : TObject; aType: TEventType; Const Msg : String) of object;
   // Events in the lifetime of a request that are logged
   // Events in the lifetime of a request that are logged
   THTTPLogMoment = (hlmStartSocket,hlmCloseSocket,hlmConnect,hlmNoHTTPProtocol, hlmEmptyRequest, hlmRequestStart,hlmHeaders,hlmRequestDone,hlmUpgrade,hlmDisconnect,hlmError);
   THTTPLogMoment = (hlmStartSocket,hlmCloseSocket,hlmConnect,hlmNoHTTPProtocol, hlmEmptyRequest, hlmRequestStart,hlmHeaders,hlmRequestDone,hlmUpgrade,hlmDisconnect,hlmError);
@@ -347,7 +345,7 @@ Type
     procedure SetActive(const AValue: Boolean);
     procedure SetActive(const AValue: Boolean);
     procedure SetCertificateData(AValue: TCertificateData);
     procedure SetCertificateData(AValue: TCertificateData);
     procedure SetHostName(const AValue: string);
     procedure SetHostName(const AValue: string);
-    procedure SetIdle(AValue: TNotifyEvent);
+    procedure SetIdle(const AValue: TNotifyEvent);
     procedure SetOnAllowConnect(const AValue: TConnectQuery);
     procedure SetOnAllowConnect(const AValue: TConnectQuery);
     procedure SetAddress(const AValue: string);
     procedure SetAddress(const AValue: string);
     procedure SetPort(const AValue: Word);
     procedure SetPort(const AValue: Word);
@@ -364,9 +362,9 @@ Type
     Procedure DoLog(aMoment : THTTPLogMoment; const Fmt : String; Const Args : Array of const); overload;
     Procedure DoLog(aMoment : THTTPLogMoment; const Fmt : String; Const Args : Array of const); overload;
     Function CheckUpgrade(aConnection : TFPHTTPConnection; aRequest : TFPHTTPConnectionRequest) : Boolean;
     Function CheckUpgrade(aConnection : TFPHTTPConnection; aRequest : TFPHTTPConnectionRequest) : Boolean;
     // Override this to create Descendent
     // Override this to create Descendent
-    Function CreateUpgradeHandlerList : TUpgradeHandlerList;
+    Function CreateUpgradeHandlerList : TUpgradeHandlerList; virtual;
     // Override this to create descendent
     // Override this to create descendent
-    function CreateSSLSocketHandler: TSocketHandler;
+    function CreateSSLSocketHandler: TSocketHandler; virtual;
     // Override this to create descendent
     // Override this to create descendent
     Function CreateCertificateData : TCertificateData; virtual;
     Function CreateCertificateData : TCertificateData; virtual;
     // Override this to create descendent
     // Override this to create descendent
@@ -374,20 +372,20 @@ Type
     // Override these to create descendents of the request/response instead.
     // Override these to create descendents of the request/response instead.
     Function CreateRequest : TFPHTTPConnectionRequest; virtual;
     Function CreateRequest : TFPHTTPConnectionRequest; virtual;
     Function CreateResponse(ARequest : TFPHTTPConnectionRequest) : TFPHTTPConnectionResponse; virtual;
     Function CreateResponse(ARequest : TFPHTTPConnectionRequest) : TFPHTTPConnectionResponse; virtual;
-    Procedure InitRequest(ARequest : TFPHTTPConnectionRequest); virtual;
-    Procedure InitResponse(AResponse : TFPHTTPConnectionResponse); virtual;
+    Procedure InitRequest({%H-}ARequest : TFPHTTPConnectionRequest); virtual;
+    Procedure InitResponse({%H-}AResponse : TFPHTTPConnectionResponse); virtual;
     // Called on accept errors
     // Called on accept errors
-    procedure DoAcceptError(Sender: TObject; ASocket: Longint; E: Exception;  var ErrorAction: TAcceptErrorAction);
+    procedure DoAcceptError(Sender: TObject; {%H-}ASocket: Longint; {%H-}E: Exception;  var ErrorAction: TAcceptErrorAction); virtual;
     // Called when accept is idle. Will check for new requests.
     // Called when accept is idle. Will check for new requests.
-    procedure DoAcceptIdle(Sender: TObject);
+    procedure DoAcceptIdle(Sender: TObject); virtual;
     // Called when KeepConnection is idle.
     // Called when KeepConnection is idle.
-    procedure DoKeepConnectionIdle(Sender: TObject);
+    procedure DoKeepConnectionIdle(Sender: TObject); virtual;
     // Create a connection handling object.
     // Create a connection handling object.
     function CreateConnection(Data : TSocketStream) : TFPHTTPConnection; virtual;
     function CreateConnection(Data : TSocketStream) : TFPHTTPConnection; virtual;
     // Create a connection handler object depending on threadmode
     // Create a connection handler object depending on threadmode
     Function CreateConnectionHandler : TFPHTTPServerConnectionHandler; virtual;
     Function CreateConnectionHandler : TFPHTTPServerConnectionHandler; virtual;
     // Check if server is inactive
     // Check if server is inactive
-    Procedure CheckInactive;
+    Procedure CheckInactive; virtual;
     // Called by TInetServer when a new connection is accepted.
     // Called by TInetServer when a new connection is accepted.
     Procedure DoConnect(Sender : TObject; Data : TSocketStream); virtual;
     Procedure DoConnect(Sender : TObject; Data : TSocketStream); virtual;
     // Create and configure TInetServer
     // Create and configure TInetServer
@@ -424,7 +422,7 @@ Type
     class constructor init;
     class constructor init;
     Constructor Create(AOwner : TComponent); override;
     Constructor Create(AOwner : TComponent); override;
     Destructor Destroy; override;
     Destructor Destroy; override;
-    Function RegisterUpdateHandler(Const aName : string;  OnCheck : THandlesUpgradeEvent; OnUpgrade : TUpgradeConnectionEvent) : TUpgradeHandlerItem;
+    Function RegisterUpdateHandler(Const aName : string; const OnCheck : THandlesUpgradeEvent; const OnUpgrade : TUpgradeConnectionEvent) : TUpgradeHandlerItem;
     Procedure UnRegisterUpdateHandler(Const aName : string);
     Procedure UnRegisterUpdateHandler(Const aName : string);
   protected
   protected
     // Set to true to start listening.
     // Set to true to start listening.
@@ -580,12 +578,13 @@ begin
     Result:=GetHandlerItem(Idx);
     Result:=GetHandlerItem(Idx);
 end;
 end;
 
 
-function TUpgradeHandlerList.AddHandler(const aName: String; aOnCheck: THandlesUpgradeEvent; aOnUpgrade: TUpgradeConnectionEvent
+function TUpgradeHandlerList.AddHandler(const aName: String;
+  const aOnCheck: THandlesUpgradeEvent; const aOnUpgrade: TUpgradeConnectionEvent
   ): TUpgradeHandlerItem;
   ): TUpgradeHandlerItem;
 begin
 begin
   if IndexOfName(aName)<>-1 then
   if IndexOfName(aName)<>-1 then
     Raise EHTTPServer.CreateFmt(SErrDuplicateUpgradeHandler,[aName]);
     Raise EHTTPServer.CreateFmt(SErrDuplicateUpgradeHandler,[aName]);
-  Result:=add as TUpgradeHandlerItem;
+  Result:=Add as TUpgradeHandlerItem;
   Result.Name:=aName;
   Result.Name:=aName;
   Result.OnHandleUpgrade:=aOnCheck;
   Result.OnHandleUpgrade:=aOnCheck;
   Result.OnUpgrade:=aOnUpgrade;
   Result.OnUpgrade:=aOnUpgrade;
@@ -977,7 +976,7 @@ begin
       On E : exception do
       On E : exception do
         HandleUnexpectedError(E);
         HandleUnexpectedError(E);
     end
     end
- else if Assigned(Server) and Server.CanLog(hlmError) then
+  else if Assigned(Server) and Server.CanLog(hlmError) then
     Server.DoLog(hlmError,SErrorDuringRequest,[E.ClassName,E.Message]);
     Server.DoLog(hlmError,SErrorDuringRequest,[E.ClassName,E.Message]);
 end;
 end;
 
 
@@ -1026,7 +1025,8 @@ begin
   ARequest.SetFieldByName(N,V);
   ARequest.SetFieldByName(N,V);
 end;
 end;
 
 
-procedure TFPHTTPConnection.ParseStartLine(Request : TFPHTTPConnectionRequest; AStartLine : String);
+procedure TFPHTTPConnection.ParseStartLine(Request : TFPHTTPConnectionRequest;
+  AStartLine : String);
 
 
   Function GetNextWord(Var S : String) : string;
   Function GetNextWord(Var S : String) : string;
 
 
@@ -1468,7 +1468,7 @@ begin
         StartServerSocket;
         StartServerSocket;
       finally
       finally
         FreeServerSocket;
         FreeServerSocket;
-      end
+      end;
       end
       end
     else
     else
       StopServerSocket;
       StopServerSocket;
@@ -1485,7 +1485,7 @@ begin
   FCertificateData.HostName:=aValue;
   FCertificateData.HostName:=aValue;
 end;
 end;
 
 
-procedure TFPCustomHttpServer.SetIdle(AValue: TNotifyEvent);
+procedure TFPCustomHttpServer.SetIdle(const AValue: TNotifyEvent);
 begin
 begin
   FOnAcceptIdle:=AValue;
   FOnAcceptIdle:=AValue;
   if Assigned(FServer) then
   if Assigned(FServer) then
@@ -1607,7 +1607,6 @@ begin
   FConnectionHandler:=CreateConnectionHandler();
   FConnectionHandler:=CreateConnectionHandler();
 end;
 end;
 
 
-
 function TFPCustomHttpServer.CanLog(aMoment: THTTPLogMoment): Boolean;
 function TFPCustomHttpServer.CanLog(aMoment: THTTPLogMoment): Boolean;
 begin
 begin
   Result:=aMoment in FLogMoments;
   Result:=aMoment in FLogMoments;
@@ -1632,13 +1631,11 @@ begin
     DoLog(aMoment,Format(Fmt,Args));
     DoLog(aMoment,Format(Fmt,Args));
 end;
 end;
 
 
-
 function TFPCustomHttpServer.CheckUpgrade(aConnection: TFPHTTPConnection; aRequest: TFPHTTPConnectionRequest): Boolean;
 function TFPCustomHttpServer.CheckUpgrade(aConnection: TFPHTTPConnection; aRequest: TFPHTTPConnectionRequest): Boolean;
 
 
 Var
 Var
   I : Integer;
   I : Integer;
   Handler : TUpgradeHandlerItem;
   Handler : TUpgradeHandlerItem;
-  S : String;
 
 
 begin
 begin
   Result:=HasUpdateHandlers;
   Result:=HasUpdateHandlers;
@@ -1673,7 +1670,7 @@ end;
 procedure TFPCustomHttpServer.HandleUnexpectedError(Sender: TObject; E: Exception);
 procedure TFPCustomHttpServer.HandleUnexpectedError(Sender: TObject; E: Exception);
 begin
 begin
   if CanLog(hlmError) then
   if CanLog(hlmError) then
-     DoLog(hlmError,SErrorDuringRequest,[E.ClassName,E.Message]);
+    DoLog(hlmError,SErrorDuringRequest,[E.ClassName,E.Message]);
   If Assigned(FOnUnexpectedError) then
   If Assigned(FOnUnexpectedError) then
     FOnUnexpectedError(Sender,E);
     FOnUnexpectedError(Sender,E);
 end;
 end;
@@ -1800,8 +1797,9 @@ begin
   inherited Destroy;
   inherited Destroy;
 end;
 end;
 
 
-function TFPCustomHttpServer.RegisterUpdateHandler(const aName: string; OnCheck: THandlesUpgradeEvent;
-  OnUpgrade: TUpgradeConnectionEvent): TUpgradeHandlerItem;
+function TFPCustomHttpServer.RegisterUpdateHandler(const aName: string;
+  const OnCheck: THandlesUpgradeEvent; const OnUpgrade: TUpgradeConnectionEvent
+  ): TUpgradeHandlerItem;
 begin
 begin
   With UpdateHandlers do
   With UpdateHandlers do
     Result:=AddHandler(aName,OnCheck,OnUpgrade)
     Result:=AddHandler(aName,OnCheck,OnUpgrade)