
This abstracts the base Transport handler to have a MessageHandler component and allows us to generalize both JSON-RPC 2.0 for MCP (or an LSP) and DAP format. This should allow us to create clearly defined clients and servers for protocols, both for testing and for RPC between the lldb instances and an lldb-mcp multiplexer. This basic model is inspiried by the clangd/Transport.h file and the mlir/lsp-server-support/Transport.h that are both used for LSP servers within the llvm project. Additionally, this helps with testing by subclassing `Transport` to allow us to simplify sending/receiving messages without needing to use a toJSON/fromJSON and a pair of pipes, see `TestTransport` in DAP/TestBase.h.
45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
//===-- Transport.h -------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Debug Adapter Protocol transport layer for encoding and decoding protocol
|
|
// messages.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDB_TOOLS_LLDB_DAP_TRANSPORT_H
|
|
#define LLDB_TOOLS_LLDB_DAP_TRANSPORT_H
|
|
|
|
#include "DAPForward.h"
|
|
#include "Protocol/ProtocolBase.h"
|
|
#include "lldb/Host/JSONTransport.h"
|
|
#include "lldb/lldb-forward.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
|
|
namespace lldb_dap {
|
|
|
|
/// A transport class that performs the Debug Adapter Protocol communication
|
|
/// with the client.
|
|
class Transport final
|
|
: public lldb_private::HTTPDelimitedJSONTransport<
|
|
protocol::Request, protocol::Response, protocol::Event> {
|
|
public:
|
|
Transport(llvm::StringRef client_name, lldb_dap::Log *log,
|
|
lldb::IOObjectSP input, lldb::IOObjectSP output);
|
|
virtual ~Transport() = default;
|
|
|
|
void Log(llvm::StringRef message) override;
|
|
|
|
private:
|
|
llvm::StringRef m_client_name;
|
|
lldb_dap::Log *m_log;
|
|
};
|
|
|
|
} // namespace lldb_dap
|
|
|
|
#endif
|