Browse Source

Add #ifdef'd code (on by default) to allocate ACIs sequentially.

svn:r462
Nick Mathewson 22 years ago
parent
commit
c09de55fb8
2 changed files with 18 additions and 0 deletions
  1. 14 0
      src/or/circuit.c
  2. 4 0
      src/or/or.h

+ 14 - 0
src/or/circuit.c

@@ -122,6 +122,19 @@ static aci_t get_unique_aci_by_addr_port(uint32_t addr, uint16_t port, int aci_t
   aci_t test_aci;
   aci_t test_aci;
   connection_t *conn;
   connection_t *conn;
 
 
+#ifdef SEQUENTIAL_ACI
+  /* Right now, this is the only used aci_type.  XXX The others should
+     be removed. */
+  assert(aci_type == ACI_TYPE_BOTH); 
+  conn = connection_exact_get_by_addr_port(addr,port);
+  if (!conn)
+    return 1; /* No connection exists; conflict is impossible. */
+  do {
+    test_aci = conn->next_aci++; /* This can wrap around to 0; that's okay. */
+    if (test_aci == 0)
+      continue;
+  } while(circuit_get_by_aci_conn(test_aci, conn));
+#else
 try_again:
 try_again:
   log_fn(LOG_DEBUG,"trying to get a unique aci");
   log_fn(LOG_DEBUG,"trying to get a unique aci");
 
 
@@ -143,6 +156,7 @@ try_again:
 
 
   if(circuit_get_by_aci_conn(test_aci, conn))
   if(circuit_get_by_aci_conn(test_aci, conn))
     goto try_again;
     goto try_again;
+#endif
 
 
   return test_aci;
   return test_aci;
 }
 }

+ 4 - 0
src/or/or.h

@@ -8,6 +8,7 @@
 #include "orconfig.h"
 #include "orconfig.h"
 
 
 #define USE_TLS
 #define USE_TLS
+#define SEQUENTIAL_ACI
 
 
 #include <stdio.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdlib.h>
@@ -314,6 +315,9 @@ struct connection_t {
 
 
   char nonce[8];
   char nonce[8];
 #endif
 #endif
+#ifdef SEQUENTIAL_ACI
+  uint16_t next_aci; /* Which ACI do we try to use next on this connection? */
+#endif
 
 
 /* Used only by edge connections: */
 /* Used only by edge connections: */
   char stream_id[STREAM_ID_SIZE];
   char stream_id[STREAM_ID_SIZE];