📄 ftpsrv.pas
字号:
Directory : TFtpString;
var Allowed : Boolean) of object;
TFtpSrvBuildDirectoryEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
var Directory : TFtpString;
Detailed : Boolean) of object;
TFtpSrvClientConnectEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
AError : Word) of object;
TFtpSrvDataSessionConnectedEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
Data : TWSocket;
AError : Word) of object;
TFtpSrvClientCommandEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
var Keyword : TFtpString;
var Params : TFtpString;
var Answer : TFtpString) of object;
TFtpSrvAnswerToClientEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
var Answer : TFtpString) of object;
TFtpSrvValidateXferEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
var FilePath : TFtpString;
var Allowed : Boolean) of object;
TFtpSrvCalculateMd5Event = procedure (Sender : TObject; { angus V1.39 }
Client : TFtpCtrlSocket;
var FilePath : TFtpString;
var Md5Sum : TFtpString;
var Allowed : Boolean) of object;
TFtpSrvBuildFilePathEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
const Directory : String;
const FileName : String;
var NewFileName : String) of object;
TFtpSrvDataAvailableEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
Data : TWSocket;
Buf : PChar;
Len : LongInt;
AError : Word) of object;
TFtpSrvRetrDataSentEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
Data : TWSocket;
AError : Word) of object;
TFtpSrvGetUniqueFileNameEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
var FileName : TFtpString) of object;
TFtpSrvGetProcessingEvent = procedure (Sender : TObject;
Client : TFtpCtrlSocket;
var DelayedSend : Boolean) of object;
TFtpSrvCommandProc = procedure (Client : TFtpCtrlSocket;
var Keyword : TFtpString;
var Params : TFtpString;
var Answer : TFtpString) of object;
TFtpSrvCommandTableItem = record
KeyWord : String;
Proc : TFtpSrvCommandProc;
end;
TFtpServer = class(TComponent)
protected
FAddr : String;
FPort : String;
FBanner : String;
FServSocket : TWSocket;
FWindowHandle : HWND;
FClientClass : TFtpCtrlSocketClass;
FClientList : TList;
FClientNum : LongInt;
FMaxClients : LongInt;
FCmdTable : array [0..ftpcLast+5] of TFtpSrvCommandTableItem; { angus V1.39 }
FLastCmd : Integer;
FUserData : LongInt; { Reserved for component user }
FPasvPortRangeStart : Integer;
FPasvPortRangeSize : Integer;
FPasvPortTable : PBoolean;
FPasvPortTableSize : Integer;
FPasvIpAddr : String;
FOnStart : TNotifyEvent;
FOnStop : TNotifyEvent;
FOnAuthenticate : TFtpSrvAuthenticateEvent;
FOnClientConnect : TFtpSrvClientConnectEvent;
FOnClientDisconnect : TFtpSrvClientConnectEvent;
FOnClientCommand : TFtpSrvClientCommandEvent;
FOnAnswerToClient : TFtpSrvAnswerToClientEvent;
FOnChangeDirectory : TFtpSrvChangeDirectoryEvent;
FOnMakeDirectory : TFtpSrvChangeDirectoryEvent;
FOnBuildDirectory : TFtpSrvBuildDirectoryEvent;
FOnAlterDirectory : TFtpSrvBuildDirectoryEvent;
FOnValidatePut : TFtpSrvValidateXferEvent;
FOnValidateSize : TFtpSrvValidateXferEvent;
FOnValidateDele : TFtpSrvValidateXferEvent;
FOnValidateRmd : TFtpSrvValidateXferEvent;
FOnValidateRnFr : TFtpSrvValidateXferEvent;
FOnValidateRnTo : TFtpSrvValidateXferEvent;
FOnStorSessionConnected : TFtpSrvDataSessionConnectedEvent;
FOnStorSessionClosed : TFtpSrvDataSessionConnectedEvent;
FOnStorDataAvailable : TFtpSrvDataAvailableEvent;
FOnValidateGet : TFtpSrvValidateXferEvent;
FOnRetrSessionConnected : TFtpSrvDataSessionConnectedEvent;
FOnRetrSessionClosed : TFtpSrvDataSessionConnectedEvent;
FOnRetrDataSent : TFtpSrvRetrDataSentEvent;
FOnGetUniqueFileName : TFtpSrvGetUniqueFileNameEvent;
FOnGetProcessing : TFtpSrvGetProcessingEvent;
FOnBuildFilePath : TFtpSrvBuildFilePathEvent; { serge le 5/10/2002 }
FOnValidateMfmt : TFtpSrvValidateXferEvent; { angus V1.39 }
FOnCalculateMd5 : TFtpSrvCalculateMd5Event; { angus V1.39 }
FOptions : TFtpsOptions;
function FtpSrvAllocateHWnd(Method: TWndMethod) : HWND;
procedure FtpSrvDeallocateHWnd(WHandle : Cardinal);
procedure Notification(AComponent: TComponent; operation: TOperation); override;
procedure ServSocketSessionAvailable(Sender : TObject; AError : Word);
procedure ServSocketStateChange(Sender : TObject; OldState, NewState : TSocketState);
procedure ClientSessionClosed(Sender : TObject; AError : Word);
procedure ClientDataSent(Sender : TObject; AError : Word);
procedure ClientCommand(Sender : TObject; CmdBuf : PChar; CmdLen : Integer);
procedure ClientPassiveSessionAvailable(Sender : TObject; AError : Word);
procedure ClientStorSessionConnected(Sender : TObject; AError : Word);
procedure ClientStorSessionClosed(Sender : TObject; AError : Word);
procedure ClientStorDataAvailable(Sender: TObject; AError : word); virtual;
procedure ClientRetrSessionConnected(Sender : TObject; AError : Word); virtual;
procedure ClientRetrSessionClosed(Sender : TObject; AError : Word);
procedure ClientRetrDataSent(Sender : TObject; AError : Word);
procedure SendAnswer(Client : TFtpCtrlSocket; Answer : TFtpString);
procedure SendNextDataChunk(Client : TFtpCtrlSocket; Data : TWSocket); virtual;
procedure StartSendData(Client : TFtpCtrlSocket);
procedure BuildDirectory(Client : TFtpCtrlSocket;
var Params : TFtpString;
Stream : TStream;
ListType : TListType);
procedure TriggerServerStart; virtual;
procedure TriggerServerStop; virtual;
procedure TriggerAuthenticate(Client : TFtpCtrlSocket;
UserName : String;
PassWord : String;
var Authenticated : Boolean); virtual;
procedure TriggerChangeDirectory(Client : TFtpCtrlSocket;
Directory : String;
var Allowed : Boolean); virtual;
procedure TriggerMakeDirectory(Client : TFtpCtrlSocket;
Directory : String;
var Allowed : Boolean); virtual;
procedure TriggerBuildDirectory(Client : TFtpCtrlSocket;
var Params : TFtpString;
Detailed : Boolean); virtual;
procedure TriggerAlterDirectory(Client : TFtpCtrlSocket;
var Params : TFtpString;
Detailed : Boolean); virtual;
procedure TriggerSendAnswer(Client : TFtpCtrlSocket;
var Answer : TFtpString); virtual;
procedure TriggerClientConnect(Client : TFtpCtrlSocket; AError : Word); virtual;
procedure TriggerClientDisconnect(Client : TFtpCtrlSocket; AError : Word); virtual;
procedure TriggerClientCommand(Client : TFtpCtrlSocket;
var Keyword : TFtpString;
var Params : TFtpString;
var Answer : TFtpString); virtual;
procedure TriggerStorSessionConnected(Client : TFtpCtrlSocket;
Data : TWSocket;
AError : Word); virtual;
procedure TriggerStorSessionClosed(Client : TFtpCtrlSocket;
Data : TWSocket;
AError : Word); virtual;
procedure TriggerValidatePut(Client : TFtpCtrlSocket;
var FilePath : TFtpString;
var Allowed : Boolean); virtual;
procedure TriggerValidateSize(Client : TFtpCtrlSocket;
var FilePath : TFtpString;
var Allowed : Boolean); virtual;
procedure TriggerValidateDele(Client : TFtpCtrlSocket;
var FilePath : TFtpString;
var Allowed : Boolean); virtual;
procedure TriggerValidateRmd(Client : TFtpCtrlSocket;
var FilePath : TFtpString;
var Allowed : Boolean); virtual;
procedure TriggerValidateRnFr(Client : TFtpCtrlSocket;
var FilePath : TFtpString;
var Allowed : Boolean); virtual;
procedure TriggerValidateRnTo(Client : TFtpCtrlSocket;
var FilePath : TFtpString;
var Allowed : Boolean); virtual;
procedure TriggerRetrSessionConnected(Client : TFtpCtrlSocket;
Data : TWSocket;
AError : Word); virtual;
procedure TriggerRetrSessionClosed(Client : TFtpCtrlSocket;
Data : TWSocket;
AError : Word); virtual;
procedure TriggerValidateGet(Client : TFtpCtrlSocket;
var FilePath : TFtpString;
var Allowed : Boolean); virtual;
procedure TriggerStorDataAvailable(Client : TFtpCtrlSocket;
Data : TWSocket;
Buf : PChar;
Len : LongInt;
AError : Word); virtual;
procedure TriggerRetrDataSent(Client : TFtpCtrlSocket;
Data : TWSocket;
AError : Word); virtual;
procedure TriggerGetUniqueFileName(Client : TFtpCtrlSocket;
var FileName : TFtpString); virtual;
procedure TriggerBuildFilePath(Client : TFtpCtrlSocket;
const Directory : String;
const FileName : String;
var NewFileName : String); virtual;
procedure TriggerValidateMfmt(Client : TFtpCtrlSocket; { angus V1.39 }
var FilePath : TFtpString;
var Allowed : Boolean); virtual;
procedure TriggerCalculateMd5 (Client : TFtpCtrlSocket; { angus V1.39 }
var FilePath : TFtpString;
var Md5Sum : TFtpString;
var Allowed : Boolean); virtual;
function BuildFilePath(Client : TFtpCtrlSocket;
Directory : String;
FileName : String) : String; virtual;
function GetClientCount : Integer; virtual;
function GetClient(nIndex : Integer) : TFtpCtrlSocket; virtual;
{ !!!!!!!!!!!!!!!! NGB: Added next two lines }
procedure FreeCurrentPasvPort(DataSocket : TFtpCtrlSocket);
function GetNextAvailablePasvPort : String;
{ !!!!!!!!!!!!!!!! NGB: Added last two lines }
function GetActive : Boolean;
procedure SetActive(newValue : Boolean);
procedure SetPasvPortRangeSize(const NewValue: Integer);
procedure SetPasvPortRangeStart(const NewValue: Integer);
procedure AddCommand(const Keyword : String;
const Proc : TFtpSrvCommandProc); virtual;
procedure WMFtpSrvCloseRequest(var msg: TMessage);
message WM_FTPSRV_CLOSE_REQUEST;
procedure WMFtpSrvClientClosed(var msg: TMessage);
message WM_FTPSRV_CLIENT_CLOSED;
procedure WMFtpSrvAbortTransfer(var msg: TMessage);
message WM_FTPSRV_ABORT_TRANSFER;
procedure WMFtpSrvCloseData(var msg: TMessage);
message WM_FTPSRV_CLOSE_DATA;
procedure WMFtpSrvStartSend(var msg: TMessage);
message WM_FTPSRV_START_SEND;
procedure CommandDirectory(Client : TFtpCtrlSocket;
var Keyword : TFtpString;
var Params : TFtpString;
var Answer : TFtpString;
Detailed : Boolean); virtual;
procedure CommandDirectory2(Client : TFtpCtrlSocket;
var Keyword : TFtpString;
var Params : TFtpString;
var Answer : TFtpString;
ListType : TListType);
procedure CommandUSER(Client : TFtpCtrlSocket;
var Keyword : TFtpString;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -