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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? nntpcli.pas

?? 包含常用Internet協(xié)議TCP,UDP、HTTP、FTP、Telnet等
?? PAS
?? 第 1 頁 / 共 4 頁
字號(hào):
function  GetInteger(Data : PChar; var Number : Integer) : PChar;
var
    bSign : Boolean;
begin
    Number := 0;
    Result := StpBlk(Data);

    if (Result = nil) then
        Exit;

    { Remember the sign }
    if Result^ in ['-', '+'] then begin
        bSign := (Result^ = '-');
        Inc(Result);
    end
    else
        bSign  := FALSE;

    { Convert any number }
    while (Result^ <> #0) and (Result^ in ['0'..'9']) do begin
        Number := Number * 10 + ord(Result^) - ord('0');
        Inc(Result);
    end;

    { Correct for sign }
    if bSign then
        Number := -Number;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function GetMessageID(Data : PChar; var ID : String) : PChar;
begin
    ID     := '';
    Result := StpBlk(Data);
    if Data = nil then
        Exit;

    while not (Result^ in [#0, '<']) do
        Inc(Result);
    if Result^ = '<' then begin
        while Result^ <> #0 do begin
            Inc(Result);
            if Result^ = '>' then
                break;
            ID := ID + Result^;
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function GetNewsGroupName(Data : PChar; var GroupName : String) : PChar;
begin
    GroupName := '';
    Result    := StpBlk(Data);
    if Data = nil then
        Exit;

    { Copy until first white space }
    while (Result^ <> #0) and (not (Result^ in [' ', #9])) do begin
        GroupName := GroupName + Result^;
        Inc(Result);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function GetChar(Data : PChar; var Ch : Char) : PChar;
begin
    Ch     := #0;
    Result := StpBlk(Data);
    if Data = nil then
        Exit;

    Ch := Result^;
    if Ch <> #0 then
        Inc(Result);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function atoi(Data : String) : Integer;
begin
{$IFDEF VER80}
    { Nul terminate string for Delphi 1 }
    Data[Length(Data) + 1] := #0;
{$ENDIF}
    GetInteger(@Data[1], Result);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure Register;
begin
    RegisterComponents('FPiette', [TNntpCli]);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
constructor TNntpCli.Create(AOwner: TComponent);
begin
    inherited Create(AOwner);
{$IFDEF DUMP}
    FDumpStream := TFileStream.Create('c:\temp\nntpcli.log', fmCreate);
    FDumpBuf    := '---- START -----' + #13 + #10;
    FDumpStream.WriteBuffer(FDumpBuf[1], Length(FDumpBuf));
{$ENDIF}
    FWindowHandle               := AllocateHWnd(WndProc);
    FState                      := nntpNotConnected;
    FArticleNumber              := -1;
    FArticleID                  := '';
    FArticleFirst               := -1;
    FArticleLast                := -1;
    FArticleEstimated           := -1;
    FStatusCode                 := 503;  { program fault }
    FWSocket                    := TWSocket.Create(Self);
    FWSocket.OnSessionConnected := WSocketSessionConnected;
    FWSocket.OnDataAvailable    := WSocketDataAvailable;
    FWSocket.OnSessionClosed    := WSocketSessionClosed;
    FWSocket.OnDnsLookupDone    := WSocketDnsLookupDone;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
destructor TNntpCli.Destroy;
begin
{$IFDEF DUMP}
    if Assigned(FDumpStream) then begin
        FDumpBuf := '---- STOP -----' + #13 + #10;
        FDumpStream.WriteBuffer(FDumpBuf[1], Length(FDumpBuf));
        FDumpStream.Destroy;
    end;
{$ENDIF}
    if Assigned(FWSocket) then
        FWSocket.Destroy;
    DeallocateHWnd(FWindowHandle);
    inherited Destroy;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.WndProc(var MsgRec: TMessage);
begin
     with MsgRec do begin
         case Msg of
         WM_NNTP_REQUEST_DONE : WMNntpRequestDone(MsgRec);
         else
             Result := DefWindowProc(Handle, Msg, wParam, lParam);
         end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.WMNntpRequestDone(var msg: TMessage);
begin
    if Assigned(FOnRequestDone) then
        FOnRequestDone(Self, TNntpRequest(Msg.WParam), Msg.LParam);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.StateChange(NewState : TNntpState);
begin
    if FState <> NewState then begin
        FState := NewState;
        TriggerStateChange;
    end;
end;

{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.SendRequest;
begin
    FLastCmdResponse := '';
{$IFDEF DUMP}
    FDumpBuf := '<|';
    FDumpStream.WriteBuffer(FDumpBuf[1], Length(FDumpBuf));
    FDumpStream.WriteBuffer(FRequest[1], Length(FRequest));
    FDumpBuf := '|' + #13#10;
    FDumpStream.WriteBuffer(FDumpBuf[1], Length(FDumpBuf));
{$ENDIF}
    FWSocket.SendStr(FRequest + #13 + #10);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.Connect;
begin
    if FState <> nntpNotConnected then
         raise NntpException.Create('Already connected');

    FRequestType      := nntpConnect;
    FRequestDoneFlag  := FALSE;
    FReceiveLen       := 0;
    FRequest          := '';
    FArticleNumber    := -1;
    FArticleID        := '';
    FArticleFirst     := -1;
    FArticleLast      := -1;
    FArticleEstimated := -1;
    StateChange(nntpDnsLookup);
    FWSocket.DnsLookup(FHost);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.Group(NewsGroupName : String);
begin
    if FState <> nntpReady then
        raise NntpException.Create('Not ready for GROUP');

    FRequestDoneFlag := FALSE;
    FRequestType     := nntpGroup;
    FRequest         := 'GROUP ' + Trim(NewsGroupName);
    FNext            := GroupNext;
    StateChange(nntpWaitingResponse);
    SendRequest;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.GroupNext;
var
    Data  : PChar;
    Error : Integer;
begin
    Data := GetInteger(@FLastResponse[1], FStatusCode);
    Data := GetInteger(Data, FArticleEstimated);
    Data := GetInteger(Data, FArticleFirst);
    GetInteger(Data, FArticleLast);
    if FStatusCode = 211 then
        Error := 0
    else
        Error := FStatusCode;
    TriggerRequestDone(Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.ArticleByNumber(Number : Integer; DestStream : TStream);
begin
    GetArticleByNumber(nntpArticleByNumber, Number, DestStream);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.ArticleByID(ID : String; DestStream : TStream);
begin
    GetArticleByID(nntpArticleByID, ID, DestStream);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.BodyByNumber(Number : Integer; DestStream : TStream);
begin
    GetArticleByNumber(nntpBodyByNumber, Number, DestStream);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.BodyByID(ID : String; DestStream : TStream);
begin
    GetArticleByID(nntpBodyByID, ID, DestStream);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.HeadByNumber(Number : Integer; DestStream : TStream);
begin
    GetArticleByNumber(nntpHeadByNumber, Number, DestStream);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.HeadByID(ID : String; DestStream : TStream);
begin
    GetArticleByID(nntpHeadByID, ID, DestStream);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.StatByNumber(Number : Integer);
begin
    GetArticleByNumber(nntpStatByNumber, Number, nil);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.StatByID(ID : String);
begin
    GetArticleByID(nntpStatByID, ID, nil);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.GetArticleByID(
    RqType     : TNntpRequest;
    ID         : String;
    DestStream : TStream);
begin
    GetArticle(RqType, ' <' + ID + '>', DestStream);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.GetArticleByNumber(
    RqType     : TNntpRequest;
    Number     : Integer;
    DestStream : TStream);
begin
    if Number > 0 then
        GetArticle(RqType, ' ' + IntToStr(Number), DestStream)
    else
        GetArticle(RqType, '', DestStream);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TNntpCli.GetArticle(
    RqType     : TNntpRequest;
    ID         : String;
    DestStream : TStream);
var
    Cmd : String;
begin
    case RqType of
    nntpArticleByID, nntpArticleByNumber:
        Cmd := 'ARTICLE';
    nntpBodyByID, nntpBodyByNumber:
        Cmd := 'BODY';
    nntpHeadByID, nntpHeadByNumber:
        Cmd := 'HEAD';
    nntpStatByID, nntpStatByNumber:
        Cmd := 'STAT';

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级生活片| 中文字幕中文字幕一区| 成人亚洲一区二区一| 午夜视频在线观看一区二区| 欧美激情一区二区三区蜜桃视频| 色婷婷综合五月| 国产精品一区在线观看你懂的| 亚洲国产人成综合网站| 中文字幕不卡在线| 精品国产一区久久| 欧美日韩国产成人在线91 | 国产精品羞羞答答xxdd| 亚洲一区二区三区四区在线观看| 国产日韩欧美a| 日韩视频在线一区二区| 91麻豆视频网站| 成人性色生活片免费看爆迷你毛片| 日韩av电影一区| 亚洲国产三级在线| 亚洲精品日韩专区silk| 国产精品视频看| 久久夜色精品国产欧美乱极品| 91精品久久久久久久91蜜桃| 欧美性受xxxx| 欧美日韩精品专区| 色综合久久久久综合体| 9久草视频在线视频精品| 国产成人欧美日韩在线电影| 韩国av一区二区三区在线观看| 日本亚洲三级在线| 丝袜美腿高跟呻吟高潮一区| 午夜精品福利在线| 婷婷中文字幕综合| 亚洲成人av中文| 视频一区中文字幕| 日韩av午夜在线观看| 青青草国产成人av片免费| 日日夜夜一区二区| 蜜桃一区二区三区在线观看| 欧美aaaaaa午夜精品| 久久不见久久见中文字幕免费| 久久电影国产免费久久电影| 久久超碰97中文字幕| 极品少妇xxxx精品少妇| 国产高清亚洲一区| 成人av在线影院| 91美女在线观看| 欧美羞羞免费网站| 91精品久久久久久久99蜜桃| 日韩视频永久免费| 久久精品亚洲一区二区三区浴池 | 国产精品你懂的| 日韩一区中文字幕| 亚洲一区二区三区国产| 日本女人一区二区三区| 久久不见久久见免费视频7| 国产精品一区二区在线播放| 成人在线视频一区二区| 91在线观看免费视频| 在线观看亚洲成人| 7777精品伊人久久久大香线蕉的 | 国产在线观看一区二区| 国产一区二区福利| 99国产精品视频免费观看| 精品视频在线视频| 日韩一区二区三区在线观看| 久久久一区二区| 中文字幕一区二区三区在线不卡| 一区二区三区欧美亚洲| 免费看日韩a级影片| 国产精品123区| 色欧美片视频在线观看在线视频| 欧美猛男超大videosgay| 精品国产污污免费网站入口 | 亚洲欧美激情插 | 午夜国产不卡在线观看视频| 九九九久久久精品| 色综合久久天天| 日韩一级欧美一级| 中文字幕一区二区三区视频| 日日欢夜夜爽一区| 成人污视频在线观看| 欧美日韩一区二区三区不卡| 久久久精品人体av艺术| 亚洲综合久久av| 国产主播一区二区三区| 欧美网站大全在线观看| 久久综合九色综合久久久精品综合| 国产精品视频看| 久久成人免费网| 欧亚洲嫩模精品一区三区| 国产午夜精品久久| 日韩高清电影一区| 91一区二区在线| 精品国产精品网麻豆系列 | 五月激情六月综合| 成人晚上爱看视频| 日韩午夜av一区| 亚洲成a人v欧美综合天堂| 国产真实乱偷精品视频免| 在线观看视频一区二区欧美日韩| 久久综合久久综合九色| 日韩成人免费在线| 色视频欧美一区二区三区| 久久久久久久av麻豆果冻| 亚洲第一成年网| 波多野结衣亚洲| 国产亚洲成aⅴ人片在线观看| 日韩成人一级片| 欧美亚洲高清一区二区三区不卡| 国产精品国产自产拍高清av| 久久99久久99| 欧美一区二区视频观看视频| 一区二区激情小说| 日本大香伊一区二区三区| 国产精品亲子乱子伦xxxx裸| 韩国三级中文字幕hd久久精品| 欧美理论电影在线| 亚洲一级二级三级| 色系网站成人免费| 亚洲欧洲另类国产综合| 粉嫩蜜臀av国产精品网站| 精品久久久网站| 久热成人在线视频| 欧美一区永久视频免费观看| 天天综合日日夜夜精品| 欧美色爱综合网| 亚洲国产中文字幕| 欧美性生活久久| 午夜国产不卡在线观看视频| 在线不卡欧美精品一区二区三区| 五月婷婷色综合| 欧美一级理论性理论a| 日本亚洲一区二区| 欧美v亚洲v综合ⅴ国产v| 久久国产精品无码网站| 337p日本欧洲亚洲大胆精品| 狠狠色丁香久久婷婷综合丁香| 精品99久久久久久| 国产一区二区久久| 国产精品久久久爽爽爽麻豆色哟哟 | 国产精品丝袜一区| 99国产精品久| 亚洲女同一区二区| 欧美日韩国产一级二级| 秋霞影院一区二区| 久久尤物电影视频在线观看| 成人免费三级在线| 亚洲麻豆国产自偷在线| 欧美精品乱码久久久久久按摩| 日本一道高清亚洲日美韩| 久久综合九色综合欧美就去吻| 国产乱妇无码大片在线观看| 国产精品天干天干在线综合| 91免费视频网址| 亚洲动漫第一页| 精品女同一区二区| 成人一区二区三区在线观看| 亚洲欧美电影一区二区| 欧美一区二区免费| 国产精品一级在线| 亚洲女人小视频在线观看| 欧美精品丝袜久久久中文字幕| 免费高清成人在线| 国产精品久久久久久一区二区三区| 91色.com| 精品综合久久久久久8888| 中文字幕不卡在线观看| 欧美日韩另类国产亚洲欧美一级| 蜜桃视频免费观看一区| 国产精品视频一区二区三区不卡| 欧美综合色免费| 国内不卡的二区三区中文字幕| 一区二区中文字幕在线| 欧美一卡二卡在线观看| 成人免费毛片a| 亚洲一区二区视频在线观看| www成人在线观看| 欧美在线视频全部完| 国产九色sp调教91| 亚洲va天堂va国产va久| 国产欧美一区二区三区在线看蜜臀| 欧美综合天天夜夜久久| 国产精品亚洲视频| 亚洲国产一区二区在线播放| 26uuu另类欧美| 欧美日韩亚洲综合一区二区三区| 国产精品一区二区久久精品爱涩| 亚洲超碰97人人做人人爱| 国产欧美一区二区三区在线看蜜臀 | 成人性生交大片免费看在线播放| 亚洲在线中文字幕| 国产日产欧美一区| 91精品欧美综合在线观看最新| 成人高清免费观看| 久久草av在线| 日韩精品三区四区| 亚洲欧美一区二区三区极速播放| 欧美成人女星排名| 欧美日韩国产美女|