aboutsummaryrefslogtreecommitdiff
path: root/src/or/or.h
diff options
context:
space:
mode:
authorRobert Ransom <rransom.8774@gmail.com>2012-01-06 22:44:20 -0800
committerRobert Ransom <rransom.8774@gmail.com>2012-01-06 22:44:20 -0800
commitb46a7ebb2bf2cae94a9ce4447c55014dd90ad868 (patch)
tree3461f5d0b32be416e045b16b2c20fbeb80c8f776 /src/or/or.h
parent37c90319e2ac0ecb71c9986ff55d07fe3da86ee6 (diff)
downloadtor-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.h15
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? */