tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

conflux_util.h (2266B)


      1 /* Copyright (c) 2023, The Tor Project, Inc. */
      2 /* See LICENSE for licensing information */
      3 
      4 /**
      5 * \file conflux_util.h
      6 * \brief Header file for conflux_util.c.
      7 **/
      8 
      9 #ifndef TOR_CONFLUX_UTIL_H
     10 #define TOR_CONFLUX_UTIL_H
     11 
     12 /* Forward decls */
     13 typedef struct edge_connection_t edge_connection_t;
     14 typedef struct crypt_path_t crypt_path_t;
     15 typedef struct origin_circuit_t origin_circuit_t;
     16 typedef struct conflux_t conflux_t;
     17 
     18 /* True iff the given circuit_t circ is conflux related. */
     19 static inline bool
     20 CIRCUIT_IS_CONFLUX(const circuit_t *circ)
     21 {
     22  if (circ->conflux_pending_nonce) {
     23    if (CIRCUIT_IS_ORIGIN(circ))
     24      tor_assert_nonfatal(circ->purpose == CIRCUIT_PURPOSE_CONFLUX_UNLINKED);
     25    return true;
     26  } else if (circ->conflux) {
     27    if (CIRCUIT_IS_ORIGIN(circ))
     28      tor_assert_nonfatal(circ->purpose == CIRCUIT_PURPOSE_CONFLUX_LINKED);
     29    return true;
     30  } else {
     31    tor_assert_nonfatal(circ->purpose != CIRCUIT_PURPOSE_CONFLUX_LINKED);
     32    tor_assert_nonfatal(circ->purpose != CIRCUIT_PURPOSE_CONFLUX_UNLINKED);
     33    return false;
     34  }
     35 }
     36 
     37 const uint8_t *conflux_get_nonce(const circuit_t *circ);
     38 uint64_t conflux_get_circ_rtt(const circuit_t *circ);
     39 
     40 int circuit_get_package_window(circuit_t *circ,
     41                               const crypt_path_t *cpath);
     42 bool conflux_can_send(conflux_t *cfx);
     43 
     44 bool edge_uses_cpath(const edge_connection_t *conn,
     45                     const crypt_path_t *cpath);
     46 crypt_path_t *conflux_get_destination_hop(circuit_t *circ);
     47 bool conflux_validate_source_hop(circuit_t *in_circ,
     48                            crypt_path_t *layer_hint);
     49 uint64_t edge_get_max_rtt(const edge_connection_t *stream);
     50 bool relay_crypt_from_last_hop(const origin_circuit_t *circ,
     51                          const crypt_path_t *layer_hint);
     52 
     53 void conflux_update_p_streams(origin_circuit_t *, edge_connection_t *);
     54 void conflux_update_half_streams(origin_circuit_t *, smartlist_t *);
     55 void conflux_update_n_streams(or_circuit_t *, edge_connection_t *);
     56 void conflux_update_resolving_streams(or_circuit_t *, edge_connection_t *);
     57 void conflux_sync_circ_fields(conflux_t *cfx, origin_circuit_t *ref_circ);
     58 void conflux_validate_stream_lists(const conflux_t *cfx);
     59 void conflux_validate_legs(const conflux_t *cfx);
     60 
     61 #endif /* TOR_CONFLUX_UTIL_H */