87 lines · c
1//===-- GDBRemoteCommunicationServer.h --------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_PROCESS_GDB_REMOTE_GDBREMOTECOMMUNICATIONSERVER_H10#define LLDB_SOURCE_PLUGINS_PROCESS_GDB_REMOTE_GDBREMOTECOMMUNICATIONSERVER_H11 12#include <functional>13#include <map>14 15#include "GDBRemoteCommunication.h"16#include "lldb/lldb-private-forward.h"17 18#include "llvm/Support/Errc.h"19#include "llvm/Support/Error.h"20 21class StringExtractorGDBRemote;22 23namespace lldb_private {24namespace process_gdb_remote {25 26class ProcessGDBRemote;27 28class GDBRemoteCommunicationServer : public GDBRemoteCommunication {29public:30 using PacketHandler =31 std::function<PacketResult(StringExtractorGDBRemote &packet,32 Status &error, bool &interrupt, bool &quit)>;33 34 GDBRemoteCommunicationServer();35 36 ~GDBRemoteCommunicationServer() override;37 38 void39 RegisterPacketHandler(StringExtractorGDBRemote::ServerPacketType packet_type,40 PacketHandler handler);41 42 PacketResult GetPacketAndSendResponse(Timeout<std::micro> timeout,43 Status &error, bool &interrupt,44 bool &quit);45 46protected:47 std::map<StringExtractorGDBRemote::ServerPacketType, PacketHandler>48 m_packet_handlers;49 bool m_exit_now; // use in asynchronous handling to indicate process should50 // exit.51 52 bool m_send_error_strings = false; // If the client enables this then53 // we will send error strings as well.54 55 PacketResult Handle_QErrorStringEnable(StringExtractorGDBRemote &packet);56 57 PacketResult SendErrorResponse(const Status &error);58 59 PacketResult SendErrorResponse(llvm::Error error);60 61 PacketResult SendUnimplementedResponse(const char *packet);62 63 PacketResult SendErrorResponse(uint8_t error);64 65 PacketResult SendIllFormedResponse(const StringExtractorGDBRemote &packet,66 const char *error_message);67 68 PacketResult SendOKResponse();69 70 /// Serialize and send a JSON object response.71 PacketResult SendJSONResponse(const llvm::json::Value &value);72 73 /// Serialize and send a JSON object response, or respond with an error if the74 /// input object is an \a llvm::Error.75 PacketResult SendJSONResponse(llvm::Expected<llvm::json::Value> value);76 77private:78 GDBRemoteCommunicationServer(const GDBRemoteCommunicationServer &) = delete;79 const GDBRemoteCommunicationServer &80 operator=(const GDBRemoteCommunicationServer &) = delete;81};82 83} // namespace process_gdb_remote84} // namespace lldb_private85 86#endif // LLDB_SOURCE_PLUGINS_PROCESS_GDB_REMOTE_GDBREMOTECOMMUNICATIONSERVER_H87