Class TFtpServer (unit FtpSrv)

Inherits from

TComponent

Constructors


constructor Create(AOwner: TComponent);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


Functions

destructor Destroy;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure DisconnectAll;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure Start;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure Stop;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure WndProc(var MsgRec: TMessage);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure AddCommand(const Keyword : String; const Proc : TFtpSrvCommandProc);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure BuildDirectory(Client : TFtpCtrlSocket; var Params : TFtpString; Stream : TStream; Detailed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ClientCommand(Sender : TObject; CmdBuf : PChar; CmdLen : Integer);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ClientDataSent(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ClientPassiveSessionAvailable(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ClientRetrDataSent(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ClientRetrSessionClosed(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ClientRetrSessionConnected(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ClientSessionClosed(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ClientStorDataAvailable(Sender: TObject; Error : word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ClientStorSessionClosed(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ClientStorSessionConnected(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandABOR(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandCDUP(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandChangeDir(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandCWD (Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandDELE(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandDirectory(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString; Detailed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandLIST(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandMKD (Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandNLST(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandNOOP(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandPASS(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandPASV(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandPORT(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandPWD (Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandQUIT(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandREST(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandRETR(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandRMD (Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandRNFR(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandRNTo(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandSIZE(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandSTOR(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandSYST(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandTYPE(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandUSER(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure CommandXPWD(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

function GetActive : Boolean;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

function GetClientCount : Integer;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure Notification(AComponent: TComponent; operation: TOperation);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure SendAnswer(Client : TFtpCtrlSocket; Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure SendNextDataChunk(Client : TFtpCtrlSocket; Data : TWSocket);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ServSocketSessionAvailable(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure ServSocketStateChange(Sender : TObject; OldState, NewState : TSocketState);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure SetActive(newValue : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure StartSendData(Client : TFtpCtrlSocket);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerAlterDirectory(Client : TFtpCtrlSocket; var Params : TFtpString; Detailed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerAuthenticate(Client : TFtpCtrlSocket; UserName : String; PassWord : String; var Authenticated : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerBuildDirectory(Client : TFtpCtrlSocket; var Params : TFtpString; Detailed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerChangeDirectory(Client : TFtpCtrlSocket; Directory : String; var Allowed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerClientCommand(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerClientConnect(Client : TFtpCtrlSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerClientDisconnect(Client : TFtpCtrlSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerMakeDirectory(Client : TFtpCtrlSocket; Directory : String; var Allowed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerRetrDataSent(Client : TFtpCtrlSocket; Data : TWSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerRetrSessionClosed(Client : TFtpCtrlSocket; Data : TWSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerRetrSessionConnected(Client : TFtpCtrlSocket; Data : TWSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerSendAnswer(Client : TFtpCtrlSocket; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerServerStart;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerServerStop;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerStorDataAvailable(Client : TFtpCtrlSocket; Data : TWSocket; Buf : PChar; Len : LongInt; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerStorSessionClosed(Client : TFtpCtrlSocket; Data : TWSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerStorSessionConnected(Client : TFtpCtrlSocket; Data : TWSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerValidateGet(Client : TFtpCtrlSocket; var FilePath : TFtpString; var Allowed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure TriggerValidatePut(Client : TFtpCtrlSocket; var FilePath : TFtpString; var Allowed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure WMFtpSrvAbortTransfer(var msg: TMessage);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure WMFtpSrvClientClosed(var msg: TMessage);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure WMFtpSrvCloseData(var msg: TMessage);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

procedure WMFtpSrvCloseRequest(var msg: TMessage);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Properties

property Banner : String


property MaxClients : LongInt


property Port : String


property UserData : LongInt


property Active : Boolean


property ClientClass : TFtpCtrlSocketClass


property ClientCount : Integer


property Handle : HWND


property ServSocket : TWSocket


Events

event OnAlterDirectory : TFtpSrvBuildDirectoryEvent


event OnAnswerToClient : TFtpSrvAnswerToClientEvent


event OnAuthenticate : TFtpSrvAuthenticateEvent


event OnBuildDirectory : TFtpSrvBuildDirectoryEvent


event OnChangeDirectory : TFtpSrvChangeDirectoryEvent


event OnClientCommand : TFtpSrvClientCommandEvent


event OnClientConnect : TFtpSrvClientConnectEvent


event OnClientDisconnect : TFtpSrvClientConnectEvent


event OnMakeDirectory : TFtpSrvChangeDirectoryEvent


event OnRetrDataSent : TFtpSrvRetrDataSentEvent


event OnRetrSessionClosed : TFtpSrvDataSessionConnectedEvent


event OnRetrSessionConnected : TFtpSrvDataSessionConnectedEvent


event OnStart : TNotifyEvent


event OnStop : TNotifyEvent


event OnStorDataAvailable : TFtpSrvDataAvailableEvent


event OnStorSessionClosed : TFtpSrvDataSessionConnectedEvent


event OnStorSessionConnected : TFtpSrvDataSessionConnectedEvent


event OnValidateGet : TFtpSrvValidateXferEvent


event OnValidatePut : TFtpSrvValidateXferEvent


Variables

FBanner : String;


FClientClass : TFtpCtrlSocketClass;


FClientList : TList;


FClientNum : LongInt;


FCmdTable : array [0..31] of TFtpSrvCommandTableItem;


FLastCmd : Integer;


FMaxClients : LongInt;


FOnAlterDirectory : TFtpSrvBuildDirectoryEvent;


FOnAnswerToClient : TFtpSrvAnswerToClientEvent;


FOnAuthenticate : TFtpSrvAuthenticateEvent;


FOnBuildDirectory : TFtpSrvBuildDirectoryEvent;


FOnChangeDirectory : TFtpSrvChangeDirectoryEvent;


FOnClientCommand : TFtpSrvClientCommandEvent;


FOnClientConnect : TFtpSrvClientConnectEvent;


FOnClientDisconnect : TFtpSrvClientConnectEvent;


FOnMakeDirectory : TFtpSrvChangeDirectoryEvent;


FOnRetrDataSent : TFtpSrvRetrDataSentEvent;


FOnRetrSessionClosed : TFtpSrvDataSessionConnectedEvent;


FOnRetrSessionConnected : TFtpSrvDataSessionConnectedEvent;


FOnStart : TNotifyEvent;

Reserved for component user

FOnStop : TNotifyEvent;


FOnStorDataAvailable : TFtpSrvDataAvailableEvent;


FOnStorSessionClosed : TFtpSrvDataSessionConnectedEvent;


FOnStorSessionConnected : TFtpSrvDataSessionConnectedEvent;


FOnValidateGet : TFtpSrvValidateXferEvent;


FOnValidatePut : TFtpSrvValidateXferEvent;


FPort : String;


FServSocket : TWSocket;


FUserData : LongInt;


FWindowHandle : HWND;



Constructors


constructor Create(AOwner: TComponent);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


Functions


destructor Destroy;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure DisconnectAll;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure Start;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure Stop;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure WndProc(var MsgRec: TMessage);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure AddCommand(const Keyword : String; const Proc : TFtpSrvCommandProc);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure BuildDirectory(Client : TFtpCtrlSocket; var Params : TFtpString; Stream : TStream; Detailed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ClientCommand(Sender : TObject; CmdBuf : PChar; CmdLen : Integer);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ClientDataSent(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ClientPassiveSessionAvailable(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ClientRetrDataSent(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ClientRetrSessionClosed(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ClientRetrSessionConnected(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ClientSessionClosed(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ClientStorDataAvailable(Sender: TObject; Error : word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ClientStorSessionClosed(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ClientStorSessionConnected(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandABOR(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandCDUP(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandChangeDir(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandCWD (Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandDELE(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandDirectory(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString; Detailed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandLIST(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandMKD (Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandNLST(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandNOOP(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandPASS(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandPASV(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandPORT(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandPWD (Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandQUIT(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandREST(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandRETR(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandRMD (Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandRNFR(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandRNTo(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandSIZE(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandSTOR(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandSYST(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandTYPE(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandUSER(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure CommandXPWD(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


function GetActive : Boolean;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


function GetClientCount : Integer;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure Notification(AComponent: TComponent; operation: TOperation);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure SendAnswer(Client : TFtpCtrlSocket; Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure SendNextDataChunk(Client : TFtpCtrlSocket; Data : TWSocket);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ServSocketSessionAvailable(Sender : TObject; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure ServSocketStateChange(Sender : TObject; OldState, NewState : TSocketState);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure SetActive(newValue : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure StartSendData(Client : TFtpCtrlSocket);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerAlterDirectory(Client : TFtpCtrlSocket; var Params : TFtpString; Detailed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerAuthenticate(Client : TFtpCtrlSocket; UserName : String; PassWord : String; var Authenticated : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerBuildDirectory(Client : TFtpCtrlSocket; var Params : TFtpString; Detailed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerChangeDirectory(Client : TFtpCtrlSocket; Directory : String; var Allowed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerClientCommand(Client : TFtpCtrlSocket; var Keyword : TFtpString; var Params : TFtpString; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerClientConnect(Client : TFtpCtrlSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerClientDisconnect(Client : TFtpCtrlSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerMakeDirectory(Client : TFtpCtrlSocket; Directory : String; var Allowed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerRetrDataSent(Client : TFtpCtrlSocket; Data : TWSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerRetrSessionClosed(Client : TFtpCtrlSocket; Data : TWSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerRetrSessionConnected(Client : TFtpCtrlSocket; Data : TWSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerSendAnswer(Client : TFtpCtrlSocket; var Answer : TFtpString);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerServerStart;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerServerStop;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerStorDataAvailable(Client : TFtpCtrlSocket; Data : TWSocket; Buf : PChar; Len : LongInt; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerStorSessionClosed(Client : TFtpCtrlSocket; Data : TWSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerStorSessionConnected(Client : TFtpCtrlSocket; Data : TWSocket; Error : Word);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerValidateGet(Client : TFtpCtrlSocket; var FilePath : TFtpString; var Allowed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure TriggerValidatePut(Client : TFtpCtrlSocket; var FilePath : TFtpString; var Allowed : Boolean);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure WMFtpSrvAbortTransfer(var msg: TMessage);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure WMFtpSrvClientClosed(var msg: TMessage);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure WMFtpSrvCloseData(var msg: TMessage);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


procedure WMFtpSrvCloseRequest(var msg: TMessage);

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


Properties


property Banner : String


property MaxClients : LongInt


property Port : String


property UserData : LongInt


property Active : Boolean


property ClientClass : TFtpCtrlSocketClass


property ClientCount : Integer


property Handle : HWND


property ServSocket : TWSocket


Events


event OnAlterDirectory : TFtpSrvBuildDirectoryEvent


event OnAnswerToClient : TFtpSrvAnswerToClientEvent


event OnAuthenticate : TFtpSrvAuthenticateEvent


event OnBuildDirectory : TFtpSrvBuildDirectoryEvent


event OnChangeDirectory : TFtpSrvChangeDirectoryEvent


event OnClientCommand : TFtpSrvClientCommandEvent


event OnClientConnect : TFtpSrvClientConnectEvent


event OnClientDisconnect : TFtpSrvClientConnectEvent


event OnMakeDirectory : TFtpSrvChangeDirectoryEvent


event OnRetrDataSent : TFtpSrvRetrDataSentEvent


event OnRetrSessionClosed : TFtpSrvDataSessionConnectedEvent


event OnRetrSessionConnected : TFtpSrvDataSessionConnectedEvent


event OnStart : TNotifyEvent


event OnStop : TNotifyEvent


event OnStorDataAvailable : TFtpSrvDataAvailableEvent


event OnStorSessionClosed : TFtpSrvDataSessionConnectedEvent


event OnStorSessionConnected : TFtpSrvDataSessionConnectedEvent


event OnValidateGet : TFtpSrvValidateXferEvent


event OnValidatePut : TFtpSrvValidateXferEvent


Variables


FBanner : String;


FClientClass : TFtpCtrlSocketClass;


FClientList : TList;


FClientNum : LongInt;


FCmdTable : array [0..31] of TFtpSrvCommandTableItem;


FLastCmd : Integer;


FMaxClients : LongInt;


FOnAlterDirectory : TFtpSrvBuildDirectoryEvent;


FOnAnswerToClient : TFtpSrvAnswerToClientEvent;


FOnAuthenticate : TFtpSrvAuthenticateEvent;


FOnBuildDirectory : TFtpSrvBuildDirectoryEvent;


FOnChangeDirectory : TFtpSrvChangeDirectoryEvent;


FOnClientCommand : TFtpSrvClientCommandEvent;


FOnClientConnect : TFtpSrvClientConnectEvent;


FOnClientDisconnect : TFtpSrvClientConnectEvent;


FOnMakeDirectory : TFtpSrvChangeDirectoryEvent;


FOnRetrDataSent : TFtpSrvRetrDataSentEvent;


FOnRetrSessionClosed : TFtpSrvDataSessionConnectedEvent;


FOnRetrSessionConnected : TFtpSrvDataSessionConnectedEvent;


FOnStart : TNotifyEvent;

Reserved for component user


FOnStop : TNotifyEvent;


FOnStorDataAvailable : TFtpSrvDataAvailableEvent;


FOnStorSessionClosed : TFtpSrvDataSessionConnectedEvent;


FOnStorSessionConnected : TFtpSrvDataSessionConnectedEvent;


FOnValidateGet : TFtpSrvValidateXferEvent;


FOnValidatePut : TFtpSrvValidateXferEvent;


FPort : String;


FServSocket : TWSocket;


FUserData : LongInt;


FWindowHandle : HWND;