@@ -12,43 +12,51 @@ static constexpr auto null = JSONWriter::Null{};
12
12
static void ReportEndpoint (uv_handle_t * h,
13
13
struct sockaddr * addr,
14
14
const char * name,
15
- JSONWriter* writer) {
15
+ JSONWriter* writer,
16
+ bool exclude_network) {
16
17
if (addr == nullptr ) {
17
18
writer->json_keyvalue (name, null);
18
19
return ;
19
20
}
20
21
21
22
uv_getnameinfo_t endpoint;
22
23
char * host = nullptr ;
23
- char hostbuf[INET6_ADDRSTRLEN];
24
24
const int family = addr->sa_family ;
25
25
const int port = ntohs (family == AF_INET ?
26
26
reinterpret_cast <sockaddr_in*>(addr)->sin_port :
27
27
reinterpret_cast <sockaddr_in6*>(addr)->sin6_port );
28
28
29
- if (uv_getnameinfo (h->loop , &endpoint, nullptr , addr, NI_NUMERICSERV) == 0 ) {
29
+ writer->json_objectstart (name);
30
+ if (!exclude_network &&
31
+ uv_getnameinfo (h->loop , &endpoint, nullptr , addr, NI_NUMERICSERV) == 0 ) {
30
32
host = endpoint.host ;
31
33
DCHECK_EQ (port, std::stoi (endpoint.service ));
34
+ writer->json_keyvalue (" host" , host);
35
+ }
36
+
37
+ if (family == AF_INET) {
38
+ char ipbuf[INET_ADDRSTRLEN];
39
+ if (uv_ip4_name (
40
+ reinterpret_cast <sockaddr_in*>(addr), ipbuf, sizeof (ipbuf)) == 0 ) {
41
+ writer->json_keyvalue (" ip4" , ipbuf);
42
+ if (host == nullptr ) writer->json_keyvalue (" host" , ipbuf);
43
+ }
32
44
} else {
33
- const void * src = family == AF_INET ?
34
- static_cast <void *>(
35
- &(reinterpret_cast <sockaddr_in*>(addr)->sin_addr )) :
36
- static_cast <void *>(
37
- &(reinterpret_cast <sockaddr_in6*>(addr)->sin6_addr ));
38
- if (uv_inet_ntop (family, src, hostbuf, sizeof (hostbuf)) == 0 ) {
39
- host = hostbuf;
45
+ char ipbuf[INET6_ADDRSTRLEN];
46
+ if (uv_ip6_name (
47
+ reinterpret_cast <sockaddr_in6*>(addr), ipbuf, sizeof (ipbuf)) == 0 ) {
48
+ writer->json_keyvalue (" ip6" , ipbuf);
49
+ if (host == nullptr ) writer->json_keyvalue (" host" , ipbuf);
40
50
}
41
51
}
42
- writer->json_objectstart (name);
43
- if (host != nullptr ) {
44
- writer->json_keyvalue (" host" , host);
45
- }
46
52
writer->json_keyvalue (" port" , port);
47
53
writer->json_objectend ();
48
54
}
49
55
50
56
// Utility function to format libuv socket information.
51
- static void ReportEndpoints (uv_handle_t * h, JSONWriter* writer) {
57
+ static void ReportEndpoints (uv_handle_t * h,
58
+ JSONWriter* writer,
59
+ bool exclude_network) {
52
60
struct sockaddr_storage addr_storage;
53
61
struct sockaddr * addr = reinterpret_cast <sockaddr*>(&addr_storage);
54
62
uv_any_handle* handle = reinterpret_cast <uv_any_handle*>(h);
@@ -65,7 +73,8 @@ static void ReportEndpoints(uv_handle_t* h, JSONWriter* writer) {
65
73
default :
66
74
break ;
67
75
}
68
- ReportEndpoint (h, rc == 0 ? addr : nullptr , " localEndpoint" , writer);
76
+ ReportEndpoint (
77
+ h, rc == 0 ? addr : nullptr , " localEndpoint" , writer, exclude_network);
69
78
70
79
switch (h->type ) {
71
80
case UV_UDP:
@@ -77,7 +86,8 @@ static void ReportEndpoints(uv_handle_t* h, JSONWriter* writer) {
77
86
default :
78
87
break ;
79
88
}
80
- ReportEndpoint (h, rc == 0 ? addr : nullptr , " remoteEndpoint" , writer);
89
+ ReportEndpoint (
90
+ h, rc == 0 ? addr : nullptr , " remoteEndpoint" , writer, exclude_network);
81
91
}
82
92
83
93
// Utility function to format libuv pipe information.
@@ -155,7 +165,7 @@ static void ReportPath(uv_handle_t* h, JSONWriter* writer) {
155
165
}
156
166
157
167
// Utility function to walk libuv handles.
158
- void WalkHandle (uv_handle_t * h, void * arg) {
168
+ void WalkHandle (uv_handle_t * h, void * arg, bool exclude_network = false ) {
159
169
const char * type = uv_handle_type_name (h->type );
160
170
JSONWriter* writer = static_cast <JSONWriter*>(arg);
161
171
uv_any_handle* handle = reinterpret_cast <uv_any_handle*>(h);
@@ -177,7 +187,7 @@ void WalkHandle(uv_handle_t* h, void* arg) {
177
187
break ;
178
188
case UV_TCP:
179
189
case UV_UDP:
180
- ReportEndpoints (h, writer);
190
+ ReportEndpoints (h, writer, exclude_network );
181
191
break ;
182
192
case UV_NAMED_PIPE:
183
193
ReportPipeEndpoints (h, writer);
@@ -267,6 +277,11 @@ void WalkHandle(uv_handle_t* h, void* arg) {
267
277
}
268
278
writer->json_end ();
269
279
}
270
-
280
+ void WalkHandleNetwork (uv_handle_t * h, void * arg) {
281
+ WalkHandle (h, arg, false );
282
+ }
283
+ void WalkHandleNoNetwork (uv_handle_t * h, void * arg) {
284
+ WalkHandle (h, arg, true );
285
+ }
271
286
} // namespace report
272
287
} // namespace node
0 commit comments