home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / Runimage / Delphi50 / Source / Rtl / Win / wininet.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-08-11  |  142.6 KB  |  3,037 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Run-time Library                 }
  5. {       Win32 Internet API Interface Unit               }
  6. {                                                       }
  7. {       Copyright (c) 1985-1999, Microsoft Corporation  }
  8. {                                                       }
  9. {       Translator: Inprise Corporation                 }
  10. {                                                       }
  11. {*******************************************************}
  12.  
  13. unit WinInet;
  14.  
  15. {$WEAKPACKAGEUNIT}
  16.  
  17. interface
  18.  
  19. uses Windows;
  20.  
  21. { Contains manifests, functions, types and prototypes for 
  22.   Microsoft Windows Internet Extensions }
  23.  
  24.  
  25. { internet types }
  26.  
  27. {$HPPEMIT '#include <wininet.h>'}
  28.  
  29. type
  30.   HINTERNET = Pointer; 
  31.   {$EXTERNALSYM HINTERNET}
  32.   PHINTERNET = ^HINTERNET;
  33.   LPHINTERNET = PHINTERNET; 
  34.   {$EXTERNALSYM LPHINTERNET}
  35.  
  36.   INTERNET_PORT = Word; 
  37.   {$EXTERNALSYM INTERNET_PORT}
  38.   PINTERNET_PORT = ^INTERNET_PORT;
  39.   LPINTERNET_PORT = PINTERNET_PORT; 
  40.   {$EXTERNALSYM LPINTERNET_PORT}
  41.  
  42. { Internet APIs }
  43.  
  44. { manifests }
  45.  
  46. const
  47.   INTERNET_INVALID_PORT_NUMBER = 0;                 { use the protocol-specific default }
  48.   {$EXTERNALSYM INTERNET_INVALID_PORT_NUMBER}
  49.   INTERNET_DEFAULT_FTP_PORT = 21;                   { default for FTP servers }
  50.   {$EXTERNALSYM INTERNET_DEFAULT_FTP_PORT}
  51.   INTERNET_DEFAULT_GOPHER_PORT = 70;                {    "     "  gopher " }
  52.   {$EXTERNALSYM INTERNET_DEFAULT_GOPHER_PORT}
  53.   INTERNET_DEFAULT_HTTP_PORT = 80;                  {    "     "  HTTP   " }
  54.   {$EXTERNALSYM INTERNET_DEFAULT_HTTP_PORT}
  55.   INTERNET_DEFAULT_HTTPS_PORT = 443;                {    "     "  HTTPS  " }
  56.   {$EXTERNALSYM INTERNET_DEFAULT_HTTPS_PORT}
  57.   INTERNET_DEFAULT_SOCKS_PORT = 1080;               { default for SOCKS firewall servers.}
  58.   {$EXTERNALSYM INTERNET_DEFAULT_SOCKS_PORT}
  59.  
  60.   MAX_CACHE_ENTRY_INFO_SIZE = 4096;
  61.   {$EXTERNALSYM MAX_CACHE_ENTRY_INFO_SIZE}
  62.  
  63.  
  64. { maximum field lengths (arbitrary) }
  65.  
  66.   INTERNET_MAX_HOST_NAME_LENGTH = 256;
  67.   {$EXTERNALSYM INTERNET_MAX_HOST_NAME_LENGTH}
  68.   INTERNET_MAX_USER_NAME_LENGTH = 128;
  69.   {$EXTERNALSYM INTERNET_MAX_USER_NAME_LENGTH}
  70.   INTERNET_MAX_PASSWORD_LENGTH = 128;
  71.   {$EXTERNALSYM INTERNET_MAX_PASSWORD_LENGTH}
  72.   INTERNET_MAX_PORT_NUMBER_LENGTH = 5;              { INTERNET_PORT is unsigned short }
  73.   {$EXTERNALSYM INTERNET_MAX_PORT_NUMBER_LENGTH}
  74.   INTERNET_MAX_PORT_NUMBER_VALUE = 65535;           { maximum unsigned short value }
  75.   {$EXTERNALSYM INTERNET_MAX_PORT_NUMBER_VALUE}
  76.   INTERNET_MAX_PATH_LENGTH = 2048;
  77.   {$EXTERNALSYM INTERNET_MAX_PATH_LENGTH}
  78.   INTERNET_MAX_SCHEME_LENGTH = 32;                   { longest protocol name length }
  79.   {$EXTERNALSYM INTERNET_MAX_SCHEME_LENGTH}
  80.   INTERNET_MAX_PROTOCOL_NAME = 'gopher';            { longest protocol name }
  81.   {$EXTERNALSYM INTERNET_MAX_PROTOCOL_NAME}
  82.   INTERNET_MAX_URL_LENGTH = ((SizeOf(INTERNET_MAX_PROTOCOL_NAME) - 1)
  83.                             + SizeOf('://')
  84.                             + INTERNET_MAX_PATH_LENGTH);
  85.   {$EXTERNALSYM INTERNET_MAX_URL_LENGTH}
  86.  
  87. { values returned by InternetQueryOption with INTERNET_OPTION_KEEP_CONNECTION: }
  88.  
  89.   INTERNET_KEEP_ALIVE_UNKNOWN = -1;
  90.   {$EXTERNALSYM INTERNET_KEEP_ALIVE_UNKNOWN}
  91.   INTERNET_KEEP_ALIVE_ENABLED = 1;
  92.   {$EXTERNALSYM INTERNET_KEEP_ALIVE_ENABLED}
  93.   INTERNET_KEEP_ALIVE_DISABLED = 0;
  94.   {$EXTERNALSYM INTERNET_KEEP_ALIVE_DISABLED}
  95.  
  96. { flags returned by InternetQueryOption with INTERNET_OPTION_REQUEST_FLAGS }
  97.  
  98.   INTERNET_REQFLAG_FROM_CACHE   = $00000001;
  99.   {$EXTERNALSYM INTERNET_REQFLAG_FROM_CACHE}
  100.   INTERNET_REQFLAG_ASYNC        = $00000002;
  101.   {$EXTERNALSYM INTERNET_REQFLAG_ASYNC}
  102.   INTERNET_REQFLAG_VIA_PROXY    = $00000004;  { request was made via a proxy }
  103.   {$EXTERNALSYM INTERNET_REQFLAG_VIA_PROXY}
  104.   INTERNET_REQFLAG_NO_HEADERS   = $00000008;  { orginal response contained no headers }
  105.   {$EXTERNALSYM INTERNET_REQFLAG_NO_HEADERS}
  106.   INTERNET_REQFLAG_PASSIVE      = $00000010;  { FTP: passive-mode connection }
  107.   {$EXTERNALSYM INTERNET_REQFLAG_PASSIVE}
  108.   INTERNET_REQFLAG_CACHE_WRITE_DISABLED = $00000040;  { HTTPS: this request not cacheable }
  109.   {$EXTERNALSYM INTERNET_REQFLAG_CACHE_WRITE_DISABLED}
  110.  
  111. { flags common to open functions (not InternetOpen): }
  112.  
  113.   INTERNET_FLAG_RELOAD = $80000000;                 { retrieve the original item }
  114.   {$EXTERNALSYM INTERNET_FLAG_RELOAD}
  115.  
  116. { flags for InternetOpenUrl: }
  117.  
  118.   INTERNET_FLAG_RAW_DATA = $40000000;               { receive the item as raw data }
  119.   {$EXTERNALSYM INTERNET_FLAG_RAW_DATA}
  120.   INTERNET_FLAG_EXISTING_CONNECT = $20000000;       { do not create new connection object }
  121.   {$EXTERNALSYM INTERNET_FLAG_EXISTING_CONNECT}
  122.  
  123. { flags for InternetOpen: }
  124.  
  125.   INTERNET_FLAG_ASYNC = $10000000;                  { this request is asynchronous (where supported) }
  126.   {$EXTERNALSYM INTERNET_FLAG_ASYNC}
  127.  
  128. { protocol-specific flags: }
  129.  
  130.   INTERNET_FLAG_PASSIVE = $08000000;                { used for FTP connections }
  131.   {$EXTERNALSYM INTERNET_FLAG_PASSIVE}
  132.  
  133. { additional cache flags }
  134.  
  135.   INTERNET_FLAG_NO_CACHE_WRITE        = $04000000;  { don't write this item to the cache }
  136.   {$EXTERNALSYM INTERNET_FLAG_NO_CACHE_WRITE}
  137.   INTERNET_FLAG_DONT_CACHE            = INTERNET_FLAG_NO_CACHE_WRITE;
  138.   {$EXTERNALSYM INTERNET_FLAG_DONT_CACHE}
  139.   INTERNET_FLAG_MAKE_PERSISTENT       = $02000000;  { make this item persistent in cache }
  140.   {$EXTERNALSYM INTERNET_FLAG_MAKE_PERSISTENT}
  141.   INTERNET_FLAG_FROM_CACHE            = $01000000;  { use offline semantics }
  142.   {$EXTERNALSYM INTERNET_FLAG_FROM_CACHE}
  143.   INTERNET_FLAG_OFFLINE               = $01000000;  { use offline semantics }
  144.   {$EXTERNALSYM INTERNET_FLAG_OFFLINE}
  145.  
  146. { additional flags }
  147.  
  148.   INTERNET_FLAG_SECURE                = $00800000;  { use PCT/SSL if applicable (HTTP) }
  149.   {$EXTERNALSYM INTERNET_FLAG_SECURE}
  150.   INTERNET_FLAG_KEEP_CONNECTION       = $00400000;  { use keep-alive semantics }
  151.   {$EXTERNALSYM INTERNET_FLAG_KEEP_CONNECTION}
  152.   INTERNET_FLAG_NO_AUTO_REDIRECT      = $00200000;  { don't handle redirections automatically }
  153.   {$EXTERNALSYM INTERNET_FLAG_NO_AUTO_REDIRECT}
  154.   INTERNET_FLAG_READ_PREFETCH         = $00100000;  { do background read prefetch }
  155.   {$EXTERNALSYM INTERNET_FLAG_READ_PREFETCH}
  156.   INTERNET_FLAG_NO_COOKIES            = $00080000;  { no automatic cookie handling }
  157.   {$EXTERNALSYM INTERNET_FLAG_NO_COOKIES}
  158.   INTERNET_FLAG_NO_AUTH               = $00040000;  { no automatic authentication handling }
  159.   {$EXTERNALSYM INTERNET_FLAG_NO_AUTH}
  160.   INTERNET_FLAG_CACHE_IF_NET_FAIL     = $00010000;  { return cache file if net request fails }
  161.   {$EXTERNALSYM INTERNET_FLAG_CACHE_IF_NET_FAIL}
  162.  
  163. { Security Ignore Flags, Allow HttpOpenRequest to overide
  164.   Secure Channel (SSL/PCT) failures of the following types. }
  165.  
  166.   INTERNET_FLAG_IGNORE_CERT_CN_INVALID        = $00001000; { bad common name in X509 Cert. }
  167.   {$EXTERNALSYM INTERNET_FLAG_IGNORE_CERT_CN_INVALID}
  168.   INTERNET_FLAG_IGNORE_CERT_DATE_INVALID      = $00002000; { expired X509 Cert. }
  169.   {$EXTERNALSYM INTERNET_FLAG_IGNORE_CERT_DATE_INVALID}
  170.   INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS      = $00004000; { ex: http:// to https:// }
  171.   {$EXTERNALSYM INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS}
  172.   INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP       = $00008000; { ex: https:// to http:// }
  173.   {$EXTERNALSYM INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP}
  174.  
  175. //
  176. // more caching flags
  177. //
  178.  
  179.   INTERNET_FLAG_RESYNCHRONIZE     = $00000800;  // asking wininet to update an item if it is newer
  180.   {$EXTERNALSYM INTERNET_FLAG_RESYNCHRONIZE}
  181.   INTERNET_FLAG_HYPERLINK         = $00000400;  // asking wininet to do hyperlinking semantic which works right for scripts
  182.   {$EXTERNALSYM INTERNET_FLAG_HYPERLINK}
  183.   INTERNET_FLAG_NO_UI             = $00000200;  // no cookie popup
  184.   {$EXTERNALSYM INTERNET_FLAG_NO_UI}
  185.   INTERNET_FLAG_PRAGMA_NOCACHE    = $00000100;  // asking wininet to add "pragma: no-cache"
  186.   {$EXTERNALSYM INTERNET_FLAG_PRAGMA_NOCACHE}
  187.   INTERNET_FLAG_CACHE_ASYNC       = $00000080;  // ok to perform lazy cache-write
  188.   {$EXTERNALSYM INTERNET_FLAG_CACHE_ASYNC}
  189.   INTERNET_FLAG_FORMS_SUBMIT      = $00000040;  // this is a forms submit
  190.   {$EXTERNALSYM INTERNET_FLAG_FORMS_SUBMIT}
  191.   INTERNET_FLAG_NEED_FILE         = $00000010;  // need a file for this request
  192.   {$EXTERNALSYM INTERNET_FLAG_NEED_FILE}
  193.   INTERNET_FLAG_MUST_CACHE_REQUEST = INTERNET_FLAG_NEED_FILE;
  194.   {$EXTERNALSYM INTERNET_FLAG_MUST_CACHE_REQUEST}  
  195.  
  196. { FTP }
  197.  
  198. { manifests }
  199. const
  200. { flags for FTP }
  201.   FTP_TRANSFER_TYPE_UNKNOWN   = $00000000;
  202.   {$EXTERNALSYM FTP_TRANSFER_TYPE_UNKNOWN}
  203.   FTP_TRANSFER_TYPE_ASCII     = $00000001;
  204.   {$EXTERNALSYM FTP_TRANSFER_TYPE_ASCII}
  205.   FTP_TRANSFER_TYPE_BINARY    = $00000002;
  206.   {$EXTERNALSYM FTP_TRANSFER_TYPE_BINARY}
  207.  
  208.   FTP_TRANSFER_TYPE_MASK      = FTP_TRANSFER_TYPE_ASCII or
  209.                                 FTP_TRANSFER_TYPE_BINARY;
  210.   {$EXTERNALSYM FTP_TRANSFER_TYPE_MASK}
  211.  
  212.   INTERNET_FLAG_TRANSFER_ASCII        = FTP_TRANSFER_TYPE_ASCII;
  213.   {$EXTERNALSYM INTERNET_FLAG_TRANSFER_ASCII}
  214.   INTERNET_FLAG_TRANSFER_BINARY       = FTP_TRANSFER_TYPE_BINARY;
  215.   {$EXTERNALSYM INTERNET_FLAG_TRANSFER_BINARY}
  216.  
  217. { flags field masks }
  218.  
  219.   SECURITY_INTERNET_MASK      = INTERNET_FLAG_IGNORE_CERT_CN_INVALID or
  220.                                 INTERNET_FLAG_IGNORE_CERT_DATE_INVALID or
  221.                                 INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS or
  222.                                 INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
  223.   {$EXTERNALSYM SECURITY_INTERNET_MASK}
  224.  
  225.   SECURITY_SET_MASK           = SECURITY_INTERNET_MASK;
  226.   {$EXTERNALSYM SECURITY_SET_MASK}
  227.  
  228.   INTERNET_FLAGS_MASK         = INTERNET_FLAG_RELOAD              or
  229.                                 INTERNET_FLAG_RAW_DATA            or
  230.                                 INTERNET_FLAG_EXISTING_CONNECT    or
  231.                                 INTERNET_FLAG_ASYNC               or
  232.                                 INTERNET_FLAG_PASSIVE             or
  233.                                 INTERNET_FLAG_NO_CACHE_WRITE      or
  234.                                 INTERNET_FLAG_MAKE_PERSISTENT     or
  235.                                 INTERNET_FLAG_FROM_CACHE          or
  236.                                 INTERNET_FLAG_SECURE              or
  237.                                 INTERNET_FLAG_KEEP_CONNECTION     or
  238.                                 INTERNET_FLAG_NO_AUTO_REDIRECT    or
  239.                                 INTERNET_FLAG_READ_PREFETCH       or
  240.                                 INTERNET_FLAG_NO_COOKIES          or
  241.                                 INTERNET_FLAG_NO_AUTH             or
  242.                                 INTERNET_FLAG_CACHE_IF_NET_FAIL   or
  243.                                 SECURITY_INTERNET_MASK            or
  244.                                 INTERNET_FLAG_RESYNCHRONIZE       or
  245.                                 INTERNET_FLAG_HYPERLINK           or
  246.                                 INTERNET_FLAG_NO_UI               or
  247.                                 INTERNET_FLAG_PRAGMA_NOCACHE      or
  248.                                 INTERNET_FLAG_CACHE_ASYNC         or
  249.                                 INTERNET_FLAG_FORMS_SUBMIT        or
  250.                                 INTERNET_FLAG_NEED_FILE           or
  251.                                 INTERNET_FLAG_TRANSFER_BINARY     or
  252.                                 INTERNET_FLAG_TRANSFER_ASCII;
  253.   {$EXTERNALSYM INTERNET_FLAGS_MASK}
  254.  
  255.   INTERNET_ERROR_MASK_INSERT_CDROM = $1;
  256.   {$EXTERNALSYM INTERNET_ERROR_MASK_INSERT_CDROM}
  257.  
  258.   INTERNET_OPTIONS_MASK       =  not INTERNET_FLAGS_MASK;
  259.   {$EXTERNALSYM INTERNET_OPTIONS_MASK}
  260.  
  261. //
  262. // common per-API flags (new APIs)
  263. //
  264.  
  265.   WININET_API_FLAG_ASYNC          = $00000001;  // force async operation
  266.   {$EXTERNALSYM WININET_API_FLAG_ASYNC}
  267.   WININET_API_FLAG_SYNC           = $00000004;  // force sync operation
  268.   {$EXTERNALSYM WININET_API_FLAG_SYNC}
  269.   WININET_API_FLAG_USE_CONTEXT    = $00000008;  // use value supplied in dwContext (even if 0)
  270.   {$EXTERNALSYM WININET_API_FLAG_USE_CONTEXT}
  271.  
  272. { INTERNET_NO_CALLBACK - if this value is presented as the dwContext parameter }
  273. { then no call-backs will be made for that API }
  274.  
  275.   INTERNET_NO_CALLBACK = 0;
  276.   {$EXTERNALSYM INTERNET_NO_CALLBACK}
  277.  
  278. { structures/types }
  279.  
  280. type
  281.   PInternetScheme = ^TInternetScheme;
  282.   TInternetScheme = Integer;
  283. const
  284.   INTERNET_SCHEME_PARTIAL = -2;
  285.   {$EXTERNALSYM INTERNET_SCHEME_PARTIAL}
  286.   INTERNET_SCHEME_UNKNOWN = -1;
  287.   {$EXTERNALSYM INTERNET_SCHEME_UNKNOWN}
  288.   INTERNET_SCHEME_DEFAULT = 0;
  289.   {$EXTERNALSYM INTERNET_SCHEME_DEFAULT}
  290.   INTERNET_SCHEME_FTP = 1;
  291.   {$EXTERNALSYM INTERNET_SCHEME_FTP}
  292.   INTERNET_SCHEME_GOPHER = 2;
  293.   {$EXTERNALSYM INTERNET_SCHEME_GOPHER}
  294.   INTERNET_SCHEME_HTTP = 3;
  295.   {$EXTERNALSYM INTERNET_SCHEME_HTTP}
  296.   INTERNET_SCHEME_HTTPS = 4;
  297.   {$EXTERNALSYM INTERNET_SCHEME_HTTPS}
  298.   INTERNET_SCHEME_FILE = 5;
  299.   {$EXTERNALSYM INTERNET_SCHEME_FILE}
  300.   INTERNET_SCHEME_NEWS = 6;
  301.   {$EXTERNALSYM INTERNET_SCHEME_NEWS}
  302.   INTERNET_SCHEME_MAILTO = 7;
  303.   {$EXTERNALSYM INTERNET_SCHEME_MAILTO}
  304.   INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP;
  305.   {$EXTERNALSYM INTERNET_SCHEME_FIRST}
  306.   INTERNET_SCHEME_LAST = INTERNET_SCHEME_MAILTO;
  307.   {$EXTERNALSYM INTERNET_SCHEME_LAST}
  308.  
  309. { TInternetAsyncResult - this structure is returned to the application via }
  310. { the callback with INTERNET_STATUS_REQUEST_COMPLETE. It is not sufficient to }
  311. { just return the result of the async operation. If the API failed then the }
  312. { app cannot call GetLastError because the thread context will be incorrect. }
  313. { Both the value returned by the async API and any resultant error code are }
  314. { made available. The app need not check dwError if dwResult indicates that }
  315. { the API succeeded (in this case dwError will be ERROR_SUCCESS) }
  316.  
  317. type
  318.   PInternetAsyncResult = ^TInternetAsyncResult;
  319.   TInternetAsyncResult = packed record
  320.     dwResult: DWORD; { the HINTERNET, DWORD or BOOL return code from an async API }
  321.     dwError: DWORD; { dwError - the error code if the API failed }
  322.   end;
  323.  
  324.   PInternetPrefetchStatus = ^TInternetPrefetchStatus;
  325.   TInternetPrefetchStatus = packed record
  326.     dwStatus: DWORD;  { dwStatus - status of download. See INTERNET_PREFETCH_ flags }
  327.     dwSize: DWORD;    { dwSize - size of file downloaded so far }
  328.   end;
  329.  
  330. const
  331. { INTERNET_PREFETCH_STATUS - dwStatus values }
  332.   INTERNET_PREFETCH_PROGRESS      = 0;
  333.   {$EXTERNALSYM INTERNET_PREFETCH_PROGRESS}
  334.   INTERNET_PREFETCH_COMPLETE      = 1;
  335.   {$EXTERNALSYM INTERNET_PREFETCH_COMPLETE}
  336.   INTERNET_PREFETCH_ABORTED       = 2;
  337.   {$EXTERNALSYM INTERNET_PREFETCH_ABORTED}
  338.  
  339. type
  340. { TInternetProxyInfo - structure supplied with INTERNET_OPTION_PROXY to get/ }
  341. { set proxy information on a InternetOpen handle }
  342.   PInternetProxyInfo = ^INTERNET_PROXY_INFO;
  343.   INTERNET_PROXY_INFO = record
  344.     dwAccessType: DWORD;       { dwAccessType - INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or }
  345.     lpszProxy: LPCSTR;        { lpszProxy - proxy server list }
  346.     lpszProxyBypass: LPCSTR;  { lpszProxyBypass - proxy bypass list }
  347.   end;
  348.   {$EXTERNALSYM INTERNET_PROXY_INFO}
  349.   TInternetProxyInfo = INTERNET_PROXY_INFO;
  350.   LPINTERNET_PROXY_INFO = PInternetProxyInfo;
  351.   {$EXTERNALSYM LPINTERNET_PROXY_INFO}
  352.  
  353. { INTERNET_VERSION_INFO - version information returned via }
  354. { InternetQueryOption(..., INTERNET_OPTION_VERSION, ...) }
  355.  
  356.   PInternetVersionInfo = ^INTERNET_VERSION_INFO;
  357.   INTERNET_VERSION_INFO = record
  358.     dwMajorVersion: DWORD;
  359.     dwMinorVersion: DWORD;
  360.   end;
  361.   {$EXTERNALSYM INTERNET_VERSION_INFO}
  362.   TInternetVersionInfo = INTERNET_VERSION_INFO;
  363.   LPINTERNET_VERSION_INFO = PInternetVersionInfo;
  364.   {$EXTERNALSYM LPINTERNET_VERSION_INFO}
  365.  
  366. { HTTP_VERSION_INFO - query or set global HTTP version (1.0 or 1.1) }
  367.   PHttpVersionInfo = ^HTTP_VERSION_INFO;
  368.   HTTP_VERSION_INFO = record
  369.     dwMajorVersion: DWORD;
  370.     dwMinorVersion: DWORD;
  371.   end;
  372.   {$EXTERNALSYM HTTP_VERSION_INFO}
  373.   THttpVersionInfo = HTTP_VERSION_INFO;
  374.   LPHTTP_VERSION_INFO = PHttpVersionInfo;
  375.   {$EXTERNALSYM LPHTTP_VERSION_INFO}
  376.  
  377. { INTERNET_CONNECTED_INFO - information used to set the global connected state }
  378.  
  379.   PInternetConnectedInfo = ^INTERNET_CONNECTED_INFO;
  380.   INTERNET_CONNECTED_INFO = record
  381.       dwConnectedState: DWORD;     {dwConnectedState - new connected/disconnected state.}
  382.       dwFlags: DWORD;              {dwFlags - flags controlling connected->disconnected (or disconnected-> }
  383.                                    {connected) transition. See below}
  384.   end;
  385.   {$EXTERNALSYM INTERNET_CONNECTED_INFO}
  386.   TInternetConnectedInfo = INTERNET_CONNECTED_INFO;
  387.   LPINTERNET_CONNECTED_INFO = PInternetConnectedInfo;
  388.   {$EXTERNALSYM LPINTERNET_CONNECTED_INFO}
  389.  
  390. { flags for INTERNET_CONNECTED_INFO dwFlags }
  391.  
  392. { ISO_FORCE_DISCONNECTED - if set when putting Wininet into disconnected mode, }
  393. { all outstanding requests will be aborted with a cancelled error }
  394.  
  395. const
  396.   ISO_FORCE_DISCONNECTED  = $00000001;
  397.   {$EXTERNALSYM ISO_FORCE_DISCONNECTED}
  398.  
  399. { URL_COMPONENTS - the constituent parts of an URL. Used in InternetCrackUrl }
  400. { and InternetCreateUrl }
  401.  
  402. { For InternetCrackUrl, if a pointer field and its corresponding length field }
  403. { are both 0 then that component is not returned; If the pointer field is NULL }
  404. { but the length field is not zero, then both the pointer and length fields are }
  405. { returned; if both pointer and corresponding length fields are non-zero then }
  406. { the pointer field points to a buffer where the component is copied. The }
  407. { component may be un-escaped, depending on dwFlags }
  408.  
  409. { For InternetCreateUrl, the pointer fields should be nil if the component }
  410. { is not required. If the corresponding length field is zero then the pointer }
  411. { field is the address of a zero-terminated string. If the length field is not }
  412. { zero then it is the string length of the corresponding pointer field }
  413.  
  414. type
  415.   PURLComponents = ^URL_COMPONENTS;
  416.   URL_COMPONENTS = record
  417.     dwStructSize: DWORD;        { size of this structure. Used in version check }
  418.     lpszScheme: LPSTR;         { pointer to scheme name }
  419.     dwSchemeLength: DWORD;      { length of scheme name }
  420.     nScheme: TInternetScheme;    { enumerated scheme type (if known) }
  421.     lpszHostName: LPSTR;       { pointer to host name }
  422.     dwHostNameLength: DWORD;    { length of host name }
  423.     nPort: INTERNET_PORT;       { converted port number }
  424.     lpszUserName: LPSTR;       { pointer to user name }
  425.     dwUserNameLength: DWORD;    { length of user name }
  426.     lpszPassword: LPSTR;       { pointer to password }
  427.     dwPasswordLength: DWORD;    { length of password }
  428.     lpszUrlPath: LPSTR;        { pointer to URL-path }
  429.     dwUrlPathLength: DWORD;     { length of URL-path }
  430.     lpszExtraInfo: LPSTR;      { pointer to extra information (e.g. ?foo or #foo) }
  431.     dwExtraInfoLength: DWORD;   { length of extra information }
  432.   end;
  433.   {$EXTERNALSYM URL_COMPONENTS}
  434.   TURLComponents = URL_COMPONENTS;
  435.   LPURL_COMPONENTS = PURLComponents;
  436.   {$EXTERNALSYM LPURL_COMPONENTS}
  437.   
  438. { TInternetCertificateInfo lpBuffer - contains the certificate returned from
  439.   the server }
  440.  
  441.   PInternetCertificateInfo = ^INTERNET_CERTIFICATE_INFO;
  442.   INTERNET_CERTIFICATE_INFO = record
  443.     ftExpiry: TFileTime;             { ftExpiry - date the certificate expires. }
  444.     ftStart: TFileTime;              { ftStart - date the certificate becomes valid. }
  445.     lpszSubjectInfo: LPSTR;        { lpszSubjectInfo - the name of organization, site, and server }
  446.                                     {   the cert. was issued for. }
  447.     lpszIssuerInfo: LPSTR;         { lpszIssuerInfo - the name of orgainzation, site, and server }
  448.                                     {   the cert was issues by. }
  449.     lpszProtocolName: LPSTR;       { lpszProtocolName - the name of the protocol used to provide the secure }
  450.                                     {   connection. }
  451.     lpszSignatureAlgName: LPSTR;   { lpszSignatureAlgName - the name of the algorithm used for signing }
  452.                                     {  the certificate. }
  453.     lpszEncryptionAlgName: LPSTR;  { lpszEncryptionAlgName - the name of the algorithm used for }
  454.                                     {  doing encryption over the secure channel (SSL/PCT) connection. }
  455.     dwKeySize: DWORD;               { dwKeySize - size of the key. }
  456.   end;
  457.   {$EXTERNALSYM INTERNET_CERTIFICATE_INFO}
  458.   TInternetCertificateInfo = INTERNET_CERTIFICATE_INFO;
  459.   LPINTERNET_CERTIFICATE_INFO = pInternetCertificateInfo;
  460.   {$EXTERNALSYM LPINTERNET_CERTIFICATE_INFO}
  461.  
  462. { INTERNET_BUFFERS - combines headers and data. May be chained for e.g. file }
  463. { upload or scatter/gather operations. For chunked read/write, lpcszHeader }
  464. { contains the chunked-ext }
  465.   PInternetBuffersA = ^INTERNET_BUFFERSA;
  466.   PInternetBuffersW = ^INTERNET_BUFFERSW;
  467.   PInternetBuffers = PInternetBuffersA;
  468.   INTERNET_BUFFERSA = record
  469.     dwStructSize: DWORD;      { used for API versioning. Set to sizeof(INTERNET_BUFFERS) }
  470.     Next: PInternetBuffers;   { chain of buffers }
  471.     lpcszHeader: PAnsiChar;       { pointer to headers (may be NULL) }
  472.     dwHeadersLength: DWORD;   { length of headers if not NULL }
  473.     dwHeadersTotal: DWORD;    { size of headers if not enough buffer }
  474.     lpvBuffer: Pointer;       { pointer to data buffer (may be NULL) }
  475.     dwBufferLength: DWORD;    { length of data buffer if not NULL }
  476.     dwBufferTotal: DWORD;     { total size of chunk, or content-length if not chunked }
  477.     dwOffsetLow: DWORD;       { used for read-ranges (only used in HttpSendRequest2) }
  478.     dwOffsetHigh: DWORD;
  479.   end;
  480.   {$EXTERNALSYM INTERNET_BUFFERSA}
  481.   TInternetBuffersA = INTERNET_BUFFERSA;
  482.   LPINTERNET_BUFFERSA = PInternetBuffersA;
  483.   {$EXTERNALSYM LPINTERNET_BUFFERSA}
  484.   INTERNET_BUFFERSW = record
  485.     dwStructSize: DWORD;      { used for API versioning. Set to sizeof(INTERNET_BUFFERS) }
  486.     Next: PInternetBuffers;   { chain of buffers }
  487.     lpcszHeader: PAnsiChar;       { pointer to headers (may be NULL) }
  488.     dwHeadersLength: DWORD;   { length of headers if not NULL }
  489.     dwHeadersTotal: DWORD;    { size of headers if not enough buffer }
  490.     lpvBuffer: Pointer;       { pointer to data buffer (may be NULL) }
  491.     dwBufferLength: DWORD;    { length of data buffer if not NULL }
  492.     dwBufferTotal: DWORD;     { total size of chunk, or content-length if not chunked }
  493.     dwOffsetLow: DWORD;       { used for read-ranges (only used in HttpSendRequest2) }
  494.     dwOffsetHigh: DWORD;
  495.   end;
  496.   {$EXTERNALSYM INTERNET_BUFFERSW}
  497.   TInternetBuffersW = INTERNET_BUFFERSW;
  498.   LPINTERNET_BUFFERSW = PInternetBuffersW;
  499.   {$EXTERNALSYM LPINTERNET_BUFFERSW}
  500.   INTERNET_BUFFERS = INTERNET_BUFFERSA;
  501.   
  502. { prototypes }
  503.  
  504. function InternetTimeFromSystemTime(const pst: TSystemTime;
  505.   dwRFC: DWORD; lpszTime: LPSTR; cbTime: DWORD): BOOL; stdcall;
  506.   {$EXTERNALSYM InternetTimeFromSystemTime}
  507.  
  508. const
  509. { constants for InternetTimeFromSystemTime }
  510.   INTERNET_RFC1123_FORMAT         = 0;
  511.   {$EXTERNALSYM INTERNET_RFC1123_FORMAT}
  512.   INTERNET_RFC1123_BUFSIZE        = 30;
  513.   {$EXTERNALSYM INTERNET_RFC1123_BUFSIZE}
  514.  
  515. function InternetCrackUrlA(lpszUrl: PAnsiChar; dwUrlLength, dwFlags: DWORD;
  516.   var lpUrlComponents: TURLComponents): BOOL; stdcall;
  517.   {$EXTERNALSYM InternetCrackUrlA}
  518. function InternetCrackUrlW(lpszUrl: PWideChar; dwUrlLength, dwFlags: DWORD;
  519.   var lpUrlComponents: TURLComponents): BOOL; stdcall;
  520.   {$EXTERNALSYM InternetCrackUrlW}
  521. function InternetCrackUrl(lpszUrl: PChar; dwUrlLength, dwFlags: DWORD;
  522.   var lpUrlComponents: TURLComponents): BOOL; stdcall;
  523.   {$EXTERNALSYM InternetCrackUrl}
  524.  
  525. function InternetCreateUrlA(var lpUrlComponents: TURLComponents;
  526.   dwFlags: DWORD; lpszUrl: PAnsiChar; var dwUrlLength: DWORD): BOOL; stdcall;
  527.   {$EXTERNALSYM InternetCreateUrlA}
  528. function InternetCreateUrlW(var lpUrlComponents: TURLComponents;
  529.   dwFlags: DWORD; lpszUrl: PWideChar; var dwUrlLength: DWORD): BOOL; stdcall;
  530.   {$EXTERNALSYM InternetCreateUrlW}
  531. function InternetCreateUrl(var lpUrlComponents: TURLComponents;
  532.   dwFlags: DWORD; lpszUrl: PChar; var dwUrlLength: DWORD): BOOL; stdcall;
  533.   {$EXTERNALSYM InternetCreateUrl}
  534.  
  535. function InternetCanonicalizeUrlA(lpszUrl: PAnsiChar;
  536.   lpszBuffer: PAnsiChar; var lpdwBufferLength: DWORD;
  537.   dwFlags: DWORD): BOOL; stdcall;
  538.   {$EXTERNALSYM InternetCanonicalizeUrlA}
  539. function InternetCanonicalizeUrlW(lpszUrl: PWideChar;
  540.   lpszBuffer: PWideChar; var lpdwBufferLength: DWORD;
  541.   dwFlags: DWORD): BOOL; stdcall;
  542.   {$EXTERNALSYM InternetCanonicalizeUrlW}
  543. function InternetCanonicalizeUrl(lpszUrl: PChar;
  544.   lpszBuffer: PChar; var lpdwBufferLength: DWORD;
  545.   dwFlags: DWORD): BOOL; stdcall;
  546.   {$EXTERNALSYM InternetCanonicalizeUrl}
  547.  
  548. function InternetCombineUrlA(lpszBaseUrl, lpszRelativeUrl: PAnsiChar;
  549.   lpszBuffer: PAnsiChar; var lpdwBufferLength: DWORD;
  550.   dwFlags: DWORD): BOOL; stdcall;
  551.   {$EXTERNALSYM InternetCombineUrlA}
  552. function InternetCombineUrlW(lpszBaseUrl, lpszRelativeUrl: PWideChar;
  553.   lpszBuffer: PWideChar; var lpdwBufferLength: DWORD;
  554.   dwFlags: DWORD): BOOL; stdcall;
  555.   {$EXTERNALSYM InternetCombineUrlW}
  556. function InternetCombineUrl(lpszBaseUrl, lpszRelativeUrl: PChar;
  557.   lpszBuffer: PChar; var lpdwBufferLength: DWORD;
  558.   dwFlags: DWORD): BOOL; stdcall;
  559.   {$EXTERNALSYM InternetCombineUrl}
  560.  
  561. const
  562. { flags for InternetCrackUrl and InternetCreateUrl }
  563.  
  564.   ICU_ESCAPE          = $80000000;  { (un)escape URL characters }
  565.   {$EXTERNALSYM ICU_ESCAPE}
  566.   ICU_USERNAME        = $40000000;  { use internal username & password }
  567.   {$EXTERNALSYM ICU_USERNAME}
  568.  
  569. { flags for InternetCanonicalizeUrl and InternetCombineUrl }
  570.  
  571.   ICU_NO_ENCODE       = $20000000;  { Don't convert unsafe characters to escape sequence }
  572.   {$EXTERNALSYM ICU_NO_ENCODE}
  573.   ICU_DECODE          = $10000000;  { Convert escape sequences to characters }
  574.   {$EXTERNALSYM ICU_DECODE}
  575.   ICU_NO_META         = $08000000;  { Don't convert .. etc. meta path sequences }
  576.   {$EXTERNALSYM ICU_NO_META}
  577.   ICU_ENCODE_SPACES_ONLY     = $04000000;  { Encode spaces only }
  578.   {$EXTERNALSYM ICU_ENCODE_SPACES_ONLY}
  579.   ICU_BROWSER_MODE    = $02000000;  { Special encode/decode rules for browser }
  580.   {$EXTERNALSYM ICU_BROWSER_MODE}
  581.  
  582. function InternetOpenA(lpszAgent: PAnsiChar; dwAccessType: DWORD; 
  583.   lpszProxy, lpszProxyBypass: PAnsiChar; dwFlags: DWORD): HINTERNET; stdcall;
  584.   {$EXTERNALSYM InternetOpenA}
  585. function InternetOpenW(lpszAgent: PWideChar; dwAccessType: DWORD; 
  586.   lpszProxy, lpszProxyBypass: PWideChar; dwFlags: DWORD): HINTERNET; stdcall;
  587.   {$EXTERNALSYM InternetOpenW}
  588. function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD; 
  589.   lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall;
  590.   {$EXTERNALSYM InternetOpen}
  591.  
  592. { access types for InternetOpen }
  593. const
  594.   INTERNET_OPEN_TYPE_PRECONFIG        = 0;  { use registry configuration }
  595.   {$EXTERNALSYM INTERNET_OPEN_TYPE_PRECONFIG}
  596.   INTERNET_OPEN_TYPE_DIRECT           = 1;  { direct to net }
  597.   {$EXTERNALSYM INTERNET_OPEN_TYPE_DIRECT}
  598.   INTERNET_OPEN_TYPE_PROXY            = 3;  { via named proxy }
  599.   {$EXTERNALSYM INTERNET_OPEN_TYPE_PROXY}
  600.   INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  = 4;   { prevent using java/script/INS }
  601.   {$EXTERNALSYM INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY}
  602.  
  603. { old names for access types }
  604.  
  605.   PRE_CONFIG_INTERNET_ACCESS      = INTERNET_OPEN_TYPE_PRECONFIG;
  606.   {$EXTERNALSYM PRE_CONFIG_INTERNET_ACCESS}
  607.   LOCAL_INTERNET_ACCESS           = INTERNET_OPEN_TYPE_DIRECT;
  608.   {$EXTERNALSYM LOCAL_INTERNET_ACCESS}
  609.   GATEWAY_INTERNET_ACCESS         = 2;  { Internet via gateway }
  610.   {$EXTERNALSYM GATEWAY_INTERNET_ACCESS}
  611.   CERN_PROXY_INTERNET_ACCESS      = INTERNET_OPEN_TYPE_PROXY;
  612.   {$EXTERNALSYM CERN_PROXY_INTERNET_ACCESS}
  613.  
  614. function InternetCloseHandle(hInet: HINTERNET): BOOL; stdcall;
  615.   {$EXTERNALSYM InternetCloseHandle}
  616.  
  617. function InternetConnectA(hInet: HINTERNET; lpszServerName: PAnsiChar;
  618.   nServerPort: INTERNET_PORT; lpszUsername: PAnsiChar; lpszPassword: PAnsiChar;
  619.   dwService: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  620.   {$EXTERNALSYM InternetConnectA}
  621. function InternetConnectW(hInet: HINTERNET; lpszServerName: PWideChar;
  622.   nServerPort: INTERNET_PORT; lpszUsername: PWideChar; lpszPassword: PWideChar;
  623.   dwService: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  624.   {$EXTERNALSYM InternetConnectW}
  625. function InternetConnect(hInet: HINTERNET; lpszServerName: PChar;
  626.   nServerPort: INTERNET_PORT; lpszUsername: PChar; lpszPassword: PChar;
  627.   dwService: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  628.   {$EXTERNALSYM InternetConnect}
  629.  
  630. { service types for InternetConnect }
  631. const
  632.   INTERNET_SERVICE_URL = 0;
  633.   {$EXTERNALSYM INTERNET_SERVICE_URL}
  634.   INTERNET_SERVICE_FTP = 1;
  635.   {$EXTERNALSYM INTERNET_SERVICE_FTP}
  636.   INTERNET_SERVICE_GOPHER = 2;
  637.   {$EXTERNALSYM INTERNET_SERVICE_GOPHER}
  638.   INTERNET_SERVICE_HTTP = 3;
  639.   {$EXTERNALSYM INTERNET_SERVICE_HTTP}
  640.  
  641. function InternetOpenUrlA(hInet: HINTERNET; lpszUrl: PAnsiChar;
  642.   lpszHeaders: PAnsiChar; dwHeadersLength: DWORD; dwFlags: DWORD;
  643.   dwContext: DWORD): HINTERNET; stdcall;
  644.   {$EXTERNALSYM InternetOpenUrlA}
  645. function InternetOpenUrlW(hInet: HINTERNET; lpszUrl: PWideChar;
  646.   lpszHeaders: PWideChar; dwHeadersLength: DWORD; dwFlags: DWORD;
  647.   dwContext: DWORD): HINTERNET; stdcall;
  648.   {$EXTERNALSYM InternetOpenUrlW}
  649. function InternetOpenUrl(hInet: HINTERNET; lpszUrl: PChar;
  650.   lpszHeaders: PChar; dwHeadersLength: DWORD; dwFlags: DWORD;
  651.   dwContext: DWORD): HINTERNET; stdcall;
  652.   {$EXTERNALSYM InternetOpenUrl}
  653.  
  654. function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer;
  655.   dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;
  656.   {$EXTERNALSYM InternetReadFile}
  657.  
  658. function InternetReadFileExA(hFile: HINTERNET;  lpBuffersOut: Pointer;
  659.   dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  660.   {$EXTERNALSYM InternetReadFileExA}
  661. function InternetReadFileExW(hFile: HINTERNET;  lpBuffersOut: Pointer;
  662.   dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  663.   {$EXTERNALSYM InternetReadFileExW}
  664. function InternetReadFileEx(hFile: HINTERNET;  lpBuffersOut: Pointer;
  665.   dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  666.   {$EXTERNALSYM InternetReadFileEx}
  667.  
  668. { flags for InternetReadFileEx() }
  669. const
  670.   IRF_ASYNC       = WININET_API_FLAG_ASYNC;
  671.   {$EXTERNALSYM IRF_ASYNC}
  672.   IRF_SYNC        = WININET_API_FLAG_SYNC;
  673.   {$EXTERNALSYM IRF_SYNC}
  674.   IRF_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT;
  675.   {$EXTERNALSYM IRF_USE_CONTEXT}
  676.   IRF_NO_WAIT     = $00000008;
  677.   {$EXTERNALSYM IRF_NO_WAIT}
  678.  
  679. function InternetSetFilePointer(hFile: HINTERNET;
  680.   lDistanceToMove: Longint; pReserved: Pointer;
  681.   dwMoveMethod, dwContext: DWORD): DWORD; stdcall;
  682.   {$EXTERNALSYM InternetSetFilePointer}
  683.  
  684. function InternetWriteFile(hFile: HINTERNET; lpBuffer: Pointer;
  685.   dwNumberOfBytesToWrite: DWORD;
  686.   var lpdwNumberOfBytesWritten: DWORD): BOOL; stdcall;
  687.   {$EXTERNALSYM InternetWriteFile}
  688.  
  689. function InternetQueryDataAvailable(hFile: HINTERNET; var lpdwNumberOfBytesAvailable: DWORD;
  690.   dwFlags, dwContext: DWORD): BOOL; stdcall;
  691.   {$EXTERNALSYM InternetQueryDataAvailable}
  692.  
  693. function InternetFindNextFileA(hFind: HINTERNET; lpvFindData: Pointer): BOOL; stdcall;
  694.   {$EXTERNALSYM InternetFindNextFileA}
  695. function InternetFindNextFileW(hFind: HINTERNET; lpvFindData: Pointer): BOOL; stdcall;
  696.   {$EXTERNALSYM InternetFindNextFileW}
  697. function InternetFindNextFile(hFind: HINTERNET; lpvFindData: Pointer): BOOL; stdcall;
  698.   {$EXTERNALSYM InternetFindNextFile}
  699.  
  700. function InternetQueryOptionA(hInet: HINTERNET; dwOption: DWORD;
  701.   lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL; stdcall;
  702.   {$EXTERNALSYM InternetQueryOptionA}
  703. function InternetQueryOptionW(hInet: HINTERNET; dwOption: DWORD;
  704.   lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL; stdcall;
  705.   {$EXTERNALSYM InternetQueryOptionW}
  706. function InternetQueryOption(hInet: HINTERNET; dwOption: DWORD;
  707.   lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL; stdcall;
  708.   {$EXTERNALSYM InternetQueryOption}
  709.  
  710. function InternetSetOptionA(hInet: HINTERNET; dwOption: DWORD;
  711.   lpBuffer: Pointer; dwBufferLength: DWORD): BOOL; stdcall;
  712.   {$EXTERNALSYM InternetSetOptionA}
  713. function InternetSetOptionW(hInet: HINTERNET; dwOption: DWORD;
  714.   lpBuffer: Pointer; dwBufferLength: DWORD): BOOL; stdcall;
  715.   {$EXTERNALSYM InternetSetOptionW}
  716. function InternetSetOption(hInet: HINTERNET; dwOption: DWORD;
  717.   lpBuffer: Pointer; dwBufferLength: DWORD): BOOL; stdcall;
  718.   {$EXTERNALSYM InternetSetOption}
  719.  
  720. function InternetSetOptionExA(hInet: HINTERNET; dwOption: DWORD;
  721.   lpBuffer: Pointer; dwBufferLength, dwFlags: DWORD): BOOL; stdcall;
  722.   {$EXTERNALSYM InternetSetOptionExA}
  723. function InternetSetOptionExW(hInet: HINTERNET; dwOption: DWORD;
  724.   lpBuffer: Pointer; dwBufferLength, dwFlags: DWORD): BOOL; stdcall;
  725.   {$EXTERNALSYM InternetSetOptionExW}
  726. function InternetSetOptionEx(hInet: HINTERNET; dwOption: DWORD;
  727.   lpBuffer: Pointer; dwBufferLength, dwFlags: DWORD): BOOL; stdcall;
  728.   {$EXTERNALSYM InternetSetOptionEx}
  729.  
  730. function InternetLockRequestFile(hInternet: HINTERNET;
  731.   lphLockRequestInfo: PHandle): BOOL; stdcall;
  732.   {$EXTERNALSYM InternetLockRequestFile}
  733.  
  734. function InternetUnlockRequestFile(hLockRequestInfo: THANDLE): BOOL; stdcall;
  735.   {$EXTERNALSYM InternetUnlockRequestFile}
  736.  
  737. { flags for InternetSetOptionEx() }
  738. const
  739.   ISO_GLOBAL      = $00000001;  { modify option globally }
  740.   {$EXTERNALSYM ISO_GLOBAL}
  741.   ISO_REGISTRY    = $00000002;  { write option to registry (where applicable) }
  742.   {$EXTERNALSYM ISO_REGISTRY}
  743.   ISO_VALID_FLAGS = ISO_GLOBAL or ISO_REGISTRY;
  744.   {$EXTERNALSYM ISO_VALID_FLAGS}
  745.  
  746. { options manifests for Internet(Query or Set)Option }
  747. const
  748.   INTERNET_OPTION_CALLBACK = 1;
  749.   {$EXTERNALSYM INTERNET_OPTION_CALLBACK}
  750.   INTERNET_OPTION_CONNECT_TIMEOUT = 2;
  751.   {$EXTERNALSYM INTERNET_OPTION_CONNECT_TIMEOUT}
  752.   INTERNET_OPTION_CONNECT_RETRIES = 3;
  753.   {$EXTERNALSYM INTERNET_OPTION_CONNECT_RETRIES}
  754.   INTERNET_OPTION_CONNECT_BACKOFF = 4;
  755.   {$EXTERNALSYM INTERNET_OPTION_CONNECT_BACKOFF}
  756.   INTERNET_OPTION_SEND_TIMEOUT = 5;
  757.   {$EXTERNALSYM INTERNET_OPTION_SEND_TIMEOUT}
  758.   INTERNET_OPTION_CONTROL_SEND_TIMEOUT       = INTERNET_OPTION_SEND_TIMEOUT;
  759.   {$EXTERNALSYM INTERNET_OPTION_CONTROL_SEND_TIMEOUT}
  760.   INTERNET_OPTION_RECEIVE_TIMEOUT = 6;
  761.   {$EXTERNALSYM INTERNET_OPTION_RECEIVE_TIMEOUT}
  762.   INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT    = INTERNET_OPTION_RECEIVE_TIMEOUT;
  763.   {$EXTERNALSYM INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT}
  764.   INTERNET_OPTION_DATA_SEND_TIMEOUT = 7;
  765.   {$EXTERNALSYM INTERNET_OPTION_DATA_SEND_TIMEOUT}
  766.   INTERNET_OPTION_DATA_RECEIVE_TIMEOUT = 8;
  767.   {$EXTERNALSYM INTERNET_OPTION_DATA_RECEIVE_TIMEOUT}
  768.   INTERNET_OPTION_HANDLE_TYPE = 9;
  769.   {$EXTERNALSYM INTERNET_OPTION_HANDLE_TYPE}
  770.   INTERNET_OPTION_READ_BUFFER_SIZE = 12;
  771.   {$EXTERNALSYM INTERNET_OPTION_READ_BUFFER_SIZE}
  772.   INTERNET_OPTION_WRITE_BUFFER_SIZE = 13;
  773.   {$EXTERNALSYM INTERNET_OPTION_WRITE_BUFFER_SIZE}
  774.   INTERNET_OPTION_ASYNC_ID = 15;
  775.   {$EXTERNALSYM INTERNET_OPTION_ASYNC_ID}
  776.   INTERNET_OPTION_ASYNC_PRIORITY = 16;
  777.   {$EXTERNALSYM INTERNET_OPTION_ASYNC_PRIORITY}
  778.   INTERNET_OPTION_PARENT_HANDLE               = 21;
  779.   {$EXTERNALSYM INTERNET_OPTION_PARENT_HANDLE}
  780.   INTERNET_OPTION_KEEP_CONNECTION             = 22;
  781.   {$EXTERNALSYM INTERNET_OPTION_KEEP_CONNECTION}
  782.   INTERNET_OPTION_REQUEST_FLAGS               = 23;
  783.   {$EXTERNALSYM INTERNET_OPTION_REQUEST_FLAGS}
  784.   INTERNET_OPTION_EXTENDED_ERROR              = 24;
  785.   {$EXTERNALSYM INTERNET_OPTION_EXTENDED_ERROR}
  786.   INTERNET_OPTION_OFFLINE_MODE                = 26;
  787.   {$EXTERNALSYM INTERNET_OPTION_OFFLINE_MODE}
  788.   INTERNET_OPTION_CACHE_STREAM_HANDLE         = 27;
  789.   {$EXTERNALSYM INTERNET_OPTION_CACHE_STREAM_HANDLE}
  790.   INTERNET_OPTION_USERNAME                    = 28;
  791.   {$EXTERNALSYM INTERNET_OPTION_USERNAME}
  792.   INTERNET_OPTION_PASSWORD                    = 29;
  793.   {$EXTERNALSYM INTERNET_OPTION_PASSWORD}
  794.   INTERNET_OPTION_ASYNC                       = 30;
  795.   {$EXTERNALSYM INTERNET_OPTION_ASYNC}
  796.   INTERNET_OPTION_SECURITY_FLAGS              = 31;
  797.   {$EXTERNALSYM INTERNET_OPTION_SECURITY_FLAGS}
  798.   INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT = 32;
  799.   {$EXTERNALSYM INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT}
  800.   INTERNET_OPTION_DATAFILE_NAME               = 33;
  801.   {$EXTERNALSYM INTERNET_OPTION_DATAFILE_NAME}
  802.   INTERNET_OPTION_URL                         = 34;
  803.   {$EXTERNALSYM INTERNET_OPTION_URL}
  804.   INTERNET_OPTION_SECURITY_CERTIFICATE        = 35;
  805.   {$EXTERNALSYM INTERNET_OPTION_SECURITY_CERTIFICATE}
  806.   INTERNET_OPTION_SECURITY_KEY_BITNESS        = 36;
  807.   {$EXTERNALSYM INTERNET_OPTION_SECURITY_KEY_BITNESS}
  808.   INTERNET_OPTION_REFRESH                     = 37;
  809.   {$EXTERNALSYM INTERNET_OPTION_REFRESH}
  810.   INTERNET_OPTION_PROXY                       = 38;
  811.   {$EXTERNALSYM INTERNET_OPTION_PROXY}
  812.   INTERNET_OPTION_SETTINGS_CHANGED            = 39;
  813.   {$EXTERNALSYM INTERNET_OPTION_SETTINGS_CHANGED}
  814.   INTERNET_OPTION_VERSION                     = 40;
  815.   {$EXTERNALSYM INTERNET_OPTION_VERSION}
  816.   INTERNET_OPTION_USER_AGENT                  = 41;
  817.   {$EXTERNALSYM INTERNET_OPTION_USER_AGENT}
  818.   INTERNET_OPTION_END_BROWSER_SESSION         = 42;
  819.   {$EXTERNALSYM INTERNET_OPTION_END_BROWSER_SESSION}
  820.   INTERNET_OPTION_PROXY_USERNAME              = 43;
  821.   {$EXTERNALSYM INTERNET_OPTION_PROXY_USERNAME}
  822.   INTERNET_OPTION_PROXY_PASSWORD              = 44;
  823.   {$EXTERNALSYM INTERNET_OPTION_PROXY_PASSWORD}
  824.   INTERNET_OPTION_CONTEXT_VALUE               = 45;
  825.   {$EXTERNALSYM INTERNET_OPTION_CONTEXT_VALUE}
  826.   INTERNET_OPTION_CONNECT_LIMIT               = 46;
  827.   {$EXTERNALSYM INTERNET_OPTION_CONNECT_LIMIT}
  828.   INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT = 47;
  829.   {$EXTERNALSYM INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT}
  830.   INTERNET_OPTION_POLICY                      = 48;
  831.   {$EXTERNALSYM INTERNET_OPTION_POLICY}
  832.   INTERNET_OPTION_DISCONNECTED_TIMEOUT        = 49;
  833.   {$EXTERNALSYM INTERNET_OPTION_DISCONNECTED_TIMEOUT}
  834.   INTERNET_OPTION_CONNECTED_STATE             = 50;
  835.   {$EXTERNALSYM INTERNET_OPTION_CONNECTED_STATE}
  836.   INTERNET_OPTION_IDLE_STATE                  = 51;
  837.   {$EXTERNALSYM INTERNET_OPTION_IDLE_STATE}
  838.   INTERNET_OPTION_OFFLINE_SEMANTICS           = 52;
  839.   {$EXTERNALSYM INTERNET_OPTION_OFFLINE_SEMANTICS}
  840.   INTERNET_OPTION_SECONDARY_CACHE_KEY         = 53;
  841.   {$EXTERNALSYM INTERNET_OPTION_SECONDARY_CACHE_KEY}
  842.   INTERNET_OPTION_CALLBACK_FILTER             = 54;
  843.   {$EXTERNALSYM INTERNET_OPTION_CALLBACK_FILTER}
  844.   INTERNET_OPTION_CONNECT_TIME                = 55;
  845.   {$EXTERNALSYM INTERNET_OPTION_CONNECT_TIME}
  846.   INTERNET_OPTION_SEND_THROUGHPUT             = 56;
  847.   {$EXTERNALSYM INTERNET_OPTION_SEND_THROUGHPUT}
  848.   INTERNET_OPTION_RECEIVE_THROUGHPUT          = 57;
  849.   {$EXTERNALSYM INTERNET_OPTION_RECEIVE_THROUGHPUT}
  850.   INTERNET_OPTION_REQUEST_PRIORITY            = 58;
  851.   {$EXTERNALSYM INTERNET_OPTION_REQUEST_PRIORITY}
  852.   INTERNET_OPTION_HTTP_VERSION                = 59;
  853.   {$EXTERNALSYM INTERNET_OPTION_HTTP_VERSION}
  854.   INTERNET_OPTION_RESET_URLCACHE_SESSION      = 60;
  855.   {$EXTERNALSYM INTERNET_OPTION_RESET_URLCACHE_SESSION}
  856.   INTERNET_OPTION_ERROR_MASK                  = 62;
  857.   {$EXTERNALSYM INTERNET_OPTION_ERROR_MASK}
  858.   INTERNET_FIRST_OPTION                      = INTERNET_OPTION_CALLBACK;
  859.   {$EXTERNALSYM INTERNET_FIRST_OPTION}
  860.   INTERNET_LAST_OPTION                       = INTERNET_OPTION_PROXY;
  861.   {$EXTERNALSYM INTERNET_LAST_OPTION}
  862.  
  863. { values for INTERNET_OPTION_PRIORITY }
  864.  
  865.   INTERNET_PRIORITY_FOREGROUND = 1000;
  866.   {$EXTERNALSYM INTERNET_PRIORITY_FOREGROUND}
  867.  
  868. { handle types }
  869.  
  870.   INTERNET_HANDLE_TYPE_INTERNET = 1;
  871.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_INTERNET}
  872.   INTERNET_HANDLE_TYPE_CONNECT_FTP = 2;
  873.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_CONNECT_FTP}
  874.   INTERNET_HANDLE_TYPE_CONNECT_GOPHER = 3;
  875.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_CONNECT_GOPHER}
  876.   INTERNET_HANDLE_TYPE_CONNECT_HTTP = 4;
  877.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_CONNECT_HTTP}
  878.   INTERNET_HANDLE_TYPE_FTP_FIND = 5;
  879.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FIND}
  880.   INTERNET_HANDLE_TYPE_FTP_FIND_HTML = 6;
  881.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FIND_HTML}
  882.   INTERNET_HANDLE_TYPE_FTP_FILE = 7;
  883.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FILE}
  884.   INTERNET_HANDLE_TYPE_FTP_FILE_HTML = 8;
  885.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FILE_HTML}
  886.   INTERNET_HANDLE_TYPE_GOPHER_FIND = 9;
  887.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FIND}
  888.   INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML = 10;
  889.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML}
  890.   INTERNET_HANDLE_TYPE_GOPHER_FILE = 11;
  891.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FILE}
  892.   INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML = 12;
  893.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML}
  894.   INTERNET_HANDLE_TYPE_HTTP_REQUEST = 13;
  895.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_HTTP_REQUEST}
  896.  
  897. { values for INTERNET_OPTION_SECURITY_FLAGS }
  898.  
  899.   SECURITY_FLAG_SECURE                        = $00000001; { can query only }
  900.   {$EXTERNALSYM SECURITY_FLAG_SECURE}
  901.   SECURITY_FLAG_SSL                           = $00000002;
  902.   {$EXTERNALSYM SECURITY_FLAG_SSL}
  903.   SECURITY_FLAG_SSL3                          = $00000004;
  904.   {$EXTERNALSYM SECURITY_FLAG_SSL3}
  905.   SECURITY_FLAG_PCT                           = $00000008;
  906.   {$EXTERNALSYM SECURITY_FLAG_PCT}
  907.   SECURITY_FLAG_PCT4                          = $00000010;
  908.   {$EXTERNALSYM SECURITY_FLAG_PCT4}
  909.   SECURITY_FLAG_IETFSSL4                      = $00000020;
  910.   {$EXTERNALSYM SECURITY_FLAG_IETFSSL4}
  911.   SECURITY_FLAG_STRENGTH_WEAK                 = $10000000;
  912.   {$EXTERNALSYM SECURITY_FLAG_STRENGTH_WEAK}
  913.   SECURITY_FLAG_STRENGTH_MEDIUM               = $40000000;
  914.   {$EXTERNALSYM SECURITY_FLAG_STRENGTH_MEDIUM}
  915.   SECURITY_FLAG_STRENGTH_STRONG               = $20000000;
  916.   {$EXTERNALSYM SECURITY_FLAG_STRENGTH_STRONG}
  917.   SECURITY_FLAG_40BIT                         = SECURITY_FLAG_STRENGTH_WEAK;
  918.   {$EXTERNALSYM SECURITY_FLAG_40BIT}
  919.   SECURITY_FLAG_128BIT                        = SECURITY_FLAG_STRENGTH_STRONG;
  920.   {$EXTERNALSYM SECURITY_FLAG_128BIT}
  921.   SECURITY_FLAG_56BIT                         = SECURITY_FLAG_STRENGTH_MEDIUM;
  922.   {$EXTERNALSYM SECURITY_FLAG_56BIT}
  923.   SECURITY_FLAG_UNKNOWNBIT                    = $80000000;
  924.   {$EXTERNALSYM SECURITY_FLAG_UNKNOWNBIT}
  925.   SECURITY_FLAG_NORMALBITNESS                 = SECURITY_FLAG_40BIT;
  926.   {$EXTERNALSYM SECURITY_FLAG_NORMALBITNESS}
  927.   SECURITY_FLAG_IGNORE_REVOCATION             = $00000080;
  928.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_REVOCATION}
  929.   SECURITY_FLAG_IGNORE_UNKNOWN_CA             = $00000100;
  930.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_UNKNOWN_CA}
  931.   SECURITY_FLAG_IGNORE_WRONG_USAGE            = $00000200;
  932.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_WRONG_USAGE}
  933.   SECURITY_FLAG_IGNORE_CERT_CN_INVALID        = INTERNET_FLAG_IGNORE_CERT_CN_INVALID;
  934.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_CERT_CN_INVALID}
  935.   SECURITY_FLAG_IGNORE_CERT_DATE_INVALID      = INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;
  936.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_CERT_DATE_INVALID}
  937.   SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS      = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS;
  938.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS}
  939.   SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP       = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
  940.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP}
  941.  
  942. function InternetGetLastResponseInfoA(var lpdwError: DWORD; lpszBuffer: PAnsiChar;
  943.   var lpdwBufferLength: DWORD): BOOL; stdcall;
  944.   {$EXTERNALSYM InternetGetLastResponseInfoA}
  945. function InternetGetLastResponseInfoW(var lpdwError: DWORD; lpszBuffer: PWideChar;
  946.   var lpdwBufferLength: DWORD): BOOL; stdcall;
  947.   {$EXTERNALSYM InternetGetLastResponseInfoW}
  948. function InternetGetLastResponseInfo(var lpdwError: DWORD; lpszBuffer: PChar;
  949.   var lpdwBufferLength: DWORD): BOOL; stdcall;
  950.   {$EXTERNALSYM InternetGetLastResponseInfo}
  951.  
  952. { callback function for InternetSetStatusCallback }
  953. type
  954.  
  955.  
  956.  
  957.  
  958.  
  959.   INTERNET_STATUS_CALLBACK = TFarProc;
  960.  
  961.   {$EXTERNALSYM INTERNET_STATUS_CALLBACK}
  962.   TFNInternetStatusCallback = INTERNET_STATUS_CALLBACK;
  963.   PFNInternetStatusCallback = ^TFNInternetStatusCallback;
  964.   LPINTERNET_STATUS_CALLBACK = PFNInternetStatusCallback;
  965.   {$EXTERNALSYM LPINTERNET_STATUS_CALLBACK}
  966.  
  967. function InternetSetStatusCallback(hInet: HINTERNET;
  968.   lpfnInternetCallback: PFNInternetStatusCallback): PFNInternetStatusCallback; stdcall;
  969.   {$EXTERNALSYM InternetSetStatusCallback}
  970.  
  971. { status manifests for Internet status callback }
  972. const
  973.   INTERNET_STATUS_RESOLVING_NAME              = 10;
  974.   {$EXTERNALSYM INTERNET_STATUS_RESOLVING_NAME}
  975.   INTERNET_STATUS_NAME_RESOLVED               = 11;
  976.   {$EXTERNALSYM INTERNET_STATUS_NAME_RESOLVED}
  977.   INTERNET_STATUS_CONNECTING_TO_SERVER        = 20;
  978.   {$EXTERNALSYM INTERNET_STATUS_CONNECTING_TO_SERVER}
  979.   INTERNET_STATUS_CONNECTED_TO_SERVER         = 21;
  980.   {$EXTERNALSYM INTERNET_STATUS_CONNECTED_TO_SERVER}
  981.   INTERNET_STATUS_SENDING_REQUEST             = 30;
  982.   {$EXTERNALSYM INTERNET_STATUS_SENDING_REQUEST}
  983.   INTERNET_STATUS_REQUEST_SENT                = 31;
  984.   {$EXTERNALSYM INTERNET_STATUS_REQUEST_SENT}
  985.   INTERNET_STATUS_RECEIVING_RESPONSE          = 40;
  986.   {$EXTERNALSYM INTERNET_STATUS_RECEIVING_RESPONSE}
  987.   INTERNET_STATUS_RESPONSE_RECEIVED           = 41;
  988.   {$EXTERNALSYM INTERNET_STATUS_RESPONSE_RECEIVED}
  989.   INTERNET_STATUS_CTL_RESPONSE_RECEIVED       = 42;
  990.   {$EXTERNALSYM INTERNET_STATUS_CTL_RESPONSE_RECEIVED}
  991.   INTERNET_STATUS_PREFETCH                    = 43;
  992.   {$EXTERNALSYM INTERNET_STATUS_PREFETCH}
  993.   INTERNET_STATUS_CLOSING_CONNECTION          = 50;
  994.   {$EXTERNALSYM INTERNET_STATUS_CLOSING_CONNECTION}
  995.   INTERNET_STATUS_CONNECTION_CLOSED           = 51;
  996.   {$EXTERNALSYM INTERNET_STATUS_CONNECTION_CLOSED}
  997.   INTERNET_STATUS_HANDLE_CREATED              = 60;
  998.   {$EXTERNALSYM INTERNET_STATUS_HANDLE_CREATED}
  999.   INTERNET_STATUS_HANDLE_CLOSING              = 70;
  1000.   {$EXTERNALSYM INTERNET_STATUS_HANDLE_CLOSING}
  1001.   INTERNET_STATUS_REQUEST_COMPLETE            = 100;
  1002.   {$EXTERNALSYM INTERNET_STATUS_REQUEST_COMPLETE}
  1003.   INTERNET_STATUS_REDIRECT                    = 110;
  1004.   {$EXTERNALSYM INTERNET_STATUS_REDIRECT}
  1005.   INTERNET_STATUS_INTERMEDIATE_RESPONSE       = 120;
  1006.   {$EXTERNALSYM INTERNET_STATUS_INTERMEDIATE_RESPONSE}
  1007.   INTERNET_STATUS_STATE_CHANGE                = 200;
  1008.   {$EXTERNALSYM INTERNET_STATUS_STATE_CHANGE}
  1009.  
  1010. { the following can be indicated in a state change notification: }
  1011.   INTERNET_STATE_CONNECTED                    = $00000001;  { connected state (mutually exclusive with disconnected) }
  1012.   {$EXTERNALSYM INTERNET_STATE_CONNECTED}
  1013.   INTERNET_STATE_DISCONNECTED                 = $00000002;  { disconnected from network }
  1014.   {$EXTERNALSYM INTERNET_STATE_DISCONNECTED}
  1015.   INTERNET_STATE_DISCONNECTED_BY_USER         = $00000010;  { disconnected by user request }
  1016.   {$EXTERNALSYM INTERNET_STATE_DISCONNECTED_BY_USER}
  1017.   INTERNET_STATE_IDLE                         = $00000100;  { no network requests being made (by Wininet) }
  1018.   {$EXTERNALSYM INTERNET_STATE_IDLE}
  1019.   INTERNET_STATE_BUSY                         = $00000200;  { network requests being made (by Wininet) }
  1020.   {$EXTERNALSYM INTERNET_STATE_BUSY}
  1021.  
  1022. { if the following value is returned by InternetSetStatusCallback, then }
  1023. { probably an invalid (non-code) address was supplied for the callback }
  1024.  
  1025.   INTERNET_INVALID_STATUS_CALLBACK = (-1);
  1026.   {$EXTERNALSYM INTERNET_INVALID_STATUS_CALLBACK}
  1027.  
  1028. { prototypes }
  1029.  
  1030. function FtpFindFirstFileA(hConnect: HINTERNET; lpszSearchFile: PAnsiChar;
  1031.   var lpFindFileData: TWin32FindDataA; dwFlags: DWORD;
  1032.   dwContext: DWORD): HINTERNET; stdcall;
  1033.   {$EXTERNALSYM FtpFindFirstFileA}
  1034. function FtpFindFirstFileW(hConnect: HINTERNET; lpszSearchFile: PWideChar;
  1035.   var lpFindFileData: TWin32FindDataW; dwFlags: DWORD;
  1036.   dwContext: DWORD): HINTERNET; stdcall;
  1037.   {$EXTERNALSYM FtpFindFirstFileW}
  1038. function FtpFindFirstFile(hConnect: HINTERNET; lpszSearchFile: PChar;
  1039.   var lpFindFileData: TWin32FindData; dwFlags: DWORD;
  1040.   dwContext: DWORD): HINTERNET; stdcall;
  1041.   {$EXTERNALSYM FtpFindFirstFile}
  1042.  
  1043. function FtpGetFileA(hConnect: HINTERNET; lpszRemoteFile: PAnsiChar;
  1044.   lpszNewFile: PAnsiChar; fFailIfExists: BOOL; dwFlagsAndAttributes: DWORD;
  1045.   dwFlags: DWORD; dwContext: DWORD): BOOL stdcall;
  1046.   {$EXTERNALSYM FtpGetFileA}
  1047. function FtpGetFileW(hConnect: HINTERNET; lpszRemoteFile: PWideChar;
  1048.   lpszNewFile: PWideChar; fFailIfExists: BOOL; dwFlagsAndAttributes: DWORD;
  1049.   dwFlags: DWORD; dwContext: DWORD): BOOL stdcall;
  1050.   {$EXTERNALSYM FtpGetFileW}
  1051. function FtpGetFile(hConnect: HINTERNET; lpszRemoteFile: PChar;
  1052.   lpszNewFile: PChar; fFailIfExists: BOOL; dwFlagsAndAttributes: DWORD;
  1053.   dwFlags: DWORD; dwContext: DWORD): BOOL stdcall;
  1054.   {$EXTERNALSYM FtpGetFile}
  1055.  
  1056. function FtpPutFileA(hConnect: HINTERNET; lpszLocalFile: PAnsiChar;
  1057.   lpszNewRemoteFile: PAnsiChar; dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  1058.   {$EXTERNALSYM FtpPutFileA}
  1059. function FtpPutFileW(hConnect: HINTERNET; lpszLocalFile: PWideChar;
  1060.   lpszNewRemoteFile: PWideChar; dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  1061.   {$EXTERNALSYM FtpPutFileW}
  1062. function FtpPutFile(hConnect: HINTERNET; lpszLocalFile: PChar;
  1063.   lpszNewRemoteFile: PChar; dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  1064.   {$EXTERNALSYM FtpPutFile}
  1065.  
  1066. function FtpDeleteFileA(hConnect: HINTERNET; lpszFileName: PAnsiChar): BOOL; stdcall;
  1067.   {$EXTERNALSYM FtpDeleteFileA}
  1068. function FtpDeleteFileW(hConnect: HINTERNET; lpszFileName: PWideChar): BOOL; stdcall;
  1069.   {$EXTERNALSYM FtpDeleteFileW}
  1070. function FtpDeleteFile(hConnect: HINTERNET; lpszFileName: PChar): BOOL; stdcall;
  1071.   {$EXTERNALSYM FtpDeleteFile}
  1072.  
  1073. function FtpRenameFileA(hConnect: HINTERNET; lpszExisting: PAnsiChar;
  1074.   lpszNew: PAnsiChar): BOOL; stdcall;
  1075.   {$EXTERNALSYM FtpRenameFileA}
  1076. function FtpRenameFileW(hConnect: HINTERNET; lpszExisting: PWideChar;
  1077.   lpszNew: PWideChar): BOOL; stdcall;
  1078.   {$EXTERNALSYM FtpRenameFileW}
  1079. function FtpRenameFile(hConnect: HINTERNET; lpszExisting: PChar;
  1080.   lpszNew: PChar): BOOL; stdcall;
  1081.   {$EXTERNALSYM FtpRenameFile}
  1082.  
  1083. function FtpOpenFileA(hConnect: HINTERNET; lpszFileName: PAnsiChar;
  1084.   dwAccess: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1085.   {$EXTERNALSYM FtpOpenFileA}
  1086. function FtpOpenFileW(hConnect: HINTERNET; lpszFileName: PWideChar;
  1087.   dwAccess: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1088.   {$EXTERNALSYM FtpOpenFileW}
  1089. function FtpOpenFile(hConnect: HINTERNET; lpszFileName: PChar;
  1090.   dwAccess: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1091.   {$EXTERNALSYM FtpOpenFile}
  1092.  
  1093. function FtpCreateDirectoryA(hConnect: HINTERNET; lpszDirectory: PAnsiChar): BOOL; stdcall;
  1094.   {$EXTERNALSYM FtpCreateDirectoryA}
  1095. function FtpCreateDirectoryW(hConnect: HINTERNET; lpszDirectory: PWideChar): BOOL; stdcall;
  1096.   {$EXTERNALSYM FtpCreateDirectoryW}
  1097. function FtpCreateDirectory(hConnect: HINTERNET; lpszDirectory: PChar): BOOL; stdcall;
  1098.   {$EXTERNALSYM FtpCreateDirectory}
  1099.  
  1100. function FtpRemoveDirectoryA(hConnect: HINTERNET; lpszDirectory: PAnsiChar): BOOL; stdcall;
  1101.   {$EXTERNALSYM FtpRemoveDirectoryA}
  1102. function FtpRemoveDirectoryW(hConnect: HINTERNET; lpszDirectory: PWideChar): BOOL; stdcall;
  1103.   {$EXTERNALSYM FtpRemoveDirectoryW}
  1104. function FtpRemoveDirectory(hConnect: HINTERNET; lpszDirectory: PChar): BOOL; stdcall;
  1105.   {$EXTERNALSYM FtpRemoveDirectory}
  1106.  
  1107. function FtpSetCurrentDirectoryA(hConnect: HINTERNET; lpszDirectory: PAnsiChar): BOOL; stdcall;
  1108.   {$EXTERNALSYM FtpSetCurrentDirectoryA}
  1109. function FtpSetCurrentDirectoryW(hConnect: HINTERNET; lpszDirectory: PWideChar): BOOL; stdcall;
  1110.   {$EXTERNALSYM FtpSetCurrentDirectoryW}
  1111. function FtpSetCurrentDirectory(hConnect: HINTERNET; lpszDirectory: PChar): BOOL; stdcall;
  1112.   {$EXTERNALSYM FtpSetCurrentDirectory}
  1113.  
  1114. function FtpGetCurrentDirectoryA(hConnect: HINTERNET;
  1115.   lpszCurrentDirectory: PAnsiChar; var lpdwCurrentDirectory: DWORD): BOOL; stdcall;
  1116.   {$EXTERNALSYM FtpGetCurrentDirectoryA}
  1117. function FtpGetCurrentDirectoryW(hConnect: HINTERNET;
  1118.   lpszCurrentDirectory: PWideChar; var lpdwCurrentDirectory: DWORD): BOOL; stdcall;
  1119.   {$EXTERNALSYM FtpGetCurrentDirectoryW}
  1120. function FtpGetCurrentDirectory(hConnect: HINTERNET;
  1121.   lpszCurrentDirectory: PChar; var lpdwCurrentDirectory: DWORD): BOOL; stdcall;
  1122.   {$EXTERNALSYM FtpGetCurrentDirectory}
  1123.  
  1124. function FtpCommandA(hConnect: HINTERNET; fExpectResponse: BOOL;
  1125.   dwFlags: DWORD; lpszCommand: PAnsiChar; dwContext: DWORD): BOOL; stdcall;
  1126.   {$EXTERNALSYM FtpCommandA}
  1127. function FtpCommandW(hConnect: HINTERNET; fExpectResponse: BOOL;
  1128.   dwFlags: DWORD; lpszCommand: PWideChar; dwContext: DWORD): BOOL; stdcall;
  1129.   {$EXTERNALSYM FtpCommandW}
  1130. function FtpCommand(hConnect: HINTERNET; fExpectResponse: BOOL;
  1131.   dwFlags: DWORD; lpszCommand: PChar; dwContext: DWORD): BOOL; stdcall;
  1132.   {$EXTERNALSYM FtpCommand}
  1133.  
  1134. { Gopher }
  1135.  
  1136. { manifests }
  1137.  
  1138. { string field lengths (in characters, not bytes) }
  1139. const
  1140.   MAX_GOPHER_DISPLAY_TEXT   = 128;
  1141.   {$EXTERNALSYM MAX_GOPHER_DISPLAY_TEXT}
  1142.   MAX_GOPHER_SELECTOR_TEXT  = 256;
  1143.   {$EXTERNALSYM MAX_GOPHER_SELECTOR_TEXT}
  1144.   MAX_GOPHER_HOST_NAME      = INTERNET_MAX_HOST_NAME_LENGTH;
  1145.   {$EXTERNALSYM MAX_GOPHER_HOST_NAME}
  1146.   MAX_GOPHER_LOCATOR_LENGTH = 1
  1147.                               + MAX_GOPHER_DISPLAY_TEXT
  1148.                               + 1
  1149.                               + MAX_GOPHER_SELECTOR_TEXT
  1150.                               + 1
  1151.                               + MAX_GOPHER_HOST_NAME
  1152.                               + 1
  1153.                               + INTERNET_MAX_PORT_NUMBER_LENGTH
  1154.                               + 1
  1155.                               + 1
  1156.                               + 2;
  1157.   {$EXTERNALSYM MAX_GOPHER_LOCATOR_LENGTH}
  1158.  
  1159. { structures/types }
  1160.  
  1161. { GOPHER_FIND_DATA - returns the results of a GopherFindFirstFile/ }
  1162. { InternetFindNextFile request }
  1163.  
  1164. type
  1165.   PGopherFindDataA = ^GOPHER_FIND_DATAA;
  1166.   PGopherFindDataW = ^GOPHER_FIND_DATAW;
  1167.   PGopherFindData = PGopherFindDataA;
  1168.   GOPHER_FIND_DATAA = record
  1169.     DisplayString: packed array[0..MAX_GOPHER_DISPLAY_TEXT-1] of AnsiChar;
  1170.     GopherType: DWORD;  { GopherType - if known }
  1171.     SizeLow: DWORD;
  1172.     SizeHigh: DWORD;
  1173.     LastModificationTime: TFileTime;
  1174.     Locator: packed array[0..MAX_GOPHER_LOCATOR_LENGTH-1] of AnsiChar;
  1175.   end;
  1176.   {$EXTERNALSYM GOPHER_FIND_DATAA}
  1177.   GOPHER_FIND_DATAW = record
  1178.     DisplayString: packed array[0..MAX_GOPHER_DISPLAY_TEXT-1] of WideChar;
  1179.     GopherType: DWORD;  { GopherType - if known }
  1180.     SizeLow: DWORD;
  1181.     SizeHigh: DWORD;
  1182.     LastModificationTime: TFileTime;
  1183.     Locator: packed array[0..MAX_GOPHER_LOCATOR_LENGTH-1] of WideChar;
  1184.   end;
  1185.   {$EXTERNALSYM GOPHER_FIND_DATAW}
  1186.   GOPHER_FIND_DATA = GOPHER_FIND_DATAA;
  1187.   TGopherFindDataA = GOPHER_FIND_DATAA;
  1188.   LPGOPHER_FIND_DATAA = PGopherFindDataA;
  1189.   {$EXTERNALSYM LPGOPHER_FIND_DATAA}
  1190.   TGopherFindDataW = GOPHER_FIND_DATAW;
  1191.   LPGOPHER_FIND_DATAW = PGopherFindDataW;
  1192.   {$EXTERNALSYM LPGOPHER_FIND_DATAW}
  1193.   TGopherFindData = TGopherFindDataA;
  1194.  
  1195. { manifests for GopherType }
  1196. const
  1197.   GOPHER_TYPE_TEXT_FILE = $00000001;
  1198.   {$EXTERNALSYM GOPHER_TYPE_TEXT_FILE}
  1199.   GOPHER_TYPE_DIRECTORY = $00000002;
  1200.   {$EXTERNALSYM GOPHER_TYPE_DIRECTORY}
  1201.   GOPHER_TYPE_CSO = $00000004;
  1202.   {$EXTERNALSYM GOPHER_TYPE_CSO}
  1203.   GOPHER_TYPE_ERROR = $00000008;
  1204.   {$EXTERNALSYM GOPHER_TYPE_ERROR}
  1205.   GOPHER_TYPE_MAC_BINHEX = $00000010;
  1206.   {$EXTERNALSYM GOPHER_TYPE_MAC_BINHEX}
  1207.   GOPHER_TYPE_DOS_ARCHIVE = $00000020;
  1208.   {$EXTERNALSYM GOPHER_TYPE_DOS_ARCHIVE}
  1209.   GOPHER_TYPE_UNIX_UUENCODED = $00000040;
  1210.   {$EXTERNALSYM GOPHER_TYPE_UNIX_UUENCODED}
  1211.   GOPHER_TYPE_INDEX_SERVER = $00000080;
  1212.   {$EXTERNALSYM GOPHER_TYPE_INDEX_SERVER}
  1213.   GOPHER_TYPE_TELNET = $00000100;
  1214.   {$EXTERNALSYM GOPHER_TYPE_TELNET}
  1215.   GOPHER_TYPE_BINARY = $00000200;
  1216.   {$EXTERNALSYM GOPHER_TYPE_BINARY}
  1217.   GOPHER_TYPE_REDUNDANT = $00000400;
  1218.   {$EXTERNALSYM GOPHER_TYPE_REDUNDANT}
  1219.   GOPHER_TYPE_TN3270 = $00000800;
  1220.   {$EXTERNALSYM GOPHER_TYPE_TN3270}
  1221.   GOPHER_TYPE_GIF = $00001000;
  1222.   {$EXTERNALSYM GOPHER_TYPE_GIF}
  1223.   GOPHER_TYPE_IMAGE = $00002000;
  1224.   {$EXTERNALSYM GOPHER_TYPE_IMAGE}
  1225.   GOPHER_TYPE_BITMAP = $00004000;
  1226.   {$EXTERNALSYM GOPHER_TYPE_BITMAP}
  1227.   GOPHER_TYPE_MOVIE = $00008000;
  1228.   {$EXTERNALSYM GOPHER_TYPE_MOVIE}
  1229.   GOPHER_TYPE_SOUND = $00010000;
  1230.   {$EXTERNALSYM GOPHER_TYPE_SOUND}
  1231.   GOPHER_TYPE_HTML = $00020000;
  1232.   {$EXTERNALSYM GOPHER_TYPE_HTML}
  1233.   GOPHER_TYPE_PDF = $00040000;
  1234.   {$EXTERNALSYM GOPHER_TYPE_PDF}
  1235.   GOPHER_TYPE_CALENDAR = $00080000;
  1236.   {$EXTERNALSYM GOPHER_TYPE_CALENDAR}
  1237.   GOPHER_TYPE_INLINE = $00100000;
  1238.   {$EXTERNALSYM GOPHER_TYPE_INLINE}
  1239.   GOPHER_TYPE_UNKNOWN = $20000000;
  1240.   {$EXTERNALSYM GOPHER_TYPE_UNKNOWN}
  1241.   GOPHER_TYPE_ASK = $40000000;
  1242.   {$EXTERNALSYM GOPHER_TYPE_ASK}
  1243.   GOPHER_TYPE_GOPHER_PLUS = $80000000;
  1244.   {$EXTERNALSYM GOPHER_TYPE_GOPHER_PLUS}
  1245.  
  1246. { Gopher Type functions }
  1247.  
  1248. function IS_GOPHER_FILE(GopherType: DWORD): BOOL;
  1249.   {$EXTERNALSYM IS_GOPHER_FILE}
  1250. function IS_GOPHER_DIRECTORY(GopherType: DWORD): BOOL;
  1251.   {$EXTERNALSYM IS_GOPHER_DIRECTORY}
  1252. function IS_GOPHER_PHONE_SERVER(GopherType: DWORD): BOOL;
  1253.   {$EXTERNALSYM IS_GOPHER_PHONE_SERVER
  1254. function IS_GOPHER_ERROR(GopherType: DWORD): BOOL;
  1255.   {$EXTERNALSYM IS_GOPHER_ERROR}
  1256. function IS_GOPHER_INDEX_SERVER(GopherType: DWORD): BOOL;
  1257.   {$EXTERNALSYM IS_GOPHER_INDEX_SERVER}
  1258. function IS_GOPHER_TELNET_SESSION(GopherType: DWORD): BOOL;
  1259.   {$EXTERNALSYM IS_GOPHER_TELNET_SESSION}
  1260. function IS_GOPHER_BACKUP_SERVER(GopherType: DWORD): BOOL;
  1261.   {$EXTERNALSYM IS_GOPHER_BACKUP_SERVER}
  1262. function IS_GOPHER_TN3270_SESSION(GopherType: DWORD): BOOL;
  1263.   {$EXTERNALSYM IS_GOPHER_TN3270_SESSION}
  1264. function IS_GOPHER_ASK(GopherType: DWORD): BOOL;
  1265.   {$EXTERNALSYM IS_GOPHER_ASK}
  1266. function IS_GOPHER_PLUS(GopherType: DWORD): BOOL;
  1267.   {$EXTERNALSYM IS_GOPHER_PLUS}
  1268. function IS_GOPHER_TYPE_KNOWN(GopherType: DWORD): BOOL;
  1269.   {$EXTERNALSYM IS_GOPHER_TYPE_KNOWN}
  1270.  
  1271. { GOPHER_TYPE_FILE_MASK - use this to determine if a locator identifies a }
  1272. { (known) file type }
  1273. const
  1274.   GOPHER_TYPE_FILE_MASK = GOPHER_TYPE_TEXT_FILE
  1275.                           or GOPHER_TYPE_MAC_BINHEX
  1276.                           or GOPHER_TYPE_DOS_ARCHIVE
  1277.                           or GOPHER_TYPE_UNIX_UUENCODED
  1278.                           or GOPHER_TYPE_BINARY
  1279.                           or GOPHER_TYPE_GIF
  1280.                           or GOPHER_TYPE_IMAGE
  1281.                           or GOPHER_TYPE_BITMAP
  1282.                           or GOPHER_TYPE_MOVIE
  1283.                           or GOPHER_TYPE_SOUND
  1284.                           or GOPHER_TYPE_HTML
  1285.                           or GOPHER_TYPE_PDF
  1286.                           or GOPHER_TYPE_CALENDAR
  1287.                           or GOPHER_TYPE_INLINE;
  1288.   {$EXTERNALSYM GOPHER_TYPE_FILE_MASK}
  1289.  
  1290. { structured gopher attributes (as defined in gopher+ protocol document) }
  1291. type
  1292.   PGopherAdminAttributeType = ^GOPHER_ADMIN_ATTRIBUTE_TYPE;
  1293.   GOPHER_ADMIN_ATTRIBUTE_TYPE = record
  1294.     Comment: LPCSTR;
  1295.     EmailAddress: LPCSTR;
  1296.   end;
  1297.   {$EXTERNALSYM GOPHER_ADMIN_ATTRIBUTE_TYPE}
  1298.   TGopherAdminAttributeType = GOPHER_ADMIN_ATTRIBUTE_TYPE;
  1299.   LPGOPHER_ADMIN_ATTRIBUTE_TYPE = PGopherAdminAttributeType;
  1300.   {$EXTERNALSYM LPGOPHER_ADMIN_ATTRIBUTE_TYPE}
  1301.  
  1302.   PGopherModDateAttributeType = ^GOPHER_MOD_DATE_ATTRIBUTE_TYPE;
  1303.   GOPHER_MOD_DATE_ATTRIBUTE_TYPE = record
  1304.     DateAndTime: TFileTime;
  1305.   end;
  1306.   {$EXTERNALSYM GOPHER_MOD_DATE_ATTRIBUTE_TYPE}
  1307.   TGopherModDateAttributeType = GOPHER_MOD_DATE_ATTRIBUTE_TYPE;
  1308.   LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE = PGopherModDateAttributeType;
  1309.   {$EXTERNALSYM LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE}
  1310.  
  1311.   PGopherTtlAttributeType = ^GOPHER_TTL_ATTRIBUTE_TYPE;
  1312.   GOPHER_TTL_ATTRIBUTE_TYPE = record
  1313.     Ttl: DWORD;
  1314.   end;
  1315.   {$EXTERNALSYM GOPHER_TTL_ATTRIBUTE_TYPE}
  1316.   TGopherTtlAttributeType = GOPHER_TTL_ATTRIBUTE_TYPE;
  1317.   LPGOPHER_TTL_ATTRIBUTE_TYPE = PGopherTtlAttributeType;
  1318.   {$EXTERNALSYM LPGOPHER_TTL_ATTRIBUTE_TYPE}
  1319.  
  1320.   PGopherScoreAttributeType = ^GOPHER_SCORE_ATTRIBUTE_TYPE;
  1321.   GOPHER_SCORE_ATTRIBUTE_TYPE = record
  1322.     Score: Integer;
  1323.   end;
  1324.   {$EXTERNALSYM GOPHER_SCORE_ATTRIBUTE_TYPE}
  1325.   TGopherScoreAttributeType = GOPHER_SCORE_ATTRIBUTE_TYPE;
  1326.   LPGOPHER_SCORE_ATTRIBUTE_TYPE = PGopherScoreAttributeType;
  1327.   {$EXTERNALSYM LPGOPHER_SCORE_ATTRIBUTE_TYPE}
  1328.  
  1329.   PGopherScoreRangeAttributeType = ^GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
  1330.   GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE = record
  1331.     LowerBound: Integer;
  1332.     UpperBound: Integer;
  1333.   end;
  1334.   {$EXTERNALSYM GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE}
  1335.   TGopherScoreRangeAttributeType = GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
  1336.   LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE = PGopherScoreRangeAttributeType;
  1337.   {$EXTERNALSYM LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE}
  1338.  
  1339.   PGopherSiteAttributeType = ^GOPHER_SITE_ATTRIBUTE_TYPE;
  1340.   GOPHER_SITE_ATTRIBUTE_TYPE = record
  1341.     Site: LPCSTR;
  1342.   end;
  1343.   {$EXTERNALSYM GOPHER_SITE_ATTRIBUTE_TYPE}
  1344.   TGopherSiteAttributeType = GOPHER_SITE_ATTRIBUTE_TYPE;
  1345.   LPGOPHER_SITE_ATTRIBUTE_TYPE = PGopherSiteAttributeType;
  1346.   {$EXTERNALSYM LPGOPHER_SITE_ATTRIBUTE_TYPE}
  1347.  
  1348.   PGopherOrganizationAttributeType = ^GOPHER_ORGANIZATION_ATTRIBUTE_TYPE;
  1349.   GOPHER_ORGANIZATION_ATTRIBUTE_TYPE = record
  1350.     Organization: LPCSTR;
  1351.   end;
  1352.   {$EXTERNALSYM GOPHER_ORGANIZATION_ATTRIBUTE_TYPE}
  1353.   TGopherOrganizationAttributeType = GOPHER_ORGANIZATION_ATTRIBUTE_TYPE;
  1354.   LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE = PGopherOrganizationAttributeType;
  1355.   {$EXTERNALSYM LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE}
  1356.  
  1357.   PGopherLocationAttributeType = ^GOPHER_LOCATION_ATTRIBUTE_TYPE;
  1358.   GOPHER_LOCATION_ATTRIBUTE_TYPE = record
  1359.     Location: LPCSTR;
  1360.   end;
  1361.   {$EXTERNALSYM GOPHER_LOCATION_ATTRIBUTE_TYPE}
  1362.   TGopherLocationAttributeType = GOPHER_LOCATION_ATTRIBUTE_TYPE;
  1363.   LPGOPHER_LOCATION_ATTRIBUTE_TYPE = PGopherLocationAttributeType;
  1364.   {$EXTERNALSYM LPGOPHER_LOCATION_ATTRIBUTE_TYPE}
  1365.  
  1366.   PGopherGeographicalLocationAttributeType = ^GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
  1367.   GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE = record
  1368.     DegreesNorth: Integer;
  1369.     MinutesNorth: Integer;
  1370.     SecondsNorth: Integer;
  1371.     DegreesEast: Integer;
  1372.     MinutesEast: Integer;
  1373.     SecondsEast: Integer;
  1374.   end;
  1375.   {$EXTERNALSYM GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE}
  1376.   TGopherGeographicalLocationAttributeType = GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
  1377.   LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE = PGopherGeographicalLocationAttributeType;
  1378.   {$EXTERNALSYM LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE}
  1379.  
  1380.   PGopherTimezoneAttributeType = ^TGopherTimezoneAttributeType;
  1381.   GOPHER_TIMEZONE_ATTRIBUTE_TYPE = record
  1382.     Zone: Integer;
  1383.   end;
  1384.   {$EXTERNALSYM GOPHER_TIMEZONE_ATTRIBUTE_TYPE}
  1385.   TGopherTimezoneAttributeType = GOPHER_TIMEZONE_ATTRIBUTE_TYPE;
  1386.   LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE = PGopherTimezoneAttributeType;
  1387.   {$EXTERNALSYM LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE}
  1388.  
  1389.   PGopherProviderAttributeType = ^GOPHER_PROVIDER_ATTRIBUTE_TYPE;
  1390.   GOPHER_PROVIDER_ATTRIBUTE_TYPE = record
  1391.     Provider: LPCSTR;
  1392.   end;
  1393.   {$EXTERNALSYM GOPHER_PROVIDER_ATTRIBUTE_TYPE}
  1394.   TGopherProviderAttributeType = GOPHER_PROVIDER_ATTRIBUTE_TYPE;
  1395.   LPGOPHER_PROVIDER_ATTRIBUTE_TYPE = PGopherProviderAttributeType;
  1396.   {$EXTERNALSYM LPGOPHER_PROVIDER_ATTRIBUTE_TYPE}
  1397.  
  1398.   PGopherVersionAttributeType = ^GOPHER_VERSION_ATTRIBUTE_TYPE;
  1399.   GOPHER_VERSION_ATTRIBUTE_TYPE = record
  1400.     Version: LPCSTR;
  1401.   end;
  1402.   {$EXTERNALSYM GOPHER_VERSION_ATTRIBUTE_TYPE}
  1403.   TGopherVersionAttributeType = GOPHER_VERSION_ATTRIBUTE_TYPE;
  1404.   LPGOPHER_VERSION_ATTRIBUTE_TYPE = PGopherVersionAttributeType;
  1405.   {$EXTERNALSYM LPGOPHER_VERSION_ATTRIBUTE_TYPE}
  1406.  
  1407.   PGopherAbstractAttributeType = ^GOPHER_ABSTRACT_ATTRIBUTE_TYPE;
  1408.   GOPHER_ABSTRACT_ATTRIBUTE_TYPE = record
  1409.     ShortAbstract: LPCSTR;
  1410.     AbstractFile: LPCSTR;
  1411.   end;
  1412.   {$EXTERNALSYM GOPHER_ABSTRACT_ATTRIBUTE_TYPE}
  1413.   TGopherAbstractAttributeType = GOPHER_ABSTRACT_ATTRIBUTE_TYPE;
  1414.   LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE = PGopherAbstractAttributeType;
  1415.   {$EXTERNALSYM LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE}
  1416.  
  1417.   PGopherViewAttributeType = ^GOPHER_VIEW_ATTRIBUTE_TYPE;
  1418.   GOPHER_VIEW_ATTRIBUTE_TYPE = record
  1419.     ContentType: LPCSTR;
  1420.     Language: LPCSTR;
  1421.     Size: DWORD;
  1422.   end;
  1423.   {$EXTERNALSYM GOPHER_VIEW_ATTRIBUTE_TYPE}
  1424.   TGopherViewAttributeType = GOPHER_VIEW_ATTRIBUTE_TYPE;
  1425.   LPGOPHER_VIEW_ATTRIBUTE_TYPE = PGopherViewAttributeType;
  1426.   {$EXTERNALSYM LPGOPHER_VIEW_ATTRIBUTE_TYPE}
  1427.  
  1428.   PGopherVeronicaAttributeType = ^GOPHER_VERONICA_ATTRIBUTE_TYPE;
  1429.   GOPHER_VERONICA_ATTRIBUTE_TYPE = record
  1430.     TreeWalk: BOOL;
  1431.   end;
  1432.   {$EXTERNALSYM GOPHER_VERONICA_ATTRIBUTE_TYPE}
  1433.   TGopherVeronicaAttributeType = GOPHER_VERONICA_ATTRIBUTE_TYPE;
  1434.   LPGOPHER_VERONICA_ATTRIBUTE_TYPE = PGopherVeronicaAttributeType;
  1435.   {$EXTERNALSYM LPGOPHER_VERONICA_ATTRIBUTE_TYPE}
  1436.  
  1437.   PGopherAskAttributeType = ^GOPHER_ASK_ATTRIBUTE_TYPE;
  1438.   GOPHER_ASK_ATTRIBUTE_TYPE = record
  1439.     QuestionType: LPCSTR;
  1440.     QuestionText: LPCSTR;
  1441.   end;
  1442.   {$EXTERNALSYM GOPHER_ASK_ATTRIBUTE_TYPE}
  1443.   TGopherAskAttributeType = GOPHER_ASK_ATTRIBUTE_TYPE;
  1444.   LPGOPHER_ASK_ATTRIBUTE_TYPE = PGopherAskAttributeType;
  1445.   {$EXTERNALSYM LPGOPHER_ASK_ATTRIBUTE_TYPE}
  1446.  
  1447. { GOPHER_UNKNOWN_ATTRIBUTE_TYPE - this is returned if we retrieve an attribute }
  1448. { that is not specified in the current gopher/gopher+ documentation. It is up }
  1449. { to the application to parse the information }
  1450.  
  1451.   PGopherUnknownAttributeType = ^GOPHER_UNKNOWN_ATTRIBUTE_TYPE;
  1452.   GOPHER_UNKNOWN_ATTRIBUTE_TYPE = record
  1453.     Text: LPCSTR;
  1454.   end;
  1455.   {$EXTERNALSYM GOPHER_UNKNOWN_ATTRIBUTE_TYPE}
  1456.   TGopherUnknownAttributeType = GOPHER_UNKNOWN_ATTRIBUTE_TYPE;
  1457.   LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE = PGopherUnknownAttributeType;
  1458.   {$EXTERNALSYM LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE}
  1459.  
  1460. { GOPHER_ATTRIBUTE_TYPE - returned in the user's buffer when an enumerated }
  1461. { GopherGetAttribute call is made }
  1462.  
  1463.   PGopherAttributeType = ^GOPHER_ATTRIBUTE_TYPE;
  1464.   GOPHER_ATTRIBUTE_TYPE = record
  1465.     CategoryId: DWORD;  { e.g. GOPHER_CATEGORY_ID_ADMIN }
  1466.     AttributeId: DWORD; { e.g. GOPHER_ATTRIBUTE_ID_ADMIN }
  1467.     case Integer of
  1468.       0: (Admin: TGopherAdminAttributeType);
  1469.       1: (ModDate: TGopherModDateAttributeType);
  1470.       2: (Ttl: TGopherTtlAttributeType);
  1471.       3: (Score: TGopherScoreAttributeType);
  1472.       4: (ScoreRange: TGopherScoreRangeAttributeType);
  1473.       5: (Site: TGopherSiteAttributeType);
  1474.       6: (Organization: TGopherOrganizationAttributeType);
  1475.       7: (Location: TGopherLocationAttributeType);
  1476.       8: (GeographicalLocation: TGopherGeographicalLocationAttributeType);
  1477.       9: (TimeZone: TGopherTimezoneAttributeType);
  1478.       10: (Provider: TGopherProviderAttributeType);
  1479.       11: (Version: TGopherVersionAttributeType);
  1480.       12: (AbstractType: TGopherAbstractAttributeType);
  1481.       13: (View: TGopherViewAttributeType);
  1482.       14: (Veronica: TGopherVeronicaAttributeType);
  1483.       15: (Ask: TGopherAskAttributeType);
  1484.       16: (Unknown: TGopherUnknownAttributeType);
  1485.     end;
  1486.   {$EXTERNALSYM GOPHER_ATTRIBUTE_TYPE}
  1487.   TGopherAttributeType = GOPHER_ATTRIBUTE_TYPE;
  1488.   LPGOPHER_ATTRIBUTE_TYPE = PGopherAttributeType;
  1489.   {$EXTERNALSYM LPGOPHER_ATTRIBUTE_TYPE}
  1490.  
  1491. const
  1492.   MAX_GOPHER_CATEGORY_NAME = 128;           { arbitrary }
  1493.   {$EXTERNALSYM MAX_GOPHER_CATEGORY_NAME}
  1494.   MAX_GOPHER_ATTRIBUTE_NAME = 128;          {     " }
  1495.   {$EXTERNALSYM MAX_GOPHER_ATTRIBUTE_NAME}
  1496.   MIN_GOPHER_ATTRIBUTE_LENGTH = 256;        {     " }
  1497.   {$EXTERNALSYM MIN_GOPHER_ATTRIBUTE_LENGTH}
  1498.  
  1499. { known gopher attribute categories. See below for ordinals }
  1500.  
  1501.   GOPHER_INFO_CATEGORY           = '+INFO';
  1502.   {$EXTERNALSYM GOPHER_INFO_CATEGORY}
  1503.   GOPHER_ADMIN_CATEGORY          = '+ADMIN';
  1504.   {$EXTERNALSYM GOPHER_ADMIN_CATEGORY}
  1505.   GOPHER_VIEWS_CATEGORY          = '+VIEWS';
  1506.   {$EXTERNALSYM GOPHER_VIEWS_CATEGORY}
  1507.   GOPHER_ABSTRACT_CATEGORY       = '+ABSTRACT';
  1508.   {$EXTERNALSYM GOPHER_ABSTRACT_CATEGORY}
  1509.   GOPHER_VERONICA_CATEGORY       = '+VERONICA';
  1510.   {$EXTERNALSYM GOPHER_VERONICA_CATEGORY}
  1511.  
  1512. { known gopher attributes. These are the attribute names as defined in the }
  1513. { gopher+ protocol document }
  1514.  
  1515.   GOPHER_ADMIN_ATTRIBUTE         = 'Admin';
  1516.   {$EXTERNALSYM GOPHER_ADMIN_ATTRIBUTE}
  1517.   GOPHER_MOD_DATE_ATTRIBUTE      = 'Mod-Date';
  1518.   {$EXTERNALSYM GOPHER_MOD_DATE_ATTRIBUTE}
  1519.   GOPHER_TTL_ATTRIBUTE           = 'TTL';
  1520.   {$EXTERNALSYM GOPHER_TTL_ATTRIBUTE}
  1521.   GOPHER_SCORE_ATTRIBUTE         = 'Score';
  1522.   {$EXTERNALSYM GOPHER_SCORE_ATTRIBUTE}
  1523.   GOPHER_RANGE_ATTRIBUTE         = 'Score-range';
  1524.   {$EXTERNALSYM GOPHER_RANGE_ATTRIBUTE}
  1525.   GOPHER_SITE_ATTRIBUTE          = 'Site';
  1526.   {$EXTERNALSYM GOPHER_SITE_ATTRIBUTE}
  1527.   GOPHER_ORG_ATTRIBUTE           = 'Org';
  1528.   {$EXTERNALSYM GOPHER_ORG_ATTRIBUTE}
  1529.   GOPHER_LOCATION_ATTRIBUTE      = 'Loc';
  1530.   {$EXTERNALSYM GOPHER_LOCATION_ATTRIBUTE}
  1531.   GOPHER_GEOG_ATTRIBUTE          = 'Geog';
  1532.   {$EXTERNALSYM GOPHER_GEOG_ATTRIBUTE}
  1533.   GOPHER_TIMEZONE_ATTRIBUTE      = 'TZ';
  1534.   {$EXTERNALSYM GOPHER_TIMEZONE_ATTRIBUTE}
  1535.   GOPHER_PROVIDER_ATTRIBUTE      = 'Provider';
  1536.   {$EXTERNALSYM GOPHER_PROVIDER_ATTRIBUTE}
  1537.   GOPHER_VERSION_ATTRIBUTE       = 'Version';
  1538.   {$EXTERNALSYM GOPHER_VERSION_ATTRIBUTE}
  1539.   GOPHER_ABSTRACT_ATTRIBUTE      = 'Abstract';
  1540.   {$EXTERNALSYM GOPHER_ABSTRACT_ATTRIBUTE}
  1541.   GOPHER_VIEW_ATTRIBUTE          = 'View';
  1542.   {$EXTERNALSYM GOPHER_VIEW_ATTRIBUTE}
  1543.   GOPHER_TREEWALK_ATTRIBUTE      = 'treewalk';
  1544.   {$EXTERNALSYM GOPHER_TREEWALK_ATTRIBUTE}
  1545.  
  1546. { identifiers for attribute strings }
  1547.  
  1548.   GOPHER_ATTRIBUTE_ID_BASE = $abcccc00;
  1549.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_BASE}
  1550.   GOPHER_CATEGORY_ID_ALL = GOPHER_ATTRIBUTE_ID_BASE + 1;
  1551.   {$EXTERNALSYM GOPHER_CATEGORY_ID_ALL}
  1552.   GOPHER_CATEGORY_ID_INFO = GOPHER_ATTRIBUTE_ID_BASE + 2;
  1553.   {$EXTERNALSYM GOPHER_CATEGORY_ID_INFO}
  1554.   GOPHER_CATEGORY_ID_ADMIN = GOPHER_ATTRIBUTE_ID_BASE + 3;
  1555.   {$EXTERNALSYM GOPHER_CATEGORY_ID_ADMIN}
  1556.   GOPHER_CATEGORY_ID_VIEWS = GOPHER_ATTRIBUTE_ID_BASE + 4;
  1557.   {$EXTERNALSYM GOPHER_CATEGORY_ID_VIEWS}
  1558.   GOPHER_CATEGORY_ID_ABSTRACT = GOPHER_ATTRIBUTE_ID_BASE + 5;
  1559.   {$EXTERNALSYM GOPHER_CATEGORY_ID_ABSTRACT}
  1560.   GOPHER_CATEGORY_ID_VERONICA = GOPHER_ATTRIBUTE_ID_BASE + 6;
  1561.   {$EXTERNALSYM GOPHER_CATEGORY_ID_VERONICA}
  1562.   GOPHER_CATEGORY_ID_ASK = GOPHER_ATTRIBUTE_ID_BASE + 7;
  1563.   {$EXTERNALSYM GOPHER_CATEGORY_ID_ASK}
  1564.   GOPHER_CATEGORY_ID_UNKNOWN = GOPHER_ATTRIBUTE_ID_BASE + 8;
  1565.   {$EXTERNALSYM GOPHER_CATEGORY_ID_UNKNOWN}
  1566.   GOPHER_ATTRIBUTE_ID_ALL = GOPHER_ATTRIBUTE_ID_BASE + 9;
  1567.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ALL}
  1568.   GOPHER_ATTRIBUTE_ID_ADMIN = GOPHER_ATTRIBUTE_ID_BASE + 10;
  1569.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ADMIN}
  1570.   GOPHER_ATTRIBUTE_ID_MOD_DATE = GOPHER_ATTRIBUTE_ID_BASE + 11;
  1571.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_MOD_DATE}
  1572.   GOPHER_ATTRIBUTE_ID_TTL = GOPHER_ATTRIBUTE_ID_BASE + 12;
  1573.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_TTL}
  1574.   GOPHER_ATTRIBUTE_ID_SCORE = GOPHER_ATTRIBUTE_ID_BASE + 13;
  1575.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_SCORE}
  1576.   GOPHER_ATTRIBUTE_ID_RANGE = GOPHER_ATTRIBUTE_ID_BASE + 14;
  1577.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_RANGE}
  1578.   GOPHER_ATTRIBUTE_ID_SITE = GOPHER_ATTRIBUTE_ID_BASE + 15;
  1579.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_SITE}
  1580.   GOPHER_ATTRIBUTE_ID_ORG = GOPHER_ATTRIBUTE_ID_BASE + 16;
  1581.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ORG}
  1582.   GOPHER_ATTRIBUTE_ID_LOCATION = GOPHER_ATTRIBUTE_ID_BASE + 17;
  1583.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_LOCATION}
  1584.   GOPHER_ATTRIBUTE_ID_GEOG = GOPHER_ATTRIBUTE_ID_BASE + 18;
  1585.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_GEOG}
  1586.   GOPHER_ATTRIBUTE_ID_TIMEZONE = GOPHER_ATTRIBUTE_ID_BASE + 19;
  1587.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_TIMEZONE}
  1588.   GOPHER_ATTRIBUTE_ID_PROVIDER = GOPHER_ATTRIBUTE_ID_BASE + 20;
  1589.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_PROVIDER}
  1590.   GOPHER_ATTRIBUTE_ID_VERSION = GOPHER_ATTRIBUTE_ID_BASE + 21;
  1591.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_VERSION}
  1592.   GOPHER_ATTRIBUTE_ID_ABSTRACT = GOPHER_ATTRIBUTE_ID_BASE + 22;
  1593.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ABSTRACT}
  1594.   GOPHER_ATTRIBUTE_ID_VIEW = GOPHER_ATTRIBUTE_ID_BASE + 23;
  1595.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_VIEW}
  1596.   GOPHER_ATTRIBUTE_ID_TREEWALK = GOPHER_ATTRIBUTE_ID_BASE + 24;
  1597.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_TREEWALK}
  1598.   GOPHER_ATTRIBUTE_ID_UNKNOWN = GOPHER_ATTRIBUTE_ID_BASE + 25;
  1599.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_UNKNOWN}
  1600.   
  1601. { prototypes }
  1602.  
  1603. function GopherCreateLocatorA(lpszHost: PAnsiChar; nServerPort: INTERNET_PORT;
  1604.   lpszDisplayString: PAnsiChar; lpszSelectorString: PAnsiChar; dwGopherType: DWORD;
  1605.   lpszLocator: PAnsiChar; var lpdwBufferLength: DWORD): BOOL; stdcall;
  1606.   {$EXTERNALSYM GopherCreateLocatorA}
  1607. function GopherCreateLocatorW(lpszHost: PWideChar; nServerPort: INTERNET_PORT;
  1608.   lpszDisplayString: PWideChar; lpszSelectorString: PWideChar; dwGopherType: DWORD;
  1609.   lpszLocator: PWideChar; var lpdwBufferLength: DWORD): BOOL; stdcall;
  1610.   {$EXTERNALSYM GopherCreateLocatorW}
  1611. function GopherCreateLocator(lpszHost: PChar; nServerPort: INTERNET_PORT;
  1612.   lpszDisplayString: PChar; lpszSelectorString: PChar; dwGopherType: DWORD;
  1613.   lpszLocator: PChar; var lpdwBufferLength: DWORD): BOOL; stdcall;
  1614.   {$EXTERNALSYM GopherCreateLocator}
  1615.  
  1616. function GopherGetLocatorTypeA(lpszLocator: PAnsiChar;
  1617.   var lpdwGopherType: DWORD): BOOL; stdcall;
  1618.   {$EXTERNALSYM GopherGetLocatorTypeA}
  1619. function GopherGetLocatorTypeW(lpszLocator: PWideChar;
  1620.   var lpdwGopherType: DWORD): BOOL; stdcall;
  1621.   {$EXTERNALSYM GopherGetLocatorTypeW}
  1622. function GopherGetLocatorType(lpszLocator: PChar;
  1623.   var lpdwGopherType: DWORD): BOOL; stdcall;
  1624.   {$EXTERNALSYM GopherGetLocatorType}
  1625.  
  1626. function GopherFindFirstFileA(hConnect: HINTERNET; lpszLocator: PAnsiChar;
  1627.   lpszSearchString: PAnsiChar; var lpFindData: TGopherFindDataA; dwFlags: DWORD;
  1628.   dwContext: DWORD): HINTERNET; stdcall;
  1629.   {$EXTERNALSYM GopherFindFirstFileA}
  1630. function GopherFindFirstFileW(hConnect: HINTERNET; lpszLocator: PWideChar;
  1631.   lpszSearchString: PWideChar; var lpFindData: TGopherFindDataW; dwFlags: DWORD;
  1632.   dwContext: DWORD): HINTERNET; stdcall;
  1633.   {$EXTERNALSYM GopherFindFirstFileW}
  1634. function GopherFindFirstFile(hConnect: HINTERNET; lpszLocator: PChar;
  1635.   lpszSearchString: PChar; var lpFindData: TGopherFindData; dwFlags: DWORD;
  1636.   dwContext: DWORD): HINTERNET; stdcall;
  1637.   {$EXTERNALSYM GopherFindFirstFile}
  1638.  
  1639. function GopherOpenFileA(hConnect: HINTERNET; lpszLocator: PAnsiChar;
  1640.   lpszView: PAnsiChar; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1641.   {$EXTERNALSYM GopherOpenFileA}
  1642. function GopherOpenFileW(hConnect: HINTERNET; lpszLocator: PWideChar;
  1643.   lpszView: PWideChar; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1644.   {$EXTERNALSYM GopherOpenFileW}
  1645. function GopherOpenFile(hConnect: HINTERNET; lpszLocator: PChar;
  1646.   lpszView: PChar; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1647.   {$EXTERNALSYM GopherOpenFile}
  1648.  
  1649. type
  1650.  
  1651.  
  1652.  
  1653.  
  1654.   GOPHER_ATTRIBUTE_ENUMERATOR = TFarProc;
  1655.  
  1656.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ENUMERATOR}
  1657.   TFNGopherAttributeEnumerator = GOPHER_ATTRIBUTE_ENUMERATOR;
  1658.   PFNGopherAttributeEnumerator = ^TFNGopherAttributeEnumerator;
  1659.  
  1660. function GopherGetAttributeA(hConnect: HINTERNET; lpszLocator: PAnsiChar;
  1661.   lpszAttributeName: PAnsiChar; lpBuffer: Pointer; dwBufferLength: DWORD;
  1662.   var lpdwCharactersReturned: DWORD; lpfnEnumerator: PFNGopherAttributeEnumerator;
  1663.   dwContext: DWORD): BOOL; stdcall;
  1664.   {$EXTERNALSYM GopherGetAttributeA}
  1665. function GopherGetAttributeW(hConnect: HINTERNET; lpszLocator: PWideChar;
  1666.   lpszAttributeName: PWideChar; lpBuffer: Pointer; dwBufferLength: DWORD;
  1667.   var lpdwCharactersReturned: DWORD; lpfnEnumerator: PFNGopherAttributeEnumerator;
  1668.   dwContext: DWORD): BOOL; stdcall;
  1669.   {$EXTERNALSYM GopherGetAttributeW}
  1670. function GopherGetAttribute(hConnect: HINTERNET; lpszLocator: PChar;
  1671.   lpszAttributeName: PChar; lpBuffer: Pointer; dwBufferLength: DWORD;
  1672.   var lpdwCharactersReturned: DWORD; lpfnEnumerator: PFNGopherAttributeEnumerator;
  1673.   dwContext: DWORD): BOOL; stdcall;
  1674.   {$EXTERNALSYM GopherGetAttribute}
  1675.  
  1676. { HTTP }
  1677.  
  1678. { manifests }
  1679.  
  1680. const
  1681. { the default major/minor HTTP version numbers }
  1682.  
  1683.   HTTP_MAJOR_VERSION = 1;
  1684.   {$EXTERNALSYM HTTP_MAJOR_VERSION}
  1685.   HTTP_MINOR_VERSION = 0;
  1686.   {$EXTERNALSYM HTTP_MINOR_VERSION}
  1687.   HTTP_VERSION       = 'HTTP/1.0';
  1688.   {$EXTERNALSYM HTTP_VERSION}
  1689.  
  1690. { HttpQueryInfo info levels. Generally, there is one info level }
  1691. { for each potential RFC822/HTTP/MIME header that an HTTP server }
  1692. { may send as part of a request response. }
  1693.  
  1694. { The HTTP_QUERY_RAW_HEADERS info level is provided for clients }
  1695. { that choose to perform their own header parsing. }
  1696.  
  1697.   HTTP_QUERY_MIME_VERSION                     = 0;
  1698.   {$EXTERNALSYM HTTP_QUERY_MIME_VERSION}
  1699.   HTTP_QUERY_CONTENT_TYPE                     = 1;
  1700.   {$EXTERNALSYM HTTP_QUERY_CONTENT_TYPE}
  1701.   HTTP_QUERY_CONTENT_TRANSFER_ENCODING        = 2;
  1702.   {$EXTERNALSYM HTTP_QUERY_CONTENT_TRANSFER_ENCODING}
  1703.   HTTP_QUERY_CONTENT_ID                       = 3;
  1704.   {$EXTERNALSYM HTTP_QUERY_CONTENT_ID}
  1705.   HTTP_QUERY_CONTENT_DESCRIPTION              = 4;
  1706.   {$EXTERNALSYM HTTP_QUERY_CONTENT_DESCRIPTION}
  1707.   HTTP_QUERY_CONTENT_LENGTH                   = 5;
  1708.   {$EXTERNALSYM HTTP_QUERY_CONTENT_LENGTH}
  1709.   HTTP_QUERY_CONTENT_LANGUAGE                 = 6;
  1710.   {$EXTERNALSYM HTTP_QUERY_CONTENT_LANGUAGE}
  1711.   HTTP_QUERY_ALLOW                            = 7;
  1712.   {$EXTERNALSYM HTTP_QUERY_ALLOW}
  1713.   HTTP_QUERY_PUBLIC                           = 8;
  1714.   {$EXTERNALSYM HTTP_QUERY_PUBLIC}
  1715.   HTTP_QUERY_DATE                             = 9;
  1716.   {$EXTERNALSYM HTTP_QUERY_DATE}
  1717.   HTTP_QUERY_EXPIRES                          = 10;
  1718.   {$EXTERNALSYM HTTP_QUERY_EXPIRES}
  1719.   HTTP_QUERY_LAST_MODIFIED                    = 11;
  1720.   {$EXTERNALSYM HTTP_QUERY_LAST_MODIFIED}
  1721.   HTTP_QUERY_MESSAGE_ID                       = 12;
  1722.   {$EXTERNALSYM HTTP_QUERY_MESSAGE_ID}
  1723.   HTTP_QUERY_URI                              = 13;
  1724.   {$EXTERNALSYM HTTP_QUERY_URI}
  1725.   HTTP_QUERY_DERIVED_FROM                     = 14;
  1726.   {$EXTERNALSYM HTTP_QUERY_DERIVED_FROM}
  1727.   HTTP_QUERY_COST                             = 15;
  1728.   {$EXTERNALSYM HTTP_QUERY_COST}
  1729.   HTTP_QUERY_LINK                             = 16;
  1730.   {$EXTERNALSYM HTTP_QUERY_LINK}
  1731.   HTTP_QUERY_PRAGMA                           = 17;
  1732.   {$EXTERNALSYM HTTP_QUERY_PRAGMA}
  1733.   HTTP_QUERY_VERSION                          = 18; { special: part of status line }
  1734.   {$EXTERNALSYM HTTP_QUERY_VERSION}
  1735.   HTTP_QUERY_STATUS_CODE                      = 19; { special: part of status line }
  1736.   {$EXTERNALSYM HTTP_QUERY_STATUS_CODE}
  1737.   HTTP_QUERY_STATUS_TEXT                      = 20; { special: part of status line }
  1738.   {$EXTERNALSYM HTTP_QUERY_STATUS_TEXT}
  1739.   HTTP_QUERY_RAW_HEADERS                      = 21; { special: all headers as ASCIIZ }
  1740.   {$EXTERNALSYM HTTP_QUERY_RAW_HEADERS}
  1741.   HTTP_QUERY_RAW_HEADERS_CRLF                 = 22; { special: all headers }
  1742.   {$EXTERNALSYM HTTP_QUERY_RAW_HEADERS_CRLF}
  1743.   HTTP_QUERY_CONNECTION                       = 23;
  1744.   {$EXTERNALSYM HTTP_QUERY_CONNECTION}
  1745.   HTTP_QUERY_ACCEPT                           = 24;
  1746.   {$EXTERNALSYM HTTP_QUERY_ACCEPT}
  1747.   HTTP_QUERY_ACCEPT_CHARSET                   = 25;
  1748.   {$EXTERNALSYM HTTP_QUERY_ACCEPT_CHARSET}
  1749.   HTTP_QUERY_ACCEPT_ENCODING                  = 26;
  1750.   {$EXTERNALSYM HTTP_QUERY_ACCEPT_ENCODING}
  1751.   HTTP_QUERY_ACCEPT_LANGUAGE                  = 27;
  1752.   {$EXTERNALSYM HTTP_QUERY_ACCEPT_LANGUAGE}
  1753.   HTTP_QUERY_AUTHORIZATION                    = 28;
  1754.   {$EXTERNALSYM HTTP_QUERY_AUTHORIZATION}
  1755.   HTTP_QUERY_CONTENT_ENCODING                 = 29;
  1756.   {$EXTERNALSYM HTTP_QUERY_CONTENT_ENCODING}
  1757.   HTTP_QUERY_FORWARDED                        = 30;
  1758.   {$EXTERNALSYM HTTP_QUERY_FORWARDED}
  1759.   HTTP_QUERY_FROM                             = 31;
  1760.   {$EXTERNALSYM HTTP_QUERY_FROM}
  1761.   HTTP_QUERY_IF_MODIFIED_SINCE                = 32;
  1762.   {$EXTERNALSYM HTTP_QUERY_IF_MODIFIED_SINCE}
  1763.   HTTP_QUERY_LOCATION                         = 33;
  1764.   {$EXTERNALSYM HTTP_QUERY_LOCATION}
  1765.   HTTP_QUERY_ORIG_URI                         = 34;
  1766.   {$EXTERNALSYM HTTP_QUERY_ORIG_URI}
  1767.   HTTP_QUERY_REFERER                          = 35;
  1768.   {$EXTERNALSYM HTTP_QUERY_REFERER}
  1769.   HTTP_QUERY_RETRY_AFTER                      = 36;
  1770.   {$EXTERNALSYM HTTP_QUERY_RETRY_AFTER}
  1771.   HTTP_QUERY_SERVER                           = 37;
  1772.   {$EXTERNALSYM HTTP_QUERY_SERVER}
  1773.   HTTP_QUERY_TITLE                            = 38;
  1774.   {$EXTERNALSYM HTTP_QUERY_TITLE}
  1775.   HTTP_QUERY_USER_AGENT                       = 39;
  1776.   {$EXTERNALSYM HTTP_QUERY_USER_AGENT}
  1777.   HTTP_QUERY_WWW_AUTHENTICATE                 = 40;
  1778.   {$EXTERNALSYM HTTP_QUERY_WWW_AUTHENTICATE}
  1779.   HTTP_QUERY_PROXY_AUTHENTICATE               = 41;
  1780.   {$EXTERNALSYM HTTP_QUERY_PROXY_AUTHENTICATE}
  1781.   HTTP_QUERY_ACCEPT_RANGES                    = 42;
  1782.   {$EXTERNALSYM HTTP_QUERY_ACCEPT_RANGES}
  1783.   HTTP_QUERY_SET_COOKIE                       = 43;
  1784.   {$EXTERNALSYM HTTP_QUERY_SET_COOKIE}
  1785.   HTTP_QUERY_COOKIE                           = 44;
  1786.   {$EXTERNALSYM HTTP_QUERY_COOKIE}
  1787.   HTTP_QUERY_REQUEST_METHOD                   = 45;  { special: GET/POST etc. }
  1788.   {$EXTERNALSYM HTTP_QUERY_REQUEST_METHOD}
  1789.   HTTP_QUERY_REFRESH                          = 46;
  1790.   {$EXTERNALSYM HTTP_QUERY_REFRESH}
  1791.   HTTP_QUERY_CONTENT_DISPOSITION              = 47;
  1792.   {$EXTERNALSYM HTTP_QUERY_CONTENT_DISPOSITION}
  1793.  
  1794. { HTTP 1.1 defined headers }
  1795.  
  1796.   HTTP_QUERY_AGE                              = 48;
  1797.   {$EXTERNALSYM HTTP_QUERY_AGE}
  1798.   HTTP_QUERY_CACHE_CONTROL                    = 49;
  1799.   {$EXTERNALSYM HTTP_QUERY_CACHE_CONTROL}
  1800.   HTTP_QUERY_CONTENT_BASE                     = 50;
  1801.   {$EXTERNALSYM HTTP_QUERY_CONTENT_BASE}
  1802.   HTTP_QUERY_CONTENT_LOCATION                 = 51;
  1803.   {$EXTERNALSYM HTTP_QUERY_CONTENT_LOCATION}
  1804.   HTTP_QUERY_CONTENT_MD5                      = 52;
  1805.   {$EXTERNALSYM HTTP_QUERY_CONTENT_MD5}
  1806.   HTTP_QUERY_CONTENT_RANGE                    = 53;
  1807.   {$EXTERNALSYM HTTP_QUERY_CONTENT_RANGE}
  1808.   HTTP_QUERY_ETAG                             = 54;
  1809.   {$EXTERNALSYM HTTP_QUERY_ETAG}
  1810.   HTTP_QUERY_HOST                             = 55;
  1811.   {$EXTERNALSYM HTTP_QUERY_HOST}
  1812.   HTTP_QUERY_IF_MATCH                         = 56;
  1813.   {$EXTERNALSYM HTTP_QUERY_IF_MATCH}
  1814.   HTTP_QUERY_IF_NONE_MATCH                    = 57;
  1815.   {$EXTERNALSYM HTTP_QUERY_IF_NONE_MATCH}
  1816.   HTTP_QUERY_IF_RANGE                         = 58;
  1817.   {$EXTERNALSYM HTTP_QUERY_IF_RANGE}
  1818.   HTTP_QUERY_IF_UNMODIFIED_SINCE              = 59;
  1819.   {$EXTERNALSYM HTTP_QUERY_IF_UNMODIFIED_SINCE}
  1820.   HTTP_QUERY_MAX_FORWARDS                     = 60;
  1821.   {$EXTERNALSYM HTTP_QUERY_MAX_FORWARDS}
  1822.   HTTP_QUERY_PROXY_AUTHORIZATION              = 61;
  1823.   {$EXTERNALSYM HTTP_QUERY_PROXY_AUTHORIZATION}
  1824.   HTTP_QUERY_RANGE                            = 62;
  1825.   {$EXTERNALSYM HTTP_QUERY_RANGE}
  1826.   HTTP_QUERY_TRANSFER_ENCODING                = 63;
  1827.   {$EXTERNALSYM HTTP_QUERY_TRANSFER_ENCODING}
  1828.   HTTP_QUERY_UPGRADE                          = 64;
  1829.   {$EXTERNALSYM HTTP_QUERY_UPGRADE}
  1830.   HTTP_QUERY_VARY                             = 65;
  1831.   {$EXTERNALSYM HTTP_QUERY_VARY}
  1832.   HTTP_QUERY_VIA                              = 66;
  1833.   {$EXTERNALSYM HTTP_QUERY_VIA}
  1834.   HTTP_QUERY_WARNING                          = 67;
  1835.   {$EXTERNALSYM HTTP_QUERY_WARNING}
  1836.   HTTP_QUERY_MAX                              = 67;
  1837.   {$EXTERNALSYM HTTP_QUERY_MAX}
  1838.  
  1839. { HTTP_QUERY_CUSTOM - if this special value is supplied as the dwInfoLevel }
  1840. { parameter of HttpQueryInfo then the lpBuffer parameter contains the name }
  1841. { of the header we are to query }
  1842.   HTTP_QUERY_CUSTOM                           = 65535;
  1843.   {$EXTERNALSYM HTTP_QUERY_CUSTOM}
  1844.  
  1845. { HTTP_QUERY_FLAG_REQUEST_HEADERS - if this bit is set in the dwInfoLevel }
  1846. { parameter of HttpQueryInfo then the request headers will be queried for the }
  1847. { request information }
  1848.   HTTP_QUERY_FLAG_REQUEST_HEADERS             = $80000000;
  1849.   {$EXTERNALSYM HTTP_QUERY_FLAG_REQUEST_HEADERS}
  1850.  
  1851. { HTTP_QUERY_FLAG_SYSTEMTIME - if this bit is set in the dwInfoLevel parameter }
  1852. { of HttpQueryInfo AND the header being queried contains date information, }
  1853. { e.g. the "Expires:" header then lpBuffer will contain a SYSTEMTIME structure }
  1854. { containing the date and time information converted from the header string }
  1855.   HTTP_QUERY_FLAG_SYSTEMTIME                  = $40000000;
  1856.   {$EXTERNALSYM HTTP_QUERY_FLAG_SYSTEMTIME}
  1857.  
  1858. { HTTP_QUERY_FLAG_NUMBER - if this bit is set in the dwInfoLevel parameter of }
  1859. { HttpQueryInfo, then the value of the header will be converted to a number }
  1860. { before being returned to the caller, if applicable }
  1861.   HTTP_QUERY_FLAG_NUMBER                      = $20000000;
  1862.   {$EXTERNALSYM HTTP_QUERY_FLAG_NUMBER}
  1863.  
  1864. { HTTP_QUERY_FLAG_COALESCE - combine the values from several headers of the }
  1865. { same name into the output buffer }
  1866.   HTTP_QUERY_FLAG_COALESCE                    = $10000000;
  1867.   {$EXTERNALSYM HTTP_QUERY_FLAG_COALESCE}
  1868.  
  1869.   HTTP_QUERY_MODIFIER_FLAGS_MASK              = HTTP_QUERY_FLAG_REQUEST_HEADERS or
  1870.                                                 HTTP_QUERY_FLAG_SYSTEMTIME or
  1871.                                                 HTTP_QUERY_FLAG_NUMBER or
  1872.                                                 HTTP_QUERY_FLAG_COALESCE;
  1873.   {$EXTERNALSYM HTTP_QUERY_MODIFIER_FLAGS_MASK}
  1874.  
  1875.   HTTP_QUERY_HEADER_MASK                      = not HTTP_QUERY_MODIFIER_FLAGS_MASK;
  1876.   {$EXTERNALSYM HTTP_QUERY_HEADER_MASK}
  1877.  
  1878. {  HTTP Response Status Codes: }
  1879.   HTTP_STATUS_CONTINUE            = 100;    { OK to continue with request }
  1880.   {$EXTERNALSYM HTTP_STATUS_CONTINUE}
  1881.   HTTP_STATUS_SWITCH_PROTOCOLS    = 101;    { server has switched protocols in upgrade header }
  1882.   {$EXTERNALSYM HTTP_STATUS_SWITCH_PROTOCOLS}
  1883.   HTTP_STATUS_OK                  = 200;    { request completed }
  1884.   {$EXTERNALSYM HTTP_STATUS_OK}
  1885.   HTTP_STATUS_CREATED             = 201;    { object created, reason = new URI }
  1886.   {$EXTERNALSYM HTTP_STATUS_CREATED}
  1887.   HTTP_STATUS_ACCEPTED            = 202;    { async completion (TBS) }
  1888.   {$EXTERNALSYM HTTP_STATUS_ACCEPTED}
  1889.   HTTP_STATUS_PARTIAL             = 203;    { partial completion }
  1890.   {$EXTERNALSYM HTTP_STATUS_PARTIAL}
  1891.   HTTP_STATUS_NO_CONTENT          = 204;    { no info to return }
  1892.   {$EXTERNALSYM HTTP_STATUS_NO_CONTENT}
  1893.   HTTP_STATUS_RESET_CONTENT       = 205;    { request completed, but clear form }
  1894.   {$EXTERNALSYM HTTP_STATUS_RESET_CONTENT}
  1895.   HTTP_STATUS_PARTIAL_CONTENT     = 206;    { partial GET furfilled }
  1896.   {$EXTERNALSYM HTTP_STATUS_PARTIAL_CONTENT}
  1897.   HTTP_STATUS_AMBIGUOUS           = 300;    { server couldn't decide what to return }
  1898.   {$EXTERNALSYM HTTP_STATUS_AMBIGUOUS}
  1899.   HTTP_STATUS_MOVED               = 301;    { object permanently moved }
  1900.   {$EXTERNALSYM HTTP_STATUS_MOVED}
  1901.   HTTP_STATUS_REDIRECT            = 302;    { object temporarily moved }
  1902.   {$EXTERNALSYM HTTP_STATUS_REDIRECT}
  1903.   HTTP_STATUS_REDIRECT_METHOD     = 303;    { redirection w/ new access method }
  1904.   {$EXTERNALSYM HTTP_STATUS_REDIRECT_METHOD}
  1905.   HTTP_STATUS_NOT_MODIFIED        = 304;    { if-modified-since was not modified }
  1906.   {$EXTERNALSYM HTTP_STATUS_NOT_MODIFIED}
  1907.   HTTP_STATUS_USE_PROXY           = 305;    { redirection to proxy, location header specifies proxy to use }
  1908.   {$EXTERNALSYM HTTP_STATUS_USE_PROXY}
  1909.   HTTP_STATUS_REDIRECT_KEEP_VERB  = 307;    { HTTP/1.1: keep same verb }
  1910.   {$EXTERNALSYM HTTP_STATUS_REDIRECT_KEEP_VERB}
  1911.   HTTP_STATUS_BAD_REQUEST         = 400;    { invalid syntax }
  1912.   {$EXTERNALSYM HTTP_STATUS_BAD_REQUEST}
  1913.   HTTP_STATUS_DENIED              = 401;    { access denied }
  1914.   {$EXTERNALSYM HTTP_STATUS_DENIED}
  1915.   HTTP_STATUS_PAYMENT_REQ         = 402;    { payment required }
  1916.   {$EXTERNALSYM HTTP_STATUS_PAYMENT_REQ}
  1917.   HTTP_STATUS_FORBIDDEN           = 403;    { request forbidden }
  1918.   {$EXTERNALSYM HTTP_STATUS_FORBIDDEN}
  1919.   HTTP_STATUS_NOT_FOUND           = 404;    { object not found }
  1920.   {$EXTERNALSYM HTTP_STATUS_NOT_FOUND}
  1921.   HTTP_STATUS_BAD_METHOD          = 405;    { method is not allowed }
  1922.   {$EXTERNALSYM HTTP_STATUS_BAD_METHOD}
  1923.   HTTP_STATUS_NONE_ACCEPTABLE     = 406;    { no response acceptable to client found }
  1924.   {$EXTERNALSYM HTTP_STATUS_NONE_ACCEPTABLE}
  1925.   HTTP_STATUS_PROXY_AUTH_REQ      = 407;    { proxy authentication required }
  1926.   {$EXTERNALSYM HTTP_STATUS_PROXY_AUTH_REQ}
  1927.   HTTP_STATUS_REQUEST_TIMEOUT     = 408;    { server timed out waiting for request }
  1928.   {$EXTERNALSYM HTTP_STATUS_REQUEST_TIMEOUT}
  1929.   HTTP_STATUS_CONFLICT            = 409;    { user should resubmit with more info }
  1930.   {$EXTERNALSYM HTTP_STATUS_CONFLICT}
  1931.   HTTP_STATUS_GONE                = 410;    { the resource is no longer available }
  1932.   {$EXTERNALSYM HTTP_STATUS_GONE}
  1933.   HTTP_STATUS_AUTH_REFUSED        = 411;    { couldn't authorize client }
  1934.   {$EXTERNALSYM HTTP_STATUS_AUTH_REFUSED}
  1935.   HTTP_STATUS_PRECOND_FAILED      = 412;    { precondition given in request failed }
  1936.   {$EXTERNALSYM HTTP_STATUS_PRECOND_FAILED}
  1937.   HTTP_STATUS_REQUEST_TOO_LARGE   = 413;    { request entity was too large }
  1938.   {$EXTERNALSYM HTTP_STATUS_REQUEST_TOO_LARGE}
  1939.   HTTP_STATUS_URI_TOO_LONG        = 414;    { request URI too long }
  1940.   {$EXTERNALSYM HTTP_STATUS_URI_TOO_LONG}
  1941.   HTTP_STATUS_UNSUPPORTED_MEDIA   = 415;    { unsupported media type }
  1942.   {$EXTERNALSYM HTTP_STATUS_UNSUPPORTED_MEDIA}
  1943.   HTTP_STATUS_SERVER_ERROR        = 500;    { internal server error }
  1944.   {$EXTERNALSYM HTTP_STATUS_SERVER_ERROR}
  1945.   HTTP_STATUS_NOT_SUPPORTED       = 501;    { required not supported }
  1946.   {$EXTERNALSYM HTTP_STATUS_NOT_SUPPORTED}
  1947.   HTTP_STATUS_BAD_GATEWAY         = 502;    { error response received from gateway }
  1948.   {$EXTERNALSYM HTTP_STATUS_BAD_GATEWAY}
  1949.   HTTP_STATUS_SERVICE_UNAVAIL     = 503;    { temporarily overloaded }
  1950.   {$EXTERNALSYM HTTP_STATUS_SERVICE_UNAVAIL}
  1951.   HTTP_STATUS_GATEWAY_TIMEOUT     = 504;    { timed out waiting for gateway }
  1952.   {$EXTERNALSYM HTTP_STATUS_GATEWAY_TIMEOUT}
  1953.   HTTP_STATUS_VERSION_NOT_SUP     = 505;    { HTTP version not supported }
  1954.   {$EXTERNALSYM HTTP_STATUS_VERSION_NOT_SUP}
  1955.   HTTP_STATUS_FIRST               = HTTP_STATUS_CONTINUE;
  1956.   {$EXTERNALSYM HTTP_STATUS_FIRST}
  1957.   HTTP_STATUS_LAST                = HTTP_STATUS_VERSION_NOT_SUP;
  1958.   {$EXTERNALSYM HTTP_STATUS_LAST}
  1959.  
  1960. { prototypes }
  1961.  
  1962. function HttpOpenRequestA(hConnect: HINTERNET; lpszVerb: PAnsiChar;
  1963.   lpszObjectName: PAnsiChar; lpszVersion: PAnsiChar; lpszReferrer: PAnsiChar;
  1964.   lplpszAcceptTypes: PLPSTR; dwFlags: DWORD;
  1965.   dwContext: DWORD): HINTERNET; stdcall;
  1966.   {$EXTERNALSYM HttpOpenRequestA}
  1967. function HttpOpenRequestW(hConnect: HINTERNET; lpszVerb: PWideChar;
  1968.   lpszObjectName: PWideChar; lpszVersion: PWideChar; lpszReferrer: PWideChar;
  1969.   lplpszAcceptTypes: PLPWSTR; dwFlags: DWORD;
  1970.   dwContext: DWORD): HINTERNET; stdcall;
  1971.   {$EXTERNALSYM HttpOpenRequestW}
  1972. function HttpOpenRequest(hConnect: HINTERNET; lpszVerb: PChar;
  1973.   lpszObjectName: PChar; lpszVersion: PChar; lpszReferrer: PChar;
  1974.   lplpszAcceptTypes: PLPSTR; dwFlags: DWORD;
  1975.   dwContext: DWORD): HINTERNET; stdcall;
  1976.   {$EXTERNALSYM HttpOpenRequest}
  1977.  
  1978. function HttpAddRequestHeadersA(hRequest: HINTERNET; lpszHeaders: PAnsiChar;
  1979.   dwHeadersLength: DWORD; dwModifiers: DWORD): BOOL; stdcall;
  1980.   {$EXTERNALSYM HttpAddRequestHeadersA}
  1981. function HttpAddRequestHeadersW(hRequest: HINTERNET; lpszHeaders: PWideChar;
  1982.   dwHeadersLength: DWORD; dwModifiers: DWORD): BOOL; stdcall;
  1983.   {$EXTERNALSYM HttpAddRequestHeadersW}
  1984. function HttpAddRequestHeaders(hRequest: HINTERNET; lpszHeaders: PChar;
  1985.   dwHeadersLength: DWORD; dwModifiers: DWORD): BOOL; stdcall;
  1986.   {$EXTERNALSYM HttpAddRequestHeaders}
  1987.  
  1988. const
  1989. { values for dwModifiers parameter of HttpAddRequestHeaders }
  1990.  
  1991.   HTTP_ADDREQ_INDEX_MASK          = $0000FFFF;
  1992.   {$EXTERNALSYM HTTP_ADDREQ_INDEX_MASK}
  1993.   HTTP_ADDREQ_FLAGS_MASK          = $FFFF0000;
  1994.   {$EXTERNALSYM HTTP_ADDREQ_FLAGS_MASK}
  1995.  
  1996. { HTTP_ADDREQ_FLAG_ADD_IF_NEW - the header will only be added if it doesn't }
  1997. { already exist }
  1998.  
  1999.   HTTP_ADDREQ_FLAG_ADD_IF_NEW     = $10000000;
  2000.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_ADD_IF_NEW}
  2001.  
  2002. { HTTP_ADDREQ_FLAG_ADD - if HTTP_ADDREQ_FLAG_REPLACE is set but the header is }
  2003. { not found then if this flag is set, the header is added anyway, so long as }
  2004. { there is a valid header-value }
  2005.  
  2006.   HTTP_ADDREQ_FLAG_ADD            = $20000000;
  2007.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_ADD}
  2008.  
  2009. { HTTP_ADDREQ_FLAG_COALESCE - coalesce headers with same name. e.g. }
  2010. { "Accept: text/*" and "Accept: audio/*" with this flag results in a single }
  2011. { header: "Accept: text/*, audio/*" }
  2012.  
  2013.   HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA           = $40000000;
  2014.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA}
  2015.   HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON       = $01000000;
  2016.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON}
  2017.   HTTP_ADDREQ_FLAG_COALESCE                      = HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA;
  2018.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_COALESCE}
  2019.  
  2020. { HTTP_ADDREQ_FLAG_REPLACE - replaces the specified header. Only one header can }
  2021. { be supplied in the buffer. If the header to be replaced is not the first }
  2022. { in a list of headers with the same name, then the relative index should be }
  2023. { supplied in the low 8 bits of the dwModifiers parameter. If the header-value }
  2024. { part is missing, then the header is removed }
  2025.  
  2026.   HTTP_ADDREQ_FLAG_REPLACE        = $80000000;
  2027.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_REPLACE}
  2028.  
  2029. function HttpSendRequestA(hRequest: HINTERNET; lpszHeaders: PAnsiChar; 
  2030.   dwHeadersLength: DWORD; lpOptional: Pointer; 
  2031.   dwOptionalLength: DWORD): BOOL; stdcall;
  2032.   {$EXTERNALSYM HttpSendRequestA}
  2033. function HttpSendRequestW(hRequest: HINTERNET; lpszHeaders: PWideChar; 
  2034.   dwHeadersLength: DWORD; lpOptional: Pointer; 
  2035.   dwOptionalLength: DWORD): BOOL; stdcall;
  2036.   {$EXTERNALSYM HttpSendRequestW}
  2037. function HttpSendRequest(hRequest: HINTERNET; lpszHeaders: PChar; 
  2038.   dwHeadersLength: DWORD; lpOptional: Pointer; 
  2039.   dwOptionalLength: DWORD): BOOL; stdcall;
  2040.   {$EXTERNALSYM HttpSendRequest}
  2041.  
  2042. function HttpSendRequestExA(hRequest: HINTERNET; lpBuffersIn: PInternetBuffers;
  2043.     lpBuffersOut: PInternetBuffers;
  2044.     dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  2045.   {$EXTERNALSYM HttpSendRequestExA}
  2046. function HttpSendRequestExW(hRequest: HINTERNET; lpBuffersIn: PInternetBuffers;
  2047.     lpBuffersOut: PInternetBuffers;
  2048.     dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  2049.   {$EXTERNALSYM HttpSendRequestExW}
  2050. function HttpSendRequestEx(hRequest: HINTERNET; lpBuffersIn: PInternetBuffers;
  2051.     lpBuffersOut: PInternetBuffers;
  2052.     dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  2053.   {$EXTERNALSYM HttpSendRequestEx}
  2054.  
  2055. { flags for HttpSendRequestEx(), HttpEndRequest() }
  2056. const
  2057.   HSR_ASYNC       = WININET_API_FLAG_ASYNC;          { force async }
  2058.   {$EXTERNALSYM HSR_ASYNC}
  2059.   HSR_SYNC        = WININET_API_FLAG_SYNC;           { force sync }
  2060.   {$EXTERNALSYM HSR_SYNC}
  2061.   HSR_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT;    { use dwContext value }
  2062.   {$EXTERNALSYM HSR_USE_CONTEXT}
  2063.   HSR_INITIATE    = $00000008;                       { iterative operation (completed by HttpEndRequest) }
  2064.   {$EXTERNALSYM HSR_INITIATE}
  2065.   HSR_DOWNLOAD    = $00000010;                       { download to file }
  2066.   {$EXTERNALSYM HSR_DOWNLOAD}
  2067.   HSR_CHUNKED     = $00000020;                       { operation is send of chunked data }
  2068.   {$EXTERNALSYM HSR_CHUNKED}
  2069.  
  2070. function HttpEndRequestA(hRequest: HINTERNET;
  2071.   lpBuffersOut: PInternetBuffers; dwFlags: DWORD;
  2072.   dwContext: DWORD): BOOL; stdcall;
  2073.   {$EXTERNALSYM HttpEndRequestA}
  2074. function HttpEndRequestW(hRequest: HINTERNET;
  2075.   lpBuffersOut: PInternetBuffers; dwFlags: DWORD;
  2076.   dwContext: DWORD): BOOL; stdcall;
  2077.   {$EXTERNALSYM HttpEndRequestW}
  2078. function HttpEndRequest(hRequest: HINTERNET;
  2079.   lpBuffersOut: PInternetBuffers; dwFlags: DWORD;
  2080.   dwContext: DWORD): BOOL; stdcall;
  2081.   {$EXTERNALSYM HttpEndRequest}
  2082.  
  2083. function HttpQueryInfoA(hRequest: HINTERNET; dwInfoLevel: DWORD;
  2084.   lpvBuffer: Pointer; var lpdwBufferLength: DWORD;
  2085.   var lpdwReserved: DWORD): BOOL; stdcall;
  2086.   {$EXTERNALSYM HttpQueryInfoA}
  2087. function HttpQueryInfoW(hRequest: HINTERNET; dwInfoLevel: DWORD;
  2088.   lpvBuffer: Pointer; var lpdwBufferLength: DWORD;
  2089.   var lpdwReserved: DWORD): BOOL; stdcall;
  2090.   {$EXTERNALSYM HttpQueryInfoW}
  2091. function HttpQueryInfo(hRequest: HINTERNET; dwInfoLevel: DWORD;
  2092.   lpvBuffer: Pointer; var lpdwBufferLength: DWORD;
  2093.   var lpdwReserved: DWORD): BOOL; stdcall;
  2094.   {$EXTERNALSYM HttpQueryInfo}
  2095.  
  2096. { Cookie APIs }
  2097.  
  2098. function InternetSetCookieA(lpszUrl, lpszCookieName,
  2099.   lpszCookieData: PAnsiChar): BOOL; stdcall;
  2100.   {$EXTERNALSYM InternetSetCookieA}
  2101. function InternetSetCookieW(lpszUrl, lpszCookieName,
  2102.   lpszCookieData: PWideChar): BOOL; stdcall;
  2103.   {$EXTERNALSYM InternetSetCookieW}
  2104. function InternetSetCookie(lpszUrl, lpszCookieName,
  2105.   lpszCookieData: PChar): BOOL; stdcall;
  2106.   {$EXTERNALSYM InternetSetCookie}
  2107.  
  2108. function InternetGetCookieA(lpszUrl, lpszCookieName,
  2109.   lpszCookieData: PAnsiChar; var lpdwSize: DWORD): BOOL; stdcall;
  2110.   {$EXTERNALSYM InternetGetCookieA}
  2111. function InternetGetCookieW(lpszUrl, lpszCookieName,
  2112.   lpszCookieData: PWideChar; var lpdwSize: DWORD): BOOL; stdcall;
  2113.   {$EXTERNALSYM InternetGetCookieW}
  2114. function InternetGetCookie(lpszUrl, lpszCookieName,
  2115.   lpszCookieData: PChar; var lpdwSize: DWORD): BOOL; stdcall;
  2116.   {$EXTERNALSYM InternetGetCookie}
  2117.  
  2118. function InternetAttemptConnect(dwReserved: DWORD): DWORD; stdcall;
  2119.   {$EXTERNALSYM InternetAttemptConnect}
  2120.  
  2121. function InternetCheckConnectionA(lpszUrl: PAnsiChar; dwFlags: DWORD;
  2122.     dwReserved: DWORD): BOOL; stdcall;
  2123.   {$EXTERNALSYM InternetCheckConnectionA}
  2124. function InternetCheckConnectionW(lpszUrl: PAnsiChar; dwFlags: DWORD;
  2125.     dwReserved: DWORD): BOOL; stdcall;
  2126.   {$EXTERNALSYM InternetCheckConnectionW}
  2127. function InternetCheckConnection(lpszUrl: PAnsiChar; dwFlags: DWORD;
  2128.     dwReserved: DWORD): BOOL; stdcall;
  2129.   {$EXTERNALSYM InternetCheckConnection}
  2130.  
  2131. { Internet UI }
  2132.  
  2133. { InternetErrorDlg - Provides UI for certain Errors. }
  2134. const
  2135.   FLAGS_ERROR_UI_FILTER_FOR_ERRORS            = $01;
  2136.   {$EXTERNALSYM FLAGS_ERROR_UI_FILTER_FOR_ERRORS}
  2137.   FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS         = $02;
  2138.   {$EXTERNALSYM FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS}
  2139.   FLAGS_ERROR_UI_FLAGS_GENERATE_DATA          = $04;
  2140.   {$EXTERNALSYM FLAGS_ERROR_UI_FLAGS_GENERATE_DATA}
  2141.   FLAGS_ERROR_UI_FLAGS_NO_UI                  = $08;
  2142.   {$EXTERNALSYM FLAGS_ERROR_UI_FLAGS_NO_UI}
  2143.   FLAGS_ERROR_UI_SERIALIZE_DIALOGS            = $10;
  2144.   {$EXTERNALSYM FLAGS_ERROR_UI_SERIALIZE_DIALOGS}
  2145.  
  2146. function InternetAuthNotifyCallback(
  2147.     dwContext: DWORD;     { as passed to InternetErrorDlg }
  2148.     dwReturn: DWORD;      { error code: success, resend, or cancel }
  2149.     lpReserved: Pointer   { reserved: will be set to null }
  2150. ): DWORD; stdcall;
  2151.   {$EXTERNALSYM InternetAuthNotifyCallback}
  2152.  
  2153. type
  2154.   PFN_AUTH_NOTIFY = function(dwContext:DWORD; dwReturn:DWORD;
  2155.     lpReserved:Pointer): DWORD;
  2156.   {$EXTERNALSYM PFN_AUTH_NOTIFY}
  2157.  
  2158. function InternetErrorDlg(hWnd: HWND; hRequest: HINTERNET;
  2159.   dwError, dwFlags: DWORD; var lppvData: Pointer): DWORD; stdcall;
  2160.   {$EXTERNALSYM InternetErrorDlg}
  2161.  
  2162. function InternetConfirmZoneCrossing(hWnd: HWND;
  2163.   szUrlPrev, szUrlNew: LPSTR; bPost: BOOL): DWORD; stdcall;
  2164.   {$EXTERNALSYM InternetConfirmZoneCrossing}
  2165.  
  2166. const
  2167. { Internet API error returns }
  2168.  
  2169.   INTERNET_ERROR_BASE                         = 12000;
  2170.   {$EXTERNALSYM INTERNET_ERROR_BASE}
  2171.   ERROR_INTERNET_OUT_OF_HANDLES               = INTERNET_ERROR_BASE + 1;
  2172.   {$EXTERNALSYM ERROR_INTERNET_OUT_OF_HANDLES}
  2173.   ERROR_INTERNET_TIMEOUT                      = INTERNET_ERROR_BASE + 2;
  2174.   {$EXTERNALSYM ERROR_INTERNET_TIMEOUT}
  2175.   ERROR_INTERNET_EXTENDED_ERROR               = INTERNET_ERROR_BASE + 3;
  2176.   {$EXTERNALSYM ERROR_INTERNET_EXTENDED_ERROR}
  2177.   ERROR_INTERNET_INTERNAL_ERROR               = INTERNET_ERROR_BASE + 4;
  2178.   {$EXTERNALSYM ERROR_INTERNET_INTERNAL_ERROR}
  2179.   ERROR_INTERNET_INVALID_URL                  = INTERNET_ERROR_BASE + 5;
  2180.   {$EXTERNALSYM ERROR_INTERNET_INVALID_URL}
  2181.   ERROR_INTERNET_UNRECOGNIZED_SCHEME          = INTERNET_ERROR_BASE + 6;
  2182.   {$EXTERNALSYM ERROR_INTERNET_UNRECOGNIZED_SCHEME}
  2183.   ERROR_INTERNET_NAME_NOT_RESOLVED            = INTERNET_ERROR_BASE + 7;
  2184.   {$EXTERNALSYM ERROR_INTERNET_NAME_NOT_RESOLVED}
  2185.   ERROR_INTERNET_PROTOCOL_NOT_FOUND           = INTERNET_ERROR_BASE + 8;
  2186.   {$EXTERNALSYM ERROR_INTERNET_PROTOCOL_NOT_FOUND}
  2187.   ERROR_INTERNET_INVALID_OPTION               = INTERNET_ERROR_BASE + 9;
  2188.   {$EXTERNALSYM ERROR_INTERNET_INVALID_OPTION}
  2189.   ERROR_INTERNET_BAD_OPTION_LENGTH            = INTERNET_ERROR_BASE + 10;
  2190.   {$EXTERNALSYM ERROR_INTERNET_BAD_OPTION_LENGTH}
  2191.   ERROR_INTERNET_OPTION_NOT_SETTABLE          = INTERNET_ERROR_BASE + 11;
  2192.   {$EXTERNALSYM ERROR_INTERNET_OPTION_NOT_SETTABLE}
  2193.   ERROR_INTERNET_SHUTDOWN                     = INTERNET_ERROR_BASE + 12;
  2194.   {$EXTERNALSYM ERROR_INTERNET_SHUTDOWN}
  2195.   ERROR_INTERNET_INCORRECT_USER_NAME          = INTERNET_ERROR_BASE + 13;
  2196.   {$EXTERNALSYM ERROR_INTERNET_INCORRECT_USER_NAME}
  2197.   ERROR_INTERNET_INCORRECT_PASSWORD           = INTERNET_ERROR_BASE + 14;
  2198.   {$EXTERNALSYM ERROR_INTERNET_INCORRECT_PASSWORD}
  2199.   ERROR_INTERNET_LOGIN_FAILURE                = INTERNET_ERROR_BASE + 15;
  2200.   {$EXTERNALSYM ERROR_INTERNET_LOGIN_FAILURE}
  2201.   ERROR_INTERNET_INVALID_OPERATION            = INTERNET_ERROR_BASE + 16;
  2202.   {$EXTERNALSYM ERROR_INTERNET_INVALID_OPERATION}
  2203.   ERROR_INTERNET_OPERATION_CANCELLED          = INTERNET_ERROR_BASE + 17;
  2204.   {$EXTERNALSYM ERROR_INTERNET_OPERATION_CANCELLED}
  2205.   ERROR_INTERNET_INCORRECT_HANDLE_TYPE        = INTERNET_ERROR_BASE + 18;
  2206.   {$EXTERNALSYM ERROR_INTERNET_INCORRECT_HANDLE_TYPE}
  2207.   ERROR_INTERNET_INCORRECT_HANDLE_STATE       = INTERNET_ERROR_BASE + 19;
  2208.   {$EXTERNALSYM ERROR_INTERNET_INCORRECT_HANDLE_STATE}
  2209.   ERROR_INTERNET_NOT_PROXY_REQUEST            = INTERNET_ERROR_BASE + 20;
  2210.   {$EXTERNALSYM ERROR_INTERNET_NOT_PROXY_REQUEST}
  2211.   ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND     = INTERNET_ERROR_BASE + 21;
  2212.   {$EXTERNALSYM ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND}
  2213.   ERROR_INTERNET_BAD_REGISTRY_PARAMETER       = INTERNET_ERROR_BASE + 22;
  2214.   {$EXTERNALSYM ERROR_INTERNET_BAD_REGISTRY_PARAMETER}
  2215.   ERROR_INTERNET_NO_DIRECT_ACCESS             = INTERNET_ERROR_BASE + 23;
  2216.   {$EXTERNALSYM ERROR_INTERNET_NO_DIRECT_ACCESS}
  2217.   ERROR_INTERNET_NO_CONTEXT                   = INTERNET_ERROR_BASE + 24;
  2218.   {$EXTERNALSYM ERROR_INTERNET_NO_CONTEXT}
  2219.   ERROR_INTERNET_NO_CALLBACK                  = INTERNET_ERROR_BASE + 25;
  2220.   {$EXTERNALSYM ERROR_INTERNET_NO_CALLBACK}
  2221.   ERROR_INTERNET_REQUEST_PENDING              = INTERNET_ERROR_BASE + 26;
  2222.   {$EXTERNALSYM ERROR_INTERNET_REQUEST_PENDING}
  2223.   ERROR_INTERNET_INCORRECT_FORMAT             = INTERNET_ERROR_BASE + 27;
  2224.   {$EXTERNALSYM ERROR_INTERNET_INCORRECT_FORMAT}
  2225.   ERROR_INTERNET_ITEM_NOT_FOUND               = INTERNET_ERROR_BASE + 28;
  2226.   {$EXTERNALSYM ERROR_INTERNET_ITEM_NOT_FOUND}
  2227.   ERROR_INTERNET_CANNOT_CONNECT               = INTERNET_ERROR_BASE + 29;
  2228.   {$EXTERNALSYM ERROR_INTERNET_CANNOT_CONNECT}
  2229.   ERROR_INTERNET_CONNECTION_ABORTED           = INTERNET_ERROR_BASE + 30;
  2230.   {$EXTERNALSYM ERROR_INTERNET_CONNECTION_ABORTED}
  2231.   ERROR_INTERNET_CONNECTION_RESET             = INTERNET_ERROR_BASE + 31;
  2232.   {$EXTERNALSYM ERROR_INTERNET_CONNECTION_RESET}
  2233.   ERROR_INTERNET_FORCE_RETRY                  = INTERNET_ERROR_BASE + 32;
  2234.   {$EXTERNALSYM ERROR_INTERNET_FORCE_RETRY}
  2235.   ERROR_INTERNET_INVALID_PROXY_REQUEST        = INTERNET_ERROR_BASE + 33;
  2236.   {$EXTERNALSYM ERROR_INTERNET_INVALID_PROXY_REQUEST}
  2237.   ERROR_INTERNET_HANDLE_EXISTS                = INTERNET_ERROR_BASE + 36;
  2238.   {$EXTERNALSYM ERROR_INTERNET_HANDLE_EXISTS}
  2239.   ERROR_INTERNET_SEC_CERT_DATE_INVALID        = INTERNET_ERROR_BASE + 37;
  2240.   {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_DATE_INVALID}
  2241.   ERROR_INTERNET_SEC_CERT_CN_INVALID          = INTERNET_ERROR_BASE + 38;
  2242.   {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_CN_INVALID}
  2243.   ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR       = INTERNET_ERROR_BASE + 39;
  2244.   {$EXTERNALSYM ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR}
  2245.   ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR       = INTERNET_ERROR_BASE + 40;
  2246.   {$EXTERNALSYM ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR}
  2247.   ERROR_INTERNET_MIXED_SECURITY               = INTERNET_ERROR_BASE + 41;
  2248.   {$EXTERNALSYM ERROR_INTERNET_MIXED_SECURITY}
  2249.   ERROR_INTERNET_CHG_POST_IS_NON_SECURE       = INTERNET_ERROR_BASE + 42;
  2250.   {$EXTERNALSYM ERROR_INTERNET_CHG_POST_IS_NON_SECURE}
  2251.   ERROR_INTERNET_POST_IS_NON_SECURE           = INTERNET_ERROR_BASE + 43;
  2252.   {$EXTERNALSYM ERROR_INTERNET_POST_IS_NON_SECURE}
  2253.   ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED      = INTERNET_ERROR_BASE + 44;
  2254.   {$EXTERNALSYM ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED}
  2255.   ERROR_INTERNET_INVALID_CA                   = INTERNET_ERROR_BASE + 45;
  2256.   {$EXTERNALSYM ERROR_INTERNET_INVALID_CA}
  2257.   ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP        = INTERNET_ERROR_BASE + 46;
  2258.   {$EXTERNALSYM ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP}
  2259.   ERROR_INTERNET_ASYNC_THREAD_FAILED          = INTERNET_ERROR_BASE + 47;
  2260.   {$EXTERNALSYM ERROR_INTERNET_ASYNC_THREAD_FAILED}
  2261.   ERROR_INTERNET_REDIRECT_SCHEME_CHANGE       = INTERNET_ERROR_BASE + 48;
  2262.   {$EXTERNALSYM ERROR_INTERNET_REDIRECT_SCHEME_CHANGE}
  2263.   ERROR_INTERNET_DIALOG_PENDING               = INTERNET_ERROR_BASE + 49;
  2264.   {$EXTERNALSYM ERROR_INTERNET_DIALOG_PENDING}
  2265.   ERROR_INTERNET_RETRY_DIALOG                 = INTERNET_ERROR_BASE + 50;
  2266.   {$EXTERNALSYM ERROR_INTERNET_RETRY_DIALOG}
  2267.   ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR      = INTERNET_ERROR_BASE + 52;
  2268.   {$EXTERNALSYM ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR}
  2269.   ERROR_INTERNET_INSERT_CDROM                 = INTERNET_ERROR_BASE + 53;
  2270.   {$EXTERNALSYM ERROR_INTERNET_INSERT_CDROM}
  2271.  
  2272. { FTP API errors }
  2273.  
  2274.   ERROR_FTP_TRANSFER_IN_PROGRESS              = INTERNET_ERROR_BASE + 110;
  2275.   {$EXTERNALSYM ERROR_FTP_TRANSFER_IN_PROGRESS}
  2276.   ERROR_FTP_DROPPED                           = INTERNET_ERROR_BASE + 111;
  2277.   {$EXTERNALSYM ERROR_FTP_DROPPED}
  2278.   ERROR_FTP_NO_PASSIVE_MODE                   = INTERNET_ERROR_BASE + 112;
  2279.   {$EXTERNALSYM ERROR_FTP_NO_PASSIVE_MODE}
  2280.  
  2281. { gopher API errors }
  2282.  
  2283.   ERROR_GOPHER_PROTOCOL_ERROR                 = INTERNET_ERROR_BASE + 130;
  2284.   {$EXTERNALSYM ERROR_GOPHER_PROTOCOL_ERROR}
  2285.   ERROR_GOPHER_NOT_FILE                       = INTERNET_ERROR_BASE + 131;
  2286.   {$EXTERNALSYM ERROR_GOPHER_NOT_FILE}
  2287.   ERROR_GOPHER_DATA_ERROR                     = INTERNET_ERROR_BASE + 132;
  2288.   {$EXTERNALSYM ERROR_GOPHER_DATA_ERROR}
  2289.   ERROR_GOPHER_END_OF_DATA                    = INTERNET_ERROR_BASE + 133;
  2290.   {$EXTERNALSYM ERROR_GOPHER_END_OF_DATA}
  2291.   ERROR_GOPHER_INVALID_LOCATOR                = INTERNET_ERROR_BASE + 134;
  2292.   {$EXTERNALSYM ERROR_GOPHER_INVALID_LOCATOR}
  2293.   ERROR_GOPHER_INCORRECT_LOCATOR_TYPE         = INTERNET_ERROR_BASE + 135;
  2294.   {$EXTERNALSYM ERROR_GOPHER_INCORRECT_LOCATOR_TYPE}
  2295.   ERROR_GOPHER_NOT_GOPHER_PLUS                = INTERNET_ERROR_BASE + 136;
  2296.   {$EXTERNALSYM ERROR_GOPHER_NOT_GOPHER_PLUS}
  2297.   ERROR_GOPHER_ATTRIBUTE_NOT_FOUND            = INTERNET_ERROR_BASE + 137;
  2298.   {$EXTERNALSYM ERROR_GOPHER_ATTRIBUTE_NOT_FOUND}
  2299.   ERROR_GOPHER_UNKNOWN_LOCATOR                = INTERNET_ERROR_BASE + 138;
  2300.   {$EXTERNALSYM ERROR_GOPHER_UNKNOWN_LOCATOR}
  2301.  
  2302. { HTTP API errors }
  2303.  
  2304.   ERROR_HTTP_HEADER_NOT_FOUND                 = INTERNET_ERROR_BASE + 150;
  2305.   {$EXTERNALSYM ERROR_HTTP_HEADER_NOT_FOUND}
  2306.   ERROR_HTTP_DOWNLEVEL_SERVER                 = INTERNET_ERROR_BASE + 151;
  2307.   {$EXTERNALSYM ERROR_HTTP_DOWNLEVEL_SERVER}
  2308.   ERROR_HTTP_INVALID_SERVER_RESPONSE          = INTERNET_ERROR_BASE + 152;
  2309.   {$EXTERNALSYM ERROR_HTTP_INVALID_SERVER_RESPONSE}
  2310.   ERROR_HTTP_INVALID_HEADER                   = INTERNET_ERROR_BASE + 153;
  2311.   {$EXTERNALSYM ERROR_HTTP_INVALID_HEADER}
  2312.   ERROR_HTTP_INVALID_QUERY_REQUEST            = INTERNET_ERROR_BASE + 154;
  2313.   {$EXTERNALSYM ERROR_HTTP_INVALID_QUERY_REQUEST}
  2314.   ERROR_HTTP_HEADER_ALREADY_EXISTS            = INTERNET_ERROR_BASE + 155;
  2315.   {$EXTERNALSYM ERROR_HTTP_HEADER_ALREADY_EXISTS}
  2316.   ERROR_HTTP_REDIRECT_FAILED                  = INTERNET_ERROR_BASE + 156;
  2317.   {$EXTERNALSYM ERROR_HTTP_REDIRECT_FAILED}
  2318.   ERROR_HTTP_NOT_REDIRECTED                   = INTERNET_ERROR_BASE + 160;
  2319.   {$EXTERNALSYM ERROR_HTTP_NOT_REDIRECTED}
  2320.   ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION        = INTERNET_ERROR_BASE + 161;
  2321.   {$EXTERNALSYM ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION}
  2322.   ERROR_HTTP_COOKIE_DECLINED                  = INTERNET_ERROR_BASE + 162;
  2323.   {$EXTERNALSYM ERROR_HTTP_COOKIE_DECLINED}
  2324.   ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION      = INTERNET_ERROR_BASE + 168;
  2325.   {$EXTERNALSYM ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION}
  2326.  
  2327. { additional Internet API error codes }
  2328.   ERROR_INTERNET_SECURITY_CHANNEL_ERROR       = INTERNET_ERROR_BASE + 157;
  2329.   {$EXTERNALSYM ERROR_INTERNET_SECURITY_CHANNEL_ERROR}
  2330.   ERROR_INTERNET_UNABLE_TO_CACHE_FILE         = INTERNET_ERROR_BASE + 158;
  2331.   {$EXTERNALSYM ERROR_INTERNET_UNABLE_TO_CACHE_FILE}
  2332.   ERROR_INTERNET_TCPIP_NOT_INSTALLED          = INTERNET_ERROR_BASE + 159;
  2333.   {$EXTERNALSYM ERROR_INTERNET_TCPIP_NOT_INSTALLED}
  2334.   ERROR_INTERNET_DISCONNECTED                 = INTERNET_ERROR_BASE + 163;
  2335.   {$EXTERNALSYM ERROR_INTERNET_DISCONNECTED}
  2336.   ERROR_INTERNET_SERVER_UNREACHABLE           = INTERNET_ERROR_BASE + 164;
  2337.   {$EXTERNALSYM ERROR_INTERNET_SERVER_UNREACHABLE}
  2338.   ERROR_INTERNET_PROXY_SERVER_UNREACHABLE     = INTERNET_ERROR_BASE + 165;
  2339.   {$EXTERNALSYM ERROR_INTERNET_PROXY_SERVER_UNREACHABLE}
  2340.   ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT        = INTERNET_ERROR_BASE + 166;
  2341.   {$EXTERNALSYM ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT}
  2342.   ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT    = INTERNET_ERROR_BASE + 167;
  2343.   {$EXTERNALSYM ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT}
  2344.   ERROR_INTERNET_SEC_INVALID_CERT             = INTERNET_ERROR_BASE + 169;
  2345.   {$EXTERNALSYM ERROR_INTERNET_SEC_INVALID_CERT}
  2346.   ERROR_INTERNET_SEC_CERT_REVOKED             = INTERNET_ERROR_BASE + 170;
  2347.   {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_REVOKED}
  2348.  
  2349. { InternetAutodial specific errors }
  2350.  
  2351.   ERROR_INTERNET_FAILED_DUETOSECURITYCHECK    = INTERNET_ERROR_BASE + 171;
  2352.   {$EXTERNALSYM ERROR_INTERNET_FAILED_DUETOSECURITYCHECK}
  2353.   INTERNET_ERROR_LAST                         = ERROR_INTERNET_FAILED_DUETOSECURITYCHECK;
  2354.   {$EXTERNALSYM INTERNET_ERROR_LAST}
  2355.  
  2356. { URLCACHE APIs }
  2357.  
  2358. { datatype definitions. }
  2359.  
  2360. { cache entry type flags. }
  2361.  
  2362.   NORMAL_CACHE_ENTRY          = $00000001;
  2363.   {$EXTERNALSYM NORMAL_CACHE_ENTRY}
  2364.   STABLE_CACHE_ENTRY          = $00000002;
  2365.   {$EXTERNALSYM STABLE_CACHE_ENTRY}
  2366.   STICKY_CACHE_ENTRY          = $00000004;
  2367.   {$EXTERNALSYM STICKY_CACHE_ENTRY}
  2368.   COOKIE_CACHE_ENTRY          = $00100000;
  2369.   {$EXTERNALSYM COOKIE_CACHE_ENTRY}
  2370.   URLHISTORY_CACHE_ENTRY      = $00200000;
  2371.   {$EXTERNALSYM URLHISTORY_CACHE_ENTRY}
  2372.   TRACK_OFFLINE_CACHE_ENTRY   = $00000010;
  2373.   {$EXTERNALSYM TRACK_OFFLINE_CACHE_ENTRY}
  2374.   TRACK_ONLINE_CACHE_ENTRY    = $00000020;
  2375.   {$EXTERNALSYM TRACK_ONLINE_CACHE_ENTRY}
  2376.   SPARSE_CACHE_ENTRY          = $00010000;
  2377.   {$EXTERNALSYM SPARSE_CACHE_ENTRY}
  2378.   OCX_CACHE_ENTRY             = $00020000;
  2379.   {$EXTERNALSYM OCX_CACHE_ENTRY}
  2380.  
  2381.   URLCACHE_FIND_DEFAULT_FILTER = NORMAL_CACHE_ENTRY or
  2382.                                  COOKIE_CACHE_ENTRY or
  2383.                                  URLHISTORY_CACHE_ENTRY or
  2384.                                  TRACK_OFFLINE_CACHE_ENTRY or
  2385.                                  TRACK_ONLINE_CACHE_ENTRY or
  2386.                                  STICKY_CACHE_ENTRY;
  2387.   {$EXTERNALSYM URLCACHE_FIND_DEFAULT_FILTER}
  2388.  
  2389. type
  2390.   PInternetCacheEntryInfoA = ^INTERNET_CACHE_ENTRY_INFOA;
  2391.   INTERNET_CACHE_ENTRY_INFOA = record
  2392.     dwStructSize: DWORD;         { version of cache system. ?? do we need this for all entries? }
  2393.     lpszSourceUrlName: PAnsiChar;    { embedded pointer to the URL name string. }
  2394.     lpszLocalFileName: PAnsiChar;   { embedded pointer to the local file name. }
  2395.     CacheEntryType: DWORD;       { cache type bit mask. }
  2396.     dwUseCount: DWORD;           { current users count of the cache entry. }
  2397.     dwHitRate: DWORD;            { num of times the cache entry was retrieved. }
  2398.     dwSizeLow: DWORD;            { low DWORD of the file size. }
  2399.     dwSizeHigh: DWORD;           { high DWORD of the file size. }
  2400.     LastModifiedTime: TFileTime; { last modified time of the file in GMT format. }
  2401.     ExpireTime: TFileTime;       { expire time of the file in GMT format }
  2402.     LastAccessTime: TFileTime;   { last accessed time in GMT format }
  2403.     LastSyncTime: TFileTime;     { last time the URL was synchronized }
  2404.                                  { with the source }
  2405.     lpHeaderInfo: PBYTE;         { embedded pointer to the header info. }
  2406.     dwHeaderInfoSize: DWORD;     { size of the above header. }
  2407.     lpszFileExtension: PAnsiChar;   { File extension used to retrive the urldata as a file. }
  2408.     dwReserved: DWORD;           { reserved for future use. }
  2409.   end;
  2410.   {$EXTERNALSYM INTERNET_CACHE_ENTRY_INFOA}
  2411.   PInternetCacheEntryInfoW = ^INTERNET_CACHE_ENTRY_INFOW;
  2412.   INTERNET_CACHE_ENTRY_INFOW = record
  2413.     dwStructSize: DWORD;         { version of cache system. ?? do we need this for all entries? }
  2414.     lpszSourceUrlName: PAnsiChar;    { embedded pointer to the URL name string. }
  2415.     lpszLocalFileName: PWideChar;   { embedded pointer to the local file name. }
  2416.     CacheEntryType: DWORD;       { cache type bit mask. }
  2417.     dwUseCount: DWORD;           { current users count of the cache entry. }
  2418.     dwHitRate: DWORD;            { num of times the cache entry was retrieved. }
  2419.     dwSizeLow: DWORD;            { low DWORD of the file size. }
  2420.     dwSizeHigh: DWORD;           { high DWORD of the file size. }
  2421.     LastModifiedTime: TFileTime; { last modified time of the file in GMT format. }
  2422.     ExpireTime: TFileTime;       { expire time of the file in GMT format }
  2423.     LastAccessTime: TFileTime;   { last accessed time in GMT format }
  2424.     LastSyncTime: TFileTime;     { last time the URL was synchronized }
  2425.                                  { with the source }
  2426.     lpHeaderInfo: PBYTE;         { embedded pointer to the header info. }
  2427.     dwHeaderInfoSize: DWORD;     { size of the above header. }
  2428.     lpszFileExtension: PWideChar;   { File extension used to retrive the urldata as a file. }
  2429.     dwReserved: DWORD;           { reserved for future use. }
  2430.   end;
  2431.   {$EXTERNALSYM INTERNET_CACHE_ENTRY_INFOW}
  2432.   PInternetCacheEntryInfo = PInternetCacheEntryInfoA;
  2433.   TInternetCacheEntryInfoA = INTERNET_CACHE_ENTRY_INFOA;
  2434.   LPINTERNET_CACHE_ENTRY_INFOA = PInternetCacheEntryInfoA;
  2435.   {$EXTERNALSYM LPINTERNET_CACHE_ENTRY_INFOA}
  2436.   TInternetCacheEntryInfoW = INTERNET_CACHE_ENTRY_INFOW;
  2437.   LPINTERNET_CACHE_ENTRY_INFOW = PInternetCacheEntryInfoW;
  2438.   {$EXTERNALSYM LPINTERNET_CACHE_ENTRY_INFOW}
  2439.   TInternetCacheEntryInfo = TInternetCacheEntryInfoA;
  2440.  
  2441. { Cache APIs }
  2442.  
  2443. function CreateUrlCacheEntryA(lpszUrlName: PAnsiChar;
  2444.   dwExpectedFileSize: DWORD; lpszFileExtension: PAnsiChar;
  2445.   lpszFileName: PAnsiChar; dwReserved: DWORD): BOOL; stdcall;
  2446.   {$EXTERNALSYM CreateUrlCacheEntryA}
  2447. function CreateUrlCacheEntryW(lpszUrlName: PAnsiChar;
  2448.   dwExpectedFileSize: DWORD; lpszFileExtension: PAnsiChar;
  2449.   lpszFileName: PWideChar; dwReserved: DWORD): BOOL; stdcall;
  2450.   {$EXTERNALSYM CreateUrlCacheEntryW}
  2451. function CreateUrlCacheEntry(lpszUrlName: PAnsiChar;
  2452.   dwExpectedFileSize: DWORD; lpszFileExtension: PAnsiChar;
  2453.   lpszFileName: PChar; dwReserved: DWORD): BOOL; stdcall;
  2454.   {$EXTERNALSYM CreateUrlCacheEntry}
  2455.  
  2456. function CommitUrlCacheEntryA(lpszUrlName, lpszLocalFileName: PAnsiChar;
  2457.   ExpireTime, LastModifiedTime: TFileTime;  CacheEntryType: DWORD;
  2458.   lpHeaderInfo: PBYTE; dwHeaderSize: DWORD; lpszFileExtension: PAnsiChar;
  2459.   dwReserved: DWORD): BOOL; stdcall;
  2460.   {$EXTERNALSYM CommitUrlCacheEntryA}
  2461. function CommitUrlCacheEntryW(lpszUrlName, lpszLocalFileName: PAnsiChar;
  2462.   ExpireTime, LastModifiedTime: TFileTime;  CacheEntryType: DWORD;
  2463.   lpHeaderInfo: PBYTE; dwHeaderSize: DWORD; lpszFileExtension: PWideChar;
  2464.   dwReserved: DWORD): BOOL; stdcall;
  2465.   {$EXTERNALSYM CommitUrlCacheEntryW}
  2466. function CommitUrlCacheEntry(lpszUrlName, lpszLocalFileName: PAnsiChar;
  2467.   ExpireTime, LastModifiedTime: TFileTime;  CacheEntryType: DWORD;
  2468.   lpHeaderInfo: PBYTE; dwHeaderSize: DWORD; lpszFileExtension: PChar;
  2469.   dwReserved: DWORD): BOOL; stdcall;
  2470.   {$EXTERNALSYM CommitUrlCacheEntry}
  2471.  
  2472. function RetrieveUrlCacheEntryFileA(lpszUrlName: PAnsiChar;
  2473.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2474.   var lpdwCacheEntryInfoBufferSize: DWORD;
  2475.   dwReserved: DWORD): BOOL; stdcall;
  2476.   {$EXTERNALSYM RetrieveUrlCacheEntryFileA}
  2477. function RetrieveUrlCacheEntryFileW(lpszUrlName: PAnsiChar;
  2478.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2479.   var lpdwCacheEntryInfoBufferSize: DWORD;
  2480.   dwReserved: DWORD): BOOL; stdcall;
  2481.   {$EXTERNALSYM RetrieveUrlCacheEntryFileW}
  2482. function RetrieveUrlCacheEntryFile(lpszUrlName: PAnsiChar;
  2483.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2484.   var lpdwCacheEntryInfoBufferSize: DWORD;
  2485.   dwReserved: DWORD): BOOL; stdcall;
  2486.   {$EXTERNALSYM RetrieveUrlCacheEntryFile}
  2487.  
  2488. function UnlockUrlCacheEntryFile(lpszUrlName: LPCSTR;
  2489.   dwReserved: DWORD): BOOL; stdcall;
  2490.   {$EXTERNALSYM UnlockUrlCacheEntryFile}
  2491.  
  2492. function RetrieveUrlCacheEntryStreamA(lpszUrlName: PAnsiChar;
  2493.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2494.   var lpdwCacheEntryInfoBufferSize: DWORD; fRandomRead: BOOL;
  2495.   dwReserved: DWORD): BOOL; stdcall;
  2496.   {$EXTERNALSYM RetrieveUrlCacheEntryStreamA}
  2497. function RetrieveUrlCacheEntryStreamW(lpszUrlName: PAnsiChar;
  2498.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2499.   var lpdwCacheEntryInfoBufferSize: DWORD; fRandomRead: BOOL;
  2500.   dwReserved: DWORD): BOOL; stdcall;
  2501.   {$EXTERNALSYM RetrieveUrlCacheEntryStreamW}
  2502. function RetrieveUrlCacheEntryStream(lpszUrlName: PAnsiChar;
  2503.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2504.   var lpdwCacheEntryInfoBufferSize: DWORD; fRandomRead: BOOL;
  2505.   dwReserved: DWORD): BOOL; stdcall;
  2506.   {$EXTERNALSYM RetrieveUrlCacheEntryStream}
  2507.  
  2508. function ReadUrlCacheEntryStream(hUrlCacheStream: THandle;
  2509.   dwLocation: DWORD; var lpBuffer: Pointer;
  2510.   var lpdwLen: DWORD; Reserved: DWORD): BOOL; stdcall;
  2511.   {$EXTERNALSYM ReadUrlCacheEntryStream}
  2512.  
  2513. function UnlockUrlCacheEntryStream(hUrlCacheStream: THandle;
  2514.   Reserved: DWORD): BOOL; stdcall;
  2515.   {$EXTERNALSYM UnlockUrlCacheEntryStream}
  2516.  
  2517. function GetUrlCacheEntryInfoA(lpszUrlName: PAnsiChar;
  2518.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2519.   var lpdwCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2520.   {$EXTERNALSYM GetUrlCacheEntryInfoA}
  2521. function GetUrlCacheEntryInfoW(lpszUrlName: PAnsiChar;
  2522.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2523.   var lpdwCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2524.   {$EXTERNALSYM GetUrlCacheEntryInfoW}
  2525. function GetUrlCacheEntryInfo(lpszUrlName: PAnsiChar;
  2526.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2527.   var lpdwCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2528.   {$EXTERNALSYM GetUrlCacheEntryInfo}
  2529.  
  2530. function GetUrlCacheEntryInfoExA(
  2531.     lpszUrl: PAnsiChar;
  2532.     lpCacheEntryInfo: PInternetCacheEntryInfo;
  2533.     lpdwCacheEntryInfoBufSize: LPDWORD;
  2534.     lpszReserved: PAnsiChar; { must pass nil }
  2535.     lpdwReserved: LPDWORD; { must pass nil }
  2536.     lpReserved: Pointer; { must pass nil }
  2537.     dwFlags: DWORD { reserved }
  2538.     ): BOOL; stdcall;
  2539.   {$EXTERNALSYM GetUrlCacheEntryInfoExA}
  2540. function GetUrlCacheEntryInfoExW(
  2541.     lpszUrl: PAnsiChar;
  2542.     lpCacheEntryInfo: PInternetCacheEntryInfo;
  2543.     lpdwCacheEntryInfoBufSize: LPDWORD;
  2544.     lpszReserved: PAnsiChar; { must pass nil }
  2545.     lpdwReserved: LPDWORD; { must pass nil }
  2546.     lpReserved: Pointer; { must pass nil }
  2547.     dwFlags: DWORD { reserved }
  2548.     ): BOOL; stdcall;
  2549.   {$EXTERNALSYM GetUrlCacheEntryInfoExW}
  2550. function GetUrlCacheEntryInfoEx(
  2551.     lpszUrl: PAnsiChar;
  2552.     lpCacheEntryInfo: PInternetCacheEntryInfo;
  2553.     lpdwCacheEntryInfoBufSize: LPDWORD;
  2554.     lpszReserved: PAnsiChar; { must pass nil }
  2555.     lpdwReserved: LPDWORD; { must pass nil }
  2556.     lpReserved: Pointer; { must pass nil }
  2557.     dwFlags: DWORD { reserved }
  2558.     ): BOOL; stdcall;
  2559.   {$EXTERNALSYM GetUrlCacheEntryInfoEx}
  2560.  
  2561. const
  2562.   CACHE_ENTRY_ATTRIBUTE_FC        = $00000004;
  2563.   {$EXTERNALSYM CACHE_ENTRY_ATTRIBUTE_FC}
  2564.   CACHE_ENTRY_HITRATE_FC          = $00000010;
  2565.   {$EXTERNALSYM CACHE_ENTRY_HITRATE_FC}
  2566.   CACHE_ENTRY_MODTIME_FC          = $00000040;
  2567.   {$EXTERNALSYM CACHE_ENTRY_MODTIME_FC}
  2568.   CACHE_ENTRY_EXPTIME_FC          = $00000080;
  2569.   {$EXTERNALSYM CACHE_ENTRY_EXPTIME_FC}
  2570.   CACHE_ENTRY_ACCTIME_FC          = $00000100;
  2571.   {$EXTERNALSYM CACHE_ENTRY_ACCTIME_FC}
  2572.   CACHE_ENTRY_SYNCTIME_FC         = $00000200;
  2573.   {$EXTERNALSYM CACHE_ENTRY_SYNCTIME_FC}
  2574.   CACHE_ENTRY_HEADERINFO_FC       = $00000400;
  2575.   {$EXTERNALSYM CACHE_ENTRY_HEADERINFO_FC}
  2576.   CACHE_ENTRY_EXEMPT_DELTA_FC     = $00000800;
  2577.   {$EXTERNALSYM CACHE_ENTRY_EXEMPT_DELTA_FC}
  2578.  
  2579. function SetUrlCacheEntryInfoA(lpszUrlName: PAnsiChar;
  2580.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2581.   dwFieldControl: DWORD): BOOL; stdcall;
  2582.   {$EXTERNALSYM SetUrlCacheEntryInfoA}
  2583. function SetUrlCacheEntryInfoW(lpszUrlName: PAnsiChar;
  2584.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2585.   dwFieldControl: DWORD): BOOL; stdcall;
  2586.   {$EXTERNALSYM SetUrlCacheEntryInfoW}
  2587. function SetUrlCacheEntryInfo(lpszUrlName: PAnsiChar;
  2588.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2589.   dwFieldControl: DWORD): BOOL; stdcall;
  2590.   {$EXTERNALSYM SetUrlCacheEntryInfo}
  2591.  
  2592. type
  2593.   GROUPID = Int64;
  2594.   {$EXTERNALSYM GROUPID}
  2595.  
  2596. function CreateUrlCacheGroup(dwFlags: DWORD;
  2597.   lpReserved: Pointer { must pass nill }
  2598.   ): Int64; stdcall;
  2599.   {$EXTERNALSYM CreateUrlCacheGroup}
  2600.  
  2601. function DeleteUrlCacheGroup(GroupId: Int64;
  2602.     dwFlags: DWORD;    { must pass 0 }
  2603.     lpReserved: Pointer { must pass nill }
  2604.     ): Bool; stdcall;
  2605.   {$EXTERNALSYM DeleteUrlCacheGroup}
  2606.  
  2607. { Flags for SetUrlCacheEntryGroup }
  2608.  
  2609. const
  2610.   INTERNET_CACHE_GROUP_ADD      = 0;
  2611.   {$EXTERNALSYM INTERNET_CACHE_GROUP_ADD}
  2612.   INTERNET_CACHE_GROUP_REMOVE   = 1;
  2613.   {$EXTERNALSYM INTERNET_CACHE_GROUP_REMOVE}
  2614.  
  2615. function SetUrlCacheEntryGroup(lpszUrlName: LPCSTR; dwFlags: DWORD;
  2616.   GroupId: Int64;
  2617.   pbGroupAttributes: PChar; { must pass nil }
  2618.   cbGroupAttributes: DWORD;  { must pass 0 }
  2619.   lpReserved: Pointer        { must pass nil }
  2620.   ): Bool; stdcall;
  2621.   {$EXTERNALSYM SetUrlCacheEntryGroup}
  2622.  
  2623. function FindFirstUrlCacheEntryExA(lpszUrlSearchPattern: PAnsiChar;
  2624.     dwFlags: DWORD;
  2625.     dwFilter: DWORD;
  2626.     GroupId: GROUPID;
  2627.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2628.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2629.     lpGroupAttributes: Pointer;  { must pass nil }
  2630.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2631.     lpReserved: Pointer             { must pass nil }
  2632.     ): THandle; stdcall;
  2633.   {$EXTERNALSYM FindFirstUrlCacheEntryExA}
  2634. function FindFirstUrlCacheEntryExW(lpszUrlSearchPattern: PAnsiChar;
  2635.     dwFlags: DWORD;
  2636.     dwFilter: DWORD;
  2637.     GroupId: GROUPID;
  2638.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2639.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2640.     lpGroupAttributes: Pointer;  { must pass nil }
  2641.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2642.     lpReserved: Pointer             { must pass nil }
  2643.     ): THandle; stdcall;
  2644.   {$EXTERNALSYM FindFirstUrlCacheEntryExW}
  2645. function FindFirstUrlCacheEntryEx(lpszUrlSearchPattern: PAnsiChar;
  2646.     dwFlags: DWORD;
  2647.     dwFilter: DWORD;
  2648.     GroupId: GROUPID;
  2649.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2650.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2651.     lpGroupAttributes: Pointer;  { must pass nil }
  2652.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2653.     lpReserved: Pointer             { must pass nil }
  2654.     ): THandle; stdcall;
  2655.   {$EXTERNALSYM FindFirstUrlCacheEntryEx}
  2656.  
  2657. function FindNextUrlCacheEntryExA(hEnumHandle: THANDLE;
  2658.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2659.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2660.     lpGroupAttributes: Pointer;  { must pass nil }
  2661.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2662.     lpReserved: Pointer             { must pass nil }
  2663.     ): BOOL; stdcall;
  2664.   {$EXTERNALSYM FindNextUrlCacheEntryExA}
  2665. function FindNextUrlCacheEntryExW(hEnumHandle: THANDLE;
  2666.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2667.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2668.     lpGroupAttributes: Pointer;  { must pass nil }
  2669.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2670.     lpReserved: Pointer             { must pass nil }
  2671.     ): BOOL; stdcall;
  2672.   {$EXTERNALSYM FindNextUrlCacheEntryExW}
  2673. function FindNextUrlCacheEntryEx(hEnumHandle: THANDLE;
  2674.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2675.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2676.     lpGroupAttributes: Pointer;  { must pass nil }
  2677.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2678.     lpReserved: Pointer             { must pass nil }
  2679.     ): BOOL; stdcall;
  2680.   {$EXTERNALSYM FindNextUrlCacheEntryEx}
  2681.  
  2682. function FindFirstUrlCacheEntryA(lpszUrlSearchPattern: PAnsiChar;
  2683.   var lpFirstCacheEntryInfo: TInternetCacheEntryInfo;
  2684.   var lpdwFirstCacheEntryInfoBufferSize: DWORD): THandle; stdcall;
  2685.   {$EXTERNALSYM FindFirstUrlCacheEntryA}
  2686. function FindFirstUrlCacheEntryW(lpszUrlSearchPattern: PAnsiChar;
  2687.   var lpFirstCacheEntryInfo: TInternetCacheEntryInfo;
  2688.   var lpdwFirstCacheEntryInfoBufferSize: DWORD): THandle; stdcall;
  2689.   {$EXTERNALSYM FindFirstUrlCacheEntryW}
  2690. function FindFirstUrlCacheEntry(lpszUrlSearchPattern: PAnsiChar;
  2691.   var lpFirstCacheEntryInfo: TInternetCacheEntryInfo;
  2692.   var lpdwFirstCacheEntryInfoBufferSize: DWORD): THandle; stdcall;
  2693.   {$EXTERNALSYM FindFirstUrlCacheEntry}
  2694.  
  2695. function FindNextUrlCacheEntryA(hEnumHandle: THandle;
  2696.   var lpNextCacheEntryInfo: TInternetCacheEntryInfo;
  2697.   var lpdwNextCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2698.   {$EXTERNALSYM FindNextUrlCacheEntryA}
  2699. function FindNextUrlCacheEntryW(hEnumHandle: THandle;
  2700.   var lpNextCacheEntryInfo: TInternetCacheEntryInfo;
  2701.   var lpdwNextCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2702.   {$EXTERNALSYM FindNextUrlCacheEntryW}
  2703. function FindNextUrlCacheEntry(hEnumHandle: THandle;
  2704.   var lpNextCacheEntryInfo: TInternetCacheEntryInfo;
  2705.   var lpdwNextCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2706.   {$EXTERNALSYM FindNextUrlCacheEntry}
  2707.  
  2708. function FindCloseUrlCache(hEnumHandle: THandle): BOOL; stdcall;
  2709.   {$EXTERNALSYM FindCloseUrlCache}
  2710.  
  2711. function DeleteUrlCacheEntry(lpszUrlName: LPCSTR): BOOL; stdcall;
  2712.   {$EXTERNALSYM DeleteUrlCacheEntry}
  2713.  
  2714. function InternetDial(hwndParent: HWND; lpszConnectoid: LPTSTR; dwFlags: DWORD;
  2715.   lpdwConnection: LPDWORD; dwReserved: DWORD): DWORD; stdcall;
  2716.   {$EXTERNALSYM InternetDial}
  2717.  
  2718. { Flags for InternetDial - must not conflict with InternetAutodial flags }
  2719. {                          as they are valid here also.                  }
  2720. const
  2721.   INTERNET_DIAL_UNATTENDED       = $8000;
  2722.   {$EXTERNALSYM INTERNET_DIAL_UNATTENDED}
  2723.  
  2724. function InternetHangUp(dwConnection: DWORD; dwReserved: DWORD): DWORD; stdcall;
  2725.   {$EXTERNALSYM InternetHangUp}
  2726.  
  2727. const
  2728.   INTERENT_GOONLINE_REFRESH = $00000001;
  2729.   {$EXTERNALSYM INTERENT_GOONLINE_REFRESH}
  2730.   INTERENT_GOONLINE_MASK    = $00000001;
  2731.   {$EXTERNALSYM INTERENT_GOONLINE_MASK}
  2732.  
  2733. function InternetGoOnline(lpszURL: LPTSTR; hwndParent: HWND;
  2734.   dwFlags: DWORD): BOOL; stdcall;
  2735.   {$EXTERNALSYM InternetGoOnline}
  2736.  
  2737. function InternetAutodial(dwFlags: DWORD; dwReserved: DWORD): BOOL; stdcall;
  2738.   {$EXTERNALSYM InternetAutodial}
  2739.  
  2740. { Flags for InternetAutodial }
  2741. const
  2742.   INTERNET_AUTODIAL_FORCE_ONLINE          = 1;
  2743.   {$EXTERNALSYM INTERNET_AUTODIAL_FORCE_ONLINE}
  2744.   INTERNET_AUTODIAL_FORCE_UNATTENDED      = 2;
  2745.   {$EXTERNALSYM INTERNET_AUTODIAL_FORCE_UNATTENDED}
  2746.   INTERNET_AUTODIAL_FAILIFSECURITYCHECK   = 4;
  2747.   {$EXTERNALSYM INTERNET_AUTODIAL_FAILIFSECURITYCHECK}
  2748.   INTERNET_AUTODIAL_FLAGS_MASK  = INTERNET_AUTODIAL_FORCE_ONLINE or
  2749.                                   INTERNET_AUTODIAL_FORCE_UNATTENDED or
  2750.                                   INTERNET_AUTODIAL_FAILIFSECURITYCHECK;
  2751.   {$EXTERNALSYM INTERNET_AUTODIAL_FLAGS_MASK}
  2752.  
  2753. function InternetAutodialHangup(dwReserved: DWORD): BOOL; stdcall;
  2754.   {$EXTERNALSYM InternetAutodialHangup}
  2755.  
  2756. function InternetGetConnectedState(lpdwFlags: LPDWORD;
  2757.   dwReserved: DWORD): BOOL; stdcall;
  2758.   {$EXTERNALSYM InternetGetConnectedState}
  2759.  
  2760. { Flags for InternetGetConnectedState }
  2761. const
  2762.   INTERNET_CONNECTION_MODEM           = 1;
  2763.   {$EXTERNALSYM INTERNET_CONNECTION_MODEM}
  2764.   INTERNET_CONNECTION_LAN             = 2;
  2765.   {$EXTERNALSYM INTERNET_CONNECTION_LAN}
  2766.   INTERNET_CONNECTION_PROXY           = 4;
  2767.   {$EXTERNALSYM INTERNET_CONNECTION_PROXY}
  2768.   INTERNET_CONNECTION_MODEM_BUSY      = 8;
  2769.   {$EXTERNALSYM INTERNET_CONNECTION_MODEM_BUSY}
  2770.  
  2771. { Custom dial handler functions }
  2772.  
  2773. { Custom dial handler prototype }
  2774. type
  2775.   PFN_DIAL_HANDLER = function(A:HWND; B:LPCSTR; C:DWORD; D:LPDWORD): DWORD; stdcall;
  2776.   {$EXTERNALSYM PFN_DIAL_HANDLER}
  2777.  
  2778. { Flags for custom dial handler }
  2779. const
  2780.   INTERNET_CUSTOMDIAL_CONNECT         = 0;
  2781.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_CONNECT}
  2782.   INTERNET_CUSTOMDIAL_UNATTENDED      = 1;
  2783.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_UNATTENDED}
  2784.   INTERNET_CUSTOMDIAL_DISCONNECT      = 2;
  2785.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_DISCONNECT}
  2786.   INTERNET_CUSTOMDIAL_SHOWOFFLINE     = 4;
  2787.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_SHOWOFFLINE}
  2788.  
  2789. { Custom dial handler supported functionality flags }
  2790.   INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED = 1;
  2791.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED}
  2792.   INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE   = 2;
  2793.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE}
  2794.   INTERNET_CUSTOMDIAL_CAN_HANGUP          = 4;
  2795.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_CAN_HANGUP}
  2796.  
  2797. function InternetSetDialState(lpszConnectoid: LPCTSTR; dwState: DWORD;
  2798.   dwReserved: DWORD): BOOL; stdcall;
  2799.   {$EXTERNALSYM InternetSetDialState}
  2800.  
  2801. implementation
  2802.  
  2803. const
  2804.   winetdll = 'wininet.dll';
  2805.  
  2806. function CommitUrlCacheEntryA;          external winetdll name 'CommitUrlCacheEntryA';
  2807. function CommitUrlCacheEntryW;          external winetdll name 'CommitUrlCacheEntryW';
  2808. function CommitUrlCacheEntry;          external winetdll name 'CommitUrlCacheEntryA';
  2809. function CreateUrlCacheEntryA;          external winetdll name 'CreateUrlCacheEntryA';
  2810. function CreateUrlCacheEntryW;          external winetdll name 'CreateUrlCacheEntryW';
  2811. function CreateUrlCacheEntry;          external winetdll name 'CreateUrlCacheEntryA';
  2812. function DeleteUrlCacheEntry;             external winetdll name 'DeleteUrlCacheEntry';
  2813. function FindCloseUrlCache;               external winetdll name 'FindCloseUrlCache';
  2814. function FindFirstUrlCacheEntryA;       external winetdll name 'FindFirstUrlCacheEntryA';
  2815. function FindFirstUrlCacheEntryW;       external winetdll name 'FindFirstUrlCacheEntryW';
  2816. function FindFirstUrlCacheEntry;       external winetdll name 'FindFirstUrlCacheEntryA';
  2817. function FindNextUrlCacheEntryA;        external winetdll name 'FindNextUrlCacheEntryA';
  2818. function FindNextUrlCacheEntryW;        external winetdll name 'FindNextUrlCacheEntryW';
  2819. function FindNextUrlCacheEntry;        external winetdll name 'FindNextUrlCacheEntryA';
  2820. function FtpCommandA;                   external winetdll name 'FtpCommandA';
  2821. function FtpCommandW;                   external winetdll name 'FtpCommandW';
  2822. function FtpCommand;                   external winetdll name 'FtpCommandA';
  2823. function FtpCreateDirectoryA;           external winetdll name 'FtpCreateDirectoryA';
  2824. function FtpCreateDirectoryW;           external winetdll name 'FtpCreateDirectoryW';
  2825. function FtpCreateDirectory;           external winetdll name 'FtpCreateDirectoryA';
  2826. function FtpDeleteFileA;                external winetdll name 'FtpDeleteFileA';
  2827. function FtpDeleteFileW;                external winetdll name 'FtpDeleteFileW';
  2828. function FtpDeleteFile;                external winetdll name 'FtpDeleteFileA';
  2829. function FtpFindFirstFileA;             external winetdll name 'FtpFindFirstFileA';
  2830. function FtpFindFirstFileW;             external winetdll name 'FtpFindFirstFileW';
  2831. function FtpFindFirstFile;             external winetdll name 'FtpFindFirstFileA';
  2832. function FtpGetCurrentDirectoryA;       external winetdll name 'FtpGetCurrentDirectoryA';
  2833. function FtpGetCurrentDirectoryW;       external winetdll name 'FtpGetCurrentDirectoryW';
  2834. function FtpGetCurrentDirectory;       external winetdll name 'FtpGetCurrentDirectoryA';
  2835. function FtpGetFileA;                   external winetdll name 'FtpGetFileA';
  2836. function FtpGetFileW;                   external winetdll name 'FtpGetFileW';
  2837. function FtpGetFile;                   external winetdll name 'FtpGetFileA';
  2838. function FtpOpenFileA;                  external winetdll name 'FtpOpenFileA';
  2839. function FtpOpenFileW;                  external winetdll name 'FtpOpenFileW';
  2840. function FtpOpenFile;                  external winetdll name 'FtpOpenFileA';
  2841. function FtpPutFileA;                   external winetdll name 'FtpPutFileA';
  2842. function FtpPutFileW;                   external winetdll name 'FtpPutFileW';
  2843. function FtpPutFile;                   external winetdll name 'FtpPutFileA';
  2844. function FtpRemoveDirectoryA;           external winetdll name 'FtpRemoveDirectoryA';
  2845. function FtpRemoveDirectoryW;           external winetdll name 'FtpRemoveDirectoryW';
  2846. function FtpRemoveDirectory;           external winetdll name 'FtpRemoveDirectoryA';
  2847. function FtpRenameFileA;                external winetdll name 'FtpRenameFileA';
  2848. function FtpRenameFileW;                external winetdll name 'FtpRenameFileW';
  2849. function FtpRenameFile;                external winetdll name 'FtpRenameFileA';
  2850. function FtpSetCurrentDirectoryA;       external winetdll name 'FtpSetCurrentDirectoryA';
  2851. function FtpSetCurrentDirectoryW;       external winetdll name 'FtpSetCurrentDirectoryW';
  2852. function FtpSetCurrentDirectory;       external winetdll name 'FtpSetCurrentDirectoryA';
  2853. function GetUrlCacheEntryInfoA;         external winetdll name 'GetUrlCacheEntryInfoA';
  2854. function GetUrlCacheEntryInfoW;         external winetdll name 'GetUrlCacheEntryInfoW';
  2855. function GetUrlCacheEntryInfo;         external winetdll name 'GetUrlCacheEntryInfoA';
  2856. function GopherCreateLocatorA;          external winetdll name 'GopherCreateLocatorA';
  2857. function GopherCreateLocatorW;          external winetdll name 'GopherCreateLocatorW';
  2858. function GopherCreateLocator;          external winetdll name 'GopherCreateLocatorA';
  2859. function GopherFindFirstFileA;          external winetdll name 'GopherFindFirstFileA';
  2860. function GopherFindFirstFileW;          external winetdll name 'GopherFindFirstFileW';
  2861. function GopherFindFirstFile;          external winetdll name 'GopherFindFirstFileA';
  2862. function GopherGetAttributeA;           external winetdll name 'GopherGetAttributeA';
  2863. function GopherGetAttributeW;           external winetdll name 'GopherGetAttributeW';
  2864. function GopherGetAttribute;           external winetdll name 'GopherGetAttributeA';
  2865. function GopherGetLocatorTypeA;         external winetdll name 'GopherGetLocatorTypeA';
  2866. function GopherGetLocatorTypeW;         external winetdll name 'GopherGetLocatorTypeW';
  2867. function GopherGetLocatorType;         external winetdll name 'GopherGetLocatorTypeA';
  2868. function GopherOpenFileA;               external winetdll name 'GopherOpenFileA';
  2869. function GopherOpenFileW;               external winetdll name 'GopherOpenFileW';
  2870. function GopherOpenFile;               external winetdll name 'GopherOpenFileA';
  2871. function HttpAddRequestHeadersA;        external winetdll name 'HttpAddRequestHeadersA';
  2872. function HttpAddRequestHeadersW;        external winetdll name 'HttpAddRequestHeadersW';
  2873. function HttpAddRequestHeaders;        external winetdll name 'HttpAddRequestHeadersA';
  2874. function HttpOpenRequestA;              external winetdll name 'HttpOpenRequestA';
  2875. function HttpOpenRequestW;              external winetdll name 'HttpOpenRequestW';
  2876. function HttpOpenRequest;              external winetdll name 'HttpOpenRequestA';
  2877. function HttpQueryInfoA;                external winetdll name 'HttpQueryInfoA';
  2878. function HttpQueryInfoW;                external winetdll name 'HttpQueryInfoW';
  2879. function HttpQueryInfo;                external winetdll name 'HttpQueryInfoA';
  2880. function HttpSendRequestA;              external winetdll name 'HttpSendRequestA';
  2881. function HttpSendRequestW;              external winetdll name 'HttpSendRequestW';
  2882. function HttpSendRequest;              external winetdll name 'HttpSendRequestA';
  2883. function InternetCanonicalizeUrlA;      external winetdll name 'InternetCanonicalizeUrlA';
  2884. function InternetCanonicalizeUrlW;      external winetdll name 'InternetCanonicalizeUrlW';
  2885. function InternetCanonicalizeUrl;      external winetdll name 'InternetCanonicalizeUrlA';
  2886. function InternetCloseHandle;             external winetdll name 'InternetCloseHandle';
  2887. function InternetCombineUrlA;           external winetdll name 'InternetCombineUrlA';
  2888. function InternetCombineUrlW;           external winetdll name 'InternetCombineUrlW';
  2889. function InternetCombineUrl;           external winetdll name 'InternetCombineUrlA';
  2890. function InternetConfirmZoneCrossing;     external winetdll name 'InternetConfirmZoneCrossing';
  2891. function InternetConnectA;              external winetdll name 'InternetConnectA';
  2892. function InternetConnectW;              external winetdll name 'InternetConnectW';
  2893. function InternetConnect;              external winetdll name 'InternetConnectA';
  2894. function InternetCrackUrlA;             external winetdll name 'InternetCrackUrlA';
  2895. function InternetCrackUrlW;             external winetdll name 'InternetCrackUrlW';
  2896. function InternetCrackUrl;             external winetdll name 'InternetCrackUrlA';
  2897. function InternetCreateUrlA;            external winetdll name 'InternetCreateUrlA';
  2898. function InternetCreateUrlW;            external winetdll name 'InternetCreateUrlW';
  2899. function InternetCreateUrl;            external winetdll name 'InternetCreateUrlA';
  2900. function InternetErrorDlg;                external winetdll name 'InternetErrorDlg';
  2901. function InternetFindNextFileA;         external winetdll name 'InternetFindNextFileA';
  2902. function InternetFindNextFileW;         external winetdll name 'InternetFindNextFileW';
  2903. function InternetFindNextFile;         external winetdll name 'InternetFindNextFileA';
  2904. function InternetGetCookieA;            external winetdll name 'InternetGetCookieA';
  2905. function InternetGetCookieW;            external winetdll name 'InternetGetCookieW';
  2906. function InternetGetCookie;            external winetdll name 'InternetGetCookieA';
  2907. function InternetGetLastResponseInfoA;  external winetdll name 'InternetGetLastResponseInfoA';
  2908. function InternetGetLastResponseInfoW;  external winetdll name 'InternetGetLastResponseInfoW';
  2909. function InternetGetLastResponseInfo;  external winetdll name 'InternetGetLastResponseInfoA';
  2910. function InternetOpenA;                 external winetdll name 'InternetOpenA';
  2911. function InternetOpenW;                 external winetdll name 'InternetOpenW';
  2912. function InternetOpen;                 external winetdll name 'InternetOpenA';
  2913. function InternetOpenUrlA;              external winetdll name 'InternetOpenUrlA';
  2914. function InternetOpenUrlW;              external winetdll name 'InternetOpenUrlW';
  2915. function InternetOpenUrl;              external winetdll name 'InternetOpenUrlA';
  2916. function InternetQueryDataAvailable;      external winetdll name 'InternetQueryDataAvailable';
  2917. function InternetQueryOptionA;          external winetdll name 'InternetQueryOptionA';
  2918. function InternetQueryOptionW;          external winetdll name 'InternetQueryOptionW';
  2919. function InternetQueryOption;          external winetdll name 'InternetQueryOptionA';
  2920. function InternetReadFile;                external winetdll name 'InternetReadFile';
  2921. function InternetSetCookieA;            external winetdll name 'InternetSetCookieA';
  2922. function InternetSetCookieW;            external winetdll name 'InternetSetCookieW';
  2923. function InternetSetCookie;            external winetdll name 'InternetSetCookieA';
  2924. function InternetSetFilePointer;          external winetdll name 'InternetSetFilePointer';
  2925. function InternetSetOptionA;            external winetdll name 'InternetSetOptionA';
  2926. function InternetSetOptionW;            external winetdll name 'InternetSetOptionW';
  2927. function InternetSetOption;            external winetdll name 'InternetSetOptionA';
  2928. function InternetSetOptionExA;          external winetdll name 'InternetSetOptionExA';
  2929. function InternetSetOptionExW;          external winetdll name 'InternetSetOptionExW';
  2930. function InternetSetOptionEx;          external winetdll name 'InternetSetOptionExA';
  2931. function InternetSetStatusCallback;       external winetdll name 'InternetSetStatusCallback';
  2932. function InternetTimeFromSystemTime;      external winetdll name 'InternetTimeFromSystemTime';
  2933. function InternetWriteFile;               external winetdll name 'InternetWriteFile';
  2934. function ReadUrlCacheEntryStream;         external winetdll name 'ReadUrlCacheEntryStream';
  2935. function RetrieveUrlCacheEntryFileA;    external winetdll name 'RetrieveUrlCacheEntryFileA';
  2936. function RetrieveUrlCacheEntryFileW;    external winetdll name 'RetrieveUrlCacheEntryFileW';
  2937. function RetrieveUrlCacheEntryFile;    external winetdll name 'RetrieveUrlCacheEntryFileA';
  2938. function RetrieveUrlCacheEntryStreamA;  external winetdll name 'RetrieveUrlCacheEntryStreamA';
  2939. function RetrieveUrlCacheEntryStreamW;  external winetdll name 'RetrieveUrlCacheEntryStreamW';
  2940. function RetrieveUrlCacheEntryStream;  external winetdll name 'RetrieveUrlCacheEntryStreamA';
  2941. function SetUrlCacheEntryInfoA;         external winetdll name 'SetUrlCacheEntryInfoA';
  2942. function SetUrlCacheEntryInfoW;         external winetdll name 'SetUrlCacheEntryInfoW';
  2943. function SetUrlCacheEntryInfo;         external winetdll name 'SetUrlCacheEntryInfoA';
  2944. function UnlockUrlCacheEntryFile;         external winetdll name 'UnlockUrlCacheEntryFile';
  2945. function UnlockUrlCacheEntryStream;       external winetdll name 'UnlockUrlCacheEntryStream';
  2946.  
  2947. function CreateUrlCacheGroup;             external winetdll name 'CreateUrlCacheGroup';
  2948. function DeleteUrlCacheGroup;             external winetdll name 'DeleteUrlCacheGroup';
  2949. function FindFirstUrlCacheEntryExA;     external winetdll name 'FindFirstUrlCacheEntryExA';
  2950. function FindFirstUrlCacheEntryExW;     external winetdll name 'FindFirstUrlCacheEntryExW';
  2951. function FindFirstUrlCacheEntryEx;     external winetdll name 'FindFirstUrlCacheEntryExA';
  2952. function FindNextUrlCacheEntryExA;      external winetdll name 'FindNextUrlCacheEntryExA';
  2953. function FindNextUrlCacheEntryExW;      external winetdll name 'FindNextUrlCacheEntryExW';
  2954. function FindNextUrlCacheEntryEx;      external winetdll name 'FindNextUrlCacheEntryExA';
  2955. function GetUrlCacheEntryInfoExA;       external winetdll name 'GetUrlCacheEntryInfoExA';
  2956. function GetUrlCacheEntryInfoExW;       external winetdll name 'GetUrlCacheEntryInfoExW';
  2957. function GetUrlCacheEntryInfoEx;       external winetdll name 'GetUrlCacheEntryInfoExA';
  2958. function HttpEndRequestA;               external winetdll name 'HttpEndRequestA';
  2959. function HttpEndRequestW;               external winetdll name 'HttpEndRequestW';
  2960. function HttpEndRequest;               external winetdll name 'HttpEndRequestA';
  2961. function InternetAttemptConnect;          external winetdll name 'InternetAttemptConnect';
  2962. function InternetAuthNotifyCallback;      external winetdll name 'InternetAuthNotifyCallback';
  2963. function InternetAutodial;                external winetdll name 'InternetAutodial';
  2964. function InternetAutodialHangup;          external winetdll name 'InternetAutodialHangup';
  2965. function InternetCheckConnectionA;      external winetdll name 'InternetCheckConnectionA';
  2966. function InternetCheckConnectionW;      external winetdll name 'InternetCheckConnectionW';
  2967. function InternetCheckConnection;      external winetdll name 'InternetCheckConnectionA';
  2968. function InternetDial;                    external winetdll name 'InternetDial';
  2969. function InternetGetConnectedState;       external winetdll name 'InternetGetConnectedState';
  2970. function InternetGoOnline;                external winetdll name 'InternetGoOnline';
  2971. function InternetHangUp;                  external winetdll name 'InternetHangUp';
  2972. function InternetLockRequestFile;         external winetdll name 'InternetLockRequestFile';
  2973. function InternetReadFileExA;           external winetdll name 'InternetReadFileExA';
  2974. function InternetReadFileExW;           external winetdll name 'InternetReadFileExW';
  2975. function InternetReadFileEx;           external winetdll name 'InternetReadFileExA';
  2976. function InternetSetDialState;            external winetdll name 'InternetSetDialState';
  2977. function InternetUnlockRequestFile;       external winetdll name 'InternetUnlockRequestFile';
  2978. function SetUrlCacheEntryGroup;           external winetdll name 'SetUrlCacheEntryGroup';
  2979. function HttpSendRequestExA;            external winetdll name 'HttpSendRequestExA';
  2980. function HttpSendRequestExW;            external winetdll name 'HttpSendRequestExW';
  2981. function HttpSendRequestEx;            external winetdll name 'HttpSendRequestExA';
  2982.  
  2983.  
  2984.  
  2985. function IS_GOPHER_FILE(GopherType: DWORD): BOOL;
  2986. begin
  2987.   Result := GopherType and GOPHER_TYPE_FILE_MASK = 0;
  2988. end;
  2989.  
  2990. function IS_GOPHER_DIRECTORY(GopherType: DWORD): BOOL;
  2991. begin
  2992.   Result := GopherType and GOPHER_TYPE_DIRECTORY = 0;
  2993. end;
  2994.  
  2995. function IS_GOPHER_PHONE_SERVER(GopherType: DWORD): BOOL;
  2996. begin
  2997.   Result := GopherType and GOPHER_TYPE_CSO = 0;
  2998. end;
  2999.  
  3000. function IS_GOPHER_ERROR(GopherType: DWORD): BOOL;
  3001. begin
  3002.   Result := GopherType and GOPHER_TYPE_ERROR = 0;
  3003. end;
  3004.  
  3005. function IS_GOPHER_INDEX_SERVER(GopherType: DWORD): BOOL;
  3006. begin
  3007.   Result := GopherType and GOPHER_TYPE_INDEX_SERVER = 0;
  3008. end;
  3009.  
  3010. function IS_GOPHER_TELNET_SESSION(GopherType: DWORD): BOOL;
  3011. begin
  3012.   Result := GopherType and GOPHER_TYPE_TELNET = 0;
  3013. end;
  3014.  
  3015. function IS_GOPHER_BACKUP_SERVER(GopherType: DWORD): BOOL;
  3016. begin
  3017.   Result := GopherType and GOPHER_TYPE_REDUNDANT = 0;
  3018. end;
  3019.  
  3020. function IS_GOPHER_TN3270_SESSION(GopherType: DWORD): BOOL;
  3021. begin
  3022.   Result := GopherType and GOPHER_TYPE_TN3270 = 0;
  3023. end;
  3024.  
  3025. function IS_GOPHER_ASK(GopherType: DWORD): BOOL;
  3026. begin
  3027.   Result := GopherType and GOPHER_TYPE_ASK = 0;
  3028. end;
  3029.  
  3030. function IS_GOPHER_PLUS(GopherType: DWORD): BOOL;
  3031. begin
  3032.   Result := GopherType and GOPHER_TYPE_GOPHER_PLUS = 0;
  3033. end;
  3034.  
  3035. function IS_GOPHER_TYPE_KNOWN(GopherType: DWORD): BOOL;
  3036. begin
  3037.   Result := GopherType and GOPHER_TYPE_UNKNOWN = 0;
  3038. end;
  3039.  
  3040. end.
  3041.