Merged revisions 337595,337597 via svnmerge from
[asterisk/asterisk.git] / include / asterisk / event_defs.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2007 - 2008, Digium, Inc.
5  *
6  * Russell Bryant <russell@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*!
20  * \file
21  * \author Russell Bryant <russell@digium.com>
22  * \brief Generic event system
23  */
24
25 #ifndef AST_EVENT_DEFS_H
26 #define AST_EVENT_DEFS_H
27
28 /*! \brief Event types
29  * \note These values can *never* change. */
30 enum ast_event_type {
31         /*! Reserved to provide the ability to subscribe to all events.  A specific
32          *  event should never have a payload of 0. */
33         AST_EVENT_ALL                 = 0x00,
34         /*! This event type is reserved for use by third-party modules to create
35          *  custom events without having to modify this file. 
36          *  \note There are no "custom" IE types, because IEs only have to be
37          *  unique to the event itself, not necessarily across all events. */
38         AST_EVENT_CUSTOM              = 0x01,
39         /*! Voicemail message waiting indication */
40         AST_EVENT_MWI                 = 0x02,
41         /*! Someone has subscribed to events */
42         AST_EVENT_SUB                 = 0x03,
43         /*! Someone has unsubscribed from events */
44         AST_EVENT_UNSUB               = 0x04,
45         /*! The aggregate state of a device across all servers configured to be
46          *  a part of a device state cluster has changed. */
47         AST_EVENT_DEVICE_STATE        = 0x05,
48         /*! The state of a device has changed on _one_ server.  This should not be used
49          *  directly, in general.  Use AST_EVENT_DEVICE_STATE instead. */
50         AST_EVENT_DEVICE_STATE_CHANGE = 0x06,
51         /*! Channel Event Logging events */
52         AST_EVENT_CEL                 = 0x07,
53         /*! A report of a security related event (see security_events.h) */
54         AST_EVENT_SECURITY            = 0x08,
55         /*! Used by res_stun_monitor to alert listeners to an exernal network address change. */
56         AST_EVENT_NETWORK_CHANGE      = 0x09,
57         /*! Number of event types.  This should be the last event type + 1 */
58         AST_EVENT_TOTAL               = 0x0a,
59 };
60
61 /*! \brief Event Information Element types */
62 enum ast_event_ie_type {
63         /*! Used to terminate the arguments to event functions */
64         AST_EVENT_IE_END                 = -1,
65
66         /*! 
67          * \brief Number of new messages
68          * Used by: AST_EVENT_MWI 
69          * Payload type: UINT
70          */
71         AST_EVENT_IE_NEWMSGS             = 0x0001,
72         /*! 
73          * \brief Number of
74          * Used by: AST_EVENT_MWI 
75          * Payload type: UINT
76          */
77         AST_EVENT_IE_OLDMSGS             = 0x0002,
78         /*! 
79          * \brief Mailbox name \verbatim (mailbox[@context]) \endverbatim
80          * Used by: AST_EVENT_MWI 
81          * Payload type: STR
82          */
83         AST_EVENT_IE_MAILBOX             = 0x0003,
84         /*! 
85          * \brief Unique ID
86          * Used by: AST_EVENT_SUB, AST_EVENT_UNSUB
87          * Payload type: UINT
88          */
89         AST_EVENT_IE_UNIQUEID            = 0x0004,
90         /*! 
91          * \brief Event type 
92          * Used by: AST_EVENT_SUB, AST_EVENT_UNSUB
93          * Payload type: UINT
94          */
95         AST_EVENT_IE_EVENTTYPE           = 0x0005,
96         /*!
97          * \brief Hint that someone cares that an IE exists
98          * Used by: AST_EVENT_SUB
99          * Payload type: UINT (ast_event_ie_type)
100          */
101         AST_EVENT_IE_EXISTS              = 0x0006,
102         /*!
103          * \brief Device Name
104          * Used by AST_EVENT_DEVICE_STATE_CHANGE
105          * Payload type: STR
106          */
107         AST_EVENT_IE_DEVICE              = 0x0007,
108         /*!
109          * \brief Generic State IE
110          * Used by AST_EVENT_DEVICE_STATE_CHANGE
111          * Payload type: UINT
112          * The actual state values depend on the event which
113          * this IE is a part of.
114          */
115          AST_EVENT_IE_STATE              = 0x0008,
116          /*!
117           * \brief Context IE
118           * Used by AST_EVENT_MWI
119           * Payload type: str
120           */
121          AST_EVENT_IE_CONTEXT            = 0x0009,
122         /*! 
123          * \brief Channel Event Type
124          * Used by: AST_EVENT_CEL
125          * Payload type: UINT
126          */
127         AST_EVENT_IE_CEL_EVENT_TYPE      = 0x000a,
128         /*! 
129          * \brief Channel Event Time (seconds)
130          * Used by: AST_EVENT_CEL
131          * Payload type: UINT
132          */
133         AST_EVENT_IE_CEL_EVENT_TIME      = 0x000b,
134         /*! 
135          * \brief Channel Event Time (micro-seconds)
136          * Used by: AST_EVENT_CEL
137          * Payload type: UINT
138          */
139         AST_EVENT_IE_CEL_EVENT_TIME_USEC = 0x000c,
140         /*! 
141          * \brief Channel Event User Event Name
142          * Used by: AST_EVENT_CEL
143          * Payload type: STR
144          */
145         AST_EVENT_IE_CEL_USEREVENT_NAME  = 0x000d,
146         /*! 
147          * \brief Channel Event CID name
148          * Used by: AST_EVENT_CEL
149          * Payload type: STR
150          */
151         AST_EVENT_IE_CEL_CIDNAME         = 0x000e,
152         /*! 
153          * \brief Channel Event CID num
154          * Used by: AST_EVENT_CEL
155          * Payload type: STR
156          */
157         AST_EVENT_IE_CEL_CIDNUM          = 0x000f,
158         /*! 
159          * \brief Channel Event extension name
160          * Used by: AST_EVENT_CEL
161          * Payload type: STR
162          */
163         AST_EVENT_IE_CEL_EXTEN           = 0x0010,
164         /*! 
165          * \brief Channel Event context name
166          * Used by: AST_EVENT_CEL
167          * Payload type: STR
168          */
169         AST_EVENT_IE_CEL_CONTEXT         = 0x0011,
170         /*! 
171          * \brief Channel Event channel name
172          * Used by: AST_EVENT_CEL
173          * Payload type: STR
174          */
175         AST_EVENT_IE_CEL_CHANNAME        = 0x0012,
176         /*! 
177          * \brief Channel Event app name
178          * Used by: AST_EVENT_CEL
179          * Payload type: STR
180          */
181         AST_EVENT_IE_CEL_APPNAME         = 0x0013,
182         /*! 
183          * \brief Channel Event app args/data
184          * Used by: AST_EVENT_CEL
185          * Payload type: STR
186          */
187         AST_EVENT_IE_CEL_APPDATA         = 0x0014,
188         /*! 
189          * \brief Channel Event AMA flags
190          * Used by: AST_EVENT_CEL
191          * Payload type: UINT
192          */
193         AST_EVENT_IE_CEL_AMAFLAGS        = 0x0015,
194         /*! 
195          * \brief Channel Event AccountCode
196          * Used by: AST_EVENT_CEL
197          * Payload type: STR
198          */
199         AST_EVENT_IE_CEL_ACCTCODE        = 0x0016,
200         /*! 
201          * \brief Channel Event UniqueID
202          * Used by: AST_EVENT_CEL
203          * Payload type: STR
204          */
205         AST_EVENT_IE_CEL_UNIQUEID        = 0x0017,
206         /*! 
207          * \brief Channel Event Userfield
208          * Used by: AST_EVENT_CEL
209          * Payload type: STR
210          */
211         AST_EVENT_IE_CEL_USERFIELD       = 0x0018,
212         /*! 
213          * \brief Channel Event CID ANI field
214          * Used by: AST_EVENT_CEL
215          * Payload type: STR
216          */
217         AST_EVENT_IE_CEL_CIDANI          = 0x0019,
218         /*! 
219          * \brief Channel Event CID RDNIS field
220          * Used by: AST_EVENT_CEL
221          * Payload type: STR
222          */
223         AST_EVENT_IE_CEL_CIDRDNIS        = 0x001a,
224         /*! 
225          * \brief Channel Event CID dnid
226          * Used by: AST_EVENT_CEL
227          * Payload type: STR
228          */
229         AST_EVENT_IE_CEL_CIDDNID         = 0x001b,
230         /*! 
231          * \brief Channel Event Peer -- for Things involving multiple channels, like BRIDGE
232          * Used by: AST_EVENT_CEL
233          * Payload type: STR
234          */
235         AST_EVENT_IE_CEL_PEER            = 0x001c,
236         /*! 
237          * \brief Channel Event LinkedID
238          * Used by: AST_EVENT_CEL
239          * Payload type: STR
240          */
241         AST_EVENT_IE_CEL_LINKEDID        = 0x001d,
242         /*! 
243          * \brief Channel Event peeraccount
244          * Used by: AST_EVENT_CEL
245          * Payload type: STR
246          */
247         AST_EVENT_IE_CEL_PEERACCT        = 0x001e,
248         /*! 
249          * \brief Channel Event extra data
250          * Used by: AST_EVENT_CEL
251          * Payload type: STR
252          */
253         AST_EVENT_IE_CEL_EXTRA           = 0x001f,
254         /*!
255          * \brief Description
256          * Used by: AST_EVENT_SUB, AST_EVENT_UNSUB
257          * Payload type: STR
258          */
259         AST_EVENT_IE_DESCRIPTION         = 0x0020,
260         /*!
261          * \brief Entity ID
262          * Used by All events
263          * Payload type: RAW
264          * This IE indicates which server the event originated from
265          */
266         AST_EVENT_IE_EID                 = 0x0021,
267         AST_EVENT_IE_SECURITY_EVENT      = 0x0022,
268         AST_EVENT_IE_EVENT_VERSION       = 0x0023,
269         AST_EVENT_IE_SERVICE             = 0x0024,
270         AST_EVENT_IE_MODULE              = 0x0025,
271         AST_EVENT_IE_ACCOUNT_ID          = 0x0026,
272         AST_EVENT_IE_SESSION_ID          = 0x0027,
273         AST_EVENT_IE_SESSION_TV          = 0x0028,
274         AST_EVENT_IE_ACL_NAME            = 0x0029,
275         AST_EVENT_IE_LOCAL_ADDR          = 0x002a,
276         AST_EVENT_IE_REMOTE_ADDR         = 0x002b,
277         AST_EVENT_IE_EVENT_TV            = 0x002c,
278         AST_EVENT_IE_REQUEST_TYPE        = 0x002d,
279         AST_EVENT_IE_REQUEST_PARAMS      = 0x002e,
280         AST_EVENT_IE_AUTH_METHOD         = 0x002f,
281         AST_EVENT_IE_SEVERITY            = 0x0030,
282         AST_EVENT_IE_EXPECTED_ADDR       = 0x0031,
283         AST_EVENT_IE_CHALLENGE           = 0x0032,
284         AST_EVENT_IE_RESPONSE            = 0x0033,
285         AST_EVENT_IE_EXPECTED_RESPONSE   = 0x0034,
286         AST_EVENT_IE_RECEIVED_CHALLENGE  = 0x0035,
287         AST_EVENT_IE_RECEIVED_HASH       = 0x0036,
288         AST_EVENT_IE_USING_PASSWORD      = 0x0037,
289         AST_EVENT_IE_ATTEMPTED_TRANSPORT = 0x0038,
290
291         /*! \brief Must be the last IE value +1 */
292         AST_EVENT_IE_TOTAL               = 0x0039,
293 };
294
295 /*!
296  * \brief Payload types for event information elements
297  */
298 enum ast_event_ie_pltype {
299         AST_EVENT_IE_PLTYPE_UNKNOWN = -1,
300         /*! Just check if it exists, not the value */
301         AST_EVENT_IE_PLTYPE_EXISTS,
302         /*! Unsigned Integer (Can be used for signed, too ...) */
303         AST_EVENT_IE_PLTYPE_UINT,
304         /*! String */
305         AST_EVENT_IE_PLTYPE_STR,
306         /*! Raw data, compared with memcmp */
307         AST_EVENT_IE_PLTYPE_RAW,
308         /*! Bit flags (unsigned integer, compared using boolean logic) */
309         AST_EVENT_IE_PLTYPE_BITFLAGS,
310 };
311
312 /*!
313  * \brief Results for checking for subscribers
314  *
315  * \ref ast_event_check_subscriber()
316  */
317 enum ast_event_subscriber_res {
318         /*! No subscribers exist */
319         AST_EVENT_SUB_NONE,
320         /*! At least one subscriber exists */
321         AST_EVENT_SUB_EXISTS,
322 };
323
324 struct ast_event;
325 struct ast_event_ie;
326 struct ast_event_sub;
327 struct ast_event_iterator;
328
329 /*!
330  * \brief supposed to be an opaque type
331  *
332  * This is only here so that it can be declared on the stack.
333  */
334 struct ast_event_iterator {
335         uint16_t event_len;
336         const struct ast_event *event;
337         struct ast_event_ie *ie;
338 };
339
340 #endif /* AST_EVENT_DEFS_H */