diff options
Diffstat (limited to 'public/sdk/inc/wininet.h')
-rw-r--r-- | public/sdk/inc/wininet.h | 2510 |
1 files changed, 2510 insertions, 0 deletions
diff --git a/public/sdk/inc/wininet.h b/public/sdk/inc/wininet.h new file mode 100644 index 000000000..8329a2ef4 --- /dev/null +++ b/public/sdk/inc/wininet.h @@ -0,0 +1,2510 @@ +/*++ + +Copyright (c) 1995-1996 Microsoft Corporation + +Module Name: + + wininet.h + +Abstract: + + Contains manifests, macros, types and prototypes for Microsoft Windows + Internet Extensions + +--*/ + +#if !defined(_WININET_) +#define _WININET_ + +#if defined(__cplusplus) +extern "C" { +#endif + +#if !defined(_WINX32_) +#define INTERNETAPI DECLSPEC_IMPORT +#else +#define INTERNETAPI +#endif + +// +// internet types +// + +typedef LPVOID HINTERNET; +typedef HINTERNET * LPHINTERNET; + +typedef WORD INTERNET_PORT; +typedef INTERNET_PORT * LPINTERNET_PORT; + +// +// Internet APIs +// + +// +// manifests +// + +#define INTERNET_INVALID_PORT_NUMBER 0 // use the protocol-specific default + +#define INTERNET_DEFAULT_FTP_PORT 21 // default for FTP servers +#define INTERNET_DEFAULT_GOPHER_PORT 70 // " " gopher " +#define INTERNET_DEFAULT_HTTP_PORT 80 // " " HTTP " +#define INTERNET_DEFAULT_HTTPS_PORT 443 // " " HTTPS " + +#define MAX_CACHE_ENTRY_INFO_SIZE 4096 + +// +// maximum field lengths (arbitrary) +// + +#define INTERNET_MAX_HOST_NAME_LENGTH 256 +#define INTERNET_MAX_USER_NAME_LENGTH 128 +#define INTERNET_MAX_PASSWORD_LENGTH 128 +#define INTERNET_MAX_PORT_NUMBER_LENGTH 5 // INTERNET_PORT is unsigned short +#define INTERNET_MAX_PORT_NUMBER_VALUE 65535 // maximum unsigned short value +#define INTERNET_MAX_PATH_LENGTH 1024 +#define INTERNET_MAX_PROTOCOL_NAME "gopher" // longest protocol name +#define INTERNET_MAX_URL_LENGTH ((sizeof(INTERNET_MAX_PROTOCOL_NAME) - 1) \ + + sizeof("://") \ + + INTERNET_MAX_PATH_LENGTH) + +// +// values returned by InternetQueryOption() with INTERNET_OPTION_KEEP_CONNECTION: +// + +#define INTERNET_KEEP_ALIVE_UNKNOWN ((DWORD)-1) +#define INTERNET_KEEP_ALIVE_ENABLED 1 +#define INTERNET_KEEP_ALIVE_DISABLED 0 + +// +// flags returned by InternetQueryOption() with INTERNET_OPTION_REQUEST_FLAGS +// + +#define INTERNET_REQFLAG_FROM_CACHE 0x00000001 +#define INTERNET_REQFLAG_ASYNC 0x00000002 + +// +// flags common to open functions (not InternetOpen()): +// + +#define INTERNET_FLAG_RELOAD 0x80000000 // retrieve the original item + +// +// flags for InternetOpenUrl(): +// + +#define INTERNET_FLAG_RAW_DATA 0x40000000 // receive the item as raw data +#define INTERNET_FLAG_EXISTING_CONNECT 0x20000000 // do not create new connection object + +// +// flags for InternetOpen(): +// + +#define INTERNET_FLAG_ASYNC 0x10000000 // this request is asynchronous (where supported) + +// +// protocol-specific flags: +// + +#define INTERNET_FLAG_PASSIVE 0x08000000 // used for FTP connections + +// +// additional cache flags +// + +#define INTERNET_FLAG_NO_CACHE_WRITE 0x04000000 // don't write this item to the cache +#define INTERNET_FLAG_DONT_CACHE INTERNET_FLAG_NO_CACHE_WRITE + +#define INTERNET_FLAG_MAKE_PERSISTENT 0x02000000 // make this item persistent in cache + +#define INTERNET_FLAG_OFFLINE 0x01000000 // use offline semantics + +// +// additional flags +// + +#define INTERNET_FLAG_SECURE 0x00800000 // use PCT/SSL if applicable (HTTP) + +#define INTERNET_FLAG_KEEP_CONNECTION 0x00400000 // use keep-alive semantics + +#define INTERNET_FLAG_NO_AUTO_REDIRECT 0x00200000 // don't handle redirections automatically + +#define INTERNET_FLAG_READ_PREFETCH 0x00100000 // do background read prefetch + +// +// Security Ignore Flags, Allow HttpOpenRequest to overide +// Secure Channel (SSL/PCT) failures of the following types. +// + +#define INTERNET_FLAG_IGNORE_CERT_CN_INVALID 0x00001000 // bad common name in X509 Cert. + +#define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID 0x00002000 // expired X509 Cert. + +#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS 0x00004000 // ex: http:// to https:// + +#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP 0x00008000 // ex: https:// to http:// + +// +// flags for FTP +// + +#define INTERNET_FLAG_TRANSFER_ASCII FTP_TRANSFER_TYPE_ASCII +#define INTERNET_FLAG_TRANSFER_BINARY FTP_TRANSFER_TYPE_BINARY + +// +// flags field masks +// + +#define SECURITY_INTERNET_MASK (INTERNET_FLAG_IGNORE_CERT_CN_INVALID | \ + INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | \ + INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS | \ + INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP ) + +#define SECURITY_SET_MASK SECURITY_INTERNET_MASK + +#define INTERNET_FLAGS_MASK (INTERNET_FLAG_RELOAD \ + | INTERNET_FLAG_RAW_DATA \ + | INTERNET_FLAG_EXISTING_CONNECT \ + | INTERNET_FLAG_ASYNC \ + | INTERNET_FLAG_PASSIVE \ + | INTERNET_FLAG_DONT_CACHE \ + | INTERNET_FLAG_MAKE_PERSISTENT \ + | INTERNET_FLAG_OFFLINE \ + | INTERNET_FLAG_SECURE \ + | INTERNET_FLAG_KEEP_CONNECTION \ + | INTERNET_FLAG_NO_AUTO_REDIRECT \ + | INTERNET_FLAG_READ_PREFETCH \ + | SECURITY_INTERNET_MASK \ + | INTERNET_FLAG_TRANSFER_ASCII \ + | INTERNET_FLAG_TRANSFER_BINARY \ + ) + +#define INTERNET_OPTIONS_MASK (~INTERNET_FLAGS_MASK) + +// +// INTERNET_NO_CALLBACK - if this value is presented as the dwContext parameter +// then no call-backs will be made for that API +// + +#define INTERNET_NO_CALLBACK 0 + +// +// structures/types +// + +// +// INTERNET_SCHEME - enumerated URL scheme type +// + +typedef enum { + INTERNET_SCHEME_PARTIAL = -2, + INTERNET_SCHEME_UNKNOWN = -1, + INTERNET_SCHEME_DEFAULT = 0, + INTERNET_SCHEME_FTP, + INTERNET_SCHEME_GOPHER, + INTERNET_SCHEME_HTTP, + INTERNET_SCHEME_HTTPS, + INTERNET_SCHEME_FILE, + INTERNET_SCHEME_NEWS, + INTERNET_SCHEME_MAILTO, + INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP, + INTERNET_SCHEME_LAST = INTERNET_SCHEME_MAILTO +} INTERNET_SCHEME, * LPINTERNET_SCHEME; + +// +// INTERNET_ASYNC_RESULT - this structure is returned to the application via +// the callback with INTERNET_STATUS_REQUEST_COMPLETE. It is not sufficient to +// just return the result of the async operation. If the API failed then the +// app cannot call GetLastError() because the thread context will be incorrect. +// Both the value returned by the async API and any resultant error code are +// made available. The app need not check dwError if dwResult indicates that +// the API succeeded (in this case dwError will be ERROR_SUCCESS) +// + +typedef struct { + + // + // dwResult - the HINTERNET, DWORD or BOOL return code from an async API + // + + DWORD dwResult; + + // + // dwError - the error code if the API failed + // + + DWORD dwError; +} INTERNET_ASYNC_RESULT, * LPINTERNET_ASYNC_RESULT; + +// +// INTERNET_PREFETCH_STATUS - +// + +typedef struct { + + // + // dwStatus - status of download. See INTERNET_PREFETCH_ flags + // + + DWORD dwStatus; + + // + // dwSize - size of file downloaded so far + // + + DWORD dwSize; +} INTERNET_PREFETCH_STATUS, * LPINTERNET_PREFETCH_STATUS; + +// +// INTERNET_PREFETCH_STATUS - dwStatus values +// + +#define INTERNET_PREFETCH_PROGRESS 0 +#define INTERNET_PREFETCH_COMPLETE 1 +#define INTERNET_PREFETCH_ABORTED 2 + +// +// INTERNET_PROXY_INFO - structure supplied with INTERNET_OPTION_PROXY to get/ +// set proxy information on a InternetOpen() handle +// + +typedef struct { + + // + // dwAccessType - INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or + // INTERNET_OPEN_TYPE_PRECONFIG (set only) + // + + DWORD dwAccessType; + + // + // lpszProxy - proxy server list + // + + LPCTSTR lpszProxy; + + // + // lpszProxyBypass - proxy bypass list + // + + LPCTSTR lpszProxyBypass; +} INTERNET_PROXY_INFO, * LPINTERNET_PROXY_INFO; + +// +// URL_COMPONENTS - the constituent parts of an URL. Used in InternetCrackUrl() +// and InternetCreateUrl() +// +// For InternetCrackUrl(), if a pointer field and its corresponding length field +// are both 0 then that component is not returned; If the pointer field is NULL +// but the length field is not zero, then both the pointer and length fields are +// returned; if both pointer and corresponding length fields are non-zero then +// the pointer field points to a buffer where the component is copied. The +// component may be un-escaped, depending on dwFlags +// +// For InternetCreateUrl(), the pointer fields should be NULL if the component +// is not required. If the corresponding length field is zero then the pointer +// field is the address of a zero-terminated string. If the length field is not +// zero then it is the string length of the corresponding pointer field +// + +typedef struct { + DWORD dwStructSize; // size of this structure. Used in version check + LPTSTR lpszScheme; // pointer to scheme name + DWORD dwSchemeLength; // length of scheme name + INTERNET_SCHEME nScheme; // enumerated scheme type (if known) + LPTSTR lpszHostName; // pointer to host name + DWORD dwHostNameLength; // length of host name + INTERNET_PORT nPort; // converted port number + LPTSTR lpszUserName; // pointer to user name + DWORD dwUserNameLength; // length of user name + LPTSTR lpszPassword; // pointer to password + DWORD dwPasswordLength; // length of password + LPTSTR lpszUrlPath; // pointer to URL-path + DWORD dwUrlPathLength; // length of URL-path + LPTSTR lpszExtraInfo; // pointer to extra information (e.g. ?foo or #foo) + DWORD dwExtraInfoLength; // length of extra information +} URL_COMPONENTS, * LPURL_COMPONENTS; + +// +// INTERNET_CERTIFICATE_INFO lpBuffer - contains the certificate returned from +// the server +// + +typedef struct { + + // + // ftExpiry - date the certificate expires. + // + + FILETIME ftExpiry; + + // + // ftStart - date the certificate becomes valid. + // + + FILETIME ftStart; + + // + // lpszSubjectInfo - the name of organization, site, and server + // the cert. was issued for. + // + + LPTSTR lpszSubjectInfo; + + // + // lpszIssuerInfo - the name of orgainzation, site, and server + // the cert was issues by. + // + + LPTSTR lpszIssuerInfo; + + // + // lpszProtocolName - the name of the protocol used to provide the secure + // connection. + // + + LPTSTR lpszProtocolName; + + // + // lpszSignatureAlgName - the name of the algorithm used for signing + // the certificate. + // + + LPTSTR lpszSignatureAlgName; + + // + // lpszEncryptionAlgName - the name of the algorithm used for + // doing encryption over the secure channel (SSL/PCT) connection. + // + + LPTSTR lpszEncryptionAlgName; + + // + // dwKeySize - size of the key. + // + + DWORD dwKeySize; + +} INTERNET_CERTIFICATE_INFO, * LPINTERNET_CERTIFICATE_INFO; + +// +// prototypes +// + +INTERNETAPI +BOOL +WINAPI +InternetTimeFromSystemTime( + IN CONST SYSTEMTIME *pst, // input GMT time + IN DWORD dwRFC, // RFC format + OUT LPSTR lpszTime, // output string buffer + IN DWORD cbTime // output buffer size + ); + +// +// constants for InternetTimeFromSystemTime +// + +#define INTERNET_RFC1123_FORMAT 0 +#define INTERNET_RFC1123_BUFSIZE 30 + +INTERNETAPI +BOOL +WINAPI +InternetCrackUrlA( + IN LPCSTR lpszUrl, + IN DWORD dwUrlLength, + IN DWORD dwFlags, + IN OUT LPURL_COMPONENTS lpUrlComponents + ); +INTERNETAPI +BOOL +WINAPI +InternetCrackUrlW( + IN LPCWSTR lpszUrl, + IN DWORD dwUrlLength, + IN DWORD dwFlags, + IN OUT LPURL_COMPONENTS lpUrlComponents + ); +#ifdef UNICODE +#define InternetCrackUrl InternetCrackUrlW +#else +#define InternetCrackUrl InternetCrackUrlA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +InternetCreateUrlA( + IN LPURL_COMPONENTS lpUrlComponents, + IN DWORD dwFlags, + OUT LPSTR lpszUrl, + IN OUT LPDWORD lpdwUrlLength + ); +INTERNETAPI +BOOL +WINAPI +InternetCreateUrlW( + IN LPURL_COMPONENTS lpUrlComponents, + IN DWORD dwFlags, + OUT LPWSTR lpszUrl, + IN OUT LPDWORD lpdwUrlLength + ); +#ifdef UNICODE +#define InternetCreateUrl InternetCreateUrlW +#else +#define InternetCreateUrl InternetCreateUrlA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +InternetCanonicalizeUrlA( + IN LPCSTR lpszUrl, + OUT LPSTR lpszBuffer, + IN OUT LPDWORD lpdwBufferLength, + IN DWORD dwFlags + ); +INTERNETAPI +BOOL +WINAPI +InternetCanonicalizeUrlW( + IN LPCWSTR lpszUrl, + OUT LPWSTR lpszBuffer, + IN OUT LPDWORD lpdwBufferLength, + IN DWORD dwFlags + ); +#ifdef UNICODE +#define InternetCanonicalizeUrl InternetCanonicalizeUrlW +#else +#define InternetCanonicalizeUrl InternetCanonicalizeUrlA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +InternetCombineUrlA( + IN LPCSTR lpszBaseUrl, + IN LPCSTR lpszRelativeUrl, + OUT LPSTR lpszBuffer, + IN OUT LPDWORD lpdwBufferLength, + IN DWORD dwFlags + ); +INTERNETAPI +BOOL +WINAPI +InternetCombineUrlW( + IN LPCWSTR lpszBaseUrl, + IN LPCWSTR lpszRelativeUrl, + OUT LPWSTR lpszBuffer, + IN OUT LPDWORD lpdwBufferLength, + IN DWORD dwFlags + ); +#ifdef UNICODE +#define InternetCombineUrl InternetCombineUrlW +#else +#define InternetCombineUrl InternetCombineUrlA +#endif // !UNICODE + +// +// flags for InternetCrackUrl() and InternetCreateUrl() +// + +#define ICU_ESCAPE 0x80000000 // (un)escape URL characters +#define ICU_USERNAME 0x40000000 // use internal username & password + +// +// flags for InternetCanonicalizeUrl() and InternetCombineUrl() +// + +#define ICU_NO_ENCODE 0x20000000 // Don't convert unsafe characters to escape sequence +#define ICU_DECODE 0x10000000 // Convert %XX escape sequences to characters +#define ICU_NO_META 0x08000000 // Don't convert .. etc. meta path sequences +#define ICU_ENCODE_SPACES_ONLY 0x04000000 // Encode spaces only + +INTERNETAPI +HINTERNET +WINAPI +InternetOpenA( + IN LPCSTR lpszAgent, + IN DWORD dwAccessType, + IN LPCSTR lpszProxy OPTIONAL, + IN LPCSTR lpszProxyBypass OPTIONAL, + IN DWORD dwFlags + ); +INTERNETAPI +HINTERNET +WINAPI +InternetOpenW( + IN LPCWSTR lpszAgent, + IN DWORD dwAccessType, + IN LPCWSTR lpszProxy OPTIONAL, + IN LPCWSTR lpszProxyBypass OPTIONAL, + IN DWORD dwFlags + ); +#ifdef UNICODE +#define InternetOpen InternetOpenW +#else +#define InternetOpen InternetOpenA +#endif // !UNICODE + +// +// access types for InternetOpen() +// + +#define INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration +#define INTERNET_OPEN_TYPE_DIRECT 1 // direct to net +#define INTERNET_OPEN_TYPE_PROXY 3 // via named proxy + +#define PRE_CONFIG_INTERNET_ACCESS INTERNET_OPEN_TYPE_PRECONFIG +#define LOCAL_INTERNET_ACCESS INTERNET_OPEN_TYPE_DIRECT +#define GATEWAY_INTERNET_ACCESS 2 // Internet via gateway +#define CERN_PROXY_INTERNET_ACCESS INTERNET_OPEN_TYPE_PROXY + +INTERNETAPI +BOOL +WINAPI +InternetCloseHandle( + IN HINTERNET hInternet + ); + +INTERNETAPI +HINTERNET +WINAPI +InternetConnectA( + IN HINTERNET hInternet, + IN LPCSTR lpszServerName, + IN INTERNET_PORT nServerPort, + IN LPCSTR lpszUserName OPTIONAL, + IN LPCSTR lpszPassword OPTIONAL, + IN DWORD dwService, + IN DWORD dwFlags, + IN DWORD dwContext + ); +INTERNETAPI +HINTERNET +WINAPI +InternetConnectW( + IN HINTERNET hInternet, + IN LPCWSTR lpszServerName, + IN INTERNET_PORT nServerPort, + IN LPCWSTR lpszUserName OPTIONAL, + IN LPCWSTR lpszPassword OPTIONAL, + IN DWORD dwService, + IN DWORD dwFlags, + IN DWORD dwContext + ); +#ifdef UNICODE +#define InternetConnect InternetConnectW +#else +#define InternetConnect InternetConnectA +#endif // !UNICODE + +// +// service types for InternetConnect() +// + +#define INTERNET_SERVICE_FTP 1 +#define INTERNET_SERVICE_GOPHER 2 +#define INTERNET_SERVICE_HTTP 3 + +INTERNETAPI +HINTERNET +WINAPI +InternetOpenUrlA( + IN HINTERNET hInternet, + IN LPCSTR lpszUrl, + IN LPCSTR lpszHeaders OPTIONAL, + IN DWORD dwHeadersLength, + IN DWORD dwFlags, + IN DWORD dwContext + ); +INTERNETAPI +HINTERNET +WINAPI +InternetOpenUrlW( + IN HINTERNET hInternet, + IN LPCWSTR lpszUrl, + IN LPCWSTR lpszHeaders OPTIONAL, + IN DWORD dwHeadersLength, + IN DWORD dwFlags, + IN DWORD dwContext + ); +#ifdef UNICODE +#define InternetOpenUrl InternetOpenUrlW +#else +#define InternetOpenUrl InternetOpenUrlA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +InternetReadFile( + IN HINTERNET hFile, + IN LPVOID lpBuffer, + IN DWORD dwNumberOfBytesToRead, + OUT LPDWORD lpdwNumberOfBytesRead + ); + +INTERNETAPI +DWORD +WINAPI +InternetSetFilePointer( + IN HINTERNET hFile, + IN LONG lDistanceToMove, + IN PVOID pReserved, + IN DWORD dwMoveMethod, + IN DWORD dwContext + ); + +INTERNETAPI +BOOL +WINAPI +InternetWriteFile( + IN HINTERNET hFile, + IN LPCVOID lpBuffer, + IN DWORD dwNumberOfBytesToWrite, + OUT LPDWORD lpdwNumberOfBytesWritten + ); + +INTERNETAPI +BOOL +WINAPI +InternetQueryDataAvailable( + IN HINTERNET hFile, + OUT LPDWORD lpdwNumberOfBytesAvailable, + IN DWORD dwFlags, + IN DWORD dwContext + ); + +INTERNETAPI +BOOL +WINAPI +InternetFindNextFileA( + IN HINTERNET hFind, + OUT LPVOID lpvFindData + ); +INTERNETAPI +BOOL +WINAPI +InternetFindNextFileW( + IN HINTERNET hFind, + OUT LPVOID lpvFindData + ); +#ifdef UNICODE +#define InternetFindNextFile InternetFindNextFileW +#else +#define InternetFindNextFile InternetFindNextFileA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +InternetQueryOptionA( + IN HINTERNET hInternet OPTIONAL, + IN DWORD dwOption, + OUT LPVOID lpBuffer OPTIONAL, + IN OUT LPDWORD lpdwBufferLength + ); +INTERNETAPI +BOOL +WINAPI +InternetQueryOptionW( + IN HINTERNET hInternet OPTIONAL, + IN DWORD dwOption, + OUT LPVOID lpBuffer OPTIONAL, + IN OUT LPDWORD lpdwBufferLength + ); +#ifdef UNICODE +#define InternetQueryOption InternetQueryOptionW +#else +#define InternetQueryOption InternetQueryOptionA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +InternetSetOptionA( + IN HINTERNET hInternet OPTIONAL, + IN DWORD dwOption, + IN LPVOID lpBuffer, + IN DWORD dwBufferLength + ); +INTERNETAPI +BOOL +WINAPI +InternetSetOptionW( + IN HINTERNET hInternet OPTIONAL, + IN DWORD dwOption, + IN LPVOID lpBuffer, + IN DWORD dwBufferLength + ); +#ifdef UNICODE +#define InternetSetOption InternetSetOptionW +#else +#define InternetSetOption InternetSetOptionA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +InternetSetOptionExA( + IN HINTERNET hInternet OPTIONAL, + IN DWORD dwOption, + IN LPVOID lpBuffer, + IN DWORD dwBufferLength, + IN DWORD dwFlags + ); +INTERNETAPI +BOOL +WINAPI +InternetSetOptionExW( + IN HINTERNET hInternet OPTIONAL, + IN DWORD dwOption, + IN LPVOID lpBuffer, + IN DWORD dwBufferLength, + IN DWORD dwFlags + ); +#ifdef UNICODE +#define InternetSetOptionEx InternetSetOptionExW +#else +#define InternetSetOptionEx InternetSetOptionExA +#endif // !UNICODE + +// +// flags for InternetSetOptionEx() +// + +#define ISO_GLOBAL 0x00000001 // modify option globally +#define ISO_REGISTRY 0x00000002 // write option to registry (where applicable) + +#define ISO_VALID_FLAGS (ISO_GLOBAL | ISO_REGISTRY) + +// +// options manifests for Internet{Query|Set}Option +// + +#define INTERNET_OPTION_CALLBACK 1 +#define INTERNET_OPTION_CONNECT_TIMEOUT 2 +#define INTERNET_OPTION_CONNECT_RETRIES 3 +#define INTERNET_OPTION_CONNECT_BACKOFF 4 +#define INTERNET_OPTION_SEND_TIMEOUT 5 +#define INTERNET_OPTION_CONTROL_SEND_TIMEOUT INTERNET_OPTION_SEND_TIMEOUT +#define INTERNET_OPTION_RECEIVE_TIMEOUT 6 +#define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT INTERNET_OPTION_RECEIVE_TIMEOUT +#define INTERNET_OPTION_DATA_SEND_TIMEOUT 7 +#define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT 8 +#define INTERNET_OPTION_HANDLE_TYPE 9 +#define INTERNET_OPTION_CONTEXT_VALUE 10 + +#define INTERNET_OPTION_READ_BUFFER_SIZE 12 +#define INTERNET_OPTION_WRITE_BUFFER_SIZE 13 + +#define INTERNET_OPTION_ASYNC_ID 15 +#define INTERNET_OPTION_ASYNC_PRIORITY 16 + +#define INTERNET_OPTION_PARENT_HANDLE 21 +#define INTERNET_OPTION_KEEP_CONNECTION 22 +#define INTERNET_OPTION_REQUEST_FLAGS 23 +#define INTERNET_OPTION_EXTENDED_ERROR 24 + +#define INTERNET_OPTION_OFFLINE_MODE 26 +#define INTERNET_OPTION_CACHE_STREAM_HANDLE 27 +#define INTERNET_OPTION_USERNAME 28 +#define INTERNET_OPTION_PASSWORD 29 +#define INTERNET_OPTION_ASYNC 30 +#define INTERNET_OPTION_SECURITY_FLAGS 31 +#define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT 32 +#define INTERNET_OPTION_DATAFILE_NAME 33 +#define INTERNET_OPTION_URL 34 +#define INTERNET_OPTION_SECURITY_CERTIFICATE 35 +#define INTERNET_OPTION_SECURITY_KEY_BITNESS 36 +#define INTERNET_OPTION_REFRESH 37 +#define INTERNET_OPTION_PROXY 38 + +#define INTERNET_FIRST_OPTION INTERNET_OPTION_CALLBACK +#define INTERNET_LAST_OPTION INTERNET_OPTION_PROXY + +// +// values for INTERNET_OPTION_PRIORITY +// + +#define INTERNET_PRIORITY_FOREGROUND 1000 + +// +// handle types +// + +#define INTERNET_HANDLE_TYPE_INTERNET 1 +#define INTERNET_HANDLE_TYPE_CONNECT_FTP 2 +#define INTERNET_HANDLE_TYPE_CONNECT_GOPHER 3 +#define INTERNET_HANDLE_TYPE_CONNECT_HTTP 4 +#define INTERNET_HANDLE_TYPE_FTP_FIND 5 +#define INTERNET_HANDLE_TYPE_FTP_FIND_HTML 6 +#define INTERNET_HANDLE_TYPE_FTP_FILE 7 +#define INTERNET_HANDLE_TYPE_FTP_FILE_HTML 8 +#define INTERNET_HANDLE_TYPE_GOPHER_FIND 9 +#define INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML 10 +#define INTERNET_HANDLE_TYPE_GOPHER_FILE 11 +#define INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML 12 +#define INTERNET_HANDLE_TYPE_HTTP_REQUEST 13 + +// +// values for INTERNET_OPTION_SECURITY_FLAGS +// + +#define SECURITY_FLAG_SECURE 0x00000001 // can query only +#define SECURITY_FLAG_SSL 0x00000002 +#define SECURITY_FLAG_SSL3 0x00000004 +#define SECURITY_FLAG_PCT 0x00000008 +#define SECURITY_FLAG_PCT4 0x00000010 +#define SECURITY_FLAG_IETFSSL4 0x00000020 + +#define SECURITY_FLAG_40BIT 0x10000000 +#define SECURITY_FLAG_128BIT 0x20000000 +#define SECURITY_FLAG_56BIT 0x40000000 +#define SECURITY_FLAG_UNKNOWNBIT 0x80000000 +#define SECURITY_FLAG_NORMALBITNESS SECURITY_FLAG_40BIT + +#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID INTERNET_FLAG_IGNORE_CERT_CN_INVALID +#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID INTERNET_FLAG_IGNORE_CERT_DATE_INVALID +#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS +#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP + +INTERNETAPI +BOOL +WINAPI +InternetGetLastResponseInfoA( + OUT LPDWORD lpdwError, + OUT LPSTR lpszBuffer OPTIONAL, + IN OUT LPDWORD lpdwBufferLength + ); +INTERNETAPI +BOOL +WINAPI +InternetGetLastResponseInfoW( + OUT LPDWORD lpdwError, + OUT LPWSTR lpszBuffer OPTIONAL, + IN OUT LPDWORD lpdwBufferLength + ); +#ifdef UNICODE +#define InternetGetLastResponseInfo InternetGetLastResponseInfoW +#else +#define InternetGetLastResponseInfo InternetGetLastResponseInfoA +#endif // !UNICODE + +// +// callback function for InternetSetStatusCallback +// + +typedef +VOID +(CALLBACK * INTERNET_STATUS_CALLBACK)( + IN HINTERNET hInternet, + IN DWORD dwContext, + IN DWORD dwInternetStatus, + IN LPVOID lpvStatusInformation OPTIONAL, + IN DWORD dwStatusInformationLength + ); + +typedef INTERNET_STATUS_CALLBACK * LPINTERNET_STATUS_CALLBACK; + +INTERNETAPI +INTERNET_STATUS_CALLBACK +WINAPI +InternetSetStatusCallback( + IN HINTERNET hInternet, + IN INTERNET_STATUS_CALLBACK lpfnInternetCallback + ); + +// +// status manifests for Internet status callback +// + +#define INTERNET_STATUS_RESOLVING_NAME 10 +#define INTERNET_STATUS_NAME_RESOLVED 11 +#define INTERNET_STATUS_CONNECTING_TO_SERVER 20 +#define INTERNET_STATUS_CONNECTED_TO_SERVER 21 +#define INTERNET_STATUS_SENDING_REQUEST 30 +#define INTERNET_STATUS_REQUEST_SENT 31 +#define INTERNET_STATUS_RECEIVING_RESPONSE 40 +#define INTERNET_STATUS_RESPONSE_RECEIVED 41 +#define INTERNET_STATUS_CTL_RESPONSE_RECEIVED 42 +#define INTERNET_STATUS_PREFETCH 43 +#define INTERNET_STATUS_CLOSING_CONNECTION 50 +#define INTERNET_STATUS_CONNECTION_CLOSED 51 +#define INTERNET_STATUS_HANDLE_CREATED 60 +#define INTERNET_STATUS_HANDLE_CLOSING 70 +#define INTERNET_STATUS_REQUEST_COMPLETE 100 +#define INTERNET_STATUS_REDIRECT 110 + +// +// if the following value is returned by InternetSetStatusCallback, then +// probably an invalid (non-code) address was supplied for the callback +// + +#define INTERNET_INVALID_STATUS_CALLBACK ((INTERNET_STATUS_CALLBACK)(-1L)) + +// +// FTP +// + +// +// manifests +// + +#define FTP_TRANSFER_TYPE_UNKNOWN 0x00000000 +#define FTP_TRANSFER_TYPE_ASCII 0x00000001 +#define FTP_TRANSFER_TYPE_BINARY 0x00000002 + +#define FTP_TRANSFER_TYPE_MASK (FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY) + +// +// prototypes +// + +INTERNETAPI +HINTERNET +WINAPI +FtpFindFirstFileA( + IN HINTERNET hConnect, + IN LPCSTR lpszSearchFile OPTIONAL, + OUT LPWIN32_FIND_DATA lpFindFileData OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwContext + ); +INTERNETAPI +HINTERNET +WINAPI +FtpFindFirstFileW( + IN HINTERNET hConnect, + IN LPCWSTR lpszSearchFile OPTIONAL, + OUT LPWIN32_FIND_DATA lpFindFileData OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwContext + ); +#ifdef UNICODE +#define FtpFindFirstFile FtpFindFirstFileW +#else +#define FtpFindFirstFile FtpFindFirstFileA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +FtpGetFileA( + IN HINTERNET hConnect, + IN LPCSTR lpszRemoteFile, + IN LPCSTR lpszNewFile, + IN BOOL fFailIfExists, + IN DWORD dwFlagsAndAttributes, + IN DWORD dwFlags, + IN DWORD dwContext + ); +INTERNETAPI +BOOL +WINAPI +FtpGetFileW( + IN HINTERNET hConnect, + IN LPCWSTR lpszRemoteFile, + IN LPCWSTR lpszNewFile, + IN BOOL fFailIfExists, + IN DWORD dwFlagsAndAttributes, + IN DWORD dwFlags, + IN DWORD dwContext + ); +#ifdef UNICODE +#define FtpGetFile FtpGetFileW +#else +#define FtpGetFile FtpGetFileA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +FtpPutFileA( + IN HINTERNET hConnect, + IN LPCSTR lpszLocalFile, + IN LPCSTR lpszNewRemoteFile, + IN DWORD dwFlags, + IN DWORD dwContext + ); +INTERNETAPI +BOOL +WINAPI +FtpPutFileW( + IN HINTERNET hConnect, + IN LPCWSTR lpszLocalFile, + IN LPCWSTR lpszNewRemoteFile, + IN DWORD dwFlags, + IN DWORD dwContext + ); +#ifdef UNICODE +#define FtpPutFile FtpPutFileW +#else +#define FtpPutFile FtpPutFileA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +FtpDeleteFileA( + IN HINTERNET hConnect, + IN LPCSTR lpszFileName + ); +INTERNETAPI +BOOL +WINAPI +FtpDeleteFileW( + IN HINTERNET hConnect, + IN LPCWSTR lpszFileName + ); +#ifdef UNICODE +#define FtpDeleteFile FtpDeleteFileW +#else +#define FtpDeleteFile FtpDeleteFileA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +FtpRenameFileA( + IN HINTERNET hConnect, + IN LPCSTR lpszExisting, + IN LPCSTR lpszNew + ); +INTERNETAPI +BOOL +WINAPI +FtpRenameFileW( + IN HINTERNET hConnect, + IN LPCWSTR lpszExisting, + IN LPCWSTR lpszNew + ); +#ifdef UNICODE +#define FtpRenameFile FtpRenameFileW +#else +#define FtpRenameFile FtpRenameFileA +#endif // !UNICODE + +INTERNETAPI +HINTERNET +WINAPI +FtpOpenFileA( + IN HINTERNET hConnect, + IN LPCSTR lpszFileName, + IN DWORD dwAccess, + IN DWORD dwFlags, + IN DWORD dwContext + ); +INTERNETAPI +HINTERNET +WINAPI +FtpOpenFileW( + IN HINTERNET hConnect, + IN LPCWSTR lpszFileName, + IN DWORD dwAccess, + IN DWORD dwFlags, + IN DWORD dwContext + ); +#ifdef UNICODE +#define FtpOpenFile FtpOpenFileW +#else +#define FtpOpenFile FtpOpenFileA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +FtpCreateDirectoryA( + IN HINTERNET hConnect, + IN LPCSTR lpszDirectory + ); +INTERNETAPI +BOOL +WINAPI +FtpCreateDirectoryW( + IN HINTERNET hConnect, + IN LPCWSTR lpszDirectory + ); +#ifdef UNICODE +#define FtpCreateDirectory FtpCreateDirectoryW +#else +#define FtpCreateDirectory FtpCreateDirectoryA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +FtpRemoveDirectoryA( + IN HINTERNET hConnect, + IN LPCSTR lpszDirectory + ); +INTERNETAPI +BOOL +WINAPI +FtpRemoveDirectoryW( + IN HINTERNET hConnect, + IN LPCWSTR lpszDirectory + ); +#ifdef UNICODE +#define FtpRemoveDirectory FtpRemoveDirectoryW +#else +#define FtpRemoveDirectory FtpRemoveDirectoryA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +FtpSetCurrentDirectoryA( + IN HINTERNET hConnect, + IN LPCSTR lpszDirectory + ); +INTERNETAPI +BOOL +WINAPI +FtpSetCurrentDirectoryW( + IN HINTERNET hConnect, + IN LPCWSTR lpszDirectory + ); +#ifdef UNICODE +#define FtpSetCurrentDirectory FtpSetCurrentDirectoryW +#else +#define FtpSetCurrentDirectory FtpSetCurrentDirectoryA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +FtpGetCurrentDirectoryA( + IN HINTERNET hConnect, + OUT LPSTR lpszCurrentDirectory, + IN OUT LPDWORD lpdwCurrentDirectory + ); +INTERNETAPI +BOOL +WINAPI +FtpGetCurrentDirectoryW( + IN HINTERNET hConnect, + OUT LPWSTR lpszCurrentDirectory, + IN OUT LPDWORD lpdwCurrentDirectory + ); +#ifdef UNICODE +#define FtpGetCurrentDirectory FtpGetCurrentDirectoryW +#else +#define FtpGetCurrentDirectory FtpGetCurrentDirectoryA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +FtpCommandA( + IN HINTERNET hConnect, + IN BOOL fExpectResponse, + IN DWORD dwFlags, + IN LPCSTR lpszCommand, + IN DWORD dwContext + ); +INTERNETAPI +BOOL +WINAPI +FtpCommandW( + IN HINTERNET hConnect, + IN BOOL fExpectResponse, + IN DWORD dwFlags, + IN LPCWSTR lpszCommand, + IN DWORD dwContext + ); +#ifdef UNICODE +#define FtpCommand FtpCommandW +#else +#define FtpCommand FtpCommandA +#endif // !UNICODE + +// +// Gopher +// + +// +// manifests +// + +// +// string field lengths (in characters, not bytes) +// + +#define MAX_GOPHER_DISPLAY_TEXT 128 +#define MAX_GOPHER_SELECTOR_TEXT 256 +#define MAX_GOPHER_HOST_NAME INTERNET_MAX_HOST_NAME_LENGTH +#define MAX_GOPHER_LOCATOR_LENGTH (1 \ + + MAX_GOPHER_DISPLAY_TEXT \ + + 1 \ + + MAX_GOPHER_SELECTOR_TEXT \ + + 1 \ + + MAX_GOPHER_HOST_NAME \ + + 1 \ + + INTERNET_MAX_PORT_NUMBER_LENGTH \ + + 1 \ + + 1 \ + + 2 \ + ) + +// +// structures/types +// + +// +// GOPHER_FIND_DATA - returns the results of a GopherFindFirstFile()/ +// InternetFindNextFile() request +// + +typedef struct { + CHAR DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1]; + DWORD GopherType; // GOPHER_TYPE_, if known + DWORD SizeLow; + DWORD SizeHigh; + FILETIME LastModificationTime; + CHAR Locator[MAX_GOPHER_LOCATOR_LENGTH + 1]; +} GOPHER_FIND_DATAA, * LPGOPHER_FIND_DATAA; +typedef struct { + WCHAR DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1]; + DWORD GopherType; // GOPHER_TYPE_, if known + DWORD SizeLow; + DWORD SizeHigh; + FILETIME LastModificationTime; + WCHAR Locator[MAX_GOPHER_LOCATOR_LENGTH + 1]; +} GOPHER_FIND_DATAW, * LPGOPHER_FIND_DATAW; +#ifdef UNICODE +typedef GOPHER_FIND_DATAW GOPHER_FIND_DATA; +typedef LPGOPHER_FIND_DATAW LPGOPHER_FIND_DATA; +#else +typedef GOPHER_FIND_DATAA GOPHER_FIND_DATA; +typedef LPGOPHER_FIND_DATAA LPGOPHER_FIND_DATA; +#endif // UNICODE + +// +// manifests for GopherType +// + +#define GOPHER_TYPE_TEXT_FILE 0x00000001 +#define GOPHER_TYPE_DIRECTORY 0x00000002 +#define GOPHER_TYPE_CSO 0x00000004 +#define GOPHER_TYPE_ERROR 0x00000008 +#define GOPHER_TYPE_MAC_BINHEX 0x00000010 +#define GOPHER_TYPE_DOS_ARCHIVE 0x00000020 +#define GOPHER_TYPE_UNIX_UUENCODED 0x00000040 +#define GOPHER_TYPE_INDEX_SERVER 0x00000080 +#define GOPHER_TYPE_TELNET 0x00000100 +#define GOPHER_TYPE_BINARY 0x00000200 +#define GOPHER_TYPE_REDUNDANT 0x00000400 +#define GOPHER_TYPE_TN3270 0x00000800 +#define GOPHER_TYPE_GIF 0x00001000 +#define GOPHER_TYPE_IMAGE 0x00002000 +#define GOPHER_TYPE_BITMAP 0x00004000 +#define GOPHER_TYPE_MOVIE 0x00008000 +#define GOPHER_TYPE_SOUND 0x00010000 +#define GOPHER_TYPE_HTML 0x00020000 +#define GOPHER_TYPE_PDF 0x00040000 +#define GOPHER_TYPE_CALENDAR 0x00080000 +#define GOPHER_TYPE_INLINE 0x00100000 +#define GOPHER_TYPE_UNKNOWN 0x20000000 +#define GOPHER_TYPE_ASK 0x40000000 +#define GOPHER_TYPE_GOPHER_PLUS 0x80000000 + +// +// gopher type macros +// + +#define IS_GOPHER_FILE(type) (BOOL)(((type) & GOPHER_TYPE_FILE_MASK) ? TRUE : FALSE) +#define IS_GOPHER_DIRECTORY(type) (BOOL)(((type) & GOPHER_TYPE_DIRECTORY) ? TRUE : FALSE) +#define IS_GOPHER_PHONE_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_CSO) ? TRUE : FALSE) +#define IS_GOPHER_ERROR(type) (BOOL)(((type) & GOPHER_TYPE_ERROR) ? TRUE : FALSE) +#define IS_GOPHER_INDEX_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_INDEX_SERVER) ? TRUE : FALSE) +#define IS_GOPHER_TELNET_SESSION(type) (BOOL)(((type) & GOPHER_TYPE_TELNET) ? TRUE : FALSE) +#define IS_GOPHER_BACKUP_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_REDUNDANT) ? TRUE : FALSE) +#define IS_GOPHER_TN3270_SESSION(type) (BOOL)(((type) & GOPHER_TYPE_TN3270) ? TRUE : FALSE) +#define IS_GOPHER_ASK(type) (BOOL)(((type) & GOPHER_TYPE_ASK) ? TRUE : FALSE) +#define IS_GOPHER_PLUS(type) (BOOL)(((type) & GOPHER_TYPE_GOPHER_PLUS) ? TRUE : FALSE) + +#define IS_GOPHER_TYPE_KNOWN(type) (BOOL)(((type) & GOPHER_TYPE_UNKNOWN) ? FALSE : TRUE) + +// +// GOPHER_TYPE_FILE_MASK - use this to determine if a locator identifies a +// (known) file type +// + +#define GOPHER_TYPE_FILE_MASK (GOPHER_TYPE_TEXT_FILE \ + | GOPHER_TYPE_MAC_BINHEX \ + | GOPHER_TYPE_DOS_ARCHIVE \ + | GOPHER_TYPE_UNIX_UUENCODED \ + | GOPHER_TYPE_BINARY \ + | GOPHER_TYPE_GIF \ + | GOPHER_TYPE_IMAGE \ + | GOPHER_TYPE_BITMAP \ + | GOPHER_TYPE_MOVIE \ + | GOPHER_TYPE_SOUND \ + | GOPHER_TYPE_HTML \ + | GOPHER_TYPE_PDF \ + | GOPHER_TYPE_CALENDAR \ + | GOPHER_TYPE_INLINE \ + ) + +// +// structured gopher attributes (as defined in gopher+ protocol document) +// + +typedef struct { + LPCTSTR Comment; + LPCTSTR EmailAddress; +} GOPHER_ADMIN_ATTRIBUTE_TYPE, * LPGOPHER_ADMIN_ATTRIBUTE_TYPE; + +typedef struct { + FILETIME DateAndTime; +} GOPHER_MOD_DATE_ATTRIBUTE_TYPE, * LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE; + +typedef struct { + DWORD Ttl; +} GOPHER_TTL_ATTRIBUTE_TYPE, * LPGOPHER_TTL_ATTRIBUTE_TYPE; + +typedef struct { + INT Score; +} GOPHER_SCORE_ATTRIBUTE_TYPE, * LPGOPHER_SCORE_ATTRIBUTE_TYPE; + +typedef struct { + INT LowerBound; + INT UpperBound; +} GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, * LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE; + +typedef struct { + LPCTSTR Site; +} GOPHER_SITE_ATTRIBUTE_TYPE, * LPGOPHER_SITE_ATTRIBUTE_TYPE; + +typedef struct { + LPCTSTR Organization; +} GOPHER_ORGANIZATION_ATTRIBUTE_TYPE, * LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE; + +typedef struct { + LPCTSTR Location; +} GOPHER_LOCATION_ATTRIBUTE_TYPE, * LPGOPHER_LOCATION_ATTRIBUTE_TYPE; + +typedef struct { + INT DegreesNorth; + INT MinutesNorth; + INT SecondsNorth; + INT DegreesEast; + INT MinutesEast; + INT SecondsEast; +} GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, * LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE; + +typedef struct { + INT Zone; +} GOPHER_TIMEZONE_ATTRIBUTE_TYPE, * LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE; + +typedef struct { + LPCTSTR Provider; +} GOPHER_PROVIDER_ATTRIBUTE_TYPE, * LPGOPHER_PROVIDER_ATTRIBUTE_TYPE; + +typedef struct { + LPCTSTR Version; +} GOPHER_VERSION_ATTRIBUTE_TYPE, * LPGOPHER_VERSION_ATTRIBUTE_TYPE; + +typedef struct { + LPCTSTR ShortAbstract; + LPCTSTR AbstractFile; +} GOPHER_ABSTRACT_ATTRIBUTE_TYPE, * LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE; + +typedef struct { + LPCTSTR ContentType; + LPCTSTR Language; + DWORD Size; +} GOPHER_VIEW_ATTRIBUTE_TYPE, * LPGOPHER_VIEW_ATTRIBUTE_TYPE; + +typedef struct { + BOOL TreeWalk; +} GOPHER_VERONICA_ATTRIBUTE_TYPE, * LPGOPHER_VERONICA_ATTRIBUTE_TYPE; + +typedef struct { + LPCTSTR QuestionType; + LPCTSTR QuestionText; +} GOPHER_ASK_ATTRIBUTE_TYPE, * LPGOPHER_ASK_ATTRIBUTE_TYPE; + +// +// GOPHER_UNKNOWN_ATTRIBUTE_TYPE - this is returned if we retrieve an attribute +// that is not specified in the current gopher/gopher+ documentation. It is up +// to the application to parse the information +// + +typedef struct { + LPCTSTR Text; +} GOPHER_UNKNOWN_ATTRIBUTE_TYPE, * LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE; + +// +// GOPHER_ATTRIBUTE_TYPE - returned in the user's buffer when an enumerated +// GopherGetAttribute call is made +// + +typedef struct { + DWORD CategoryId; // e.g. GOPHER_CATEGORY_ID_ADMIN + DWORD AttributeId; // e.g. GOPHER_ATTRIBUTE_ID_ADMIN + union { + GOPHER_ADMIN_ATTRIBUTE_TYPE Admin; + GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate; + GOPHER_TTL_ATTRIBUTE_TYPE Ttl; + GOPHER_SCORE_ATTRIBUTE_TYPE Score; + GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange; + GOPHER_SITE_ATTRIBUTE_TYPE Site; + GOPHER_ORGANIZATION_ATTRIBUTE_TYPE Organization; + GOPHER_LOCATION_ATTRIBUTE_TYPE Location; + GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation; + GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone; + GOPHER_PROVIDER_ATTRIBUTE_TYPE Provider; + GOPHER_VERSION_ATTRIBUTE_TYPE Version; + GOPHER_ABSTRACT_ATTRIBUTE_TYPE Abstract; + GOPHER_VIEW_ATTRIBUTE_TYPE View; + GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica; + GOPHER_ASK_ATTRIBUTE_TYPE Ask; + GOPHER_UNKNOWN_ATTRIBUTE_TYPE Unknown; + } AttributeType; +} GOPHER_ATTRIBUTE_TYPE, * LPGOPHER_ATTRIBUTE_TYPE; + +#define MAX_GOPHER_CATEGORY_NAME 128 // arbitrary +#define MAX_GOPHER_ATTRIBUTE_NAME 128 // " +#define MIN_GOPHER_ATTRIBUTE_LENGTH 256 // " + +// +// known gopher attribute categories. See below for ordinals +// + +#define GOPHER_INFO_CATEGORY TEXT("+INFO") +#define GOPHER_ADMIN_CATEGORY TEXT("+ADMIN") +#define GOPHER_VIEWS_CATEGORY TEXT("+VIEWS") +#define GOPHER_ABSTRACT_CATEGORY TEXT("+ABSTRACT") +#define GOPHER_VERONICA_CATEGORY TEXT("+VERONICA") + +// +// known gopher attributes. These are the attribute names as defined in the +// gopher+ protocol document +// + +#define GOPHER_ADMIN_ATTRIBUTE TEXT("Admin") +#define GOPHER_MOD_DATE_ATTRIBUTE TEXT("Mod-Date") +#define GOPHER_TTL_ATTRIBUTE TEXT("TTL") +#define GOPHER_SCORE_ATTRIBUTE TEXT("Score") +#define GOPHER_RANGE_ATTRIBUTE TEXT("Score-range") +#define GOPHER_SITE_ATTRIBUTE TEXT("Site") +#define GOPHER_ORG_ATTRIBUTE TEXT("Org") +#define GOPHER_LOCATION_ATTRIBUTE TEXT("Loc") +#define GOPHER_GEOG_ATTRIBUTE TEXT("Geog") +#define GOPHER_TIMEZONE_ATTRIBUTE TEXT("TZ") +#define GOPHER_PROVIDER_ATTRIBUTE TEXT("Provider") +#define GOPHER_VERSION_ATTRIBUTE TEXT("Version") +#define GOPHER_ABSTRACT_ATTRIBUTE TEXT("Abstract") +#define GOPHER_VIEW_ATTRIBUTE TEXT("View") +#define GOPHER_TREEWALK_ATTRIBUTE TEXT("treewalk") + +// +// identifiers for attribute strings +// + +#define GOPHER_ATTRIBUTE_ID_BASE 0xabcccc00 + +#define GOPHER_CATEGORY_ID_ALL (GOPHER_ATTRIBUTE_ID_BASE + 1) + +#define GOPHER_CATEGORY_ID_INFO (GOPHER_ATTRIBUTE_ID_BASE + 2) +#define GOPHER_CATEGORY_ID_ADMIN (GOPHER_ATTRIBUTE_ID_BASE + 3) +#define GOPHER_CATEGORY_ID_VIEWS (GOPHER_ATTRIBUTE_ID_BASE + 4) +#define GOPHER_CATEGORY_ID_ABSTRACT (GOPHER_ATTRIBUTE_ID_BASE + 5) +#define GOPHER_CATEGORY_ID_VERONICA (GOPHER_ATTRIBUTE_ID_BASE + 6) +#define GOPHER_CATEGORY_ID_ASK (GOPHER_ATTRIBUTE_ID_BASE + 7) + +#define GOPHER_CATEGORY_ID_UNKNOWN (GOPHER_ATTRIBUTE_ID_BASE + 8) + +#define GOPHER_ATTRIBUTE_ID_ALL (GOPHER_ATTRIBUTE_ID_BASE + 9) + +#define GOPHER_ATTRIBUTE_ID_ADMIN (GOPHER_ATTRIBUTE_ID_BASE + 10) +#define GOPHER_ATTRIBUTE_ID_MOD_DATE (GOPHER_ATTRIBUTE_ID_BASE + 11) +#define GOPHER_ATTRIBUTE_ID_TTL (GOPHER_ATTRIBUTE_ID_BASE + 12) +#define GOPHER_ATTRIBUTE_ID_SCORE (GOPHER_ATTRIBUTE_ID_BASE + 13) +#define GOPHER_ATTRIBUTE_ID_RANGE (GOPHER_ATTRIBUTE_ID_BASE + 14) +#define GOPHER_ATTRIBUTE_ID_SITE (GOPHER_ATTRIBUTE_ID_BASE + 15) +#define GOPHER_ATTRIBUTE_ID_ORG (GOPHER_ATTRIBUTE_ID_BASE + 16) +#define GOPHER_ATTRIBUTE_ID_LOCATION (GOPHER_ATTRIBUTE_ID_BASE + 17) +#define GOPHER_ATTRIBUTE_ID_GEOG (GOPHER_ATTRIBUTE_ID_BASE + 18) +#define GOPHER_ATTRIBUTE_ID_TIMEZONE (GOPHER_ATTRIBUTE_ID_BASE + 19) +#define GOPHER_ATTRIBUTE_ID_PROVIDER (GOPHER_ATTRIBUTE_ID_BASE + 20) +#define GOPHER_ATTRIBUTE_ID_VERSION (GOPHER_ATTRIBUTE_ID_BASE + 21) +#define GOPHER_ATTRIBUTE_ID_ABSTRACT (GOPHER_ATTRIBUTE_ID_BASE + 22) +#define GOPHER_ATTRIBUTE_ID_VIEW (GOPHER_ATTRIBUTE_ID_BASE + 23) +#define GOPHER_ATTRIBUTE_ID_TREEWALK (GOPHER_ATTRIBUTE_ID_BASE + 24) + +#define GOPHER_ATTRIBUTE_ID_UNKNOWN (GOPHER_ATTRIBUTE_ID_BASE + 25) + +// +// prototypes +// + +INTERNETAPI +BOOL +WINAPI +GopherCreateLocatorA( + IN LPCSTR lpszHost, + IN INTERNET_PORT nServerPort, + IN LPCSTR lpszDisplayString OPTIONAL, + IN LPCSTR lpszSelectorString OPTIONAL, + IN DWORD dwGopherType, + OUT LPSTR lpszLocator OPTIONAL, + IN OUT LPDWORD lpdwBufferLength + ); +INTERNETAPI +BOOL +WINAPI +GopherCreateLocatorW( + IN LPCWSTR lpszHost, + IN INTERNET_PORT nServerPort, + IN LPCWSTR lpszDisplayString OPTIONAL, + IN LPCWSTR lpszSelectorString OPTIONAL, + IN DWORD dwGopherType, + OUT LPWSTR lpszLocator OPTIONAL, + IN OUT LPDWORD lpdwBufferLength + ); +#ifdef UNICODE +#define GopherCreateLocator GopherCreateLocatorW +#else +#define GopherCreateLocator GopherCreateLocatorA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +GopherGetLocatorTypeA( + IN LPCSTR lpszLocator, + OUT LPDWORD lpdwGopherType + ); +INTERNETAPI +BOOL +WINAPI +GopherGetLocatorTypeW( + IN LPCWSTR lpszLocator, + OUT LPDWORD lpdwGopherType + ); +#ifdef UNICODE +#define GopherGetLocatorType GopherGetLocatorTypeW +#else +#define GopherGetLocatorType GopherGetLocatorTypeA +#endif // !UNICODE + +INTERNETAPI +HINTERNET +WINAPI +GopherFindFirstFileA( + IN HINTERNET hConnect, + IN LPCSTR lpszLocator OPTIONAL, + IN LPCSTR lpszSearchString OPTIONAL, + OUT LPGOPHER_FIND_DATAA lpFindData OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwContext + ); +INTERNETAPI +HINTERNET +WINAPI +GopherFindFirstFileW( + IN HINTERNET hConnect, + IN LPCWSTR lpszLocator OPTIONAL, + IN LPCWSTR lpszSearchString OPTIONAL, + OUT LPGOPHER_FIND_DATAW lpFindData OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwContext + ); +#ifdef UNICODE +#define GopherFindFirstFile GopherFindFirstFileW +#else +#define GopherFindFirstFile GopherFindFirstFileA +#endif // !UNICODE + +INTERNETAPI +HINTERNET +WINAPI +GopherOpenFileA( + IN HINTERNET hConnect, + IN LPCSTR lpszLocator, + IN LPCSTR lpszView OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwContext + ); +INTERNETAPI +HINTERNET +WINAPI +GopherOpenFileW( + IN HINTERNET hConnect, + IN LPCWSTR lpszLocator, + IN LPCWSTR lpszView OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwContext + ); +#ifdef UNICODE +#define GopherOpenFile GopherOpenFileW +#else +#define GopherOpenFile GopherOpenFileA +#endif // !UNICODE + +typedef +BOOL +(CALLBACK * GOPHER_ATTRIBUTE_ENUMERATOR)( + LPGOPHER_ATTRIBUTE_TYPE lpAttributeInfo, + DWORD dwError + ); + +INTERNETAPI +BOOL +WINAPI +GopherGetAttributeA( + IN HINTERNET hConnect, + IN LPCSTR lpszLocator, + IN LPCSTR lpszAttributeName OPTIONAL, + OUT LPBYTE lpBuffer, + IN DWORD dwBufferLength, + OUT LPDWORD lpdwCharactersReturned, + IN GOPHER_ATTRIBUTE_ENUMERATOR lpfnEnumerator OPTIONAL, + IN DWORD dwContext + ); +INTERNETAPI +BOOL +WINAPI +GopherGetAttributeW( + IN HINTERNET hConnect, + IN LPCWSTR lpszLocator, + IN LPCWSTR lpszAttributeName OPTIONAL, + OUT LPBYTE lpBuffer, + IN DWORD dwBufferLength, + OUT LPDWORD lpdwCharactersReturned, + IN GOPHER_ATTRIBUTE_ENUMERATOR lpfnEnumerator OPTIONAL, + IN DWORD dwContext + ); +#ifdef UNICODE +#define GopherGetAttribute GopherGetAttributeW +#else +#define GopherGetAttribute GopherGetAttributeA +#endif // !UNICODE + +// +// HTTP +// + +// +// manifests +// + +// +// the default major/minor HTTP version numbers +// + +#define HTTP_MAJOR_VERSION 1 +#define HTTP_MINOR_VERSION 0 + +#define HTTP_VERSION TEXT("HTTP/1.0") + +// +// HttpQueryInfo info levels. Generally, there is one info level +// for each potential RFC822/HTTP/MIME header that an HTTP server +// may send as part of a request response. +// +// The HTTP_QUERY_RAW_HEADERS info level is provided for clients +// that choose to perform their own header parsing. +// + +#define HTTP_QUERY_MIME_VERSION 0 +#define HTTP_QUERY_CONTENT_TYPE 1 +#define HTTP_QUERY_CONTENT_TRANSFER_ENCODING 2 +#define HTTP_QUERY_CONTENT_ID 3 +#define HTTP_QUERY_CONTENT_DESCRIPTION 4 +#define HTTP_QUERY_CONTENT_LENGTH 5 +#define HTTP_QUERY_CONTENT_LANGUAGE 6 +#define HTTP_QUERY_ALLOW 7 +#define HTTP_QUERY_PUBLIC 8 +#define HTTP_QUERY_DATE 9 +#define HTTP_QUERY_EXPIRES 10 +#define HTTP_QUERY_LAST_MODIFIED 11 +#define HTTP_QUERY_MESSAGE_ID 12 +#define HTTP_QUERY_URI 13 +#define HTTP_QUERY_DERIVED_FROM 14 +#define HTTP_QUERY_COST 15 +#define HTTP_QUERY_LINK 16 +#define HTTP_QUERY_PRAGMA 17 +#define HTTP_QUERY_VERSION 18 // special: part of status line +#define HTTP_QUERY_STATUS_CODE 19 // special: part of status line +#define HTTP_QUERY_STATUS_TEXT 20 // special: part of status line +#define HTTP_QUERY_RAW_HEADERS 21 // special: all headers as ASCIIZ +#define HTTP_QUERY_RAW_HEADERS_CRLF 22 // special: all headers +#define HTTP_QUERY_CONNECTION 23 +#define HTTP_QUERY_ACCEPT 24 +#define HTTP_QUERY_ACCEPT_CHARSET 25 +#define HTTP_QUERY_ACCEPT_ENCODING 26 +#define HTTP_QUERY_ACCEPT_LANGUAGE 27 +#define HTTP_QUERY_AUTHORIZATION 28 +#define HTTP_QUERY_CONTENT_ENCODING 29 +#define HTTP_QUERY_FORWARDED 30 +#define HTTP_QUERY_FROM 31 +#define HTTP_QUERY_IF_MODIFIED_SINCE 32 +#define HTTP_QUERY_LOCATION 33 +#define HTTP_QUERY_ORIG_URI 34 +#define HTTP_QUERY_REFERER 35 +#define HTTP_QUERY_RETRY_AFTER 36 +#define HTTP_QUERY_SERVER 37 +#define HTTP_QUERY_TITLE 38 +#define HTTP_QUERY_USER_AGENT 39 +#define HTTP_QUERY_WWW_AUTHENTICATE 40 +#define HTTP_QUERY_PROXY_AUTHENTICATE 41 +#define HTTP_QUERY_ACCEPT_RANGES 42 +#define HTTP_QUERY_SET_COOKIE 43 +#define HTTP_QUERY_COOKIE 44 + +#define HTTP_QUERY_MAX 44 + +// +// HTTP_QUERY_CUSTOM - if this special value is supplied as the dwInfoLevel +// parameter of HttpQueryInfo() then the lpBuffer parameter contains the name +// of the header we are to query +// + +#define HTTP_QUERY_CUSTOM 65535 + +// +// HTTP_QUERY_FLAG_REQUEST_HEADERS - if this bit is set in the dwInfoLevel +// parameter of HttpQueryInfo() then the request headers will be queried for the +// request information +// + +#define HTTP_QUERY_FLAG_REQUEST_HEADERS 0x80000000 + +// +// HTTP_QUERY_FLAG_SYSTEMTIME - if this bit is set in the dwInfoLevel parameter +// of HttpQueryInfo() AND the header being queried contains date information, +// e.g. the "Expires:" header then lpBuffer will contain a SYSTEMTIME structure +// containing the date and time information converted from the header string +// + +#define HTTP_QUERY_FLAG_SYSTEMTIME 0x40000000 + +// +// HTTP_QUERY_FLAG_NUMBER - if this bit is set in the dwInfoLevel parameter of +// HttpQueryInfo(), then the value of the header will be converted to a number +// before being returned to the caller, if applicable +// + +#define HTTP_QUERY_FLAG_NUMBER 0x20000000 + +// +// HTTP_QUERY_FLAG_COALESCE - combine the values from several headers of the +// same name into the output buffer +// + +#define HTTP_QUERY_FLAG_COALESCE 0x10000000 + +#define HTTP_QUERY_MODIFIER_FLAGS_MASK (HTTP_QUERY_FLAG_REQUEST_HEADERS \ + | HTTP_QUERY_FLAG_SYSTEMTIME \ + | HTTP_QUERY_FLAG_NUMBER \ + | HTTP_QUERY_FLAG_COALESCE \ + ) + +#define HTTP_QUERY_HEADER_MASK (~HTTP_QUERY_MODIFIER_FLAGS_MASK) + +// +// HTTP Response Status Codes: +// + +#define HTTP_STATUS_OK 200 // request completed +#define HTTP_STATUS_CREATED 201 // object created, reason = new URI +#define HTTP_STATUS_ACCEPTED 202 // async completion (TBS) +#define HTTP_STATUS_PARTIAL 203 // partial completion +#define HTTP_STATUS_NO_CONTENT 204 // no info to return + +#define HTTP_STATUS_AMBIGUOUS 300 // server couldn't decide what to return +#define HTTP_STATUS_MOVED 301 // object permanently moved +#define HTTP_STATUS_REDIRECT 302 // object temporarily moved +#define HTTP_STATUS_REDIRECT_METHOD 303 // redirection w/ new access method +#define HTTP_STATUS_NOT_MODIFIED 304 // if-modified-since was not modified + +#define HTTP_STATUS_BAD_REQUEST 400 // invalid syntax +#define HTTP_STATUS_DENIED 401 // access denied +#define HTTP_STATUS_PAYMENT_REQ 402 // payment required +#define HTTP_STATUS_FORBIDDEN 403 // request forbidden +#define HTTP_STATUS_NOT_FOUND 404 // object not found +#define HTTP_STATUS_BAD_METHOD 405 // method is not allowed +#define HTTP_STATUS_NONE_ACCEPTABLE 406 // no response acceptable to client found +#define HTTP_STATUS_PROXY_AUTH_REQ 407 // proxy authentication required +#define HTTP_STATUS_REQUEST_TIMEOUT 408 // server timed out waiting for request +#define HTTP_STATUS_CONFLICT 409 // user should resubmit with more info +#define HTTP_STATUS_GONE 410 // the resource is no longer available +#define HTTP_STATUS_AUTH_REFUSED 411 // couldn't authorize client + +#define HTTP_STATUS_SERVER_ERROR 500 // internal server error +#define HTTP_STATUS_NOT_SUPPORTED 501 // required not supported +#define HTTP_STATUS_BAD_GATEWAY 502 // error response received from gateway +#define HTTP_STATUS_SERVICE_UNAVAIL 503 // temporarily overloaded +#define HTTP_STATUS_GATEWAY_TIMEOUT 504 // timed out waiting for gateway + +// +// prototypes +// + +INTERNETAPI +HINTERNET +WINAPI +HttpOpenRequestA( + IN HINTERNET hConnect, + IN LPCSTR lpszVerb, + IN LPCSTR lpszObjectName, + IN LPCSTR lpszVersion, + IN LPCSTR lpszReferrer OPTIONAL, + IN LPCSTR FAR * lplpszAcceptTypes OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwContext + ); +INTERNETAPI +HINTERNET +WINAPI +HttpOpenRequestW( + IN HINTERNET hConnect, + IN LPCWSTR lpszVerb, + IN LPCWSTR lpszObjectName, + IN LPCWSTR lpszVersion, + IN LPCWSTR lpszReferrer OPTIONAL, + IN LPCWSTR FAR * lplpszAcceptTypes OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwContext + ); +#ifdef UNICODE +#define HttpOpenRequest HttpOpenRequestW +#else +#define HttpOpenRequest HttpOpenRequestA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +HttpAddRequestHeadersA( + IN HINTERNET hRequest, + IN LPCSTR lpszHeaders, + IN DWORD dwHeadersLength, + IN DWORD dwModifiers + ); +INTERNETAPI +BOOL +WINAPI +HttpAddRequestHeadersW( + IN HINTERNET hRequest, + IN LPCWSTR lpszHeaders, + IN DWORD dwHeadersLength, + IN DWORD dwModifiers + ); +#ifdef UNICODE +#define HttpAddRequestHeaders HttpAddRequestHeadersW +#else +#define HttpAddRequestHeaders HttpAddRequestHeadersA +#endif // !UNICODE + +// +// values for dwModifiers parameter of HttpAddRequestHeaders() +// + +#define HTTP_ADDREQ_INDEX_MASK 0x0000FFFF +#define HTTP_ADDREQ_FLAGS_MASK 0xFFFF0000 + +// +// HTTP_ADDREQ_FLAG_ADD_IF_NEW - the header will only be added if it doesn't +// already exist +// + +#define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000 + +// +// HTTP_ADDREQ_FLAG_ADD - if HTTP_ADDREQ_FLAG_REPLACE is set but the header is +// not found then if this flag is set, the header is added anyway, so long as +// there is a valid header-value +// + +#define HTTP_ADDREQ_FLAG_ADD 0x20000000 + +// +// HTTP_ADDREQ_FLAG_COALESCE - coalesce headers with same name. e.g. +// "Accept: text/*" and "Accept: audio/*" with this flag results in a single +// header: "Accept: text/*, audio/*" +// + +// +// HTTP_ADDREQ_FLAG_COALESCE - coalesce headers with same name. e.g. +// "Accept: text/*" and "Accept: audio/*" with this flag results in a single +// header: "Accept: text/*, audio/*" +// + +#define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 0x40000000 + +#define HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 0x01000000 + +#define HTTP_ADDREQ_FLAG_COALESCE HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA + +// +// HTTP_ADDREQ_FLAG_REPLACE - replaces the specified header. Only one header can +// be supplied in the buffer. If the header to be replaced is not the first +// in a list of headers with the same name, then the relative index should be +// supplied in the low 8 bits of the dwModifiers parameter. If the header-value +// part is missing, then the header is removed +// + +#define HTTP_ADDREQ_FLAG_REPLACE 0x80000000 + +INTERNETAPI +BOOL +WINAPI +HttpSendRequestA( + IN HINTERNET hRequest, + IN LPCSTR lpszHeaders OPTIONAL, + IN DWORD dwHeadersLength, + IN LPVOID lpOptional OPTIONAL, + IN DWORD dwOptionalLength + ); +INTERNETAPI +BOOL +WINAPI +HttpSendRequestW( + IN HINTERNET hRequest, + IN LPCWSTR lpszHeaders OPTIONAL, + IN DWORD dwHeadersLength, + IN LPVOID lpOptional OPTIONAL, + IN DWORD dwOptionalLength + ); +#ifdef UNICODE +#define HttpSendRequest HttpSendRequestW +#else +#define HttpSendRequest HttpSendRequestA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +HttpQueryInfoA( + IN HINTERNET hRequest, + IN DWORD dwInfoLevel, + IN OUT LPVOID lpBuffer OPTIONAL, + IN OUT LPDWORD lpdwBufferLength, + IN OUT LPDWORD lpdwIndex OPTIONAL + ); +INTERNETAPI +BOOL +WINAPI +HttpQueryInfoW( + IN HINTERNET hRequest, + IN DWORD dwInfoLevel, + IN OUT LPVOID lpBuffer OPTIONAL, + IN OUT LPDWORD lpdwBufferLength, + IN OUT LPDWORD lpdwIndex OPTIONAL + ); +#ifdef UNICODE +#define HttpQueryInfo HttpQueryInfoW +#else +#define HttpQueryInfo HttpQueryInfoA +#endif // !UNICODE + +// +// Cookie APIs +// + +INTERNETAPI +BOOL +WINAPI +InternetSetCookieA( + IN LPCSTR lpszUrl, + IN LPCSTR lpszCookieName, + IN LPCSTR lpszCookieData + ); +INTERNETAPI +BOOL +WINAPI +InternetSetCookieW( + IN LPCSTR lpszUrl, + IN LPCWSTR lpszCookieName, + IN LPCWSTR lpszCookieData + ); +#ifdef UNICODE +#define InternetSetCookie InternetSetCookieW +#else +#define InternetSetCookie InternetSetCookieA +#endif // !UNICODE + +INTERNETAPI +BOOL +WINAPI +InternetGetCookieA( + IN LPCSTR lpszUrl, + IN LPCSTR lpszCookieName, + OUT LPSTR lpCookieData, + IN OUT LPDWORD lpdwSize + ); +INTERNETAPI +BOOL +WINAPI +InternetGetCookieW( + IN LPCSTR lpszUrl, + IN LPCWSTR lpszCookieName, + OUT LPWSTR lpCookieData, + IN OUT LPDWORD lpdwSize + ); +#ifdef UNICODE +#define InternetGetCookie InternetGetCookieW +#else +#define InternetGetCookie InternetGetCookieA +#endif // !UNICODE + +// +// Internet UI +// + +// +// InternetErrorDlg - Provides UI for certain Errors. +// + +#define FLAGS_ERROR_UI_FILTER_FOR_ERRORS 0x01 +#define FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS 0x02 +#define FLAGS_ERROR_UI_FLAGS_GENERATE_DATA 0x04 +#define FLAGS_ERROR_UI_FLAGS_NO_UI 0x08 + +INTERNETAPI +DWORD +WINAPI +InternetErrorDlg( + IN HWND hWnd, + IN OUT HINTERNET hRequest, + IN DWORD dwError, + IN DWORD dwFlags, + IN OUT LPVOID * lppvData + ); + +INTERNETAPI +DWORD +WINAPI +InternetConfirmZoneCrossing( + IN HWND hWnd, + IN LPSTR szUrlPrev, + IN LPSTR szUrlNew, + IN BOOL bPost + ); + +//#if !defined(_WINERROR_) + +// +// Internet API error returns +// + +#define INTERNET_ERROR_BASE 12000 + +#define ERROR_INTERNET_OUT_OF_HANDLES (INTERNET_ERROR_BASE + 1) +#define ERROR_INTERNET_TIMEOUT (INTERNET_ERROR_BASE + 2) +#define ERROR_INTERNET_EXTENDED_ERROR (INTERNET_ERROR_BASE + 3) +#define ERROR_INTERNET_INTERNAL_ERROR (INTERNET_ERROR_BASE + 4) +#define ERROR_INTERNET_INVALID_URL (INTERNET_ERROR_BASE + 5) +#define ERROR_INTERNET_UNRECOGNIZED_SCHEME (INTERNET_ERROR_BASE + 6) +#define ERROR_INTERNET_NAME_NOT_RESOLVED (INTERNET_ERROR_BASE + 7) +#define ERROR_INTERNET_PROTOCOL_NOT_FOUND (INTERNET_ERROR_BASE + 8) +#define ERROR_INTERNET_INVALID_OPTION (INTERNET_ERROR_BASE + 9) +#define ERROR_INTERNET_BAD_OPTION_LENGTH (INTERNET_ERROR_BASE + 10) +#define ERROR_INTERNET_OPTION_NOT_SETTABLE (INTERNET_ERROR_BASE + 11) +#define ERROR_INTERNET_SHUTDOWN (INTERNET_ERROR_BASE + 12) +#define ERROR_INTERNET_INCORRECT_USER_NAME (INTERNET_ERROR_BASE + 13) +#define ERROR_INTERNET_INCORRECT_PASSWORD (INTERNET_ERROR_BASE + 14) +#define ERROR_INTERNET_LOGIN_FAILURE (INTERNET_ERROR_BASE + 15) +#define ERROR_INTERNET_INVALID_OPERATION (INTERNET_ERROR_BASE + 16) +#define ERROR_INTERNET_OPERATION_CANCELLED (INTERNET_ERROR_BASE + 17) +#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE (INTERNET_ERROR_BASE + 18) +#define ERROR_INTERNET_INCORRECT_HANDLE_STATE (INTERNET_ERROR_BASE + 19) +#define ERROR_INTERNET_NOT_PROXY_REQUEST (INTERNET_ERROR_BASE + 20) +#define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND (INTERNET_ERROR_BASE + 21) +#define ERROR_INTERNET_BAD_REGISTRY_PARAMETER (INTERNET_ERROR_BASE + 22) +#define ERROR_INTERNET_NO_DIRECT_ACCESS (INTERNET_ERROR_BASE + 23) +#define ERROR_INTERNET_NO_CONTEXT (INTERNET_ERROR_BASE + 24) +#define ERROR_INTERNET_NO_CALLBACK (INTERNET_ERROR_BASE + 25) +#define ERROR_INTERNET_REQUEST_PENDING (INTERNET_ERROR_BASE + 26) +#define ERROR_INTERNET_INCORRECT_FORMAT (INTERNET_ERROR_BASE + 27) +#define ERROR_INTERNET_ITEM_NOT_FOUND (INTERNET_ERROR_BASE + 28) +#define ERROR_INTERNET_CANNOT_CONNECT (INTERNET_ERROR_BASE + 29) +#define ERROR_INTERNET_CONNECTION_ABORTED (INTERNET_ERROR_BASE + 30) +#define ERROR_INTERNET_CONNECTION_RESET (INTERNET_ERROR_BASE + 31) +#define ERROR_INTERNET_FORCE_RETRY (INTERNET_ERROR_BASE + 32) +#define ERROR_INTERNET_INVALID_PROXY_REQUEST (INTERNET_ERROR_BASE + 33) + +#define ERROR_INTERNET_HANDLE_EXISTS (INTERNET_ERROR_BASE + 36) +#define ERROR_INTERNET_SEC_CERT_DATE_INVALID (INTERNET_ERROR_BASE + 37) +#define ERROR_INTERNET_SEC_CERT_CN_INVALID (INTERNET_ERROR_BASE + 38) +#define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR (INTERNET_ERROR_BASE + 39) +#define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR (INTERNET_ERROR_BASE + 40) +#define ERROR_INTERNET_MIXED_SECURITY (INTERNET_ERROR_BASE + 41) +#define ERROR_INTERNET_CHG_POST_IS_NON_SECURE (INTERNET_ERROR_BASE + 42) +#define ERROR_INTERNET_POST_IS_NON_SECURE (INTERNET_ERROR_BASE + 43) + +// +// FTP API errors +// + +#define ERROR_FTP_TRANSFER_IN_PROGRESS (INTERNET_ERROR_BASE + 110) +#define ERROR_FTP_DROPPED (INTERNET_ERROR_BASE + 111) + +// +// gopher API errors +// + +#define ERROR_GOPHER_PROTOCOL_ERROR (INTERNET_ERROR_BASE + 130) +#define ERROR_GOPHER_NOT_FILE (INTERNET_ERROR_BASE + 131) +#define ERROR_GOPHER_DATA_ERROR (INTERNET_ERROR_BASE + 132) +#define ERROR_GOPHER_END_OF_DATA (INTERNET_ERROR_BASE + 133) +#define ERROR_GOPHER_INVALID_LOCATOR (INTERNET_ERROR_BASE + 134) +#define ERROR_GOPHER_INCORRECT_LOCATOR_TYPE (INTERNET_ERROR_BASE + 135) +#define ERROR_GOPHER_NOT_GOPHER_PLUS (INTERNET_ERROR_BASE + 136) +#define ERROR_GOPHER_ATTRIBUTE_NOT_FOUND (INTERNET_ERROR_BASE + 137) +#define ERROR_GOPHER_UNKNOWN_LOCATOR (INTERNET_ERROR_BASE + 138) + +// +// HTTP API errors +// + +#define ERROR_HTTP_HEADER_NOT_FOUND (INTERNET_ERROR_BASE + 150) +#define ERROR_HTTP_DOWNLEVEL_SERVER (INTERNET_ERROR_BASE + 151) +#define ERROR_HTTP_INVALID_SERVER_RESPONSE (INTERNET_ERROR_BASE + 152) +#define ERROR_HTTP_INVALID_HEADER (INTERNET_ERROR_BASE + 153) +#define ERROR_HTTP_INVALID_QUERY_REQUEST (INTERNET_ERROR_BASE + 154) +#define ERROR_HTTP_HEADER_ALREADY_EXISTS (INTERNET_ERROR_BASE + 155) +#define ERROR_HTTP_REDIRECT_FAILED (INTERNET_ERROR_BASE + 156) + +#define INTERNET_ERROR_LAST ERROR_HTTP_REDIRECT_FAILED + +//#endif // !defined(_WINERROR_) + +// +// URLCACHE APIs +// + +#if !defined(_WINX32_) && !defined(_URLCACHEAPI_) +#define URLCACHEAPI DECLSPEC_IMPORT +#else +#define URLCACHEAPI +#endif + +// +// datatype definitions. +// + +// +// cache entry type flags. +// + +#define NORMAL_CACHE_ENTRY 0x00000001 +#define STABLE_CACHE_ENTRY 0x00000002 +#define STICKY_CACHE_ENTRY 0x00000004 + +#define SPARSE_CACHE_ENTRY 0x00010000 +#define OCX_CACHE_ENTRY 0x00020000 + +// +// INTERNET_CACHE_ENTRY_INFO - +// + +typedef struct _INTERNET_CACHE_ENTRY_INFOA { + DWORD dwStructSize; // version of cache system. ?? do we need this for all entries? + LPSTR lpszSourceUrlName; // embedded pointer to the URL name string. + LPSTR lpszLocalFileName; // embedded pointer to the local file name. + DWORD CacheEntryType; // cache type bit mask. + DWORD dwUseCount; // current users count of the cache entry. + DWORD dwHitRate; // num of times the cache entry was retrieved. + DWORD dwSizeLow; // low DWORD of the file size. + DWORD dwSizeHigh; // high DWORD of the file size. + FILETIME LastModifiedTime; // last modified time of the file in GMT format. + FILETIME ExpireTime; // expire time of the file in GMT format + FILETIME LastAccessTime; // last accessed time in GMT format + FILETIME LastSyncTime; // last time the URL was synchronized + // with the source + LPBYTE lpHeaderInfo; // embedded pointer to the header info. + DWORD dwHeaderInfoSize; // size of the above header. + LPSTR lpszFileExtension; // File extension used to retrive the urldata as a file. + DWORD dwReserved; // reserved for future use. +} INTERNET_CACHE_ENTRY_INFOA, * LPINTERNET_CACHE_ENTRY_INFOA; +typedef struct _INTERNET_CACHE_ENTRY_INFOW { + DWORD dwStructSize; // version of cache system. ?? do we need this for all entries? + LPSTR lpszSourceUrlName; // embedded pointer to the URL name string. + LPWSTR lpszLocalFileName; // embedded pointer to the local file name. + DWORD CacheEntryType; // cache type bit mask. + DWORD dwUseCount; // current users count of the cache entry. + DWORD dwHitRate; // num of times the cache entry was retrieved. + DWORD dwSizeLow; // low DWORD of the file size. + DWORD dwSizeHigh; // high DWORD of the file size. + FILETIME LastModifiedTime; // last modified time of the file in GMT format. + FILETIME ExpireTime; // expire time of the file in GMT format + FILETIME LastAccessTime; // last accessed time in GMT format + FILETIME LastSyncTime; // last time the URL was synchronized + // with the source + LPBYTE lpHeaderInfo; // embedded pointer to the header info. + DWORD dwHeaderInfoSize; // size of the above header. + LPWSTR lpszFileExtension; // File extension used to retrive the urldata as a file. + DWORD dwReserved; // reserved for future use. +} INTERNET_CACHE_ENTRY_INFOW, * LPINTERNET_CACHE_ENTRY_INFOW; +#ifdef UNICODE +typedef INTERNET_CACHE_ENTRY_INFOW INTERNET_CACHE_ENTRY_INFO; +typedef LPINTERNET_CACHE_ENTRY_INFOW LPINTERNET_CACHE_ENTRY_INFO; +#else +typedef INTERNET_CACHE_ENTRY_INFOA INTERNET_CACHE_ENTRY_INFO; +typedef LPINTERNET_CACHE_ENTRY_INFOA LPINTERNET_CACHE_ENTRY_INFO; +#endif // UNICODE + +// +// Cache APIs +// + +URLCACHEAPI +BOOL +WINAPI +CreateUrlCacheEntryA( + IN LPCSTR lpszUrlName, + IN DWORD dwExpectedFileSize, + IN LPCSTR lpszFileExtension, + OUT LPSTR lpszFileName, + IN DWORD dwReserved + ); +URLCACHEAPI +BOOL +WINAPI +CreateUrlCacheEntryW( + IN LPCSTR lpszUrlName, + IN DWORD dwExpectedFileSize, + IN LPCSTR lpszFileExtension, + OUT LPWSTR lpszFileName, + IN DWORD dwReserved + ); +#ifdef UNICODE +#define CreateUrlCacheEntry CreateUrlCacheEntryW +#else +#define CreateUrlCacheEntry CreateUrlCacheEntryA +#endif // !UNICODE + +URLCACHEAPI +BOOL +WINAPI +CommitUrlCacheEntryA( + IN LPCSTR lpszUrlName, + IN LPCSTR lpszLocalFileName, + IN FILETIME ExpireTime, + IN FILETIME LastModifiedTime, + IN DWORD CacheEntryType, + IN LPBYTE lpHeaderInfo, + IN DWORD dwHeaderSize, + IN LPCTSTR lpszFileExtension, + IN DWORD dwReserved + ); +URLCACHEAPI +BOOL +WINAPI +CommitUrlCacheEntryW( + IN LPCSTR lpszUrlName, + IN LPCWSTR lpszLocalFileName, + IN FILETIME ExpireTime, + IN FILETIME LastModifiedTime, + IN DWORD CacheEntryType, + IN LPBYTE lpHeaderInfo, + IN DWORD dwHeaderSize, + IN LPCTSTR lpszFileExtension, + IN DWORD dwReserved + ); +#ifdef UNICODE +#define CommitUrlCacheEntry CommitUrlCacheEntryW +#else +#define CommitUrlCacheEntry CommitUrlCacheEntryA +#endif // !UNICODE + +URLCACHEAPI +BOOL +WINAPI +RetrieveUrlCacheEntryFileA( + IN LPCSTR lpszUrlName, + OUT LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, + IN OUT LPDWORD lpdwCacheEntryInfoBufferSize, + IN DWORD dwReserved + ); +URLCACHEAPI +BOOL +WINAPI +RetrieveUrlCacheEntryFileW( + IN LPCSTR lpszUrlName, + OUT LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, + IN OUT LPDWORD lpdwCacheEntryInfoBufferSize, + IN DWORD dwReserved + ); +#ifdef UNICODE +#define RetrieveUrlCacheEntryFile RetrieveUrlCacheEntryFileW +#else +#define RetrieveUrlCacheEntryFile RetrieveUrlCacheEntryFileA +#endif // !UNICODE + +URLCACHEAPI +BOOL +WINAPI +UnlockUrlCacheEntryFile( + IN LPCSTR lpszUrlName, + IN DWORD dwReserved + ); + +URLCACHEAPI +HANDLE +WINAPI +RetrieveUrlCacheEntryStreamA( + IN LPCSTR lpszUrlName, + OUT LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, + IN OUT LPDWORD lpdwCacheEntryInfoBufferSize, + IN BOOL fRandomRead, + IN DWORD dwReserved + ); +URLCACHEAPI +HANDLE +WINAPI +RetrieveUrlCacheEntryStreamW( + IN LPCSTR lpszUrlName, + OUT LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, + IN OUT LPDWORD lpdwCacheEntryInfoBufferSize, + IN BOOL fRandomRead, + IN DWORD dwReserved + ); +#ifdef UNICODE +#define RetrieveUrlCacheEntryStream RetrieveUrlCacheEntryStreamW +#else +#define RetrieveUrlCacheEntryStream RetrieveUrlCacheEntryStreamA +#endif // !UNICODE + +URLCACHEAPI +BOOL +WINAPI +ReadUrlCacheEntryStream( + IN HANDLE hUrlCacheStream, + IN DWORD dwLocation, + IN OUT LPVOID lpBuffer, + IN OUT LPDWORD lpdwLen, + IN DWORD Reserved + ); + +URLCACHEAPI +BOOL +WINAPI +UnlockUrlCacheEntryStream( + IN HANDLE hUrlCacheStream, + IN DWORD Reserved + ); + +URLCACHEAPI +BOOL +WINAPI +GetUrlCacheEntryInfoA( + IN LPCSTR lpszUrlName, + OUT LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, + IN OUT LPDWORD lpdwCacheEntryInfoBufferSize + ); +URLCACHEAPI +BOOL +WINAPI +GetUrlCacheEntryInfoW( + IN LPCSTR lpszUrlName, + OUT LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, + IN OUT LPDWORD lpdwCacheEntryInfoBufferSize + ); +#ifdef UNICODE +#define GetUrlCacheEntryInfo GetUrlCacheEntryInfoW +#else +#define GetUrlCacheEntryInfo GetUrlCacheEntryInfoA +#endif // !UNICODE + +#define CACHE_ENTRY_ATTRIBUTE_FC 0x00000004 +#define CACHE_ENTRY_HITRATE_FC 0x00000010 +#define CACHE_ENTRY_MODTIME_FC 0x00000040 +#define CACHE_ENTRY_EXPTIME_FC 0x00000080 +#define CACHE_ENTRY_ACCTIME_FC 0x00000100 +#define CACHE_ENTRY_SYNCTIME_FC 0x00000200 +#define CACHE_ENTRY_HEADERINFO_FC 0x00000400 + +URLCACHEAPI +BOOL +WINAPI +SetUrlCacheEntryInfoA( + IN LPCSTR lpszUrlName, + IN LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, + IN DWORD dwFieldControl + ); +URLCACHEAPI +BOOL +WINAPI +SetUrlCacheEntryInfoW( + IN LPCSTR lpszUrlName, + IN LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, + IN DWORD dwFieldControl + ); +#ifdef UNICODE +#define SetUrlCacheEntryInfo SetUrlCacheEntryInfoW +#else +#define SetUrlCacheEntryInfo SetUrlCacheEntryInfoA +#endif // !UNICODE + +URLCACHEAPI +HANDLE +WINAPI +FindFirstUrlCacheEntryA( + IN LPCSTR lpszUrlSearchPattern, + OUT LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo, + IN OUT LPDWORD lpdwFirstCacheEntryInfoBufferSize + ); +URLCACHEAPI +HANDLE +WINAPI +FindFirstUrlCacheEntryW( + IN LPCSTR lpszUrlSearchPattern, + OUT LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo, + IN OUT LPDWORD lpdwFirstCacheEntryInfoBufferSize + ); +#ifdef UNICODE +#define FindFirstUrlCacheEntry FindFirstUrlCacheEntryW +#else +#define FindFirstUrlCacheEntry FindFirstUrlCacheEntryA +#endif // !UNICODE + +URLCACHEAPI +BOOL +WINAPI +FindNextUrlCacheEntryA( + IN HANDLE hEnumHandle, + OUT LPINTERNET_CACHE_ENTRY_INFO lpNextCacheEntryInfo, + IN OUT LPDWORD lpdwNextCacheEntryInfoBufferSize + ); +URLCACHEAPI +BOOL +WINAPI +FindNextUrlCacheEntryW( + IN HANDLE hEnumHandle, + OUT LPINTERNET_CACHE_ENTRY_INFO lpNextCacheEntryInfo, + IN OUT LPDWORD lpdwNextCacheEntryInfoBufferSize + ); +#ifdef UNICODE +#define FindNextUrlCacheEntry FindNextUrlCacheEntryW +#else +#define FindNextUrlCacheEntry FindNextUrlCacheEntryA +#endif // !UNICODE + +URLCACHEAPI +BOOL +WINAPI +FindCloseUrlCache( + IN HANDLE hEnumHandle + ); + +URLCACHEAPI +BOOL +WINAPI +DeleteUrlCacheEntry( + IN LPCSTR lpszUrlName + ); + +#if defined(__cplusplus) +} +#endif + +#endif // !defined(_WININET_) |