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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_SOURCE_PLUGINS_PROCESS_GDB_REMOTE_GDBREMOTECOMMUNICATIONSERVER_H
10#define LLDB_SOURCE_PLUGINS_PROCESS_GDB_REMOTE_GDBREMOTECOMMUNICATIONSERVER_H
11
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 void
39 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 should
50 // exit.
51
52 bool m_send_error_strings = false; // If the client enables this then
53 // 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 the
74 /// 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_remote
84} // namespace lldb_private
85
86#endif // LLDB_SOURCE_PLUGINS_PROCESS_GDB_REMOTE_GDBREMOTECOMMUNICATIONSERVER_H
87

source code of lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.h