aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/updater/winhttp/syscall_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'updater/winhttp/syscall_windows.go')
-rw-r--r--updater/winhttp/syscall_windows.go262
1 files changed, 262 insertions, 0 deletions
diff --git a/updater/winhttp/syscall_windows.go b/updater/winhttp/syscall_windows.go
new file mode 100644
index 00000000..adabd16e
--- /dev/null
+++ b/updater/winhttp/syscall_windows.go
@@ -0,0 +1,262 @@
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
+ */
+
+package winhttp
+
+import (
+ "golang.org/x/sys/windows"
+)
+
+type _HINTERNET windows.Handle
+
+type Error uint32
+
+const (
+ _WINHTTP_ACCESS_TYPE_DEFAULT_PROXY = 0
+ _WINHTTP_ACCESS_TYPE_NO_PROXY = 1
+ _WINHTTP_ACCESS_TYPE_NAMED_PROXY = 3
+ _WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY = 4
+
+ _WINHTTP_FLAG_ASYNC = 0x10000000
+
+ _WINHTTP_INVALID_STATUS_CALLBACK = ^uintptr(0)
+
+ _WINHTTP_CALLBACK_STATUS_RESOLVING_NAME = 0x00000001
+ _WINHTTP_CALLBACK_STATUS_NAME_RESOLVED = 0x00000002
+ _WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER = 0x00000004
+ _WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER = 0x00000008
+ _WINHTTP_CALLBACK_STATUS_SENDING_REQUEST = 0x00000010
+ _WINHTTP_CALLBACK_STATUS_REQUEST_SENT = 0x00000020
+ _WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE = 0x00000040
+ _WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED = 0x00000080
+ _WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION = 0x00000100
+ _WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED = 0x00000200
+ _WINHTTP_CALLBACK_STATUS_HANDLE_CREATED = 0x00000400
+ _WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING = 0x00000800
+ _WINHTTP_CALLBACK_STATUS_DETECTING_PROXY = 0x00001000
+ _WINHTTP_CALLBACK_STATUS_REDIRECT = 0x00004000
+ _WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE = 0x00008000
+ _WINHTTP_CALLBACK_STATUS_SECURE_FAILURE = 0x00010000
+ _WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE = 0x00020000
+ _WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE = 0x00040000
+ _WINHTTP_CALLBACK_STATUS_READ_COMPLETE = 0x00080000
+ _WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE = 0x00100000
+ _WINHTTP_CALLBACK_STATUS_REQUEST_ERROR = 0x00200000
+ _WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE = 0x00400000
+ _WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE = 0x01000000
+ _WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE = 0x02000000
+ _WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE = 0x04000000
+ _WINHTTP_CALLBACK_STATUS_SETTINGS_WRITE_COMPLETE = 0x10000000
+ _WINHTTP_CALLBACK_STATUS_SETTINGS_READ_COMPLETE = 0x20000000
+
+ _WINHTTP_CALLBACK_FLAG_RESOLVE_NAME = _WINHTTP_CALLBACK_STATUS_RESOLVING_NAME | _WINHTTP_CALLBACK_STATUS_NAME_RESOLVED
+ _WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER = _WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER | _WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER
+ _WINHTTP_CALLBACK_FLAG_SEND_REQUEST = _WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | _WINHTTP_CALLBACK_STATUS_REQUEST_SENT
+ _WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE = _WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE | _WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
+ _WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION = _WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION | _WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
+ _WINHTTP_CALLBACK_FLAG_HANDLES = _WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | _WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING
+ _WINHTTP_CALLBACK_FLAG_DETECTING_PROXY = _WINHTTP_CALLBACK_STATUS_DETECTING_PROXY
+ _WINHTTP_CALLBACK_FLAG_REDIRECT = _WINHTTP_CALLBACK_STATUS_REDIRECT
+ _WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE = _WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
+ _WINHTTP_CALLBACK_FLAG_SECURE_FAILURE = _WINHTTP_CALLBACK_STATUS_SECURE_FAILURE
+ _WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE = _WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
+ _WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE = _WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
+ _WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE = _WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
+ _WINHTTP_CALLBACK_FLAG_READ_COMPLETE = _WINHTTP_CALLBACK_STATUS_READ_COMPLETE
+ _WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE = _WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE
+ _WINHTTP_CALLBACK_FLAG_REQUEST_ERROR = _WINHTTP_CALLBACK_STATUS_REQUEST_ERROR
+ _WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE = _WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE
+ _WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS = _WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE | _WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE | _WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE | _WINHTTP_CALLBACK_STATUS_READ_COMPLETE | _WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE | _WINHTTP_CALLBACK_STATUS_REQUEST_ERROR | _WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE
+ _WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS = 0xffffffff
+
+ _INTERNET_DEFAULT_PORT = 0
+ _INTERNET_DEFAULT_HTTP_PORT = 80
+ _INTERNET_DEFAULT_HTTPS_PORT = 443
+
+ _WINHTTP_FLAG_SECURE = 0x00800000
+ _WINHTTP_FLAG_ESCAPE_PERCENT = 0x00000004
+ _WINHTTP_FLAG_NULL_CODEPAGE = 0x00000008
+ _WINHTTP_FLAG_BYPASS_PROXY_CACHE = 0x00000100
+ _WINHTTP_FLAG_REFRESH = _WINHTTP_FLAG_BYPASS_PROXY_CACHE
+ _WINHTTP_FLAG_ESCAPE_DISABLE = 0x00000040
+ _WINHTTP_FLAG_ESCAPE_DISABLE_QUERY = 0x00000080
+
+ _WINHTTP_QUERY_MIME_VERSION = 0
+ _WINHTTP_QUERY_CONTENT_TYPE = 1
+ _WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING = 2
+ _WINHTTP_QUERY_CONTENT_ID = 3
+ _WINHTTP_QUERY_CONTENT_DESCRIPTION = 4
+ _WINHTTP_QUERY_CONTENT_LENGTH = 5
+ _WINHTTP_QUERY_CONTENT_LANGUAGE = 6
+ _WINHTTP_QUERY_ALLOW = 7
+ _WINHTTP_QUERY_PUBLIC = 8
+ _WINHTTP_QUERY_DATE = 9
+ _WINHTTP_QUERY_EXPIRES = 10
+ _WINHTTP_QUERY_LAST_MODIFIED = 11
+ _WINHTTP_QUERY_MESSAGE_ID = 12
+ _WINHTTP_QUERY_URI = 13
+ _WINHTTP_QUERY_DERIVED_FROM = 14
+ _WINHTTP_QUERY_COST = 15
+ _WINHTTP_QUERY_LINK = 16
+ _WINHTTP_QUERY_PRAGMA = 17
+ _WINHTTP_QUERY_VERSION = 18
+ _WINHTTP_QUERY_STATUS_CODE = 19
+ _WINHTTP_QUERY_STATUS_TEXT = 20
+ _WINHTTP_QUERY_RAW_HEADERS = 21
+ _WINHTTP_QUERY_RAW_HEADERS_CRLF = 22
+ _WINHTTP_QUERY_CONNECTION = 23
+ _WINHTTP_QUERY_ACCEPT = 24
+ _WINHTTP_QUERY_ACCEPT_CHARSET = 25
+ _WINHTTP_QUERY_ACCEPT_ENCODING = 26
+ _WINHTTP_QUERY_ACCEPT_LANGUAGE = 27
+ _WINHTTP_QUERY_AUTHORIZATION = 28
+ _WINHTTP_QUERY_CONTENT_ENCODING = 29
+ _WINHTTP_QUERY_FORWARDED = 30
+ _WINHTTP_QUERY_FROM = 31
+ _WINHTTP_QUERY_IF_MODIFIED_SINCE = 32
+ _WINHTTP_QUERY_LOCATION = 33
+ _WINHTTP_QUERY_ORIG_URI = 34
+ _WINHTTP_QUERY_REFERER = 35
+ _WINHTTP_QUERY_RETRY_AFTER = 36
+ _WINHTTP_QUERY_SERVER = 37
+ _WINHTTP_QUERY_TITLE = 38
+ _WINHTTP_QUERY_USER_AGENT = 39
+ _WINHTTP_QUERY_WWW_AUTHENTICATE = 40
+ _WINHTTP_QUERY_PROXY_AUTHENTICATE = 41
+ _WINHTTP_QUERY_ACCEPT_RANGES = 42
+ _WINHTTP_QUERY_SET_COOKIE = 43
+ _WINHTTP_QUERY_COOKIE = 44
+ _WINHTTP_QUERY_REQUEST_METHOD = 45
+ _WINHTTP_QUERY_REFRESH = 46
+ _WINHTTP_QUERY_CONTENT_DISPOSITION = 47
+ _WINHTTP_QUERY_AGE = 48
+ _WINHTTP_QUERY_CACHE_CONTROL = 49
+ _WINHTTP_QUERY_CONTENT_BASE = 50
+ _WINHTTP_QUERY_CONTENT_LOCATION = 51
+ _WINHTTP_QUERY_CONTENT_MD5 = 52
+ _WINHTTP_QUERY_CONTENT_RANGE = 53
+ _WINHTTP_QUERY_ETAG = 54
+ _WINHTTP_QUERY_HOST = 55
+ _WINHTTP_QUERY_IF_MATCH = 56
+ _WINHTTP_QUERY_IF_NONE_MATCH = 57
+ _WINHTTP_QUERY_IF_RANGE = 58
+ _WINHTTP_QUERY_IF_UNMODIFIED_SINCE = 59
+ _WINHTTP_QUERY_MAX_FORWARDS = 60
+ _WINHTTP_QUERY_PROXY_AUTHORIZATION = 61
+ _WINHTTP_QUERY_RANGE = 62
+ _WINHTTP_QUERY_TRANSFER_ENCODING = 63
+ _WINHTTP_QUERY_UPGRADE = 64
+ _WINHTTP_QUERY_VARY = 65
+ _WINHTTP_QUERY_VIA = 66
+ _WINHTTP_QUERY_WARNING = 67
+ _WINHTTP_QUERY_EXPECT = 68
+ _WINHTTP_QUERY_PROXY_CONNECTION = 69
+ _WINHTTP_QUERY_UNLESS_MODIFIED_SINCE = 70
+ _WINHTTP_QUERY_PROXY_SUPPORT = 75
+ _WINHTTP_QUERY_AUTHENTICATION_INFO = 76
+ _WINHTTP_QUERY_PASSPORT_URLS = 77
+ _WINHTTP_QUERY_PASSPORT_CONFIG = 78
+ _WINHTTP_QUERY_MAX = 78
+ _WINHTTP_QUERY_CUSTOM = 65535
+ _WINHTTP_QUERY_FLAG_REQUEST_HEADERS = 0x80000000
+ _WINHTTP_QUERY_FLAG_SYSTEMTIME = 0x40000000
+ _WINHTTP_QUERY_FLAG_NUMBER = 0x20000000
+ _WINHTTP_QUERY_FLAG_NUMBER64 = 0x08000000
+
+ _ICU_ESCAPE = 0x80000000
+ _ICU_ESCAPE_AUTHORITY = 0x00002000
+ _ICU_REJECT_USERPWD = 0x00004000
+
+ _INTERNET_SCHEME_HTTP = 1
+ _INTERNET_SCHEME_HTTPS = 2
+ _INTERNET_SCHEME_FTP = 3
+ _INTERNET_SCHEME_SOCKS = 4
+
+ _WINHTTP_ERROR_BASE = 12000
+ _ERROR_WINHTTP_OUT_OF_HANDLES = Error(12000 + 1)
+ _ERROR_WINHTTP_TIMEOUT = Error(12000 + 2)
+ _ERROR_WINHTTP_INTERNAL_ERROR = Error(12000 + 4)
+ _ERROR_WINHTTP_INVALID_URL = Error(12000 + 5)
+ _ERROR_WINHTTP_UNRECOGNIZED_SCHEME = Error(12000 + 6)
+ _ERROR_WINHTTP_NAME_NOT_RESOLVED = Error(12000 + 7)
+ _ERROR_WINHTTP_INVALID_OPTION = Error(12000 + 9)
+ _ERROR_WINHTTP_OPTION_NOT_SETTABLE = Error(12000 + 11)
+ _ERROR_WINHTTP_SHUTDOWN = Error(12000 + 12)
+ _ERROR_WINHTTP_LOGIN_FAILURE = Error(12000 + 15)
+ _ERROR_WINHTTP_OPERATION_CANCELLED = Error(12000 + 17)
+ _ERROR_WINHTTP_INCORRECT_HANDLE_TYPE = Error(12000 + 18)
+ _ERROR_WINHTTP_INCORRECT_HANDLE_STATE = Error(12000 + 19)
+ _ERROR_WINHTTP_CANNOT_CONNECT = Error(12000 + 29)
+ _ERROR_WINHTTP_CONNECTION_ERROR = Error(12000 + 30)
+ _ERROR_WINHTTP_RESEND_REQUEST = Error(12000 + 32)
+ _ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED = Error(12000 + 44)
+ _ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN = Error(12000 + 100)
+ _ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND = Error(12000 + 101)
+ _ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND = Error(12000 + 102)
+ _ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN = Error(12000 + 103)
+ _ERROR_WINHTTP_HEADER_NOT_FOUND = Error(12000 + 150)
+ _ERROR_WINHTTP_INVALID_SERVER_RESPONSE = Error(12000 + 152)
+ _ERROR_WINHTTP_INVALID_HEADER = Error(12000 + 153)
+ _ERROR_WINHTTP_INVALID_QUERY_REQUEST = Error(12000 + 154)
+ _ERROR_WINHTTP_HEADER_ALREADY_EXISTS = Error(12000 + 155)
+ _ERROR_WINHTTP_REDIRECT_FAILED = Error(12000 + 156)
+ _ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR = Error(12000 + 178)
+ _ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT = Error(12000 + 166)
+ _ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT = Error(12000 + 167)
+ _ERROR_WINHTTP_UNHANDLED_SCRIPT_TYPE = Error(12000 + 176)
+ _ERROR_WINHTTP_SCRIPT_EXECUTION_ERROR = Error(12000 + 177)
+ _ERROR_WINHTTP_NOT_INITIALIZED = Error(12000 + 172)
+ _ERROR_WINHTTP_SECURE_FAILURE = Error(12000 + 175)
+ _ERROR_WINHTTP_SECURE_CERT_DATE_INVALID = Error(12000 + 37)
+ _ERROR_WINHTTP_SECURE_CERT_CN_INVALID = Error(12000 + 38)
+ _ERROR_WINHTTP_SECURE_INVALID_CA = Error(12000 + 45)
+ _ERROR_WINHTTP_SECURE_CERT_REV_FAILED = Error(12000 + 57)
+ _ERROR_WINHTTP_SECURE_CHANNEL_ERROR = Error(12000 + 157)
+ _ERROR_WINHTTP_SECURE_INVALID_CERT = Error(12000 + 169)
+ _ERROR_WINHTTP_SECURE_CERT_REVOKED = Error(12000 + 170)
+ _ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE = Error(12000 + 179)
+ _ERROR_WINHTTP_AUTODETECTION_FAILED = Error(12000 + 180)
+ _ERROR_WINHTTP_HEADER_COUNT_EXCEEDED = Error(12000 + 181)
+ _ERROR_WINHTTP_HEADER_SIZE_OVERFLOW = Error(12000 + 182)
+ _ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW = Error(12000 + 183)
+ _ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW = Error(12000 + 184)
+ _ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY = Error(12000 + 185)
+ _ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY = Error(12000 + 186)
+ _ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED_PROXY = Error(12000 + 187)
+ _ERROR_WINHTTP_SECURE_FAILURE_PROXY = Error(12000 + 188)
+ _ERROR_WINHTTP_RESERVED_189 = Error(12000 + 189)
+ _ERROR_WINHTTP_HTTP_PROTOCOL_MISMATCH = Error(12000 + 190)
+ _WINHTTP_ERROR_LAST = _WINHTTP_ERROR_BASE + 190
+)
+
+type _URL_COMPONENTS struct {
+ structSize uint32
+ scheme *uint16
+ schemeLength uint32
+ schemeType uint32
+ hostName *uint16
+ hostNameLength uint32
+ port uint16
+ username *uint16
+ usernameLength uint32
+ password *uint16
+ passwordLength uint32
+ urlPath *uint16
+ urlPathLength uint32
+ extraInfo *uint16
+ extraInfoLength uint32
+}
+
+//sys winHttpOpen(userAgent *uint16, accessType uint32, proxy *uint16, proxyBypass *uint16, flags uint32) (sessionHandle _HINTERNET, err error) = winhttp.WinHttpOpen
+//sys winHttpSetStatusCallback(handle _HINTERNET, callback uintptr, notificationFlags uint32, reserved uintptr) (previousCallback uintptr, err error) [failretval==_WINHTTP_INVALID_STATUS_CALLBACK] = winhttp.WinHttpSetStatusCallback
+//sys winHttpCloseHandle(handle _HINTERNET) (err error) = winhttp.WinHttpCloseHandle
+//sys winHttpConnect(sessionHandle _HINTERNET, serverName *uint16, serverPort uint16, reserved uint32) (handle _HINTERNET, err error) = winhttp.WinHttpConnect
+//sys winHttpOpenRequest(connectHandle _HINTERNET, verb *uint16, objectName *uint16, version *uint16, referrer *uint16, acceptTypes **uint16, flags uint32) (requestHandle _HINTERNET, err error) = winhttp.WinHttpOpenRequest
+//sys winHttpSendRequest(requestHandle _HINTERNET, headers *uint16, headersLength uint32, optional *byte, optionalLength uint32, totalLength uint32, context uintptr) (err error) = winhttp.WinHttpSendRequest
+//sys winHttpReceiveResponse(requestHandle _HINTERNET, reserved uintptr) (err error) = winhttp.WinHttpReceiveResponse
+//sys winHttpQueryHeaders(requestHandle _HINTERNET, infoLevel uint32, name *uint16, buffer unsafe.Pointer, bufferLen *uint32, index *uint32) (err error) = winhttp.WinHttpQueryHeaders
+//sys winHttpQueryDataAvailable(requestHandle _HINTERNET, bytesAvailable *uint32) (err error) = winhttp.WinHttpQueryDataAvailable
+//sys winHttpReadData(requestHandle _HINTERNET, buffer *byte, bufferSize uint32, bytesRead *uint32) (err error) = winhttp.WinHttpReadData
+//sys winHttpCrackUrl(url *uint16, urlSize uint32, flags uint32, components *_URL_COMPONENTS) (err error) = winhttp.WinHttpCrackUrl