diff options
author | Robert Ransom <rransom.8774@gmail.com> | 2012-01-06 22:44:20 -0800 |
---|---|---|
committer | Robert Ransom <rransom.8774@gmail.com> | 2012-01-06 22:44:20 -0800 |
commit | b46a7ebb2bf2cae94a9ce4447c55014dd90ad868 (patch) | |
tree | 3461f5d0b32be416e045b16b2c20fbeb80c8f776 /src/or/or.h | |
parent | 37c90319e2ac0ecb71c9986ff55d07fe3da86ee6 (diff) | |
download | tor-b46a7ebb2bf2cae94a9ce4447c55014dd90ad868.tar.gz tor-b46a7ebb2bf2cae94a9ce4447c55014dd90ad868.zip |
Don't remove rend cpath element from relaunched service-side rend circs
Fixes bug 4842, not in any release.
Diffstat (limited to 'src/or/or.h')
-rw-r--r-- | src/or/or.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/or/or.h b/src/or/or.h index 2acb621014..8fe3e0fe57 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2406,6 +2406,18 @@ typedef struct crypt_path_t { * at this step? */ } crypt_path_t; +/** A reference-counted pointer to a crypt_path_t, used only to share + * the final rendezvous cpath to be used on a service-side rendezvous + * circuit among multiple circuits built in parallel to the same + * destination rendezvous point. */ +typedef struct { + /** The reference count. */ + unsigned int refcount; + /** The pointer. Set to NULL when the crypt_path_t is put into use + * on an opened rendezvous circuit. */ + crypt_path_t *cpath; +} crypt_path_reference_t; + #define CPATH_KEY_MATERIAL_LEN (20*2+16*2) #define DH_KEY_LEN DH_BYTES @@ -2432,6 +2444,9 @@ typedef struct { unsigned int onehop_tunnel : 1; /** The crypt_path_t to append after rendezvous: used for rendezvous. */ crypt_path_t *pending_final_cpath; + /** A ref-counted reference to the crypt_path_t to append after + * rendezvous; used on the service side. */ + crypt_path_reference_t *service_pending_final_cpath_ref; /** How many times has building a circuit for this task failed? */ int failure_count; /** At what time should we give up on this task? */ |