diff options
author | mkrebs@chromium.org <mkrebs@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2012-05-24 20:22:48 +0000 |
---|---|---|
committer | mkrebs@chromium.org <mkrebs@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2012-05-24 20:22:48 +0000 |
commit | d6b6959e0eee58899d1a35a8a98d5d3eb8275be2 (patch) | |
tree | fb29b2d30b4517e80606c60f19c8133a6db907a9 | |
parent | Initialize a CustomClientInfo variable. (Coverity) (diff) | |
download | breakpad-d6b6959e0eee58899d1a35a8a98d5d3eb8275be2.tar.xz |
sym_upload: Show failure if symbol server gives redirect response
Add a "response_code" parameter to Linux's HTTPUpload::SendRequest() that,
if non-NULL, will be set to the response code of the HTTP request. Using
that, sym_upload will print a failure message on Linux if the response code
is not 200. This is in line with the change made by
http://breakpad.appspot.com/77001/ for the Mac version.
BUG=google-breakpad:480, chromium-os:30032
TEST=Ran "sym_upload powertop.sym http://test.webdav.org/redir-tmp/"
Ran "sym_upload powertop.sym http://clients2.google.com/cr/staging_symbol"
Review URL: https://breakpad.appspot.com/388002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@968 4c0a9323-5329-0410-9bdc-e9ce6186880e
-rw-r--r-- | src/common/linux/http_upload.cc | 9 | ||||
-rw-r--r-- | src/common/linux/http_upload.h | 3 | ||||
-rw-r--r-- | src/tools/linux/symupload/minidump_upload.cc | 1 | ||||
-rw-r--r-- | src/tools/linux/symupload/sym_upload.cc | 14 |
4 files changed, 24 insertions, 3 deletions
diff --git a/src/common/linux/http_upload.cc b/src/common/linux/http_upload.cc index 857dc141..f69237c8 100644 --- a/src/common/linux/http_upload.cc +++ b/src/common/linux/http_upload.cc @@ -62,7 +62,11 @@ bool HTTPUpload::SendRequest(const string &url, const string &proxy_user_pwd, const string &ca_certificate_file, string *response_body, + long *response_code, string *error_description) { + if (response_code != NULL) + *response_code = 0; + if (!CheckParameters(parameters)) return false; @@ -149,6 +153,11 @@ bool HTTPUpload::SendRequest(const string &url, CURLcode (*curl_easy_perform)(CURL *); *(void**) (&curl_easy_perform) = dlsym(curl_lib, "curl_easy_perform"); err_code = (*curl_easy_perform)(curl); + if (response_code != NULL) { + CURLcode (*curl_easy_getinfo)(CURL *, CURLINFO, ...); + *(void**) (&curl_easy_getinfo) = dlsym(curl_lib, "curl_easy_getinfo"); + (*curl_easy_getinfo)(curl, CURLINFO_RESPONSE_CODE, response_code); + } const char* (*curl_easy_strerror)(CURLcode); *(void**) (&curl_easy_strerror) = dlsym(curl_lib, "curl_easy_strerror"); #ifndef NDEBUG diff --git a/src/common/linux/http_upload.h b/src/common/linux/http_upload.h index e98b25de..22b62960 100644 --- a/src/common/linux/http_upload.h +++ b/src/common/linux/http_upload.h @@ -53,6 +53,8 @@ class HTTPUpload { // Only HTTP(S) URLs are currently supported. Returns true on success. // If the request is successful and response_body is non-NULL, // the response body will be returned in response_body. + // If response_code is non-NULL, it will be set to the HTTP response code + // received (or 0 if the request failed before getting an HTTP response). // If the send fails, a description of the error will be // returned in error_description. static bool SendRequest(const string &url, @@ -63,6 +65,7 @@ class HTTPUpload { const string &proxy_user_pwd, const string &ca_certificate_file, string *response_body, + long *response_code, string *error_description); private: diff --git a/src/tools/linux/symupload/minidump_upload.cc b/src/tools/linux/symupload/minidump_upload.cc index 6f1748ad..144c8bf6 100644 --- a/src/tools/linux/symupload/minidump_upload.cc +++ b/src/tools/linux/symupload/minidump_upload.cc @@ -71,6 +71,7 @@ static void Start(Options *options) { options->proxy_user_pwd, "", &response, + NULL, &error); if (success) { diff --git a/src/tools/linux/symupload/sym_upload.cc b/src/tools/linux/symupload/sym_upload.cc index a4d5be79..f5324a45 100644 --- a/src/tools/linux/symupload/sym_upload.cc +++ b/src/tools/linux/symupload/sym_upload.cc @@ -139,6 +139,7 @@ static void Start(Options *options) { parameters["code_file"] = module_parts[4]; parameters["debug_identifier"] = compacted_id; std::string response, error; + long response_code; bool success = HTTPUpload::SendRequest(options->uploadURLStr, parameters, options->symbolsPath, @@ -147,14 +148,21 @@ static void Start(Options *options) { options->proxy_user_pwd, "", &response, + &response_code, &error); - if (success) { - printf("Successfully sent the symbol file.\n"); - } else { + if (!success) { printf("Failed to send symbol file: %s\n", error.c_str()); printf("Response:\n"); printf("%s\n", response.c_str()); + } else if (response_code == 0) { + printf("Failed to send symbol file: No response code\n"); + } else if (response_code != 200) { + printf("Failed to send symbol file: Response code %ld\n", response_code); + printf("Response:\n"); + printf("%s\n", response.c_str()); + } else { + printf("Successfully sent the symbol file.\n"); } options->success = success; } |