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)