Tor 0.4.9.2-alpha-dev
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
orconn_event.h
Go to the documentation of this file.
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 orconn_event.h
9 * \brief Header file for orconn_event.c
10 *
11 * The OR_CONN_STATE_* symbols are here to make it easier for
12 * subscribers to make decisions based on the messages that they
13 * receive.
14 **/
15
16#ifndef TOR_ORCONN_EVENT_H
17#define TOR_ORCONN_EVENT_H
18
19#include "lib/pubsub/pubsub.h"
20
21/**
22 * @name States of OR connections
23 *
24 * These must be in a partial ordering such that usually no OR
25 * connection will transition from a higher-numbered state to a
26 * lower-numbered one. Code such as bto_update_best() depends on this
27 * ordering to determine the best state it's seen so far.
28 * @{ */
29#define OR_CONN_STATE_MIN_ 1
30/** State for a connection to an OR: waiting for connect() to finish. */
31#define OR_CONN_STATE_CONNECTING 1
32/** State for a connection to an OR: waiting for proxy handshake to complete */
33#define OR_CONN_STATE_PROXY_HANDSHAKING 2
34/** State for an OR connection client: SSL is handshaking, not done
35 * yet. */
36#define OR_CONN_STATE_TLS_HANDSHAKING 3
37/** State for a connection at an OR: We're waiting for the client to
38 * send a versions cell (to indicate a v3+ handshake) */
39#define OR_CONN_STATE_SERVER_VERSIONS_WAIT 4
40/** State for an OR connection: We're done with our SSL handshake, but we
41 * haven't yet negotiated link protocol versions, done a V3 handshake, and
42 * sent a netinfo cell. */
43#define OR_CONN_STATE_OR_HANDSHAKING_V3 5
44/** State for an OR connection: Ready to send/receive cells. */
45#define OR_CONN_STATE_OPEN 6
46#define OR_CONN_STATE_MAX_ 6
47/** @} */
48
49/** Used to indicate the type of an OR connection event passed to the
50 * controller. The various types are defined in control-spec.txt */
52 OR_CONN_EVENT_LAUNCHED = 0,
53 OR_CONN_EVENT_CONNECTED = 1,
54 OR_CONN_EVENT_FAILED = 2,
55 OR_CONN_EVENT_CLOSED = 3,
56 OR_CONN_EVENT_NEW = 4,
58
59/**
60 * Message for orconn state update
61 *
62 * This contains information about internal state changes of
63 * or_connection_t objects. The chan and proxy_type fields are
64 * additional information that a subscriber may need to make
65 * decisions.
66 **/
67typedef struct orconn_state_msg_t {
68 uint64_t gid; /**< connection's global ID */
69 uint64_t chan; /**< associated channel ID */
70 int proxy_type; /**< connection's proxy type */
71 uint8_t state; /**< new connection state */
73
74DECLARE_MESSAGE(orconn_state, orconn_state, orconn_state_msg_t *);
75
76/**
77 * Message for orconn status event
78 *
79 * This contains information that ends up in ORCONN control protocol
80 * events.
81 **/
82typedef struct orconn_status_msg_t {
83 uint64_t gid; /**< connection's global ID */
84 int status; /**< or_conn_status_event_t */
85 int reason; /**< reason */
87
88DECLARE_MESSAGE(orconn_status, orconn_status, orconn_status_msg_t *);
89
90#ifdef ORCONN_EVENT_PRIVATE
91void orconn_state_publish(orconn_state_msg_t *);
92void orconn_status_publish(orconn_status_msg_t *);
93#endif
94
95#endif /* !defined(TOR_ORCONN_EVENT_H) */
or_conn_status_event_t
Definition: orconn_event.h:51
Header for OO publish-subscribe functionality.
#define DECLARE_MESSAGE(messagename, typename, c_ptr_type)