Componentes.Terceros.RemObj.../official/5.0.35.741/RemObjects SDK for Delphi/Source/RODX/uRODXHTTPHeaderTools.pas
2009-02-27 15:16:56 +00:00

571 lines
24 KiB
ObjectPascal

unit uRODXHTTPHeaderTools;
interface
///////////////////////////////////////////////////////////////////////////////
// Component: TDXHTTPHeaderTools
// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com)
// ========================================================================
// Source Owner: DX, Inc. 1995-2002
// Copyright: All code is the property of DX, Inc. Licensed for
// resell by Brain Patchwork DX (tm) and part of the
// DX (r) product lines, which are (c) 1999-2002
// DX, Inc. Source may not be distributed without
// written permission from both Brain Patchwork DX,
// and DX, Inc.
// License: (Reminder), None of this code can be added to other
// developer products without permission. This includes
// but not limited to DCU's, DCP's, DLL's, OCX's, or
// any other form of merging our technologies. All of
// your products released to a public consumer be it
// shareware, freeware, commercial, etc. must contain a
// license notification somewhere visible in the
// application.
// Example is Internet Explorer - Help->About screen
// shows the licensed code contained in the application.
// Code Version: (3rd Generation Code)
// ========================================================================
// Description:
// ========================================================================
///////////////////////////////////////////////////////////////////////////////
{$I uRODXSock.def}
uses
uRODXString,
Classes;
Type
PHeaderInfo=^THeaderInfo;
THeaderInfo=Record
ContentLength:Integer;
Raw:AnsiString; // Original Header Request
Protocol:AnsiString;
Method:AnsiString; //GET, HEAD, etc. All caps!!!
URI:AnsiString;
PhysPath:AnsiString;
Allow:AnsiString;
AuthType:AnsiString; // BASIC
AuthName:AnsiString;
AuthPass:AnsiString;
Date:AnsiString;
Pragma:AnsiString;
CacheControl:AnsiString;
Connection:AnsiString;
TransferEncoding:AnsiString;
Upgrade:AnsiString;
Via:AnsiString;
Host:AnsiString; // multiple domains on single IP!
From:AnsiString;
IfModSince:AnsiString;
IfMatch:AnsiString;
IfNoneMatch:AnsiString;
IfRange:AnsiString;
IfUnModSince:AnsiString;
MaxForwards:AnsiString;
ProxyAuthorization:AnsiString;
KeepAlive:AnsiString;
PublicCache:AnsiString; // 2.3 renamed field!
Range:AnsiString;
Referer:AnsiString;
UserAgent:AnsiString;
ContentType:AnsiString;
Accept:AnsiString;
AcceptCharset:AnsiString;
AcceptEncoding:AnsiString;
AcceptLanguage:AnsiString;
ClientName:AnsiString;
ClientAddr:AnsiString;
ClientHost:AnsiString;
Cookie:AnsiString;
QueryString:AnsiString;
Weferer:AnsiString;
WserAgent:AnsiString;
Forwarded:AnsiString;
ForwardedFor:AnsiString;
ProxyConnection:AnsiString;
CacheInfo:AnsiString;
PostData:AnsiString; // 3.0
HostRootPath:AnsiString; // needed for SSI+ Banner routines and ISAPI Variables
All_RAW:AnsiString; // needed for trace, and ISAPIs!
All_HTTP:AnsiString;
Unknown:AnsiString;
end;
TDXHTTPHeaderTools = class(TDXComponent)
private
fSessionHeader:PHeaderInfo;
protected
Function FindUnknownHeader(ServerVariable:AnsiString):AnsiString;
Procedure ReplaceUnknownHeader(ServerVariable, VariableValue:AnsiString);
Function UnknownHeaderExists(ServerVariable:AnsiString):Boolean;
public
constructor Create(AOwner:TComponent); {$IFNDEF OBJECTS_ONLY} override; {$ENDIF}
Destructor Destroy; override;
Procedure Init(HTTPHeader:PHeaderInfo);
// 2.0.12
Function HeaderGetString(ServerVariable:AnsiString):AnsiString;
Function HeaderGetInteger(ServerVariable:AnsiString):Integer;
Function HeaderDataExists(ServerVariable:AnsiString):Boolean;
Function QueryGetString(ServerVariable:AnsiString):AnsiString;
Function QueryGetInteger(ServerVariable:AnsiString):Integer;
Function QueryDataExists(ServerVariable:AnsiString):Boolean;
Function AddHeader(ServerVariable, VariableValue:AnsiString):Boolean;
Function SetHeader(ServerVariable, VariableValue:AnsiString):Boolean;
Function ToStrings:TStrings;
published
end;
implementation
Uses
SysUtils
{$IFDEF DELPHI2009UP},AnsiStrings{$ENDIF};
constructor TDXHTTPHeaderTools.Create(AOwner:TComponent);
Begin
Inherited Create(AOwner);
end;
Destructor TDXHTTPHeaderTools.Destroy;
Begin
Inherited Destroy;
end;
Procedure TDXHTTPHeaderTools.Init(HTTPHeader:PHeaderInfo);
Begin
fSessionHeader:=HTTPHeader;
fSessionHeader^.ContentLength:=0;
End;
Function TDXHTTPHeaderTools.HeaderGetString(ServerVariable:AnsiString):AnsiString;
Var
Ch:AnsiChar;
Ws:AnsiString;
URI2:AnsiString;
Begin
Result:='';
Ws:=UpperCase(ServerVariable);
If Ws='' then Exit; //2.0.11
If (Copy(Ws,1,5)='HTTP_') then Begin
Delete(Ws,1,5); // 3.0
End;
Ch:=Ws[1];
With fSessionHeader^ do
Case Ch of
'A':If (Ws='ALLOW') then Result:=Allow
Else If (Ws='ALL_RAW') then Result:=All_Raw // .9k & 2.3b
Else If (Ws='ALL_HTTP') then Result:=All_HTTP // 3.0
Else If (Ws='AUTHTYPE') or (Ws='AUTH_TYPE') then Result:=AuthType
Else If (Ws='AUTHNAME') or (Ws='AUTH_NAME') or (Ws='AUTH_USER') then Result:=AuthName
Else If (Ws='AUTHPASS') or (Ws='AUTH_PASS') or (Ws='AUTH_PASSWORD') then Result:=AuthPass
Else If (Ws='ACCEPT') then Result:=Accept
Else If (Ws='ACCEPT_CHARSET') or (Ws='ACCEPTCHARSET') then Result:=AcceptCharset
Else If (Ws='ACCEPT_ENCODING') or (Ws='ACCEPTENCODING') then Result:=AcceptEncoding
Else If (Ws='ACCEPT_LANGUAGE') or (Ws='ACCEPTLANGUAGE') then Result:=AcceptLanguage
Else Result := FindUnknownHeader(ServerVariable);
'C':If (Ws='CONTENT_LENGTH') or (Ws='CONTENTLENGTH') then Result:=Ansi_IntToStr(ContentLength)
Else If (Ws='CACHECONTROL') or (Ws='CACHE_CONTROL') then Result:=CacheControl
Else If (Ws='CACHE_INFO') then Result:=CacheInfo
Else If (Ws='CONNECTION') then Result:=Connection
Else If (Ws='CONTENT_TYPE') or (Ws='CONTENTTYPE') then Result:=ContentType
Else If (Ws='CLIENTNAME') or (Ws='CLIENT_NAME') then Result:=ClientName
Else If (Ws='CLIENTADDR') or (Ws='CLIENT_ADDR') then Result:=ClientAddr
Else If (Ws='COOKIE') then Result:=Cookie
Else Result := FindUnknownHeader(ServerVariable);
'D':If (Ws='DATE') then Result:=Date
Else Result := FindUnknownHeader(ServerVariable);
'F':If (Ws='FROM') then Result:=From
Else If (Ws='FORWARDED') then Result:=Forwarded
Else If (Ws='FORWARDED_FOR') then Result:=ForwardedFor
Else Result := FindUnknownHeader(ServerVariable);
'H':If (Ws='HOST') then Begin
Result:=Host;
If Pos(AnsiChar('@'),Result)>0 then Delete(Result,1,Pos(AnsiChar(':'),Result));
If Pos(AnsiChar(':'),Result)>0 then Delete(Result,Pos(AnsiChar(':'),Result),Length(Result));
End
Else If (Ws='HTTPS') then Result:='off'
Else Result := FindUnknownHeader(ServerVariable);
'I':If (Ws='IFMODSINCE') or (Ws='IF_MODSINCE') or (Ws='IF_MOD_SINCE') then Result:=IfModSince
Else If (Ws='IFMATCH') or (Ws='IF_MATCH') then Result:=IfMatch
Else If (Ws='IFNONEMATCH') or (Ws='IF_NONEMATCH') or (Ws='IF_NONE_MATCH') then Result:=IfNoneMatch
Else If (Ws='IFRANGE') or (Ws='IF_RANGE') then Result:=IfRange
Else If (Ws='IFUNMODSINCE') or (Ws='IF_UNMODSINCE') or (Ws='IF_UNMOD_SINCE') then Result:=IfUnModSince
Else Result := FindUnknownHeader(ServerVariable);
'K':If (Ws='KEEPALIVE') or (Ws='KEEP_ALIVE') then Result:=KeepAlive
Else Result := FindUnknownHeader(ServerVariable);
'M':If (Ws='METHOD') then Result:=Method
Else If (Ws='MAXFORWARDS') or (Ws='MAX_FORWARDS') then Result:=MaxForwards
Else Result := FindUnknownHeader(ServerVariable);
'P':If (Ws='PROTOCOL') then Result:=Protocol
Else If (Ws='PRAGMA') then Result:=Pragma
Else if (Ws='PROXYAUTHORIZATION') or (Ws='PROXY_AUTHORIZATION') then Result:=ProxyAuthorization
Else if (Ws='PUBLIC') then Result:=PublicCache
Else if (Ws='PROXY_CONNECTION') then Result:=ProxyConnection
Else Result := FindUnknownHeader(ServerVariable);
'Q':If (Ws='QUERYSTRING') or (Ws='QUERY_STRING') then Result:=QueryString
Else Result := FindUnknownHeader(ServerVariable);
'R':If (Ws='RANGE') then Result:=Range
Else If (Ws='REFERER') or (Ws='REFERRER') or (Ws='REFFERER') then Result:=Referer
Else If (Ws='REQUEST_METHOD') then Result:=Method
Else If (Ws='REMOTE_NAME') or (Ws='REMOTE_HOST') then Result:=ClientName
Else If (Ws='REMOTE_ADDR') then Result:=ClientAddr
Else If (Ws='REQUEST_URI') then Begin
URI2:=ToUnixSlashes(URI);
If Pos(AnsiChar('/'),URI2)=0 then Result:=AnsiChar('/')+URI2
Else Begin
If Copy(URI2,1,1)<>'/' then URI2:=AnsiChar('/')+URI2;
Result:=URI2; // 4/2/2002 Copy(URI2,1,PosLastChar('/',URI2));
End;
End
Else Result := FindUnknownHeader(ServerVariable);
'S':If (Ws='SERVER_PROTOCOL') then Result:=Protocol
Else If (Ws='SERVER_NAME') then Begin
Result:=Host;
If Pos(AnsiChar('@'),Result)>0 then Delete(Result,1,Pos(AnsiChar(':'),Result));
If Pos(AnsiChar(':'),Result)>0 then Delete(Result,Pos(AnsiChar(':'),Result),Length(Result));
End
Else If (Ws='SERVER_PORT_SECURE') then Result:=AnsiChar('0')
Else Result := FindUnknownHeader(ServerVariable);
'T':If (Ws='TRANSFERENCODING') or (Ws='TRANSFER_ENCODING') then Result:=TransferEncoding
Else Result := FindUnknownHeader(ServerVariable);
'U':If (Ws='URI') then Begin
URI2:=ToUnixSlashes(URI);
If Pos(AnsiChar('/'),URI2)=0 then Result:=AnsiChar('/')+URI2
Else Begin
If Copy(URI2,1,1)<>AnsiChar('/') then URI2:=AnsiChar('/')+URI2;
Result:=URI2; // 4/2/2002 Copy(URI2,1,PosLastChar('/',URI2));
End;
End
Else If (Ws='URL') then Begin
URI2:=ToUnixSlashes(URI);
If Copy(URI2,1,1)=AnsiChar('/') then Result:=URI2
Else Result:=AnsiChar('/')+URI2;
End
Else If (Ws='UPGRADE') then Result:=Upgrade
Else if (Ws='USERAGENT') or (Ws='USER_AGENT') then Result:=UserAgent
Else Result := FindUnknownHeader(ServerVariable);
'V':If (Ws='VIA') then Result:=Via
Else Result := FindUnknownHeader(ServerVariable);
'W':If (Ws='WEFERER') then Result:=Weferer
Else If (Ws='WSER_AGENT') then Result:=WserAgent
Else Result := FindUnknownHeader(ServerVariable);
Else
Result := FindUnknownHeader(ServerVariable);
End;
End;
Function TDXHTTPHeaderTools.HeaderGetInteger(ServerVariable:AnsiString):Integer;
Var
Ch:AnsiChar;
Ws:AnsiString;
Begin
Result:=0;
Ws:=UpperCase(ServerVariable);
If Ws='' then Exit; // 2.0.11
Ch:=Ws[1];
With fSessionHeader^ do
Case Ch of
'C':If (Ws='CONTENT_LENGTH') or (Ws='CONTENTLENGTH') then Result:=ContentLength;
End;
End;
Function TDXHTTPHeaderTools.HeaderDataExists(ServerVariable:AnsiString):Boolean;
Begin
Result:=HeaderGetString(ServerVariable)<>'';
End;
// 2.0.12
Function TDXHTTPHeaderTools.QueryGetString(ServerVariable:AnsiString):AnsiString;
Var
Ws:AnsiString;
Tmp:AnsiString;
Value:AnsiString;
Begin
Result:='';
Tmp:=fSessionHeader^.QueryString+AnsiChar('&');
While (Pos(AnsiChar('&'),Tmp)>0) do Begin
Ws:=Copy(Tmp,1,Pos(AnsiChar('&'),Tmp)-1);
Delete(Tmp,1,Pos(AnsiChar('&'),Tmp));
Value:=Copy(Ws,1,Pos(AnsiChar('='),Ws)-1);
Delete(Ws,1,Pos(AnsiChar('='),Ws));
If UpperCase(Value)=UpperCase(ServerVariable) then Begin
If Result<>'' then Result:=Result+AnsiChar(#13)+AnsiChar(#10)+Ws
Else Result:=Ws;
End;
End;
End;
Function TDXHTTPHeaderTools.QueryGetInteger(ServerVariable:AnsiString):Integer;
Var
Ws:AnsiString;
Begin
Ws:=QueryGetString(ServerVariable);
If (Ws<>'') and (IsNumericString(Ws)) then Result:=Ansi_StrToInt(Ws)
Else Result:=-1;
End;
Function TDXHTTPHeaderTools.QueryDataExists(ServerVariable:AnsiString):Boolean;
Begin
Result:=QueryGetString(ServerVariable)<>'';
End;
Function TDXHTTPHeaderTools.AddHeader(ServerVariable, VariableValue:AnsiString):Boolean;
Var
Ch:AnsiChar;
Ws:AnsiString;
Procedure AddToUnknown; // 7-27
Begin
If fSessionHeader^.Unknown='' then fSessionHeader^.Unknown:=ServerVariable+AnsiString(': ')+VariableValue
Else fSessionHeader^.Unknown:=fSessionHeader^.Unknown+AnsiString(#13#10)+ServerVariable+AnsiString(': ')+VariableValue;
End;
Begin
Result:=False;
Ws:=Uppercase(ServerVariable);
If Ws='' then Exit;
// 7-27
Ws:=StringReplace(Ws,AnsiChar('-'),AnsiChar('_'),[rfReplaceAll]);
Ch:=Ws[1];
With fSessionHeader^ do
Case Ch of
'A':If (Ws='ALLOW') then Allow:=VariableValue
Else If (Ws='AUTHTYPE') or (Ws='AUTH_TYPE') then AuthType:=VariableValue
Else If (Ws='AUTHNAME') or (Ws='AUTH_NAME') then AuthName:=VariableValue
Else If (Ws='AUTHPASS') or (Ws='AUTH_PASS') then AuthPass:=VariableValue
Else If (Ws='ACCEPT') then Accept:=VariableValue
Else If (Ws='ACCEPT_CHARSET') or (Ws='ACCEPTCHARSET') then AcceptCharset:=VariableValue
Else If (Ws='ACCEPT_ENCODING') or (Ws='ACCEPTENCODING') then AcceptEncoding:=VariableValue
Else If (Ws='ACCEPT_LANGUAGE') or (Ws='ACCEPTLANGUAGE') then AcceptLanguage:=VariableValue
Else AddToUnknown;
'C':If (Ws='CONTENT_LENGTH') or (Ws='CONTENTLENGTH') then ContentLength:=Ansi_StrToInt(VariableValue)
Else If (Ws='CACHECONTROL') or (Ws='CACHE_CONTROL') then CacheControl:=VariableValue
Else If (Ws='CACHE_INFO') then CacheInfo:=VariableValue
Else If (Ws='CONNECTION') then Connection:=VariableValue
Else If (Ws='CONTENT_TYPE') or (Ws='CONTENTTYPE') then ContentType:=VariableValue
Else If (Ws='CLIENTNAME') or (Ws='CLIENT_NAME') then ClientName:=VariableValue
Else If (Ws='CLIENTADDR') or (Ws='CLIENT_ADDR') then ClientAddr:=VariableValue
Else If (Ws='COOKIE') then Cookie:=VariableValue
Else AddToUnknown;
'D':If (Ws='DATE') then Date:=VariableValue
Else AddToUnknown;
'F':If (Ws='FROM') then From:=VariableValue
Else If (Ws='FORWARDED') then Forwarded:=VariableValue
Else If (Ws='FORWARDED_FOR') then ForwardedFor:=VariableValue
Else AddToUnknown;
'H':If (Ws='HOST') then Host:=VariableValue
Else AddToUnknown;
'I':If (Ws='IFMODSINCE') or (Ws='IF_MODSINCE') or (Ws='IF_MOD_SINCE') then IfModSince:=VariableValue
Else If (Ws='IFMATCH') or (Ws='IF_MATCH') then IfMatch:=VariableValue
Else If (Ws='IFNONEMATCH') or (Ws='IF_NONEMATCH') or (Ws='IF_NONE_MATCH') then IfNoneMatch:=VariableValue
Else If (Ws='IFRANGE') or (Ws='IF_RANGE') then IfRange:=VariableValue
Else If (Ws='IFUNMODSINCE') or (Ws='IF_UNMODSINCE') or (Ws='IF_UNMOD_SINCE') then IfUnModSince:=VariableValue
Else AddToUnknown;
'K':If (Ws='KEEPALIVE') or (Ws='KEEP_ALIVE') then KeepAlive:=VariableValue
Else AddToUnknown;
'M':If (Ws='METHOD') then Method:=VariableValue
Else If (Ws='MAXFORWARDS') or (Ws='MAX_FORWARDS') then MaxForwards:=VariableValue
Else AddToUnknown;
'P':If (Ws='PROTOCOL') then Protocol:=VariableValue
Else If (Ws='PRAGMA') then Pragma:=VariableValue
Else if (Ws='PROXYAUTHORIZATION') or (Ws='PROXY_AUTHORIZATION') then ProxyAuthorization:=VariableValue
Else if (Ws='PUBLIC') then PublicCache:=VariableValue
Else if (Ws='PROXY_CONNECTION') then ProxyConnection:=VariableValue
Else AddToUnknown;
'Q':If (Ws='QUERYSTRING') or (Ws='QUERY_STRING') then QueryString:=VariableValue
Else AddToUnknown;
'R':If (Ws='RANGE') then Range:=VariableValue
Else If (Ws='REFERER') or (Ws='REFERRER') or (Ws='REFFERER') then Referer:=VariableValue
Else AddToUnknown;
'U':If (Ws='URI') then URI:=VariableValue
Else If (Ws='UPGRADE') then Upgrade:=VariableValue
Else if (Ws='USERAGENT') or (Ws='USER_AGENT') then UserAgent:=VariableValue
Else AddToUnknown;
'T':If (Ws='TRANSFERENCODING') or (Ws='TRANSFER_ENCODING') then TransferEncoding:=VariableValue
Else AddToUnknown;
'V':If (Ws='VIA') then Via:=VariableValue // 7-27
Else AddToUnknown;
'W':If (Ws='WEFERER') then Weferer:=VariableValue // 7-27
Else If (Ws='WSER_AGENT') then WserAgent:=VariableValue // 7-27
Else AddToUnknown;
Else
AddToUnknown;
End;//case
Result:=True;
End;
Function TDXHTTPHeaderTools.SetHeader(ServerVariable, VariableValue:AnsiString):Boolean;
Begin
Result:=AddHeader(ServerVariable, VariableValue);
End;
Function TDXHTTPHeaderTools.FindUnknownHeader(ServerVariable:AnsiString):AnsiString;
var
line, buf:AnsiString;
i : Integer;
Begin
line:=fSessionHeader^.Unknown;
i := Pos(ServerVariable, line);
if i <> 0 then
Begin
buf := Copy(line, i, Length(line));
i := Pos(AnsiString(#13#10), buf);
buf := Copy(buf, 0, i-1);
i := Pos(AnsiChar(#32), buf);
Result := Copy(buf, i, Length(buf));
End; //IF
End;
Procedure TDXHTTPHeaderTools.ReplaceUnknownHeader(ServerVariable, VariableValue:AnsiString);
var line:PAnsiString;
str, buf:AnsiString;
i, k, m:Integer;
Begin
if Not UnknownHeaderExists(ServerVariable) then Exit;
line:=@fSessionHeader^.Unknown;
k := Pos(ServerVariable, line^);
if k <> 0 then
Begin
str := Copy(line^, k, Length(line^));
m := Pos(AnsiString(#13#10), str);
buf := Copy(str, 0, k-1);
i := Pos(AnsiChar(#32), buf);
k := k + i;
Delete(line^, k, m);
Insert(VariableValue, line^, k);
End;
End;
Function TDXHTTPHeaderTools.UnknownHeaderExists(ServerVariable:AnsiString):Boolean;
Begin
if ServerVariable = '' then Result:=False
Else if fSessionHeader^.Unknown = '' then Result:=False
Else if Pos(ServerVariable, fSessionHeader^.Unknown) = 0 then Result:=False
Else Result:=True;
End;
Function TDXHTTPHeaderTools.ToStrings:TStrings;
procedure AddIntoStringList(res:TStrings; AValue: AnsiString);
begin
Res.Add({$IFDEF UNICODE}AnsiStringToWideString{$ENDIF}(AValue));
end;
var res:TStrings;
endch:AnsiString;
split :AnsiString;
// CleanLoop:Integer;
Begin
split:=': ';
endch :='';// 7-27 #13#10;
res := TStringList.Create;
With fSessionHeader^ do
Begin
if Allow <> '' then
AddIntoStringList(Res,'ALLOW'+split+Allow+endch);
if AuthType <> '' then
AddIntoStringList(Res,'AUTHTYPE'+split+AuthType+endch);
if AuthName <> '' then
AddIntoStringList(Res,'AUTHNAME'+split+AuthName+endch);
if AuthPass <> '' then
AddIntoStringList(Res,'AUTHPASS'+split+AuthPass+endch);
if Accept <> '' then
AddIntoStringList(Res,'ACCEPT'+split+Accept+endch);
if AcceptCharset <> '' then
AddIntoStringList(Res,'ACCEPT-CHARSET'+split+AcceptCharset+endch);
if AcceptEncoding <> '' then
AddIntoStringList(Res,'ACCEPT-ENCODING'+split+AcceptEncoding+endch);
if AcceptLanguage <> '' then
AddIntoStringList(Res,'ACCEPT-LANGUAGE'+split+AcceptLanguage+endch);
if ContentLength <> 0 then
AddIntoStringList(Res,'CONTENT-LENGTH'+split+Ansi_IntToStr(ContentLength)+endch);
if CacheControl <> '' then // 7-27
AddIntoStringList(Res,'CACHE-CONTROL'+split+CacheControl+endch);
if CacheInfo <> '' then // 7-27
AddIntoStringList(Res,'CACHE-INFO'+split+CacheInfo+endch);
if Connection <> '' then
AddIntoStringList(Res,'CONNECTION'+split+Connection+endch);
if ContentType <> '' then
AddIntoStringList(Res,'CONTENT-TYPE'+split+ContentType+endch);
if ClientName <> '' then
AddIntoStringList(Res,'CLIENTNAME'+split+ClientName+endch);
if ClientAddr <> '' then
AddIntoStringList(Res,'CLIENTADDR'+split+ClientAddr+endch);
if Cookie <> '' then
AddIntoStringList(Res,'COOKIE'+split+Cookie+endch);
if Date <> '' then
AddIntoStringList(Res,'DATE'+split+Date+endch);
if From <> '' then
AddIntoStringList(Res,'FROM'+split+From+endch);
if Forwarded <> '' then
AddIntoStringList(Res,'FORWARDED'+split+Forwarded+endch);
if ForwardedFor <> '' then
AddIntoStringList(Res,'FORWARDED-FOR'+split+ForwardedFor+endch);
if Host <> '' then
AddIntoStringList(Res,'HOST'+split+Host+endch);
if IfModSince <> '' then
AddIntoStringList(Res,'IFMODSINCE'+split+IfModSince+endch);
if IfMatch <> '' then
AddIntoStringList(Res,'IFMATCH'+split+IfMatch+endch);
if IfNoneMatch <> '' then
AddIntoStringList(Res,'IFNONEMATCH'+split+IfNoneMatch+endch);
if IfRange <> '' then
AddIntoStringList(Res,'IFRANGE'+split+IfRange+endch);
if IfUnModSince <> '' then
AddIntoStringList(Res,'IFUNMODSINCE'+split+IfUnModSince+endch);
if KeepAlive <> '' then
AddIntoStringList(Res,'KEEPALIVE'+split+KeepAlive+endch);
if Method <> '' then
AddIntoStringList(Res,'METHOD'+split+Method+endch);
if MaxForwards <> '' then
AddIntoStringList(Res,'MAXFORWARDS'+split+MaxForwards+endch);
if Protocol <> '' then
AddIntoStringList(Res,'PROTOCOL'+split+Protocol+endch);
if ProxyConnection <> '' then
AddIntoStringList(Res,'PROXY-CONNECTION'+split+ProxyConnection+endch);
if Pragma <> '' then
AddIntoStringList(Res,'PRAGMA'+split+Pragma+endch);
if ProxyAuthorization <> '' then
AddIntoStringList(Res,'PROXYAUTHORIZATION'+split+ProxyAuthorization+endch);
if PublicCache <> '' then
AddIntoStringList(Res,'PUBLIC'+split+PublicCache+endch);
if QueryString <> '' then
AddIntoStringList(Res,'QUERYSTRING'+split+QueryString+endch);
if Range <> '' then
AddIntoStringList(Res,'RANGE'+split+Range+endch);
if Referer <> '' then
AddIntoStringList(Res,'REFERER'+split+Referer+endch);
if URI <> '' then
AddIntoStringList(Res,'URI'+split+URI+endch);
if Upgrade <> '' then
AddIntoStringList(Res,'UPGRADE'+split+Upgrade+endch);
if UserAgent <> '' then
AddIntoStringList(Res,'USERAGENT'+split+UserAgent+endch);
if TransferEncoding <> '' then
AddIntoStringList(Res,'TRANSFERENCODING'+split+TransferEncoding+endch);
if Via <> '' then
AddIntoStringList(Res,'VIA'+split+Via+endch);
if Weferer <> '' then
AddIntoStringList(Res,'WEFERER'+split+Weferer+endch);
if WserAgent <> '' then
AddIntoStringList(Res,'WSER-AGENT'+split+WserAgent+endch);
if Unknown <> '' then
AddIntoStringList(Res,Unknown+endch);
End; //With
{ CleanLoop:=res.Count;
While CleanLoop>0 do Begin
if res[CleanLoop-1]='' then res.delete(CleanLoop-1);
Dec(CleanLoop);
End;}
Result:=res;
End;
end.