diff options
author | doshimun <doshimun@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2008-05-05 20:03:56 +0000 |
---|---|---|
committer | doshimun <doshimun@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2008-05-05 20:03:56 +0000 |
commit | 0ded3d718f4b090d106014bb0ea9dbb7af4e1d81 (patch) | |
tree | c17841e1e075b5d449ed8b63b2a339d6856d20b7 /src/client/windows/common | |
parent | Issue 261/262: 64-bit bug fix when iterating through load commands of a 64-bi... (diff) | |
download | breakpad-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.h | 50 |
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; |