From df67cd0fef65f8988e5189769e6e6fc3fb0aa716 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Fri, 8 Feb 2019 14:34:43 +0100 Subject: [PATCH] inspector: print all listening addresses Some hostnames have multiple interfaces. Before this commit, the inspector only printed the first one. Now, it prints them all. No test. I can't think of a reliable way to test this on the CI matrix. PR-URL: https://github.com/nodejs/node/pull/26008 Fixes: https://github.com/nodejs/node/issues/13772 Reviewed-By: Colin Ihrig Reviewed-By: Refael Ackermann Reviewed-By: Eugene Ostroukhov Reviewed-By: James M Snell --- src/inspector_socket_server.cc | 40 ++++++++++++++++++---------------- src/inspector_socket_server.h | 2 +- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/inspector_socket_server.cc b/src/inspector_socket_server.cc index 7ddbcd38fe299d..5f1bdbc1e68880 100644 --- a/src/inspector_socket_server.cc +++ b/src/inspector_socket_server.cc @@ -93,22 +93,6 @@ const char* MatchPathSegment(const char* path, const char* expected) { return nullptr; } -void PrintDebuggerReadyMessage(const std::string& host, - int port, - const std::vector& ids, - FILE* out) { - if (out == nullptr) { - return; - } - for (const std::string& id : ids) { - fprintf(out, "Debugger listening on %s\n", - FormatWsAddress(host, port, id, true).c_str()); - } - fprintf(out, "For help, see: %s\n", - "https://nodejs.org/en/docs/inspector"); - fflush(out); -} - void SendHttpResponse(InspectorSocket* socket, const std::string& response) { const char HEADERS[] = "HTTP/1.0 200 OK\r\n" "Content-Type: application/json; charset=UTF-8\r\n" @@ -235,6 +219,25 @@ class ServerSocket { int port_ = -1; }; +void PrintDebuggerReadyMessage( + const std::string& host, + const std::vector& server_sockets, + const std::vector& ids, + FILE* out) { + if (out == nullptr) { + return; + } + for (const auto& server_socket : server_sockets) { + for (const std::string& id : ids) { + fprintf(out, "Debugger listening on %s\n", + FormatWsAddress(host, server_socket->port(), id, true).c_str()); + } + } + fprintf(out, "For help, see: %s\n", + "https://nodejs.org/en/docs/inspector"); + fflush(out); +} + InspectorSocketServer::InspectorSocketServer( std::unique_ptr delegate, uv_loop_t* loop, const std::string& host, int port, FILE* out) @@ -276,7 +279,7 @@ void InspectorSocketServer::SessionTerminated(int session_id) { if (connected_sessions_.empty()) { if (was_attached && state_ == ServerState::kRunning && !server_sockets_.empty()) { - PrintDebuggerReadyMessage(host_, server_sockets_[0]->port(), + PrintDebuggerReadyMessage(host_, server_sockets_, delegate_->GetTargetIds(), out_); } if (state_ == ServerState::kStopped) { @@ -393,8 +396,7 @@ bool InspectorSocketServer::Start() { } delegate_.swap(delegate_holder); state_ = ServerState::kRunning; - // getaddrinfo sorts the addresses, so the first port is most relevant. - PrintDebuggerReadyMessage(host_, server_sockets_[0]->port(), + PrintDebuggerReadyMessage(host_, server_sockets_, delegate_->GetTargetIds(), out_); return true; } diff --git a/src/inspector_socket_server.h b/src/inspector_socket_server.h index 5c61b4e5ee3ddc..082de54ac68c79 100644 --- a/src/inspector_socket_server.h +++ b/src/inspector_socket_server.h @@ -73,10 +73,10 @@ class InspectorSocketServer { return server_sockets_.empty() && connected_sessions_.empty(); } - private: static void CloseServerSocket(ServerSocket*); using ServerSocketPtr = DeleteFnPtr; + private: void SendListResponse(InspectorSocket* socket, const std::string& host, SocketSession* session); std::string GetFrontendURL(bool is_compat,