Tor
0.4.6.0-alpha-dev
lib
dispatch
dispatch_st.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-2020, The Tor Project, Inc. */
5
/* See LICENSE for licensing information */
6
7
/**
8
* \file dispatch_st.h
9
*
10
* \brief private structures used for the dispatcher module
11
*/
12
13
#ifndef TOR_DISPATCH_ST_H
14
#define TOR_DISPATCH_ST_H
15
16
#ifdef DISPATCH_PRIVATE
17
18
#include "
lib/container/smartlist.h
"
19
20
/**
21
* Information about the recipient of a message.
22
**/
23
typedef
struct
dispatch_rcv_t {
24
/** The subsystem receiving a message. */
25
subsys_id_t
sys;
26
/** True iff this recipient is enabled. */
27
bool
enabled;
28
/** The function that will handle the message. */
29
recv_fn_t
fn;
30
} dispatch_rcv_t;
31
32
/**
33
* Information used by a dispatcher to handle and dispatch a single message
34
* ID. It maps that message ID to its type, channel, and list of receiver
35
* functions.
36
*
37
* This structure is used when the dispatcher is running.
38
**/
39
typedef
struct
dtbl_entry_t {
40
/** The number of enabled non-stub subscribers for this message.
41
*
42
* Note that for now, this will be the same as <b>n_fns</b>, since there is
43
* no way to turn these subscribers on an off yet. */
44
uint16_t n_enabled;
45
/** The channel that handles this message. */
46
channel_id_t channel;
47
/** The associated C type for this message. */
48
msg_type_id_t
type;
49
/**
50
* The number of functions pointers for subscribers that receive this
51
* message, in rcv. */
52
uint16_t n_fns;
53
/**
54
* The recipients for this message.
55
*/
56
dispatch_rcv_t rcv[FLEXIBLE_ARRAY_MEMBER];
57
} dtbl_entry_t;
58
59
/**
60
* A queue of messages for a given channel, used by a live dispatcher.
61
*/
62
typedef
struct
dqueue_t {
63
/** The queue of messages itself. */
64
TOR_SIMPLEQ_HEAD( ,
msg_t
) queue;
65
/** A function to be called when the queue becomes nonempty. */
66
dispatch_alertfn_t
alert_fn;
67
/** An argument for the alert_fn. */
68
void
*alert_fn_arg;
69
} dqueue_t ;
70
71
/**
72
* A single dispatcher for cross-module messages.
73
*/
74
struct
dispatch_t
{
75
/**
76
* The length of <b>table</b>: the number of message IDs that this
77
* dispatcher can handle.
78
*/
79
size_t
n_msgs;
80
/**
81
* The length of <b>queues</b>: the number of channels that this dispatcher
82
* has configured.
83
*/
84
size_t
n_queues;
85
/**
86
* The length of <b>typefns</b>: the number of C type IDs that this
87
* dispatcher has configured.
88
*/
89
size_t
n_types;
90
/**
91
* An array of message queues, indexed by channel ID.
92
*/
93
dqueue_t *queues;
94
/**
95
* An array of entries about how to handle particular message types, indexed
96
* by message ID.
97
*/
98
dtbl_entry_t **table;
99
/**
100
* An array of function tables for manipulating types, index by message
101
* type ID.
102
**/
103
dispatch_typefns_t
*typefns;
104
};
105
106
#endif
/* defined(DISPATCH_PRIVATE) */
107
108
#endif
/* !defined(TOR_DISPATCH_ST_H) */
smartlist.h
Header for smartlist.c.
subsys_id_t
uint16_t subsys_id_t
Definition:
msgtypes.h:22
dispatch_alertfn_t
void(* dispatch_alertfn_t)(struct dispatch_t *, channel_id_t, void *)
Definition:
dispatch.h:98
recv_fn_t
void(* recv_fn_t)(const msg_t *m)
Definition:
msgtypes.h:66
dispatch_t
struct dispatch_t dispatch_t
Definition:
dispatch.h:53
dispatch_typefns_t
Definition:
msgtypes.h:72
msg_type_id_t
uint16_t msg_type_id_t
Definition:
msgtypes.h:29
msg_t
Definition:
msgtypes.h:50
Generated by
1.8.20