unit mycusthttp;
{$mode objfpc}{$H+}
interface
uses
Classes, custhttpapp, HTTPDefs, fphttp, fphttpserver, custweb, ssockets;
type
{ TMyMimeItems }
TMyMimeItems = class(TMimeItems)
public
procedure CreateUploadFiles(Files: TUploadedFiles; Vars: TStrings); override;
end;
{ TMyHTTPConnection }
TMyHTTPConnection = class(TFPHTTPConnection)
protected
procedure ReadRequestContent(ARequest: TFPHTTPConnectionRequest); override;
end;
{ TMyHttpServer }
TMyHttpServer = class(TEmbeddedHttpServer)
protected
function CreateConnection(Data: TSocketStream): TFPHTTPConnection; override;
end;
{ TMyHTTPServerHandler }
TMyHTTPServerHandler = class(TFPHTTPServerHandler)
protected
function CreateServer: TEmbeddedHttpServer; override;
end;
{ TMyCustomHTTPApplication }
TMyCustomHTTPApplication = class(TCustomHTTPApplication)
protected
function InitializeWebHandler: TWebHandler; override;
end;
implementation
{ TMyMimeItems }
procedure TMyMimeItems.CreateUploadFiles(Files: TUploadedFiles; Vars: TStrings);
var
I: integer;
begin
for I := 0 to Count - 1 do
begin
if (Items[I] as TMimeItem).DataSize > 1024 then
begin
Vars.Add('success=false');
Exit;
end;
end;
Vars.Add('success=true');
inherited CreateUploadFiles(Files, Vars);
end;
{ TMyHTTPConnection }
procedure TMyHTTPConnection.ReadRequestContent(ARequest: TFPHTTPConnectionRequest);
var
L: integer;
begin
L := ARequest.ContentLength;
if L > 65536 then
raise EFPHTTPError.Create('Request too big!');
inherited ReadRequestContent(ARequest);
end;
{ TMyHttpServer }
function TMyHttpServer.CreateConnection(Data: TSocketStream): TFPHTTPConnection;
begin
Result := TMyHTTPConnection.Create(Self, Data);
end;
{ TMyHTTPServerHandler }
function TMyHTTPServerHandler.CreateServer: TEmbeddedHttpServer;
begin
Result := TMyHttpServer.Create(Self);
end;
{ TMyCustomHTTPApplication }
function TMyCustomHTTPApplication.InitializeWebHandler: TWebHandler;
begin
Result := TMyHTTPServerHandler.Create(Self);
end;
initialization
MimeItemsClass := TMyMimeItems;
end.