[tor-commits] [tor/master] Split entry and edge_connection_t into their own headers.

nickm at torproject.org nickm at torproject.org
Mon Jun 18 18:18:42 UTC 2018


commit 5d5c442e6ad726382c7b8efc0e999825a783bd9e
Author: Nick Mathewson <nickm at torproject.org>
Date:   Fri Jun 15 10:07:17 2018 -0400

    Split entry and edge_connection_t into their own headers.
---
 src/or/addressmap.c               |   2 +
 src/or/circuitbuild.c             |   2 +
 src/or/circuitlist.c              |   2 +
 src/or/circuituse.c               |   2 +
 src/or/connection.c               |   1 +
 src/or/connection_edge.c          |  26 ++++++
 src/or/connection_edge.h          |   6 +-
 src/or/control.c                  |   2 +
 src/or/directory.c                |   1 +
 src/or/dns.c                      |   3 +
 src/or/dnsserv.c                  |   3 +
 src/or/edge_connection_st.h       |  75 ++++++++++++++++
 src/or/entry_connection_st.h      | 100 ++++++++++++++++++++++
 src/or/hs_client.c                |   2 +
 src/or/hs_common.c                |   2 +
 src/or/hs_service.c               |   2 +
 src/or/include.am                 |   2 +
 src/or/main.c                     |   1 +
 src/or/or.h                       | 174 +-------------------------------------
 src/or/relay.c                    |   2 +
 src/or/rendclient.c               |   2 +
 src/or/rendservice.c              |   2 +
 src/test/fuzz/fuzz_http_connect.c |   2 +
 src/test/test_connection.c        |   3 +
 src/test/test_dns.c               |   2 +
 src/test/test_entryconn.c         |   2 +
 src/test/test_hs_client.c         |   2 +
 src/test/test_oom.c               |   2 +
 src/test/test_relaycell.c         |   2 +
 29 files changed, 256 insertions(+), 173 deletions(-)

diff --git a/src/or/addressmap.c b/src/or/addressmap.c
index 7f861e4d2..9808b7bdd 100644
--- a/src/or/addressmap.c
+++ b/src/or/addressmap.c
@@ -26,6 +26,8 @@
 #include "nodelist.h"
 #include "routerset.h"
 
+#include "entry_connection_st.h"
+
 /** A client-side struct to remember requests to rewrite addresses
  * to new addresses. These structs are stored in the hash table
  * "addressmap" below.
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 3d1c9c1ab..883f93074 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -65,6 +65,8 @@
 #include "routerset.h"
 #include "transports.h"
 
+#include "entry_connection_st.h"
+
 static channel_t * channel_connect_for_circuit(const tor_addr_t *addr,
                                             uint16_t port,
                                             const char *id_digest,
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 45fff7cc1..e0ee28428 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -91,6 +91,8 @@
 
 #include "ht.h"
 
+#include "edge_connection_st.h"
+
 /********* START VARIABLES **********/
 
 /** A global list of all circuits at this hop. */
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 8e007ce92..5494bf94e 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -56,6 +56,8 @@
 #include "router.h"
 #include "routerlist.h"
 
+#include "entry_connection_st.h"
+
 static void circuit_expire_old_circuits_clientside(void);
 static void circuit_increment_failure_count(void);
 
diff --git a/src/or/connection.c b/src/or/connection.c
index 0f6498225..fb16ac7b5 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -113,6 +113,7 @@
 #include <sys/un.h>
 #endif
 
+#include "entry_connection_st.h"
 #include "port_cfg_st.h"
 
 static connection_t *connection_listener_new(
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 046369af6..4bd50398b 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -97,6 +97,8 @@
 #include "routerset.h"
 #include "circuitbuild.h"
 
+#include "entry_connection_st.h"
+
 #ifdef HAVE_LINUX_TYPES_H
 #include <linux/types.h>
 #endif
@@ -137,6 +139,30 @@ static int connection_exit_connect_dir(edge_connection_t *exitconn);
 static int consider_plaintext_ports(entry_connection_t *conn, uint16_t port);
 static int connection_ap_supports_optimistic_data(const entry_connection_t *);
 
+/** Convert a connection_t* to an edge_connection_t*; assert if the cast is
+ * invalid. */
+edge_connection_t *
+TO_EDGE_CONN(connection_t *c)
+{
+  tor_assert(c->magic == EDGE_CONNECTION_MAGIC ||
+             c->magic == ENTRY_CONNECTION_MAGIC);
+  return DOWNCAST(edge_connection_t, c);
+}
+
+entry_connection_t *
+TO_ENTRY_CONN(connection_t *c)
+{
+  tor_assert(c->magic == ENTRY_CONNECTION_MAGIC);
+  return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, edge_.base_);
+}
+
+entry_connection_t *
+EDGE_TO_ENTRY_CONN(edge_connection_t *c)
+{
+  tor_assert(c->base_.magic == ENTRY_CONNECTION_MAGIC);
+  return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, edge_);
+}
+
 /** An AP stream has failed/finished. If it hasn't already sent back
  * a socks reply, send one now (based on endreason). Also set
  * has_sent_end to 1, and mark the conn.
diff --git a/src/or/connection_edge.h b/src/or/connection_edge.h
index c6583d384..27d2c8614 100644
--- a/src/or/connection_edge.h
+++ b/src/or/connection_edge.h
@@ -14,7 +14,11 @@
 
 #include "testsupport.h"
 
-#define connection_mark_unattached_ap(conn, endreason) \
+edge_connection_t *TO_EDGE_CONN(connection_t *);
+entry_connection_t *TO_ENTRY_CONN(connection_t *);
+entry_connection_t *EDGE_TO_ENTRY_CONN(edge_connection_t *);
+
+#define connection_mark_unattached_ap(conn, endreason)                  \
   connection_mark_unattached_ap_((conn), (endreason), __LINE__, SHORT_FILE__)
 
 MOCK_DECL(void,connection_mark_unattached_ap_,
diff --git a/src/or/control.c b/src/or/control.c
index 0d637dce7..7efa6d73b 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -81,6 +81,8 @@
 #include "routerparse.h"
 #include "shared_random_client.h"
 
+#include "entry_connection_st.h"
+
 #ifndef _WIN32
 #include <pwd.h>
 #include <sys/resource.h>
diff --git a/src/or/directory.c b/src/or/directory.c
index a65f1fb14..7321a97fc 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -54,6 +54,7 @@
 #include "dirauth/shared_random.h"
 
 #include "dir_server_st.h"
+#include "entry_connection_st.h"
 
 /**
  * \file directory.c
diff --git a/src/or/dns.c b/src/or/dns.c
index ba734ed90..422751553 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -64,6 +64,9 @@
 #include "router.h"
 #include "ht.h"
 #include "sandbox.h"
+
+#include "edge_connection_st.h"
+
 #include <event2/event.h>
 #include <event2/dns.h>
 
diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c
index 7e344deea..39c96ee00 100644
--- a/src/or/dnsserv.c
+++ b/src/or/dnsserv.c
@@ -29,6 +29,9 @@
 #include "control.h"
 #include "main.h"
 #include "policies.h"
+
+#include "entry_connection_st.h"
+
 #include <event2/dns.h>
 #include <event2/dns_compat.h>
 /* XXXX this implies we want an improved evdns  */
diff --git a/src/or/edge_connection_st.h b/src/or/edge_connection_st.h
new file mode 100644
index 000000000..3cffdea32
--- /dev/null
+++ b/src/or/edge_connection_st.h
@@ -0,0 +1,75 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2017, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef EDGE_CONNECTION_ST_H
+#define EDGE_CONNECTION_ST_H
+
+#include "or.h"
+
+/** Subtype of connection_t for an "edge connection" -- that is, an entry (ap)
+ * connection, or an exit. */
+struct edge_connection_t {
+  connection_t base_;
+
+  struct edge_connection_t *next_stream; /**< Points to the next stream at this
+                                          * edge, if any */
+  int package_window; /**< How many more relay cells can I send into the
+                       * circuit? */
+  int deliver_window; /**< How many more relay cells can end at me? */
+
+  struct circuit_t *on_circuit; /**< The circuit (if any) that this edge
+                                 * connection is using. */
+
+  /** A pointer to which node in the circ this conn exits at.  Set for AP
+   * connections and for hidden service exit connections. */
+  struct crypt_path_t *cpath_layer;
+  /** What rendezvous service are we querying for (if an AP) or providing (if
+   * an exit)? */
+  rend_data_t *rend_data;
+
+  /* Hidden service connection identifier for edge connections. Used by the HS
+   * client-side code to identify client SOCKS connections and by the
+   * service-side code to match HS circuits with their streams. */
+  struct hs_ident_edge_conn_t *hs_ident;
+
+  uint32_t address_ttl; /**< TTL for address-to-addr mapping on exit
+                         * connection.  Exit connections only. */
+  uint32_t begincell_flags; /** Flags sent or received in the BEGIN cell
+                             * for this connection */
+
+  streamid_t stream_id; /**< The stream ID used for this edge connection on its
+                         * circuit */
+
+  /** The reason why this connection is closing; passed to the controller. */
+  uint16_t end_reason;
+
+  /** Bytes read since last call to control_event_stream_bandwidth_used() */
+  uint32_t n_read;
+
+  /** Bytes written since last call to control_event_stream_bandwidth_used() */
+  uint32_t n_written;
+
+  /** True iff this connection is for a DNS request only. */
+  unsigned int is_dns_request:1;
+  /** True iff this connection is for a PTR DNS request. (exit only) */
+  unsigned int is_reverse_dns_lookup:1;
+
+  unsigned int edge_has_sent_end:1; /**< For debugging; only used on edge
+                         * connections.  Set once we've set the stream end,
+                         * and check in connection_about_to_close_connection().
+                         */
+  /** True iff we've blocked reading until the circuit has fewer queued
+   * cells. */
+  unsigned int edge_blocked_on_circ:1;
+
+  /** Unique ID for directory requests; this used to be in connection_t, but
+   * that's going away and being used on channels instead.  We still tag
+   * edge connections with dirreq_id from circuits, so it's copied here. */
+  uint64_t dirreq_id;
+};
+
+#endif
+
diff --git a/src/or/entry_connection_st.h b/src/or/entry_connection_st.h
new file mode 100644
index 000000000..c3b1ad2ab
--- /dev/null
+++ b/src/or/entry_connection_st.h
@@ -0,0 +1,100 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2017, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef ENTRY_CONNECTION_ST_H
+#define ENTRY_CONNECTION_ST_H
+
+#include "edge_connection_st.h"
+
+/** Subtype of edge_connection_t for an "entry connection" -- that is, a SOCKS
+ * connection, a DNS request, a TransPort connection or a NATD connection */
+struct entry_connection_t {
+  struct edge_connection_t edge_;
+
+  /** Nickname of planned exit node -- used with .exit support. */
+  /* XXX prop220: we need to make chosen_exit_name able to encode Ed IDs too.
+   * That's logically part of the UI parts for prop220 though. */
+  char *chosen_exit_name;
+
+  socks_request_t *socks_request; /**< SOCKS structure describing request (AP
+                                   * only.) */
+
+  /* === Isolation related, AP only. === */
+  entry_port_cfg_t entry_cfg;
+  /** AP only: The newnym epoch in which we created this connection. */
+  unsigned nym_epoch;
+
+  /** AP only: The original requested address before we rewrote it. */
+  char *original_dest_address;
+  /* Other fields to isolate on already exist.  The ClientAddr is addr.  The
+     ClientProtocol is a combination of type and socks_request->
+     socks_version.  SocksAuth is socks_request->username/password.
+     DestAddr is in socks_request->address. */
+
+  /** Number of times we've reassigned this application connection to
+   * a new circuit. We keep track because the timeout is longer if we've
+   * already retried several times. */
+  uint8_t num_socks_retries;
+
+  /** For AP connections only: buffer for data that we have sent
+   * optimistically, which we might need to re-send if we have to
+   * retry this connection. */
+  struct buf_t *pending_optimistic_data;
+  /* For AP connections only: buffer for data that we previously sent
+  * optimistically which we are currently re-sending as we retry this
+  * connection. */
+  struct buf_t *sending_optimistic_data;
+
+  /** If this is a DNSPort connection, this field holds the pending DNS
+   * request that we're going to try to answer.  */
+  struct evdns_server_request *dns_server_request;
+
+#define DEBUGGING_17659
+
+#ifdef DEBUGGING_17659
+  uint16_t marked_pending_circ_line;
+  const char *marked_pending_circ_file;
+#endif
+
+#define NUM_CIRCUITS_LAUNCHED_THRESHOLD 10
+  /** Number of times we've launched a circuit to handle this stream. If
+    * it gets too high, that could indicate an inconsistency between our
+    * "launch a circuit to handle this stream" logic and our "attach our
+    * stream to one of the available circuits" logic. */
+  unsigned int num_circuits_launched:4;
+
+  /** True iff this stream must attach to a one-hop circuit (e.g. for
+   * begin_dir). */
+  unsigned int want_onehop:1;
+  /** True iff this stream should use a BEGIN_DIR relay command to establish
+   * itself rather than BEGIN (either via onehop or via a whole circuit). */
+  unsigned int use_begindir:1;
+
+  /** For AP connections only. If 1, and we fail to reach the chosen exit,
+   * stop requiring it. */
+  unsigned int chosen_exit_optional:1;
+  /** For AP connections only. If non-zero, this exit node was picked as
+   * a result of the TrackHostExit, and the value decrements every time
+   * we fail to complete a circuit to our chosen exit -- if it reaches
+   * zero, abandon the associated mapaddress. */
+  unsigned int chosen_exit_retries:3;
+
+  /** True iff this is an AP connection that came from a transparent or
+   * NATd connection */
+  unsigned int is_transparent_ap:1;
+
+  /** For AP connections only: Set if this connection's target exit node
+   * allows optimistic data (that is, data sent on this stream before
+   * the exit has sent a CONNECTED cell) and we have chosen to use it.
+   */
+  unsigned int may_use_optimistic_data : 1;
+};
+
+/** Cast a entry_connection_t subtype pointer to a edge_connection_t **/
+#define ENTRY_TO_EDGE_CONN(c) (&(((c))->edge_))
+
+#endif
+
diff --git a/src/or/hs_client.c b/src/or/hs_client.c
index 26e8785d9..8c04026a7 100644
--- a/src/or/hs_client.c
+++ b/src/or/hs_client.c
@@ -35,6 +35,8 @@
 #include "router.h"
 #include "routerset.h"
 
+#include "entry_connection_st.h"
+
 /* Return a human-readable string for the client fetch status code. */
 static const char *
 fetch_status_to_string(hs_client_fetch_status_t status)
diff --git a/src/or/hs_common.c b/src/or/hs_common.c
index 3081ad216..33c09b53f 100644
--- a/src/or/hs_common.c
+++ b/src/or/hs_common.c
@@ -33,6 +33,8 @@
 #include "shared_random_client.h"
 #include "dirauth/shared_random_state.h"
 
+#include "edge_connection_st.h"
+
 /* Trunnel */
 #include "ed25519_cert.h"
 
diff --git a/src/or/hs_service.c b/src/or/hs_service.c
index f1f26954a..44ee7bb66 100644
--- a/src/or/hs_service.c
+++ b/src/or/hs_service.c
@@ -39,6 +39,8 @@
 #include "hs_service.h"
 #include "hs_stats.h"
 
+#include "edge_connection_st.h"
+
 /* Trunnel */
 #include "ed25519_cert.h"
 #include "hs/cell_common.h"
diff --git a/src/or/include.am b/src/or/include.am
index b6e8e6daf..2c5c759ca 100644
--- a/src/or/include.am
+++ b/src/or/include.am
@@ -211,6 +211,8 @@ ORHEADERS = \
 	src/or/dns_structs.h				\
 	src/or/dnsserv.h				\
 	src/or/dos.h					\
+	src/or/edge_connection_st.h			\
+	src/or/entry_connection_st.h			\
 	src/or/entry_port_cfg_st.h			\
 	src/or/ext_orport.h				\
 	src/or/fallback_dirs.inc			\
diff --git a/src/or/main.c b/src/or/main.c
index 1f6d16a19..3bbd0a1d4 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -122,6 +122,7 @@
 #include "dirauth/mode.h"
 #include "dirauth/shared_random.h"
 
+#include "entry_connection_st.h"
 #include "port_cfg_st.h"
 
 #ifdef HAVE_SYSTEMD
diff --git a/src/or/or.h b/src/or/or.h
index bf2efd147..b592484a5 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -1639,151 +1639,8 @@ typedef struct or_connection_t {
   uint64_t bytes_xmitted, bytes_xmitted_by_tls;
 } or_connection_t;
 
-/** Subtype of connection_t for an "edge connection" -- that is, an entry (ap)
- * connection, or an exit. */
-typedef struct edge_connection_t {
-  connection_t base_;
-
-  struct edge_connection_t *next_stream; /**< Points to the next stream at this
-                                          * edge, if any */
-  int package_window; /**< How many more relay cells can I send into the
-                       * circuit? */
-  int deliver_window; /**< How many more relay cells can end at me? */
-
-  struct circuit_t *on_circuit; /**< The circuit (if any) that this edge
-                                 * connection is using. */
-
-  /** A pointer to which node in the circ this conn exits at.  Set for AP
-   * connections and for hidden service exit connections. */
-  struct crypt_path_t *cpath_layer;
-  /** What rendezvous service are we querying for (if an AP) or providing (if
-   * an exit)? */
-  rend_data_t *rend_data;
-
-  /* Hidden service connection identifier for edge connections. Used by the HS
-   * client-side code to identify client SOCKS connections and by the
-   * service-side code to match HS circuits with their streams. */
-  struct hs_ident_edge_conn_t *hs_ident;
-
-  uint32_t address_ttl; /**< TTL for address-to-addr mapping on exit
-                         * connection.  Exit connections only. */
-  uint32_t begincell_flags; /** Flags sent or received in the BEGIN cell
-                             * for this connection */
-
-  streamid_t stream_id; /**< The stream ID used for this edge connection on its
-                         * circuit */
-
-  /** The reason why this connection is closing; passed to the controller. */
-  uint16_t end_reason;
-
-  /** Bytes read since last call to control_event_stream_bandwidth_used() */
-  uint32_t n_read;
-
-  /** Bytes written since last call to control_event_stream_bandwidth_used() */
-  uint32_t n_written;
-
-  /** True iff this connection is for a DNS request only. */
-  unsigned int is_dns_request:1;
-  /** True iff this connection is for a PTR DNS request. (exit only) */
-  unsigned int is_reverse_dns_lookup:1;
-
-  unsigned int edge_has_sent_end:1; /**< For debugging; only used on edge
-                         * connections.  Set once we've set the stream end,
-                         * and check in connection_about_to_close_connection().
-                         */
-  /** True iff we've blocked reading until the circuit has fewer queued
-   * cells. */
-  unsigned int edge_blocked_on_circ:1;
-
-  /** Unique ID for directory requests; this used to be in connection_t, but
-   * that's going away and being used on channels instead.  We still tag
-   * edge connections with dirreq_id from circuits, so it's copied here. */
-  uint64_t dirreq_id;
-} edge_connection_t;
-
-/** Subtype of edge_connection_t for an "entry connection" -- that is, a SOCKS
- * connection, a DNS request, a TransPort connection or a NATD connection */
-typedef struct entry_connection_t {
-  edge_connection_t edge_;
-
-  /** Nickname of planned exit node -- used with .exit support. */
-  /* XXX prop220: we need to make chosen_exit_name able to encode Ed IDs too.
-   * That's logically part of the UI parts for prop220 though. */
-  char *chosen_exit_name;
-
-  socks_request_t *socks_request; /**< SOCKS structure describing request (AP
-                                   * only.) */
-
-  /* === Isolation related, AP only. === */
-  entry_port_cfg_t entry_cfg;
-  /** AP only: The newnym epoch in which we created this connection. */
-  unsigned nym_epoch;
-
-  /** AP only: The original requested address before we rewrote it. */
-  char *original_dest_address;
-  /* Other fields to isolate on already exist.  The ClientAddr is addr.  The
-     ClientProtocol is a combination of type and socks_request->
-     socks_version.  SocksAuth is socks_request->username/password.
-     DestAddr is in socks_request->address. */
-
-  /** Number of times we've reassigned this application connection to
-   * a new circuit. We keep track because the timeout is longer if we've
-   * already retried several times. */
-  uint8_t num_socks_retries;
-
-  /** For AP connections only: buffer for data that we have sent
-   * optimistically, which we might need to re-send if we have to
-   * retry this connection. */
-  struct buf_t *pending_optimistic_data;
-  /* For AP connections only: buffer for data that we previously sent
-  * optimistically which we are currently re-sending as we retry this
-  * connection. */
-  struct buf_t *sending_optimistic_data;
-
-  /** If this is a DNSPort connection, this field holds the pending DNS
-   * request that we're going to try to answer.  */
-  struct evdns_server_request *dns_server_request;
-
-#define DEBUGGING_17659
-
-#ifdef DEBUGGING_17659
-  uint16_t marked_pending_circ_line;
-  const char *marked_pending_circ_file;
-#endif
-
-#define NUM_CIRCUITS_LAUNCHED_THRESHOLD 10
-  /** Number of times we've launched a circuit to handle this stream. If
-    * it gets too high, that could indicate an inconsistency between our
-    * "launch a circuit to handle this stream" logic and our "attach our
-    * stream to one of the available circuits" logic. */
-  unsigned int num_circuits_launched:4;
-
-  /** True iff this stream must attach to a one-hop circuit (e.g. for
-   * begin_dir). */
-  unsigned int want_onehop:1;
-  /** True iff this stream should use a BEGIN_DIR relay command to establish
-   * itself rather than BEGIN (either via onehop or via a whole circuit). */
-  unsigned int use_begindir:1;
-
-  /** For AP connections only. If 1, and we fail to reach the chosen exit,
-   * stop requiring it. */
-  unsigned int chosen_exit_optional:1;
-  /** For AP connections only. If non-zero, this exit node was picked as
-   * a result of the TrackHostExit, and the value decrements every time
-   * we fail to complete a circuit to our chosen exit -- if it reaches
-   * zero, abandon the associated mapaddress. */
-  unsigned int chosen_exit_retries:3;
-
-  /** True iff this is an AP connection that came from a transparent or
-   * NATd connection */
-  unsigned int is_transparent_ap:1;
-
-  /** For AP connections only: Set if this connection's target exit node
-   * allows optimistic data (that is, data sent on this stream before
-   * the exit has sent a CONNECTED cell) and we have chosen to use it.
-   */
-  unsigned int may_use_optimistic_data : 1;
-} entry_connection_t;
+typedef struct edge_connection_t edge_connection_t;
+typedef struct entry_connection_t entry_connection_t;
 
 /** Subtype of connection_t for an "directory connection" -- that is, an HTTP
  * connection to retrieve or serve directory material. */
@@ -1873,8 +1730,6 @@ typedef struct control_connection_t {
 /** Cast a connection_t subtype pointer to a connection_t **/
 #define TO_CONN(c) (&(((c)->base_)))
 
-/** Cast a entry_connection_t subtype pointer to a edge_connection_t **/
-#define ENTRY_TO_EDGE_CONN(c) (&(((c))->edge_))
 /** Cast a entry_connection_t subtype pointer to a connection_t **/
 #define ENTRY_TO_CONN(c) (TO_CONN(ENTRY_TO_EDGE_CONN(c)))
 
@@ -1884,15 +1739,6 @@ static or_connection_t *TO_OR_CONN(connection_t *);
 /** Convert a connection_t* to a dir_connection_t*; assert if the cast is
  * invalid. */
 static dir_connection_t *TO_DIR_CONN(connection_t *);
-/** Convert a connection_t* to an edge_connection_t*; assert if the cast is
- * invalid. */
-static edge_connection_t *TO_EDGE_CONN(connection_t *);
-/** Convert a connection_t* to an entry_connection_t*; assert if the cast is
- * invalid. */
-static entry_connection_t *TO_ENTRY_CONN(connection_t *);
-/** Convert a edge_connection_t* to an entry_connection_t*; assert if the cast
- * is invalid. */
-static entry_connection_t *EDGE_TO_ENTRY_CONN(edge_connection_t *);
 /** Convert a connection_t* to an control_connection_t*; assert if the cast is
  * invalid. */
 static control_connection_t *TO_CONTROL_CONN(connection_t *);
@@ -1910,22 +1756,6 @@ static inline dir_connection_t *TO_DIR_CONN(connection_t *c)
   tor_assert(c->magic == DIR_CONNECTION_MAGIC);
   return DOWNCAST(dir_connection_t, c);
 }
-static inline edge_connection_t *TO_EDGE_CONN(connection_t *c)
-{
-  tor_assert(c->magic == EDGE_CONNECTION_MAGIC ||
-             c->magic == ENTRY_CONNECTION_MAGIC);
-  return DOWNCAST(edge_connection_t, c);
-}
-static inline entry_connection_t *TO_ENTRY_CONN(connection_t *c)
-{
-  tor_assert(c->magic == ENTRY_CONNECTION_MAGIC);
-  return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, edge_.base_);
-}
-static inline entry_connection_t *EDGE_TO_ENTRY_CONN(edge_connection_t *c)
-{
-  tor_assert(c->base_.magic == ENTRY_CONNECTION_MAGIC);
-  return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, edge_);
-}
 static inline control_connection_t *TO_CONTROL_CONN(connection_t *c)
 {
   tor_assert(c->magic == CONTROL_CONNECTION_MAGIC);
diff --git a/src/or/relay.c b/src/or/relay.c
index 50f59d6b9..757613e9d 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -81,6 +81,8 @@
 #include "scheduler.h"
 #include "rephist.h"
 
+#include "entry_connection_st.h"
+
 static edge_connection_t *relay_lookup_conn(circuit_t *circ, cell_t *cell,
                                             cell_direction_t cell_direction,
                                             crypt_path_t *layer_hint);
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index 7ef12a4fa..c153862e6 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -33,6 +33,8 @@
 #include "routerlist.h"
 #include "routerset.h"
 
+#include "entry_connection_st.h"
+
 static extend_info_t *rend_client_get_random_intro_impl(
                           const rend_cache_entry_t *rend_query,
                           const int strict, const int warnings);
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index 92c323b10..4d9309e49 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -36,6 +36,8 @@
 #include "routerparse.h"
 #include "routerset.h"
 
+#include "edge_connection_st.h"
+
 struct rend_service_t;
 static origin_circuit_t *find_intro_circuit(rend_intro_point_t *intro,
                                             const char *pk_digest);
diff --git a/src/test/fuzz/fuzz_http_connect.c b/src/test/fuzz/fuzz_http_connect.c
index dc674070b..4b1ea8c72 100644
--- a/src/test/fuzz/fuzz_http_connect.c
+++ b/src/test/fuzz/fuzz_http_connect.c
@@ -15,6 +15,8 @@
 #include "proto_socks.h"
 #include "torlog.h"
 
+#include "entry_connection_st.h"
+
 #include "fuzzing.h"
 
 static void
diff --git a/src/test/test_connection.c b/src/test/test_connection.c
index dc0f6860d..05c4bb7f1 100644
--- a/src/test/test_connection.c
+++ b/src/test/test_connection.c
@@ -11,6 +11,7 @@
 #include "test.h"
 
 #include "connection.h"
+#include "connection_edge.h"
 #include "hs_common.h"
 #include "main.h"
 #include "microdesc.h"
@@ -23,6 +24,8 @@
 #include "test_connection.h"
 #include "test_helpers.h"
 
+#include "entry_connection_st.h"
+
 static void * test_conn_get_basic_setup(const struct testcase_t *tc);
 static int test_conn_get_basic_teardown(const struct testcase_t *tc,
                                         void *arg);
diff --git a/src/test/test_dns.c b/src/test/test_dns.c
index 1fee01d2c..c472b9790 100644
--- a/src/test/test_dns.c
+++ b/src/test/test_dns.c
@@ -10,6 +10,8 @@
 #include "connection.h"
 #include "router.h"
 
+#include "edge_connection_st.h"
+
 #define NS_MODULE dns
 
 #define NS_SUBMODULE clip_ttl
diff --git a/src/test/test_entryconn.c b/src/test/test_entryconn.c
index 9d8a072c7..ec8d7196e 100644
--- a/src/test/test_entryconn.c
+++ b/src/test/test_entryconn.c
@@ -19,6 +19,8 @@
 #include "hs_cache.h"
 #include "rendcache.h"
 
+#include "entry_connection_st.h"
+
 static void *
 entryconn_rewrite_setup(const struct testcase_t *tc)
 {
diff --git a/src/test/test_hs_client.c b/src/test/test_hs_client.c
index 50dca588e..0828364e8 100644
--- a/src/test/test_hs_client.c
+++ b/src/test/test_hs_client.c
@@ -37,6 +37,8 @@
 #include "connection_edge.h"
 #include "networkstatus.h"
 
+#include "entry_connection_st.h"
+
 static int
 mock_connection_ap_handshake_send_begin(entry_connection_t *ap_conn)
 {
diff --git a/src/test/test_oom.c b/src/test/test_oom.c
index abf889645..98935fe45 100644
--- a/src/test/test_oom.c
+++ b/src/test/test_oom.c
@@ -18,6 +18,8 @@
 #include "test.h"
 #include "test_helpers.h"
 
+#include "entry_connection_st.h"
+
 /* small replacement mock for circuit_mark_for_close_ to avoid doing all
  * the other bookkeeping that comes with marking circuits. */
 static void
diff --git a/src/test/test_relaycell.c b/src/test/test_relaycell.c
index 841174982..b4cb9d4bb 100644
--- a/src/test/test_relaycell.c
+++ b/src/test/test_relaycell.c
@@ -16,6 +16,8 @@
 #include "relay.h"
 #include "test.h"
 
+#include "entry_connection_st.h"
+
 static int srm_ncalls;
 static entry_connection_t *srm_conn;
 static int srm_atype;





More information about the tor-commits mailing list