diff --git a/lms_cgi.lpr b/lms_cgi.lpr index c119517..21a2dac 100644 --- a/lms_cgi.lpr +++ b/lms_cgi.lpr @@ -4,7 +4,7 @@ program lms_cgi; uses Interfaces, Classes, SysUtils, inifiles, httpDefs, fpweb, custweb, custcgi, - lnetbase, tcpClient, tcpthreadhelper, extTypes; + lnetbase, tcpClient, tcpthreadhelper, extTypes, eventlog; Type @@ -33,13 +33,17 @@ Type flogFolder: string; fHost: string; fPort: integer; + flogger: TEventLog; procedure LoadConfig; Protected function InitializeWebHandler: TWebHandler; override; public + constructor CreateWithLogger(AOwner: TComponent); + destructor Destroy; override; property Host: string read fHost; property Port: integer read fPort; property LogFolder: string read fLogFolder; + property Logger: TEventLog read flogger; end; const @@ -106,7 +110,34 @@ log(mtDebug,self,'Command '+ARequest.Command); LogStrings(mtInfo, @log,self,'CookieFields',Arequest.CookieFields); LogStrings(mtInfo, @log,self,'CustomHeaders',Arequest.CustomHeaders); {$ENDIF} + if ARequest.QueryFields.Values['action']='cgi-test' then + begin + AResponse.ContentType := 'text/html'; + AResponse.Contents.add('

QueryFields

'); + AResponse.Contents.add('
'); + for i := 0 to ARequest.QueryFields.Count-1 do + begin + k := ARequest.QueryFields.Names[i]; + v := ARequest.QueryFields.Values[k]; + AResponse.Contents.add(format('
%s
%s
',[k,v])); + end; + AResponse.Contents.add('
'); + AResponse.Contents.add(''); + AResponse.Contents.add('

ContentFields

'); + AResponse.Contents.add('
'); + for i := 0 to ARequest.ContentFields.Count-1 do + begin + k := ARequest.ContentFields.Names[i]; + v := ARequest.ContentFields.Values[k]; + AResponse.Contents.add(format('
%s
%s
',[k,v])); + + end; + AResponse.Contents.add('
'); + AResponse.Contents.add(''); + AResponse.SendContent; + exit; + end; allfields := TStringList.Create; try allfields.AddStrings(ARequest.QueryFields); @@ -129,27 +160,27 @@ log(mtDebug,self,'Data READY'); {$ENDIF} if not assigned(fData) then begin - AResponse.ContentType := 'application/json'; - AResponse.Contents.add('{'); - AResponse.Contents.add('"type":'+aTypes[fMode]+','); - AResponse.Contents.add('"code":'+inttostr(fCode)+','); - AResponse.Contents.add('"value":'+inttostr(fParam)+','); - AResponse.Contents.add('"name":"'+(fAnswer)+'",'); - if assigned(fValues) then - begin - AResponse.Contents.add('"values":['); - for i := 0 to fValues.Count-1 do + AResponse.ContentType := 'application/json'; + AResponse.Contents.add('{'); + AResponse.Contents.add('"type":'+aTypes[fMode]+','); + AResponse.Contents.add('"code":'+inttostr(fCode)+','); + AResponse.Contents.add('"value":'+inttostr(fParam)+','); + AResponse.Contents.add('"name":"'+(fAnswer)+'",'); + if assigned(fValues) then begin - AResponse.Contents.Add(fValues[i]+','); + AResponse.Contents.add('"values":['); + for i := 0 to fValues.Count-1 do + begin + AResponse.Contents.Add(fValues[i]+','); + end; + AResponse.Contents.add(']'); + fValues.Free; end; - AResponse.Contents.add(']'); - fValues.Free; - end; - AResponse.Contents.add('}'); - end + AResponse.Contents.add('}'); + end else begin - AResponse.FreeContentStream := true; + AResponse.FreeContentStream := true; AResponse.ContentType:='application/pdf'; fData.Seek(0,soFromBeginning); AResponse.ContentStream := fData; @@ -164,18 +195,14 @@ var f: TextFile; s: string; begin - if (Owner as TMyCGIApp).LogFolder='' then exit; + if (Owner as TMyCGIApp).Logger=nil then exit; case ALevel of - mtError: s := '!!ERROR: '; - mtWarning: s := '!WARNING: '; - mtInfo: s := #09; - mtDebug: s := #09#09; - mtExtra: s := #09#09#09; + mtError: (Owner as TMyCGIApp).Logger.Error(msg); + mtWarning: (Owner as TMyCGIApp).Logger.Warning(msg); + mtInfo: (Owner as TMyCGIApp).Logger.Info(msg); + mtDebug: (Owner as TMyCGIApp).Logger.Debug(msg); + mtExtra: (Owner as TMyCGIApp).Logger.Log(msg); end; - assignfile(f, (Owner as TMyCGIApp).LogFolder); - if fileexists((Owner as TMyCGIApp).LogFolder) then append(f) else rewrite(f); - writeln(f,s+msg); - closefile(f); end; procedure TMyCGIApp.LoadConfig; @@ -195,13 +222,31 @@ end; function TMyCGIApp.InitializeWebHandler: TWebHandler; begin LoadConfig; + flogger.FileName:=LogFolder; + flogger.Active:=true; + flogger.Info('start'); Result:=TMyCgiHandler.Create(self); end; +constructor TMyCGIApp.CreateWithLogger(AOwner: TComponent); +begin + flogger := TEventLog.Create(self); + flogger.Identification:='lms_cgi_client'; + flogger.LogType:={$IFDEF LINUX}ltSystem{$ELSE}ltFile{$ENDIF}; + inherited Create(AOwner); + +end; + +destructor TMyCGIApp.Destroy; +begin + flogger.free; + inherited Destroy; +end; + begin - with TMyCGIApp.create(nil) do + with TMyCGIApp.CreateWithLogger(nil) do try Initialize; Run; diff --git a/lms_cgi.obj b/lms_cgi.obj index 76b1caf..939c58e 100644 Binary files a/lms_cgi.obj and b/lms_cgi.obj differ