// ------------------------------------------------------------------- //
//        Wininet.h-- for Sphinx C-- (Wininet.dll)                     //
// ------------------------------------------------------------------- //

#define HINTERNET dword
#define INTERNET_PORT word
#define INTERNET_SCHEME dword

#define INTERNET_INVALID_PORT_NUMBER    0
#define INTERNET_DEFAULT_FTP_PORT       21
#define INTERNET_DEFAULT_GOPHER_PORT    70
#define INTERNET_DEFAULT_HTTP_PORT      80
#define INTERNET_DEFAULT_HTTPS_PORT     443
#define INTERNET_DEFAULT_SOCKS_PORT     1080

#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
#define INTERNET_MAX_PORT_NUMBER_VALUE  65535
#define INTERNET_MAX_PATH_LENGTH        2048
#define INTERNET_MAX_SCHEME_LENGTH      32
#define INTERNET_MAX_URL_LENGTH         INTERNET_MAX_SCHEME_LENGTH + 4 + INTERNET_MAX_PATH_LENGTH

#define INTERNET_KEEP_ALIVE_UNKNOWN     -1
#define INTERNET_KEEP_ALIVE_ENABLED     1
#define INTERNET_KEEP_ALIVE_DISABLED    0

#define INTERNET_REQFLAG_FROM_CACHE     0x00000001
#define INTERNET_REQFLAG_ASYNC          0x00000002
#define INTERNET_REQFLAG_VIA_PROXY      0x00000004
#define INTERNET_REQFLAG_NO_HEADERS     0x00000008
#define INTERNET_REQFLAG_PASSIVE        0x00000010
#define INTERNET_REQFLAG_CACHE_WRITE_DISABLED 0x00000040
#define INTERNET_REQFLAG_NET_TIMEOUT    0x00000080

#define INTERNET_FLAG_RELOAD            0x80000000
#define INTERNET_FLAG_RAW_DATA          0x40000000
#define INTERNET_FLAG_EXISTING_CONNECT  0x20000000
#define INTERNET_FLAG_ASYNC             0x10000000
#define INTERNET_FLAG_PASSIVE           0x08000000
#define INTERNET_FLAG_NO_CACHE_WRITE    0x04000000
#define INTERNET_FLAG_DONT_CACHE        INTERNET_FLAG_NO_CACHE_WRITE
#define INTERNET_FLAG_MAKE_PERSISTENT   0x02000000
#define INTERNET_FLAG_FROM_CACHE        0x01000000
#define INTERNET_FLAG_OFFLINE           INTERNET_FLAG_FROM_CACHE
#define INTERNET_FLAG_SECURE            0x00800000
#define INTERNET_FLAG_KEEP_CONNECTION   0x00400000
#define INTERNET_FLAG_NO_AUTO_REDIRECT  0x00200000
#define INTERNET_FLAG_READ_PREFETCH     0x00100000
#define INTERNET_FLAG_NO_COOKIES        0x00080000
#define INTERNET_FLAG_NO_AUTH           0x00040000
#define INTERNET_FLAG_CACHE_IF_NET_FAIL 0x00010000

#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP   0x00008000
#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS  0x00004000
#define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID  0x00002000
#define INTERNET_FLAG_IGNORE_CERT_CN_INVALID    0x00001000

#define INTERNET_FLAG_RESYNCHRONIZE     0x00000800
#define INTERNET_FLAG_HYPERLINK         0x00000400
#define INTERNET_FLAG_NO_UI             0x00000200
#define INTERNET_FLAG_PRAGMA_NOCACHE    0x00000100
#define INTERNET_FLAG_CACHE_ASYNC       0x00000080
#define INTERNET_FLAG_FORMS_SUBMIT      0x00000040
#define INTERNET_FLAG_FWD_BACK          0x00000020
#define INTERNET_FLAG_NEED_FILE         0x00000010
#define INTERNET_FLAG_MUST_CACHE_REQUEST INTERNET_FLAG_NEED_FILE

#define INTERNET_FLAG_TRANSFER_ASCII    FTP_TRANSFER_TYPE_ASCII
#define INTERNET_FLAG_TRANSFER_BINARY   FTP_TRANSFER_TYPE_BINARY

#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


#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 INTERNET_FLAGS_MASK     INTERNET_FLAG_RELOAD
                                | INTERNET_FLAG_RAW_DATA
                                | INTERNET_FLAG_EXISTING_CONNECT
                                | INTERNET_FLAG_ASYNC
                                | INTERNET_FLAG_PASSIVE
                                | INTERNET_FLAG_NO_CACHE_WRITE
                                | INTERNET_FLAG_MAKE_PERSISTENT
                                | INTERNET_FLAG_FROM_CACHE
                                | INTERNET_FLAG_SECURE
                                | INTERNET_FLAG_KEEP_CONNECTION
                                | INTERNET_FLAG_NO_AUTO_REDIRECT
                                | INTERNET_FLAG_READ_PREFETCH
                                | INTERNET_FLAG_NO_COOKIES
                                | INTERNET_FLAG_NO_AUTH
                                | INTERNET_FLAG_CACHE_IF_NET_FAIL
                                | SECURITY_INTERNET_MASK
                                | INTERNET_FLAG_RESYNCHRONIZE
                                | INTERNET_FLAG_HYPERLINK
                                | INTERNET_FLAG_NO_UI
                                | INTERNET_FLAG_PRAGMA_NOCACHE
                                | INTERNET_FLAG_CACHE_ASYNC
                                | INTERNET_FLAG_FORMS_SUBMIT
                                | INTERNET_FLAG_NEED_FILE
                                | INTERNET_FLAG_TRANSFER_BINARY
                                | INTERNET_FLAG_TRANSFER_ASCII
                                | INTERNET_FLAG_FWD_BACK

#define INTERNET_ERROR_MASK_INSERT_CDROM                    0x1
#define INTERNET_ERROR_MASK_COMBINED_SEC_CERT               0x2
#define INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG               0X4
#define INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY 0x8
#define INTERNET_OPTIONS_MASK   !INTERNET_FLAGS_MASK

#define WININET_API_FLAG_ASYNC          0x00000001
#define WININET_API_FLAG_SYNC           0x00000004
#define WININET_API_FLAG_USE_CONTEXT    0x00000008

#define INTERNET_NO_CALLBACK            0

#define INTERNET_PER_CONN_FLAGS                         1
#define INTERNET_PER_CONN_PROXY_SERVER                  2
#define INTERNET_PER_CONN_PROXY_BYPASS                  3
#define INTERNET_PER_CONN_AUTOCONFIG_URL                4
#define INTERNET_PER_CONN_AUTODISCOVERY_FLAGS           5

#define PROXY_TYPE_DIRECT                               0x00000001
#define PROXY_TYPE_PROXY                                0x00000002
#define PROXY_TYPE_AUTO_PROXY_URL                       0x00000004
#define PROXY_TYPE_AUTO_DETECT                          0x00000008

#define AUTO_PROXY_FLAG_USER_SET                        0x00000001
#define AUTO_PROXY_FLAG_ALWAYS_DETECT                   0x00000002
#define AUTO_PROXY_FLAG_DETECTION_RUN                   0x00000004
#define AUTO_PROXY_FLAG_MIGRATED                        0x00000008
#define AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT         0x00000010
#define AUTO_PROXY_FLAG_CACHE_INIT_RUN                  0x00000020
#define AUTO_PROXY_FLAG_DETECTION_SUSPECT               0x00000040

#define ISO_FORCE_DISCONNECTED  0x00000001

#define INTERNET_RFC1123_FORMAT     0
#define INTERNET_RFC1123_BUFSIZE   30

#define ICU_ESCAPE      0x80000000
#define ICU_USERNAME    0x40000000
#define ICU_NO_ENCODE   0x20000000
#define ICU_DECODE      0x10000000
#define ICU_NO_META     0x08000000
#define ICU_ENCODE_SPACES_ONLY 0x04000000
#define ICU_BROWSER_MODE 0x02000000
#define ICU_ENCODE_PERCENT      0x00001000

#define INTERNET_OPEN_TYPE_PRECONFIG                    0
#define INTERNET_OPEN_TYPE_DIRECT                       1
#define INTERNET_OPEN_TYPE_PROXY                        3
#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  4

#define PRE_CONFIG_INTERNET_ACCESS  INTERNET_OPEN_TYPE_PRECONFIG
#define LOCAL_INTERNET_ACCESS       INTERNET_OPEN_TYPE_DIRECT
#define CERN_PROXY_INTERNET_ACCESS  INTERNET_OPEN_TYPE_PROXY

#define INTERNET_SERVICE_FTP    1
#define INTERNET_SERVICE_GOPHER 2
#define INTERNET_SERVICE_HTTP   3

#define IRF_ASYNC       WININET_API_FLAG_ASYNC
#define IRF_SYNC        WININET_API_FLAG_SYNC
#define IRF_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT
#define IRF_NO_WAIT     0x00000008

#define ISO_GLOBAL      0x00000001
#define ISO_REGISTRY    0x00000002
#define ISO_VALID_FLAGS ISO_GLOBAL | ISO_REGISTRY

#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_LISTEN_TIMEOUT          11
#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_OPTION_SETTINGS_CHANGED        39
#define INTERNET_OPTION_VERSION                 40
#define INTERNET_OPTION_USER_AGENT              41
#define INTERNET_OPTION_END_BROWSER_SESSION     42
#define INTERNET_OPTION_PROXY_USERNAME          43
#define INTERNET_OPTION_PROXY_PASSWORD          44
#define INTERNET_OPTION_CONTEXT_VALUE           45
#define INTERNET_OPTION_CONNECT_LIMIT           46
#define INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT 47
#define INTERNET_OPTION_POLICY                  48
#define INTERNET_OPTION_DISCONNECTED_TIMEOUT    49
#define INTERNET_OPTION_CONNECTED_STATE         50
#define INTERNET_OPTION_IDLE_STATE              51
#define INTERNET_OPTION_OFFLINE_SEMANTICS       52
#define INTERNET_OPTION_SECONDARY_CACHE_KEY     53
#define INTERNET_OPTION_CALLBACK_FILTER         54
#define INTERNET_OPTION_CONNECT_TIME            55
#define INTERNET_OPTION_SEND_THROUGHPUT         56
#define INTERNET_OPTION_RECEIVE_THROUGHPUT      57
#define INTERNET_OPTION_REQUEST_PRIORITY        58
#define INTERNET_OPTION_HTTP_VERSION            59
#define INTERNET_OPTION_RESET_URLCACHE_SESSION  60
#define INTERNET_OPTION_ERROR_MASK              62
#define INTERNET_OPTION_FROM_CACHE_TIMEOUT      63
#define INTERNET_OPTION_BYPASS_EDITED_ENTRY     64
#define INTERNET_OPTION_CODEPAGE                68
#define INTERNET_OPTION_CACHE_TIMESTAMPS        69
#define INTERNET_OPTION_DISABLE_AUTODIAL         70
#define INTERNET_OPTION_MAX_CONNS_PER_SERVER     73
#define INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER 74
#define INTERNET_OPTION_PER_CONNECTION_OPTION    75
#define INTERNET_OPTION_DIGEST_AUTH_UNLOAD       76
#define INTERNET_OPTION_IGNORE_OFFLINE           77
#define INTERNET_FIRST_OPTION                   INTERNET_OPTION_CALLBACK
#define INTERNET_LAST_OPTION                    INTERNET_OPTION_IGNORE_OFFLINE

#define INTERNET_PRIORITY_FOREGROUND            1000

#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
#define INTERNET_HANDLE_TYPE_FILE_REQUEST       14

#define SECURITY_FLAG_SECURE                    0x00000001
#define SECURITY_FLAG_STRENGTH_WEAK             0x10000000
#define SECURITY_FLAG_STRENGTH_MEDIUM           0x40000000
#define SECURITY_FLAG_STRENGTH_STRONG           0x20000000
#define SECURITY_FLAG_UNKNOWNBIT                0x80000000
#define SECURITY_FLAG_FORTEZZA                  0x08000000
#define SECURITY_FLAG_NORMALBITNESS             SECURITY_FLAG_STRENGTH_WEAK

#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                     SECURITY_FLAG_STRENGTH_WEAK
#define SECURITY_FLAG_128BIT                    SECURITY_FLAG_STRENGTH_STRONG
#define SECURITY_FLAG_56BIT                     SECURITY_FLAG_STRENGTH_MEDIUM

#define SECURITY_FLAG_IGNORE_REVOCATION         0x00000080
#define SECURITY_FLAG_IGNORE_UNKNOWN_CA         0x00000100
#define SECURITY_FLAG_IGNORE_WRONG_USAGE        0x00000200
#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

#define SECURITY_SET_MASK        SECURITY_FLAG_IGNORE_REVOCATION |
                                 SECURITY_FLAG_IGNORE_UNKNOWN_CA |
                                 SECURITY_FLAG_IGNORE_CERT_CN_INVALID |
                                 SECURITY_FLAG_IGNORE_CERT_DATE_INVALID |
                                 SECURITY_FLAG_IGNORE_WRONG_USAGE

#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_DETECTING_PROXY         80
#define INTERNET_STATUS_REQUEST_COMPLETE        100
#define INTERNET_STATUS_REDIRECT                110
#define INTERNET_STATUS_INTERMEDIATE_RESPONSE   120
#define INTERNET_STATUS_USER_INPUT_REQUIRED     140
#define INTERNET_STATUS_STATE_CHANGE            200

#define INTERNET_STATE_CONNECTED                0x00000001
#define INTERNET_STATE_DISCONNECTED             0x00000002
#define INTERNET_STATE_DISCONNECTED_BY_USER     0x00000010
#define INTERNET_STATE_IDLE                     0x00000100
#define INTERNET_STATE_BUSY                     0x00000200

#define INTERNET_INVALID_STATUS_CALLBACK        -1

#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                                


#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


#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           

#define MAX_GOPHER_CATEGORY_NAME    128
#define MAX_GOPHER_ATTRIBUTE_NAME   128
#define MIN_GOPHER_ATTRIBUTE_LENGTH 256

#define GOPHER_INFO_CATEGORY        "+INFO"
#define GOPHER_ADMIN_CATEGORY       "+ADMIN"
#define GOPHER_VIEWS_CATEGORY       "+VIEWS"
#define GOPHER_ABSTRACT_CATEGORY    "+ABSTRACT"
#define GOPHER_VERONICA_CATEGORY    "+VERONICA"

#define GOPHER_ADMIN_ATTRIBUTE      "Admin"
#define GOPHER_MOD_DATE_ATTRIBUTE   "Mod-Date"
#define GOPHER_TTL_ATTRIBUTE        "TTL"
#define GOPHER_SCORE_ATTRIBUTE      "Score"
#define GOPHER_RANGE_ATTRIBUTE      "Score-range"
#define GOPHER_SITE_ATTRIBUTE       "Site"
#define GOPHER_ORG_ATTRIBUTE        "Org"
#define GOPHER_LOCATION_ATTRIBUTE   "Loc"
#define GOPHER_GEOG_ATTRIBUTE       "Geog"
#define GOPHER_TIMEZONE_ATTRIBUTE   "TZ"
#define GOPHER_PROVIDER_ATTRIBUTE   "Provider"
#define GOPHER_VERSION_ATTRIBUTE    "Version"
#define GOPHER_ABSTRACT_ATTRIBUTE   "Abstract"
#define GOPHER_VIEW_ATTRIBUTE       "View"
#define GOPHER_TREEWALK_ATTRIBUTE   "treewalk"

#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

#define HTTP_MAJOR_VERSION      1
#define HTTP_MINOR_VERSION      0
#define HTTP_VERSIONA           "HTTP/1.0"
#define HTTP_VERSION            HTTP_VERSIONA

#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
#define HTTP_QUERY_STATUS_CODE                  19
#define HTTP_QUERY_STATUS_TEXT                  20
#define HTTP_QUERY_RAW_HEADERS                  21
#define HTTP_QUERY_RAW_HEADERS_CRLF             22
#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_REQUEST_METHOD               45
#define HTTP_QUERY_REFRESH                      46
#define HTTP_QUERY_CONTENT_DISPOSITION          47
#define HTTP_QUERY_AGE                          48
#define HTTP_QUERY_CACHE_CONTROL                49
#define HTTP_QUERY_CONTENT_BASE                 50
#define HTTP_QUERY_CONTENT_LOCATION             51
#define HTTP_QUERY_CONTENT_MD5                  52
#define HTTP_QUERY_CONTENT_RANGE                53
#define HTTP_QUERY_ETAG                         54
#define HTTP_QUERY_HOST                         55
#define HTTP_QUERY_IF_MATCH                     56
#define HTTP_QUERY_IF_NONE_MATCH                57
#define HTTP_QUERY_IF_RANGE                     58
#define HTTP_QUERY_IF_UNMODIFIED_SINCE          59
#define HTTP_QUERY_MAX_FORWARDS                 60
#define HTTP_QUERY_PROXY_AUTHORIZATION          61
#define HTTP_QUERY_RANGE                        62
#define HTTP_QUERY_TRANSFER_ENCODING            63
#define HTTP_QUERY_UPGRADE                      64
#define HTTP_QUERY_VARY                         65
#define HTTP_QUERY_VIA                          66
#define HTTP_QUERY_WARNING                      67
#define HTTP_QUERY_EXPECT                       68
#define HTTP_QUERY_PROXY_CONNECTION             69
#define HTTP_QUERY_UNLESS_MODIFIED_SINCE        70
#define HTTP_QUERY_ECHO_REQUEST                 71
#define HTTP_QUERY_ECHO_REPLY                   72
#define HTTP_QUERY_ECHO_HEADERS                 73
#define HTTP_QUERY_ECHO_HEADERS_CRLF            74
#define HTTP_QUERY_MAX                          74
#define HTTP_QUERY_CUSTOM                       65535

#define HTTP_QUERY_FLAG_REQUEST_HEADERS         0x80000000
#define HTTP_QUERY_FLAG_SYSTEMTIME              0x40000000
#define HTTP_QUERY_FLAG_NUMBER                  0x20000000
#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

#define HTTP_STATUS_CONTINUE            100
#define HTTP_STATUS_SWITCH_PROTOCOLS    101
#define HTTP_STATUS_OK                  200
#define HTTP_STATUS_CREATED             201
#define HTTP_STATUS_ACCEPTED            202
#define HTTP_STATUS_PARTIAL             203
#define HTTP_STATUS_NO_CONTENT          204
#define HTTP_STATUS_RESET_CONTENT       205
#define HTTP_STATUS_PARTIAL_CONTENT     206
#define HTTP_STATUS_AMBIGUOUS           300
#define HTTP_STATUS_MOVED               301
#define HTTP_STATUS_REDIRECT            302
#define HTTP_STATUS_REDIRECT_METHOD     303
#define HTTP_STATUS_NOT_MODIFIED        304
#define HTTP_STATUS_USE_PROXY           305
#define HTTP_STATUS_REDIRECT_KEEP_VERB  307
#define HTTP_STATUS_BAD_REQUEST         400
#define HTTP_STATUS_DENIED              401
#define HTTP_STATUS_PAYMENT_REQ         402
#define HTTP_STATUS_FORBIDDEN           403
#define HTTP_STATUS_NOT_FOUND           404
#define HTTP_STATUS_BAD_METHOD          405
#define HTTP_STATUS_NONE_ACCEPTABLE     406
#define HTTP_STATUS_PROXY_AUTH_REQ      407
#define HTTP_STATUS_REQUEST_TIMEOUT     408
#define HTTP_STATUS_CONFLICT            409
#define HTTP_STATUS_GONE                410
#define HTTP_STATUS_LENGTH_REQUIRED     411
#define HTTP_STATUS_PRECOND_FAILED      412
#define HTTP_STATUS_REQUEST_TOO_LARGE   413
#define HTTP_STATUS_URI_TOO_LONG        414
#define HTTP_STATUS_UNSUPPORTED_MEDIA   415
#define HTTP_STATUS_RETRY_WITH          449
#define HTTP_STATUS_SERVER_ERROR        500
#define HTTP_STATUS_NOT_SUPPORTED       501
#define HTTP_STATUS_BAD_GATEWAY         502
#define HTTP_STATUS_SERVICE_UNAVAIL     503
#define HTTP_STATUS_GATEWAY_TIMEOUT     504
#define HTTP_STATUS_VERSION_NOT_SUP     505
#define HTTP_STATUS_FIRST               HTTP_STATUS_CONTINUE
#define HTTP_STATUS_LAST                HTTP_STATUS_VERSION_NOT_SUP

#define HTTP_ADDREQ_INDEX_MASK      0x0000FFFF
#define HTTP_ADDREQ_FLAGS_MASK      0xFFFF0000
#define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000
#define HTTP_ADDREQ_FLAG_ADD        0x20000000
#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
#define HTTP_ADDREQ_FLAG_REPLACE    0x80000000

#define HSR_ASYNC       WININET_API_FLAG_ASYNC
#define HSR_SYNC        WININET_API_FLAG_SYNC
#define HSR_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT
#define HSR_INITIATE    0x00000008
#define HSR_DOWNLOAD    0x00000010
#define HSR_CHUNKED     0x00000020
#define FLAG_ICC_FORCE_CONNECTION       0x00000001

#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
#define FLAGS_ERROR_UI_SERIALIZE_DIALOGS        0x10
#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_NEED_UI                  INTERNET_ERROR_BASE + 34
#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
#define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED  INTERNET_ERROR_BASE + 44
#define ERROR_INTERNET_INVALID_CA               INTERNET_ERROR_BASE + 45
#define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP    INTERNET_ERROR_BASE + 46
#define ERROR_INTERNET_ASYNC_THREAD_FAILED      INTERNET_ERROR_BASE + 47
#define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE   INTERNET_ERROR_BASE + 48
#define ERROR_INTERNET_DIALOG_PENDING           INTERNET_ERROR_BASE + 49
#define ERROR_INTERNET_RETRY_DIALOG             INTERNET_ERROR_BASE + 50
#define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR  INTERNET_ERROR_BASE + 52
#define ERROR_INTERNET_INSERT_CDROM             INTERNET_ERROR_BASE + 53
#define ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED    INTERNET_ERROR_BASE + 54
#define ERROR_INTERNET_SEC_CERT_ERRORS          INTERNET_ERROR_BASE + 55
#define ERROR_INTERNET_SEC_CERT_NO_REV          INTERNET_ERROR_BASE + 56
#define ERROR_INTERNET_SEC_CERT_REV_FAILED      INTERNET_ERROR_BASE + 57

#define ERROR_FTP_TRANSFER_IN_PROGRESS          INTERNET_ERROR_BASE + 110
#define ERROR_FTP_DROPPED                       INTERNET_ERROR_BASE + 111
#define ERROR_FTP_NO_PASSIVE_MODE               INTERNET_ERROR_BASE + 112

#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

#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 ERROR_HTTP_NOT_REDIRECTED               INTERNET_ERROR_BASE + 160
#define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION    INTERNET_ERROR_BASE + 161
#define ERROR_HTTP_COOKIE_DECLINED              INTERNET_ERROR_BASE + 162
#define ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION  INTERNET_ERROR_BASE + 168

#define ERROR_INTERNET_SECURITY_CHANNEL_ERROR   INTERNET_ERROR_BASE + 157
#define ERROR_INTERNET_UNABLE_TO_CACHE_FILE     INTERNET_ERROR_BASE + 158
#define ERROR_INTERNET_TCPIP_NOT_INSTALLED      INTERNET_ERROR_BASE + 159
#define ERROR_INTERNET_DISCONNECTED             INTERNET_ERROR_BASE + 163
#define ERROR_INTERNET_SERVER_UNREACHABLE       INTERNET_ERROR_BASE + 164
#define ERROR_INTERNET_PROXY_SERVER_UNREACHABLE INTERNET_ERROR_BASE + 165
#define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT    INTERNET_ERROR_BASE + 166
#define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT INTERNET_ERROR_BASE + 167
#define ERROR_INTERNET_SEC_INVALID_CERT         INTERNET_ERROR_BASE + 169
#define ERROR_INTERNET_SEC_CERT_REVOKED         INTERNET_ERROR_BASE + 170

#define ERROR_INTERNET_FAILED_DUETOSECURITYCHECK  INTERNET_ERROR_BASE + 171
#define ERROR_INTERNET_NOT_INITIALIZED          INTERNET_ERROR_BASE + 172
#define ERROR_INTERNET_NEED_MSN_SSPI_PKG        INTERNET_ERROR_BASE + 173
#define ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY   INTERNET_ERROR_BASE + 174

#define INTERNET_ERROR_LAST                     ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY

#define NORMAL_CACHE_ENTRY              0x00000001
#define STICKY_CACHE_ENTRY              0x00000004
#define EDITED_CACHE_ENTRY              0x00000008
#define TRACK_OFFLINE_CACHE_ENTRY       0x00000010
#define TRACK_ONLINE_CACHE_ENTRY        0x00000020
#define SPARSE_CACHE_ENTRY              0x00010000
#define COOKIE_CACHE_ENTRY              0x00100000
#define URLHISTORY_CACHE_ENTRY          0x00200000

#define URLCACHE_FIND_DEFAULT_FILTER    NORMAL_CACHE_ENTRY             
                                    |   COOKIE_CACHE_ENTRY             
                                    |   URLHISTORY_CACHE_ENTRY         
                                    |   TRACK_OFFLINE_CACHE_ENTRY      
                                    |   TRACK_ONLINE_CACHE_ENTRY       
                                    |   STICKY_CACHE_ENTRY

#define CACHEGROUP_ATTRIBUTE_GET_ALL        0xffffffff
#define CACHEGROUP_ATTRIBUTE_BASIC          0x00000001
#define CACHEGROUP_ATTRIBUTE_FLAG           0x00000002
#define CACHEGROUP_ATTRIBUTE_TYPE           0x00000004
#define CACHEGROUP_ATTRIBUTE_QUOTA          0x00000008
#define CACHEGROUP_ATTRIBUTE_GROUPNAME      0x00000010
#define CACHEGROUP_ATTRIBUTE_STORAGE        0x00000020
#define CACHEGROUP_FLAG_NONPURGEABLE        0x00000001
#define CACHEGROUP_FLAG_GIDONLY             0x00000004
#define CACHEGROUP_FLAG_FLUSHURL_ONDELETE   0x00000002
#define CACHEGROUP_SEARCH_ALL               0x00000000
#define CACHEGROUP_SEARCH_BYURL             0x00000001
#define CACHEGROUP_TYPE_INVALID             0x00000001

#define CACHEGROUP_READWRITE_MASK                  
            CACHEGROUP_ATTRIBUTE_TYPE              
        |   CACHEGROUP_ATTRIBUTE_QUOTA             
        |   CACHEGROUP_ATTRIBUTE_GROUPNAME         
        |   CACHEGROUP_ATTRIBUTE_STORAGE

#define  GROUPNAME_MAX_LENGTH       120
#define  GROUP_OWNER_STORAGE_SIZE   4
#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
#define CACHE_ENTRY_EXEMPT_DELTA_FC 0x00000800
#define INTERNET_DIAL_FORCE_PROMPT     0x2000
#define INTERNET_DIAL_SHOW_OFFLINE     0x4000
#define INTERNET_DIAL_UNATTENDED       0x8000
#define INTERENT_GOONLINE_REFRESH      0x00000001
#define INTERENT_GOONLINE_MASK         0x00000001
#define INTERNET_CONNECTION_MODEM           0x01
#define INTERNET_CONNECTION_LAN             0x02
#define INTERNET_CONNECTION_PROXY           0x04
#define INTERNET_CONNECTION_MODEM_BUSY      0x08
#define INTERNET_RAS_INSTALLED              0x10
#define INTERNET_CONNECTION_OFFLINE         0x20
#define INTERNET_CONNECTION_CONFIGURED      0x40
#define INTERNET_CUSTOMDIAL_CONNECT         0
#define INTERNET_CUSTOMDIAL_UNATTENDED      1
#define INTERNET_CUSTOMDIAL_DISCONNECT      2
#define INTERNET_CUSTOMDIAL_SHOWOFFLINE     4

#define INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED 1
#define INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE   2
#define INTERNET_CUSTOMDIAL_CAN_HANGUP          4

#define INTERNET_DIALSTATE_DISCONNECTED         1

:IS_GOPHER_FILE(EAX)            { IF(EAX & GOPHER_TYPE_FILE_MASK) EAX = TRUE; }
:IS_GOPHER_DIRECTORY(EAX)       { IF(EAX & GOPHER_TYPE_DIRECTORY) EAX = TRUE; }
:IS_GOPHER_PHONE_SERVER(EAX)    { IF(EAX & GOPHER_TYPE_CSO) EAX = TRUE; }
:IS_GOPHER_ERROR(EAX)           { IF(EAX & GOPHER_TYPE_ERROR) EAX = TRUE; }
:IS_GOPHER_INDEX_SERVER(EAX)    { IF(EAX & GOPHER_TYPE_INDEX_SERVER) EAX = TRUE; }
:IS_GOPHER_TELNET_SESSION(EAX)  { IF(EAX & GOPHER_TYPE_TELNET) EAX = TRUE; }
:IS_GOPHER_BACKUP_SERVER(EAX)   { IF(EAX & GOPHER_TYPE_REDUNDANT) EAX = TRUE; }
:IS_GOPHER_TN3270_SESSION(EAX)  { IF(EAX & GOPHER_TYPE_TN3270) EAX = TRUE; }
:IS_GOPHER_ASK(EAX)             { IF(EAX & GOPHER_TYPE_ASK) EAX = TRUE; }
:IS_GOPHER_PLUS(EAX)            { IF(EAX & GOPHER_TYPE_GOPHER_PLUS) EAX = TRUE; }
:IS_GOPHER_TYPE_KNOWN(EAX)      { IF(EAX & GOPHER_TYPE_UNKNOWN) EAX = TRUE; }

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_SOCKS,
    INTERNET_SCHEME_JAVASCRIPT,
    INTERNET_SCHEME_VBSCRIPT,
    INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP,
    INTERNET_SCHEME_LAST = INTERNET_SCHEME_VBSCRIPT
};

struct INTERNET_ASYNC_RESULT {
    DWORD dwResult;
    DWORD dwError;
};

struct INTERNET_PROXY_INFO {
    DWORD dwAccessType;
    DWORD lpszProxy;
    DWORD lpszProxyBypass;
};

struct INTERNET_PER_CONN_OPTIONA {
    DWORD   dwOption;
	union  {
        DWORD   dwValue;
        LPSTR   pszValue;
        FILETIME ftValue;
	};
};

struct INTERNET_PER_CONN_OPTION_LISTA {
    DWORD   dwSize;
    LPSTR   pszConnection;
    DWORD   dwOptionCount;
    DWORD   dwOptionError;
    DWORD   pOptions;
};

struct INTERNET_VERSION_INFO {
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
};

struct HTTP_VERSION_INFO {
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
};

struct INTERNET_CONNECTED_INFO {
    DWORD dwConnectedState;
    DWORD dwFlags;
};

struct URL_COMPONENTSA {
    DWORD   dwStructSize;
    LPSTR   lpszScheme;
    DWORD   dwSchemeLength;
    INTERNET_SCHEME nScheme;
    LPSTR   lpszHostName;
    DWORD   dwHostNameLength;
    INTERNET_PORT nPort;
    LPSTR   lpszUserName;
    DWORD   dwUserNameLength;
    LPSTR   lpszPassword;
    DWORD   dwPasswordLength;
    LPSTR   lpszUrlPath;
    DWORD   dwUrlPathLength;
    LPSTR   lpszExtraInfo;
    DWORD   dwExtraInfoLength;
};

struct INTERNET_CERTIFICATE_INFO {
    FILETIME ftExpiry;
    FILETIME ftStart;
    LPSTR lpszSubjectInfo;
    LPSTR lpszIssuerInfo;
    LPSTR lpszProtocolName;
    LPSTR lpszSignatureAlgName;
    LPSTR lpszEncryptionAlgName;
    DWORD dwKeySize;
};

struct INTERNET_BUFFERSA {
    DWORD dwStructSize;
    DWORD Next;
    LPCSTR  lpcszHeader;
    DWORD dwHeadersLength;
    DWORD dwHeadersTotal;
    LPVOID lpvBuffer;
    DWORD dwBufferLength;
    DWORD dwBufferTotal;
    DWORD dwOffsetLow;
    DWORD dwOffsetHigh;
};

struct INTERNET_BUFFERSW {
    DWORD dwStructSize;
    DWORD Next;
    LPCSTR  lpcszHeader;
    DWORD dwHeadersLength;
    DWORD dwHeadersTotal;
    LPVOID lpvBuffer;
    DWORD dwBufferLength;
    DWORD dwBufferTotal;
    DWORD dwOffsetLow;
    DWORD dwOffsetHigh;
};

struct GOPHER_FIND_DATAA {
    CHAR   DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1];
    DWORD GopherType;
    DWORD SizeLow;
    DWORD SizeHigh;
    FILETIME LastModificationTime;
    CHAR   Locator[MAX_GOPHER_LOCATOR_LENGTH + 1];
};

struct GOPHER_ADMIN_ATTRIBUTE_TYPE {
    LPCSTR Comment;
    LPCSTR EmailAddress;
};

struct GOPHER_MOD_DATE_ATTRIBUTE_TYPE {
    FILETIME DateAndTime;
};

struct GOPHER_TTL_ATTRIBUTE_TYPE {
    DWORD Ttl;
};

struct GOPHER_SCORE_ATTRIBUTE_TYPE {
    INT Score;
};

struct GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE {
    INT LowerBound;
    INT UpperBound;
};

struct GOPHER_SITE_ATTRIBUTE_TYPE {
    LPCSTR Site;
};

struct GOPHER_ORGANIZATION_ATTRIBUTE_TYPE {
    LPCSTR Organization;
};

struct GOPHER_LOCATION_ATTRIBUTE_TYPE {
    LPCSTR Location;
};

struct GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE {
    INT DegreesNorth;
    INT MinutesNorth;
    INT SecondsNorth;
    INT DegreesEast;
    INT MinutesEast;
    INT SecondsEast;
};

struct GOPHER_TIMEZONE_ATTRIBUTE_TYPE {
    INT Zone;
};

struct GOPHER_PROVIDER_ATTRIBUTE_TYPE {
    LPCSTR Provider;
};

struct GOPHER_VERSION_ATTRIBUTE_TYPE {
    LPCSTR Version;
};

struct GOPHER_ABSTRACT_ATTRIBUTE_TYPE {
    LPCSTR ShortAbstract;
    LPCSTR AbstractFile;
};

struct GOPHER_VIEW_ATTRIBUTE_TYPE {
    LPCSTR ContentType;
    LPCSTR Language;
    DWORD Size;
};

struct GOPHER_VERONICA_ATTRIBUTE_TYPE {
    BOOL TreeWalk;
};

struct GOPHER_ASK_ATTRIBUTE_TYPE {
    LPCSTR QuestionType;
    LPCSTR QuestionText;
};

struct GOPHER_UNKNOWN_ATTRIBUTE_TYPE {
    LPCSTR Text;
};

struct GOPHER_ATTRIBUTE_TYPE {
    DWORD CategoryId;
    DWORD AttributeId;
    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;
    };
};

struct INTERNET_AUTH_NOTIFY_DATA {
    DWORD            cbStruct;
    DWORD            dwOptions;
    DWORD            pfnNotify;
    DWORD            dwContext;
};

struct INTERNET_CACHE_ENTRY_INFOA {
    DWORD dwStructSize;
    LPSTR   lpszSourceUrlName;
    LPSTR   lpszLocalFileName;
    DWORD CacheEntryType;
    DWORD dwUseCount;
    DWORD dwHitRate;
    DWORD dwSizeLow;
    DWORD dwSizeHigh;
    FILETIME LastModifiedTime;
    FILETIME ExpireTime;
    FILETIME LastAccessTime;
    FILETIME LastSyncTime;
    LPSTR   lpHeaderInfo;
    DWORD dwHeaderInfoSize;
    LPSTR   lpszFileExtension;
    union {
        DWORD dwReserved;
        DWORD dwExemptDelta;
    };
};

struct INTERNET_CACHE_ENTRY_INFOW {
    DWORD dwStructSize;
    LPSTR  lpszSourceUrlName;
    LPSTR  lpszLocalFileName;
    DWORD CacheEntryType;
    DWORD dwUseCount;
    DWORD dwHitRate;
    DWORD dwSizeLow;
    DWORD dwSizeHigh;
    FILETIME LastModifiedTime;
    FILETIME ExpireTime;
    FILETIME LastAccessTime;
    FILETIME LastSyncTime;
    LPSTR  lpHeaderInfo;
    DWORD dwHeaderInfoSize;
    LPSTR  lpszFileExtension;
    union {
        DWORD dwReserved;
        DWORD dwExemptDelta;
    };
};

struct INTERNET_CACHE_TIMESTAMPS {
    FILETIME    ftExpires;
    FILETIME    ftLastModified;
};

struct INTERNET_CACHE_GROUP_INFOA {
    DWORD           dwGroupSize;
    DWORD           dwGroupFlags;
    DWORD           dwGroupType;
    DWORD           dwDiskUsage;
    DWORD           dwDiskQuota;
    DWORD           dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
    CHAR            szGroupName[GROUPNAME_MAX_LENGTH];
};

#define INTERNET_PER_CONN_OPTION INTERNET_PER_CONN_OPTIONA
#define INTERNET_PER_CONN_OPTION_LIST INTERNET_PER_CONN_OPTION_LISTA
#define URL_COMPONENTS URL_COMPONENTSA
#define INTERNET_BUFFERS INTERNET_BUFFERSA
#define GOPHER_FIND_DATA GOPHER_FIND_DATAA
#define INTERNET_CACHE_ENTRY_INFO INTERNET_CACHE_ENTRY_INFOA
#define INTERNET_CACHE_GROUP_INFO INTERNET_CACHE_GROUP_INFOA

extern WINAPI "wininet.dll"
{
	BOOL InternetTimeFromSystemTime();
	BOOL InternetTimeToSystemTime();
	BOOL InternetDebugGetLocalTime();
	BOOL InternetCrackUrlA();
	BOOL InternetCrackUrlW();
	BOOL InternetCreateUrlA();
	BOOL InternetCreateUrlW();
	BOOL InternetCanonicalizeUrlA();
	BOOL InternetCanonicalizeUrlW();
	BOOL InternetCombineUrlA();
	BOOL InternetCombineUrlW();
	HINTERNET InternetOpenA();
	HINTERNET InternetOpenW();
	BOOL InternetCloseHandle();
	HINTERNET InternetConnectA();
	HINTERNET InternetConnectW();
	HINTERNET InternetOpenUrlA();
	HINTERNET InternetOpenUrlW();
	BOOL InternetReadFile();
	DWORD InternetSetFilePointer();
	BOOL InternetWriteFile();
	BOOL InternetQueryDataAvailable();
	BOOL InternetFindNextFileA();
	BOOL InternetFindNextFileW();
	BOOL InternetQueryOptionA();
	BOOL InternetQueryOptionW();
	BOOL InternetSetOptionA();
	BOOL InternetSetOptionW();
	BOOL InternetSetOptionExA();
	BOOL InternetSetOptionExW();
	BOOL InternetGetLastResponseInfoA();
	BOOL InternetGetLastResponseInfoW();
	InternetSetStatusCallback();
	HINTERNET FtpFindFirstFileA();
	HINTERNET FtpFindFirstFileW();
	BOOL FtpGetFileA();
	BOOL FtpGetFileW();
	BOOL FtpPutFileA();
	BOOL FtpPutFileW();
	BOOL FtpDeleteFileA();
	BOOL FtpDeleteFileW();
	BOOL FtpRenameFileA();
	BOOL FtpRenameFileW();
	HINTERNET FtpOpenFileA();
	HINTERNET FtpOpenFileW();
	BOOL FtpCreateDirectoryA();
	BOOL FtpCreateDirectoryW();
	BOOL FtpRemoveDirectoryA();
	BOOL FtpRemoveDirectoryW();
	BOOL FtpSetCurrentDirectoryA();
	BOOL FtpSetCurrentDirectoryW();
	BOOL FtpGetCurrentDirectoryA();
	BOOL FtpGetCurrentDirectoryW();
	BOOL FtpCommandA();
	BOOL FtpCommandW();
	BOOL GopherCreateLocatorA();
	BOOL GopherCreateLocatorW();
	BOOL GopherGetLocatorTypeA();
	BOOL GopherGetLocatorTypeW();
	HINTERNET GopherFindFirstFileA();
	HINTERNET GopherFindFirstFileW();
	HINTERNET GopherOpenFileA();
	HINTERNET GopherOpenFileW();
	BOOL GopherGetAttributeA();
	BOOL GopherGetAttributeW(HINTERNET,LPCWSTR,
	LPCWSTR, LPBYTE, DWORD, PDWORD, GOPHER_ATTRIBUTE_ENUMERATOR, DWORD);
	HINTERNET HttpOpenRequestA();
	HINTERNET HttpOpenRequestW();
	BOOL HttpAddRequestHeadersA();
	BOOL HttpAddRequestHeadersW();
	BOOL HttpSendRequestA();
	BOOL HttpSendRequestW();
	BOOL HttpQueryInfoA();
	BOOL HttpQueryInfoW();
	BOOL InternetSetCookieA();
	BOOL InternetSetCookieW();
	BOOL InternetGetCookieA();
	BOOL InternetGetCookieW();
	DWORD InternetAttemptConnect();
	DWORD InternetErrorDlg();
	DWORD InternetConfirmZoneCrossing();
	BOOL CreateUrlCacheEntryA();
	BOOL CreateUrlCacheEntryW();
	BOOL CommitUrlCacheEntryA();
	BOOL CommitUrlCacheEntryW();
	BOOL RetrieveUrlCacheEntryFileA();
	BOOL RetrieveUrlCacheEntryFileW();
	BOOL UnlockUrlCacheEntryFile();
	HANDLE RetrieveUrlCacheEntryStreamA();
	HANDLE RetrieveUrlCacheEntryStreamW();
	BOOL ReadUrlCacheEntryStream();
	BOOL UnlockUrlCacheEntryStream();
	BOOL GetUrlCacheEntryInfoA();
	BOOL GetUrlCacheEntryInfoW();
	BOOL SetUrlCacheEntryInfoA();
	BOOL SetUrlCacheEntryInfoW();
	HANDLE FindFirstUrlCacheEntryA();
	HANDLE FindFirstUrlCacheEntryW();
	BOOL FindNextUrlCacheEntryA();
	BOOL FindNextUrlCacheEntryW();
	BOOL FindCloseUrlCache();
	BOOL DeleteUrlCacheEntry();
	DWORD AuthenticateUser();
	BOOL HttpSendRequestExA();
	BOOL HttpSendRequestExW();
	BOOL HttpEndRequestA();
	BOOL HttpEndRequestW();
	DWORD InternetDial();
	DWORD InternetHangUp();
	BOOL InternetGoOnline();
	BOOL InternetAutodial();
	BOOL InternetAutodialHangup();
	BOOL InternetGetConnectedState();
	BOOL InternetSetDialState();
	BOOL InternetReadFileExA();
	BOOL InternetReadFileExW();
}

#define GopherGetAttribute GopherGetAttributeA
#define InternetCrackUrl InternetCrackUrlA
#define InternetCreateUrl InternetCreateUrlA
#define InternetCanonicalizeUrl InternetCanonicalizeUrlA
#define InternetCombineUrl InternetCombineUrlA
#define InternetOpen InternetOpenA
#define InternetConnect InternetConnectA
#define InternetOpenUrl InternetOpenUrlA
#define InternetFindNextFile InternetFindNextFileA
#define InternetQueryOption InternetQueryOptionA
#define InternetSetOption InternetSetOptionA
#define InternetSetOptionEx InternetSetOptionExA
#define InternetGetLastResponseInfo InternetGetLastResponseInfoA
#define InternetReadFileEx  InternetReadFileExA
#define FtpFindFirstFile FtpFindFirstFileA
#define FtpGetFile FtpGetFileA
#define FtpPutFile FtpPutFileA
#define FtpDeleteFile FtpDeleteFileA
#define FtpRenameFile FtpRenameFileA
#define FtpOpenFile FtpOpenFileA
#define FtpCreateDirectory FtpCreateDirectoryA
#define FtpRemoveDirectory FtpRemoveDirectoryA
#define FtpSetCurrentDirectory FtpSetCurrentDirectoryA
#define FtpGetCurrentDirectory FtpGetCurrentDirectoryA
#define FtpCommand FtpCommandA
#define GopherGetLocatorType GopherGetLocatorTypeA
#define GopherCreateLocator GopherCreateLocatorA
#define GopherFindFirstFile GopherFindFirstFileA
#define GopherOpenFile GopherOpenFileA
#define HttpSendRequest HttpSendRequestA
#define HttpOpenRequest HttpOpenRequestA
#define HttpAddRequestHeaders HttpAddRequestHeadersA
#define HttpQueryInfo HttpQueryInfoA
#define InternetSetCookie InternetSetCookieA
#define InternetGetCookie InternetGetCookieA
#define CreateUrlCacheEntry CreateUrlCacheEntryA
#define RetrieveUrlCacheEntryStream RetrieveUrlCacheEntryStreamA
#define FindNextUrlCacheEntry FindNextUrlCacheEntryA
#define CommitUrlCacheEntry CommitUrlCacheEntryA
#define GetUrlCacheEntryInfo GetUrlCacheEntryInfoA
#define SetUrlCacheEntryInfo SetUrlCacheEntryInfoA
#define FindFirstUrlCacheEntry FindFirstUrlCacheEntryA
#define RetrieveUrlCacheEntryFile RetrieveUrlCacheEntryFileA
#define HttpSendRequestEx	 HttpSendRequestExA
#define HttpEndRequest		 HttpEndRequestA
