diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | doc/TODO | 4 | ||||
-rw-r--r-- | src/or/command.c | 1 | ||||
-rw-r--r-- | src/or/or.h | 1 | ||||
-rw-r--r-- | src/or/relay.c | 4 |
5 files changed, 12 insertions, 2 deletions
@@ -7,6 +7,10 @@ Changes in version 0.2.0.12-alpha - 2007-11-?? - When we're lacking a consensus, don't try to perform rendezvous operations. (Bug spotted by Karsten) + o Minor features: + - When we negotiate a v2 OR connection (not yet implemented), accept + RELAY_EARLY cells and turn them into RELAY cells if we've negotiated + a v1 connection. Initial code for proposal 110. Changes in version 0.2.0.11-alpha - 2007-11-12 o Security fixes: @@ -72,8 +72,8 @@ Things we'd like to do in 0.2.0.x: - Don't extend a circuit over a noncanonical connection with mismatched address. - Learn our outgoing IP address from netinfo cells? - - Protocol revision. - - Earliest stages of 110 (infinite-length) in v2 protocol: + o Protocol revision. + o Earliest stages of 110 (infinite-length) in v2 protocol: add support for RELAY_EARLY. o Before the feature freeze: (Roger) o Make tunnelled dir conns use begin_dir if enabled diff --git a/src/or/command.c b/src/or/command.c index 9dc8408a87..b882878ee1 100644 --- a/src/or/command.c +++ b/src/or/command.c @@ -136,6 +136,7 @@ command_process_cell(cell_t *cell, or_connection_t *conn) PROCESS_CELL(created, cell, conn); break; case CELL_RELAY: + case CELL_RELAY_EARLY: ++stats_n_relay_cells_processed; PROCESS_CELL(relay, cell, conn); break; diff --git a/src/or/or.h b/src/or/or.h index 263e7c420a..a87d95ed7a 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -659,6 +659,7 @@ typedef enum { #define CELL_NETINFO 8 #define CELL_CERT 9 #define CELL_LINK_AUTH 10 +#define CELL_RELAY_EARLY 11 /*DOCDOC*/ #define CELL_COMMAND_IS_VAR_LENGTH(x) \ ((x) == CELL_CERT || (x) == CELL_VERSIONS) diff --git a/src/or/relay.c b/src/or/relay.c index d9ca3760f9..95d30a9842 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -1890,6 +1890,10 @@ append_cell_to_circuit_queue(circuit_t *circ, or_connection_t *orconn, queue = &orcirc->p_conn_cells; streams_blocked = circ->streams_blocked_on_p_conn; } + if (cell->command == CELL_RELAY_EARLY && orconn->link_proto < 2) { + /* V1 connections don't understand RELAY_EARLY. */ + cell->command = CELL_RELAY; + } cell_queue_append_packed_copy(queue, cell); |