diff --git a/src/or/config.c b/src/or/config.c index 70a3ee6218..89032d67b0 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -12,6 +12,7 @@ #define CONFIG_PRIVATE #include "or.h" +#include "geoip.h" #ifdef MS_WINDOWS #include #endif diff --git a/src/or/connection.c b/src/or/connection.c index 82764ec4ce..e0b1907a08 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -12,6 +12,7 @@ #include "or.h" #include "dnsserv.h" +#include "geoip.h" static connection_t *connection_create_listener( struct sockaddr *listensockaddr, diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 247cc4e595..8e9992c868 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -11,6 +11,7 @@ **/ #include "or.h" +#include "geoip.h" static int connection_tls_finish_handshake(or_connection_t *conn); static int connection_or_process_cells_from_inbuf(or_connection_t *conn); diff --git a/src/or/control.c b/src/or/control.c index 68921663e1..f01be85b77 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -12,6 +12,7 @@ #include "or.h" #include "dnsserv.h" +#include "geoip.h" /** Yield true iff s is the state of a control_connection_t that has * finished authentication and is accepting commands. */ diff --git a/src/or/directory.c b/src/or/directory.c index 52e1c392cf..90a6fd1283 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -4,6 +4,8 @@ /* See LICENSE for licensing information */ #include "or.h" +#include "geoip.h" + #if defined(EXPORTMALLINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO) #ifndef OPENBSD #include diff --git a/src/or/geoip.c b/src/or/geoip.c index 248c68ea46..f027f32995 100644 --- a/src/or/geoip.c +++ b/src/or/geoip.c @@ -11,6 +11,7 @@ #include "or.h" #include "ht.h" #include "dnsserv.h" +#include "geoip.h" static void clear_geoip_db(void); diff --git a/src/or/geoip.h b/src/or/geoip.h new file mode 100644 index 0000000000..c3a4fbcdf1 --- /dev/null +++ b/src/or/geoip.h @@ -0,0 +1,58 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2010, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file geoip.h + * \brief Header file for geoip.c. + **/ + +#ifndef _TOR_GEOIP_H +#define _TOR_GEOIP_H + +#ifdef GEOIP_PRIVATE +int geoip_parse_entry(const char *line); +#endif +int should_record_bridge_info(or_options_t *options); +int geoip_load_file(const char *filename, or_options_t *options); +int geoip_get_country_by_ip(uint32_t ipaddr); +int geoip_get_n_countries(void); +const char *geoip_get_country_name(country_t num); +int geoip_is_loaded(void); +country_t geoip_get_country(const char *countrycode); + +void geoip_note_client_seen(geoip_client_action_t action, + uint32_t addr, time_t now); +void geoip_remove_old_clients(time_t cutoff); + +void geoip_note_ns_response(geoip_client_action_t action, + geoip_ns_response_t response); +time_t geoip_get_history_start(void); +char *geoip_get_client_history_dirreq(time_t now, + geoip_client_action_t action); +char *geoip_get_client_history_bridge(time_t now, + geoip_client_action_t action); +char *geoip_get_request_history(time_t now, geoip_client_action_t action); +int getinfo_helper_geoip(control_connection_t *control_conn, + const char *question, char **answer, + const char **errmsg); +void geoip_free_all(void); + +void geoip_start_dirreq(uint64_t dirreq_id, size_t response_size, + geoip_client_action_t action, dirreq_type_t type); +void geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type, + dirreq_state_t new_state); + +void geoip_dirreq_stats_init(time_t now); +void geoip_dirreq_stats_write(time_t now); +void geoip_entry_stats_init(time_t now); +void geoip_entry_stats_write(time_t now); +void geoip_bridge_stats_init(time_t now); +time_t geoip_bridge_stats_write(time_t now); +const char *geoip_get_bridge_stats_extrainfo(time_t); +const char *geoip_get_bridge_stats_controller(time_t); + +#endif + diff --git a/src/or/main.c b/src/or/main.c index 521d2c2ca7..41385447ae 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -13,6 +13,7 @@ #define MAIN_PRIVATE #include "or.h" #include "dnsserv.h" +#include "geoip.h" #ifdef USE_DMALLOC #include #include diff --git a/src/or/or.h b/src/or/or.h index 10165d4937..ecb04d885f 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4103,16 +4103,6 @@ void dump_dns_mem_usage(int severity); * we are willing to talk about it? */ #define DIR_RECORD_USAGE_MIN_OBSERVATION_TIME (12*60*60) -#ifdef GEOIP_PRIVATE -int geoip_parse_entry(const char *line); -#endif -int should_record_bridge_info(or_options_t *options); -int geoip_load_file(const char *filename, or_options_t *options); -int geoip_get_country_by_ip(uint32_t ipaddr); -int geoip_get_n_countries(void); -const char *geoip_get_country_name(country_t num); -int geoip_is_loaded(void); -country_t geoip_get_country(const char *countrycode); /** Indicates an action that we might be noting geoip statistics on. * Note that if we're noticing CONNECT, we're a bridge, and if we're noticing * the others, we're not. @@ -4125,9 +4115,6 @@ typedef enum { /** We've served a v2 networkstatus consensus as a directory server. */ GEOIP_CLIENT_NETWORKSTATUS_V2 = 2, } geoip_client_action_t; -void geoip_note_client_seen(geoip_client_action_t action, - uint32_t addr, time_t now); -void geoip_remove_old_clients(time_t cutoff); /** Indicates either a positive reply or a reason for rejectng a network * status request that will be included in geoip statistics. */ typedef enum { @@ -4146,18 +4133,6 @@ typedef enum { GEOIP_REJECT_BUSY = 5, } geoip_ns_response_t; #define GEOIP_NS_RESPONSE_NUM 6 -void geoip_note_ns_response(geoip_client_action_t action, - geoip_ns_response_t response); -time_t geoip_get_history_start(void); -char *geoip_get_client_history_dirreq(time_t now, - geoip_client_action_t action); -char *geoip_get_client_history_bridge(time_t now, - geoip_client_action_t action); -char *geoip_get_request_history(time_t now, geoip_client_action_t action); -int getinfo_helper_geoip(control_connection_t *control_conn, - const char *question, char **answer, - const char **errmsg); -void geoip_free_all(void); /** Directory requests that we are measuring can be either direct or * tunneled. */ @@ -4188,20 +4163,6 @@ typedef enum { DIRREQ_OR_CONN_BUFFER_FLUSHED = 4 } dirreq_state_t; -void geoip_start_dirreq(uint64_t dirreq_id, size_t response_size, - geoip_client_action_t action, dirreq_type_t type); -void geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type, - dirreq_state_t new_state); - -void geoip_dirreq_stats_init(time_t now); -void geoip_dirreq_stats_write(time_t now); -void geoip_entry_stats_init(time_t now); -void geoip_entry_stats_write(time_t now); -void geoip_bridge_stats_init(time_t now); -time_t geoip_bridge_stats_write(time_t now); -const char *geoip_get_bridge_stats_extrainfo(time_t); -const char *geoip_get_bridge_stats_controller(time_t); - /********************************* hibernate.c **********************/ int accounting_parse_options(or_options_t *options, int validate_only); diff --git a/src/or/relay.c b/src/or/relay.c index fab2d8896e..1c15549d0f 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -12,6 +12,7 @@ #include #include "or.h" +#include "geoip.h" #include "mempool.h" static int relay_crypt(circuit_t *circ, cell_t *cell, diff --git a/src/or/router.c b/src/or/router.c index d105aeffad..7d239d6022 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -7,6 +7,7 @@ #define ROUTER_PRIVATE #include "or.h" +#include "geoip.h" /** * \file router.c diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 8d403def36..cd5bdcf718 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -12,6 +12,7 @@ **/ #include "or.h" +#include "geoip.h" // #define DEBUG_ROUTERLIST diff --git a/src/test/test.c b/src/test/test.c index a753db27f6..b8b26b3d92 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -43,6 +43,7 @@ long int lround(double x); double fabs(double x); #include "or.h" +#include "geoip.h" #include "test.h" #include "torgzip.h" #include "mempool.h"