예제 #1
0
파일: stub.c 프로젝트: Sitekurfer/shoes
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;
}
예제 #2
0
파일: windownload.c 프로젝트: kannans/shoes
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);
}
예제 #3
0
파일: winhttp.c 프로젝트: FiXato/shoes
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);
}