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

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

?? ftpsrv.pas

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


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.TriggerValidateGet(
    Client        : TFtpCtrlSocket;
    var FilePath  : TFtpString;
    var Allowed   : Boolean);
begin
    if Assigned(FOnValidateGet) then
        FOnValidateGet(Self, Client, FilePath, Allowed);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.TriggerStorDataAvailable(
    Client : TFtpCtrlSocket;
    Data   : TWSocket;
    Buf    : PChar;
    Len    : LongInt;
    Error  : Word);
begin
    if Assigned(FOnStorDataAvailable) then
        FOnStorDataAvailable(Self, Client, Data, Buf, Len, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.TriggerRetrDataSent(
    Client : TFtpCtrlSocket;
    Data   : TWSocket;
    Error  : Word);
begin
    if Assigned(FOnRetrDataSent) then
        FOnRetrDataSent(Self, Client, Data, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.CommandUSER(
    Client      : TFtpCtrlSocket;
    var Keyword : TFtpString;
    var Params  : TFtpString;
    var Answer  : TFtpString);
begin
    Client.CurCmdType := ftpcUSER;
    Client.UserName   := Trim(Params);
    Client.FtpState   := ftpcWaitingPassword;
    Answer            := Format(msgPassRequired, [Client.UserName]);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.CommandPASS(
    Client      : TFtpCtrlSocket;
    var Keyword : TFtpString;
    var Params  : TFtpString;
    var Answer  : TFtpString);
var
    Authenticated : Boolean;
begin
    if Client.FtpState <> ftpcWaitingPassword then
        Answer := msgNoUser
    else begin
        Client.CurCmdType    := ftpcPASS;
        Client.PassWord      := Trim(Params);
        Authenticated        := TRUE;
        TriggerAuthenticate(Client, Client.UserName, Client.PassWord, Authenticated);
        if Authenticated then begin
            Client.FtpState  := ftpcReady;
            Client.Directory := Client.HomeDir;
            Answer           := Format(msgLogged, [Client.UserName])
        end
        else begin
            Client.FtpState  := ftpcWaitingUserCode;
            Answer           := msgLoginFailed;
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.CommandCDUP(
    Client      : TFtpCtrlSocket;
    var Keyword : TFtpString;
    var Params  : TFtpString;
    var Answer  : TFtpString);
begin
    if Client.FtpState <> ftpcReady then begin
        Answer := msgNotLogged;
        Exit;
    end;
    Client.CurCmdType := ftpcCDUP;
    Params := '..';
    CommandChangeDir(Client, Keyword, Params, Answer);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.CommandCWD(
    Client      : TFtpCtrlSocket;
    var Keyword : TFtpString;
    var Params  : TFtpString;
    var Answer  : TFtpString);
begin
    if Client.FtpState <> ftpcReady then begin
        Answer := msgNotLogged;
        Exit;
    end;
    Client.CurCmdType    := ftpcCWD;
    CommandChangeDir(Client, Keyword, Params, Answer);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function SlashesToBackSlashes(const S : String) : String;
var
    I : Integer;
begin
    Result := S;
    for I := 1 to Length(Result) do begin
        if Result [I] = '/' then
            Result[I] := '\';
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function BackSlashesToSlashes(const S : String) : String;
var
    I : Integer;
begin
    Result := S;
    for I := 1 to Length(Result) do begin
        if Result [I] = '\' then
            Result[I] := '/';
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.CommandChangeDir(
    Client      : TFtpCtrlSocket;
    var Keyword : TFtpString;
    var Params  : TFtpString;
    var Answer  : TFtpString);
var
    Allowed : Boolean;
    OldDir  : String;
begin
    OldDir := Client.Directory;
    try
        Params               := SlashesToBackSlashes(Params);
        Client.Directory     := Trim(Params);
        Allowed              := TRUE;
        TriggerChangeDirectory(Client, Client.Directory, Allowed);
        if Allowed then
            Answer           := Format(msgCWDSuccess,
                                       [BackSlashesToSlashes(Client.Directory)])
        else begin
            Client.Directory := OldDir;
            Answer           := Format(msgCWDFailed, ['No permission']);
        end;
    except
        on E:Exception do begin
            Client.Directory := OldDir;
            Answer           := Format(msgCWDFailed, [E.Message]);
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.CommandXPWD(
    Client      : TFtpCtrlSocket;
    var Keyword : TFtpString;
    var Params  : TFtpString;
    var Answer  : TFtpString);
begin
    if Client.FtpState <> ftpcReady then begin
        Answer := msgNotLogged;
        Exit;
    end;

    Client.CurCmdType := ftpcXPWD;
    Answer            := Format(msgPWDSuccess,
                                [BackSlashesToSlashes(Client.Directory)]);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.CommandPWD(
    Client      : TFtpCtrlSocket;
    var Keyword : TFtpString;
    var Params  : TFtpString;
    var Answer  : TFtpString);
begin
    if Client.FtpState <> ftpcReady then begin
        Answer := msgNotLogged;
        Exit;
    end;

    Client.CurCmdType := ftpcPWD;
    Answer            := Format(msgPWDSuccess,
                                [BackSlashesToSlashes(Client.Directory)]);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.CommandQUIT(
    Client      : TFtpCtrlSocket;
    var Keyword : TFtpString;
    var Params  : TFtpString;
    var Answer  : TFtpString);
begin
    Client.CurCmdType := ftpcQUIT;
    Answer            := msgQuit;
    PostMessage(FWindowHandle, WM_FTPSRV_CLOSE_REQUEST, 0, LongInt(Client));
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function GetInteger(var I : Integer; const Src : String) : LongInt;
begin
    { Skip leading white spaces }
    while (I <= Length(Src)) and (Src[I] in [' ' , #9]) do
        Inc(I);
    Result := 0;
    while (I <= Length(Src)) and (Src[I] in ['0'..'9']) do begin
        Result := Result * 10 + Ord(Src[I]) - Ord('0');
        Inc(I);
    end;
    { Skip trailing white spaces }
    while (I <= Length(Src)) and (Src[I] in [' ' , #9]) do
        Inc(I);
    { Check if end of string of comma. If not, error, returns -1 }
    if I <= Length(Src) then begin
        if Src[I] = ',' then
            Inc(I)        { skip comma           }
        else
            raise Exception.Create('unexpected char'); { error, must be comma }
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.CommandPORT(
    Client      : TFtpCtrlSocket;
    var Keyword : TFtpString;
    var Params  : TFtpString;
    var Answer  : TFtpString);
var
    I : Integer;
    N : LongInt;
begin
    if Client.FtpState <> ftpcReady then begin
        Answer := msgNotLogged;
        Exit;
    end;

    try
        Client.CurCmdType := ftpcPORT;
        I                 := 1;
        Client.DataAddr   := IntToStr(GetInteger(I, Params));
        Client.DataAddr   := Client.DataAddr + '.' + IntToStr(GetInteger(I, Params));
        Client.DataAddr   := Client.DataAddr + '.' + IntToStr(GetInteger(I, Params));
        Client.DataAddr   := Client.DataAddr + '.' + IntToStr(GetInteger(I, Params));
        N := GetInteger(I, Params);
        N := (N shl 8) + GetInteger(I, Params);
        Client.DataPort := IntToStr(N);
        Answer := msgPortSuccess;
    except
        Answer := msgPortFailed;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.CommandSTOR(
    Client      : TFtpCtrlSocket;
    var Keyword : TFtpString;
    var Params  : TFtpString;
    var Answer  : TFtpString);
var
    Allowed  : Boolean;
    FilePath : TFtpString;
begin
    if Client.FtpState <> ftpcReady then begin
        Answer := msgNotLogged;
        Exit;
    end;

    try
        Client.CurCmdType       := ftpcSTOR;
        Client.FileName         := SlashesToBackSlashes(Params);
        Client.HasOpenedFile    := FALSE;
        Client.AbortingTransfer := FALSE;
        Client.TransferError    := 'Transfer Ok';
        Allowed                 := TRUE;
        FilePath                := BuildFilePath(Client.Directory, Client.FileName);
        TriggerValidatePut(Client, FilePath, Allowed);
        if not Allowed then begin
            Answer := msgStorDisabled;
            Exit;
        end;
        Client.FilePath := FilePath;
        if Client.PassiveMode then begin
            Client.DataSocket.OnSessionConnected  := ClientStorSessionConnected;
            Client.DataSocket.OnSessionClosed     

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区免费视频| 精品在线观看免费| 国产激情精品久久久第一区二区 | 欧洲一区二区三区在线| 久久久99精品久久| 久久福利视频一区二区| 国产成人免费av在线| 欧美精品一区二区三| 日本成人在线电影网| 欧美日韩在线三级| 一区二区欧美精品| 日本丶国产丶欧美色综合| 日本一区二区三区高清不卡| 国产揄拍国内精品对白| 精品国产区一区| 老鸭窝一区二区久久精品| 欧美日韩国产片| 午夜欧美一区二区三区在线播放| 在线精品视频一区二区三四| 亚洲色图在线视频| 91污在线观看| 一区二区三区毛片| 欧美日韩国产精品成人| 午夜欧美一区二区三区在线播放| 欧美日韩精品综合在线| 秋霞电影一区二区| 欧美xxx久久| 国产精品性做久久久久久| 国产天堂亚洲国产碰碰| 风间由美一区二区三区在线观看| 久久久99精品免费观看不卡| 风间由美一区二区三区在线观看| 中文幕一区二区三区久久蜜桃| 成人亚洲一区二区一| 亚洲欧洲精品一区二区三区| 91污片在线观看| 国产精品素人一区二区| aaa亚洲精品| 国产精品黄色在线观看| 在线观看av一区二区| 午夜精品一区二区三区电影天堂| 日韩午夜电影在线观看| 韩日av一区二区| 国产精品视频你懂的| 91国产精品成人| 亚洲不卡一区二区三区| 久久久亚洲午夜电影| 成人app在线观看| 一区二区三区av电影 | 亚洲欧洲日韩av| 欧洲色大大久久| 九一九一国产精品| 国产精品剧情在线亚洲| 欧美日韩国产天堂| 国产精一品亚洲二区在线视频| 国产精品国产馆在线真实露脸| 色屁屁一区二区| 日产精品久久久久久久性色| 国产日产欧美一区| 欧美日韩高清一区二区三区| 国产麻豆一精品一av一免费| 国产日韩av一区| 色综合久久99| 性欧美疯狂xxxxbbbb| 综合欧美亚洲日本| 精品盗摄一区二区三区| 色综合色综合色综合| 日韩精品一级二级| 国产精品不卡一区二区三区| 欧美一区二区福利在线| 91啦中文在线观看| 精品影院一区二区久久久| 亚洲男人的天堂av| 精品电影一区二区| 欧美日韩一本到| 99精品国产视频| 国产精品一区二区在线观看网站| 午夜精品成人在线视频| 亚洲视频每日更新| 久久久国产一区二区三区四区小说| 欧美性色黄大片| 高清国产一区二区| 免费观看一级特黄欧美大片| 亚洲欧美日韩国产中文在线| 精品少妇一区二区三区免费观看 | 亚洲一区二区影院| 国产日本欧美一区二区| 69久久99精品久久久久婷婷 | 懂色av一区二区夜夜嗨| 激情综合色综合久久| 免费美女久久99| 视频一区二区欧美| 一区二区三区高清在线| 久久精品视频免费观看| 欧美日韩和欧美的一区二区| av在线不卡免费看| 成人一区二区三区| 国产伦精品一区二区三区免费迷| 视频在线观看一区| 亚洲v日本v欧美v久久精品| 亚洲特级片在线| 久久久久9999亚洲精品| 精品国产免费视频| 日韩美一区二区三区| 欧美精品电影在线播放| 欧美人伦禁忌dvd放荡欲情| 91国偷自产一区二区三区观看 | 日韩欧美精品在线视频| 69精品人人人人| 91精品黄色片免费大全| 日韩午夜在线影院| 欧美丰满少妇xxxxx高潮对白| 欧美性受极品xxxx喷水| 一本大道av伊人久久综合| av在线不卡电影| 91视频国产资源| 色94色欧美sute亚洲线路一ni| 日本精品裸体写真集在线观看 | 日日噜噜夜夜狠狠视频欧美人| 亚洲成人资源网| 日韩精品电影在线| 日韩不卡手机在线v区| 麻豆视频一区二区| 日韩电影在线免费观看| 亚洲一区二三区| 九色综合狠狠综合久久| 国产69精品久久久久777| 99久久久精品| 色哟哟一区二区三区| 欧美性受xxxx黑人xyx性爽| 精品理论电影在线| 亚洲欧美色一区| 久久99久久久久久久久久久| 国产99久久久国产精品潘金网站| 成人午夜大片免费观看| 日本精品视频一区二区| 欧美一区二区三区在线看| 国产亚洲欧洲一区高清在线观看| 最新国产精品久久精品| 亚洲成在线观看| 久久国产精品72免费观看| 成人午夜精品在线| 欧美精品少妇一区二区三区| 国产午夜精品一区二区 | 2021中文字幕一区亚洲| 国产精品情趣视频| 日韩二区三区四区| 成人免费视频一区| 在线成人高清不卡| 中文字幕国产一区二区| 午夜一区二区三区视频| 国产 日韩 欧美大片| 欧美日韩国产乱码电影| 国产精品女人毛片| 麻豆91小视频| 91丝袜国产在线播放| 欧美mv日韩mv国产网站| 亚洲精品国产精华液| 国产毛片精品一区| 欧美吻胸吃奶大尺度电影 | 亚洲成人免费观看| 成人av在线网| 日韩欧美中文字幕公布| 一级中文字幕一区二区| 国产精品综合在线视频| 91精品国产91综合久久蜜臀| 国产精品每日更新| 韩国精品在线观看| 日韩视频免费观看高清完整版在线观看 | 欧美日韩亚洲综合在线 欧美亚洲特黄一级| www国产成人| 日本成人超碰在线观看| 欧美午夜一区二区三区| 亚洲第一福利一区| 欧美精品乱码久久久久久按摩| 亚洲国产精品人人做人人爽| 欧美亚洲综合一区| 日韩av一级电影| 日韩精品一区二区三区在线| 国产一区激情在线| 久久久国产精品麻豆| 成人爱爱电影网址| 亚洲免费av网站| 欧美情侣在线播放| 久久国产精品一区二区| 久久色中文字幕| aaa亚洲精品| 亚洲精品国产无套在线观| 欧美高清精品3d| 极品美女销魂一区二区三区| 国产精品福利一区| 在线观看中文字幕不卡| 蜜桃av一区二区三区电影| 国产偷国产偷亚洲高清人白洁| 成人丝袜视频网| 亚洲欧美日韩电影| 日韩精品专区在线影院重磅| 国产精品一区在线观看乱码| 亚洲欧美aⅴ...| 欧美精品丝袜中出|