brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · ccbcd0a Raw
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