Line data Source code
1 : /* Copyright (c) 2007-2021, The Tor Project, Inc. */ 2 : /* See LICENSE for licensing information */ 3 : 4 : /** 5 : * \file ocirc_event.h 6 : * \brief Header file for ocirc_event.c 7 : **/ 8 : 9 : #ifndef TOR_OCIRC_EVENT_H 10 : #define TOR_OCIRC_EVENT_H 11 : 12 : #include <stdbool.h> 13 : 14 : #include "lib/cc/torint.h" 15 : #include "lib/pubsub/pubsub.h" 16 : 17 : /** Used to indicate the type of a circuit event passed to the controller. 18 : * The various types are defined in control-spec.txt */ 19 : typedef enum circuit_status_event_t { 20 : CIRC_EVENT_LAUNCHED = 0, 21 : CIRC_EVENT_BUILT = 1, 22 : CIRC_EVENT_EXTENDED = 2, 23 : CIRC_EVENT_FAILED = 3, 24 : CIRC_EVENT_CLOSED = 4, 25 : } circuit_status_event_t; 26 : 27 : /** Message for origin circuit state update */ 28 : typedef struct ocirc_state_msg_t { 29 : uint32_t gid; /**< global ID (only origin circuits have them) */ 30 : int state; /**< new circuit state */ 31 : bool onehop; /**< one-hop circuit? */ 32 : } ocirc_state_msg_t; 33 : 34 2 : DECLARE_MESSAGE(ocirc_state, ocirc_state, ocirc_state_msg_t *); 35 : 36 : /** 37 : * Message when a channel gets associated to a circuit. 38 : * 39 : * This doesn't always correspond to something in circuitbuild.c 40 : * setting the n_chan field in the circuit. For some reason, if 41 : * circuit_handle_first_hop() launches a new circuit, it doesn't set 42 : * the n_chan field. 43 : */ 44 : typedef struct ocirc_chan_msg_t { 45 : uint32_t gid; /**< global ID */ 46 : uint64_t chan; /**< channel ID */ 47 : bool onehop; /**< one-hop circuit? */ 48 : } ocirc_chan_msg_t; 49 : 50 24 : DECLARE_MESSAGE(ocirc_chan, ocirc_chan, ocirc_chan_msg_t *); 51 : 52 : /** 53 : * Message for origin circuit status event 54 : * 55 : * This contains information that ends up in CIRC control protocol events. 56 : */ 57 : typedef struct ocirc_cevent_msg_t { 58 : uint32_t gid; /**< global ID */ 59 : int evtype; /**< event type */ 60 : int reason; /**< reason */ 61 : bool onehop; /**< one-hop circuit? */ 62 : } ocirc_cevent_msg_t; 63 : 64 2 : DECLARE_MESSAGE(ocirc_cevent, ocirc_cevent, ocirc_cevent_msg_t *); 65 : 66 : #ifdef OCIRC_EVENT_PRIVATE 67 : void ocirc_state_publish(ocirc_state_msg_t *msg); 68 : void ocirc_chan_publish(ocirc_chan_msg_t *msg); 69 : void ocirc_cevent_publish(ocirc_cevent_msg_t *msg); 70 : #endif 71 : 72 : #endif /* !defined(TOR_OCIRC_EVENT_H) */