mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
r16301@catbus: nickm | 2007-10-31 16:43:49 -0400
A couple of small tweaks to karsten's latest patch, and note an issue with using a bitmap to represent a single int. svn:r12300
This commit is contained in:
@@ -389,6 +389,8 @@ circuit_free(circuit_t *circ)
|
||||
tor_free(ocirc->build_state);
|
||||
|
||||
circuit_free_cpath(ocirc->cpath);
|
||||
if (ocirc->intro_key)
|
||||
crypto_free_pk_env(ocirc->intro_key);
|
||||
|
||||
} else {
|
||||
or_circuit_t *ocirc = TO_OR_CIRCUIT(circ);
|
||||
|
||||
@@ -192,6 +192,7 @@ static config_var_t _option_vars[] = {
|
||||
VAR("HiddenServiceNodes", LINELIST_S, RendConfigLines, NULL),
|
||||
VAR("HiddenServiceOptions",LINELIST_V, RendConfigLines, NULL),
|
||||
VAR("HiddenServicePort", LINELIST_S, RendConfigLines, NULL),
|
||||
/*DOCDOC in tor manpage*/
|
||||
VAR("HiddenServiceVersion",LINELIST_S, RendConfigLines, NULL),
|
||||
V(HSAuthoritativeDir, BOOL, "0"),
|
||||
V(HSAuthorityRecordStats, BOOL, "0"),
|
||||
|
||||
+8
-6
@@ -1763,12 +1763,6 @@ typedef struct origin_circuit_t {
|
||||
*/
|
||||
crypt_path_t *cpath;
|
||||
|
||||
/** Stores the rendezvous descriptor version if purpose is S_* to
|
||||
* distinguish introduction and rendezvous points belonging to the same
|
||||
* rendezvous service ID, but different descriptor versions.
|
||||
*/
|
||||
uint8_t rend_desc_version;
|
||||
|
||||
/** The rend_pk_digest field holds a hash of location-hidden service's
|
||||
* PK if purpose is S_ESTABLISH_INTRO or S_RENDEZVOUSING.
|
||||
*/
|
||||
@@ -1786,6 +1780,14 @@ typedef struct origin_circuit_t {
|
||||
*/
|
||||
char rend_query[REND_SERVICE_ID_LEN+1];
|
||||
|
||||
/** Stores the rendezvous descriptor version if purpose is S_*. Used to
|
||||
* distinguish introduction and rendezvous points belonging to the same
|
||||
* rendezvous service ID, but different descriptor versions.
|
||||
* XXXX020 I believe this is a bitmap, but the doc doesn't say so. If so,
|
||||
* why? A circuit can't be using two different rendezvous decriptors. -NM
|
||||
*/
|
||||
uint8_t rend_desc_version;
|
||||
|
||||
/* The intro key replaces the hidden service's public key if purpose is
|
||||
* S_ESTABLISH_INTRO or S_INTRO, provided that no unversioned rendezvous
|
||||
* descriptor is used. */
|
||||
|
||||
@@ -56,11 +56,14 @@ typedef struct rend_service_t {
|
||||
time_t intro_period_started;
|
||||
int n_intro_circuits_launched; /**< count of intro circuits we have
|
||||
* established in this period. */
|
||||
/* DOCDOC undocumented versions */
|
||||
rend_service_descriptor_t *desc;
|
||||
time_t desc_is_dirty;
|
||||
time_t next_upload_time;
|
||||
/* XXXX020 A service never actually has both descriptor versions; perhaps
|
||||
* this should be an int rather than in intmax. */
|
||||
int descriptor_versions; /**< bitmask of rendezvous descriptor versions
|
||||
* that will be published. */
|
||||
* that will be published. "0" means "default." */
|
||||
} rend_service_t;
|
||||
|
||||
/** A list of rend_service_t's for services run on this OP.
|
||||
@@ -454,9 +457,9 @@ rend_service_load_keys(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Return the service whose public key has a digest of <b>digest</b>
|
||||
* and which publishes descriptors of the given <b>versions</b> bitmask.
|
||||
* Return NULL if no such service exists.
|
||||
/** Return the service whose public key has a digest of <b>digest</b> and
|
||||
* which publishes exactly the descriptor of the given <b>versions</b>
|
||||
* bitmask. Return NULL if no such service exists.
|
||||
*/
|
||||
static rend_service_t *
|
||||
rend_service_get_by_pk_digest_and_version(const char* digest,
|
||||
@@ -810,7 +813,8 @@ rend_service_launch_establish_intro(rend_service_t *service,
|
||||
if (!(service->descriptor_versions & 1)) {
|
||||
launched->intro_key = crypto_new_pk_env();
|
||||
tor_assert(!crypto_pk_generate_key(launched->intro_key));
|
||||
strmap_set(service->intro_keys, nickname, launched->intro_key);
|
||||
strmap_set(service->intro_keys, nickname,
|
||||
crypto_pk_dup_key(launched->intro_key));
|
||||
}
|
||||
if (launched->_base.state == CIRCUIT_STATE_OPEN)
|
||||
rend_service_intro_has_opened(launched);
|
||||
|
||||
Reference in New Issue
Block a user