//===-- GDBRemoteCommunicationServer.h --------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef liblldb_GDBRemoteCommunicationServer_h_ #define liblldb_GDBRemoteCommunicationServer_h_ // C Includes // C++ Includes #include #include // Other libraries and framework includes // Project includes #include "GDBRemoteCommunication.h" #include "lldb/lldb-private-forward.h" class StringExtractorGDBRemote; namespace lldb_private { namespace process_gdb_remote { class ProcessGDBRemote; class GDBRemoteCommunicationServer : public GDBRemoteCommunication { public: using PortMap = std::map; using PacketHandler = std::function; GDBRemoteCommunicationServer(const char *comm_name, const char *listener_name); ~GDBRemoteCommunicationServer() override; void RegisterPacketHandler(StringExtractorGDBRemote::ServerPacketType packet_type, PacketHandler handler); PacketResult GetPacketAndSendResponse(Timeout timeout, Status &error, bool &interrupt, bool &quit); // After connecting, do a little handshake with the client to make sure // we are at least communicating bool HandshakeWithClient(); protected: std::map m_packet_handlers; bool m_exit_now; // use in asynchronous handling to indicate process should // exit. bool m_send_error_strings; // If the client enables this then // we will send error strings as well. PacketResult Handle_QErrorStringEnable(StringExtractorGDBRemote &packet); PacketResult SendErrorResponse(const Status &error); PacketResult SendUnimplementedResponse(const char *packet); PacketResult SendErrorResponse(uint8_t error); PacketResult SendIllFormedResponse(const StringExtractorGDBRemote &packet, const char *error_message); PacketResult SendOKResponse(); private: DISALLOW_COPY_AND_ASSIGN(GDBRemoteCommunicationServer); }; } // namespace process_gdb_remote } // namespace lldb_private #endif // liblldb_GDBRemoteCommunicationServer_h_