Skip to content

Commit 3531ae5

Browse files
committed
[lldb-dap] Make connection URLs match lldb (llvm#144770)
Use the same scheme as ConnectionFileDescriptor::Connect and use "listen" and "accept". Addresses feedback from a Pavel in a different PR [1]. [1] llvm#143628 (comment) (cherry picked from commit 4f991cc)
1 parent 1a79ad5 commit 3531ae5

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

lldb/include/lldb/Host/Socket.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ class Socket : public IOObject {
7373
ProtocolUnixAbstract
7474
};
7575

76+
enum SocketMode {
77+
ModeAccept,
78+
ModeConnect,
79+
};
80+
7681
struct HostAndPort {
7782
std::string hostname;
7883
uint16_t port;
@@ -82,6 +87,10 @@ class Socket : public IOObject {
8287
}
8388
};
8489

90+
using ProtocolModePair = std::pair<SocketProtocol, SocketMode>;
91+
static std::optional<ProtocolModePair>
92+
GetProtocolAndMode(llvm::StringRef scheme);
93+
8594
static const NativeSocket kInvalidSocketValue;
8695

8796
~Socket() override;

lldb/source/Host/common/Socket.cpp

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,8 @@ Socket::UdpConnect(llvm::StringRef host_and_port,
295295
return UDPSocket::Connect(host_and_port, child_processes_inherit);
296296
}
297297

298-
llvm::Expected<Socket::HostAndPort> Socket::DecodeHostAndPort(llvm::StringRef host_and_port) {
298+
llvm::Expected<Socket::HostAndPort>
299+
Socket::DecodeHostAndPort(llvm::StringRef host_and_port) {
299300
static llvm::Regex g_regex("([^:]+|\\[[0-9a-fA-F:]+.*\\]):([0-9]+)");
300301
HostAndPort ret;
301302
llvm::SmallVector<llvm::StringRef, 3> matches;
@@ -371,8 +372,8 @@ Status Socket::Write(const void *buf, size_t &num_bytes) {
371372
", src = %p, src_len = %" PRIu64 ", flags = 0) => %" PRIi64
372373
" (error = %s)",
373374
static_cast<void *>(this), static_cast<uint64_t>(m_socket), buf,
374-
static_cast<uint64_t>(src_len),
375-
static_cast<int64_t>(bytes_sent), error.AsCString());
375+
static_cast<uint64_t>(src_len), static_cast<int64_t>(bytes_sent),
376+
error.AsCString());
376377
}
377378

378379
return error;
@@ -497,3 +498,28 @@ llvm::raw_ostream &lldb_private::operator<<(llvm::raw_ostream &OS,
497498
const Socket::HostAndPort &HP) {
498499
return OS << '[' << HP.hostname << ']' << ':' << HP.port;
499500
}
501+
502+
std::optional<Socket::ProtocolModePair>
503+
Socket::GetProtocolAndMode(llvm::StringRef scheme) {
504+
// Keep in sync with ConnectionFileDescriptor::Connect.
505+
return llvm::StringSwitch<std::optional<ProtocolModePair>>(scheme)
506+
.Case("listen", ProtocolModePair{SocketProtocol::ProtocolTcp,
507+
SocketMode::ModeAccept})
508+
.Cases("accept", "unix-accept",
509+
ProtocolModePair{SocketProtocol::ProtocolUnixDomain,
510+
SocketMode::ModeAccept})
511+
.Case("unix-abstract-accept",
512+
ProtocolModePair{SocketProtocol::ProtocolUnixAbstract,
513+
SocketMode::ModeAccept})
514+
.Cases("connect", "tcp-connect",
515+
ProtocolModePair{SocketProtocol::ProtocolTcp,
516+
SocketMode::ModeConnect})
517+
.Case("udp", ProtocolModePair{SocketProtocol::ProtocolTcp,
518+
SocketMode::ModeConnect})
519+
.Case("unix-connect", ProtocolModePair{SocketProtocol::ProtocolUnixDomain,
520+
SocketMode::ModeConnect})
521+
.Case("unix-abstract-connect",
522+
ProtocolModePair{SocketProtocol::ProtocolUnixAbstract,
523+
SocketMode::ModeConnect})
524+
.Default(std::nullopt);
525+
}

0 commit comments

Comments
 (0)