aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormkrebs@chromium.org <mkrebs@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e>2012-05-24 20:22:48 +0000
committermkrebs@chromium.org <mkrebs@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e>2012-05-24 20:22:48 +0000
commitd6b6959e0eee58899d1a35a8a98d5d3eb8275be2 (patch)
treefb29b2d30b4517e80606c60f19c8133a6db907a9
parentInitialize a CustomClientInfo variable. (Coverity) (diff)
downloadbreakpad-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.cc9
-rw-r--r--src/common/linux/http_upload.h3
-rw-r--r--src/tools/linux/symupload/minidump_upload.cc1
-rw-r--r--src/tools/linux/symupload/sym_upload.cc14
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;
}