tor

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

entry_connection_st.h (4310B)


      1 /* Copyright (c) 2001 Matej Pfajfar.
      2 * Copyright (c) 2001-2004, Roger Dingledine.
      3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
      4 * Copyright (c) 2007-2021, The Tor Project, Inc. */
      5 /* See LICENSE for licensing information */
      6 
      7 /**
      8 * @file entry_connection_st.h
      9 * @brief Entry connection structure.
     10 **/
     11 
     12 #ifndef ENTRY_CONNECTION_ST_H
     13 #define ENTRY_CONNECTION_ST_H
     14 
     15 #include "core/or/edge_connection_st.h"
     16 
     17 /** Subtype of edge_connection_t for an "entry connection" -- that is, a SOCKS
     18 * connection, a DNS request, a TransPort connection or a NATD connection */
     19 struct entry_connection_t {
     20  struct edge_connection_t edge_;
     21 
     22  /** Nickname of planned exit node -- used with .exit support. */
     23  /* XXX prop220: we need to make chosen_exit_name able to encode Ed IDs too.
     24   * That's logically part of the UI parts for prop220 though. */
     25  char *chosen_exit_name;
     26 
     27  socks_request_t *socks_request; /**< SOCKS structure describing request (AP
     28                                   * only.) */
     29 
     30  /* === Isolation related, AP only. === */
     31  entry_port_cfg_t entry_cfg;
     32  /** AP only: The newnym epoch in which we created this connection. */
     33  unsigned nym_epoch;
     34 
     35  /** AP only: The original requested address before we rewrote it. */
     36  char *original_dest_address;
     37  /* Other fields to isolate on already exist.  The ClientAddr is addr.  The
     38     ClientProtocol is a combination of type and socks_request->
     39     socks_version.  SocksAuth is socks_request->username/password.
     40     DestAddr is in socks_request->address. */
     41 
     42  /** Number of times we've reassigned this application connection to
     43   * a new circuit. We keep track because the timeout is longer if we've
     44   * already retried several times. */
     45  uint8_t num_socks_retries;
     46 
     47  /** For AP connections only: buffer for data that we have sent
     48   * optimistically, which we might need to re-send if we have to
     49   * retry this connection. */
     50  struct buf_t *pending_optimistic_data;
     51  /* For AP connections only: buffer for data that we previously sent
     52  * optimistically which we are currently re-sending as we retry this
     53  * connection. */
     54  struct buf_t *sending_optimistic_data;
     55 
     56  /** If this is a DNSPort connection, this field holds the pending DNS
     57   * request that we're going to try to answer.  */
     58  struct evdns_server_request *dns_server_request;
     59 
     60 #define DEBUGGING_17659
     61 
     62 #ifdef DEBUGGING_17659
     63  uint16_t marked_pending_circ_line;
     64  const char *marked_pending_circ_file;
     65 #endif
     66 
     67 #define NUM_CIRCUITS_LAUNCHED_THRESHOLD 10
     68  /** Number of times we've launched a circuit to handle this stream. If
     69    * it gets too high, that could indicate an inconsistency between our
     70    * "launch a circuit to handle this stream" logic and our "attach our
     71    * stream to one of the available circuits" logic. */
     72  unsigned int num_circuits_launched:4;
     73 
     74  /** True iff this stream must attach to a one-hop circuit (e.g. for
     75   * begin_dir). */
     76  unsigned int want_onehop:1;
     77  /** True iff this stream should use a BEGIN_DIR relay command to establish
     78   * itself rather than BEGIN (either via onehop or via a whole circuit). */
     79  unsigned int use_begindir:1;
     80 
     81  /** For AP connections only. If 1, and we fail to reach the chosen exit,
     82   * stop requiring it. */
     83  unsigned int chosen_exit_optional:1;
     84  /** For AP connections only. If non-zero, this exit node was picked as
     85   * a result of the TrackHostExit, and the value decrements every time
     86   * we fail to complete a circuit to our chosen exit -- if it reaches
     87   * zero, abandon the associated mapaddress. */
     88  unsigned int chosen_exit_retries:3;
     89 
     90  /** True iff this is an AP connection that came from a transparent or
     91   * NATd connection */
     92  unsigned int is_transparent_ap:1;
     93 
     94  /** For AP connections only: Set if this connection's target exit node
     95   * allows optimistic data (that is, data sent on this stream before
     96   * the exit has sent a CONNECTED cell) and we have chosen to use it.
     97   */
     98  unsigned int may_use_optimistic_data : 1;
     99 
    100  /** True iff this is a connection to a HS that has PoW defenses enabled,
    101   * so we know not to apply the usual SOCKS timeout. */
    102  unsigned int hs_with_pow_conn : 1;
    103 };
    104 
    105 /** Cast a entry_connection_t subtype pointer to a edge_connection_t **/
    106 #define ENTRY_TO_EDGE_CONN(c) (&(((c))->edge_))
    107 
    108 #endif /* !defined(ENTRY_CONNECTION_ST_H) */