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 <cjihrig@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Eugene Ostroukhov <eostroukhov@google.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
000788ec23
commit
df67cd0fef
@ -93,22 +93,6 @@ const char* MatchPathSegment(const char* path, const char* expected) {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrintDebuggerReadyMessage(const std::string& host,
|
|
||||||
int port,
|
|
||||||
const std::vector<std::string>& 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) {
|
void SendHttpResponse(InspectorSocket* socket, const std::string& response) {
|
||||||
const char HEADERS[] = "HTTP/1.0 200 OK\r\n"
|
const char HEADERS[] = "HTTP/1.0 200 OK\r\n"
|
||||||
"Content-Type: application/json; charset=UTF-8\r\n"
|
"Content-Type: application/json; charset=UTF-8\r\n"
|
||||||
@ -235,6 +219,25 @@ class ServerSocket {
|
|||||||
int port_ = -1;
|
int port_ = -1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void PrintDebuggerReadyMessage(
|
||||||
|
const std::string& host,
|
||||||
|
const std::vector<InspectorSocketServer::ServerSocketPtr>& server_sockets,
|
||||||
|
const std::vector<std::string>& 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(
|
InspectorSocketServer::InspectorSocketServer(
|
||||||
std::unique_ptr<SocketServerDelegate> delegate, uv_loop_t* loop,
|
std::unique_ptr<SocketServerDelegate> delegate, uv_loop_t* loop,
|
||||||
const std::string& host, int port, FILE* out)
|
const std::string& host, int port, FILE* out)
|
||||||
@ -276,7 +279,7 @@ void InspectorSocketServer::SessionTerminated(int session_id) {
|
|||||||
if (connected_sessions_.empty()) {
|
if (connected_sessions_.empty()) {
|
||||||
if (was_attached && state_ == ServerState::kRunning
|
if (was_attached && state_ == ServerState::kRunning
|
||||||
&& !server_sockets_.empty()) {
|
&& !server_sockets_.empty()) {
|
||||||
PrintDebuggerReadyMessage(host_, server_sockets_[0]->port(),
|
PrintDebuggerReadyMessage(host_, server_sockets_,
|
||||||
delegate_->GetTargetIds(), out_);
|
delegate_->GetTargetIds(), out_);
|
||||||
}
|
}
|
||||||
if (state_ == ServerState::kStopped) {
|
if (state_ == ServerState::kStopped) {
|
||||||
@ -393,8 +396,7 @@ bool InspectorSocketServer::Start() {
|
|||||||
}
|
}
|
||||||
delegate_.swap(delegate_holder);
|
delegate_.swap(delegate_holder);
|
||||||
state_ = ServerState::kRunning;
|
state_ = ServerState::kRunning;
|
||||||
// getaddrinfo sorts the addresses, so the first port is most relevant.
|
PrintDebuggerReadyMessage(host_, server_sockets_,
|
||||||
PrintDebuggerReadyMessage(host_, server_sockets_[0]->port(),
|
|
||||||
delegate_->GetTargetIds(), out_);
|
delegate_->GetTargetIds(), out_);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -73,10 +73,10 @@ class InspectorSocketServer {
|
|||||||
return server_sockets_.empty() && connected_sessions_.empty();
|
return server_sockets_.empty() && connected_sessions_.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
|
||||||
static void CloseServerSocket(ServerSocket*);
|
static void CloseServerSocket(ServerSocket*);
|
||||||
using ServerSocketPtr = DeleteFnPtr<ServerSocket, CloseServerSocket>;
|
using ServerSocketPtr = DeleteFnPtr<ServerSocket, CloseServerSocket>;
|
||||||
|
|
||||||
|
private:
|
||||||
void SendListResponse(InspectorSocket* socket, const std::string& host,
|
void SendListResponse(InspectorSocket* socket, const std::string& host,
|
||||||
SocketSession* session);
|
SocketSession* session);
|
||||||
std::string GetFrontendURL(bool is_compat,
|
std::string GetFrontendURL(bool is_compat,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user