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

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

?? 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一区二区三区免费野_久草精品视频
免费在线欧美视频| 伊人夜夜躁av伊人久久| 精品一区二区在线视频| 日本v片在线高清不卡在线观看| 一区二区三区在线影院| 亚洲伊人色欲综合网| 亚洲天堂av一区| 曰韩精品一区二区| 一区二区三区欧美激情| 亚洲图片欧美综合| 日本伊人午夜精品| 国产在线精品一区二区三区不卡| 黄色精品一二区| 国产成人啪午夜精品网站男同| 国产v综合v亚洲欧| 成人伦理片在线| 日本韩国一区二区| 欧美一区二区三区四区视频| 欧美精品久久天天躁| 日韩色视频在线观看| 欧美tk丨vk视频| 国产精品色婷婷| 亚洲一区二区三区在线播放| 免播放器亚洲一区| 成人免费看视频| 欧美中文字幕不卡| 精品国产伦一区二区三区观看体验 | 波多野结衣亚洲| 91小视频免费看| 欧美一二三区在线| 国产精品不卡在线观看| 日韩精品一区第一页| 粉嫩蜜臀av国产精品网站| 欧美色图免费看| 国产视频视频一区| 视频在线在亚洲| 国产成a人亚洲| 日韩一区二区三区电影| 国产精品―色哟哟| 精品一区二区三区在线播放视频| 99精品国产热久久91蜜凸| 欧美美女喷水视频| 自拍偷拍国产精品| 国产一区二区三区不卡在线观看| 在线免费观看一区| 国产精品色哟哟| 精品一区二区久久久| 在线免费观看日本一区| 国产精品无码永久免费888| 青青草91视频| 欧美男人的天堂一二区| 日韩理论片中文av| 国产成人av自拍| 精品剧情在线观看| 午夜精品一区在线观看| 一本到三区不卡视频| 欧美激情一区二区三区蜜桃视频 | 国产剧情在线观看一区二区| 欧美色大人视频| 亚洲欧美日韩国产一区二区三区| 精品午夜一区二区三区在线观看| 欧美浪妇xxxx高跟鞋交| 亚洲精品写真福利| 99国产精品国产精品毛片| 久久精品免费在线观看| 久久激情综合网| 91精品国产麻豆| 日韩成人一级大片| 91精品国产乱码久久蜜臀| 亚洲成人综合视频| 欧美日韩精品欧美日韩精品| 亚洲制服丝袜一区| 欧美性色欧美a在线播放| 亚洲精品自拍动漫在线| 色哟哟一区二区三区| 亚洲蜜臀av乱码久久精品| av爱爱亚洲一区| 一区二区三区四区激情| 欧美性受极品xxxx喷水| 视频一区中文字幕国产| 911精品产国品一二三产区| 日韩国产欧美一区二区三区| 日韩欧美卡一卡二| 久久99热国产| 国产日产欧美一区二区视频| 国产99精品在线观看| 亚洲日本成人在线观看| 91福利视频网站| 亚洲成人激情综合网| 日韩一级高清毛片| 国产一区二区91| 17c精品麻豆一区二区免费| 色八戒一区二区三区| 天天综合色天天综合| 精品日韩成人av| 欧美日韩久久久久久| 日韩和的一区二区| 欧美精品一区二区三区蜜臀| 成人精品视频一区二区三区| 一区二区在线免费观看| 日韩视频永久免费| 99久久久久久99| 美腿丝袜亚洲综合| 亚洲三级在线看| 日韩欧美二区三区| 99在线热播精品免费| 视频一区中文字幕| 国产精品卡一卡二卡三| 欧美精品久久99| jlzzjlzz亚洲日本少妇| 日韩av在线播放中文字幕| 国产精品久久久久精k8| 欧美一级欧美三级| 99视频国产精品| 久草在线在线精品观看| 亚洲精品国产无天堂网2021| 2023国产精品| 欧美日韩视频在线第一区| 成人一级黄色片| 美女视频网站黄色亚洲| 亚洲码国产岛国毛片在线| 精品国精品国产尤物美女| 色吊一区二区三区| k8久久久一区二区三区| 国产曰批免费观看久久久| 亚洲一区二区三区在线播放| 中文字幕免费不卡| 亚洲精品一区二区三区四区高清| 欧美性生活久久| 91捆绑美女网站| 成人午夜碰碰视频| 国模套图日韩精品一区二区| 天天色图综合网| 亚洲一二三四久久| 亚洲欧美另类小说视频| 国产精品素人一区二区| 精品国产凹凸成av人网站| 日韩一区二区三免费高清| 欧美狂野另类xxxxoooo| 欧美色图激情小说| 日本伦理一区二区| 99riav一区二区三区| 成人h版在线观看| 懂色av中文字幕一区二区三区| 久久成人免费网站| 精品一区二区三区不卡| 久久精品国产99| 久久99精品视频| 精品在线观看视频| 激情深爱一区二区| 国产麻豆精品95视频| 久久成人综合网| 国产福利精品一区| 高清久久久久久| 成人av网站免费| 91丨porny丨国产入口| 91日韩一区二区三区| 色欧美片视频在线观看| 欧美亚洲国产一区在线观看网站 | 精品在线亚洲视频| 黄色日韩网站视频| 国产二区国产一区在线观看| 高清国产午夜精品久久久久久| 国产91综合网| 91美女蜜桃在线| 欧美日韩不卡一区| 日韩欧美中文字幕精品| 久久久精品人体av艺术| 亚洲国产精品成人久久综合一区 | 欧美大白屁股肥臀xxxxxx| 欧美极品aⅴ影院| 亚洲欧洲国产日本综合| 亚洲色图制服诱惑| 午夜精品一区二区三区三上悠亚| 日韩和的一区二区| 国产精品自产自拍| 色婷婷av一区二区三区软件| 69堂成人精品免费视频| 国产亚洲美州欧州综合国| 亚洲欧洲国产日本综合| 日本欧美一区二区三区| 国产成人av电影在线播放| 欧美性猛交xxxx黑人交| 欧美电影免费观看高清完整版在 | 人人爽香蕉精品| 国产成人免费视频精品含羞草妖精| 不卡的av在线| 欧美一区三区二区| 国产精品久久国产精麻豆99网站| 一区二区三区蜜桃网| 国产乱码精品一区二区三区忘忧草| 9i看片成人免费高清| 日韩欧美另类在线| 一区二区三区四区在线播放| 韩国v欧美v亚洲v日本v| 在线视频国产一区| 国产日韩欧美一区二区三区乱码| 亚洲自拍偷拍网站| 丁香激情综合国产| 日韩欧美国产不卡|