TOR: update to v0.2.5.12
[tomato.git] / release / src / router / tor / src / or / control.h
blob8697262176d9736eeb9f2ba9cb7d3afe29863528
1 /* Copyright (c) 2001 Matej Pfajfar.
2 * Copyright (c) 2001-2004, Roger Dingledine.
3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
4 * Copyright (c) 2007-2013, The Tor Project, Inc. */
5 /* See LICENSE for licensing information */
7 /**
8 * \file control.h
9 * \brief Header file for control.c.
10 **/
12 #ifndef TOR_CONTROL_H
13 #define TOR_CONTROL_H
15 void control_update_global_event_mask(void);
16 void control_adjust_event_log_severity(void);
18 void control_ports_write_to_file(void);
20 /** Log information about the connection <b>conn</b>, protecting it as with
21 * CONN_LOG_PROTECT. Example:
23 * LOG_FN_CONN(conn, (LOG_DEBUG, "Socket %d wants to write", conn->s));
24 **/
25 #define LOG_FN_CONN(conn, args) \
26 CONN_LOG_PROTECT(conn, log_fn args)
28 int connection_control_finished_flushing(control_connection_t *conn);
29 int connection_control_reached_eof(control_connection_t *conn);
30 void connection_control_closed(control_connection_t *conn);
32 int connection_control_process_inbuf(control_connection_t *conn);
34 #define EVENT_AUTHDIR_NEWDESCS 0x000D
35 #define EVENT_NS 0x000F
36 int control_event_is_interesting(int event);
38 int control_event_circuit_status(origin_circuit_t *circ,
39 circuit_status_event_t e, int reason);
40 int control_event_circuit_purpose_changed(origin_circuit_t *circ,
41 int old_purpose);
42 int control_event_circuit_cannibalized(origin_circuit_t *circ,
43 int old_purpose,
44 const struct timeval *old_tv_created);
45 int control_event_stream_status(entry_connection_t *conn,
46 stream_status_event_t e,
47 int reason);
48 int control_event_or_conn_status(or_connection_t *conn,
49 or_conn_status_event_t e, int reason);
50 int control_event_bandwidth_used(uint32_t n_read, uint32_t n_written);
51 int control_event_stream_bandwidth(edge_connection_t *edge_conn);
52 int control_event_stream_bandwidth_used(void);
53 int control_event_circ_bandwidth_used(void);
54 int control_event_conn_bandwidth(connection_t *conn);
55 int control_event_conn_bandwidth_used(void);
56 int control_event_circuit_cell_stats(void);
57 int control_event_tb_empty(const char *bucket, uint32_t read_empty_time,
58 uint32_t write_empty_time,
59 int milliseconds_elapsed);
60 void control_event_logmsg(int severity, uint32_t domain, const char *msg);
61 int control_event_descriptors_changed(smartlist_t *routers);
62 int control_event_address_mapped(const char *from, const char *to,
63 time_t expires, const char *error,
64 const int cached);
65 int control_event_or_authdir_new_descriptor(const char *action,
66 const char *desc,
67 size_t desclen,
68 const char *msg);
69 int control_event_my_descriptor_changed(void);
70 int control_event_networkstatus_changed(smartlist_t *statuses);
72 int control_event_newconsensus(const networkstatus_t *consensus);
73 int control_event_networkstatus_changed_single(const routerstatus_t *rs);
74 int control_event_general_status(int severity, const char *format, ...)
75 CHECK_PRINTF(2,3);
76 int control_event_client_status(int severity, const char *format, ...)
77 CHECK_PRINTF(2,3);
78 int control_event_server_status(int severity, const char *format, ...)
79 CHECK_PRINTF(2,3);
80 int control_event_guard(const char *nickname, const char *digest,
81 const char *status);
82 int control_event_conf_changed(const smartlist_t *elements);
83 int control_event_buildtimeout_set(buildtimeout_set_event_t type,
84 const char *args);
85 int control_event_signal(uintptr_t signal);
87 int init_control_cookie_authentication(int enabled);
88 char *get_controller_cookie_file_name(void);
89 smartlist_t *decode_hashed_passwords(config_line_t *passwords);
90 void disable_control_logging(void);
91 void enable_control_logging(void);
93 void monitor_owning_controller_process(const char *process_spec);
95 void control_event_bootstrap(bootstrap_status_t status, int progress);
96 MOCK_DECL(void, control_event_bootstrap_problem,(const char *warn,
97 int reason,
98 or_connection_t *or_conn));
100 void control_event_clients_seen(const char *controller_str);
101 void control_event_transport_launched(const char *mode,
102 const char *transport_name,
103 tor_addr_t *addr, uint16_t port);
104 const char *rend_auth_type_to_string(rend_auth_type_t auth_type);
105 MOCK_DECL(const char *, node_describe_longname_by_id,(const char *id_digest));
106 void control_event_hs_descriptor_requested(const rend_data_t *rend_query,
107 const char *desc_id_base32,
108 const char *hs_dir);
109 void control_event_hs_descriptor_receive_end(const char *action,
110 const rend_data_t *rend_query,
111 const char *hs_dir);
112 void control_event_hs_descriptor_received(const rend_data_t *rend_query,
113 const char *hs_dir);
114 void control_event_hs_descriptor_failed(const rend_data_t *rend_query,
115 const char *hs_dir);
117 void control_free_all(void);
119 #ifdef CONTROL_PRIVATE
120 /* Recognized asynchronous event types. It's okay to expand this list
121 * because it is used both as a list of v0 event types, and as indices
122 * into the bitfield to determine which controllers want which events.
124 #define EVENT_MIN_ 0x0001
125 #define EVENT_CIRCUIT_STATUS 0x0001
126 #define EVENT_STREAM_STATUS 0x0002
127 #define EVENT_OR_CONN_STATUS 0x0003
128 #define EVENT_BANDWIDTH_USED 0x0004
129 #define EVENT_CIRCUIT_STATUS_MINOR 0x0005
130 #define EVENT_NEW_DESC 0x0006
131 #define EVENT_DEBUG_MSG 0x0007
132 #define EVENT_INFO_MSG 0x0008
133 #define EVENT_NOTICE_MSG 0x0009
134 #define EVENT_WARN_MSG 0x000A
135 #define EVENT_ERR_MSG 0x000B
136 #define EVENT_ADDRMAP 0x000C
137 /* Exposed above */
138 // #define EVENT_AUTHDIR_NEWDESCS 0x000D
139 #define EVENT_DESCCHANGED 0x000E
140 /* Exposed above */
141 // #define EVENT_NS 0x000F
142 #define EVENT_STATUS_CLIENT 0x0010
143 #define EVENT_STATUS_SERVER 0x0011
144 #define EVENT_STATUS_GENERAL 0x0012
145 #define EVENT_GUARD 0x0013
146 #define EVENT_STREAM_BANDWIDTH_USED 0x0014
147 #define EVENT_CLIENTS_SEEN 0x0015
148 #define EVENT_NEWCONSENSUS 0x0016
149 #define EVENT_BUILDTIMEOUT_SET 0x0017
150 #define EVENT_SIGNAL 0x0018
151 #define EVENT_CONF_CHANGED 0x0019
152 #define EVENT_CONN_BW 0x001A
153 #define EVENT_CELL_STATS 0x001B
154 #define EVENT_TB_EMPTY 0x001C
155 #define EVENT_CIRC_BANDWIDTH_USED 0x001D
156 #define EVENT_TRANSPORT_LAUNCHED 0x0020
157 #define EVENT_HS_DESC 0x0021
158 #define EVENT_MAX_ 0x0021
159 /* If EVENT_MAX_ ever hits 0x003F, we need to make the mask into a
160 * different structure, as it can only handle a maximum left shift of 1<<63. */
162 /* Used only by control.c and test.c */
163 STATIC size_t write_escaped_data(const char *data, size_t len, char **out);
164 STATIC size_t read_escaped_data(const char *data, size_t len, char **out);
165 /** Flag for event_format_t. Indicates that we should use the one standard
166 format. (Other formats previous existed, and are now deprecated)
168 #define ALL_FORMATS 1
169 /** Bit field of flags to select how to format a controller event. Recognized
170 * flag is ALL_FORMATS. */
171 typedef int event_format_t;
173 #ifdef TOR_UNIT_TESTS
174 MOCK_DECL(STATIC void,
175 send_control_event_string,(uint16_t event, event_format_t which,
176 const char *msg));
178 void control_testing_set_global_event_mask(uint64_t mask);
179 #endif
181 /** Helper structure: temporarily stores cell statistics for a circuit. */
182 typedef struct cell_stats_t {
183 /** Number of cells added in app-ward direction by command. */
184 uint64_t added_cells_appward[CELL_COMMAND_MAX_ + 1];
185 /** Number of cells added in exit-ward direction by command. */
186 uint64_t added_cells_exitward[CELL_COMMAND_MAX_ + 1];
187 /** Number of cells removed in app-ward direction by command. */
188 uint64_t removed_cells_appward[CELL_COMMAND_MAX_ + 1];
189 /** Number of cells removed in exit-ward direction by command. */
190 uint64_t removed_cells_exitward[CELL_COMMAND_MAX_ + 1];
191 /** Total waiting time of cells in app-ward direction by command. */
192 uint64_t total_time_appward[CELL_COMMAND_MAX_ + 1];
193 /** Total waiting time of cells in exit-ward direction by command. */
194 uint64_t total_time_exitward[CELL_COMMAND_MAX_ + 1];
195 } cell_stats_t;
196 void sum_up_cell_stats_by_command(circuit_t *circ,
197 cell_stats_t *cell_stats);
198 void append_cell_stats_by_command(smartlist_t *event_parts,
199 const char *key,
200 const uint64_t *include_if_non_zero,
201 const uint64_t *number_to_include);
202 void format_cell_stats(char **event_string, circuit_t *circ,
203 cell_stats_t *cell_stats);
204 STATIC char *get_bw_samples(void);
205 #endif
207 #endif