diff options
author | incrementalist <incrementalist@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2007-01-03 23:14:46 +0000 |
---|---|---|
committer | incrementalist <incrementalist@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2007-01-03 23:14:46 +0000 |
commit | d4e527b7eea7628e305e6ca93cdcb9796060d65a (patch) | |
tree | f6b126d057b022b9a597ba4eaeabd49b5a4a3736 /src/client/windows/sender | |
parent | Add Mac exception handler and generator. Fixes issue #69. Reviewed by mment... (diff) | |
download | breakpad-d4e527b7eea7628e305e6ca93cdcb9796060d65a.tar.xz |
Allows the caller of CrashReportSender::SendCrashReport() to determine that
the server rejected a crash report, by changing the return value from a
boolean to a tri-state enum.
Fixes issue #101. Reviewed by mmentovai.
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@99 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/client/windows/sender')
-rw-r--r-- | src/client/windows/sender/crash_report_sender.cc | 17 | ||||
-rw-r--r-- | src/client/windows/sender/crash_report_sender.h | 25 |
2 files changed, 30 insertions, 12 deletions
diff --git a/src/client/windows/sender/crash_report_sender.cc b/src/client/windows/sender/crash_report_sender.cc index 485ffc36..73675bef 100644 --- a/src/client/windows/sender/crash_report_sender.cc +++ b/src/client/windows/sender/crash_report_sender.cc @@ -36,12 +36,23 @@ namespace google_airbag { // static -bool CrashReportSender::SendCrashReport( +ReportResult CrashReportSender::SendCrashReport( const wstring &url, const map<wstring, wstring> ¶meters, const wstring &dump_file_name, wstring *report_code) { - return HTTPUpload::SendRequest(url, parameters, dump_file_name, - L"upload_file_minidump", report_code); + int http_response = 0; + bool result = HTTPUpload::SendRequest( + url, parameters, dump_file_name, L"upload_file_minidump", report_code, + &http_response); + + if (result) { + return RESULT_SUCCEEDED; + } else if (http_response == 400) { // TODO: update if/when the server + // switches to a different code + return RESULT_REJECTED; + } else { + return RESULT_FAILED; + } } } // namespace google_airbag diff --git a/src/client/windows/sender/crash_report_sender.h b/src/client/windows/sender/crash_report_sender.h index c44c5e74..3fd0bc06 100644 --- a/src/client/windows/sender/crash_report_sender.h +++ b/src/client/windows/sender/crash_report_sender.h @@ -50,22 +50,29 @@ namespace google_airbag { using std::wstring; using std::map; +typedef enum { + RESULT_FAILED = 0, // Failed to communicate with the server; try later. + RESULT_REJECTED, // Successfully sent the crash report, but the + // server rejected it; don't resend this report. + RESULT_SUCCEEDED // The server accepted the crash report. +} ReportResult; + class CrashReportSender { public: // Sends the specified minidump file, along with the map of // name value pairs, as a multipart POST request to the given URL. // Parameter names must contain only printable ASCII characters, // and may not contain a quote (") character. - // If the report is sent successfully (the return value is true), a - // code uniquely identifying the report will be returned in report_code. - // Only HTTP(S) URLs are currently supported. Returns true on success. + // Only HTTP(S) URLs are currently supported. The return value indicates + // the result of the operation (see above for possible results). // If report_code is non-NULL and the report is sent successfully (that is, - // the return value is true), a code uniquely identifying the report will be - // returned in report_code. (Otherwise, report_code will be unchanged.) - static bool SendCrashReport(const wstring &url, - const map<wstring, wstring> ¶meters, - const wstring &dump_file_name, - wstring *report_code); + // the return value is RESULT_SUCCEEDED), a code uniquely identifying the + // report will be returned in report_code. + // (Otherwise, report_code will be unchanged.) + static ReportResult SendCrashReport(const wstring &url, + const map<wstring, wstring> ¶meters, + const wstring &dump_file_name, + wstring *report_code); private: // No instances of this class should be created. |