aboutsummaryrefslogtreecommitdiff
path: root/src/client/windows/common
diff options
context:
space:
mode:
authordoshimun <doshimun@4c0a9323-5329-0410-9bdc-e9ce6186880e>2008-05-05 20:03:56 +0000
committerdoshimun <doshimun@4c0a9323-5329-0410-9bdc-e9ce6186880e>2008-05-05 20:03:56 +0000
commit0ded3d718f4b090d106014bb0ea9dbb7af4e1d81 (patch)
treec17841e1e075b5d449ed8b63b2a339d6856d20b7 /src/client/windows/common
parentIssue 261/262: 64-bit bug fix when iterating through load commands of a 64-bi... (diff)
downloadbreakpad-0ded3d718f4b090d106014bb0ea9dbb7af4e1d81.tar.xz
Add a way for the client apps to specify custom information in case of out-of-process
scenarios that the OOP server can use in whatever way it wants to. Fix a bug in CrashGenerationserver where CreateNamedPipe failure was not checked correctly. TODO in near future: Add a custom stream to minidump files for the custom information. git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@267 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/client/windows/common')
-rw-r--r--src/client/windows/common/ipc_protocol.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/client/windows/common/ipc_protocol.h b/src/client/windows/common/ipc_protocol.h
index 831be6cb..35b99016 100644
--- a/src/client/windows/common/ipc_protocol.h
+++ b/src/client/windows/common/ipc_protocol.h
@@ -32,10 +32,49 @@
#include <Windows.h>
#include <DbgHelp.h>
+#include <string>
+#include <utility>
#include "google_breakpad/common/minidump_format.h"
namespace google_breakpad {
+// Name/value pair for custom client information.
+struct CustomInfoEntry {
+ // Maximum length for name and value for client custom info.
+ static const int kNameMaxLength = 64;
+ static const int kValueMaxLength = 64;
+
+ CustomInfoEntry() {
+ // Putting name and value in initializer list makes VC++ show warning 4351.
+ set_name(NULL);
+ set_value(NULL);
+ }
+
+ CustomInfoEntry(const wchar_t* name_arg, const wchar_t* value_arg) {
+ set_name(name_arg);
+ set_value(value_arg);
+ }
+
+ void set_name(const wchar_t* name_arg) {
+ if (!name_arg) {
+ name[0] = L'\0';
+ return;
+ }
+ wcscpy_s(name, kNameMaxLength, name_arg);
+ }
+
+ void set_value(const wchar_t* value_arg) {
+ if (!value_arg) {
+ value[0] = L'\0';
+ return;
+ }
+ wcscpy_s(value, kValueMaxLength, value_arg);
+ }
+
+ wchar_t name[kNameMaxLength];
+ wchar_t value[kValueMaxLength];
+};
+
// Constants for the protocol between client and the server.
// Tags sent with each message indicating the purpose of
@@ -47,6 +86,11 @@ enum MessageTag {
MESSAGE_TAG_REGISTRATION_ACK = 3
};
+struct CustomClientInfo {
+ const CustomInfoEntry* entries;
+ int count;
+};
+
// Message structure for IPC between crash client and crash server.
struct ProtocolMessage {
ProtocolMessage()
@@ -56,6 +100,7 @@ struct ProtocolMessage {
thread_id(0),
exception_pointers(NULL),
assert_info(NULL),
+ custom_client_info(),
dump_request_handle(NULL),
dump_generated_handle(NULL),
server_alive_handle(NULL) {
@@ -68,6 +113,7 @@ struct ProtocolMessage {
DWORD* arg_thread_id,
EXCEPTION_POINTERS** arg_exception_pointers,
MDRawAssertionInfo* arg_assert_info,
+ const CustomClientInfo& custom_info,
HANDLE arg_dump_request_handle,
HANDLE arg_dump_generated_handle,
HANDLE arg_server_alive)
@@ -77,6 +123,7 @@ struct ProtocolMessage {
thread_id(arg_thread_id),
exception_pointers(arg_exception_pointers),
assert_info(arg_assert_info),
+ custom_client_info(custom_info),
dump_request_handle(arg_dump_request_handle),
dump_generated_handle(arg_dump_generated_handle),
server_alive_handle(arg_server_alive) {
@@ -101,6 +148,9 @@ struct ProtocolMessage {
// pure call failure.
MDRawAssertionInfo* assert_info;
+ // Custom client information.
+ CustomClientInfo custom_client_info;
+
// Handle to signal the crash event.
HANDLE dump_request_handle;