summaryrefslogtreecommitdiff
path: root/src/or/command.c
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2009-07-27 21:01:24 -0400
committerRoger Dingledine <arma@torproject.org>2009-07-27 21:58:32 -0400
commit2b63fa40e8349e0e6c40d0660d9df5b0ba73937e (patch)
tree533c7b62fa1081b970c9ab9965f133cb222c4405 /src/or/command.c
parentf39cee375472a6e3a4f0decb7e2f91c5768a2165 (diff)
downloadtor-2b63fa40e8349e0e6c40d0660d9df5b0ba73937e.tar.gz
tor-2b63fa40e8349e0e6c40d0660d9df5b0ba73937e.zip
three hacks to workaround bug 1038
The problem is that clients and hidden services are receiving relay_early cells, and they tear down the circuit. Hack #1 is for rendezvous points to rewrite relay_early cells to relay cells. That way there are never any incoming relay_early cells. Hack #2 is for clients and hidden services to never send a relay_early cell on an established rendezvous circuit. That works around rendezvous points that haven't upgraded yet. Hack #3 is for clients and hidden services to not tear down the circuit when they receive an inbound relay_early cell. We already refuse extend cells at clients.
Diffstat (limited to 'src/or/command.c')
-rw-r--r--src/or/command.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/src/or/command.c b/src/or/command.c
index 9481e5bcc6..c36874be5c 100644
--- a/src/or/command.c
+++ b/src/or/command.c
@@ -395,12 +395,8 @@ command_process_relay_cell(cell_t *cell, or_connection_t *conn)
* gotten no more than MAX_RELAY_EARLY_CELLS_PER_CIRCUIT of them. */
if (cell->command == CELL_RELAY_EARLY) {
if (direction == CELL_DIRECTION_IN) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received an inbound RELAY_EARLY cell on circuit %d from %s:%d."
- " Closing circuit.",
- cell->circ_id, conn->_base.address, conn->_base.port);
- circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
- return;
+ /* XXX Allow an unlimited number of inbound relay_early cells for
+ * now, for hidden service compatibility. See bug 1038. -RD */
} else {
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
if (or_circ->remaining_relay_early_cells == 0) {