Refactor CEL to avoid using the event system core
[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 no longer go over the wire and can change when items are removed. */
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         /*! Someone has subscribed to events */
40         AST_EVENT_SUB                 = 0x02,
41         /*! Channel Event Logging events */
42         AST_EVENT_CEL                 = 0x03,
43         /*! Number of event types.  This should be the last event type + 1 */
44         AST_EVENT_TOTAL               = 0x04,
45 };
46
47 /*! \brief Event Information Element types */
48 enum ast_event_ie_type {
49         /*! Used to terminate the arguments to event functions */
50         AST_EVENT_IE_END                 = -1,
51
52         /*! 
53          * \brief Unique ID
54          * Used by: AST_EVENT_SUB, AST_EVENT_UNSUB
55          * Payload type: UINT
56          */
57         AST_EVENT_IE_UNIQUEID            = 0x0001,
58         /*! 
59          * \brief Event type 
60          * Used by: AST_EVENT_SUB, AST_EVENT_UNSUB
61          * Payload type: UINT
62          */
63         AST_EVENT_IE_EVENTTYPE           = 0x0002,
64         /*!
65          * \brief Hint that someone cares that an IE exists
66          * Used by: AST_EVENT_SUB
67          * Payload type: UINT (ast_event_ie_type)
68          */
69         AST_EVENT_IE_EXISTS              = 0x0003,
70          /*!
71           * \brief Context IE
72           * Used by AST_EVENT_MWI
73           * Payload type: str
74           */
75          AST_EVENT_IE_CONTEXT            = 0x0004,
76         /*! 
77          * \brief Channel Event Type
78          * Used by: AST_EVENT_CEL
79          * Payload type: UINT
80          */
81         AST_EVENT_IE_CEL_EVENT_TYPE      = 0x0005,
82         /*! 
83          * \brief Channel Event Time (seconds)
84          * Used by: AST_EVENT_CEL
85          * Payload type: UINT
86          */
87         AST_EVENT_IE_CEL_EVENT_TIME      = 0x0006,
88         /*! 
89          * \brief Channel Event Time (micro-seconds)
90          * Used by: AST_EVENT_CEL
91          * Payload type: UINT
92          */
93         AST_EVENT_IE_CEL_EVENT_TIME_USEC = 0x0007,
94         /*! 
95          * \brief Channel Event User Event Name
96          * Used by: AST_EVENT_CEL
97          * Payload type: STR
98          */
99         AST_EVENT_IE_CEL_USEREVENT_NAME  = 0x0008,
100         /*! 
101          * \brief Channel Event CID name
102          * Used by: AST_EVENT_CEL
103          * Payload type: STR
104          */
105         AST_EVENT_IE_CEL_CIDNAME         = 0x0009,
106         /*! 
107          * \brief Channel Event CID num
108          * Used by: AST_EVENT_CEL
109          * Payload type: STR
110          */
111         AST_EVENT_IE_CEL_CIDNUM          = 0x000a,
112         /*! 
113          * \brief Channel Event extension name
114          * Used by: AST_EVENT_CEL
115          * Payload type: STR
116          */
117         AST_EVENT_IE_CEL_EXTEN           = 0x000b,
118         /*! 
119          * \brief Channel Event context name
120          * Used by: AST_EVENT_CEL
121          * Payload type: STR
122          */
123         AST_EVENT_IE_CEL_CONTEXT         = 0x000c,
124         /*! 
125          * \brief Channel Event channel name
126          * Used by: AST_EVENT_CEL
127          * Payload type: STR
128          */
129         AST_EVENT_IE_CEL_CHANNAME        = 0x000d,
130         /*! 
131          * \brief Channel Event app name
132          * Used by: AST_EVENT_CEL
133          * Payload type: STR
134          */
135         AST_EVENT_IE_CEL_APPNAME         = 0x000e,
136         /*! 
137          * \brief Channel Event app args/data
138          * Used by: AST_EVENT_CEL
139          * Payload type: STR
140          */
141         AST_EVENT_IE_CEL_APPDATA         = 0x000f,
142         /*! 
143          * \brief Channel Event AMA flags
144          * Used by: AST_EVENT_CEL
145          * Payload type: UINT
146          */
147         AST_EVENT_IE_CEL_AMAFLAGS        = 0x0010,
148         /*! 
149          * \brief Channel Event AccountCode
150          * Used by: AST_EVENT_CEL
151          * Payload type: STR
152          */
153         AST_EVENT_IE_CEL_ACCTCODE        = 0x0011,
154         /*! 
155          * \brief Channel Event UniqueID
156          * Used by: AST_EVENT_CEL
157          * Payload type: STR
158          */
159         AST_EVENT_IE_CEL_UNIQUEID        = 0x0012,
160         /*! 
161          * \brief Channel Event Userfield
162          * Used by: AST_EVENT_CEL
163          * Payload type: STR
164          */
165         AST_EVENT_IE_CEL_USERFIELD       = 0x0013,
166         /*! 
167          * \brief Channel Event CID ANI field
168          * Used by: AST_EVENT_CEL
169          * Payload type: STR
170          */
171         AST_EVENT_IE_CEL_CIDANI          = 0x0014,
172         /*! 
173          * \brief Channel Event CID RDNIS field
174          * Used by: AST_EVENT_CEL
175          * Payload type: STR
176          */
177         AST_EVENT_IE_CEL_CIDRDNIS        = 0x0015,
178         /*! 
179          * \brief Channel Event CID dnid
180          * Used by: AST_EVENT_CEL
181          * Payload type: STR
182          */
183         AST_EVENT_IE_CEL_CIDDNID         = 0x0016,
184         /*! 
185          * \brief Channel Event Peer -- for Things involving multiple channels, like BRIDGE
186          * Used by: AST_EVENT_CEL
187          * Payload type: STR
188          */
189         AST_EVENT_IE_CEL_PEER            = 0x0017,
190         /*! 
191          * \brief Channel Event LinkedID
192          * Used by: AST_EVENT_CEL
193          * Payload type: STR
194          */
195         AST_EVENT_IE_CEL_LINKEDID        = 0x0018,
196         /*! 
197          * \brief Channel Event peeraccount
198          * Used by: AST_EVENT_CEL
199          * Payload type: STR
200          */
201         AST_EVENT_IE_CEL_PEERACCT        = 0x0019,
202         /*! 
203          * \brief Channel Event extra data
204          * Used by: AST_EVENT_CEL
205          * Payload type: STR
206          */
207         AST_EVENT_IE_CEL_EXTRA           = 0x001a,
208         /*!
209          * \brief Description
210          * Used by: AST_EVENT_SUB, AST_EVENT_UNSUB
211          * Payload type: STR
212          */
213         AST_EVENT_IE_DESCRIPTION         = 0x001b,
214         /*!
215          * \brief Entity ID
216          * Used by All events
217          * Payload type: RAW
218          * This IE indicates which server the event originated from
219          */
220         AST_EVENT_IE_EVENT_VERSION       = 0x001c,
221         AST_EVENT_IE_SERVICE             = 0x001d,
222         AST_EVENT_IE_MODULE              = 0x001e,
223         AST_EVENT_IE_ACCOUNT_ID          = 0x001f,
224         AST_EVENT_IE_SESSION_ID          = 0x0020,
225         AST_EVENT_IE_SESSION_TV          = 0x0021,
226         AST_EVENT_IE_ACL_NAME            = 0x0022,
227         AST_EVENT_IE_LOCAL_ADDR          = 0x0023,
228         AST_EVENT_IE_REMOTE_ADDR         = 0x0024,
229         AST_EVENT_IE_EVENT_TV            = 0x0025,
230         AST_EVENT_IE_REQUEST_TYPE        = 0x0026,
231         AST_EVENT_IE_REQUEST_PARAMS      = 0x0027,
232         AST_EVENT_IE_AUTH_METHOD         = 0x0028,
233         AST_EVENT_IE_SEVERITY            = 0x0029,
234         AST_EVENT_IE_EXPECTED_ADDR       = 0x002a,
235         AST_EVENT_IE_CHALLENGE           = 0x002b,
236         AST_EVENT_IE_RESPONSE            = 0x002c,
237         AST_EVENT_IE_EXPECTED_RESPONSE   = 0x002e,
238         AST_EVENT_IE_RECEIVED_CHALLENGE  = 0x002f,
239         AST_EVENT_IE_RECEIVED_HASH       = 0x0030,
240         AST_EVENT_IE_USING_PASSWORD      = 0x0031,
241         AST_EVENT_IE_ATTEMPTED_TRANSPORT = 0x0032,
242
243         /*! \brief Must be the last IE value +1 */
244         AST_EVENT_IE_TOTAL               = 0x0033,
245 };
246
247 /*!
248  * \brief Payload types for event information elements
249  */
250 enum ast_event_ie_pltype {
251         AST_EVENT_IE_PLTYPE_UNKNOWN = -1,
252         /*! Unsigned Integer (Can be used for signed, too ...) */
253         AST_EVENT_IE_PLTYPE_UINT,
254         /*! String */
255         AST_EVENT_IE_PLTYPE_STR,
256         /*! Raw data, compared with memcmp */
257         AST_EVENT_IE_PLTYPE_RAW,
258 };
259
260 /*!
261  * \brief Results for checking for subscribers
262  *
263  * \ref ast_event_check_subscriber()
264  */
265 enum ast_event_subscriber_res {
266         /*! No subscribers exist */
267         AST_EVENT_SUB_NONE,
268         /*! At least one subscriber exists */
269         AST_EVENT_SUB_EXISTS,
270 };
271
272 struct ast_event;
273 struct ast_event_ie;
274 struct ast_event_iterator;
275
276 /*!
277  * \brief supposed to be an opaque type
278  *
279  * This is only here so that it can be declared on the stack.
280  */
281 struct ast_event_iterator {
282         uint16_t event_len;
283         const struct ast_event *event;
284         struct ast_event_ie *ie;
285 };
286
287 #endif /* AST_EVENT_DEFS_H */