Add API calls for iterating through an event. This should allow events to have multip...
[asterisk/asterisk.git] / include / asterisk / event_defs.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2007, 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 state of a device has changed */
46         AST_EVENT_DEVICE_STATE = 0x05,
47         /*! Number of event types.  This should be the last event type + 1 */
48         AST_EVENT_TOTAL        = 0x06,
49 };
50
51 /*! \brief Event Information Element types */
52 enum ast_event_ie_type {
53         /*! Used to terminate the arguments to event functions */
54         AST_EVENT_IE_END       = -1,
55
56         /*! 
57          * \brief Number of new messages
58          * Used by: AST_EVENT_MWI 
59          * Payload type: UINT
60          */
61         AST_EVENT_IE_NEWMSGS   = 0x01,
62         /*! 
63          * \brief Number of
64          * Used by: AST_EVENT_MWI 
65          * Payload type: UINT
66          */
67         AST_EVENT_IE_OLDMSGS   = 0x02,
68         /*! 
69          * \brief Mailbox name \verbatim (mailbox[@context]) \endverbatim
70          * Used by: AST_EVENT_MWI 
71          * Payload type: STR
72          */
73         AST_EVENT_IE_MAILBOX   = 0x03,
74         /*! 
75          * \brief Unique ID
76          * Used by: AST_EVENT_SUB, AST_EVENT_UNSUB
77          * Payload type: UINT
78          */
79         AST_EVENT_IE_UNIQUEID  = 0x04,
80         /*! 
81          * \brief Event type 
82          * Used by: AST_EVENT_SUB, AST_EVENT_UNSUB
83          * Payload type: UINT
84          */
85         AST_EVENT_IE_EVENTTYPE = 0x05,
86         /*!
87          * \brief Hint that someone cares that an IE exists
88          * Used by: AST_EVENT_SUB
89          * Payload type: UINT (ast_event_ie_type)
90          */
91         AST_EVENT_IE_EXISTS    = 0x06,
92         /*!
93          * \brief Device Name
94          * Used by AST_EVENT_DEVICE_STATE
95          * Payload type: STR
96          */
97         AST_EVENT_IE_DEVICE    = 0x07,
98         /*!
99          * \brief Generic State IE
100          * Used by AST_EVENT_DEVICE_STATE
101          * Payload type: UINT
102          * The actual state values depend on the event which
103          * this IE is a part of.
104          */
105          AST_EVENT_IE_STATE    = 0x08,
106          /*!
107           * \brief Context IE
108           * Used by AST_EVENT_MWI
109           * Payload type: str
110           */
111          AST_EVENT_IE_CONTEXT  = 0x09,
112 };
113
114 /*!
115  * \brief Payload types for event information elements
116  */
117 enum ast_event_ie_pltype {
118         /*! Just check if it exists, not the value */
119         AST_EVENT_IE_PLTYPE_EXISTS,
120         /*! Unsigned Integer (Can be used for signed, too ...) */
121         AST_EVENT_IE_PLTYPE_UINT,
122         /*! String */
123         AST_EVENT_IE_PLTYPE_STR,
124 };
125
126 /*!
127  * \brief Results for checking for subscribers
128  *
129  * \ref ast_event_check_subscriber()
130  */
131 enum ast_event_subscriber_res {
132         /*! No subscribers exist */
133         AST_EVENT_SUB_NONE,
134         /*! At least one subscriber exists */
135         AST_EVENT_SUB_EXISTS,
136 };
137
138 struct ast_event;
139 struct ast_event_ie;
140 struct ast_event_sub;
141 struct ast_event_iterator;
142
143 #endif /* AST_EVENT_DEFS_H */