From 7a8366a3eb7081c29cbc0ebf0e9757cbfd71a86d Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@torproject.org>
Date: Fri, 31 Aug 2012 23:02:19 +0200
Subject: [PATCH] Add IPv6 OR port to microdesc_t and populate it.

---
 src/or/or.h          | 4 ++++
 src/or/routerparse.c | 9 +++++++++
 2 files changed, 13 insertions(+)

diff --git a/src/or/or.h b/src/or/or.h
index 7536afc690..4bf99e2eaa 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -1960,6 +1960,10 @@ typedef struct microdesc_t {
 
   /** As routerinfo_t.onion_pkey */
   crypto_pk_t *onion_pkey;
+  /** As routerinfo_t.ipv6_add */
+  tor_addr_t ipv6_addr;
+  /** As routerinfo_t.ipv6_orport */
+  uint16_t ipv6_orport;
   /** As routerinfo_t.family */
   smartlist_t *family;
   /** Exit policy summary */
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index 60a2eae75f..4eec19f026 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -522,6 +522,7 @@ static token_rule_t networkstatus_detached_signature_token_table[] = {
 /** List of tokens recognized in microdescriptors */
 static token_rule_t microdesc_token_table[] = {
   T1_START("onion-key",        K_ONION_KEY,        NO_ARGS,     NEED_KEY_1024),
+  T0N("a",                     K_A,                GE(1),       NO_OBJ ),
   T01("family",                K_FAMILY,           ARGS,        NO_OBJ ),
   T01("p",                     K_P,                CONCAT_ARGS, NO_OBJ ),
   A01("@last-listed",          A_LAST_LISTED,      CONCAT_ARGS, NO_OBJ ),
@@ -4421,6 +4422,14 @@ microdescs_parse_from_string(const char *s, const char *eos,
     md->onion_pkey = tok->key;
     tok->key = NULL;
 
+    {
+      smartlist_t *a_lines = find_all_by_keyword(tokens, K_A);
+      if (a_lines) {
+        find_single_ipv6_orport(a_lines, &md->ipv6_addr, &md->ipv6_orport);
+        smartlist_free(a_lines);
+      }
+    }
+
     if ((tok = find_opt_by_keyword(tokens, K_FAMILY))) {
       int i;
       md->family = smartlist_new();
-- 
GitLab