00001 /* 00002 * Asterisk -- An open source telephony toolkit. 00003 * 00004 * Copyright (C) 2007 - 2008, Digium, Inc. 00005 * 00006 * Russell Bryant <russell@digium.com> 00007 * 00008 * See http://www.asterisk.org for more information about 00009 * the Asterisk project. Please do not directly contact 00010 * any of the maintainers of this project for assistance; 00011 * the project provides a web site, mailing lists and IRC 00012 * channels for your use. 00013 * 00014 * This program is free software, distributed under the terms of 00015 * the GNU General Public License Version 2. See the LICENSE file 00016 * at the top of the source tree. 00017 */ 00018 00019 /*! 00020 * \file 00021 * \author Russell Bryant <russell@digium.com> 00022 * \brief Generic event system 00023 */ 00024 00025 #ifndef AST_EVENT_DEFS_H 00026 #define AST_EVENT_DEFS_H 00027 00028 /*! \brief Event types 00029 * \note These values can *never* change. */ 00030 enum ast_event_type { 00031 /*! Reserved to provide the ability to subscribe to all events. A specific 00032 * event should never have a payload of 0. */ 00033 AST_EVENT_ALL = 0x00, 00034 /*! This event type is reserved for use by third-party modules to create 00035 * custom events without having to modify this file. 00036 * \note There are no "custom" IE types, because IEs only have to be 00037 * unique to the event itself, not necessarily across all events. */ 00038 AST_EVENT_CUSTOM = 0x01, 00039 /*! Voicemail message waiting indication */ 00040 AST_EVENT_MWI = 0x02, 00041 /*! Someone has subscribed to events */ 00042 AST_EVENT_SUB = 0x03, 00043 /*! Someone has unsubscribed from events */ 00044 AST_EVENT_UNSUB = 0x04, 00045 /*! The aggregate state of a device across all servers configured to be 00046 * a part of a device state cluster has changed. */ 00047 AST_EVENT_DEVICE_STATE = 0x05, 00048 /*! The state of a device has changed on _one_ server. This should not be used 00049 * directly, in general. Use AST_EVENT_DEVICE_STATE instead. */ 00050 AST_EVENT_DEVICE_STATE_CHANGE = 0x06, 00051 /*! Number of event types. This should be the last event type + 1 */ 00052 AST_EVENT_TOTAL = 0x07, 00053 }; 00054 00055 /*! \brief Event Information Element types */ 00056 enum ast_event_ie_type { 00057 /*! Used to terminate the arguments to event functions */ 00058 AST_EVENT_IE_END = -1, 00059 00060 /*! 00061 * \brief Number of new messages 00062 * Used by: AST_EVENT_MWI 00063 * Payload type: UINT 00064 */ 00065 AST_EVENT_IE_NEWMSGS = 0x01, 00066 /*! 00067 * \brief Number of 00068 * Used by: AST_EVENT_MWI 00069 * Payload type: UINT 00070 */ 00071 AST_EVENT_IE_OLDMSGS = 0x02, 00072 /*! 00073 * \brief Mailbox name \verbatim (mailbox[@context]) \endverbatim 00074 * Used by: AST_EVENT_MWI 00075 * Payload type: STR 00076 */ 00077 AST_EVENT_IE_MAILBOX = 0x03, 00078 /*! 00079 * \brief Unique ID 00080 * Used by: AST_EVENT_SUB, AST_EVENT_UNSUB 00081 * Payload type: UINT 00082 */ 00083 AST_EVENT_IE_UNIQUEID = 0x04, 00084 /*! 00085 * \brief Event type 00086 * Used by: AST_EVENT_SUB, AST_EVENT_UNSUB 00087 * Payload type: UINT 00088 */ 00089 AST_EVENT_IE_EVENTTYPE = 0x05, 00090 /*! 00091 * \brief Hint that someone cares that an IE exists 00092 * Used by: AST_EVENT_SUB 00093 * Payload type: UINT (ast_event_ie_type) 00094 */ 00095 AST_EVENT_IE_EXISTS = 0x06, 00096 /*! 00097 * \brief Device Name 00098 * Used by AST_EVENT_DEVICE_STATE_CHANGE 00099 * Payload type: STR 00100 */ 00101 AST_EVENT_IE_DEVICE = 0x07, 00102 /*! 00103 * \brief Generic State IE 00104 * Used by AST_EVENT_DEVICE_STATE_CHANGE 00105 * Payload type: UINT 00106 * The actual state values depend on the event which 00107 * this IE is a part of. 00108 */ 00109 AST_EVENT_IE_STATE = 0x08, 00110 /*! 00111 * \brief Context IE 00112 * Used by AST_EVENT_MWI 00113 * Payload type: str 00114 */ 00115 AST_EVENT_IE_CONTEXT = 0x09, 00116 /*! 00117 * \brief Entity ID 00118 * Used by All events 00119 * Payload type: RAW 00120 * This IE indicates which server the event originated from 00121 */ 00122 AST_EVENT_IE_EID = 0x0A, 00123 }; 00124 00125 #define AST_EVENT_IE_MAX AST_EVENT_IE_EID 00126 00127 /*! 00128 * \brief Payload types for event information elements 00129 */ 00130 enum ast_event_ie_pltype { 00131 AST_EVENT_IE_PLTYPE_UNKNOWN = -1, 00132 /*! Just check if it exists, not the value */ 00133 AST_EVENT_IE_PLTYPE_EXISTS, 00134 /*! Unsigned Integer (Can be used for signed, too ...) */ 00135 AST_EVENT_IE_PLTYPE_UINT, 00136 /*! String */ 00137 AST_EVENT_IE_PLTYPE_STR, 00138 /*! Raw data, compared with memcmp */ 00139 AST_EVENT_IE_PLTYPE_RAW, 00140 }; 00141 00142 /*! 00143 * \brief Results for checking for subscribers 00144 * 00145 * \ref ast_event_check_subscriber() 00146 */ 00147 enum ast_event_subscriber_res { 00148 /*! No subscribers exist */ 00149 AST_EVENT_SUB_NONE, 00150 /*! At least one subscriber exists */ 00151 AST_EVENT_SUB_EXISTS, 00152 }; 00153 00154 struct ast_event; 00155 struct ast_event_ie; 00156 struct ast_event_sub; 00157 struct ast_event_iterator; 00158 00159 /*! 00160 * \brief supposed to be an opaque type 00161 * 00162 * This is only here so that it can be declared on the stack. 00163 */ 00164 struct ast_event_iterator { 00165 uint16_t event_len; 00166 const struct ast_event *event; 00167 struct ast_event_ie *ie; 00168 }; 00169 00170 #endif /* AST_EVENT_DEFS_H */