Back out trunk r1367.

Compile error: https://bugzilla.mozilla.org/show_bug.cgi?id=1048091#c15

Review URL: https://breakpad.appspot.com/9694002

git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1369 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
mark@chromium.org 2014-09-03 13:40:40 +00:00
parent 1335417f9f
commit a58de86bcd
6 changed files with 56 additions and 54 deletions

View File

@ -59,7 +59,7 @@ CrashReportSender::CrashReportSender(const wstring &checkpoint_file)
ReportResult CrashReportSender::SendCrashReport( ReportResult CrashReportSender::SendCrashReport(
const wstring &url, const map<wstring, wstring> &parameters, const wstring &url, const map<wstring, wstring> &parameters,
const map<wstring, wstring> &files, wstring *report_code) { const wstring &dump_file_name, wstring *report_code) {
int today = GetCurrentDate(); int today = GetCurrentDate();
if (today == last_sent_date_ && if (today == last_sent_date_ &&
max_reports_per_day_ != -1 && max_reports_per_day_ != -1 &&
@ -69,7 +69,7 @@ ReportResult CrashReportSender::SendCrashReport(
int http_response = 0; int http_response = 0;
bool result = HTTPUpload::SendRequest( bool result = HTTPUpload::SendRequest(
url, parameters, files, NULL, report_code, url, parameters, dump_file_name, L"upload_file_minidump", NULL, report_code,
&http_response); &http_response);
if (result) { if (result) {

View File

@ -77,7 +77,7 @@ class CrashReportSender {
int max_reports_per_day() const { return max_reports_per_day_; } int max_reports_per_day() const { return max_reports_per_day_; }
// Sends the specified files, along with the map of // Sends the specified minidump file, along with the map of
// name value pairs, as a multipart POST request to the given URL. // name value pairs, as a multipart POST request to the given URL.
// Parameter names must contain only printable ASCII characters, // Parameter names must contain only printable ASCII characters,
// and may not contain a quote (") character. // and may not contain a quote (") character.
@ -89,7 +89,7 @@ class CrashReportSender {
// (Otherwise, report_code will be unchanged.) // (Otherwise, report_code will be unchanged.)
ReportResult SendCrashReport(const wstring &url, ReportResult SendCrashReport(const wstring &url,
const map<wstring, wstring> &parameters, const map<wstring, wstring> &parameters,
const map<wstring, wstring> &files, const wstring &dump_file_name,
wstring *report_code); wstring *report_code);
private: private:

View File

@ -56,7 +56,8 @@ static const char kUserAgent[] = "Breakpad/1.0 (Linux)";
// static // static
bool HTTPUpload::SendRequest(const string &url, bool HTTPUpload::SendRequest(const string &url,
const map<string, string> &parameters, const map<string, string> &parameters,
const map<string, string> &files, const string &upload_file,
const string &file_part_name,
const string &proxy, const string &proxy,
const string &proxy_user_pwd, const string &proxy_user_pwd,
const string &ca_certificate_file, const string &ca_certificate_file,
@ -134,13 +135,11 @@ bool HTTPUpload::SendRequest(const string &url,
CURLFORM_COPYCONTENTS, iter->second.c_str(), CURLFORM_COPYCONTENTS, iter->second.c_str(),
CURLFORM_END); CURLFORM_END);
// Add form files. // Add form file.
for (iter = files.begin(); iter != files.end(); ++iter) { (*curl_formadd)(&formpost, &lastptr,
(*curl_formadd)(&formpost, &lastptr, CURLFORM_COPYNAME, file_part_name.c_str(),
CURLFORM_COPYNAME, iter->first.c_str(), CURLFORM_FILE, upload_file.c_str(),
CURLFORM_FILE, iter->second.c_str(), CURLFORM_END);
CURLFORM_END);
}
(*curl_easy_setopt)(curl, CURLOPT_HTTPPOST, formpost); (*curl_easy_setopt)(curl, CURLOPT_HTTPPOST, formpost);

View File

@ -45,9 +45,9 @@ using std::map;
class HTTPUpload { class HTTPUpload {
public: public:
// Sends the given sets of parameters and files as a multipart POST // Sends the given set of parameters, along with the contents of
// request to the given URL. // upload_file, as a multipart POST request to the given URL.
// Each key in |files| is the name of the file part of the request // file_part_name contains the name of the file part of the request
// (i.e. it corresponds to the name= attribute on an <input type="file">. // (i.e. it corresponds to the name= attribute on an <input type="file">.
// Parameter names must contain only printable ASCII characters, // Parameter names must contain only printable ASCII characters,
// and may not contain a quote (") character. // and may not contain a quote (") character.
@ -60,7 +60,8 @@ class HTTPUpload {
// returned in error_description. // returned in error_description.
static bool SendRequest(const string &url, static bool SendRequest(const string &url,
const map<string, string> &parameters, const map<string, string> &parameters,
const map<string, string> &files, const string &upload_file,
const string &file_part_name,
const string &proxy, const string &proxy,
const string &proxy_user_pwd, const string &proxy_user_pwd,
const string &ca_certificate_file, const string &ca_certificate_file,

View File

@ -64,7 +64,8 @@ class HTTPUpload::AutoInternetHandle {
// static // static
bool HTTPUpload::SendRequest(const wstring &url, bool HTTPUpload::SendRequest(const wstring &url,
const map<wstring, wstring> &parameters, const map<wstring, wstring> &parameters,
const map<wstring, wstring> &files, const wstring &upload_file,
const wstring &file_part_name,
int *timeout, int *timeout,
wstring *response_body, wstring *response_body,
int *response_code) { int *response_code) {
@ -142,7 +143,8 @@ bool HTTPUpload::SendRequest(const wstring &url,
HTTP_ADDREQ_FLAG_ADD); HTTP_ADDREQ_FLAG_ADD);
string request_body; string request_body;
if (!GenerateRequestBody(parameters, files, boundary, &request_body)) { if (!GenerateRequestBody(parameters, upload_file,
file_part_name, boundary, &request_body)) {
return false; return false;
} }
@ -266,9 +268,15 @@ wstring HTTPUpload::GenerateRequestHeader(const wstring &boundary) {
// static // static
bool HTTPUpload::GenerateRequestBody(const map<wstring, wstring> &parameters, bool HTTPUpload::GenerateRequestBody(const map<wstring, wstring> &parameters,
const map<wstring, wstring> &files, const wstring &upload_file,
const wstring &file_part_name,
const wstring &boundary, const wstring &boundary,
string *request_body) { string *request_body) {
vector<char> contents;
if (!GetFileContents(upload_file, &contents)) {
return false;
}
string boundary_str = WideToUTF8(boundary); string boundary_str = WideToUTF8(boundary);
if (boundary_str.empty()) { if (boundary_str.empty()) {
return false; return false;
@ -285,36 +293,28 @@ bool HTTPUpload::GenerateRequestBody(const map<wstring, wstring> &parameters,
WideToUTF8(pos->second) + "\r\n"); WideToUTF8(pos->second) + "\r\n");
} }
for (map<wstring, wstring>::const_iterator pos = files.begin(); // Now append the upload file as a binary (octet-stream) part
pos != files.end(); ++pos) { string filename_utf8 = WideToUTF8(upload_file);
vector<char> contents; if (filename_utf8.empty()) {
if (!GetFileContents(pos->second, &contents)) { return false;
return false;
}
// Now append the upload files as a binary (octet-stream) part
string filename_utf8 = WideToUTF8(pos->second);
if (filename_utf8.empty()) {
return false;
}
string file_part_name_utf8 = WideToUTF8(pos->first);
if (file_part_name_utf8.empty()) {
return false;
}
request_body->append("--" + boundary_str + "\r\n");
request_body->append("Content-Disposition: form-data; "
"name=\"" + file_part_name_utf8 + "\"; "
"filename=\"" + filename_utf8 + "\"\r\n");
request_body->append("Content-Type: application/octet-stream\r\n");
request_body->append("\r\n");
if (!contents.empty()) {
request_body->append(&(contents[0]), contents.size());
}
request_body->append("\r\n");
} }
string file_part_name_utf8 = WideToUTF8(file_part_name);
if (file_part_name_utf8.empty()) {
return false;
}
request_body->append("--" + boundary_str + "\r\n");
request_body->append("Content-Disposition: form-data; "
"name=\"" + file_part_name_utf8 + "\"; "
"filename=\"" + filename_utf8 + "\"\r\n");
request_body->append("Content-Type: application/octet-stream\r\n");
request_body->append("\r\n");
if (!contents.empty()) {
request_body->append(&(contents[0]), contents.size());
}
request_body->append("\r\n");
request_body->append("--" + boundary_str + "--\r\n"); request_body->append("--" + boundary_str + "--\r\n");
return true; return true;
} }

View File

@ -54,9 +54,9 @@ using std::vector;
class HTTPUpload { class HTTPUpload {
public: public:
// Sends the given sets of parameters and files as a multipart POST // Sends the given set of parameters, along with the contents of
// request to the given URL. // upload_file, as a multipart POST request to the given URL.
// Each key in |files| is the name of the file part of the request // file_part_name contains the name of the file part of the request
// (i.e. it corresponds to the name= attribute on an <input type="file">. // (i.e. it corresponds to the name= attribute on an <input type="file">.
// Parameter names must contain only printable ASCII characters, // Parameter names must contain only printable ASCII characters,
// and may not contain a quote (") character. // and may not contain a quote (") character.
@ -67,7 +67,8 @@ class HTTPUpload {
// received (or 0 if the request failed before getting an HTTP response). // received (or 0 if the request failed before getting an HTTP response).
static bool SendRequest(const wstring &url, static bool SendRequest(const wstring &url,
const map<wstring, wstring> &parameters, const map<wstring, wstring> &parameters,
const map<wstring, wstring> &files, const wstring &upload_file,
const wstring &file_part_name,
int *timeout, int *timeout,
wstring *response_body, wstring *response_body,
int *response_code); int *response_code);
@ -87,11 +88,12 @@ class HTTPUpload {
// Generates a HTTP request header for a multipart form submit. // Generates a HTTP request header for a multipart form submit.
static wstring GenerateRequestHeader(const wstring &boundary); static wstring GenerateRequestHeader(const wstring &boundary);
// Given a set of parameters, a set of upload files, and a file part name, // Given a set of parameters, an upload filename, and a file part name,
// generates a multipart request body string with these parameters // generates a multipart request body string with these parameters
// and minidump contents. Returns true on success. // and minidump contents. Returns true on success.
static bool GenerateRequestBody(const map<wstring, wstring> &parameters, static bool GenerateRequestBody(const map<wstring, wstring> &parameters,
const map<wstring, wstring> &files, const wstring &upload_file,
const wstring &file_part_name,
const wstring &boundary, const wstring &boundary,
string *request_body); string *request_body);