tor
master
|
Header file for control.c. More...
Go to the source code of this file.
Macros | |
#define | LOG_FN_CONN(conn, args) CONN_LOG_PROTECT(conn, log_fn args) |
#define | CC_LOCAL_FD_IS_OWNER (1u<<0) |
#define | CC_LOCAL_FD_IS_AUTHENTICATED (1u<<1) |
#define | EVENT_NS 0x000F |
Functions | |
void | control_initialize_event_queue (void) |
void | control_update_global_event_mask (void) |
void | control_adjust_event_log_severity (void) |
void | control_ports_write_to_file (void) |
int | control_connection_add_local_fd (tor_socket_t sock, unsigned flags) |
int | connection_control_finished_flushing (control_connection_t *conn) |
int | connection_control_reached_eof (control_connection_t *conn) |
void | connection_control_closed (control_connection_t *conn) |
int | connection_control_process_inbuf (control_connection_t *conn) |
int | control_event_is_interesting (int event) |
void | control_per_second_events (void) |
int | control_any_per_second_event_enabled (void) |
int | control_event_circuit_status (origin_circuit_t *circ, circuit_status_event_t e, int reason) |
int | control_event_circuit_purpose_changed (origin_circuit_t *circ, int old_purpose) |
int | control_event_circuit_cannibalized (origin_circuit_t *circ, int old_purpose, const struct timeval *old_tv_created) |
int | control_event_stream_status (entry_connection_t *conn, stream_status_event_t e, int reason) |
int | control_event_or_conn_status (or_connection_t *conn, or_conn_status_event_t e, int reason) |
int | control_event_bandwidth_used (uint32_t n_read, uint32_t n_written) |
int | control_event_stream_bandwidth (edge_connection_t *edge_conn) |
int | control_event_stream_bandwidth_used (void) |
int | control_event_circ_bandwidth_used (void) |
int | control_event_conn_bandwidth (connection_t *conn) |
int | control_event_conn_bandwidth_used (void) |
int | control_event_circuit_cell_stats (void) |
void | control_event_logmsg (int severity, uint32_t domain, const char *msg) |
void | control_event_logmsg_pending (void) |
int | control_event_descriptors_changed (smartlist_t *routers) |
int | control_event_address_mapped (const char *from, const char *to, time_t expires, const char *error, const int cached) |
int | control_event_my_descriptor_changed (void) |
int | control_event_network_liveness_update (int liveness) |
int | control_event_networkstatus_changed (smartlist_t *statuses) |
int | control_event_newconsensus (const networkstatus_t *consensus) |
int | control_event_networkstatus_changed_single (const routerstatus_t *rs) |
int | control_event_general_status (int severity, const char *format,...) CHECK_PRINTF(2 |
int int | control_event_client_status (int severity, const char *format,...) CHECK_PRINTF(2 |
int int int | control_event_server_status (int severity, const char *format,...) CHECK_PRINTF(2 |
int int int int | control_event_general_error (const char *format,...) CHECK_PRINTF(1 |
int int int int int | control_event_client_error (const char *format,...) CHECK_PRINTF(1 |
int int int int int int | control_event_server_error (const char *format,...) CHECK_PRINTF(1 |
int int int int int int int | control_event_guard (const char *nickname, const char *digest, const char *status) |
int | control_event_conf_changed (const smartlist_t *elements) |
int | control_event_buildtimeout_set (buildtimeout_set_event_t type, const char *args) |
int | control_event_signal (uintptr_t signal) |
int | init_control_cookie_authentication (int enabled) |
char * | get_controller_cookie_file_name (void) |
smartlist_t * | decode_hashed_passwords (config_line_t *passwords) |
void | disable_control_logging (void) |
void | enable_control_logging (void) |
void | monitor_owning_controller_process (const char *process_spec) |
int | control_event_bootstrap (bootstrap_status_t status, int progress) |
MOCK_DECL (void, control_event_bootstrap_prob_or,(const char *warn, int reason, or_connection_t *or_conn)) | |
void | control_event_bootstrap_problem (const char *warn, const char *reason, const connection_t *conn, int dowarn) |
void | control_event_clients_seen (const char *controller_str) |
void | control_event_transport_launched (const char *mode, const char *transport_name, tor_addr_t *addr, uint16_t port) |
const char * | rend_auth_type_to_string (rend_auth_type_t auth_type) |
MOCK_DECL (const char *, node_describe_longname_by_id,(const char *id_digest)) | |
void | control_event_hs_descriptor_requested (const char *onion_address, rend_auth_type_t auth_type, const char *id_digest, const char *desc_id, const char *hsdir_index) |
void | control_event_hs_descriptor_created (const char *onion_address, const char *desc_id, int replica) |
void | control_event_hs_descriptor_upload (const char *onion_address, const char *desc_id, const char *hs_dir, const char *hsdir_index) |
void | control_event_hs_descriptor_upload_end (const char *action, const char *onion_address, const char *hs_dir, const char *reason) |
void | control_event_hs_descriptor_uploaded (const char *hs_dir, const char *onion_address) |
void | control_event_hsv2_descriptor_failed (const rend_data_t *rend_data, const char *id_digest, const char *reason) |
void | control_event_hsv2_descriptor_received (const char *onion_address, const rend_data_t *rend_data, const char *id_digest) |
void | control_event_hsv3_descriptor_failed (const char *onion_address, const char *desc_id, const char *hsdir_id_digest, const char *reason) |
void | control_event_hsv3_descriptor_received (const char *onion_address, const char *desc_id, const char *hsdir_id_digest) |
void | control_event_hs_descriptor_upload_failed (const char *hs_dir, const char *onion_address, const char *reason) |
void | control_event_hs_descriptor_content (const char *onion_address, const char *desc_id, const char *hsdir_fp, const char *content) |
void | control_free_all (void) |
Header file for control.c.
#define LOG_FN_CONN | ( | conn, | |
args | |||
) | CONN_LOG_PROTECT(conn, log_fn args) |
Log information about the connection conn, protecting it as with CONN_LOG_PROTECT. Example:
LOG_FN_CONN(conn, (LOG_DEBUG, "Socket %d wants to write", conn->s));
void connection_control_closed | ( | control_connection_t * | conn | ) |
Called when conn is being freed.
int connection_control_finished_flushing | ( | control_connection_t * | conn | ) |
Called when conn has no more bytes left on its outbuf.
int connection_control_process_inbuf | ( | control_connection_t * | conn | ) |
Called when data has arrived on a v1 control connection: Try to fetch commands from conn->inbuf, and execute them.
int connection_control_reached_eof | ( | control_connection_t * | conn | ) |
Called when conn has gotten its socket closed.
void control_adjust_event_log_severity | ( | void | ) |
Adjust the log severities that result in control_event_logmsg being called to match the severity of log messages that any controllers are interested in.
int control_any_per_second_event_enabled | ( | void | ) |
Return true if any event that needs to fire once a second is enabled.
int control_connection_add_local_fd | ( | tor_socket_t | sock, |
unsigned | flags | ||
) |
Create and add a new controller connection on sock. If CC_LOCAL_FD_IS_OWNER is set in flags, this Tor process should exit when the connection closes. If CC_LOCAL_FD_IS_AUTHENTICATED is set, then the connection does not need to authenticate.
int control_event_address_mapped | ( | const char * | from, |
const char * | to, | ||
time_t | expires, | ||
const char * | error, | ||
const int | cached | ||
) |
Called when an address mapping on from from changes to to. expires values less than 3 are special; see connection_edge.c. If error is non-NULL, it is an error code describing the failure mode of the mapping.
int control_event_bandwidth_used | ( | uint32_t | n_read, |
uint32_t | n_written | ||
) |
A second or more has elapsed: tell any interested control connections how much bandwidth we used.
int control_event_bootstrap | ( | bootstrap_status_t | status, |
int | progress | ||
) |
Called when Tor has made progress at bootstrapping its directory information and initial circuits.
status is the new status, that is, what task we will be doing next. progress is zero if we just started this task, else it represents progress on the task.
Return true if we logged a message at level NOTICE, and false otherwise.
void control_event_bootstrap_problem | ( | const char * | warn, |
const char * | reason, | ||
const connection_t * | conn, | ||
int | dowarn | ||
) |
Called when Tor has failed to make bootstrapping progress in a way that indicates a problem. warn gives a human-readable hint as to why, and reason provides a controller-facing short tag. conn is the connection that caused this problem and can be NULL if a connection cannot be easily identified.
int control_event_buildtimeout_set | ( | buildtimeout_set_event_t | type, |
const char * | args | ||
) |
Called when we compute a new circuitbuildtimeout
int control_event_circ_bandwidth_used | ( | void | ) |
A second or more has elapsed: tell any interested control connections how much bandwidth origin circuits have used.
int control_event_circuit_cannibalized | ( | origin_circuit_t * | circ, |
int | old_purpose, | ||
const struct timeval * | old_tv_created | ||
) |
circ has changed its purpose from old_purpose, and its created-time from old_tv_created: tell any interested controllers.
int control_event_circuit_cell_stats | ( | void | ) |
A second or more has elapsed: tell any interested control connection how many cells have been processed for a given circuit.
int control_event_circuit_purpose_changed | ( | origin_circuit_t * | circ, |
int | old_purpose | ||
) |
circ has changed its purpose from old_purpose: tell any interested controllers.
int control_event_circuit_status | ( | origin_circuit_t * | circ, |
circuit_status_event_t | tp, | ||
int | reason_code | ||
) |
Something major has happened to circuit circ: tell any interested control connections.
void control_event_clients_seen | ( | const char * | controller_str | ) |
We just generated a new summary of which countries we've seen clients from recently. Send a copy to the controller in case it wants to display it for the user.
int control_event_conf_changed | ( | const smartlist_t * | elements | ) |
Called when a configuration option changes. This is generally triggered by SETCONF requests and RELOAD/SIGHUP signals. The elements is a smartlist_t containing (key, value, ...) pairs in sequence. value can be NULL.
int control_event_conn_bandwidth | ( | connection_t * | conn | ) |
Print out CONN_BW event for a single OR/DIR/EXIT conn and reset bandwidth counters.
int control_event_conn_bandwidth_used | ( | void | ) |
A second or more has elapsed: tell any interested control connections how much bandwidth connections have used.
int control_event_descriptors_changed | ( | smartlist_t * | routers | ) |
Called whenever we receive new router descriptors: tell any interested control connections. routers is a list of routerinfo_t's.
int int int int int int int control_event_guard | ( | const char * | nickname, |
const char * | digest, | ||
const char * | status | ||
) |
Called when the status of an entry guard with the given nickname and identity digest has changed to status: tells any controllers that care.
void control_event_hs_descriptor_content | ( | const char * | onion_address, |
const char * | desc_id, | ||
const char * | hsdir_id_digest, | ||
const char * | content | ||
) |
Send HS_DESC_CONTENT event after completion of a successful fetch from hs directory. If hsdir_id_digest is NULL, it is replaced by "UNKNOWN". If content is NULL, it is replaced by an empty string. The onion_address or desc_id set to NULL will no trigger the control event.
void control_event_hs_descriptor_created | ( | const char * | onion_address, |
const char * | desc_id, | ||
int | replica | ||
) |
send HS_DESC CREATED event when a local service generates a descriptor.
onion_address is service address. desc_id is the descriptor ID. replica is the the descriptor replica number. If it is negative, it is ignored.
void control_event_hs_descriptor_requested | ( | const char * | onion_address, |
rend_auth_type_t | auth_type, | ||
const char * | id_digest, | ||
const char * | desc_id, | ||
const char * | hsdir_index | ||
) |
send HS_DESC requested event.
rend_query is used to fetch requested onion address and auth type. hs_dir is the description of contacting hs directory. desc_id_base32 is the ID of requested hs descriptor. hsdir_index is the HSDir fetch index value for v3, an hex string.
void control_event_hs_descriptor_upload | ( | const char * | onion_address, |
const char * | id_digest, | ||
const char * | desc_id, | ||
const char * | hsdir_index | ||
) |
send HS_DESC upload event.
onion_address is service address. hs_dir is the description of contacting hs directory. desc_id is the ID of requested hs descriptor.
void control_event_hs_descriptor_upload_end | ( | const char * | action, |
const char * | onion_address, | ||
const char * | id_digest, | ||
const char * | reason | ||
) |
send HS_DESC event after got response from hs directory.
NOTE: this is an internal function used by following functions: control_event_hs_descriptor_uploaded control_event_hs_descriptor_upload_failed
So do not call this function directly.
void control_event_hs_descriptor_upload_failed | ( | const char * | id_digest, |
const char * | onion_address, | ||
const char * | reason | ||
) |
Send HS_DESC event to inform controller upload of hidden service descriptor identified by id_digest failed. If reason is not NULL, add it to REASON= field.
void control_event_hs_descriptor_uploaded | ( | const char * | id_digest, |
const char * | onion_address | ||
) |
send HS_DESC UPLOADED event
called when we successfully uploaded a hidden service descriptor.
void control_event_hsv2_descriptor_failed | ( | const rend_data_t * | rend_data, |
const char * | hsdir_id_digest, | ||
const char * | reason | ||
) |
Send HS_DESC event to inform controller that query rend_data failed to retrieve hidden service descriptor from directory identified by id_digest. If NULL, "UNKNOWN" is used. If reason is not NULL, add it to REASON= field.
void control_event_hsv2_descriptor_received | ( | const char * | onion_address, |
const rend_data_t * | rend_data, | ||
const char * | hsdir_id_digest | ||
) |
send HS_DESC RECEIVED event
called when we successfully received a hidden service descriptor.
void control_event_hsv3_descriptor_failed | ( | const char * | onion_address, |
const char * | desc_id, | ||
const char * | hsdir_id_digest, | ||
const char * | reason | ||
) |
Send HS_DESC event to inform controller that the query to onion_address failed to retrieve hidden service descriptor desc_id from directory identified by hsdir_id_digest. If NULL, "UNKNOWN" is used. If reason is not NULL, add it to REASON= field.
int control_event_is_interesting | ( | int | event | ) |
Return true iff the event with code c is being sent to any current control connection. This is useful if the amount of work needed to prepare to call the appropriate control_event_...() function is high.
void control_event_logmsg | ( | int | severity, |
uint32_t | domain, | ||
const char * | msg | ||
) |
We got a log message: tell any interested control connections.
void control_event_logmsg_pending | ( | void | ) |
Logging callback: called when there is a queued pending log callback.
int control_event_my_descriptor_changed | ( | void | ) |
Our own router descriptor has changed; tell any controllers that care.
int control_event_network_liveness_update | ( | int | liveness | ) |
The network liveness has changed; this is called from circuitstats.c whenever we receive a cell, or when timeout expires and we assume the network is down.
int control_event_networkstatus_changed | ( | smartlist_t * | statuses | ) |
Called when the routerstatus_ts statuses have changed: sends an NS event to any controller that cares.
int control_event_networkstatus_changed_single | ( | const routerstatus_t * | rs | ) |
Called when a single local_routerstatus_t has changed: Sends an NS event to any controller that cares.
int control_event_newconsensus | ( | const networkstatus_t * | consensus | ) |
Called when we get a new consensus networkstatus. Sends a NEWCONSENSUS event consisting of an NS-style line for each relay in the consensus.
int control_event_or_conn_status | ( | or_connection_t * | conn, |
or_conn_status_event_t | tp, | ||
int | reason | ||
) |
Called when the status of an OR connection conn changes: tell any interested control connections. tp is the new status for the connection. If conn has just closed or failed, then reason may be the reason why.
int control_event_signal | ( | uintptr_t | signal_num | ) |
Called when a signal has been processed from signal_callback
int control_event_stream_bandwidth | ( | edge_connection_t * | edge_conn | ) |
Print out STREAM_BW event for a single conn
int control_event_stream_bandwidth_used | ( | void | ) |
A second or more has elapsed: tell any interested control connections how much bandwidth streams have used.
int control_event_stream_status | ( | entry_connection_t * | conn, |
stream_status_event_t | tp, | ||
int | reason_code | ||
) |
Something has happened to the stream associated with AP connection conn: tell any interested control connections.
void control_event_transport_launched | ( | const char * | mode, |
const char * | transport_name, | ||
tor_addr_t * | addr, | ||
uint16_t | port | ||
) |
A new pluggable transport called transport_name was launched on addr:port. mode is either "server" or "client" depending on the mode of the pluggable transport. "650" SP "TRANSPORT_LAUNCHED" SP Mode SP Name SP Address SP Port
void control_free_all | ( | void | ) |
Free any leftover allocated memory of the control.c subsystem.
void control_per_second_events | ( | void | ) |
Run all the controller events (if any) that are scheduled to trigger once per second.
void control_ports_write_to_file | ( | void | ) |
Write all of the open control ports to ControlPortWriteToFile
void control_update_global_event_mask | ( | void | ) |
Set global_event_mask* to the bitwise OR of each live control connection's event_mask field.
smartlist_t* decode_hashed_passwords | ( | config_line_t * | passwords | ) |
Decode the hashed, base64'd passwords stored in passwords. Return a smartlist of acceptable passwords (unterminated strings of length S2K_RFC2440_SPECIFIER_LEN+DIGEST_LEN) on success, or NULL on failure.
void disable_control_logging | ( | void | ) |
Called when we are sending a log message to the controllers: suspend sending further log messages to the controllers until we're done. Used by CONN_LOG_PROTECT.
void enable_control_logging | ( | void | ) |
We're done sending a log message to the controllers: re-enable controller logging. Used by CONN_LOG_PROTECT.
char* get_controller_cookie_file_name | ( | void | ) |
Helper: Return a newly allocated string containing a path to the file where we store our authentication cookie.
void monitor_owning_controller_process | ( | const char * | process_spec | ) |
Set process_spec as Tor's owning controller process. Exit on failure.
const char* rend_auth_type_to_string | ( | rend_auth_type_t | auth_type | ) |
Convert rendezvous auth type to string for HS_DESC control events