#define CONFIG_PRIVATE
#include "or.h"
+#include "geoip.h"
#ifdef MS_WINDOWS
#include <shlobj.h>
#endif
#include "or.h"
#include "dnsserv.h"
+#include "geoip.h"
static connection_t *connection_create_listener(
struct sockaddr *listensockaddr,
**/
#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);
#include "or.h"
#include "dnsserv.h"
+#include "geoip.h"
/** Yield true iff <b>s</b> is the state of a control_connection_t that has
* finished authentication and is accepting commands. */
/* See LICENSE for licensing information */
#include "or.h"
+#include "geoip.h"
+
#if defined(EXPORTMALLINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
#ifndef OPENBSD
#include <malloc.h>
#include "or.h"
#include "ht.h"
#include "dnsserv.h"
+#include "geoip.h"
static void clear_geoip_db(void);
--- /dev/null
+/* 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
+
#define MAIN_PRIVATE
#include "or.h"
#include "dnsserv.h"
+#include "geoip.h"
#ifdef USE_DMALLOC
#include <dmalloc.h>
#include <openssl/crypto.h>
* 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.
/** 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 {
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. */
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);
#include <math.h>
#include "or.h"
+#include "geoip.h"
#include "mempool.h"
static int relay_crypt(circuit_t *circ, cell_t *cell,
#define ROUTER_PRIVATE
#include "or.h"
+#include "geoip.h"
/**
* \file router.c
**/
#include "or.h"
+#include "geoip.h"
// #define DEBUG_ROUTERLIST
double fabs(double x);
#include "or.h"
+#include "geoip.h"
#include "test.h"
#include "torgzip.h"
#include "mempool.h"