亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? httpsrv.pas

?? 包含常用Internet協議TCP,UDP、HTTP、FTP、Telnet等
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
{*_* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Author:       Fran鏾is PIETTE
Description:  THttpServer implement the HTTP server protocol, that is a
              web server kernel.
Creation:     Oct 10, 1999
Version:      1.00 BETA
EMail:        http://users.swing.be/francois.piette  francois.piette@swing.be
              http://www.rtfm.be/fpiette             francois.piette@rtfm.be
              francois.piette@pophost.eunet.be
Support:      Use the mailing list twsocket@rtfm.be See website for details.
Legal issues: Copyright (C) 1996-2000 by Fran鏾is PIETTE
              Rue de Grady 24, 4053 Embourg, Belgium. Fax: +32-4-365.74.56
              <francois.piette@pophost.eunet.be><francois.piette@swing.be>

              This software is provided 'as-is', without any express or
              implied warranty.  In no event will the author be held liable
              for any  damages arising from the use of this software.

              Permission is granted to anyone to use this software for any
              purpose, including commercial applications, and to alter it
              and redistribute it freely, subject to the following
              restrictions:

              1. The origin of this software must not be misrepresented,
                 you must not claim that you wrote the original software.
                 If you use this software in a product, an acknowledgment
                 in the product documentation would be appreciated but is
                 not required.

              2. Altered source versions must be plainly marked as such, and
                 must not be misrepresented as being the original software.

              3. This notice may not be removed or altered from any source
                 distribution.

              4. You must register this software by sending a picture postcard
                 to the author. Use a nice stamp and mention your name, street
                 address, EMail address and any comment you like to say.

History:
Nov 12, 1999 Beta 3 Added Linger properties
Apr 23, 2000 Beta 4 Added Delphi 1 compatibility
             Made everything public in THttpConnection because BCB has problems
             when deriving a component from Delphi and protected functions.

{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
unit HttpSrv;

interface

uses
  WinTypes, WinProcs, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, WSocket, WSocketS;

const
    THttpServerVersion = 100;
    CopyRight : String = ' THttpServer (c) 1999-2000 F. Piette V1.00 BETA 4 ';
    WM_HTTP_DONE       = WM_USER + 40;

type
    THttpConnection      = class;
    THttpConnectionClass = class of THttpConnection;
    THttpGetFlag         = (hgSendDoc, hgSendStream, hgWillSendMySelf, hg404, hgAcceptData);
    THttpSendType        = (httpSendHead, httpSendDoc);
    THttpGetEvent        = procedure (Sender    : TObject;
                                      Client    : TObject;
                                      var Flags : THttpGetFlag) of object;
    THttpGetConnEvent    = procedure (Sender    : TObject;
                                      var Flags : THttpGetFlag) of object;
    THttpConnectEvent    = procedure (Sender    : TObject;
                                      Client    : TObject;
                                      Error     : Word) of object;
    THttpPostedDataEvent = procedure (Sender    : TObject;
                                      Client    : TObject;
                                      Error     : Word) of object;
    THttpConnectionState = (hcRequest, hcHeader, hcPostedData);

    { THttpConnection is used to handle client connections }
    THttpConnection = class(TWSocketClient)
    public
        FRcvdLine              : String;
        FMethod                : String;
        FVersion               : String;
        FPath                  : String;
        FParams                : String;
        FRequestHeader         : TStringList;
        FState                 : THttpConnectionState;
        FDocDir                : String;
        FDefaultDoc            : String;
        FDocument              : String;
        FDocStream             : TStream;
        FDocBuf                : PChar;
        FAnswerContentType     : String;
        FRequestContentLength  : Integer;
        FRequestContentType    : String;
        FRequestAccept         : String;
        FRequestReferer        : String;
        FRequestAcceptLanguage : String;
        FRequestAcceptEncoding : String;
        FRequestUserAgent      : String;
        FRequestHost           : String;
        FRequestConnection     : String;
        FAcceptPostedData      : Boolean;
        FOnGetDocument         : THttpGetConnEvent;
        FOnHeadDocument        : THttpGetConnEvent;
        FOnPostDocument        : THttpGetConnEvent;
        FOnPostedData          : TDataAvailable;
        procedure ConnectionDataAvailable(Sender: TObject; Error : Word);
        procedure ConnectionDataSent(Sender : TObject; Error : WORD);
        procedure ParseRequest;
        procedure ProcessRequest;
        procedure ProcessGet;
        procedure ProcessHead;
        procedure ProcessPost;
        procedure SendDocument(SendType : THttpSendType);
        procedure SendStream;
        procedure Answer404;
        procedure WndProc(var MsgRec: TMessage); override;
        procedure WMHttpDone(var msg: TMessage); message WM_HTTP_DONE;
        procedure TriggerGetDocument(var Flags : THttpGetFlag); virtual;
        procedure TriggerHeadDocument(var Flags : THttpGetFlag); virtual;
        procedure TriggerPostDocument(var Flags : THttpGetFlag); virtual;
    public
        constructor Create(AOwner: TComponent); override;
        destructor  Destroy; override;
        { Method contains GET/POST/HEAD as requested by client }
        property Method                    : String read  FMethod;
        { Version contains HTTP version from client request }
        property Version                   : String read  FVersion;
        { The whole header as received from client }
        property RequestHeader             : TStringList
                                                    read  FRequestHeader;
        { Stream used to send reply to client }
        property DocStream                 : TStream
                                                    read  FDocStream
                                                    write FDocStream;
        { All RequestXXX are header fields from request header }
        property RequestContentLength      : Integer
                                                    read  FRequestContentLength;
        property RequestContentType        : String read  FRequestContentType;
        property RequestAccept             : String read  FRequestAccept;
        property RequestReferer            : String read  FRequestReferer;
        property RequestAcceptLanguage     : String read  FRequestAcceptLanguage;
        property RequestAcceptEncoding     : String read  FRequestAcceptEncoding;
        property RequestUserAgent          : String read  FRequestUserAgent;
        property RequestHost               : String read  FRequestHost;
        property RequestConnection         : String read  FRequestConnection;
    published
        { Where all documents are stored. Default to c:\wwwroot }
        property DocDir         : String            read  FDocDir
                                                    write FDocDir;
        { Default document name. Default to index.html }
        property DefaultDoc     : String            read  FDefaultDoc
                                                    write FDefaultDoc;
        { Complete document path and file name on local file system }
        property Document       : String            read  FDocument
                                                    write FDocument;
        { Document path as requested by client }
        property Path           : String            read  FPath
                                                    write FPath;
        { Parameters in request (Question mark is separator) }
        property Params         : String            read  FParams
                                                    write FParams;
        { Triggered when client sent GET request }
        property OnGetDocument  : THttpGetConnEvent read  FOnGetDocument
                                                    write FOnGetDocument;
        { Triggered when client sent HEAD request }
        property OnHeadDocument : THttpGetConnEvent read  FOnHeadDocument
                                                    write FOnHeadDocument;
        { Triggered when client sent POST request }
        property OnPostDocument : THttpGetConnEvent read  FOnPostDocument
                                                    write FOnPostDocument;
        { Triggered when client sent POST request and data is available }
        property OnPostedData   : TDataAvailable    read  FOnPostedData
                                                    write FOnPostedData;
    end;

    { This is the HTTP server component handling all HTTP connection }
    { service. Most of the work is delegated to a TWSocketServer     }
    THttpServer = class(TComponent)
    protected
        { FWSocketServer will handle all client management work }
        FWSocketServer      : TWSocketServer;
        FPort               : String;
        FAddr               : String;
        FClientClass        : THttpConnectionClass;
        FDocDir             : String;
        FDefaultDoc         : String;
        FLingerOnOff        : TSocketLingerOnOff;
        FLingerTimeout      : Integer;              { In seconds, 0 = disabled }
        FOnServerStarted    : TNotifyEvent;
        FOnServerStopped    : TNotifyEvent;
        FOnClientConnect    : THttpConnectEvent;
        FOnClientDisconnect : THttpConnectEvent;
        FOnGetDocument      : THttpGetEvent;
        FOnHeadDocument     : THttpGetEvent;
        FOnPostDocument     : THttpGetEvent;
        FOnPostedData       : THttpPostedDataEvent;
        procedure Notification(AComponent: TComponent; operation: TOperation); override;
        procedure WSocketServerClientConnect(Sender : TObject;
                                             Client : TWSocketClient;
                                             Error  : Word);
        procedure WSocketServerClientCreate(Sender : TObject;
                                            Client : TWSocketClient);
        procedure WSocketServerClientDisconnect(Sender : TObject;
                                                Client : TWSocketClient;
                                                Error  : Word);
        procedure WSocketServerSessionClosed(Sender : TObject;
                                             Error  : Word);
        procedure WSocketServerChangeState(Sender : TObject;
                                           OldState, NewState : TSocketState);
        procedure TriggerServerStarted; virtual;
        procedure TriggerServerStopped; virtual;
        procedure TriggerClientConnect(Client : TObject; Error  : Word);
        procedure TriggerClientDisconnect(Client : TObject; Error : Word);
        procedure TriggerGetDocument(Sender     : TObject;
                                     var Flags  : THttpGetFlag);
        procedure TriggerHeadDocument(Sender     : TObject;
                                      var Flags  : THttpGetFlag);
        procedure TriggerPostDocument(Sender     : TObject;
                                      var Flags  : THttpGetFlag); virtual;
        procedure TriggerPostedData(Sender     : TObject;
                                    Error      : WORD); virtual;
        procedure SetPort(newValue : String);
        procedure SetAddr(newValue : String);
        function  GetClientCount : Integer;
    public
        constructor Create(AOwner: TComponent); override;
        destructor  Destroy; override;
        procedure   Start; virtual;
        procedure   Stop; virtual;
        { Runtime readonly property which gives number of connected clients }
        property    ClientCount : Integer        read GetClientCount;
        { Runtim property which tell the component class which has to be  }
        { instanciated to handle client connection                        }
        property    ClientClass : THttpConnectionClass
                                                 read  FClientClass
                                                 write FClientClass;
    published
        { We will listen to that port. Default to 80 for http service }
        property Port          : String          read  FPort
                                                 write SetPort;
        { We will use that interface to listen. 0.0.0.0 means all     }
        { available interfaces                                        }
        property Addr          : String          read  FAddr
                                                 write SetAddr;
        { Where all documents are stored. Default to c:\wwwroot }
        property DocDir        : String          read  FDocDir
                                                 write FDocDir;
        { Default document name. Default to index.html }
        property DefaultDoc    : String          read  FDefaultDoc
                                                 write FDefaultDoc;
        property LingerOnOff   : TSocketLingerOnOff
                                                 read  FLingerOnOff
                                                 write FLingerOnOff;
        property LingerTimeout : Integer         read  FLingerTimeout
                                                 write FLingerTimeout;
        { OnServerStrated is triggered when server has started listening }
        property OnServerStarted    : TNotifyEvent
                                                 read  FOnServerStarted
                                                 write FOnServerStarted;
        { OnServerStopped is triggered when server has stopped listening }
        property OnServerStopped    : TNotifyEvent
                                                 read  FOnServerStopped
                                                 write FOnServerStopped;
        { OnClientConnect is triggered when a client has connected }
        property OnClientConnect    : THttpConnectEvent
                                                 read  FOnClientConnect
                                                 write FOnClientConnect;
        { OnClientDisconnect is triggered when a client is about to }
        { disconnect.                                               }
        property OnClientDisconnect : THttpConnectEvent
                                                 read  FOnClientDisconnect
                                                 write FOnClientDisconnect;
        { OnGetDocument is triggered when a client sent GET request    }
        { You can either do nothing and let server handle all work, or }
        { you can build a document on the fly or refuse access.        }
        property OnGetDocument      : THttpGetEvent
                                                 read  FOnGetDocument
                                                 write FOnGetDocument;
        { OnGetDocument is triggered when a client sent HEAD request   }
        { You can either do nothing and let server handle all work, or }
        { you can build a document header on the fly or refuse access. }
        property OnHeadDocument     : THttpGetEvent
                                                 read  FOnHeadDocument
                                                 write FOnHeadDocument;
        { OnGetDocument is triggered when a client sent POST request   }
        { You have to tell if you accept data or not. If you accept,   }
        { you'll get OnPostedData event with incomming data.           }
        property OnPostDocument     : THttpGetEvent
                                                 read  FOnPostDocument
                                                 write FOnPostDocument;
        { On PostedData is triggered when client post data and you     }
        { accepted it from OnPostDocument event.                       }
        { When you've got all data, you have to build a reply to be    }
        { sent to client.                                              }
        property OnPostedData       : THttpPostedDataEvent
                                                 read  FOnPostedData
                                                 write FOnPostedData;
    end;

{ Retrieve a single value by name out of an URL encoded data stream.        }
function ExtractURLEncodedValue(
    Msg       : PChar;             { URL Encoded stream                     }
    Name      : String;            { Variable name to look for              }
    var Value : String): Boolean;  { Where to put variable value            }
procedure Register;

implementation


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure Register;
begin
    RegisterComponents('FPiette', [THttpServer]);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{$IFDEF VER80}
procedure SetLength(var S: string; NewLength: Integer);
begin
    S[0] := chr(NewLength);
end;
{$ENDIF}


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{$IFDEF VER80}
function TrimRight(Str : String) : String;
var
    i : Integer;
begin
    i := Length(Str);
    while (i > 0) and (Str[i] = ' ') do
        i := i - 1;
    Result := Copy(Str, 1, i);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function TrimLeft(Str : String) : String;
var
    i : Integer;
begin
    if Str[1] <> ' ' then
        Result := Str
    else begin
        i := 1;
        while (i <= Length(Str)) and (Str[i] = ' ') do
            i := i + 1;
        Result := Copy(Str, i, Length(Str) - i + 1);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function Trim(Str : String) : String;
begin
    Result := TrimLeft(TrimRight(Str));
end;
{$ENDIF}


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
constructor THttpServer.Create(AOwner: TComponent);
begin
    inherited Create(AOwner);
    FWSocketServer := TWSocketServer.Create(Self);
    FClientClass   := THttpConnection;
    FAddr          := '0.0.0.0';
    FPort          := '80';
    FDefaultDoc    := 'index.html';
    FDocDir        := 'c:\wwwroot';
    FLingerOnOff   := wsLingerNoSet;
    FLingerTimeout := 0;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
destructor THttpServer.Destroy;
begin
    if Assigned(FWSocketServer) then begin
        FWSocketServer.Destroy;
        FWSocketServer := nil;
    end;
    inherited Destroy;
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲chinese男男1069| 在线亚洲高清视频| 欧美在线啊v一区| 欧美大片在线观看一区二区| 国产精品白丝在线| 久草精品在线观看| 欧美精品在欧美一区二区少妇| 国产日本一区二区| 麻豆精品一二三| 欧美色视频在线| 亚洲色图在线播放| 国产精品一二三| 精品久久久三级丝袜| 亚洲国产日韩av| 91久久精品日日躁夜夜躁欧美| 久久精品人人做人人爽97| 日韩av在线播放中文字幕| 在线视频你懂得一区| 中文字幕中文字幕在线一区 | 亚洲二区在线观看| 成年人国产精品| 久久久久久一二三区| 精品亚洲porn| 日韩欧美一级在线播放| 日韩av电影天堂| 欧美日本高清视频在线观看| 一区二区三区色| 日本精品一区二区三区高清 | 欧美成人精品1314www| 午夜欧美视频在线观看| 欧美日韩一区二区电影| 亚洲成av人综合在线观看| 在线视频观看一区| 亚洲国产成人av网| 欧美日韩激情在线| 免费久久精品视频| 精品国产伦一区二区三区免费| 裸体在线国模精品偷拍| 欧美精品一区二区三区蜜臀| 麻豆精品一区二区综合av| 精品1区2区在线观看| 国产一区美女在线| 国产精品国产三级国产普通话99| av电影天堂一区二区在线观看| 亚洲三级在线免费| 欧洲视频一区二区| 日本成人在线看| 久久久久国产成人精品亚洲午夜| 国产不卡免费视频| 亚洲精品一二三| 欧美一区二区三区四区久久 | 午夜视频一区二区| 欧美tickle裸体挠脚心vk| 丰满放荡岳乱妇91ww| 国产精品免费网站在线观看| 91在线视频免费观看| 午夜精品久久一牛影视| 久久综合狠狠综合| 色综合网站在线| 强制捆绑调教一区二区| 欧美激情资源网| 91福利在线看| 精品在线播放免费| 亚洲精品中文在线影院| 欧美成人在线直播| 91美女福利视频| 韩国一区二区视频| 亚洲摸摸操操av| xf在线a精品一区二区视频网站| 菠萝蜜视频在线观看一区| 无码av中文一区二区三区桃花岛| 国产午夜精品一区二区三区四区 | 欧美日韩国产免费| 国产成人啪午夜精品网站男同| 一区二区三区四区在线播放| 欧美大片顶级少妇| 一本一本大道香蕉久在线精品 | 日韩精品一二三| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产亚洲精品aa| 欧美性色黄大片| 成人综合婷婷国产精品久久蜜臀 | 亚洲精品欧美在线| 久久精品欧美一区二区三区不卡| 欧美日韩在线播放一区| 国产精品自拍一区| 日韩电影在线一区二区| 国产精品欧美精品| 久久综合九色综合97_久久久| 欧美日韩中文国产| 91麻豆高清视频| 高清不卡在线观看av| 麻豆国产一区二区| 成av人片一区二区| 国内精品国产成人| 日本不卡不码高清免费观看 | 国产精品欧美久久久久一区二区| 欧美一级片在线观看| 欧美色图免费看| 欧美性生活一区| 91福利社在线观看| 色婷婷综合视频在线观看| 成人免费看的视频| 国产精品自拍三区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产婷婷色一区二区三区| 欧美v日韩v国产v| 日韩欧美一区二区久久婷婷| 欧美精品一级二级| 91精品久久久久久久99蜜桃| 欧美日韩高清一区二区不卡 | 午夜精品123| 午夜不卡在线视频| 亚洲综合色区另类av| 亚洲欧洲成人精品av97| 中文字幕在线不卡视频| 中文字幕在线观看不卡| 亚洲欧洲成人精品av97| 尤物在线观看一区| 亚洲成人高清在线| 午夜私人影院久久久久| 日本美女一区二区三区| 欧美aaa在线| 国内精品在线播放| 国产91对白在线观看九色| 丁香六月综合激情| 色综合中文字幕国产 | 欧美日韩亚洲综合| 欧美蜜桃一区二区三区| 欧美成人精品高清在线播放| 久久蜜桃一区二区| 中文字幕一区二区在线播放| 亚洲视频在线一区| 日韩电影免费在线看| 国产呦精品一区二区三区网站| 欧美性视频一区二区三区| 欧美日韩中字一区| 久久综合999| 亚洲欧洲日本在线| 日韩国产在线观看一区| 精品一区中文字幕| 99久久综合狠狠综合久久| 欧美性淫爽ww久久久久无| 日韩欧美电影一区| 最近中文字幕一区二区三区| 午夜成人在线视频| 成人永久免费视频| 欧美精选在线播放| 国产精品久久久久久久久晋中| 亚洲成人激情综合网| 国产精品18久久久久久久久| 日本韩国欧美国产| 精品福利av导航| 亚洲图片有声小说| 懂色av中文字幕一区二区三区| 欧洲色大大久久| 国产欧美日韩在线看| 水野朝阳av一区二区三区| 北条麻妃国产九九精品视频| 欧美日韩精品一区二区| 国产日韩精品一区| 首页国产丝袜综合| 91丨九色丨国产丨porny| 精品欧美一区二区久久 | 国产女同互慰高潮91漫画| 天天做天天摸天天爽国产一区| 国产成人精品综合在线观看| 欧美福利视频一区| 亚洲欧美日韩国产成人精品影院 | 91免费视频大全| 久久亚洲春色中文字幕久久久| 国产精品一色哟哟哟| 7777精品伊人久久久大香线蕉完整版 | 国产视频911| 麻豆高清免费国产一区| 欧美日韩成人综合| 一区二区三区在线视频播放| 国产精品自拍三区| 亚洲精品一区二区三区影院 | 成人性视频免费网站| 精品国产1区2区3区| 亚洲va欧美va人人爽| 91美女片黄在线观看| 国产精品丝袜91| 国产精品1024| 久久久久久电影| 久久成人av少妇免费| 欧美一区二区精品久久911| 亚洲国产wwwccc36天堂| 一本色道久久综合亚洲精品按摩| 中文字幕欧美三区| 成人高清伦理免费影院在线观看| 精品国免费一区二区三区| 久久成人av少妇免费| 精品第一国产综合精品aⅴ| 捆绑变态av一区二区三区| 6080亚洲精品一区二区| 日韩av一二三| 精品国产区一区| 免费在线欧美视频|