diff --git a/puppy.nimble b/puppy.nimble index f9e7254..0052b6d 100644 --- a/puppy.nimble +++ b/puppy.nimble @@ -9,3 +9,4 @@ requires "nim >= 1.2.2" requires "libcurl >= 1.0.0" requires "zippy >= 0.10.0" requires "webby >= 0.2.0" +requires "winversion" diff --git a/src/puppy/platforms/win32/platform.nim b/src/puppy/platforms/win32/platform.nim index 1c90dcf..cbb63d6 100644 --- a/src/puppy/platforms/win32/platform.nim +++ b/src/puppy/platforms/win32/platform.nim @@ -1,4 +1,5 @@ import puppy/common, std/strutils, utils, windefs, zippy +from winversion import getWindowsVersionEx proc internalFetch*(req: Request): Response {.raises: [PuppyError].} = result = Response() @@ -6,10 +7,13 @@ proc internalFetch*(req: Request): Response {.raises: [PuppyError].} = var hSession, hConnect, hRequest: HINTERNET try: let wideUserAgent = req.headers["user-agent"].wstr() - + {.cast(raises:[]).}: + let infoEx = getWindowsVersionEx() + let lessThan63 = infoEx.dwMajorVersion < 6 or infoEx.dwMajorVersion == 6 and infoEx.dwMinorVersion <= 3 + let dwAccessType = if lessThan63: WINHTTP_ACCESS_TYPE_DEFAULT_PROXY else: WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY hSession = WinHttpOpen( cast[ptr WCHAR](wideUserAgent[0].unsafeAddr), - WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY, + dwAccessType.DWORD, nil, nil, 0 diff --git a/src/puppy/platforms/win32/windefs.nim b/src/puppy/platforms/win32/windefs.nim index c265920..9011994 100644 --- a/src/puppy/platforms/win32/windefs.nim +++ b/src/puppy/platforms/win32/windefs.nim @@ -23,6 +23,9 @@ type LPVOID* = pointer const CP_UTF8* = 65001 + WINHTTP_ACCESS_TYPE_NO_PROXY* = 1 + WINHTTP_ACCESS_TYPE_DEFAULT_PROXY* = 2 + WINHTTP_ACCESS_TYPE_NAMED_PROXY* = 3 WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY* = 4 WINHTTP_FLAG_SECURE* = 0x00800000 WINHTTP_ADDREQ_FLAG_ADD* = 0x20000000