aboutsummaryrefslogtreecommitdiff
path: root/src/common/windows
diff options
context:
space:
mode:
authorted.mielczarek@gmail.com <ted.mielczarek@gmail.com>2014-08-28 15:26:59 +0000
committerted.mielczarek@gmail.com <ted.mielczarek@gmail.com>2014-08-28 15:26:59 +0000
commit8cde5c515272f3cf2eb67f4f62969467f47aabe8 (patch)
treebf4efd922a1c249bfb0a6085897306c29bbe540e /src/common/windows
parentconstructor init list in wrong order in CrashGenerationServer (diff)
downloadbreakpad-8cde5c515272f3cf2eb67f4f62969467f47aabe8.tar.xz
Support for multiple upload files in CrashReportSender/HTTPUpload
A=David Major <dmajor@mozilla.com> R=ted at https://bugzilla.mozilla.org/show_bug.cgi?id=1048091 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1367 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/common/windows')
-rw-r--r--src/common/windows/http_upload.cc56
-rw-r--r--src/common/windows/http_upload.h14
2 files changed, 34 insertions, 36 deletions
diff --git a/src/common/windows/http_upload.cc b/src/common/windows/http_upload.cc
index 838185b7..d9c4048f 100644
--- a/src/common/windows/http_upload.cc
+++ b/src/common/windows/http_upload.cc
@@ -64,8 +64,7 @@ class HTTPUpload::AutoInternetHandle {
// static
bool HTTPUpload::SendRequest(const wstring &url,
const map<wstring, wstring> &parameters,
- const wstring &upload_file,
- const wstring &file_part_name,
+ const map<wstring, wstring> &files,
int *timeout,
wstring *response_body,
int *response_code) {
@@ -143,8 +142,7 @@ bool HTTPUpload::SendRequest(const wstring &url,
HTTP_ADDREQ_FLAG_ADD);
string request_body;
- if (!GenerateRequestBody(parameters, upload_file,
- file_part_name, boundary, &request_body)) {
+ if (!GenerateRequestBody(parameters, files, boundary, &request_body)) {
return false;
}
@@ -268,15 +266,9 @@ wstring HTTPUpload::GenerateRequestHeader(const wstring &boundary) {
// static
bool HTTPUpload::GenerateRequestBody(const map<wstring, wstring> &parameters,
- const wstring &upload_file,
- const wstring &file_part_name,
+ const map<wstring, wstring> &files,
const wstring &boundary,
string *request_body) {
- vector<char> contents;
- if (!GetFileContents(upload_file, &contents)) {
- return false;
- }
-
string boundary_str = WideToUTF8(boundary);
if (boundary_str.empty()) {
return false;
@@ -293,28 +285,36 @@ bool HTTPUpload::GenerateRequestBody(const map<wstring, wstring> &parameters,
WideToUTF8(pos->second) + "\r\n");
}
- // Now append the upload file as a binary (octet-stream) part
- string filename_utf8 = WideToUTF8(upload_file);
- if (filename_utf8.empty()) {
- return false;
- }
+ for (map<wstring, wstring>::const_iterator pos = files.begin();
+ pos != files.end(); ++pos) {
+ vector<char> contents;
+ if (!GetFileContents(pos->second, &contents)) {
+ return false;
+ }
- string file_part_name_utf8 = WideToUTF8(file_part_name);
- if (file_part_name_utf8.empty()) {
- 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");
+ 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()) {
+ if (!contents.empty()) {
request_body->append(&(contents[0]), contents.size());
+ }
+ request_body->append("\r\n");
}
- request_body->append("\r\n");
request_body->append("--" + boundary_str + "--\r\n");
return true;
}
diff --git a/src/common/windows/http_upload.h b/src/common/windows/http_upload.h
index 0594cde3..c2707102 100644
--- a/src/common/windows/http_upload.h
+++ b/src/common/windows/http_upload.h
@@ -54,9 +54,9 @@ using std::vector;
class HTTPUpload {
public:
- // Sends the given set of parameters, along with the contents of
- // upload_file, as a multipart POST request to the given URL.
- // file_part_name contains the name of the file part of the request
+ // Sends the given sets of parameters and files as a multipart POST
+ // request to the given URL.
+ // Each key in |files| is the name of the file part of the request
// (i.e. it corresponds to the name= attribute on an <input type="file">.
// Parameter names must contain only printable ASCII characters,
// and may not contain a quote (") character.
@@ -67,8 +67,7 @@ class HTTPUpload {
// received (or 0 if the request failed before getting an HTTP response).
static bool SendRequest(const wstring &url,
const map<wstring, wstring> &parameters,
- const wstring &upload_file,
- const wstring &file_part_name,
+ const map<wstring, wstring> &files,
int *timeout,
wstring *response_body,
int *response_code);
@@ -88,12 +87,11 @@ class HTTPUpload {
// Generates a HTTP request header for a multipart form submit.
static wstring GenerateRequestHeader(const wstring &boundary);
- // Given a set of parameters, an upload filename, and a file part name,
+ // Given a set of parameters, a set of upload files, and a file part name,
// generates a multipart request body string with these parameters
// and minidump contents. Returns true on success.
static bool GenerateRequestBody(const map<wstring, wstring> &parameters,
- const wstring &upload_file,
- const wstring &file_part_name,
+ const map<wstring, wstring> &files,
const wstring &boundary,
string *request_body);