16#include "llvm/ADT/STLExtras.h"
17#include "llvm/Support/FormatAdapters.h"
24#define LLDB_OPTIONS_mcp
25#include "CommandOptions.inc"
31 "start protocol server",
32 "protocol-server start <protocol> [<connection>]") {
50 "unsupported protocol: {0}. Supported protocols are: {1}", protocol,
55 std::string connection_uri =
"listen://[localhost]:0";
59 const char *connection_error =
60 "unsupported connection specifier, expected 'accept:///path' "
61 "or 'listen://[host]:port', got '{0}'.";
68 std::optional<Socket::ProtocolModePair> protocol_and_mode =
76 connection.
protocol = protocol_and_mode->first;
77 if (connection.
protocol == Socket::SocketProtocol::ProtocolUnixDomain)
78 connection.
name = uri->path;
80 connection.
name = formatv(
81 "[{0}]:{1}", uri->hostname.empty() ?
"0.0.0.0" : uri->hostname,
82 uri->port.value_or(0));
84 if (llvm::Error
error = server->
Start(connection)) {
91 llvm::join(socket->GetListeningConnectionURI(),
", ");
93 "{0} server started with connection listeners: {1}", protocol,
104 "stop protocol server",
105 "protocol-server stop <protocol>") {
122 "unsupported protocol: {0}. Supported protocols are: {1}", protocol,
127 if (llvm::Error
error = server->
Stop()) {
137 "Start and stop a protocol server.",
static llvm::raw_ostream & error(Stream &strm)
~CommandObjectProtocolServerStart() override=default
CommandObjectProtocolServerStart(CommandInterpreter &interpreter)
void DoExecute(Args &args, CommandReturnObject &result) override
void DoExecute(Args &args, CommandReturnObject &result) override
~CommandObjectProtocolServerStop() override=default
CommandObjectProtocolServerStop(CommandInterpreter &interpreter)
A command line argument class.
size_t GetArgumentCount() const
Gets the number of arguments left in this command object.
const char * GetArgumentAtIndex(size_t idx) const
Gets the NULL terminated C string argument pointer for the argument at index idx.
bool LoadSubCommand(llvm::StringRef cmd_name, const lldb::CommandObjectSP &command_obj) override
~CommandObjectProtocolServer() override
CommandObjectProtocolServer(CommandInterpreter &interpreter)
void AddSimpleArgumentList(lldb::CommandArgumentType arg_type, ArgumentRepetitionType repetition_type=eArgRepeatPlain)
void void AppendError(llvm::StringRef in_string)
void SetStatus(lldb::ReturnStatus status)
void void AppendMessageWithFormatv(const char *format, Args &&...args)
void AppendErrorWithFormatv(const char *format, Args &&...args)
virtual Socket * GetSocket() const =0
static std::vector< llvm::StringRef > GetSupportedProtocols()
virtual llvm::Error Stop()=0
virtual llvm::Error Start(Connection connection)=0
static ProtocolServer * GetOrCreate(llvm::StringRef name)
static std::optional< ProtocolModePair > GetProtocolAndMode(llvm::StringRef scheme)
A class that represents a running process on the host machine.
std::shared_ptr< lldb_private::CommandObject > CommandObjectSP
@ eReturnStatusSuccessFinishNoResult
Socket::SocketProtocol protocol
static std::optional< URI > Parse(llvm::StringRef uri)