Commit 815c092b authored by Nick Mathewson's avatar Nick Mathewson 🐘
Browse files

Make structs for (v2) network-status and its per-router components. Add...

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
parent 9bc3d346
Loading
Loading
Loading
Loading
+46 −6
Changes for src/or/or.h: 46 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -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
+23 −0
Changes for src/or/routerlist.c: 23 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -818,6 +818,29 @@ routerlist_free_current(void)
  }
}

/** Free all storage held by the routerstatus object <b>rs</b>. */
void
routerstatus_free(routerstatus_t *rs)
{
  tor_free(rs);
}

/** Free all storage held by the networkstatus object <b>ns</b>. */
void
networkstatus_free(networkstatus_t *ns)
{
  tor_free(ns->source_address);
  tor_free(ns->contact);
  crypto_free_pk_env(ns->signing_key);
  tor_free(ns->client_versions);
  tor_free(ns->server_versions);
  if (ns->entries) {
    SMARTLIST_FOREACH(ns->entries, routerstatus_t *, rs, routerstatus_free(rs));
    smartlist_free(ns->entries);
  }
  tor_free(ns);
}

/** Free all entries in the list of trusted directory servers. */
void
free_trusted_dir_servers(void)
+381 −46

File changed.

Preview size limit exceeded, changes collapsed.