From 5afd60b067a65920ba2e4705ccea71b880cc1607 Mon Sep 17 00:00:00 2001 From: mmentovai Date: Thu, 19 Oct 2006 21:48:51 +0000 Subject: 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 --- src/common/windows/http_upload.cc | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'src/common') 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(request_body.data()), - static_cast(request_body.size())) == TRUE); + if (!HttpSendRequest(request.get(), NULL, 0, + const_cast(request_body.data()), + static_cast(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(&http_status), &http_status_size, + 0)) { + return false; + } + + return (wcscmp(http_status, L"200") == 0); } // static -- cgit v1.2.1