aboutsummaryrefslogtreecommitdiff
path: root/src/or/geoip.h
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2018-01-25 15:44:48 -0500
committerDavid Goulet <dgoulet@torproject.org>2018-01-25 15:44:48 -0500
commit93b826faaa7cca351c68256ce60a7f7e6c5fda5b (patch)
treece447534849f8d20826c48ad6b8859c5bfbe69d9 /src/or/geoip.h
parenta2aaf9509ba578f4e7705b506ee9a0f764d24ff2 (diff)
downloadtor-93b826faaa7cca351c68256ce60a7f7e6c5fda5b.tar.gz
tor-93b826faaa7cca351c68256ce60a7f7e6c5fda5b.zip
geoip: Add a lookup function for client map entry
The upcoming DoS mitigation subsytem needs to keep information on a per-IP basis which is also what the geoip clientmap does. For another subsystem to access that clientmap, this commit adds a lookup function that returns the entry. For this, the clientmap_entry_t had to be moved to the header file. Signed-off-by: David Goulet <dgoulet@torproject.org>
Diffstat (limited to 'src/or/geoip.h')
-rw-r--r--src/or/geoip.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/or/geoip.h b/src/or/geoip.h
index 070296dd07..b80efceb35 100644
--- a/src/or/geoip.h
+++ b/src/or/geoip.h
@@ -20,6 +20,25 @@ STATIC int geoip_get_country_by_ipv4(uint32_t ipaddr);
STATIC int geoip_get_country_by_ipv6(const struct in6_addr *addr);
STATIC void clear_geoip_db(void);
#endif
+
+/** Entry in a map from IP address to the last time we've seen an incoming
+ * connection from that IP address. Used by bridges only to track which
+ * countries have them blocked, or the DoS mitigation subsystem if enabled. */
+typedef struct clientmap_entry_t {
+ HT_ENTRY(clientmap_entry_t) node;
+ tor_addr_t addr;
+ /* Name of pluggable transport used by this client. NULL if no
+ pluggable transport was used. */
+ char *transport_name;
+
+ /** Time when we last saw this IP address, in MINUTES since the epoch.
+ *
+ * (This will run out of space around 4011 CE. If Tor is still in use around
+ * 4000 CE, please remember to add more bits to last_seen_in_minutes.) */
+ unsigned int last_seen_in_minutes:30;
+ unsigned int action:2;
+} clientmap_entry_t;
+
int should_record_bridge_info(const or_options_t *options);
int geoip_load_file(sa_family_t family, const char *filename);
MOCK_DECL(int, geoip_get_country_by_addr, (const tor_addr_t *addr));
@@ -33,6 +52,9 @@ void geoip_note_client_seen(geoip_client_action_t action,
const tor_addr_t *addr, const char *transport_name,
time_t now);
void geoip_remove_old_clients(time_t cutoff);
+clientmap_entry_t *geoip_lookup_client(const tor_addr_t *addr,
+ const char *transport_name,
+ geoip_client_action_t action);
void geoip_note_ns_response(geoip_ns_response_t response);
char *geoip_get_transport_history(void);