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

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

?? ftpsrvc.pas

?? 包含常用Internet協議TCP,UDP、HTTP、FTP、Telnet等
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
constructor TFtpCtrlSocket.Create(AOwner: TComponent);
begin
    inherited Create(AOwner);
    FDataSocket      := TWSocket.Create(Self);
    FDataSocket.Name := 'DataWSocket';
    FBanner          := DefaultBanner;
    FFtpState        := ftpcInvalid;
    FHomeDir         := 'C:\TEMP\';
    FDirectory       := FHomeDir;
    SetRcvSize(DefaultRcvSize);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
destructor TFtpCtrlSocket.Destroy;
begin
    SetRcvSize(0);     { Free the buffer }
    if Assigned(FDataSocket) then begin
        FDataSocket.Destroy;
        FDataSocket := nil;
    end;
    inherited Destroy;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpCtrlSocket.SetRcvSize(newValue : Integer);
begin
    if FRcvCnt <> 0 then
        raise EFtpCtrlSocketException.Create('Data in buffer, can''t change size');

    if FRcvSize < 0 then
        FRcvSize := 0;

    if FRcvSize = newValue then
        Exit; { No change, nothing to do }

    { Free previously allocated buffer }
    if FRcvBuf <> nil then begin
        FreeMem(FRcvBuf, FRcvSize);
        FRcvBuf := nil;
    end;

    { Allocate new buffer }
    FRcvSize := newValue;

    { If size is nul, then do not allocated the buffer }
    if newValue > 0 then
        GetMem(FRcvBuf, FRcvSize);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpCtrlSocket.StartConnection;
begin
    FConnectedSince := Now;
    FLastCommand    := 0;
    FCommandCount   := 0;
    FFtpState       := ftpcWaitingUserCode;
    SendStr(FBanner + #13#10);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function TFtpCtrlSocket.GetPeerAddr: String;
begin
    Result := FPeerAddr;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpCtrlSocket.Dup(newHSocket : TSocket);
begin
    inherited Dup(newHSocket);
    FPeerAddr := inherited GetPeerAddr;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpCtrlSocket.TriggerSessionConnected(Error : Word);
begin
    FPeerAddr := inherited GetPeerAddr;
    inherited TriggerSessionConnected(Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpCtrlSocket.TriggerCommand(CmdBuf : PChar; CmdLen : Integer);
begin
    if Assigned(FOnCommand) then
        FOnCommand(Self, CmdBuf, CmdLen);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function TFtpCtrlSocket.TriggerDataAvailable(Error : Word) : Boolean;
var
    Len  : Integer;
    I    : Integer;
begin
    Result := TRUE;                                { We read data }

    Len := Receive(@FRcvBuf[FRcvCnt], FRcvSize - FRcvCnt - 1);
    if Len <= 0 then
        Exit;

    FRcvCnt := FRcvCnt + Len;
    FRcvBuf[FRcvCnt] := #0;

    while TRUE do begin
        I := 0;
        while (I < FRcvCnt) and (FRcvBuf[I] <> #10) do
            Inc(I);
        if I >= FRcvCnt then
            Exit;
        FRcvBuf[I] := #0;
        FLastCommand := Now;
        Inc(FCommandCount);
        if (I > 1) and (FRcvBuf[I - 1] = #13) then begin
            FRcvBuf[I - 1] := #0;
            TriggerCommand(FRcvBuf, I - 1);
            FRcvBuf[I - 1] := #13;
        end
        else
            TriggerCommand(FRcvBuf, I);

        FRcvBuf[I] := #10;
        if I >= (FRcvCnt - 1) then begin
            FRcvCnt    := 0;
            FRcvBuf[0] := #0;
            break;
        end;
        Move(FRcvBuf[I + 1], FRcvBuf^, FRcvCnt - I);
        FRcvCnt := FRcvCnt - I - 1;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpCtrlSocket.SendAnswer(Answer : String);
begin
    SendStr(Answer + #13#10);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function IsUNC(S : String) : Boolean;
begin
    Result := (Length(S) >= 2) and (S[2] = '\') and (S[1] = '\');
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure PatchIE5(var S : String);
begin
    { \c:\Temp\ -> c:\Temp\ IE5 like this invalid syntax !}
    if (Length(S) >= 3) and (S[3] = ':') and (S[1] = '\') then
        Delete(S, 1, 1);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpCtrlSocket.SetDirectory(newValue : String);
var
    newDrive : String;
    newPath  : String;
    I        : Integer;
begin
    if FDirectory = newValue then
        Exit;

    PatchIE5(newValue);
    newDrive := ExtractFileDrive(newValue);
    if IsUNC(newDrive) then begin
        if not (ftpcUNC in Options) then
            raise Exception.Create('Cannot accept UNC path');
        FDirectory := newValue;
        { Always terminate with a backslash }
        if (Length(FDirectory) > 0) and (FDirectory[Length(FDirectory)] <> '\') then
            FDirectory := FDirectory + '\';
        Exit;
    end;

    if Length(newDrive) = 0 then begin
        newDrive := ExtractFileDrive(FDirectory);
        newPath  := newValue;
    end
    else
        newPath := Copy(newValue, 3, Length(newValue));

    if Pos(':', newPath) <> 0 then
        raise Exception.Create('Invalid directory name syntax');

    if newPath = '..' then begin
        if IsUNC(FDirectory) then begin
            I := Length(FDirectory) - 1;
            while (I > 0) and (FDirectory[I] <> '\') do
                Dec(I);
            if I > Length(newDrive) then
                SetLength(FDirectory, I);
            Exit;
        end
        else begin
            newPath := Copy(FDirectory, 3, Length(FDirectory));
            I := Length(newPath) - 1;
            while (I > 0) and (newPath[I] <> '\') do
                Dec(I);
            SetLength(newPath, I);
        end;
    end;

    if (Length(newPath) > 0) and (newPath[1] <> '\') then begin
        { Relative path }
        if IsUNC(FDirectory) then begin
            FDirectory := FDirectory + newPath;
            { Always terminate with a backslash }
            if (Length(FDirectory) > 0) and (FDirectory[Length(FDirectory)] <> '\') then
                FDirectory := FDirectory + '\';
            Exit;
        end
        else begin
            if UpperCase(newDrive[1]) <> UpperCase(FDirectory[1]) then
                raise Exception.Create('Cannot accept path not relative to current directory');
            if Pos('.\', newPath) <> 0 then
                raise Exception.Create('Cannot accept relative path using dot notation');
            if newPath = '.' then
                newPath := Copy(FDirectory, 3, Length(FDirectory))
            else
                newPath := Copy(FDirectory, 3, Length(FDirectory)) + newPath;
        end;
    end
    else begin
        if Pos('.\', newPath) <> 0 then
            raise Exception.Create('Cannot accept relative path using dot notation');
    end;

    if Length(newPath) = 0 then begin
        if UpperCase(newDrive[1]) <> UpperCase(FDirectory[1]) then
            newPath := '\'
        else
            newPath := Copy(FDirectory, 3, Length(FDirectory));
    end;

    { Always terminate with a backslash }
    if (Length(newPath) > 0) and (newPath[Length(newPath)] <> '\') then
        newPath := newPath + '\';

    FDirectory := newDrive + newPath;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpCtrlSocket.SetAbortingTransfer(newValue : Boolean);
begin
    FAbortingTransfer := newValue;
end;


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

end.


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线视频日韩| 日本韩国欧美国产| 欧美一级二级三级乱码| 亚洲成a人v欧美综合天堂下载| 不卡一卡二卡三乱码免费网站| 日韩精品影音先锋| 国内成人免费视频| 中文字幕不卡三区| 99re成人精品视频| 亚洲精品免费在线观看| 欧美视频一区二| 天天综合色天天| 欧美一区二区免费视频| 久久精品国产精品亚洲红杏 | 日韩视频不卡中文| 极品少妇xxxx偷拍精品少妇| xfplay精品久久| 91热门视频在线观看| 亚洲成人777| 久久久99精品久久| av中文一区二区三区| 亚洲成人福利片| 国产拍欧美日韩视频二区| 欧洲国内综合视频| 国产精品 欧美精品| 一区二区高清免费观看影视大全 | 日本不卡123| 中国av一区二区三区| 欧美视频一区二区三区| 国产盗摄视频一区二区三区| 伊人色综合久久天天| 久久综合狠狠综合久久综合88 | 91理论电影在线观看| 日本不卡在线视频| 中文字幕av免费专区久久| 欧美男同性恋视频网站| 精品在线观看视频| 亚洲午夜一区二区三区| 国产色产综合产在线视频| 欧美日韩电影在线播放| 99精品久久只有精品| 寂寞少妇一区二区三区| 一区二区三区四区亚洲| 国产人妖乱国产精品人妖| 在线播放亚洲一区| 91麻豆文化传媒在线观看| 国产精品影视网| 日韩福利视频导航| 国产午夜精品久久| 日韩欧美国产综合一区| 欧美日韩成人一区| 色综合久久88色综合天天6| 国产美女精品人人做人人爽| 久久国产婷婷国产香蕉| 亚洲不卡av一区二区三区| 亚洲欧美偷拍卡通变态| 久久综合色8888| 精品理论电影在线观看| 日韩女优电影在线观看| 制服.丝袜.亚洲.另类.中文| 91福利在线播放| 92国产精品观看| av网站一区二区三区| 国产精品白丝jk白祙喷水网站| 精品写真视频在线观看| 国模大尺度一区二区三区| 玖玖九九国产精品| 国产一区二区在线视频| 精品制服美女久久| 国产a久久麻豆| av一本久道久久综合久久鬼色| 成人激情视频网站| 99综合影院在线| 91老司机福利 在线| 欧美日韩一级二级| 欧美一区二区三区四区久久| 日韩欧美国产综合在线一区二区三区| 日韩欧美成人一区| 久久免费视频色| 日本一区二区不卡视频| 久久精品一区四区| 亚洲人成7777| 蜜臀久久久久久久| 精品一区二区三区在线播放视频 | 婷婷六月综合亚洲| 三级亚洲高清视频| 日本欧美大码aⅴ在线播放| 激情成人午夜视频| 成人av电影在线网| 色综合天天综合网国产成人综合天 | 欧美久久久久久久久中文字幕| 宅男噜噜噜66一区二区66| 精品久久国产老人久久综合| 中文一区在线播放| 亚洲成a人在线观看| 国产麻豆欧美日韩一区| 一本久道久久综合中文字幕| 91精品国产入口| 亚洲国产精品ⅴa在线观看| 亚洲成人自拍一区| 国产高清在线精品| 欧美日韩三级一区二区| 国产色产综合色产在线视频| 午夜成人在线视频| 国产成人精品亚洲777人妖 | 午夜精品久久久久久不卡8050| 国产在线精品一区二区不卡了| 成人黄色一级视频| 欧美一区二区三区爱爱| 亚洲精品综合在线| 国产精品18久久久久久久网站| 欧日韩精品视频| 亚洲欧洲日韩av| 国产在线国偷精品免费看| 在线亚洲+欧美+日本专区| 久久久久久久久久久久电影| 亚洲国产欧美在线人成| av高清不卡在线| 精品国产乱码久久久久久1区2区| 亚洲色欲色欲www| 高清在线观看日韩| 欧美不卡在线视频| 午夜激情综合网| 91一区二区三区在线播放| 91精品国产美女浴室洗澡无遮挡| 亚洲精品网站在线观看| caoporm超碰国产精品| 欧美久久婷婷综合色| 亚洲欧洲av色图| 国产精一区二区三区| 7777精品伊人久久久大香线蕉的 | 国产91丝袜在线18| 日韩视频免费观看高清完整版在线观看| 成人免费小视频| 粉嫩av亚洲一区二区图片| 精品久久99ma| 蜜芽一区二区三区| 欧美一区二区成人6969| 五月天亚洲婷婷| 欧美日韩五月天| 亚洲成人三级小说| 欧美日韩精品系列| 同产精品九九九| 欧美一级在线观看| 久久不见久久见中文字幕免费| 日韩一级免费观看| 韩国欧美国产1区| 337p日本欧洲亚洲大胆精品| 久久精品国产一区二区| 26uuu精品一区二区三区四区在线| 麻豆一区二区三区| 久久欧美中文字幕| 成人深夜视频在线观看| 亚洲丝袜美腿综合| 在线一区二区三区四区五区| 一区二区三区欧美视频| 欧美日韩一区二区电影| 日韩高清在线观看| 精品国产自在久精品国产| 国产成人午夜电影网| 国产精品色呦呦| 色欧美日韩亚洲| 麻豆精品一二三| 中文字幕一区二区三中文字幕| 成人午夜精品一区二区三区| 亚洲麻豆国产自偷在线| 欧美二区三区的天堂| 欧美激情一区二区三区不卡| 国产高清亚洲一区| 国产xxx精品视频大全| 欧美日韩mp4| 亚洲精品自拍动漫在线| 欧美日韩一区 二区 三区 久久精品| 欧美国产日韩a欧美在线观看| 国产精品第五页| 亚洲男人的天堂网| 狠狠色综合日日| 91精品国产福利在线观看| 亚洲视频在线观看一区| 国产精品1区2区3区在线观看| 国产精选一区二区三区| 日本韩国一区二区| 日韩美女视频19| 国产精品一区久久久久| 日韩欧美高清dvd碟片| 午夜精品久久久久久久99樱桃 | 精品人在线二区三区| 亚洲一二三区视频在线观看| 91精品在线免费观看| 国产黄色成人av| 亚洲自拍偷拍网站| 欧美成人aa大片| 色av成人天堂桃色av| 国产精品自在在线| 欧美日韩亚洲国产综合| 日韩一级大片在线| www.成人在线| 国产成人免费视频精品含羞草妖精| 国产精品视频一区二区三区不卡| 日韩欧美中文字幕精品|