Bläddra i källkod

r16670@catbus: nickm | 2007-11-14 14:56:30 -0500
Initial phase of proposal 110: accept RELAY_EARLY cells, and turn them into RELAY cells when sending them on over a v1 OR connection.


svn:r12496

Nick Mathewson 16 år sedan
förälder
incheckning
e843e05563
5 ändrade filer med 12 tillägg och 2 borttagningar
  1. 4 0
      ChangeLog
  2. 2 2
      doc/TODO
  3. 1 0
      src/or/command.c
  4. 1 0
      src/or/or.h
  5. 4 0
      src/or/relay.c

+ 4 - 0
ChangeLog

@@ -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:

+ 2 - 2
doc/TODO

@@ -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

+ 1 - 0
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;

+ 1 - 0
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)

+ 4 - 0
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);