From 815c092b227b06e4053c1dd20a9c3d27789b7bbb Mon Sep 17 00:00:00 2001
From: Nick Mathewson <nickm@torproject.org>
Date: Fri, 2 Sep 2005 20:37:31 +0000
Subject: Make structs for (v2) network-status and its per-router components.
 Add functions to parse them.  Re-do the parsing logic a litt.e.  Change
 signatures in or.h to support new DNS TTL logic.

svn:r4898
---
 src/or/or.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 46 insertions(+), 6 deletions(-)

(limited to 'src/or/or.h')

diff --git a/src/or/or.h b/src/or/or.h
index 2c6220dbb..b976590b8 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -766,6 +766,42 @@ typedef struct running_routers_t {
   smartlist_t *running_routers;
 } running_routers_t;
 
+/** Contents of a network status object */
+typedef struct routerstatus_t {
+  time_t published_on;
+  char nickname[MAX_NICKNAME_LEN+1];
+  char identity_digest[DIGEST_LEN];
+  char descriptor_digest[DIGEST_LEN];
+  uint32_t addr;
+  uint16_t or_port;
+  uint16_t dir_port;
+  unsigned int is_exit:1;
+  unsigned int is_stable:1;
+  unsigned int is_fast:1;
+  unsigned int is_running:1;
+  unsigned int is_named:1;
+  unsigned int is_valid:1;
+} routerstatus_t;
+
+/** Contents of a network status object */
+typedef struct networkstatus_t {
+  time_t published_on;
+
+  char *source_address;
+  uint32_t source_addr;
+  uint16_t source_dirport;
+
+  char fingerprint[DIGEST_LEN];
+  char *contact;
+  crypto_pk_env_t *signing_key;
+  char *client_versions;
+  char *server_versions;
+
+  int binds_names:1;
+
+  smartlist_t *entries;
+} networkstatus_t;
+
 /** Contents of a directory of onion routers. */
 typedef struct {
   /** List of routerinfo_t */
@@ -1483,7 +1519,8 @@ void connection_ap_handshake_socks_reply(connection_t *conn, char *reply,
 void connection_ap_handshake_socks_resolved(connection_t *conn,
                                             int answer_type,
                                             size_t answer_len,
-                                            const char *answer);
+                                            const char *answer,
+                                            int ttl);
 
 int connection_exit_begin_conn(cell_t *cell, circuit_t *circ);
 int connection_exit_begin_resolve(cell_t *cell, circuit_t *circ);
@@ -1504,7 +1541,7 @@ int addressmap_already_mapped(const char *address);
 void addressmap_register(const char *address, char *new_address, time_t expires);
 int client_dns_incr_failures(const char *address);
 void client_dns_clear_failures(const char *address);
-void client_dns_set_addressmap(const char *address, uint32_t val, const char *exitname);
+void client_dns_set_addressmap(const char *address, uint32_t val, const char *exitname, int ttl);
 const char *addressmap_register_virtual_address(int type, char *new_address);
 void addressmap_get_mappings(smartlist_t *sl, time_t min_expires, time_t max_expires);
 
@@ -1963,9 +2000,8 @@ trusted_dir_server_t *router_pick_trusteddirserver(int requireother,
                                                    int fascistfirewall,
                                                    int retry_if_no_servers);
 int all_trusted_directory_servers_down(void);
-struct smartlist_t;
-void routerlist_add_family(struct smartlist_t *sl, routerinfo_t *router);
-void add_nickname_list_to_smartlist(struct smartlist_t *sl, const char *list, int warn_if_down);
+void routerlist_add_family(smartlist_t *sl, routerinfo_t *router);
+void add_nickname_list_to_smartlist(smartlist_t *sl, const char *list, int warn_if_down);
 routerinfo_t *routerlist_find_my_routerinfo(void);
 int exit_policy_implicitly_allows_local_networks(addr_policy_t *policy,
                                                  int warn);
@@ -1981,7 +2017,7 @@ int router_is_unreliable(routerinfo_t *router, int need_uptime, int need_capacit
 routerinfo_t *routerlist_sl_choose_by_bandwidth(smartlist_t *sl);
 routerinfo_t *router_choose_random_node(const char *preferred,
                                         const char *excluded,
-                                        struct smartlist_t *excludedsmartlist,
+                                        smartlist_t *excludedsmartlist,
                                         int need_uptime, int need_bandwidth,
                                         int allow_unverified, int strict);
 routerinfo_t *router_get_by_nickname(const char *nickname);
@@ -1992,6 +2028,8 @@ void router_get_routerlist(routerlist_t **prouterlist);
 time_t routerlist_get_published_time(void);
 void routerlist_free(routerlist_t *routerlist);
 void routerinfo_free(routerinfo_t *router);
+void routerstatus_free(routerstatus_t *routerstatus);
+void networkstatus_free(networkstatus_t *networkstatus);
 void routerlist_free_current(void);
 void free_trusted_dir_servers(void);
 routerinfo_t *routerinfo_copy(const routerinfo_t *router);
@@ -2069,5 +2107,7 @@ int tor_version_as_new_as(const char *platform, const char *cutoff);
 int tor_version_compare(tor_version_t *a, tor_version_t *b);
 void assert_addr_policy_ok(addr_policy_t *t);
 
+networkstatus_t *networkstatus_parse_from_string(const char *s);
+
 #endif
 
-- 
cgit v1.2.3