[tor-commits] [tor/master] Extract all the "am I a server" functions from router.c

nickm at torproject.org nickm at torproject.org
Wed Sep 26 13:52:22 UTC 2018


commit fcd0f76134c2e1e420b1379906955d41e8a6df66
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Sep 25 16:00:50 2018 -0400

    Extract all the "am I a server" functions from router.c
---
 src/app/config/config.c              |  1 +
 src/app/config/statefile.c           |  1 +
 src/app/main/main.c                  |  1 +
 src/core/include.am                  |  2 +
 src/core/mainloop/connection.c       |  1 +
 src/core/mainloop/mainloop.c         |  1 +
 src/core/or/channelpadding.c         |  1 +
 src/core/or/channeltls.c             |  1 +
 src/core/or/circuitbuild.c           |  1 +
 src/core/or/circuituse.c             |  1 +
 src/core/or/command.c                |  1 +
 src/core/or/connection_edge.c        |  1 +
 src/core/or/connection_or.c          |  1 +
 src/core/or/dos.c                    |  2 +-
 src/core/or/policies.c               |  1 +
 src/core/or/status.c                 |  1 +
 src/feature/control/control.c        |  1 +
 src/feature/dircache/dircache.c      |  2 +-
 src/feature/dircache/dirserv.c       |  1 +
 src/feature/dirclient/dirclient.c    |  1 +
 src/feature/dirclient/dlstatus.c     |  2 +-
 src/feature/nodelist/authcert.c      |  2 +-
 src/feature/nodelist/networkstatus.c |  2 +-
 src/feature/nodelist/node_select.c   |  1 +
 src/feature/nodelist/routerlist.c    |  2 +-
 src/feature/relay/dns.c              |  1 +
 src/feature/relay/router.c           | 70 +------------------------------
 src/feature/relay/router.h           |  7 +---
 src/feature/relay/routerkeys.c       |  1 +
 src/feature/relay/routermode.c       | 80 ++++++++++++++++++++++++++++++++++++
 src/feature/relay/routermode.h       | 24 +++++++++++
 src/feature/stats/rephist.c          |  2 +-
 src/test/test_config.c               |  1 +
 src/test/test_dir.c                  |  1 +
 src/test/test_status.c               |  1 +
 35 files changed, 139 insertions(+), 81 deletions(-)

diff --git a/src/app/config/config.c b/src/app/config/config.c
index 68139a997..65899b640 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -106,6 +106,7 @@
 #include "feature/hs/hs_config.h"
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "lib/sandbox/sandbox.h"
 #include "feature/nodelist/dirlist.h"
 #include "feature/nodelist/routerset.h"
diff --git a/src/app/config/statefile.c b/src/app/config/statefile.c
index 208189db4..510b8964b 100644
--- a/src/app/config/statefile.c
+++ b/src/app/config/statefile.c
@@ -40,6 +40,7 @@
 #include "feature/hibernate/hibernate.h"
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "lib/sandbox/sandbox.h"
 #include "app/config/statefile.h"
 #include "lib/encoding/confline.h"
diff --git a/src/app/main/main.c b/src/app/main/main.c
index c6d779275..6c7312f67 100644
--- a/src/app/main/main.c
+++ b/src/app/main/main.c
@@ -35,6 +35,7 @@
 #include "feature/dirauth/bwauth.h"
 #include "feature/dirauth/process_descs.h"
 #include "feature/relay/dns.h"
+#include "feature/relay/routermode.h"
 #include "feature/client/entrynodes.h"
 #include "feature/stats/geoip.h"
 #include "feature/hibernate/hibernate.h"
diff --git a/src/core/include.am b/src/core/include.am
index abbf89f69..ae37bef99 100644
--- a/src/core/include.am
+++ b/src/core/include.am
@@ -105,6 +105,7 @@ LIBTOR_APP_A_SOURCES = 				\
 	src/feature/relay/onion_queue.c		\
 	src/feature/relay/router.c		\
 	src/feature/relay/routerkeys.c		\
+	src/feature/relay/routermode.c		\
 	src/feature/relay/selftest.c		\
 	src/feature/rend/rendcache.c		\
 	src/feature/rend/rendclient.c		\
@@ -326,6 +327,7 @@ noinst_HEADERS +=					\
 	src/feature/relay/onion_queue.h			\
 	src/feature/relay/router.h			\
 	src/feature/relay/routerkeys.h			\
+	src/feature/relay/routermode.h			\
 	src/feature/relay/selftest.h			\
 	src/feature/rend/rend_authorized_client_st.h	\
 	src/feature/rend/rend_encoded_v2_service_descriptor_st.h	\
diff --git a/src/core/mainloop/connection.c b/src/core/mainloop/connection.c
index b858b94cd..699e7f710 100644
--- a/src/core/mainloop/connection.c
+++ b/src/core/mainloop/connection.c
@@ -81,6 +81,7 @@
 #include "feature/dircommon/directory.h"
 #include "feature/dircache/dirserv.h"
 #include "feature/relay/dns.h"
+#include "feature/relay/routermode.h"
 #include "feature/client/dnsserv.h"
 #include "core/or/dos.h"
 #include "feature/client/entrynodes.h"
diff --git a/src/core/mainloop/mainloop.c b/src/core/mainloop/mainloop.c
index 6d60b779b..fb405817d 100644
--- a/src/core/mainloop/mainloop.c
+++ b/src/core/mainloop/mainloop.c
@@ -92,6 +92,7 @@
 #include "feature/rend/rendservice.h"
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/relay/routerkeys.h"
 #include "feature/relay/selftest.h"
 #include "feature/nodelist/routerlist.h"
diff --git a/src/core/or/channelpadding.c b/src/core/or/channelpadding.c
index 6a38d13e3..db34f0f02 100644
--- a/src/core/or/channelpadding.c
+++ b/src/core/or/channelpadding.c
@@ -20,6 +20,7 @@
 #include "core/mainloop/mainloop.h"
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "lib/time/compat_time.h"
 #include "feature/rend/rendservice.h"
 #include "lib/evloop/timers.h"
diff --git a/src/core/or/channeltls.c b/src/core/or/channeltls.c
index c81a00b49..883acacf3 100644
--- a/src/core/or/channeltls.c
+++ b/src/core/or/channeltls.c
@@ -53,6 +53,7 @@
 #include "core/or/relay.h"
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/nodelist/dirlist.h"
 #include "core/or/scheduler.h"
 #include "feature/nodelist/torcert.h"
diff --git a/src/core/or/circuitbuild.c b/src/core/or/circuitbuild.c
index b77a88f5f..f4e0776be 100644
--- a/src/core/or/circuitbuild.c
+++ b/src/core/or/circuitbuild.c
@@ -61,6 +61,7 @@
 #include "feature/rend/rendcommon.h"
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/relay/selftest.h"
 #include "feature/nodelist/node_select.h"
 #include "feature/nodelist/routerlist.h"
diff --git a/src/core/or/circuituse.c b/src/core/or/circuituse.c
index f5919de5c..34b51a502 100644
--- a/src/core/or/circuituse.c
+++ b/src/core/or/circuituse.c
@@ -55,6 +55,7 @@
 #include "feature/rend/rendservice.h"
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/relay/selftest.h"
 #include "feature/nodelist/routerlist.h"
 #include "lib/math/fp.h"
diff --git a/src/core/or/command.c b/src/core/or/command.c
index f93eb8d85..9e19d28c7 100644
--- a/src/core/or/command.c
+++ b/src/core/or/command.c
@@ -55,6 +55,7 @@
 #include "feature/stats/rephist.h"
 #include "core/or/relay.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/nodelist/routerlist.h"
 
 #include "core/or/cell_st.h"
diff --git a/src/core/or/connection_edge.c b/src/core/or/connection_edge.c
index daf978b99..6dc0814b1 100644
--- a/src/core/or/connection_edge.c
+++ b/src/core/or/connection_edge.c
@@ -93,6 +93,7 @@
 #include "feature/rend/rendservice.h"
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/nodelist/routerlist.h"
 #include "feature/nodelist/routerset.h"
 #include "core/or/circuitbuild.h"
diff --git a/src/core/or/connection_or.c b/src/core/or/connection_or.c
index 7902b6c59..4a724a24d 100644
--- a/src/core/or/connection_or.c
+++ b/src/core/or/connection_or.c
@@ -56,6 +56,7 @@
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
 #include "feature/relay/routerkeys.h"
+#include "feature/relay/routermode.h"
 #include "feature/nodelist/dirlist.h"
 #include "feature/nodelist/routerlist.h"
 #include "feature/relay/ext_orport.h"
diff --git a/src/core/or/dos.c b/src/core/or/dos.c
index a75c2070d..c59e2f636 100644
--- a/src/core/or/dos.c
+++ b/src/core/or/dos.c
@@ -19,7 +19,7 @@
 #include "feature/nodelist/networkstatus.h"
 #include "feature/nodelist/nodelist.h"
 #include "core/or/relay.h"
-#include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 
 #include "core/or/dos.h"
 
diff --git a/src/core/or/policies.c b/src/core/or/policies.c
index 3443a1710..fc359627b 100644
--- a/src/core/or/policies.c
+++ b/src/core/or/policies.c
@@ -25,6 +25,7 @@
 #include "feature/nodelist/nodelist.h"
 #include "core/or/policies.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/nodelist/routerparse.h"
 #include "feature/stats/geoip.h"
 #include "ht.h"
diff --git a/src/core/or/status.c b/src/core/or/status.c
index 45b8217d9..d8a9da0a5 100644
--- a/src/core/or/status.c
+++ b/src/core/or/status.c
@@ -21,6 +21,7 @@
 #include "feature/nodelist/nodelist.h"
 #include "core/or/relay.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "core/or/circuitlist.h"
 #include "core/mainloop/mainloop.h"
 #include "feature/stats/rephist.h"
diff --git a/src/feature/control/control.c b/src/feature/control/control.c
index c1fb76812..43ec0bd8b 100644
--- a/src/feature/control/control.c
+++ b/src/feature/control/control.c
@@ -81,6 +81,7 @@
 #include "feature/rend/rendservice.h"
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/relay/selftest.h"
 #include "feature/nodelist/authcert.h"
 #include "feature/nodelist/dirlist.h"
diff --git a/src/feature/dircache/dircache.c b/src/feature/dircache/dircache.c
index c58512814..76bde0b78 100644
--- a/src/feature/dircache/dircache.c
+++ b/src/feature/dircache/dircache.c
@@ -23,7 +23,7 @@
 #include "feature/nodelist/authcert.h"
 #include "feature/nodelist/networkstatus.h"
 #include "feature/nodelist/routerlist.h"
-#include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/rend/rendcache.h"
 #include "feature/stats/geoip.h"
 #include "feature/stats/rephist.h"
diff --git a/src/feature/dircache/dirserv.c b/src/feature/dircache/dirserv.c
index 65c3d6d91..4fa3cd7f9 100644
--- a/src/feature/dircache/dirserv.c
+++ b/src/feature/dircache/dirserv.c
@@ -15,6 +15,7 @@
 #include "feature/nodelist/microdesc.h"
 #include "feature/nodelist/routerlist.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/stats/rephist.h"
 
 #include "feature/dircache/cached_dir_st.h"
diff --git a/src/feature/dirclient/dirclient.c b/src/feature/dirclient/dirclient.c
index bd6800c74..16d2e03b4 100644
--- a/src/feature/dirclient/dirclient.c
+++ b/src/feature/dirclient/dirclient.c
@@ -35,6 +35,7 @@
 #include "feature/nodelist/nodelist.h"
 #include "feature/nodelist/routerlist.h"
 #include "feature/nodelist/routerset.h"
+#include "feature/relay/routermode.h"
 #include "feature/relay/selftest.h"
 #include "feature/rend/rendcache.h"
 #include "feature/rend/rendclient.h"
diff --git a/src/feature/dirclient/dlstatus.c b/src/feature/dirclient/dlstatus.c
index 017281e00..aea17bdac 100644
--- a/src/feature/dirclient/dlstatus.c
+++ b/src/feature/dirclient/dlstatus.c
@@ -11,7 +11,7 @@
 #include "feature/client/entrynodes.h"
 #include "feature/dirclient/dlstatus.h"
 #include "feature/nodelist/networkstatus.h"
-#include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "lib/crypt_ops/crypto_rand.h"
 
 #include "feature/dirclient/download_status_st.h"
diff --git a/src/feature/nodelist/authcert.c b/src/feature/nodelist/authcert.c
index 665105e60..2624ed5ee 100644
--- a/src/feature/nodelist/authcert.c
+++ b/src/feature/nodelist/authcert.c
@@ -35,7 +35,7 @@
 #include "feature/nodelist/nodelist.h"
 #include "feature/nodelist/routerlist.h"
 #include "feature/nodelist/routerparse.h"
-#include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 
 #include "core/or/connection_st.h"
 #include "feature/dirclient/dir_server_st.h"
diff --git a/src/feature/nodelist/networkstatus.c b/src/feature/nodelist/networkstatus.c
index 2ce38e204..40457ef68 100644
--- a/src/feature/nodelist/networkstatus.c
+++ b/src/feature/nodelist/networkstatus.c
@@ -65,7 +65,7 @@
 #include "feature/nodelist/nodelist.h"
 #include "core/or/protover.h"
 #include "core/or/relay.h"
-#include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/nodelist/authcert.h"
 #include "feature/nodelist/dirlist.h"
 #include "feature/nodelist/node_select.h"
diff --git a/src/feature/nodelist/node_select.c b/src/feature/nodelist/node_select.c
index aab0bbe9f..6d58705cc 100644
--- a/src/feature/nodelist/node_select.c
+++ b/src/feature/nodelist/node_select.c
@@ -28,6 +28,7 @@
 #include "feature/nodelist/routerlist.h"
 #include "feature/nodelist/routerset.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/math/fp.h"
 
diff --git a/src/feature/nodelist/routerlist.c b/src/feature/nodelist/routerlist.c
index afecaa4fb..2bd6e5c6f 100644
--- a/src/feature/nodelist/routerlist.c
+++ b/src/feature/nodelist/routerlist.c
@@ -85,7 +85,7 @@
 #include "feature/nodelist/routerparse.h"
 #include "feature/nodelist/routerset.h"
 #include "feature/nodelist/torcert.h"
-#include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/stats/rephist.h"
 #include "lib/crypt_ops/crypto_format.h"
 #include "lib/crypt_ops/crypto_rand.h"
diff --git a/src/feature/relay/dns.c b/src/feature/relay/dns.c
index 6e9be5e2e..52488ff94 100644
--- a/src/feature/relay/dns.c
+++ b/src/feature/relay/dns.c
@@ -62,6 +62,7 @@
 #include "core/or/policies.h"
 #include "core/or/relay.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "ht.h"
 #include "lib/sandbox/sandbox.h"
 #include "lib/evloop/compat_libevent.h"
diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c
index cc5c424fe..e145a8e41 100644
--- a/src/feature/relay/router.c
+++ b/src/feature/relay/router.c
@@ -34,6 +34,7 @@
 #include "feature/stats/rephist.h"
 #include "feature/relay/router.h"
 #include "feature/relay/routerkeys.h"
+#include "feature/relay/routermode.h"
 #include "feature/relay/selftest.h"
 #include "feature/nodelist/authcert.h"
 #include "feature/nodelist/dirlist.h"
@@ -1178,7 +1179,7 @@ init_keys(void)
 /** Return true iff we have enough configured bandwidth to advertise or
  * automatically provide directory services from cache directory
  * information. */
-static int
+int
 router_has_bandwidth_to_be_dirserver(const or_options_t *options)
 {
   if (options->BandwidthRate < MIN_BW_TO_ADVERTISE_DIRSERVER) {
@@ -1258,19 +1259,6 @@ router_should_be_dirserver(const or_options_t *options, int dir_port)
   return advertising;
 }
 
-/** Return 1 if we are configured to accept either relay or directory requests
- * from clients and we aren't at risk of exceeding our bandwidth limits, thus
- * we should be a directory server. If not, return 0.
- */
-int
-dir_server_mode(const or_options_t *options)
-{
-  if (!options->DirCache)
-    return 0;
-  return options->DirPort_set ||
-    (server_mode(options) && router_has_bandwidth_to_be_dirserver(options));
-}
-
 /** Look at a variety of factors, and return 0 if we don't want to
  * advertise the fact that we have a DirPort open or begindir support, else
  * return 1.
@@ -1348,24 +1336,6 @@ net_is_completely_disabled(void)
   return get_options()->DisableNetwork || we_are_fully_hibernating();
 }
 
-/** Return true iff we are trying to be a server.
- */
-MOCK_IMPL(int,
-server_mode,(const or_options_t *options))
-{
-  if (options->ClientOnly) return 0;
-  return (options->ORPort_set);
-}
-
-/** Return true iff we are trying to be a non-bridge server.
- */
-MOCK_IMPL(int,
-public_server_mode,(const or_options_t *options))
-{
-  if (!server_mode(options)) return 0;
-  return (!options->BridgeRelay);
-}
-
 /** Return true iff the combination of options in <b>options</b> and parameters
  * in the consensus mean that we don't want to allow exits from circuits
  * we got from addresses not known to be servers. */
@@ -1379,42 +1349,6 @@ should_refuse_unknown_exits(const or_options_t *options)
   }
 }
 
-/** Remember if we've advertised ourselves to the dirservers. */
-static int server_is_advertised=0;
-
-/** Return true iff we have published our descriptor lately.
- */
-MOCK_IMPL(int,
-advertised_server_mode,(void))
-{
-  return server_is_advertised;
-}
-
-/**
- * Called with a boolean: set whether we have recently published our
- * descriptor.
- */
-static void
-set_server_advertised(int s)
-{
-  server_is_advertised = s;
-}
-
-/** Return true iff we are trying to proxy client connections. */
-int
-proxy_mode(const or_options_t *options)
-{
-  (void)options;
-  SMARTLIST_FOREACH_BEGIN(get_configured_ports(), const port_cfg_t *, p) {
-    if (p->type == CONN_TYPE_AP_LISTENER ||
-        p->type == CONN_TYPE_AP_TRANS_LISTENER ||
-        p->type == CONN_TYPE_AP_DNS_LISTENER ||
-        p->type == CONN_TYPE_AP_NATD_LISTENER)
-      return 1;
-  } SMARTLIST_FOREACH_END(p);
-  return 0;
-}
-
 /** Decide if we're a publishable server. We are a publishable server if:
  * - We don't have the ClientOnly option set
  * and
diff --git a/src/feature/relay/router.h b/src/feature/relay/router.h
index 7b33069aa..5e342cc49 100644
--- a/src/feature/relay/router.h
+++ b/src/feature/relay/router.h
@@ -56,8 +56,6 @@ int router_initialize_tls_context(void);
 int init_keys(void);
 int init_keys_client(void);
 
-int dir_server_mode(const or_options_t *options);
-
 int net_is_disabled(void);
 int net_is_completely_disabled(void);
 
@@ -72,10 +70,6 @@ uint16_t router_get_advertised_dir_port(const or_options_t *options,
 int router_should_advertise_dirport(const or_options_t *options,
                                     uint16_t dir_port);
 
-MOCK_DECL(int, server_mode, (const or_options_t *options));
-MOCK_DECL(int, public_server_mode, (const or_options_t *options));
-MOCK_DECL(int, advertised_server_mode, (void));
-int proxy_mode(const or_options_t *options);
 void consider_publishable_server(int force);
 int should_refuse_unknown_exits(const or_options_t *options);
 
@@ -84,6 +78,7 @@ void mark_my_descriptor_dirty_if_too_old(time_t now);
 void mark_my_descriptor_dirty(const char *reason);
 void check_descriptor_bandwidth_changed(time_t now);
 void check_descriptor_ipaddress_changed(time_t now);
+int router_has_bandwidth_to_be_dirserver(const or_options_t *options);
 void router_new_address_suggestion(const char *suggestion,
                                    const dir_connection_t *d_conn);
 int router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port);
diff --git a/src/feature/relay/routerkeys.c b/src/feature/relay/routerkeys.c
index c13359795..2499d7c8f 100644
--- a/src/feature/relay/routerkeys.c
+++ b/src/feature/relay/routerkeys.c
@@ -18,6 +18,7 @@
 #include "app/config/config.h"
 #include "feature/relay/router.h"
 #include "feature/relay/routerkeys.h"
+#include "feature/relay/routermode.h"
 #include "feature/keymgt/loadkey.h"
 #include "feature/nodelist/torcert.h"
 
diff --git a/src/feature/relay/routermode.c b/src/feature/relay/routermode.c
new file mode 100644
index 000000000..3f87cda50
--- /dev/null
+++ b/src/feature/relay/routermode.c
@@ -0,0 +1,80 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "core/or/or.h"
+
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/port_cfg_st.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
+
+/** Return 1 if we are configured to accept either relay or directory requests
+ * from clients and we aren't at risk of exceeding our bandwidth limits, thus
+ * we should be a directory server. If not, return 0.
+ */
+int
+dir_server_mode(const or_options_t *options)
+{
+  if (!options->DirCache)
+    return 0;
+  return options->DirPort_set ||
+    (server_mode(options) && router_has_bandwidth_to_be_dirserver(options));
+}
+
+/** Return true iff we are trying to proxy client connections. */
+int
+proxy_mode(const or_options_t *options)
+{
+  (void)options;
+  SMARTLIST_FOREACH_BEGIN(get_configured_ports(), const port_cfg_t *, p) {
+    if (p->type == CONN_TYPE_AP_LISTENER ||
+        p->type == CONN_TYPE_AP_TRANS_LISTENER ||
+        p->type == CONN_TYPE_AP_DNS_LISTENER ||
+        p->type == CONN_TYPE_AP_NATD_LISTENER)
+      return 1;
+  } SMARTLIST_FOREACH_END(p);
+  return 0;
+}
+
+/** Return true iff we are trying to be a server.
+ */
+MOCK_IMPL(int,
+server_mode,(const or_options_t *options))
+{
+  if (options->ClientOnly) return 0;
+  return (options->ORPort_set);
+}
+
+/** Return true iff we are trying to be a non-bridge server.
+ */
+MOCK_IMPL(int,
+public_server_mode,(const or_options_t *options))
+{
+  if (!server_mode(options)) return 0;
+  return (!options->BridgeRelay);
+}
+
+/** Remember if we've advertised ourselves to the dirservers. */
+static int server_is_advertised=0;
+
+/** Return true iff we have published our descriptor lately.
+ */
+MOCK_IMPL(int,
+advertised_server_mode,(void))
+{
+  return server_is_advertised;
+}
+
+/**
+ * Called with a boolean: set whether we have recently published our
+ * descriptor.
+ */
+void
+set_server_advertised(int s)
+{
+  server_is_advertised = s;
+}
diff --git a/src/feature/relay/routermode.h b/src/feature/relay/routermode.h
new file mode 100644
index 000000000..1442d706d
--- /dev/null
+++ b/src/feature/relay/routermode.h
@@ -0,0 +1,24 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file routermode.h
+ * \brief Header file for routermode.c.
+ **/
+
+#ifndef TOR_ROUTERMODE_H
+#define TOR_ROUTERMODE_H
+
+int dir_server_mode(const or_options_t *options);
+
+MOCK_DECL(int, server_mode, (const or_options_t *options));
+MOCK_DECL(int, public_server_mode, (const or_options_t *options));
+MOCK_DECL(int, advertised_server_mode, (void));
+int proxy_mode(const or_options_t *options);
+
+void set_server_advertised(int s);
+
+#endif /* !defined(TOR_ROUTERMODE_H) */
diff --git a/src/feature/stats/rephist.c b/src/feature/stats/rephist.c
index 210576b9e..fa4bd0ba4 100644
--- a/src/feature/stats/rephist.c
+++ b/src/feature/stats/rephist.c
@@ -83,7 +83,7 @@
 #include "feature/nodelist/networkstatus.h"
 #include "feature/nodelist/nodelist.h"
 #include "feature/stats/rephist.h"
-#include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/relay/selftest.h"
 #include "feature/nodelist/routerlist.h"
 #include "ht.h"
diff --git a/src/test/test_config.c b/src/test/test_config.c
index 4dc1b8c0e..77c0d248c 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -38,6 +38,7 @@
 #include "feature/rend/rendclient.h"
 #include "feature/rend/rendservice.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "feature/nodelist/dirlist.h"
 #include "feature/nodelist/routerlist.h"
 #include "feature/nodelist/routerset.h"
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 686b03949..58070766a 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -51,6 +51,7 @@
 #include "feature/nodelist/networkstatus.h"
 #include "feature/relay/router.h"
 #include "feature/relay/routerkeys.h"
+#include "feature/relay/routermode.h"
 #include "feature/nodelist/authcert.h"
 #include "feature/nodelist/dirlist.h"
 #include "feature/nodelist/node_select.h"
diff --git a/src/test/test_status.c b/src/test/test_status.c
index 46dbd9dcd..3ceba77a8 100644
--- a/src/test/test_status.c
+++ b/src/test/test_status.c
@@ -21,6 +21,7 @@
 #include "feature/stats/rephist.h"
 #include "core/or/relay.h"
 #include "feature/relay/router.h"
+#include "feature/relay/routermode.h"
 #include "core/mainloop/mainloop.h"
 #include "feature/nodelist/nodelist.h"
 #include "app/config/statefile.h"





More information about the tor-commits mailing list