30 #ifndef CLIENT_WINDOWS_CRASH_GENERATION_CRASH_GENERATION_SERVER_H__ 31 #define CLIENT_WINDOWS_CRASH_GENERATION_CRASH_GENERATION_SERVER_H__ 50 class CrashGenerationServer {
57 const std::wstring* file_path);
63 const DWORD crash_id);
85 SECURITY_ATTRIBUTES* pipe_sec_attrs,
87 void* connect_context,
95 const std::wstring* dump_path);
106 pre_fetch_custom_info_ = do_pre_fetch;
112 enum IPCServerState {
114 IPC_SERVER_STATE_UNINITIALIZED,
117 IPC_SERVER_STATE_ERROR,
120 IPC_SERVER_STATE_INITIAL,
124 IPC_SERVER_STATE_CONNECTING,
127 IPC_SERVER_STATE_CONNECTED,
131 IPC_SERVER_STATE_READING,
134 IPC_SERVER_STATE_READ_DONE,
138 IPC_SERVER_STATE_WRITING,
141 IPC_SERVER_STATE_WRITE_DONE,
145 IPC_SERVER_STATE_READING_ACK,
149 IPC_SERVER_STATE_DISCONNECTING
155 void HandleErrorState();
156 void HandleInitialState();
157 void HandleConnectingState();
158 void HandleConnectedState();
159 void HandleReadingState();
160 void HandleReadDoneState();
161 void HandleWritingState();
162 void HandleWriteDoneState();
163 void HandleReadingAckState();
164 void HandleDisconnectingState();
167 bool PrepareReply(
const ClientInfo& client_info,
174 bool CreateClientHandles(
const ClientInfo& client_info,
179 bool RespondToClient(
ClientInfo* client_info);
182 void HandleConnectionRequest();
185 void HandleDumpRequest(
const ClientInfo& client_info);
188 static void CALLBACK OnPipeConnected(
void* context, BOOLEAN timer_or_wait);
191 static void CALLBACK OnDumpRequest(
void* context, BOOLEAN timer_or_wait);
194 static void CALLBACK OnClientEnd(
void* context, BOOLEAN timer_or_wait);
197 void HandleClientProcessExit(
ClientInfo* client_info);
203 bool GenerateDump(
const ClientInfo& client, std::wstring* dump_path);
208 void EnterErrorState();
213 void EnterStateImmediately(IPCServerState state);
218 void EnterStateWhenSignaled(IPCServerState state);
221 CRITICAL_SECTION sync_;
224 std::list<ClientInfo*> clients_;
227 std::wstring pipe_name_;
230 SECURITY_ATTRIBUTES* pipe_sec_attrs_;
236 HANDLE pipe_wait_handle_;
239 HANDLE server_alive_handle_;
245 void* connect_context_;
263 void* upload_context_;
266 bool generate_dumps_;
269 bool pre_fetch_custom_info_;
278 IPCServerState server_state_;
284 OVERLAPPED overlapped_;
299 #endif // CLIENT_WINDOWS_CRASH_GENERATION_CRASH_GENERATION_SERVER_H__ void(* OnClientDumpRequestCallback)(void *context, const ClientInfo &client_info, const std::string &file_path)
void(* OnClientExitedCallback)(void *context, const ClientInfo *client_info)
void(* OnClientUploadRequestCallback)(void *context, const DWORD crash_id)
void pre_fetch_custom_info(bool do_pre_fetch)
void(* OnClientConnectedCallback)(void *context, const ClientInfo *client_info)
CrashGenerationServer(const char *mach_port_name, FilterCallback filter, void *filter_context, OnClientDumpRequestCallback dump_callback, void *dump_context, OnClientExitingCallback exit_callback, void *exit_context, bool generate_dumps, const std::string &dump_path)