diff options
author | mmentovai <mmentovai@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2006-10-19 21:48:51 +0000 |
---|---|---|
committer | mmentovai <mmentovai@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2006-10-19 21:48:51 +0000 |
commit | 5afd60b067a65920ba2e4705ccea71b880cc1607 (patch) | |
tree | f65b277e8c4d2f17d924f0f1706bb797beed0e4e /src/common | |
parent | Reduce calls to SymbolSupplier::GetSymbolFile() (#48). (diff) | |
download | breakpad-5afd60b067a65920ba2e4705ccea71b880cc1607.tar.xz |
Improvements for Windows client/tool-side code. r=bryner
- Allow Windows sender to use https (#41).
- HTTPUpload not proxy-friendly (#46).
- Check http status codes (sort of #44).
- Allow symupload to work with versionless files (prints a warning, server
may still reject).
http://groups.google.com/group/airbag-dev/browse_thread/thread/5a12a72dffc5999c
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@41 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/windows/http_upload.cc | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/common/windows/http_upload.cc b/src/common/windows/http_upload.cc index 52bf46b3..587ac36f 100644 --- a/src/common/windows/http_upload.cc +++ b/src/common/windows/http_upload.cc @@ -83,12 +83,15 @@ bool HTTPUpload::SendRequest(const wstring &url, 0, &components)) { return false; } - if (wcscmp(scheme, L"http") != 0) { + bool secure = false; + if (wcscmp(scheme, L"https") == 0) { + secure = true; + } else if (wcscmp(scheme, L"http") != 0) { return false; } AutoInternetHandle internet(InternetOpen(kUserAgent, - INTERNET_OPEN_TYPE_DIRECT, + INTERNET_OPEN_TYPE_PRECONFIG, NULL, // proxy name NULL, // proxy bypass 0)); // flags @@ -108,13 +111,14 @@ bool HTTPUpload::SendRequest(const wstring &url, return false; } + DWORD http_open_flags = secure ? INTERNET_FLAG_SECURE : 0; AutoInternetHandle request(HttpOpenRequest(connection.get(), L"POST", path, NULL, // version NULL, // referer NULL, // agent type - 0, // flags + http_open_flags, NULL)); // context if (!request.get()) { return false; @@ -130,10 +134,22 @@ bool HTTPUpload::SendRequest(const wstring &url, GenerateRequestBody(parameters, upload_file, file_part_name, boundary, &request_body); - // The explicit comparison to TRUE avoids a warning (C4800). - return (HttpSendRequest(request.get(), NULL, 0, - const_cast<char *>(request_body.data()), - static_cast<DWORD>(request_body.size())) == TRUE); + if (!HttpSendRequest(request.get(), NULL, 0, + const_cast<char *>(request_body.data()), + static_cast<DWORD>(request_body.size()))) { + return false; + } + + // The server indicates a successful upload with HTTP status 200. + wchar_t http_status[4]; + DWORD http_status_size = sizeof(http_status); + if (!HttpQueryInfo(request.get(), HTTP_QUERY_STATUS_CODE, + static_cast<LPVOID>(&http_status), &http_status_size, + 0)) { + return false; + } + + return (wcscmp(http_status, L"200") == 0); } // static |