home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / wininet.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  99KB  |  3,063 lines

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