DWORD WINAPI shoes_download_thread(IN DWORD mid, IN WPARAM w, LPARAM &l, IN LPVOID data) { DWORD len = 0; WCHAR path[BUFSIZE]; TCHAR *buf = SHOE_ALLOC_N(TCHAR, BUFSIZE); TCHAR *empty = NULL; HANDLE file; TCHAR *nl; TCHAR setup_path[BUFSIZE]; GetTempPath(BUFSIZE, setup_path); strncat(setup_path, setup_exe, strlen(setup_exe)); shoes_winhttp(L"hacketyhack.net", 80, L"/pkg/win32/shoes", &buf, BUFSIZE, INVALID_HANDLE_VALUE, &len, NULL, NULL); if (len == 0) return 0; nl = strstr(buf, "\n"); if (nl) nl[0] = '\0'; len = 0; MultiByteToWideChar(CP_ACP, 0, buf, -1, path, BUFSIZE); file = CreateFile(setup_path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); shoes_winhttp(L"hacketyhack.net", 80, path, &empty, 0, file, &len, HTTP_HANDLER(StubDownloadingShoes), NULL); CloseHandle(file); shoes_silent_install(setup_path); return 0; }
void shoes_download(shoes_http_request *req) { HANDLE file = INVALID_HANDLE_VALUE; INTERNET_PORT _port = req->port; LPWSTR _method = NULL, _body = NULL; LPWSTR _scheme = SHOE_ALLOC_N(WCHAR, MAX_PATH); LPWSTR _host = SHOE_ALLOC_N(WCHAR, MAX_PATH); LPWSTR _path = SHOE_ALLOC_N(WCHAR, MAX_PATH); DWORD _size; MultiByteToWideChar(CP_UTF8, 0, req->scheme, -1, _scheme, MAX_PATH); MultiByteToWideChar(CP_UTF8, 0, req->host, -1, _host, MAX_PATH); MultiByteToWideChar(CP_UTF8, 0, req->path, -1, _path, MAX_PATH); if (req->method != NULL) { _method = SHOE_ALLOC_N(WCHAR, MAX_PATH); MultiByteToWideChar(CP_UTF8, 0, req->method, -1, _method, MAX_PATH); } if (req->mem == NULL && req->filepath != NULL) file = CreateFile(req->filepath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); shoes_winhttp(_scheme, _host, _port, _path, _method, req->headers, (LPVOID)req->body, req->bodylen, &req->mem, req->memlen, file, &_size, req->flags, req->handler, req->data); req->size = _size; SHOE_FREE(_scheme); SHOE_FREE(_host); SHOE_FREE(_path); if (_method != NULL) SHOE_FREE(_method); }
void shoes_download(shoes_download_request *req) { HANDLE file = INVALID_HANDLE_VALUE; INTERNET_PORT _port = req->port; LPWSTR _host = SHOE_ALLOC_N(WCHAR, MAX_PATH); LPWSTR _path = SHOE_ALLOC_N(WCHAR, MAX_PATH); DWORD _size; MultiByteToWideChar(CP_UTF8, 0, req->host, -1, _host, MAX_PATH); MultiByteToWideChar(CP_UTF8, 0, req->path, -1, _path, MAX_PATH); if (req->mem == NULL && req->filepath != NULL) file = CreateFile(req->filepath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); shoes_winhttp(_host, _port, _path, &req->mem, req->memlen, file, &_size, req->handler, req->data); req->size = _size; SHOE_FREE(_host); SHOE_FREE(_path); }