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

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

?? nntpcli.pas

?? 包含常用Internet協議TCP,UDP、HTTP、FTP、Telnet等
?? PAS
?? 第 1 頁 / 共 4 頁
字號:
        TriggerRequestDone(FStatusCode);
        Exit;
    end;
    Buf := Trim(StrPas(Data));
    if Length(Buf) = 14 then begin
        Year  := atoi(Copy(Buf, 1, 4));
        Month := atoi(Copy(Buf, 5, 2));
        Day   := atoi(Copy(Buf, 7, 2));
        Hour  := atoi(Copy(Buf, 9, 2));
        Min   := atoi(Copy(Buf, 11, 2));
        Sec   := atoi(Copy(Buf, 13, 2));
        FServerDate := EncodeDate(Year, Month, Day) +
                       EncodeTime(Hour, Min, Sec, 0);
    end;
    TriggerRequestDone(0);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.Date;
begin
    if FState <> nntpReady then
        raise NntpException.Create('Not ready for DATE');
    FServerDate      := 0;
    FDataStream      := nil;
    FRequestDoneFlag := FALSE;
    FRequestType     := nntpDate;
    FRequest         := 'DATE';
    FNext            := DateNext;
    StateChange(nntpWaitingResponse);
    SendRequest;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.ModeReaderNext;
begin
    GetInteger(@FLastResponse[1], FStatusCode);
    if FStatusCode in [200, 201] then
        TriggerRequestDone(0)
    else
        TriggerRequestDone(FStatusCode);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.ModeReader;
begin
    if FState <> nntpReady then
        raise NntpException.Create('Not ready for ModeReader');
    FServerDate      := 0;
    FDataStream      := nil;
    FRequestDoneFlag := FALSE;
    FRequestType     := nntpModeReader;
    FRequest         := 'MODE READER';
    FNext            := ModeReaderNext;
    StateChange(nntpWaitingResponse);
    SendRequest;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.XHdrLineNext;
const
    CrLf : String[2] = #13#10;
begin
    if FLastResponse = '.' then begin
        if FLastCmdResponse <> '' then begin
            FLastResponse    := FLastCmdResponse;
            FLastCmdResponse := '';
        end;
        if Assigned(FOnXHdrEnd) then
            FOnXHdrEnd(Self);
        TriggerRequestDone(0);
    end
    else begin
        if Assigned(FDataStream) then begin
            if Length(FLastResponse) > 0 then
                FDataStream.Write(FLastResponse[1], Length(FLastResponse));
            FDataStream.Write(CrLf[1], Length(CrLf));
        end;
        if Assigned(FOnXHdrLine) then
            FOnXHdrLine(Self);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.XHdrNext;
begin
    GetInteger(@FLastResponse[1], FStatusCode);
    if FStatusCode <> 221 then begin
        TriggerRequestDone(FStatusCode);
        Exit;
    end;

    FNext            := XHdrLineNext;
    FLastCmdResponse := FLastResponse;;
    StateChange(nntpWaitingResponse);

    if Assigned(FOnXHdrBegin) then
        FOnXHdrBegin(Self);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Header is a header line such as "subject".                                }
{ Range is either:                                                          }
{   an article number                                                       }
{   an article number followed by a dash to indicate all following          }
{   an article number followed by a dash followed by another article number }
{ Range can be replaced by a message id.                                    }
{ If range is empty current article is used.                                }
procedure TNntpCli.XHdr(DestStream : TStream; Header : String; Range : String);
begin
    if FState <> nntpReady then
        raise NntpException.Create('Not ready for XHDR');
    FDataStream      := DestStream;
    FRequestDoneFlag := FALSE;
    FRequestType     := nntpXHdr;
    FRequest         := 'XHDR ' + Header;
    if Length(Range) > 0 then
        Frequest     := FRequest + ' ' + Range;
    FNext            := XHdrNext;
    StateChange(nntpWaitingResponse);
    SendRequest;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.AuthenticateNext1;
begin
    StpBlk(GetInteger(@FLastResponse[1], FStatusCode));
    if FStatusCode <> 381 then begin
        TriggerRequestDone(FStatusCode);
        Exit;
    end;
    FRequestDoneFlag := FALSE;
    FRequest         := 'AUTHINFO PASS ' + FPassWord;
    FNext            := AuthenticateNext2;
    StateChange(nntpWaitingResponse);
    SendRequest;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.AuthenticateNext2;
begin
    StpBlk(GetInteger(@FLastResponse[1], FStatusCode));
    if FStatusCode <> 281 then begin
        TriggerRequestDone(FStatusCode);
        Exit;
    end;
    TriggerRequestDone(0);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.Authenticate;
begin
    if FState <> nntpReady then
        raise NntpException.Create('Not ready for DATE');
    FRequestDoneFlag := FALSE;
    FRequestType     := nntpAuthenticate;
    FRequest         := 'AUTHINFO USER ' + FUserName;
    FNext            := AuthenticateNext1;
    StateChange(nntpWaitingResponse);
    SendRequest;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure ParseListLine(
    const Line          : String;
    var NewsGroupName   : String;
    var LastArticle     : Integer;
    var FirstArticle    : Integer;
    var PostingFlag     : Char);
var
    Data : PChar;
begin
    if Length(Line) = 0 then
        Exit;
    Data := GetNewsGroupName(@Line[1], NewsGroupName);
    Data := GetInteger(Data, LastArticle);
    Data := GetInteger(Data, FirstArticle);
    GetChar(Data, PostingFlag);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.WSocketDataSent(Sender: TObject; Error: Word);
begin
    if Error <> 0 then begin
        PostDone;
        Exit;
    end;
    PostBlock;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.WSocketDnsLookupDone(Sender: TObject; Error: Word);
begin
    if Error <> 0 then
        TriggerRequestDone(Error)
    else begin
        FWSocket.Addr  := FWSocket.DnsResult;
        FWSocket.Proto := 'tcp';
        FWSocket.Port  := 'nntp';
        StateChange(nntpWaitingBanner);
        FWSocket.Connect;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.WSocketSessionConnected(Sender: TObject; Error: Word);
begin
    { Do not trigger the client SessionConnected from here. We must wait }
    { to have received the server banner.                                }
    if Error <> 0 then begin
        TriggerRequestDone(Error);
        FWSocket.Close
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.WSocketDataAvailable(Sender: TObject; Error: Word);
var
    Len : Integer;
    I   : Integer;
begin
    Len := FWSocket.Receive(@FReceiveBuffer[FReceiveLen],
                            sizeof(FReceiveBuffer) - FReceiveLen - 1);

    if FRequestType = nntpAbort then
        Exit;

    if Len = 0 then begin
        FWSocket.Close;
        Exit;
    end;
    if Len < 0 then
        Exit;

    FReceiveBuffer[FReceiveLen + Len] := #0;
    if Assigned(FOnDisplay) then
        FOnDisplay(Self, @FReceiveBuffer[FReceiveLen], Len);
    FReceiveLen := FReceiveLen + Len;

    while FReceiveLen > 0 do begin
        I := Pos(#13#10, FReceiveBuffer);
        if I <= 0 then
            break;
        if I > FReceiveLen then
            break;

        FLastResponse := Copy(FReceiveBuffer, 1, I - 1);

{$IFDEF DUMP}
        FDumpBuf := '>|';
        FDumpStream.WriteBuffer(FDumpBuf[1], Length(FDumpBuf));
        FDumpStream.WriteBuffer(FLastResponse[1], Length(FLastResponse));
        FDumpBuf := '|' + #13#10;
        FDumpStream.WriteBuffer(FDumpBuf[1], Length(FDumpBuf));
{$ENDIF}
{$IFDEF VER80}
        { Add a nul byte at the end of string for Delphi 1 }
        FLastResponse[Length(FLastResponse) + 1] := #0;
{$ENDIF}
        FReceiveLen := FReceiveLen - I - 1;
        if FReceiveLen > 0 then
            Move(FReceiveBuffer[I + 1], FReceiveBuffer[0], FReceiveLen + 1);

        if FState = nntpWaitingBanner then begin
            StateChange(nntpReady);
            GetInteger(@FLastResponse[1], FStatusCode);
            FPostingPermited := (FStatusCode = 200);
            if Assigned(FOnSessionConnected) then
                FOnSessionConnected(Self, Error);
        end
        else if FState = nntpWaitingResponse then begin
            if Assigned(FNext) then
                FNext
            else
                StateChange(nntpReady);
        end
        else begin
            if Assigned(FOnDataAvailable) then
                FOnDataAvailable(Self, Error);
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.WSocketSessionClosed(Sender: TObject; Error: Word);
begin
    if not (FRequestType in [nntpAbort]) then
        TriggerRequestDone(Error);
    if Assigned(FOnSessionClosed) then
        OnSessionClosed(Self, Error);
    StateChange(nntpNotConnected);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.TriggerStateChange;
begin
    if Assigned(FOnStateChange) then
        FOnStateChange(Self);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.TriggerRequestDone(Error: Word);
begin
    if FRequestDoneFlag = FALSE then
        PostMessage(Handle, WM_NNTP_REQUEST_DONE, WORD(FRequestType), Error);
    FRequestDoneFlag := TRUE;
    FNext            := nil;
    if FWSocket.State = wsConnected then
        StateChange(nntpReady)
    else
        StateChange(nntpNotConnected);
end;


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

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕在线免费不卡| 国产伦精一区二区三区| 久久99精品网久久| 91女人视频在线观看| 欧美成人video| 一区二区三区 在线观看视频| 麻豆国产精品一区二区三区 | 色哟哟在线观看一区二区三区| 欧美人与性动xxxx| 亚洲欧洲一区二区在线播放| 精品写真视频在线观看| 欧美区在线观看| 综合久久久久久| 成人性生交大片| 精品国产乱码久久久久久影片| 天天色天天爱天天射综合| 色婷婷av一区二区三区大白胸| 久久久精品天堂| 国产在线精品一区二区三区不卡| 欧美电影一区二区| 夜色激情一区二区| 91丨九色丨黑人外教| 欧美国产日韩精品免费观看| 麻豆国产欧美一区二区三区| 欧美老人xxxx18| 午夜视黄欧洲亚洲| 欧美在线免费视屏| 亚洲一区二区三区免费视频| 日本久久电影网| 中文字幕日韩一区| 99精品在线免费| 亚洲欧洲成人自拍| 色综合天天做天天爱| 亚洲视频免费看| 91福利在线免费观看| 一个色在线综合| 欧美亚洲免费在线一区| 一区2区3区在线看| 8x福利精品第一导航| 日韩高清一级片| 日韩欧美中文字幕制服| 蜜臀av性久久久久av蜜臀妖精| 欧美一级夜夜爽| 久久成人av少妇免费| 精品99一区二区三区| 国产精品一区2区| 国产精品久久午夜| 91久久一区二区| 日韩福利视频网| 欧美精品一区二区三区在线播放 | 亚洲成av人影院在线观看网| 欧美午夜宅男影院| 日本免费新一区视频| 久久午夜老司机| 成人av在线影院| 亚洲国产精品欧美一二99| 欧美一区二区福利视频| 国产成人欧美日韩在线电影| 亚洲欧美日韩国产一区二区三区 | 成人免费va视频| 一区二区三区在线影院| 欧美一区二区三区爱爱| 国产精品一区一区| 一区二区三区高清不卡| 日韩一区二区免费高清| 成人av电影在线观看| 天堂资源在线中文精品| 国产亚洲精品aa午夜观看| 91久久精品国产91性色tv| 日韩成人一级大片| 国产精品视频一二| 欧美肥胖老妇做爰| 99久久久免费精品国产一区二区 | 欧美顶级少妇做爰| 成人午夜私人影院| 日韩成人一级片| 中文字幕一区在线观看| 日韩精品中文字幕在线不卡尤物 | 国产精品一二二区| 亚洲精品免费在线| 久久久久久**毛片大全| 欧美日韩日日骚| 从欧美一区二区三区| 午夜久久福利影院| 亚洲精品一二三| 久久综合久久综合久久| 欧美日韩久久一区| 成人av免费在线| 国产一区在线观看视频| 三级在线观看一区二区| 亚洲三级电影全部在线观看高清| 欧美mv日韩mv国产| 欧美精品自拍偷拍动漫精品| 91在线你懂得| 丰满亚洲少妇av| 国模一区二区三区白浆| 日韩av在线播放中文字幕| 亚洲另类春色国产| 国产精品理伦片| 久久精品一区二区三区不卡牛牛| 91精品国产色综合久久不卡电影| 91美女福利视频| 成人网页在线观看| 国产精品一卡二卡| 精品一区二区影视| 日韩不卡免费视频| 亚洲国产日韩a在线播放| 日韩理论片在线| 亚洲乱码国产乱码精品精的特点| 国产精品欧美极品| 欧美激情一区不卡| 中文一区二区完整视频在线观看| 精品欧美一区二区在线观看| 日韩欧美国产成人一区二区| 欧美一级片在线| 日韩一区二区精品| 日韩一区二区三区视频在线观看 | 91成人网在线| 色中色一区二区| 日本久久精品电影| 欧美系列亚洲系列| 91精品国产高清一区二区三区蜜臀| 欧美怡红院视频| 欧美日韩成人综合天天影院| 欧美日韩国产一区二区三区地区| 欧美怡红院视频| 欧美妇女性影城| 精品日韩在线一区| 久久伊人中文字幕| 国产欧美日韩视频一区二区| 亚洲国产高清在线| 亚洲女与黑人做爰| 亚洲成av人片一区二区三区| 天天影视涩香欲综合网| 久久99热狠狠色一区二区| 国产另类ts人妖一区二区| 成人深夜视频在线观看| 色综合天天在线| 欧美精品亚洲二区| 亚洲精品在线一区二区| 国产精品卡一卡二| 午夜精品一区二区三区电影天堂| 麻豆精品在线看| 成人深夜在线观看| 欧美日韩专区在线| 久久久三级国产网站| 亚洲伦理在线免费看| 蜜臀av一区二区在线观看| 国产激情一区二区三区| 91麻豆精品视频| 欧美一二三四区在线| 亚洲国产精品99久久久久久久久| 一区二区三区成人在线视频| 另类的小说在线视频另类成人小视频在线 | 国产日韩欧美高清| 亚洲国产中文字幕在线视频综合| 美腿丝袜亚洲色图| av在线播放一区二区三区| 5566中文字幕一区二区电影| 欧美国产1区2区| 青青草原综合久久大伊人精品| 国产乱一区二区| 精品污污网站免费看| 久久久电影一区二区三区| 午夜欧美一区二区三区在线播放| 国产福利一区二区| 在线成人小视频| 国产精品久久久久一区二区三区| 日韩精品一区第一页| 一本久道中文字幕精品亚洲嫩| 欧美va亚洲va| 天堂va蜜桃一区二区三区| av亚洲精华国产精华精华| 欧美一二三区精品| 午夜精品久久久久影视| 99精品在线观看视频| 久久久久99精品一区| 美女视频黄a大片欧美| 欧美视频一区二区三区在线观看| 国产午夜亚洲精品午夜鲁丝片| 午夜视频在线观看一区| 欧美亚洲另类激情小说| 中文字幕一区二区三区视频| 国产一区二区伦理| 欧美成人精品3d动漫h| 亚洲成人黄色小说| 日本韩国一区二区三区视频| 欧美激情资源网| 国产成人免费9x9x人网站视频| 欧美一区2区视频在线观看| 亚洲电影第三页| 欧美日韩专区在线| 亚洲一区二区三区在线| 日本精品视频一区二区| 亚洲精品免费在线观看| 在线亚洲人成电影网站色www| 国产精品伦理在线| a在线欧美一区| 亚洲图片欧美激情| 99精品热视频|