Commit 3f6a2d3e authored by Robert Ransom's avatar Robert Ransom
Browse files

Record which intro points were listed in the last HS desc

parent 6f035cb2
Loading
Loading
Loading
Loading
+4 −0
Changes for src/or/or.h: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -3481,6 +3481,10 @@ typedef struct rend_intro_point_t {
   * circuit-build timeout.  See also MAX_INTRO_POINT_REACHABILITY_FAILURES. */
  unsigned int unreachable_count : 3;

  /** (Service side only) Flag indicating that this intro point was
   * included in the last HS descriptor we generated. */
  unsigned int listed_in_last_desc : 1;

  /** (Service side only) The number of INTRODUCE2 cells this intro
   * point's circuit has received. */
  unsigned int introduction_count : 24;
+7 −0
Changes for src/or/rendservice.c: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -544,10 +544,17 @@ rend_service_update_descriptor(rend_service_t *service)
  for (i = 0; i < smartlist_len(service->intro_nodes); ++i) {
    rend_intro_point_t *intro_svc = smartlist_get(service->intro_nodes, i);
    rend_intro_point_t *intro_desc;

    /* This intro point won't be listed in the descriptor... */
    intro_svc->listed_in_last_desc = 0;

    circ = find_intro_circuit(intro_svc, service->pk_digest);
    if (!circ || circ->_base.purpose != CIRCUIT_PURPOSE_S_INTRO)
      continue;

    /* ...unless this intro point is listed in the descriptor. */
    intro_svc->listed_in_last_desc = 1;

    /* We have an entirely established intro circuit.  Publish it in
     * our descriptor. */
    intro_desc = tor_malloc_zero(sizeof(rend_intro_point_t));