mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-09-21 13:34:59 +02:00
Fix warnings from doxygen
Most of these are simple. The only nontrivial part is that our pattern for using ENUM_BF was confusing doxygen by making declarations that didn't look like declarations.
This commit is contained in:
parent
c3dd2e3d9e
commit
d5e11f21cc
6
changes/doxygen_fixes
Normal file
6
changes/doxygen_fixes
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
o Documentation:
|
||||||
|
- Resolve warnings from Doxygen.
|
||||||
|
|
||||||
|
o Code simplification and refactoring:
|
||||||
|
- Change our use of the ENUM_BF macro to avoid declarations that
|
||||||
|
confuse Doxygen.
|
@ -182,7 +182,7 @@ tor_addr_make_unspec(tor_addr_t *a)
|
|||||||
a->family = AF_UNSPEC;
|
a->family = AF_UNSPEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set address <a>a</b> to the null address in address family <b>family</b>.
|
/** Set address <b>a</b> to the null address in address family <b>family</b>.
|
||||||
* The null address for AF_INET is 0.0.0.0. The null address for AF_INET6 is
|
* The null address for AF_INET is 0.0.0.0. The null address for AF_INET6 is
|
||||||
* [::]. AF_UNSPEC is all null. */
|
* [::]. AF_UNSPEC is all null. */
|
||||||
void
|
void
|
||||||
@ -1463,8 +1463,8 @@ is_internal_IP(uint32_t ip, int for_listening)
|
|||||||
* allocated string holding the address portion and *<b>port_out</b>
|
* allocated string holding the address portion and *<b>port_out</b>
|
||||||
* to the port.
|
* to the port.
|
||||||
*
|
*
|
||||||
* Don't do DNS lookups and don't allow domain names in the <ip> field.
|
* Don't do DNS lookups and don't allow domain names in the "ip" field.
|
||||||
* Don't accept <b>addrport</b> of the form "<ip>" or "<ip>:0".
|
* Don't accept <b>addrport</b> of the form "ip" or "ip:0".
|
||||||
*
|
*
|
||||||
* Return 0 on success, -1 on failure. */
|
* Return 0 on success, -1 on failure. */
|
||||||
int
|
int
|
||||||
|
@ -1594,7 +1594,7 @@ struct crypto_digest_t {
|
|||||||
SHA256_CTX sha2; /**< state for SHA256 */
|
SHA256_CTX sha2; /**< state for SHA256 */
|
||||||
} d; /**< State for the digest we're using. Only one member of the
|
} d; /**< State for the digest we're using. Only one member of the
|
||||||
* union is usable, depending on the value of <b>algorithm</b>. */
|
* union is usable, depending on the value of <b>algorithm</b>. */
|
||||||
ENUM_BF(digest_algorithm_t) algorithm : 8; /**< Which algorithm is in use? */
|
digest_algorithm_bitfield_t algorithm : 8; /**< Which algorithm is in use? */
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Allocate and return a new digest object to compute SHA1 digests.
|
/** Allocate and return a new digest object to compute SHA1 digests.
|
||||||
|
@ -89,6 +89,7 @@ typedef enum {
|
|||||||
DIGEST_SHA256 = 1,
|
DIGEST_SHA256 = 1,
|
||||||
} digest_algorithm_t;
|
} digest_algorithm_t;
|
||||||
#define N_DIGEST_ALGORITHMS (DIGEST_SHA256+1)
|
#define N_DIGEST_ALGORITHMS (DIGEST_SHA256+1)
|
||||||
|
#define digest_algorithm_bitfield_t ENUM_BF(digest_algorithm_t)
|
||||||
|
|
||||||
/** A set of all the digests we know how to compute, taken on a single
|
/** A set of all the digests we know how to compute, taken on a single
|
||||||
* string. Any digests that are shorter than 256 bits are right-padded
|
* string. Any digests that are shorter than 256 bits are right-padded
|
||||||
|
@ -149,6 +149,7 @@ typedef enum {
|
|||||||
TOR_TLS_ST_SENTCLOSE, TOR_TLS_ST_CLOSED, TOR_TLS_ST_RENEGOTIATE,
|
TOR_TLS_ST_SENTCLOSE, TOR_TLS_ST_CLOSED, TOR_TLS_ST_RENEGOTIATE,
|
||||||
TOR_TLS_ST_BUFFEREVENT
|
TOR_TLS_ST_BUFFEREVENT
|
||||||
} tor_tls_state_t;
|
} tor_tls_state_t;
|
||||||
|
#define tor_tls_state_bitfield_t ENUM_BF(tor_tls_state_t)
|
||||||
|
|
||||||
/** Holds a SSL object and its associated data. Members are only
|
/** Holds a SSL object and its associated data. Members are only
|
||||||
* accessed from within tortls.c.
|
* accessed from within tortls.c.
|
||||||
@ -159,7 +160,7 @@ struct tor_tls_t {
|
|||||||
SSL *ssl; /**< An OpenSSL SSL object. */
|
SSL *ssl; /**< An OpenSSL SSL object. */
|
||||||
int socket; /**< The underlying file descriptor for this TLS connection. */
|
int socket; /**< The underlying file descriptor for this TLS connection. */
|
||||||
char *address; /**< An address to log when describing this connection. */
|
char *address; /**< An address to log when describing this connection. */
|
||||||
ENUM_BF(tor_tls_state_t) state : 3; /**< The current SSL state,
|
tor_tls_state_bitfield_t state : 3; /**< The current SSL state,
|
||||||
* depending on which operations
|
* depending on which operations
|
||||||
* have completed successfully. */
|
* have completed successfully. */
|
||||||
unsigned int isServer:1; /**< True iff this is a server-side connection */
|
unsigned int isServer:1; /**< True iff this is a server-side connection */
|
||||||
|
@ -898,8 +898,8 @@ tor_digest_is_zero(const char *digest)
|
|||||||
return tor_memeq(digest, ZERO_DIGEST, DIGEST_LEN);
|
return tor_memeq(digest, ZERO_DIGEST, DIGEST_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return true if <b>string</b> is a valid '<key>=[<value>]' string.
|
/** Return true if <b>string</b> is a valid 'key=[value]' string.
|
||||||
* <value> is optional, to indicate the empty string. Log at logging
|
* "value" is optional, to indicate the empty string. Log at logging
|
||||||
* <b>severity</b> if something ugly happens. */
|
* <b>severity</b> if something ugly happens. */
|
||||||
int
|
int
|
||||||
string_is_key_value(int severity, const char *string)
|
string_is_key_value(int severity, const char *string)
|
||||||
@ -3026,7 +3026,7 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
|
|||||||
/** Minimal sscanf replacement: parse <b>buf</b> according to <b>pattern</b>
|
/** Minimal sscanf replacement: parse <b>buf</b> according to <b>pattern</b>
|
||||||
* and store the results in the corresponding argument fields. Differs from
|
* and store the results in the corresponding argument fields. Differs from
|
||||||
* sscanf in that:
|
* sscanf in that:
|
||||||
* <ul><li>It only handles %u, %lu, %x, %lx, %<NUM>s, %d, %ld, %lf, and %c.
|
* <ul><li>It only handles %u, %lu, %x, %lx, %[NUM]s, %d, %ld, %lf, and %c.
|
||||||
* <li>It only handles decimal inputs for %lf. (12.3, not 1.23e1)
|
* <li>It only handles decimal inputs for %lf. (12.3, not 1.23e1)
|
||||||
* <li>It does not handle arbitrarily long widths.
|
* <li>It does not handle arbitrarily long widths.
|
||||||
* <li>Numbers do not consume any space characters.
|
* <li>Numbers do not consume any space characters.
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
char *new_address;
|
char *new_address;
|
||||||
time_t expires;
|
time_t expires;
|
||||||
ENUM_BF(addressmap_entry_source_t) source:3;
|
addressmap_entry_source_bitfield_t source:3;
|
||||||
unsigned src_wildcard:1;
|
unsigned src_wildcard:1;
|
||||||
unsigned dst_wildcard:1;
|
unsigned dst_wildcard:1;
|
||||||
short num_resolve_failures;
|
short num_resolve_failures;
|
||||||
|
@ -21,7 +21,7 @@ struct cell_queue_entry_s;
|
|||||||
TOR_SIMPLEQ_HEAD(chan_cell_queue, cell_queue_entry_s) incoming_queue;
|
TOR_SIMPLEQ_HEAD(chan_cell_queue, cell_queue_entry_s) incoming_queue;
|
||||||
typedef struct chan_cell_queue chan_cell_queue_t;
|
typedef struct chan_cell_queue chan_cell_queue_t;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Channel struct; see the channel_t typedef in or.h. A channel is an
|
* Channel struct; see the channel_t typedef in or.h. A channel is an
|
||||||
* abstract interface for the OR-to-OR connection, similar to connection_or_t,
|
* abstract interface for the OR-to-OR connection, similar to connection_or_t,
|
||||||
* but without the strong coupling to the underlying TLS implementation. They
|
* but without the strong coupling to the underlying TLS implementation. They
|
||||||
@ -31,18 +31,18 @@ typedef struct chan_cell_queue chan_cell_queue_t;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
struct channel_s {
|
struct channel_s {
|
||||||
/* Magic number for type-checking cast macros */
|
/** Magic number for type-checking cast macros */
|
||||||
uint32_t magic;
|
uint32_t magic;
|
||||||
|
|
||||||
/* Current channel state */
|
/** Current channel state */
|
||||||
channel_state_t state;
|
channel_state_t state;
|
||||||
|
|
||||||
/* Globally unique ID number for a channel over the lifetime of a Tor
|
/** Globally unique ID number for a channel over the lifetime of a Tor
|
||||||
* process.
|
* process.
|
||||||
*/
|
*/
|
||||||
uint64_t global_identifier;
|
uint64_t global_identifier;
|
||||||
|
|
||||||
/* Should we expect to see this channel in the channel lists? */
|
/** Should we expect to see this channel in the channel lists? */
|
||||||
unsigned char registered:1;
|
unsigned char registered:1;
|
||||||
|
|
||||||
/** has this channel ever been open? */
|
/** has this channel ever been open? */
|
||||||
@ -57,28 +57,28 @@ struct channel_s {
|
|||||||
CHANNEL_CLOSE_FOR_ERROR
|
CHANNEL_CLOSE_FOR_ERROR
|
||||||
} reason_for_closing;
|
} reason_for_closing;
|
||||||
|
|
||||||
/* Timestamps for both cell channels and listeners */
|
/** Timestamps for both cell channels and listeners */
|
||||||
time_t timestamp_created; /* Channel created */
|
time_t timestamp_created; /* Channel created */
|
||||||
time_t timestamp_active; /* Any activity */
|
time_t timestamp_active; /* Any activity */
|
||||||
|
|
||||||
/* Methods implemented by the lower layer */
|
/* Methods implemented by the lower layer */
|
||||||
|
|
||||||
/* Free a channel */
|
/** Free a channel */
|
||||||
void (*free)(channel_t *);
|
void (*free)(channel_t *);
|
||||||
/* Close an open channel */
|
/** Close an open channel */
|
||||||
void (*close)(channel_t *);
|
void (*close)(channel_t *);
|
||||||
/* Describe the transport subclass for this channel */
|
/** Describe the transport subclass for this channel */
|
||||||
const char * (*describe_transport)(channel_t *);
|
const char * (*describe_transport)(channel_t *);
|
||||||
/* Optional method to dump transport-specific statistics on the channel */
|
/** Optional method to dump transport-specific statistics on the channel */
|
||||||
void (*dumpstats)(channel_t *, int);
|
void (*dumpstats)(channel_t *, int);
|
||||||
|
|
||||||
/* Registered handlers for incoming cells */
|
/** Registered handlers for incoming cells */
|
||||||
channel_cell_handler_fn_ptr cell_handler;
|
channel_cell_handler_fn_ptr cell_handler;
|
||||||
channel_var_cell_handler_fn_ptr var_cell_handler;
|
channel_var_cell_handler_fn_ptr var_cell_handler;
|
||||||
|
|
||||||
/* Methods implemented by the lower layer */
|
/* Methods implemented by the lower layer */
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Ask the underlying transport what the remote endpoint address is, in
|
* Ask the underlying transport what the remote endpoint address is, in
|
||||||
* a tor_addr_t. This is optional and subclasses may leave this NULL.
|
* a tor_addr_t. This is optional and subclasses may leave this NULL.
|
||||||
* If they implement it, they should write the address out to the
|
* If they implement it, they should write the address out to the
|
||||||
@ -90,75 +90,75 @@ struct channel_s {
|
|||||||
|
|
||||||
#define GRD_FLAG_ORIGINAL 1
|
#define GRD_FLAG_ORIGINAL 1
|
||||||
#define GRD_FLAG_ADDR_ONLY 2
|
#define GRD_FLAG_ADDR_ONLY 2
|
||||||
/*
|
/**
|
||||||
* Get a text description of the remote endpoint; canonicalized if the flag
|
* Get a text description of the remote endpoint; canonicalized if the flag
|
||||||
* GRD_FLAG_ORIGINAL is not set, or the one we originally connected
|
* GRD_FLAG_ORIGINAL is not set, or the one we originally connected
|
||||||
* to/received from if it is. If GRD_FLAG_ADDR_ONLY is set, we return only
|
* to/received from if it is. If GRD_FLAG_ADDR_ONLY is set, we return only
|
||||||
* the original address.
|
* the original address.
|
||||||
*/
|
*/
|
||||||
const char * (*get_remote_descr)(channel_t *, int);
|
const char * (*get_remote_descr)(channel_t *, int);
|
||||||
/* Check if the lower layer has queued writes */
|
/** Check if the lower layer has queued writes */
|
||||||
int (*has_queued_writes)(channel_t *);
|
int (*has_queued_writes)(channel_t *);
|
||||||
/*
|
/**
|
||||||
* If the second param is zero, ask the lower layer if this is
|
* If the second param is zero, ask the lower layer if this is
|
||||||
* 'canonical', for a transport-specific definition of canonical; if
|
* 'canonical', for a transport-specific definition of canonical; if
|
||||||
* it is 1, ask if the answer to the preceding query is safe to rely
|
* it is 1, ask if the answer to the preceding query is safe to rely
|
||||||
* on.
|
* on.
|
||||||
*/
|
*/
|
||||||
int (*is_canonical)(channel_t *, int);
|
int (*is_canonical)(channel_t *, int);
|
||||||
/* Check if this channel matches a specified extend_info_t */
|
/** Check if this channel matches a specified extend_info_t */
|
||||||
int (*matches_extend_info)(channel_t *, extend_info_t *);
|
int (*matches_extend_info)(channel_t *, extend_info_t *);
|
||||||
/* Check if this channel matches a target address when extending */
|
/** Check if this channel matches a target address when extending */
|
||||||
int (*matches_target)(channel_t *, const tor_addr_t *);
|
int (*matches_target)(channel_t *, const tor_addr_t *);
|
||||||
/* Write a cell to an open channel */
|
/** Write a cell to an open channel */
|
||||||
int (*write_cell)(channel_t *, cell_t *);
|
int (*write_cell)(channel_t *, cell_t *);
|
||||||
/* Write a packed cell to an open channel */
|
/** Write a packed cell to an open channel */
|
||||||
int (*write_packed_cell)(channel_t *, packed_cell_t *);
|
int (*write_packed_cell)(channel_t *, packed_cell_t *);
|
||||||
/* Write a variable-length cell to an open channel */
|
/** Write a variable-length cell to an open channel */
|
||||||
int (*write_var_cell)(channel_t *, var_cell_t *);
|
int (*write_var_cell)(channel_t *, var_cell_t *);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Hash of the public RSA key for the other side's identity key, or
|
* Hash of the public RSA key for the other side's identity key, or
|
||||||
* zeroes if the other side hasn't shown us a valid identity key.
|
* zeroes if the other side hasn't shown us a valid identity key.
|
||||||
*/
|
*/
|
||||||
char identity_digest[DIGEST_LEN];
|
char identity_digest[DIGEST_LEN];
|
||||||
/* Nickname of the OR on the other side, or NULL if none. */
|
/** Nickname of the OR on the other side, or NULL if none. */
|
||||||
char *nickname;
|
char *nickname;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Linked list of channels with the same identity digest, for the
|
* Linked list of channels with the same identity digest, for the
|
||||||
* digest->channel map
|
* digest->channel map
|
||||||
*/
|
*/
|
||||||
TOR_LIST_ENTRY(channel_s) next_with_same_id;
|
TOR_LIST_ENTRY(channel_s) next_with_same_id;
|
||||||
|
|
||||||
/* List of incoming cells to handle */
|
/** List of incoming cells to handle */
|
||||||
chan_cell_queue_t incoming_queue;
|
chan_cell_queue_t incoming_queue;
|
||||||
|
|
||||||
/* List of queued outgoing cells */
|
/** List of queued outgoing cells */
|
||||||
chan_cell_queue_t outgoing_queue;
|
chan_cell_queue_t outgoing_queue;
|
||||||
|
|
||||||
/* Circuit mux for circuits sending on this channel */
|
/** Circuit mux for circuits sending on this channel */
|
||||||
circuitmux_t *cmux;
|
circuitmux_t *cmux;
|
||||||
|
|
||||||
/* Circuit ID generation stuff for use by circuitbuild.c */
|
/** Circuit ID generation stuff for use by circuitbuild.c */
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* When we send CREATE cells along this connection, which half of the
|
* When we send CREATE cells along this connection, which half of the
|
||||||
* space should we use?
|
* space should we use?
|
||||||
*/
|
*/
|
||||||
ENUM_BF(circ_id_type_t) circ_id_type:2;
|
circ_id_type_bitfield_t circ_id_type:2;
|
||||||
/** DOCDOC*/
|
/** DOCDOC*/
|
||||||
unsigned wide_circ_ids:1;
|
unsigned wide_circ_ids:1;
|
||||||
/*
|
/**
|
||||||
* Which circ_id do we try to use next on this connection? This is
|
* Which circ_id do we try to use next on this connection? This is
|
||||||
* always in the range 0..1<<15-1.
|
* always in the range 0..1<<15-1.
|
||||||
*/
|
*/
|
||||||
circid_t next_circ_id;
|
circid_t next_circ_id;
|
||||||
|
|
||||||
/* For how many circuits are we n_chan? What about p_chan? */
|
/** For how many circuits are we n_chan? What about p_chan? */
|
||||||
unsigned int num_n_circuits, num_p_circuits;
|
unsigned int num_n_circuits, num_p_circuits;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* True iff this channel shouldn't get any new circs attached to it,
|
* True iff this channel shouldn't get any new circs attached to it,
|
||||||
* because the connection is too old, or because there's a better one.
|
* because the connection is too old, or because there's a better one.
|
||||||
* More generally, this flag is used to note an unhealthy connection;
|
* More generally, this flag is used to note an unhealthy connection;
|
||||||
@ -210,7 +210,7 @@ struct channel_listener_s {
|
|||||||
*/
|
*/
|
||||||
uint64_t global_identifier;
|
uint64_t global_identifier;
|
||||||
|
|
||||||
/* Should we expect to see this channel in the channel lists? */
|
/** Should we expect to see this channel in the channel lists? */
|
||||||
unsigned char registered:1;
|
unsigned char registered:1;
|
||||||
|
|
||||||
/** Why did we close?
|
/** Why did we close?
|
||||||
@ -222,31 +222,31 @@ struct channel_listener_s {
|
|||||||
CHANNEL_LISTENER_CLOSE_FOR_ERROR
|
CHANNEL_LISTENER_CLOSE_FOR_ERROR
|
||||||
} reason_for_closing;
|
} reason_for_closing;
|
||||||
|
|
||||||
/* Timestamps for both cell channels and listeners */
|
/** Timestamps for both cell channels and listeners */
|
||||||
time_t timestamp_created; /* Channel created */
|
time_t timestamp_created; /* Channel created */
|
||||||
time_t timestamp_active; /* Any activity */
|
time_t timestamp_active; /* Any activity */
|
||||||
|
|
||||||
/* Methods implemented by the lower layer */
|
/* Methods implemented by the lower layer */
|
||||||
|
|
||||||
/* Free a channel */
|
/** Free a channel */
|
||||||
void (*free)(channel_listener_t *);
|
void (*free)(channel_listener_t *);
|
||||||
/* Close an open channel */
|
/** Close an open channel */
|
||||||
void (*close)(channel_listener_t *);
|
void (*close)(channel_listener_t *);
|
||||||
/* Describe the transport subclass for this channel */
|
/** Describe the transport subclass for this channel */
|
||||||
const char * (*describe_transport)(channel_listener_t *);
|
const char * (*describe_transport)(channel_listener_t *);
|
||||||
/* Optional method to dump transport-specific statistics on the channel */
|
/** Optional method to dump transport-specific statistics on the channel */
|
||||||
void (*dumpstats)(channel_listener_t *, int);
|
void (*dumpstats)(channel_listener_t *, int);
|
||||||
|
|
||||||
/* Registered listen handler to call on incoming connection */
|
/** Registered listen handler to call on incoming connection */
|
||||||
channel_listener_fn_ptr listener;
|
channel_listener_fn_ptr listener;
|
||||||
|
|
||||||
/* List of pending incoming connections */
|
/** List of pending incoming connections */
|
||||||
smartlist_t *incoming_list;
|
smartlist_t *incoming_list;
|
||||||
|
|
||||||
/* Timestamps for listeners */
|
/** Timestamps for listeners */
|
||||||
time_t timestamp_accepted;
|
time_t timestamp_accepted;
|
||||||
|
|
||||||
/* Counters for listeners */
|
/** Counters for listeners */
|
||||||
uint64_t n_accepted;
|
uint64_t n_accepted;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -215,7 +215,7 @@ connection_or_clear_ext_or_id_map(void)
|
|||||||
orconn_ext_or_id_map = NULL;
|
orconn_ext_or_id_map = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Creates an Extended ORPort identifier for <b>conn<b/> and deposits
|
/** Creates an Extended ORPort identifier for <b>conn</b> and deposits
|
||||||
* it into the global list of identifiers. */
|
* it into the global list of identifiers. */
|
||||||
void
|
void
|
||||||
connection_or_set_ext_or_identifier(or_connection_t *conn)
|
connection_or_set_ext_or_identifier(or_connection_t *conn)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
/* See LICENSE for licensing information */
|
/* See LICENSE for licensing information */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file guardnodes.h
|
* \file entrynodes.h
|
||||||
* \brief Header file for circuitbuild.c.
|
* \brief Header file for circuitbuild.c.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
@ -812,7 +812,7 @@ char *
|
|||||||
geoip_get_transport_history(void)
|
geoip_get_transport_history(void)
|
||||||
{
|
{
|
||||||
unsigned granularity = IP_GRANULARITY;
|
unsigned granularity = IP_GRANULARITY;
|
||||||
/** String hash table <name of transport> -> <number of users>. */
|
/** String hash table (name of transport) -> (number of users). */
|
||||||
strmap_t *transport_counts = strmap_new();
|
strmap_t *transport_counts = strmap_new();
|
||||||
|
|
||||||
/** Smartlist that contains copies of the names of the transports
|
/** Smartlist that contains copies of the names of the transports
|
||||||
|
@ -1196,7 +1196,7 @@ run_scheduled_events(time_t now)
|
|||||||
int i;
|
int i;
|
||||||
int have_dir_info;
|
int have_dir_info;
|
||||||
|
|
||||||
/** 0. See if we've been asked to shut down and our timeout has
|
/* 0. See if we've been asked to shut down and our timeout has
|
||||||
* expired; or if our bandwidth limits are exhausted and we
|
* expired; or if our bandwidth limits are exhausted and we
|
||||||
* should hibernate; or if it's time to wake up from hibernation.
|
* should hibernate; or if it's time to wake up from hibernation.
|
||||||
*/
|
*/
|
||||||
@ -1213,7 +1213,7 @@ run_scheduled_events(time_t now)
|
|||||||
/* 0c. If we've deferred log messages for the controller, handle them now */
|
/* 0c. If we've deferred log messages for the controller, handle them now */
|
||||||
flush_pending_log_callbacks();
|
flush_pending_log_callbacks();
|
||||||
|
|
||||||
/** 1a. Every MIN_ONION_KEY_LIFETIME seconds, rotate the onion keys,
|
/* 1a. Every MIN_ONION_KEY_LIFETIME seconds, rotate the onion keys,
|
||||||
* shut down and restart all cpuworkers, and update the directory if
|
* shut down and restart all cpuworkers, and update the directory if
|
||||||
* necessary.
|
* necessary.
|
||||||
*/
|
*/
|
||||||
@ -1247,7 +1247,7 @@ run_scheduled_events(time_t now)
|
|||||||
if (options->UseBridges)
|
if (options->UseBridges)
|
||||||
fetch_bridge_descriptors(options, now);
|
fetch_bridge_descriptors(options, now);
|
||||||
|
|
||||||
/** 1b. Every MAX_SSL_KEY_LIFETIME_INTERNAL seconds, we change our
|
/* 1b. Every MAX_SSL_KEY_LIFETIME_INTERNAL seconds, we change our
|
||||||
* TLS context. */
|
* TLS context. */
|
||||||
if (!last_rotated_x509_certificate)
|
if (!last_rotated_x509_certificate)
|
||||||
last_rotated_x509_certificate = now;
|
last_rotated_x509_certificate = now;
|
||||||
@ -1273,7 +1273,7 @@ run_scheduled_events(time_t now)
|
|||||||
time_to_add_entropy = now + ENTROPY_INTERVAL;
|
time_to_add_entropy = now + ENTROPY_INTERVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 1c. If we have to change the accounting interval or record
|
/* 1c. If we have to change the accounting interval or record
|
||||||
* bandwidth used in this accounting interval, do so. */
|
* bandwidth used in this accounting interval, do so. */
|
||||||
if (accounting_is_enabled(options))
|
if (accounting_is_enabled(options))
|
||||||
accounting_run_housekeeping(now);
|
accounting_run_housekeeping(now);
|
||||||
@ -1286,7 +1286,7 @@ run_scheduled_events(time_t now)
|
|||||||
dirserv_test_reachability(now);
|
dirserv_test_reachability(now);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 1d. Periodically, we discount older stability information so that new
|
/* 1d. Periodically, we discount older stability information so that new
|
||||||
* stability info counts more, and save the stability information to disk as
|
* stability info counts more, and save the stability information to disk as
|
||||||
* appropriate. */
|
* appropriate. */
|
||||||
if (time_to_downrate_stability < now)
|
if (time_to_downrate_stability < now)
|
||||||
@ -1405,7 +1405,7 @@ run_scheduled_events(time_t now)
|
|||||||
dns_init();
|
dns_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 2. Periodically, we consider force-uploading our descriptor
|
/* 2. Periodically, we consider force-uploading our descriptor
|
||||||
* (if we've passed our internal checks). */
|
* (if we've passed our internal checks). */
|
||||||
|
|
||||||
/** How often do we check whether part of our router info has changed in a
|
/** How often do we check whether part of our router info has changed in a
|
||||||
@ -1465,11 +1465,11 @@ run_scheduled_events(time_t now)
|
|||||||
update_networkstatus_downloads(now);
|
update_networkstatus_downloads(now);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 2c. Let directory voting happen. */
|
/* 2c. Let directory voting happen. */
|
||||||
if (authdir_mode_v3(options))
|
if (authdir_mode_v3(options))
|
||||||
dirvote_act(options, now);
|
dirvote_act(options, now);
|
||||||
|
|
||||||
/** 3a. Every second, we examine pending circuits and prune the
|
/* 3a. Every second, we examine pending circuits and prune the
|
||||||
* ones which have been pending for more than a few seconds.
|
* ones which have been pending for more than a few seconds.
|
||||||
* We do this before step 4, so it can try building more if
|
* We do this before step 4, so it can try building more if
|
||||||
* it's not comfortable with the number of available circuits.
|
* it's not comfortable with the number of available circuits.
|
||||||
@ -1478,24 +1478,24 @@ run_scheduled_events(time_t now)
|
|||||||
* it can't, currently), we should do this more often.) */
|
* it can't, currently), we should do this more often.) */
|
||||||
circuit_expire_building();
|
circuit_expire_building();
|
||||||
|
|
||||||
/** 3b. Also look at pending streams and prune the ones that 'began'
|
/* 3b. Also look at pending streams and prune the ones that 'began'
|
||||||
* a long time ago but haven't gotten a 'connected' yet.
|
* a long time ago but haven't gotten a 'connected' yet.
|
||||||
* Do this before step 4, so we can put them back into pending
|
* Do this before step 4, so we can put them back into pending
|
||||||
* state to be picked up by the new circuit.
|
* state to be picked up by the new circuit.
|
||||||
*/
|
*/
|
||||||
connection_ap_expire_beginning();
|
connection_ap_expire_beginning();
|
||||||
|
|
||||||
/** 3c. And expire connections that we've held open for too long.
|
/* 3c. And expire connections that we've held open for too long.
|
||||||
*/
|
*/
|
||||||
connection_expire_held_open();
|
connection_expire_held_open();
|
||||||
|
|
||||||
/** 3d. And every 60 seconds, we relaunch listeners if any died. */
|
/* 3d. And every 60 seconds, we relaunch listeners if any died. */
|
||||||
if (!net_is_disabled() && time_to_check_listeners < now) {
|
if (!net_is_disabled() && time_to_check_listeners < now) {
|
||||||
retry_all_listeners(NULL, NULL, 0);
|
retry_all_listeners(NULL, NULL, 0);
|
||||||
time_to_check_listeners = now+60;
|
time_to_check_listeners = now+60;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 4. Every second, we try a new circuit if there are no valid
|
/* 4. Every second, we try a new circuit if there are no valid
|
||||||
* circuits. Every NewCircuitPeriod seconds, we expire circuits
|
* circuits. Every NewCircuitPeriod seconds, we expire circuits
|
||||||
* that became dirty more than MaxCircuitDirtiness seconds ago,
|
* that became dirty more than MaxCircuitDirtiness seconds ago,
|
||||||
* and we make a new circ if there are no clean circuits.
|
* and we make a new circ if there are no clean circuits.
|
||||||
@ -1508,7 +1508,7 @@ run_scheduled_events(time_t now)
|
|||||||
if (now % 10 == 5)
|
if (now % 10 == 5)
|
||||||
circuit_expire_old_circuits_serverside(now);
|
circuit_expire_old_circuits_serverside(now);
|
||||||
|
|
||||||
/** 5. We do housekeeping for each connection... */
|
/* 5. We do housekeeping for each connection... */
|
||||||
connection_or_set_bad_connections(NULL, 0);
|
connection_or_set_bad_connections(NULL, 0);
|
||||||
for (i=0;i<smartlist_len(connection_array);i++) {
|
for (i=0;i<smartlist_len(connection_array);i++) {
|
||||||
run_connection_housekeeping(i, now);
|
run_connection_housekeeping(i, now);
|
||||||
@ -1528,30 +1528,30 @@ run_scheduled_events(time_t now)
|
|||||||
time_to_shrink_memory = now + MEM_SHRINK_INTERVAL;
|
time_to_shrink_memory = now + MEM_SHRINK_INTERVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 6. And remove any marked circuits... */
|
/* 6. And remove any marked circuits... */
|
||||||
circuit_close_all_marked();
|
circuit_close_all_marked();
|
||||||
|
|
||||||
/** 7. And upload service descriptors if necessary. */
|
/* 7. And upload service descriptors if necessary. */
|
||||||
if (can_complete_circuit && !net_is_disabled()) {
|
if (can_complete_circuit && !net_is_disabled()) {
|
||||||
rend_consider_services_upload(now);
|
rend_consider_services_upload(now);
|
||||||
rend_consider_descriptor_republication();
|
rend_consider_descriptor_republication();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 8. and blow away any connections that need to die. have to do this now,
|
/* 8. and blow away any connections that need to die. have to do this now,
|
||||||
* because if we marked a conn for close and left its socket -1, then
|
* because if we marked a conn for close and left its socket -1, then
|
||||||
* we'll pass it to poll/select and bad things will happen.
|
* we'll pass it to poll/select and bad things will happen.
|
||||||
*/
|
*/
|
||||||
close_closeable_connections();
|
close_closeable_connections();
|
||||||
|
|
||||||
/** 8b. And if anything in our state is ready to get flushed to disk, we
|
/* 8b. And if anything in our state is ready to get flushed to disk, we
|
||||||
* flush it. */
|
* flush it. */
|
||||||
or_state_save(now);
|
or_state_save(now);
|
||||||
|
|
||||||
/** 8c. Do channel cleanup just like for connections */
|
/* 8c. Do channel cleanup just like for connections */
|
||||||
channel_run_cleanup();
|
channel_run_cleanup();
|
||||||
channel_listener_run_cleanup();
|
channel_listener_run_cleanup();
|
||||||
|
|
||||||
/** 9. and if we're an exit node, check whether our DNS is telling stories
|
/* 9. and if we're an exit node, check whether our DNS is telling stories
|
||||||
* to us. */
|
* to us. */
|
||||||
if (!net_is_disabled() &&
|
if (!net_is_disabled() &&
|
||||||
public_server_mode(options) &&
|
public_server_mode(options) &&
|
||||||
@ -1566,7 +1566,7 @@ run_scheduled_events(time_t now)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 10. write bridge networkstatus file to disk */
|
/* 10. write bridge networkstatus file to disk */
|
||||||
if (options->BridgeAuthoritativeDir &&
|
if (options->BridgeAuthoritativeDir &&
|
||||||
time_to_write_bridge_status_file < now) {
|
time_to_write_bridge_status_file < now) {
|
||||||
networkstatus_dump_bridge_status_to_file(now);
|
networkstatus_dump_bridge_status_to_file(now);
|
||||||
@ -1574,7 +1574,7 @@ run_scheduled_events(time_t now)
|
|||||||
time_to_write_bridge_status_file = now+BRIDGE_STATUSFILE_INTERVAL;
|
time_to_write_bridge_status_file = now+BRIDGE_STATUSFILE_INTERVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 11. check the port forwarding app */
|
/* 11. check the port forwarding app */
|
||||||
if (!net_is_disabled() &&
|
if (!net_is_disabled() &&
|
||||||
time_to_check_port_forwarding < now &&
|
time_to_check_port_forwarding < now &&
|
||||||
options->PortForwarding &&
|
options->PortForwarding &&
|
||||||
@ -1592,11 +1592,11 @@ run_scheduled_events(time_t now)
|
|||||||
time_to_check_port_forwarding = now+PORT_FORWARDING_CHECK_INTERVAL;
|
time_to_check_port_forwarding = now+PORT_FORWARDING_CHECK_INTERVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 11b. check pending unconfigured managed proxies */
|
/* 11b. check pending unconfigured managed proxies */
|
||||||
if (!net_is_disabled() && pt_proxies_configuration_pending())
|
if (!net_is_disabled() && pt_proxies_configuration_pending())
|
||||||
pt_configure_remaining_proxies();
|
pt_configure_remaining_proxies();
|
||||||
|
|
||||||
/** 12. write the heartbeat message */
|
/* 12. write the heartbeat message */
|
||||||
if (options->HeartbeatPeriod &&
|
if (options->HeartbeatPeriod &&
|
||||||
time_to_next_heartbeat <= now) {
|
time_to_next_heartbeat <= now) {
|
||||||
if (time_to_next_heartbeat) /* don't log the first heartbeat */
|
if (time_to_next_heartbeat) /* don't log the first heartbeat */
|
||||||
|
21
src/or/or.h
21
src/or/or.h
@ -196,6 +196,7 @@ typedef enum {
|
|||||||
* and let it use any circuit ID it wants. */
|
* and let it use any circuit ID it wants. */
|
||||||
CIRC_ID_TYPE_NEITHER=2
|
CIRC_ID_TYPE_NEITHER=2
|
||||||
} circ_id_type_t;
|
} circ_id_type_t;
|
||||||
|
#define circ_id_type_bitfield_t ENUM_BF(circ_id_type_t)
|
||||||
|
|
||||||
#define CONN_TYPE_MIN_ 3
|
#define CONN_TYPE_MIN_ 3
|
||||||
/** Type for sockets listening for OR connections. */
|
/** Type for sockets listening for OR connections. */
|
||||||
@ -1683,6 +1684,7 @@ typedef enum {
|
|||||||
DIR_SPOOL_CACHED_DIR, DIR_SPOOL_NETWORKSTATUS,
|
DIR_SPOOL_CACHED_DIR, DIR_SPOOL_NETWORKSTATUS,
|
||||||
DIR_SPOOL_MICRODESC, /* NOTE: if we add another entry, add another bit. */
|
DIR_SPOOL_MICRODESC, /* NOTE: if we add another entry, add another bit. */
|
||||||
} dir_spool_source_t;
|
} dir_spool_source_t;
|
||||||
|
#define dir_spool_source_bitfield_t ENUM_BF(dir_spool_source_t)
|
||||||
|
|
||||||
/** Subtype of connection_t for an "directory connection" -- that is, an HTTP
|
/** Subtype of connection_t for an "directory connection" -- that is, an HTTP
|
||||||
* connection to retrieve or serve directory material. */
|
* connection to retrieve or serve directory material. */
|
||||||
@ -1702,7 +1704,7 @@ typedef struct dir_connection_t {
|
|||||||
* "spooling" of directory material to the outbuf. Otherwise, we'd have
|
* "spooling" of directory material to the outbuf. Otherwise, we'd have
|
||||||
* to append everything to the outbuf in one enormous chunk. */
|
* to append everything to the outbuf in one enormous chunk. */
|
||||||
/** What exactly are we spooling right now? */
|
/** What exactly are we spooling right now? */
|
||||||
ENUM_BF(dir_spool_source_t) dir_spool_src : 3;
|
dir_spool_source_bitfield_t dir_spool_src : 3;
|
||||||
|
|
||||||
/** If we're fetching descriptors, what router purpose shall we assign
|
/** If we're fetching descriptors, what router purpose shall we assign
|
||||||
* to them? */
|
* to them? */
|
||||||
@ -1875,12 +1877,13 @@ typedef enum {
|
|||||||
ADDR_POLICY_ACCEPT=1,
|
ADDR_POLICY_ACCEPT=1,
|
||||||
ADDR_POLICY_REJECT=2,
|
ADDR_POLICY_REJECT=2,
|
||||||
} addr_policy_action_t;
|
} addr_policy_action_t;
|
||||||
|
#define addr_policy_action_bitfield_t ENUM_BF(addr_policy_action_t)
|
||||||
|
|
||||||
/** A reference-counted address policy rule. */
|
/** A reference-counted address policy rule. */
|
||||||
typedef struct addr_policy_t {
|
typedef struct addr_policy_t {
|
||||||
int refcnt; /**< Reference count */
|
int refcnt; /**< Reference count */
|
||||||
/** What to do when the policy matches.*/
|
/** What to do when the policy matches.*/
|
||||||
ENUM_BF(addr_policy_action_t) policy_type:2;
|
addr_policy_action_bitfield_t policy_type:2;
|
||||||
unsigned int is_private:1; /**< True iff this is the pseudo-address,
|
unsigned int is_private:1; /**< True iff this is the pseudo-address,
|
||||||
* "private". */
|
* "private". */
|
||||||
unsigned int is_canonical:1; /**< True iff this policy is the canonical
|
unsigned int is_canonical:1; /**< True iff this policy is the canonical
|
||||||
@ -1932,6 +1935,7 @@ typedef enum {
|
|||||||
*/
|
*/
|
||||||
SAVED_IN_JOURNAL
|
SAVED_IN_JOURNAL
|
||||||
} saved_location_t;
|
} saved_location_t;
|
||||||
|
#define saved_location_bitfield_t ENUM_BF(saved_location_t)
|
||||||
|
|
||||||
/** Enumeration: what kind of download schedule are we using for a given
|
/** Enumeration: what kind of download schedule are we using for a given
|
||||||
* object? */
|
* object? */
|
||||||
@ -1940,6 +1944,7 @@ typedef enum {
|
|||||||
DL_SCHED_CONSENSUS = 1,
|
DL_SCHED_CONSENSUS = 1,
|
||||||
DL_SCHED_BRIDGE = 2,
|
DL_SCHED_BRIDGE = 2,
|
||||||
} download_schedule_t;
|
} download_schedule_t;
|
||||||
|
#define download_schedule_bitfield_t ENUM_BF(download_schedule_t)
|
||||||
|
|
||||||
/** Information about our plans for retrying downloads for a downloadable
|
/** Information about our plans for retrying downloads for a downloadable
|
||||||
* object. */
|
* object. */
|
||||||
@ -1948,7 +1953,7 @@ typedef struct download_status_t {
|
|||||||
* again? */
|
* again? */
|
||||||
uint8_t n_download_failures; /**< Number of failures trying to download the
|
uint8_t n_download_failures; /**< Number of failures trying to download the
|
||||||
* most recent descriptor. */
|
* most recent descriptor. */
|
||||||
ENUM_BF(download_schedule_t) schedule : 8;
|
download_schedule_bitfield_t schedule : 8;
|
||||||
} download_status_t;
|
} download_status_t;
|
||||||
|
|
||||||
/** If n_download_failures is this high, the download can never happen. */
|
/** If n_download_failures is this high, the download can never happen. */
|
||||||
@ -2203,7 +2208,7 @@ typedef struct microdesc_t {
|
|||||||
*/
|
*/
|
||||||
time_t last_listed;
|
time_t last_listed;
|
||||||
/** Where is this microdescriptor currently stored? */
|
/** Where is this microdescriptor currently stored? */
|
||||||
ENUM_BF(saved_location_t) saved_location : 3;
|
saved_location_bitfield_t saved_location : 3;
|
||||||
/** If true, do not attempt to cache this microdescriptor on disk. */
|
/** If true, do not attempt to cache this microdescriptor on disk. */
|
||||||
unsigned int no_save : 1;
|
unsigned int no_save : 1;
|
||||||
/** If true, this microdesc has an entry in the microdesc_map */
|
/** If true, this microdesc has an entry in the microdesc_map */
|
||||||
@ -2413,8 +2418,8 @@ typedef enum {
|
|||||||
/** A common structure to hold a v3 network status vote, or a v3 network
|
/** A common structure to hold a v3 network status vote, or a v3 network
|
||||||
* status consensus. */
|
* status consensus. */
|
||||||
typedef struct networkstatus_t {
|
typedef struct networkstatus_t {
|
||||||
ENUM_BF(networkstatus_type_t) type : 8; /**< Vote, consensus, or opinion? */
|
networkstatus_type_t type; /**< Vote, consensus, or opinion? */
|
||||||
ENUM_BF(consensus_flavor_t) flavor : 8; /**< If a consensus, what kind? */
|
consensus_flavor_t flavor; /**< If a consensus, what kind? */
|
||||||
unsigned int has_measured_bws : 1;/**< True iff this networkstatus contains
|
unsigned int has_measured_bws : 1;/**< True iff this networkstatus contains
|
||||||
* measured= bandwidth values. */
|
* measured= bandwidth values. */
|
||||||
|
|
||||||
@ -2933,6 +2938,7 @@ typedef enum {
|
|||||||
*/
|
*/
|
||||||
PATH_STATE_ALREADY_COUNTED = 6,
|
PATH_STATE_ALREADY_COUNTED = 6,
|
||||||
} path_state_t;
|
} path_state_t;
|
||||||
|
#define path_state_bitfield_t ENUM_BF(path_state_t)
|
||||||
|
|
||||||
/** An origin_circuit_t holds data necessary to build and use a circuit.
|
/** An origin_circuit_t holds data necessary to build and use a circuit.
|
||||||
*/
|
*/
|
||||||
@ -2983,7 +2989,7 @@ typedef struct origin_circuit_t {
|
|||||||
* circuit building and usage accounting. See path_state_t
|
* circuit building and usage accounting. See path_state_t
|
||||||
* for more details.
|
* for more details.
|
||||||
*/
|
*/
|
||||||
ENUM_BF(path_state_t) path_state : 3;
|
path_state_bitfield_t path_state : 3;
|
||||||
|
|
||||||
/* If this flag is set, we should not consider attaching any more
|
/* If this flag is set, we should not consider attaching any more
|
||||||
* connections to this circuit. */
|
* connections to this circuit. */
|
||||||
@ -4478,6 +4484,7 @@ typedef enum {
|
|||||||
* did this remapping happen." */
|
* did this remapping happen." */
|
||||||
ADDRMAPSRC_NONE
|
ADDRMAPSRC_NONE
|
||||||
} addressmap_entry_source_t;
|
} addressmap_entry_source_t;
|
||||||
|
#define addressmap_entry_source_bitfield_t ENUM_BF(addressmap_entry_source_t)
|
||||||
|
|
||||||
/********************************* control.c ***************************/
|
/********************************* control.c ***************************/
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user