]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add HS v3 status to the SIGUSR1 dumpstats()
authorNeel Chauhan <neel@neelc.org>
Sun, 17 May 2020 23:30:29 +0000 (16:30 -0700)
committerGeorge Kadianakis <desnacked@riseup.net>
Wed, 27 May 2020 12:16:39 +0000 (15:16 +0300)
src/app/main/main.c
src/feature/hs/hs_service.c
src/feature/hs/hs_service.h

index 689bc526ab500e63215fa228015cf986727d83a4..c1c5c5ea88232c0554e26f482188a83bcfd154e8 100644 (file)
@@ -414,6 +414,7 @@ dumpstats(int severity)
 
   rep_hist_dump_stats(now,severity);
   rend_service_dump_stats(severity);
+  hs_service_dump_stats(severity);
 }
 
 #ifdef _WIN32
index 5b8f661832339e52394ddcbdf561b6e3ee065cc1..ab53d0082ce5605560ed853175fc63ae50b99d35 100644 (file)
@@ -4103,6 +4103,50 @@ hs_service_load_all_keys(void)
   return -1;
 }
 
+/** Log the status of introduction points for all version 3 onion services
+ * at log severity <b>severity</b>.
+ */
+void
+hs_service_dump_stats(int severity)
+{
+  origin_circuit_t *circ;
+
+  FOR_EACH_SERVICE_BEGIN(hs) {
+
+    tor_log(severity, LD_GENERAL, "Service configured in %s:",
+            service_escaped_dir(hs));
+    FOR_EACH_DESCRIPTOR_BEGIN(hs, desc) {
+
+      DIGEST256MAP_FOREACH(desc->intro_points.map, key,
+                           hs_service_intro_point_t *, ip) {
+        const node_t *intro_node;
+        const char *nickname;
+
+        intro_node = get_node_from_intro_point(ip);
+        if (!intro_node) {
+          tor_log(severity, LD_GENERAL, "  Couldn't find intro point, "
+                  "skipping");
+          continue;
+        }
+        nickname = node_get_nickname(intro_node);
+        if (!nickname) {
+          continue;
+        }
+
+        circ = hs_circ_service_get_intro_circ(ip);
+        if (!circ) {
+          tor_log(severity, LD_GENERAL, "  Intro point at %s: no circuit",
+                  nickname);
+          continue;
+        }
+        tor_log(severity, LD_GENERAL, "  Intro point %s: circuit is %s",
+                nickname, circuit_state_to_string(circ->base_.state));
+      } DIGEST256MAP_FOREACH_END;
+
+    } FOR_EACH_DESCRIPTOR_END;
+  } FOR_EACH_SERVICE_END;
+}
+
 /** Put all service object in the given service list. After this, the caller
  * looses ownership of every elements in the list and responsible to free the
  * list pointer. */
index 0f6a2c2358deae4fa5d23dc5ea1875d7bd240e44..b5bff5bee5d396559e5733b5e129bc9d857621ea 100644 (file)
@@ -373,6 +373,8 @@ void hs_service_upload_desc_to_dir(const char *encoded_desc,
 hs_circuit_id_protocol_t
 hs_service_exports_circuit_id(const ed25519_public_key_t *pk);
 
+void hs_service_dump_stats(int severity);
+
 #ifdef HS_SERVICE_PRIVATE
 
 #ifdef TOR_UNIT_TESTS