diff options
author | David Goulet <dgoulet@torproject.org> | 2018-01-25 15:44:48 -0500 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2018-01-25 15:44:48 -0500 |
commit | 93b826faaa7cca351c68256ce60a7f7e6c5fda5b (patch) | |
tree | ce447534849f8d20826c48ad6b8859c5bfbe69d9 /src/or/geoip.h | |
parent | a2aaf9509ba578f4e7705b506ee9a0f764d24ff2 (diff) | |
download | tor-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.h | 22 |
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); |