Commit c09de55f authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

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


svn:r462
parent 8b71b733
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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;
  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:
  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))
    goto try_again;
#endif

  return test_aci;
}
+4 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
#include "orconfig.h"

#define USE_TLS
#define SEQUENTIAL_ACI

#include <stdio.h>
#include <stdlib.h>
@@ -314,6 +315,9 @@ struct connection_t {

  char nonce[8];
#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: */
  char stream_id[STREAM_ID_SIZE];