0
@@ -66,10 +66,10 @@ shoes_winhttp_headers(HINTERNET req, shoes_download_handler handler, void *data)
0
LPCWSTR hdrs = new WCHAR[size/sizeof(WCHAR)], whdr;
0
BOOL res = WinHttpQueryHeaders(req, WINHTTP_QUERY_RAW_HEADERS,
0
- WINHTTP_HEADER_NAME_BY_INDEX,
hdrs, &size, WINHTTP_NO_HEADER_INDEX);
0
+ WINHTTP_HEADER_NAME_BY_INDEX,
(LPVOID)hdrs, &size, WINHTTP_NO_HEADER_INDEX);
0
- for (whdr = hdrs; whdr
< hdrs + size; whdr += whdrlen)
0
+ for (whdr = hdrs; whdr
- hdrs < size / sizeof(WCHAR); whdr += whdrlen)
0
WideCharToMultiByte(CP_UTF8, 0, whdr, -1, hdr, MAX_PATH, NULL, NULL);
0
shoes_winhttp(LPCWSTR host, INTERNET_PORT port, LPCWSTR path, TCHAR *mem, HANDLE file,
0
LPDWORD size, shoes_download_handler handler, void *data)
0
- DWORD len = 0, rlen = 0, status = 0
;
0
+ DWORD len = 0, rlen = 0, status = 0
, complete = 0;
0
TCHAR buf[SHOES_BUFSIZE];
0
WCHAR uagent[SHOES_BUFSIZE];
0
HINTERNET sess = NULL, conn = NULL, req = NULL;
0
@@ -124,13 +124,15 @@ shoes_winhttp(LPCWSTR host, INTERNET_PORT port, LPCWSTR path, TCHAR *mem, HANDLE
0
if (handler != NULL) handler(&event, data);
0
+ shoes_winhttp_headers(req, handler, data);
0
if (!WinHttpQueryHeaders(req, WINHTTP_QUERY_CONTENT_LENGTH,
0
NULL, buf, &len, NULL))
0
*size = _wtoi((wchar_t *)buf);
0
- HTTP_EVENT(handler, SHOES_HTTP_CONNECTED, last, 0, 0, *size, data,
goto done);
0
+ HTTP_EVENT(handler, SHOES_HTTP_CONNECTED, last, 0, 0, *size, data,
NULL, goto done);
0
@@ -149,14 +151,23 @@ shoes_winhttp(LPCWSTR host, INTERNET_PORT port, LPCWSTR path, TCHAR *mem, HANDLE
0
WriteFile(file, (LPBYTE)fbuf, len, &flen, NULL);
0
HTTP_EVENT(handler, SHOES_HTTP_TRANSFER, last, (int)((total - (rlen * 100)) / *size),
0
- *size - rlen, *size, data,
break);
0
+ *size - rlen, *size, data,
NULL, break);
0
- HTTP_EVENT(handler, SHOES_HTTP_COMPLETED, last, 100, *size, *size, data, goto done);
0
+ HTTP_EVENT(handler, SHOES_HTTP_COMPLETED, last, 100, *size, *size, data, mem, goto done);
0
+ shoes_download_event event;
0
+ event.stage = SHOES_HTTP_ERROR;
0
+ event.error = GetLastError();
0
+ if (handler != NULL) handler(&event, data);
0
WinHttpCloseHandle(req);
0
@@ -170,4 +181,9 @@ done:
0
shoes_http_error(SHOES_DOWNLOAD_ERROR code)
0
+ DWORD msglen = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
0
+ NULL, code, 0, msg, sizeof(msg), NULL);
0
+ return rb_str_new2(msg);
Comments
No one has commented yet.