|
@@ -7,98 +7,35 @@ uses
|
|
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
|
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
|
cthreads,
|
|
cthreads,
|
|
{$ENDIF}{$ENDIF}
|
|
{$ENDIF}{$ENDIF}
|
|
- sysutils, Classes, fphttpserver, fpmimetypes, wmecho;
|
|
|
|
|
|
+ sysutils, Classes, fphttpserver, fpmimetypes, testhttpserver;
|
|
|
|
|
|
Type
|
|
Type
|
|
|
|
|
|
{ TTestHTTPServer }
|
|
{ TTestHTTPServer }
|
|
|
|
|
|
- TTestHTTPServer = Class(TFPHTTPServer)
|
|
|
|
- private
|
|
|
|
- FBaseDir : String;
|
|
|
|
- FCount : Integer;
|
|
|
|
- FMimeLoaded : Boolean;
|
|
|
|
- FMimeTypesFile: String;
|
|
|
|
- procedure SetBaseDir(const AValue: String);
|
|
|
|
|
|
+ THTTPServer = Class(TTestHTTPServer)
|
|
Protected
|
|
Protected
|
|
Procedure DoIdle(Sender : TObject);
|
|
Procedure DoIdle(Sender : TObject);
|
|
- procedure CheckMimeLoaded;
|
|
|
|
-
|
|
|
|
- Property MimeLoaded : Boolean Read FMimeLoaded;
|
|
|
|
- public
|
|
|
|
- procedure HandleRequest(Var ARequest: TFPHTTPConnectionRequest;
|
|
|
|
- Var AResponse : TFPHTTPConnectionResponse); override;
|
|
|
|
- Property BaseDir : String Read FBaseDir Write SetBaseDir;
|
|
|
|
- Property MimeTypesFile : String Read FMimeTypesFile Write FMimeTypesFile;
|
|
|
|
-
|
|
|
|
|
|
+ procedure DoWriteInfo(S: string);
|
|
end;
|
|
end;
|
|
|
|
|
|
Var
|
|
Var
|
|
- Serv : TTestHTTPServer;
|
|
|
|
-{ TTestHTTPServer }
|
|
|
|
|
|
+ Serv : THTTPServer;
|
|
|
|
|
|
-procedure TTestHTTPServer.SetBaseDir(const AValue: String);
|
|
|
|
-begin
|
|
|
|
- if FBaseDir=AValue then exit;
|
|
|
|
- FBaseDir:=AValue;
|
|
|
|
- If (FBaseDir<>'') then
|
|
|
|
- FBaseDir:=IncludeTrailingPathDelimiter(FBaseDir);
|
|
|
|
-end;
|
|
|
|
|
|
+{ THTTPServer }
|
|
|
|
|
|
-procedure TTestHTTPServer.DoIdle(Sender: TObject);
|
|
|
|
|
|
+procedure THTTPServer.DoIdle(Sender: TObject);
|
|
begin
|
|
begin
|
|
Writeln('Idle, waiting for connections');
|
|
Writeln('Idle, waiting for connections');
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TTestHTTPServer.CheckMimeLoaded;
|
|
|
|
-begin
|
|
|
|
- If (Not MimeLoaded) and (MimeTypesFile<>'') then
|
|
|
|
- begin
|
|
|
|
- MimeTypes.LoadFromFile(MimeTypesFile);
|
|
|
|
- FMimeLoaded:=true;
|
|
|
|
- end;
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-procedure TTestHTTPServer.HandleRequest(var ARequest: TFPHTTPConnectionRequest;
|
|
|
|
- var AResponse: TFPHTTPConnectionResponse);
|
|
|
|
-
|
|
|
|
-Var
|
|
|
|
- F : TFileStream;
|
|
|
|
- FN : String;
|
|
|
|
-
|
|
|
|
|
|
+procedure THTTPServer.DoWriteInfo(S: string);
|
|
begin
|
|
begin
|
|
- FN:=ARequest.Url;
|
|
|
|
- If (length(FN)>0) and (FN[1]='/') then
|
|
|
|
- Delete(FN,1,1);
|
|
|
|
- DoDirSeparators(FN);
|
|
|
|
- FN:=BaseDir+FN;
|
|
|
|
- if FileExists(FN) then
|
|
|
|
- begin
|
|
|
|
- F:=TFileStream.Create(FN,fmOpenRead);
|
|
|
|
- try
|
|
|
|
- CheckMimeLoaded;
|
|
|
|
- AResponse.ContentType:=MimeTypes.GetMimeType(ExtractFileExt(FN));
|
|
|
|
- Writeln('Serving file: "',Fn,'". Reported Mime type: ',AResponse.ContentType);
|
|
|
|
- AResponse.ContentLength:=F.Size;
|
|
|
|
- AResponse.ContentStream:=F;
|
|
|
|
- AResponse.SendContent;
|
|
|
|
- AResponse.ContentStream:=Nil;
|
|
|
|
- finally
|
|
|
|
- F.Free;
|
|
|
|
- end;
|
|
|
|
- end
|
|
|
|
- else
|
|
|
|
- begin
|
|
|
|
- AResponse.Code:=404;
|
|
|
|
- AResponse.SendContent;
|
|
|
|
- end;
|
|
|
|
- Inc(FCount);
|
|
|
|
- If FCount>=5 then
|
|
|
|
- Active:=False;
|
|
|
|
|
|
+ Writeln(S);
|
|
end;
|
|
end;
|
|
|
|
|
|
begin
|
|
begin
|
|
- Serv:=TTestHTTPServer.Create(Nil);
|
|
|
|
|
|
+ Serv:=THTTPServer.Create(Nil);
|
|
try
|
|
try
|
|
Serv.BaseDir:=ExtractFilePath(ParamStr(0));
|
|
Serv.BaseDir:=ExtractFilePath(ParamStr(0));
|
|
{$ifdef unix}
|
|
{$ifdef unix}
|
|
@@ -108,6 +45,7 @@ begin
|
|
Serv.Port:=8080;
|
|
Serv.Port:=8080;
|
|
Serv.AcceptIdleTimeout:=1000;
|
|
Serv.AcceptIdleTimeout:=1000;
|
|
Serv.OnAcceptIdle:[email protected];
|
|
Serv.OnAcceptIdle:[email protected];
|
|
|
|
+ Serv.WriteInfo:[email protected];
|
|
Serv.Active:=True;
|
|
Serv.Active:=True;
|
|
finally
|
|
finally
|
|
Serv.Free;
|
|
Serv.Free;
|