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

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

?? idstack.pas

?? delphi indy9.0.18組件包
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{ $HDR$}
{**********************************************************************}
{ Unit archived using Team Coherence                                   }
{ Team Coherence is Copyright 2002 by Quality Software Components      }
{                                                                      }
{ For further information / comments, visit our WEB site at            }
{ http://www.TeamCoherence.com                                         }
{**********************************************************************}
{}
{ $Log:  10343: IdStack.pas 
{
{   Rev 1.2    2003.06.04 10:49:12 PM  czhower
{ Fixed bug which caused IsIP to fail on successive calls because of
{ unitialized values and therefore caused connect errors.
}
{
{   Rev 1.1    4/20/03 1:49:26 PM  RLebeau
{ Added new methods: GetIPInfo(), GetIPType(), GetIPClass(), IPIsType(),
{ IPIsClass(), IsDottedIP(), and IsNumericIP().
{ 
{ Added EIdInvalidIPAddress exception class.
}
{
{   Rev 1.0    2002.11.12 10:53:10 PM  czhower
}
unit IdStack;

interface

uses
  Classes,
  IdException,
  IdStackConsts, IdGlobal;

type
  TIdServeFile = function(ASocket: TIdStackSocketHandle; AFileName: string): cardinal;

  // Abstract IdStack class

  TIdSunB = packed record
    s_b1, s_b2, s_b3, s_b4: byte;
  end;

  TIdSunW = packed record
    s_w1, s_w2: word;
  end;

  PIdInAddr = ^TIdInAddr;
  TIdInAddr = record
    case integer of
      0: (S_un_b: TIdSunB);
      1: (S_un_w: TIdSunW);
      2: (S_addr: longword);
  end;

  TIdIPType = (Id_IPInvalid, Id_IPDotted, Id_IPNumeric);
  PIdIPType = ^TIdIPType;

  TIdIPClass = (Id_IPClassUnkn, Id_IPClassA, Id_IPClassB, Id_IPClassC, Id_IPClassD, Id_IPClassE);
  PIdIPClass = ^TIdIPClass;

  TIdSocketListClass = class of TIdSocketList;
  TIdSocketList = class
  protected
    function GetItem(AIndex: Integer): TIdStackSocketHandle; virtual; abstract;
  public
    procedure Add(AHandle: TIdStackSocketHandle); virtual; abstract;
    class function CreateSocketList: TIdSocketList;
    procedure Remove(AHandle: TIdStackSocketHandle); virtual; abstract;
    function  Count: Integer; virtual; abstract;
    property  Items[AIndex: Integer]: TIdStackSocketHandle read GetItem; default;
  End;//TIdSocketList

  TIdStack = class
  protected
    FLastError: Integer;
    FLocalAddress: string;
    FLocalAddresses: TStrings;
    //
    procedure PopulateLocalAddresses; virtual; abstract;
    function WSGetLocalAddress: string; virtual; abstract;
    function WSGetLocalAddresses: TStrings; virtual; abstract;
  public
    function CheckForSocketError(const AResult: integer = Id_SOCKET_ERROR): boolean; overload;
    function CheckForSocketError(const AResult: integer; const AIgnore: array of integer)
     : boolean; overload;
    constructor Create; reintroduce; virtual;
    destructor Destroy; override;
    class function CreateStack: TIdStack;
    function CreateSocketHandle(const ASocketType: Integer;
      const AProtocol: Integer = Id_IPPROTO_IP): TIdStackSocketHandle;
    function GetIPInfo(const AIP: string; VB1: PByte = nil; VB2: PByte = nil;
      VB3: PByte = nil; VB4: PByte = nil; VType: PIdIPType = nil; VClass: PIdIPClass = nil): Boolean;
    function GetIPType(const AIP: string): TIdIPType;
    function GetIPClass(const AIP: string): TIdIPClass;
    function IsIP(const AIP: string): boolean;
    function IPIsType(const AIP: string; const AType: TIdIPType): boolean; overload;
    function IPIsType(const AIP: string; const ATypes: array of TIdIPType): boolean; overload;
    function IPIsClass(const AIP: string; const AClass: TIdIPClass): boolean; overload;
    function IPIsClass(const AIP: string; const AClasses: array of TIdIPClass): boolean; overload;
    function IsDottedIP(const AIP: string): boolean;
    function IsNumericIP(const AIP: string): boolean;
    procedure RaiseSocketError(const AErr: integer);
    function ResolveHost(const AHost: string): string;
    // Resolves host passed in sHost. sHost may be an IP or a HostName.
    // sIP returns string version of the IP
    function WSAccept(ASocket: TIdStackSocketHandle; var VIP: string; var VPort: Integer)
     : TIdStackSocketHandle; virtual; abstract;
    function WSBind(ASocket: TIdStackSocketHandle; const AFamily: Integer;
     const AIP: string; const APort: Integer): Integer; virtual; abstract;
    function WSCloseSocket(ASocket: TIdStackSocketHandle): Integer; virtual; abstract;
    function WSConnect(const ASocket: TIdStackSocketHandle; const AFamily: Integer;
     const AIP: string; const APort: Integer): Integer; virtual; abstract;
    function WSGetHostByName(const AHostName: string): string; virtual; abstract;
    function WSGetHostName: string; virtual; abstract;
    function WSGetHostByAddr(const AAddress: string): string; virtual; abstract;
    function WSGetServByName(const AServiceName: string): Integer; virtual; abstract;
    function WSGetServByPort(const APortNumber: Integer): TStrings; virtual; abstract;
    function WSHToNs(AHostShort: Word): Word; virtual; abstract;
    function WSListen(ASocket: TIdStackSocketHandle; ABackLog: Integer): Integer; virtual; abstract;
    function WSNToHs(ANetShort: Word): Word; virtual; abstract;
    function WSHToNL(AHostLong: LongWord): LongWord; virtual; abstract;
    function WSNToHL(ANetLong: LongWord): LongWord; virtual; abstract;
    function WSRecv(ASocket: TIdStackSocketHandle; var ABuffer; const ABufferLength, AFlags: Integer)
     : Integer; virtual; abstract;
    function WSRecvFrom(const ASocket: TIdStackSocketHandle; var ABuffer;
     const ALength, AFlags: Integer; var VIP: string; var VPort: Integer): Integer; virtual;
     abstract;
    function WSSelect(ARead, AWrite, AErrors: TList; ATimeout: Integer): Integer; virtual; abstract;
    function WSSend(ASocket: TIdStackSocketHandle; var ABuffer;
     const ABufferLength, AFlags: Integer): Integer; virtual; abstract;
    function WSSendTo(ASocket: TIdStackSocketHandle; var ABuffer;
     const ABufferLength, AFlags: Integer; const AIP: string; const APort: integer): Integer;
      virtual; abstract;
    function WSSetSockOpt(ASocket: TIdStackSocketHandle; ALevel, AOptName: Integer; AOptVal: PChar;
     AOptLen: Integer): Integer; virtual; abstract;
    function WSSocket(AFamily, AStruct, AProtocol: Integer): TIdStackSocketHandle; virtual; abstract;
    function WSShutdown(ASocket: TIdStackSocketHandle; AHow: Integer): Integer; virtual; abstract;
    function WSTranslateSocketErrorMsg(const AErr: integer): string; virtual;
    function WSGetLastError: Integer; virtual; abstract;
    procedure WSGetPeerName(ASocket: TIdStackSocketHandle; var AFamily: Integer;
     var AIP: string; var APort: Integer); virtual; abstract;
    procedure WSGetSockName(ASocket: TIdStackSocketHandle; var AFamily: Integer;
     var AIP: string; var APort: Integer); virtual; abstract;
    function WSGetSockOpt(ASocket: TIdStackSocketHandle; Alevel, AOptname: Integer; AOptval: PChar; var AOptlen: Integer) : Integer; virtual; abstract;
    function StringToTInAddr(AIP: string): TIdInAddr;
    function TInAddrToString(var AInAddr): string; virtual; abstract;
    procedure TranslateStringToTInAddr(AIP: string; var AInAddr); virtual; abstract;
    //
    property LastError: Integer read FLastError;
    property LocalAddress: string read WSGetLocalAddress;
    property LocalAddresses: TStrings read WSGetLocalAddresses;
  end;

  TIdStackClass = class of TIdStack;
  EIdStackError = class (EIdException);
  EIdStackInitializationFailed = class (EIdStackError);
  EIdStackSetSizeExceeded = class (EIdStackError);
  EIdInvalidIPAddress = class (EIdStackError);

var
  GStack: TIdStack = nil;
  GStackClass: TIdStackClass = nil;
  GServeFileProc: TIdServeFile = nil;
  GSocketListClass: TIdSocketListClass;

implementation

uses
  IdResourceStrings,
  SysUtils;

{ TIdStack }

function TIdStack.CheckForSocketError(const AResult: integer): boolean;
begin
  Result := CheckForSocketError(AResult, []);
end;

function TIdStack.CheckForSocketError(const AResult: integer;
  const AIgnore: array of integer): boolean;
var
  i: integer;
begin
  Result := false;
  if AResult = Id_SOCKET_ERROR then begin
    FLastError := WSGetLastError;
    for i := Low(AIgnore) to High(AIgnore) do begin
      if LastError = AIgnore[i] then begin
        Result := True;
        exit;
      end;
    end;
    RaiseSocketError(LastError);
  end;
end;

function TIdStack.CreateSocketHandle(const ASocketType: Integer;
  const AProtocol: Integer = Id_IPPROTO_IP): TIdStackSocketHandle;
begin
  result := WSSocket(Id_PF_INET, ASocketType, AProtocol);
  if result = Id_INVALID_SOCKET then begin
    raise EIdInvalidSocket.Create(RSCannotAllocateSocket);
  end;
end;

procedure TIdStack.RaiseSocketError(const AErr: integer);
begin
  (*
    RRRRR    EEEEEE   AAAA   DDDDD         MM     MM  EEEEEE    !!  !!  !!
    RR  RR   EE      AA  AA  DD  DD        MMMM MMMM  EE        !!  !!  !!
    RRRRR    EEEE    AAAAAA  DD   DD       MM MMM MM  EEEE      !!  !!  !!
    RR  RR   EE      AA  AA  DD  DD        MM     MM  EE
    RR   RR  EEEEEE  AA  AA  DDDDD         MM     MM  EEEEEE    ..  ..  ..

    Please read the note in the next comment.

  *)
  raise EIdSocketError.CreateError(AErr, WSTranslateSocketErrorMsg(AErr));
  (*
    It is normal to receive a 10038 exception (10038, NOT others!) here when
    *shutting down* (NOT at other times!) servers (NOT clients!).

    If you receive a 10038 exception here please see the FAQ at:
    http://www.nevrona.com/Indy/FAQ.html

    If you get a 10038 exception here, and HAVE NOT read the FAQ and ask about this in the public
    forums
    you will be publicly flogged, tarred and feathered and your name added to every chain
    letter in existence today.

    If you insist upon requesting help via our email boxes on the 10038 error that is already
    answered in the FAQ and you are simply too slothful to search for your answer and ask your
    question in the public forums you may be publicly flogged, tarred and feathered and your name
    may be added to every chain letter / EMail in existence today."

    Otherwise, if you DID read the FAQ and have further questions, please feel free to ask using
    one of the methods (Carefullly note that these methods do not list email) listed on the Tech
    Support link at http://www.nevrona.com/Indy/

    RRRRR    EEEEEE   AAAA   DDDDD         MM     MM  EEEEEE    !!  !!  !!
    RR  RR   EE      AA  AA  DD  DD        MMMM MMMM  EE        !!  !!  !!
    RRRRR    EEEE    AAAAAA  DD   DD       MM MMM MM  EEEE      !!  !!  !!
    RR  RR   EE      AA  AA  DD  DD        MM     MM  EE
    RR   RR  EEEEEE  AA  AA  DDDDD         MM     MM  EEEEEE    ..  ..  ..
  *)
end;

constructor TIdStack.Create;
begin
  // Here so descendants can override and call inherited for future exp since TObject's Create    {Do not Localize}
  // is not virtual
end;

class function TIdStack.CreateStack: TIdStack;
begin
  Result := GStackClass.Create;
end;

function TIdStack.ResolveHost(const AHost: string): string;
begin
  // Sometimes 95 forgets who localhost is
  if AnsiSameText(AHost, 'LOCALHOST') then begin    {Do not Localize}
    result := '127.0.0.1';    {Do not Localize}
  end else if IsIP(AHost) then begin
    result := AHost;
  end else begin
    result := WSGetHostByName(AHost);
  end;
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人综合在线| 国产亚洲欧美在线| 亚洲电影视频在线| 欧美日韩中文精品| 午夜视频一区在线观看| 欧美日韩国产高清一区二区三区 | 国产精品香蕉一区二区三区| 国产亚洲精品福利| 99国产精品国产精品毛片| 亚洲激情第一区| 欧美精品久久久久久久久老牛影院| 日韩在线一区二区| 亚洲精品在线免费观看视频| 成人精品在线视频观看| 一区二区三区欧美日| 在线成人小视频| 国产成人免费视频一区| 一区二区三区四区蜜桃| 精品区一区二区| 91视频.com| 免费在线成人网| 中文在线一区二区| 欧美老人xxxx18| 国产盗摄视频一区二区三区| 一区二区三区不卡视频| 欧美成人精精品一区二区频| 成人一级黄色片| 亚洲国产精品天堂| 久久久国产精品不卡| 欧美午夜精品久久久久久超碰| 高清免费成人av| 亚洲一区二区高清| 国产欧美精品一区| 欧美精品v日韩精品v韩国精品v| 国产成人亚洲综合色影视| 一区二区成人在线| 国产欧美日韩综合精品一区二区| 欧美探花视频资源| www.日韩av| 经典一区二区三区| 亚洲最大成人网4388xx| 国产三级三级三级精品8ⅰ区| 欧美老女人在线| 一本大道久久a久久精品综合| 国产美女av一区二区三区| 午夜av一区二区| **性色生活片久久毛片| 国产欧美一区二区精品久导航 | 91精品中文字幕一区二区三区| 国产高清精品在线| 日本麻豆一区二区三区视频| 最新欧美精品一区二区三区| 精品国内二区三区| 777色狠狠一区二区三区| 欧美在线视频不卡| 色综合久久88色综合天天免费| 懂色av一区二区夜夜嗨| 久久av资源网| 日韩激情视频在线观看| 亚洲一区二三区| 伊人开心综合网| 亚洲视频综合在线| 国产精品久久久一本精品| 国产日本欧洲亚洲| 国产亚洲欧美日韩日本| 欧美精品一区视频| 精品国产露脸精彩对白| 日韩欧美高清在线| 欧美成人伊人久久综合网| 欧美一区二区三区四区久久| 欧美精品色综合| 欧亚一区二区三区| 欧美熟乱第一页| 欧美日韩成人一区二区| 欧美图区在线视频| 欧美人动与zoxxxx乱| 欧美午夜宅男影院| 精品视频资源站| 精品视频免费在线| 欧美卡1卡2卡| 日韩一区二区三区精品视频 | 欧美日韩一区在线观看| 日本韩国欧美一区| 欧美视频一区二| 欧美日韩的一区二区| 欧美一区二区精品在线| 日韩美女视频在线| 久久九九全国免费| 亚洲欧洲在线观看av| 一区二区三区欧美在线观看| 亚洲成人久久影院| 久久99国产精品尤物| 国产精品伊人色| a亚洲天堂av| 精品视频在线免费观看| 欧美一区二区三区在线看 | 中文字幕 久热精品 视频在线 | 欧美一区日本一区韩国一区| 日韩一区二区免费视频| 久久久久久久久久久电影| 国产精品国产三级国产aⅴ原创| 亚洲欧美激情小说另类| 日韩av一区二区在线影视| 国产精品影视在线观看| 色综合天天综合网国产成人综合天 | 欧美一区二区三区日韩视频| 精品国产精品一区二区夜夜嗨| 久久久亚洲午夜电影| 亚洲另类春色校园小说| 日韩和的一区二区| 粉嫩aⅴ一区二区三区四区| 欧美最新大片在线看| 久久综合久久综合亚洲| 亚洲同性gay激情无套| 日韩精品成人一区二区在线| 国产一区二区在线看| 色av综合在线| 精品粉嫩aⅴ一区二区三区四区| 亚洲欧美在线视频| 久久精品国产**网站演员| 91美女片黄在线观看| 欧美电影免费观看高清完整版在线| 国产精品亲子伦对白| 水蜜桃久久夜色精品一区的特点| 国产精品一区二区黑丝 | 日韩三级伦理片妻子的秘密按摩| 国产日韩av一区| 日韩国产精品91| 99精品视频在线观看免费| 欧美大片一区二区| 亚洲一区二区在线观看视频| 国产成人免费av在线| 欧美精品乱码久久久久久 | www成人在线观看| 亚洲国产乱码最新视频| 成av人片一区二区| 欧美xxxx在线观看| 亚洲va欧美va国产va天堂影院| 不卡视频免费播放| 久久精品一级爱片| 伦理电影国产精品| 欧美日韩aaa| 一区二区三区四区高清精品免费观看 | 亚洲国产综合色| 99国产精品99久久久久久| 久久精品免视看| 国产在线视频不卡二| 日韩欧美国产精品一区| 天堂成人国产精品一区| 日本精品一区二区三区高清| 国产精品高潮久久久久无| 高清在线不卡av| 日本一区二区免费在线观看视频 | www.性欧美| 国产欧美日产一区| 国产精品1区2区3区在线观看| 日韩精品自拍偷拍| 美国十次综合导航| 欧美一区二区三区不卡| 日韩中文字幕亚洲一区二区va在线 | 不卡av在线网| 国产精品久久久久久久久图文区 | 国产精品久久久爽爽爽麻豆色哟哟| 国产免费成人在线视频| 日本不卡一区二区三区高清视频| 91精品啪在线观看国产60岁| 亚洲精品高清在线观看| 91美女片黄在线观看91美女| 国产精品网站一区| 91在线看国产| 亚洲天堂精品视频| 91搞黄在线观看| 亚洲va中文字幕| 日韩欧美国产小视频| 麻豆91免费观看| 久久久噜噜噜久噜久久综合| 国产成人av影院| 亚洲欧洲三级电影| 日本精品免费观看高清观看| 亚洲高清视频中文字幕| 欧美一区二区三区四区五区| 久久99久久99小草精品免视看| 久久久久久久精| 成人精品免费视频| 亚洲激情图片qvod| 在线综合视频播放| 国产经典欧美精品| 亚洲色图制服丝袜| 欧美日韩一区二区在线视频| 免费一级欧美片在线观看| 久久综合九色综合97婷婷女人| 国产乱色国产精品免费视频| 国产精品进线69影院| 欧美日韩在线精品一区二区三区激情| 亚洲大片免费看| 国产亚洲欧美日韩在线一区| 色狠狠av一区二区三区| 蜜桃视频第一区免费观看| 欧美高清在线一区二区| 欧美日韩你懂的|