|
@@ -208,6 +208,7 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
|
|
|
tor_assert(circ->purpose == CIRCUIT_PURPOSE_REND_ESTABLISHED);
|
|
|
tor_assert(splice->_base.purpose == CIRCUIT_PURPOSE_REND_ESTABLISHED);
|
|
|
cell->circ_id = splice->p_circ_id;
|
|
|
+ cell->command = CELL_RELAY;
|
|
|
if ((reason = circuit_receive_relay_cell(cell, TO_CIRCUIT(splice),
|
|
|
CELL_DIRECTION_IN)) < 0) {
|
|
|
log_warn(LD_REND, "Error relaying cell across rendezvous; closing "
|
|
@@ -541,11 +542,17 @@ relay_send_command_from_edge(uint16_t stream_id, circuit_t *circ,
|
|
|
origin_circuit_t *origin_circ = TO_ORIGIN_CIRCUIT(circ);
|
|
|
if (origin_circ->remaining_relay_early_cells > 0 &&
|
|
|
(relay_command == RELAY_COMMAND_EXTEND ||
|
|
|
- cpath_layer != origin_circ->cpath)) {
|
|
|
-
|
|
|
- * cell or we're not talking to the first hop, use one of them. Don't
|
|
|
- * worry about the conn protocol version: append_cell_to_circuit_queue
|
|
|
- * will fix it up. */
|
|
|
+ (cpath_layer != origin_circ->cpath &&
|
|
|
+ !CIRCUIT_PURPOSE_IS_ESTABLISHED_REND(circ->purpose)))) {
|
|
|
+
|
|
|
+ * an extend cell or (we're not talking to the first hop and we're
|
|
|
+ * not talking to a rendezvous circuit), use one of them.
|
|
|
+ * Don't worry about the conn protocol version:
|
|
|
+ * append_cell_to_circuit_queue will fix it up. */
|
|
|
+
|
|
|
+ * relay cells on rendezvous circuits. See bug 1038. Eventually,
|
|
|
+ * we can take this behavior away in favor of having clients avoid
|
|
|
+ * rendezvous points running 0.2.1.3-alpha through 0.2.1.18. -RD */
|
|
|
cell.command = CELL_RELAY_EARLY;
|
|
|
--origin_circ->remaining_relay_early_cells;
|
|
|
log_debug(LD_OR, "Sending a RELAY_EARLY cell; %d remaining.",
|