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

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

?? idftpserver.pas

?? delphi indy9.0.18組件包
?? PAS
?? 第 1 頁 / 共 4 頁
字號:
{ $HDR$}
{**********************************************************************}
{ Unit archived using Team Coherence                                   }
{ Team Coherence is Copyright 2002 by Quality Software Components      }
{                                                                      }
{ For further information / comments, visit our WEB site at            }
{ http://www.TeamCoherence.com                                         }
{**********************************************************************}
{}
{ $Log:  10167: IdFTPServer.pas 
{
{   Rev 1.6    7/13/04 7:03:30 PM  RLebeau
{ Readded DataPort property to TIdFTPServerThread and made read-only
}
{
{   Rev 1.5    7/13/04 5:42:06 PM  RLebeau
{ Various changes to hook up the DefaultDataPort property correctly
}
{
{   Rev 1.4    2/17/04 4:40:50 PM  RLebeau
{ OnPASV event added for people needing to change the IP address or port value
{ in the PASV command.  This should only be done if you have a compelling
{ reason to do it.
}
{
    Rev 1.3    1/23/2003 9:09:18 PM  BGooijen
  Changed ABOR to fix the command while uploading
}
{
{   Rev 1.2    1-9-2003 11:44:42  BGooijen
{ Added ABOR command with telnet escape characters
{ Fixed hanging of ABOR command
{ STOR and STOU now use REST-position
}
{
{   Rev 1.1    12/10/2002 07:43:04 AM  JPMugaas
{ Merged fix for a problem were resume cause the entire file to be sent instead
{ of the part requrested.
}
{
{   Rev 1.0    2002.11.12 10:39:06 PM  czhower
}
unit IdFTPServer;
{
 Original Author: Sergio Perry
 Date: 04/21/2001

 Fixes and modifications: Doychin Bondzhev
 Date: 08/10/2001

 Further Extensive changes by Chad Z. Hower (Kudzu)

TODO:
 - Change events to use DoXXXX
}

interface

uses
  Classes,
  SysUtils,  IdAssignedNumbers,
  IdException, IdFTPList, IdTCPServer, IdTCPConnection, IdUserAccounts,
  IdFTPCommon, IdThread, IdRFCReply;

type
  TIdFTPUserType = (utNone, utAnonymousUser, utNormalUser);
  TIdFTPSystems = (ftpsOther, ftpsDOS, ftpsUNIX, ftpsVAX);
  TIdFTPOperation = (ftpRetr, ftpStor);

const
  Id_DEF_AllowAnon  = False;
  Id_DEF_PassStrictCheck = True;
  Id_DEF_SystemType = ftpsDOS;

type
  TIdFTPServerThread = class;

  TOnUserLoginEvent = procedure(ASender: TIdFTPServerThread; const AUsername, APassword: string;
    var AAuthenticated: Boolean) of object;
  TOnAfterUserLoginEvent = procedure(ASender: TIdFTPServerThread) of object;
  TOnDirectoryEvent = procedure(ASender: TIdFTPServerThread; var VDirectory: string) of object;
  TOnGetFileSizeEvent = procedure(ASender: TIdFTPServerThread; const AFilename: string;
    var VFileSize: Int64) of object;
  TOnListDirectoryEvent = procedure(ASender: TIdFTPServerThread; const APath: string;
    ADirectoryListing: TIdFTPListItems) of object;
  TOnFileEvent = procedure(ASender: TIdFTPServerThread; const APathName: string) of object;
  TOnRenameFileEvent = procedure(ASender: TIdFTPServerThread; const ARenameFromFile,ARenameToFile: string) of object;
  TOnRetrieveFileEvent = procedure(ASender: TIdFTPServerThread; const AFileName: string;
    var VStream: TStream) of object;
  TOnStoreFileEvent = procedure(ASender: TIdFTPServerThread; const AFileName: string;
    AAppend: Boolean; var VStream: TStream) of object;
  //This is for PASV support - do not change the values unless you
  //have an extremely compelling reason to do so.  This even is ONLY for those compelling case.
  TOnPASVEvent = procedure(ASender: TIdFTPServerThread; var VIP : String; var VPort : Word) of object;

  EIdFTPServerException = class(EIdException);
  EIdFTPServerNoOnListDirectory = class(EIdFTPServerException);

  TIdDataChannelThread = class(TIdThread)
  protected
    FControlChannel: TIdTCPServerConnection;
    FDataChannel: TIdTCPConnection;
    FErrorReply: TIdRFCReply;
    FFtpOperation: TIdFTPOperation;
    FOKReply: TIdRFCReply;
    //
    procedure Run; override;
    procedure SetErrorReply(const AValue: TIdRFCReply);
    procedure SetOKReply(const AValue: TIdRFCReply);
  public
    constructor Create(APASV: Boolean; AControlConnection: TIdTCPServerConnection); reintroduce;
    destructor Destroy; override;
    procedure StartThread(AOperation: TIdFTPOperation);
    procedure SetupDataChannel(const AIP: string; APort: Integer);
    //
    property OKReply: TIdRFCReply read FOKReply write SetOKReply;
    property ErrorReply: TIdRFCReply read FErrorReply write SetErrorReply;
  end;

  TIdFTPServerThread = class(TIdPeerThread)
  protected
    FUserType: TIdFTPUserType;
    FAuthenticated: Boolean;
    FALLOSize: Integer;
    FCurrentDir: string;
    FDataType: TIdFTPTransferType;
    FDataMode: TIdFTPTransferMode;
    FDataPort: Integer;
    FDataStruct: TIdFTPDataStructure;
    FDataChannelThread: TIdDataChannelThread;
    FHomeDir: string;
    FUsername: string;
    FPassword: string;
    FPASV: Boolean;
    FRESTPos: Integer;
    FRNFR: string;
    //
    procedure CreateDataChannel(APASV: Boolean = False);
    function  IsAuthenticated(ASender: TIdCommand): Boolean;
    procedure KillDataChannel;
    procedure TerminateAndFreeDataChannel;
    procedure ReInitialize;
  public
    constructor Create(ACreateSuspended: Boolean = True); override;
    destructor Destroy; override;
    //
    property Authenticated: Boolean read FAuthenticated write FAuthenticated;
    property ALLOSize: Integer read FALLOSize write FALLOSize;
    property CurrentDir: string read FCurrentDir write FCurrentDir;
    property DataChannelThread: TIdDataChannelThread read FDataChannelThread
     write FDataChannelThread;
    property DataType: TIdFTPTransferType read FDataType write FDataType;
    property DataMode: TIdFTPTransferMode read FDataMode write FDataMode;
    property DataPort: Integer read FDataPort;
    property DataStruct: TIdFTPDataStructure read FDataStruct write FDataStruct;
    property HomeDir: string read FHomeDir write FHomeDir;
    property Password: string read FPassword write FPassword;
    property PASV: Boolean read FPASV write FPASV;
    property RESTPos: Integer read FRESTPos write FRESTPos;
    property Username: string read FUsername write FUsername;
    property UserType: TIdFTPUserType read FUserType write FUserType;
  end;

  TIdFTPServer = class;

  TIdOnGetCustomListFormat = procedure(ASender: TIdFTPServer; AItem: TIdFTPListItem;
   var VText: string) of object;

  { FTP Server }
  TIdFTPServer = class(TIdTCPServer)
  protected
    FAnonymousAccounts: TstringList;
    FAllowAnonymousLogin: Boolean;
    FAnonymousPassStrictCheck: Boolean;
    FCmdHandlerList: TIdCommandHandler;
    FCmdHandlerNlst: TIdCommandHandler;
    FEmulateSystem: TIdFTPSystems;
    FHelpReply: Tstrings;
    FSystemType: string;
    FDefaultDataPort : Integer;
    FUserAccounts: TIdUserManager;
    FOnAfterUserLogin: TOnAfterUserLoginEvent;
    FOnGetCustomListFormat: TIdOnGetCustomListFormat;
    FOnUserLogin: TOnUserLoginEvent;
    FOnChangeDirectory: TOnDirectoryEvent;
    FOnGetFileSize: TOnGetFileSizeEvent;
    FOnListDirectory: TOnListDirectoryEvent;
    FOnRenameFile: TOnRenameFileEvent;
    FOnDeleteFile: TOnFileEvent;
    FOnRetrieveFile: TOnRetrieveFileEvent;
    FOnStoreFile: TOnStoreFileEvent;
    FOnMakeDirectory: TOnDirectoryEvent;
    FOnRemoveDirectory: TOnDirectoryEvent;
    FOnPASV : TOnPASVEvent;
    //Command replies
    procedure CommandUSER(ASender: TIdCommand);
    procedure CommandPASS(ASender: TIdCommand);
    procedure CommandCWD(ASender: TIdCommand);
    procedure CommandCDUP(ASender: TIdCommand);
    procedure CommandREIN(ASender: TIdCommand);
    procedure CommandPORT(ASender: TIdCommand);
    procedure CommandPASV(ASender: TIdCommand);
    procedure CommandTYPE(ASender: TIdCommand);
    procedure CommandSTRU(ASender: TIdCommand);
    procedure CommandMODE(ASender: TIdCommand);
    procedure CommandRETR(ASender: TIdCommand);
    procedure CommandSSAP(ASender: TIdCommand);
    procedure CommandALLO(ASender: TIdCommand);
    procedure CommandREST(ASender: TIdCommand);
    procedure CommandRNFR(ASender: TIdCommand);
    procedure CommandRNTO(ASender: TIdCommand);
    procedure CommandABOR(ASender: TIdCommand);
    procedure CommandDELE(ASender: TIdCommand);
    procedure CommandRMD(ASender: TIdCommand);
    procedure CommandMKD(ASender: TIdCommand);
    procedure CommandPWD(ASender: TIdCommand);
    procedure CommandLIST(ASender: TIdCommand);
    procedure CommandSITE(ASender: TIdCommand);
    procedure CommandSYST(ASender: TIdCommand);
    procedure CommandSTAT(ASender: TIdCommand);
    procedure CommandSIZE(ASender: TIdCommand);
    procedure CommandFEAT(ASender: TIdCommand);
    procedure CommandOPTS(ASender: TIdCommand);
    //
    procedure DoChangeDirectory(AThread: TIdFTPServerThread; var VDirectory: string);
    procedure DoMakeDirectory(AThread: TIdFTPServerThread; var VDirectory: string);
    procedure DoRemoveDirectory(AThread: TIdFTPServerThread; var VDirectory: string);
    procedure DoGetCustomListFormat(AItem: TIdFTPListItem; var VText: string);
    procedure DoOnPASV(AThread: TIdFTPServerThread; var VIP: String; var VPort: Word);
    procedure InitializeCommandHandlers; override;
    procedure ListDirectory(ASender: TIdFTPServerThread; ADirectory: string;
      var ADirContents: TstringList; ADetails: Boolean);
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure SetAnonymousAccounts(const AValue: TstringList);
    procedure SetHelpReply(const AValue: Tstrings);
    procedure SetUserAccounts(const AValue: TIdUserManager);
    procedure SetEmulateSystem(const AValue: TIdFTPSystems);
    procedure ThreadException(AThread: TIdThread; AException: Exception);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property AllowAnonymousLogin: Boolean read FAllowAnonymousLogin write FAllowAnonymousLogin default Id_DEF_AllowAnon;
    property AnonymousAccounts: TStringList read FAnonymousAccounts write SetAnonymousAccounts;
    property AnonymousPassStrictCheck: Boolean read FAnonymousPassStrictCheck
     write FAnonymousPassStrictCheck default Id_DEF_PassStrictCheck;
    property DefaultDataPort : Integer read FDefaultDataPort write FDefaultDataPort default IdPORT_FTP_DATA;
    property EmulateSystem: TIdFTPSystems read FEmulateSystem write SetEmulateSystem default Id_DEF_SystemType;
    property HelpReply: Tstrings read FHelpReply write SetHelpReply;
    property UserAccounts: TIdUserManager read FUserAccounts write SetUserAccounts;
    property SystemType: string read FSystemType write FSystemType;
    property OnAfterUserLogin: TOnAfterUserLoginEvent read FOnAfterUserLogin
     write FOnAfterUserLogin;
    property OnChangeDirectory: TOnDirectoryEvent read FOnChangeDirectory write FOnChangeDirectory;
    property OnGetCustomListFormat: TIdOnGetCustomListFormat read FOnGetCustomListFormat
     write FOnGetCustomListFormat;
    property OnGetFileSize: TOnGetFileSizeEvent read FOnGetFileSize write FOnGetFileSize;
    property OnUserLogin: TOnUserLoginEvent read FOnUserLogin write FOnUserLogin;
    property OnListDirectory: TOnListDirectoryEvent read FOnListDirectory write FOnListDirectory;
    property OnRenameFile: TOnRenameFileEvent read FOnRenameFile write FOnRenameFile;
    property OnDeleteFile: TOnFileEvent read FOnDeleteFile write FOnDeleteFile;
    property OnRetrieveFile: TOnRetrieveFileEvent read FOnRetrieveFile write FOnRetrieveFile;
    property OnStoreFile: TOnStoreFileEvent read FOnStoreFile write FOnStoreFile;
    property OnMakeDirectory: TOnDirectoryEvent read FOnMakeDirectory write FOnMakeDirectory;
    property OnRemoveDirectory: TOnDirectoryEvent read FOnRemoveDirectory write FOnRemoveDirectory;
    {
    READ THIS!!!

    Do not change values in the OnPASV event unless you have a compelling reason to do so.
    }
    property OnPASV : TOnPASVEvent read FOnPASV write FOnPASV;
  end;

implementation

uses
  IdGlobal,
  IdIOHandlerSocket,
  IdResourcestrings,
  IdSimpleServer,
  IdSocketHandle,
  Idstrings,
  IdTCPClient,
  IdEMailAddress;

{ TIdDataChannelThread }

constructor TIdDataChannelThread.Create(APASV: Boolean; AControlConnection: TIdTCPServerConnection);
begin
  inherited Create;
  StopMode := smSuspend;
  FOKReply := TIdRFCReply.Create(nil);
  FErrorReply := TIdRFCReply.Create(nil);
  FControlChannel := AControlConnection;
  if APASV then begin
    FDataChannel := TIdSimpleServer.Create(nil);
    TIdSimpleServer(FDataChannel).BoundIP := TIdIOHandlerSocket(FControlChannel.IOHandler).Binding.IP;
  end else begin
    FDataChannel := TIdTCPClient.Create(nil);
    TIdTCPClient(FDataChannel).BoundPort := TIdFTPServer(FControlChannel.Server).DefaultDataPort;  //Default dataport
  end;
end;

destructor TIdDataChannelThread.Destroy;
begin
  FreeAndNil(FOKReply);
  FreeAndNil(FErrorReply);
  FreeAndNil(FDataChannel);
  inherited Destroy;
end;

procedure TIdDataChannelThread.StartThread(AOperation: TIdFTPOperation);
begin
  FFtpOperation := AOperation; try
    if FDataChannel is TIdSimpleServer then begin
      TIdSimpleServer(FDataChannel).Listen;
    end else if FDataChannel is TIdTCPClient then begin
      TIdTCPClient(FDataChannel).Connect;
    end;
  except
    FControlChannel.WriteRFCReply(FErrorReply); //426
    raise;
  end;
  inherited Start;
end;

procedure TIdDataChannelThread.Run;
var
  LStrStream: TMemoryStream; //is faster than StringStream
begin
  try
    try
      try
        try
          if Data is TStream then begin
            case FFtpOperation of
              ftpRetr: FDataChannel.WriteStream(TStream(Data),False);
              ftpStor: FDataChannel.ReadStream(TStream(Data), -1, True);
            end;
          end else begin
            case FFtpOperation of
              ftpRetr: FDataChannel.Writestrings(Data as Tstrings);
              ftpStor:
                begin
                  LStrStream := TMemoryStream.Create;
                  try
                    FDataChannel.ReadStream(LStrStream, -1, True);
                    SplitLines(LStrStream.Memory, LStrStream.Size,TStrings(Data));
                  finally
                    FreeAndNil(LStrStream);
                  end;
                end;//ftpStor
            end;//case
          end;
        finally
          FreeAndNIL(FData);
        end;
      finally
        FDataChannel.Disconnect;
      end;
      FControlChannel.WriteRFCReply(FOKReply); //226
    except
      FControlChannel.WriteRFCReply(FErrorReply); //426
    end;
  finally Stop; end;
end;

procedure TIdDataChannelThread.SetupDataChannel(const AIP: string; APort: Integer);
begin
  if FDataChannel is TIdSimpleServer then begin
    with TIdSimpleServer(FDataChannel) do begin
      BoundIP := AIP;
      BoundPort := APort;
    end;
  end else begin
    with TIdTCPClient(FDataChannel) do begin
      Host := AIP;
      Port := APort;
    end;
  end;
end;

procedure TIdDataChannelThread.SetErrorReply(const AValue: TIdRFCReply);
begin
  FErrorReply.Assign(AValue);
end;

procedure TIdDataChannelThread.SetOKReply(const AValue: TIdRFCReply);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色视频在线观看| 中文字幕精品一区二区三区精品| 青青草国产精品亚洲专区无| 国产精品美女www爽爽爽| 91麻豆精品国产91久久久更新时间| 美腿丝袜在线亚洲一区| 一区二区三区欧美视频| 国产精品视频免费看| 欧美精品一卡二卡| 欧美三区在线观看| 盗摄精品av一区二区三区| 美美哒免费高清在线观看视频一区二区 | 99精品视频在线免费观看| 精品在线观看免费| 亚洲影院理伦片| 国产精品情趣视频| 欧美韩国日本一区| 久久精品人人做人人爽人人| 日韩欧美国产综合在线一区二区三区| 欧美在线短视频| 91福利视频久久久久| 99久久婷婷国产综合精品电影 | 午夜成人在线视频| 亚洲国产成人av网| 免费一级欧美片在线观看| 日韩电影在线观看电影| 蜜桃av一区二区三区| 美女尤物国产一区| 日韩精品免费专区| 久久精品国产一区二区三区免费看 | 国产精品1区二区.| 成人av网站在线观看| 91小视频在线观看| 欧美伊人久久久久久久久影院 | 欧美日韩国产一级片| 91麻豆免费看| 欧美性受xxxx黑人xyx| 欧美精品久久久久久久多人混战| 欧美色综合网站| 欧美一区二区在线不卡| 亚洲欧美日韩综合aⅴ视频| 精品国产伦一区二区三区观看方式| 国产欧美一区二区三区在线看蜜臀| 日韩毛片一二三区| 精品影院一区二区久久久| 91小宝寻花一区二区三区| 精品国产凹凸成av人网站| 亚洲女人****多毛耸耸8| 久久99久久久久久久久久久| 91美女福利视频| 久久一夜天堂av一区二区三区| 亚洲影视资源网| 成人综合在线观看| 欧美一区二区日韩一区二区| 亚洲三级理论片| 国产揄拍国内精品对白| 欧美视频一区在线| 国产精品国产自产拍在线| 国内精品伊人久久久久av影院| 欧美日韩一区二区三区免费看 | 国产一区二区精品久久91| 亚洲国产精品成人综合色在线婷婷 | 色婷婷国产精品综合在线观看| 日韩欧美色电影| 亚洲一区二区三区小说| 99久久国产综合精品麻豆| 精品福利一二区| 麻豆91在线观看| 欧美日韩亚洲丝袜制服| 亚洲激情六月丁香| 99re这里只有精品视频首页| 国产日韩一级二级三级| 国产高清无密码一区二区三区| 日韩精品资源二区在线| 日韩不卡一区二区三区| 在线播放中文一区| 午夜久久久久久| 欧美性受xxxx| 亚洲国产精品麻豆| 在线免费不卡电影| 亚洲自拍偷拍综合| 欧美日韩一卡二卡| 免费一级欧美片在线观看| 日韩三级精品电影久久久 | 一本大道av一区二区在线播放 | 欧美美女视频在线观看| 亚洲国产综合91精品麻豆| 欧美最猛性xxxxx直播| 午夜精品免费在线| 欧美电影免费观看高清完整版在| 毛片av中文字幕一区二区| 337p日本欧洲亚洲大胆色噜噜| 国产一区二区在线视频| 欧美国产日韩a欧美在线观看 | 欧美三级乱人伦电影| 天堂成人免费av电影一区| 欧美一区二区三区免费视频| 麻豆国产一区二区| 国产欧美日韩精品在线| 99久久免费视频.com| 亚洲黄色免费网站| 欧美浪妇xxxx高跟鞋交| 久久精品久久精品| 国产精品美女久久久久久| 欧美日韩综合色| 国产做a爰片久久毛片| 最新欧美精品一区二区三区| 欧美日韩国产综合视频在线观看| 久久电影网站中文字幕| 国产精品久线在线观看| 欧美狂野另类xxxxoooo| 国产91精品一区二区麻豆网站| 亚洲欧美日韩国产综合| 欧美精品乱码久久久久久按摩| 久99久精品视频免费观看| 日韩一区有码在线| 日韩色视频在线观看| 99久久99久久久精品齐齐 | 欧美另类久久久品| 成人一区在线看| 亚洲一区国产视频| 国产精品人妖ts系列视频| 欧美日韩成人综合天天影院 | 韩国三级中文字幕hd久久精品| 国产日产欧美精品一区二区三区| 97精品电影院| 九九九精品视频| 亚洲欧美一区二区三区孕妇| 欧美日韩一区精品| www.成人网.com| 精品无人区卡一卡二卡三乱码免费卡| 亚洲色图另类专区| 国产日产欧美一区| 久久综合av免费| 制服丝袜亚洲色图| 在线免费观看一区| heyzo一本久久综合| 久久疯狂做爰流白浆xx| 亚洲国产精品一区二区尤物区| 中文字幕一区二区三区四区| 久久久噜噜噜久久人人看| 日韩三级中文字幕| 日韩一区二区免费在线电影| 欧洲在线/亚洲| 色悠悠久久综合| 99re视频精品| www.亚洲人| 国产精品一级二级三级| 久久超碰97中文字幕| 青青草97国产精品免费观看 | 26uuu欧美日本| 欧美成人福利视频| 日韩精品专区在线影院观看| 欧美丰满少妇xxxxx高潮对白| 色一情一乱一乱一91av| 91久久精品一区二区三| 色欧美片视频在线观看| 在线影视一区二区三区| 欧美视频一二三区| 欧美调教femdomvk| 欧美久久久久免费| 这里是久久伊人| 91麻豆精品国产91久久久资源速度| 在线免费观看一区| 91精品国产综合久久久蜜臀图片| 欧美乱妇15p| 日韩一区二区在线观看视频| 日韩一区二区免费在线观看| 日韩免费视频一区| 日本一区二区视频在线观看| 国产精品久久久久久户外露出| 国产精品久久免费看| 亚洲日本一区二区| 亚洲成人免费视| 久久99热99| 99久久免费视频.com| 欧美日本在线播放| 精品国产露脸精彩对白| 中文一区在线播放| 一区二区高清在线| 美女视频黄a大片欧美| 国产精品一色哟哟哟| 91丨九色丨国产丨porny| 欧美日韩免费高清一区色橹橹 | 日本道免费精品一区二区三区| 欧美亚洲高清一区| 久久午夜羞羞影院免费观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日本高清视频一区二区| 欧美一级黄色片| 中文幕一区二区三区久久蜜桃| 一区2区3区在线看| 国产尤物一区二区在线| 欧美亚洲国产一区二区三区va| 精品国内二区三区| 亚洲精品乱码久久久久| 精品一区二区三区不卡 | 国产91丝袜在线18| 欧美人与禽zozo性伦| 国产日产亚洲精品系列|