2010-07-22 11:35:09 +02:00
|
|
|
/* Copyright (c) 2001 Matej Pfajfar.
|
|
|
|
* Copyright (c) 2001-2004, Roger Dingledine.
|
|
|
|
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
2019-01-16 18:33:22 +01:00
|
|
|
* Copyright (c) 2007-2019, The Tor Project, Inc. */
|
2010-07-22 11:35:09 +02:00
|
|
|
/* See LICENSE for licensing information */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \file control.h
|
|
|
|
* \brief Header file for control.c.
|
|
|
|
**/
|
|
|
|
|
2012-10-12 18:13:10 +02:00
|
|
|
#ifndef TOR_CONTROL_H
|
|
|
|
#define TOR_CONTROL_H
|
2010-07-22 11:35:09 +02:00
|
|
|
|
2018-06-15 16:17:27 +02:00
|
|
|
control_connection_t *TO_CONTROL_CONN(connection_t *);
|
|
|
|
|
2018-07-01 20:16:25 +02:00
|
|
|
#define CONTROL_CONN_STATE_MIN_ 1
|
|
|
|
/** State for a control connection: Authenticated and accepting v1 commands. */
|
|
|
|
#define CONTROL_CONN_STATE_OPEN 1
|
|
|
|
/** State for a control connection: Waiting for authentication; speaking
|
|
|
|
* protocol v1. */
|
|
|
|
#define CONTROL_CONN_STATE_NEEDAUTH 2
|
|
|
|
#define CONTROL_CONN_STATE_MAX_ 2
|
|
|
|
|
2011-05-09 18:13:37 +02:00
|
|
|
void control_ports_write_to_file(void);
|
|
|
|
|
2010-07-22 11:35:09 +02:00
|
|
|
/** Log information about the connection <b>conn</b>, protecting it as with
|
|
|
|
* CONN_LOG_PROTECT. Example:
|
|
|
|
*
|
|
|
|
* LOG_FN_CONN(conn, (LOG_DEBUG, "Socket %d wants to write", conn->s));
|
|
|
|
**/
|
|
|
|
#define LOG_FN_CONN(conn, args) \
|
|
|
|
CONN_LOG_PROTECT(conn, log_fn args)
|
|
|
|
|
2017-10-18 19:36:53 +02:00
|
|
|
#define CC_LOCAL_FD_IS_OWNER (1u<<0)
|
|
|
|
#define CC_LOCAL_FD_IS_AUTHENTICATED (1u<<1)
|
|
|
|
int control_connection_add_local_fd(tor_socket_t sock, unsigned flags);
|
|
|
|
|
2010-07-22 11:35:09 +02:00
|
|
|
int connection_control_finished_flushing(control_connection_t *conn);
|
|
|
|
int connection_control_reached_eof(control_connection_t *conn);
|
2011-05-20 01:27:51 +02:00
|
|
|
void connection_control_closed(control_connection_t *conn);
|
|
|
|
|
2010-07-22 11:35:09 +02:00
|
|
|
int connection_control_process_inbuf(control_connection_t *conn);
|
|
|
|
|
2012-12-05 18:16:04 +01:00
|
|
|
int init_control_cookie_authentication(int enabled);
|
2014-05-23 01:56:56 +02:00
|
|
|
char *get_controller_cookie_file_name(void);
|
2018-07-01 20:58:29 +02:00
|
|
|
struct config_line_t;
|
2018-07-01 17:32:11 +02:00
|
|
|
smartlist_t *decode_hashed_passwords(struct config_line_t *passwords);
|
2010-07-22 11:35:09 +02:00
|
|
|
void disable_control_logging(void);
|
|
|
|
void enable_control_logging(void);
|
|
|
|
|
2011-05-16 19:25:59 +02:00
|
|
|
void monitor_owning_controller_process(const char *process_spec);
|
2011-05-15 17:23:04 +02:00
|
|
|
|
2013-10-09 17:13:06 +02:00
|
|
|
const char *rend_auth_type_to_string(rend_auth_type_t auth_type);
|
2014-02-05 01:33:48 +01:00
|
|
|
MOCK_DECL(const char *, node_describe_longname_by_id,(const char *id_digest));
|
2013-08-14 16:16:06 +02:00
|
|
|
void control_free_all(void);
|
2010-07-22 11:35:09 +02:00
|
|
|
|
|
|
|
#ifdef CONTROL_PRIVATE
|
2018-07-01 19:04:21 +02:00
|
|
|
#include "lib/crypt_ops/crypto_ed25519.h"
|
|
|
|
|
2017-12-05 20:24:00 +01:00
|
|
|
/* ADD_ONION secret key to create an ephemeral service. The command supports
|
|
|
|
* multiple versions so this union stores the key and passes it to the HS
|
|
|
|
* subsystem depending on the requested version. */
|
|
|
|
typedef union add_onion_secret_key_t {
|
|
|
|
/* Hidden service v2 secret key. */
|
|
|
|
crypto_pk_t *v2;
|
|
|
|
/* Hidden service v3 secret key. */
|
|
|
|
ed25519_secret_key_t *v3;
|
|
|
|
} add_onion_secret_key_t;
|
|
|
|
|
2017-11-09 18:20:29 +01:00
|
|
|
STATIC int add_onion_helper_keyarg(const char *arg, int discard_pk,
|
|
|
|
const char **key_new_alg_out,
|
2017-12-05 20:24:00 +01:00
|
|
|
char **key_new_blob_out,
|
|
|
|
add_onion_secret_key_t *decoded_key,
|
2017-11-09 18:20:29 +01:00
|
|
|
int *hs_version, char **err_msg_out);
|
|
|
|
|
2015-04-14 05:08:31 +02:00
|
|
|
STATIC rend_authorized_client_t *
|
|
|
|
add_onion_helper_clientauth(const char *arg, int *created, char **err_msg_out);
|
2016-06-28 23:30:57 +02:00
|
|
|
|
2017-01-28 21:49:18 +01:00
|
|
|
STATIC int getinfo_helper_onions(
|
|
|
|
control_connection_t *control_conn,
|
|
|
|
const char *question,
|
|
|
|
char **answer,
|
|
|
|
const char **errmsg);
|
2016-06-28 23:30:57 +02:00
|
|
|
STATIC void getinfo_helper_downloads_networkstatus(
|
|
|
|
const char *flavor,
|
|
|
|
download_status_t **dl_to_emit,
|
|
|
|
const char **errmsg);
|
|
|
|
STATIC void getinfo_helper_downloads_cert(
|
|
|
|
const char *fp_sk_req,
|
|
|
|
download_status_t **dl_to_emit,
|
|
|
|
smartlist_t **digest_list,
|
|
|
|
const char **errmsg);
|
|
|
|
STATIC void getinfo_helper_downloads_desc(
|
|
|
|
const char *desc_req,
|
|
|
|
download_status_t **dl_to_emit,
|
|
|
|
smartlist_t **digest_list,
|
|
|
|
const char **errmsg);
|
|
|
|
STATIC void getinfo_helper_downloads_bridge(
|
|
|
|
const char *bridge_req,
|
|
|
|
download_status_t **dl_to_emit,
|
|
|
|
smartlist_t **digest_list,
|
|
|
|
const char **errmsg);
|
|
|
|
STATIC int getinfo_helper_downloads(
|
|
|
|
control_connection_t *control_conn,
|
|
|
|
const char *question, char **answer,
|
|
|
|
const char **errmsg);
|
2017-04-22 02:17:27 +02:00
|
|
|
STATIC int getinfo_helper_dir(
|
|
|
|
control_connection_t *control_conn,
|
|
|
|
const char *question, char **answer,
|
|
|
|
const char **errmsg);
|
2018-04-17 02:16:37 +02:00
|
|
|
STATIC int getinfo_helper_current_time(
|
|
|
|
control_connection_t *control_conn,
|
|
|
|
const char *question, char **answer,
|
|
|
|
const char **errmsg);
|
2016-06-28 23:30:57 +02:00
|
|
|
|
2017-09-15 22:24:44 +02:00
|
|
|
#endif /* defined(CONTROL_PRIVATE) */
|
2010-07-22 11:35:09 +02:00
|
|
|
|
2019-03-25 17:11:59 +01:00
|
|
|
#ifdef CONTROL_MODULE_PRIVATE
|
|
|
|
int get_cached_network_liveness(void);
|
|
|
|
void set_cached_network_liveness(int liveness);
|
|
|
|
#endif /* defined(CONTROL_MODULE_PRIVATE) */
|
|
|
|
|
2017-09-15 22:24:44 +02:00
|
|
|
#endif /* !defined(TOR_CONTROL_H) */
|