123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- /*
- * Asterisk -- An open source telephony toolkit.
- *
- * Copyright (C) 2008 - 2009, Digium, Inc.
- *
- * See http://www.asterisk.org for more information about
- * the Asterisk project. Please do not directly contact
- * any of the maintainers of this project for assistance;
- * the project provides a web site, mailing lists and IRC
- * channels for your use.
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License Version 2. See the LICENSE file
- * at the top of the source tree.
- */
- /*!
- * \file
- * \brief Call Event Logging API
- *
- * \todo TODO: There some event types that have been defined here, but are not
- * yet used anywhere in the code. It would be really awesome if someone
- * went through and had Asterisk generate these events where it is
- * appropriate to do so. The defined, but unused events are:
- * CONF_ENTER, CONF_EXIT, CONF_START, CONF_END, 3WAY_START, 3WAY_END,
- * TRANSFER, and HOOKFLASH.
- */
- #ifndef __AST_CEL_H__
- #define __AST_CEL_H__
- #if defined(__cplusplus) || defined(c_plusplus)
- extern "C" {
- #endif
- #include "asterisk/event.h"
- /*!
- * \brief CEL event types
- */
- enum ast_cel_event_type {
- AST_CEL_INVALID_VALUE = -1,
- AST_CEL_ALL = 0,
- /*! \brief channel birth */
- AST_CEL_CHANNEL_START = 1,
- /*! \brief channel end */
- AST_CEL_CHANNEL_END = 2,
- /*! \brief hangup terminates connection */
- AST_CEL_HANGUP = 3,
- /*! \brief A ringing phone is answered */
- AST_CEL_ANSWER = 4,
- /*! \brief an app starts */
- AST_CEL_APP_START = 5,
- /*! \brief an app ends */
- AST_CEL_APP_END = 6,
- /*! \brief channel enters a bridge */
- AST_CEL_BRIDGE_ENTER = 7,
- /*! \brief channel exits a bridge */
- AST_CEL_BRIDGE_EXIT = 8,
- /*! \brief a channel is parked */
- AST_CEL_PARK_START = 9,
- /*! \brief channel out of the park */
- AST_CEL_PARK_END = 10,
- /*! \brief a transfer occurs */
- AST_CEL_BLINDTRANSFER = 11,
- /*! \brief a transfer occurs */
- AST_CEL_ATTENDEDTRANSFER = 12,
- /*! \brief a user-defined event, the event name field should be set */
- AST_CEL_USER_DEFINED = 13,
- /*! \brief the last channel with the given linkedid is retired */
- AST_CEL_LINKEDID_END = 14,
- /*! \brief a directed pickup was performed on this channel */
- AST_CEL_PICKUP = 15,
- /*! \brief this call was forwarded somewhere else */
- AST_CEL_FORWARD = 16,
- /*! \brief A local channel optimization occurred */
- AST_CEL_LOCAL_OPTIMIZE = 17,
- };
- /*!
- * \brief Check to see if CEL is enabled
- *
- * \since 1.8
- *
- * \retval zero not enabled
- * \retval non-zero enabled
- */
- unsigned int ast_cel_check_enabled(void);
- /*!
- * \brief Get the name of a CEL event type
- *
- * \param type the type to get the name of
- *
- * \since 1.8
- *
- * \return the string representation of the type
- */
- const char *ast_cel_get_type_name(enum ast_cel_event_type type);
- /*!
- * \brief Get the event type from a string
- *
- * \param name the event type name as a string
- *
- * \since 1.8
- *
- * \return the ast_cel_event_type given by the string
- */
- enum ast_cel_event_type ast_cel_str_to_event_type(const char *name);
- /*!
- * \brief Create a fake channel from data in a CEL event
- *
- * \note
- * This function creates a fake channel containing the
- * serialized channel data in the given cel event. It should be
- * released with ast_channel_unref() but could be released with
- * ast_channel_release().
- *
- * \param event the CEL event
- *
- * \since 1.8
- *
- * \return a channel with the data filled in, or NULL on error
- *
- * \todo This function is \b very expensive, especially given that some CEL backends
- * use it on \b every CEL event. This function really needs to go away at
- * some point.
- */
- struct ast_channel *ast_cel_fabricate_channel_from_event(const struct ast_event *event);
- /*!
- * \brief Helper struct for getting the fields out of a CEL event
- */
- struct ast_cel_event_record {
- /*!
- * \brief struct ABI version
- * \note This \b must be incremented when the struct changes.
- */
- #define AST_CEL_EVENT_RECORD_VERSION 2
- /*!
- * \brief struct ABI version
- * \note This \b must stay as the first member.
- */
- uint32_t version;
- enum ast_cel_event_type event_type;
- struct timeval event_time;
- const char *event_name;
- const char *user_defined_name;
- const char *caller_id_name;
- const char *caller_id_num;
- const char *caller_id_ani;
- const char *caller_id_rdnis;
- const char *caller_id_dnid;
- const char *extension;
- const char *context;
- const char *channel_name;
- const char *application_name;
- const char *application_data;
- const char *account_code;
- const char *peer_account;
- const char *unique_id;
- const char *linked_id;
- uint amaflag;
- const char *user_field;
- const char *peer;
- const char *extra;
- };
- /*!
- * \brief Fill in an ast_cel_event_record from a CEL event
- *
- * \param[in] event the CEL event
- * \param[out] r the ast_cel_event_record to fill in
- *
- * \since 1.8
- *
- * \retval 0 success
- * \retval non-zero failure
- */
- int ast_cel_fill_record(const struct ast_event *event, struct ast_cel_event_record *r);
- /*!
- * \brief Publish a CEL event
- * \since 12
- *
- * \param chan This is the primary channel associated with this channel event.
- * \param event_type This is the type of call event being reported.
- * \param blob This contains any additional parameters that need to be conveyed for this event.
- */
- void ast_cel_publish_event(struct ast_channel *chan,
- enum ast_cel_event_type event_type,
- struct ast_json *blob);
- /*!
- * \brief Get the CEL topic
- *
- * \retval The CEL topic
- * \retval NULL if not allocated
- */
- struct stasis_topic *ast_cel_topic(void);
- /*! \brief A structure to hold CEL global configuration options */
- struct ast_cel_general_config {
- AST_DECLARE_STRING_FIELDS(
- AST_STRING_FIELD(date_format); /*!< The desired date format for logging */
- );
- int enable; /*!< Whether CEL is enabled */
- int64_t events; /*!< The events to be logged */
- /*! The apps for which to log app start and end events. This is
- * ast_str_container_alloc()ed and filled with ao2-allocated
- * char* which are all-lowercase application names. */
- struct ao2_container *apps;
- };
- /*!
- * \brief Allocate a CEL configuration object
- *
- * \retval NULL on error
- * \retval The new CEL configuration object
- */
- void *ast_cel_general_config_alloc(void);
- /*!
- * \since 12
- * \brief Obtain the current CEL configuration
- *
- * The configuration is a ref counted object. The caller of this function must
- * decrement the ref count when finished with the configuration.
- *
- * \retval NULL on error
- * \retval The current CEL configuration
- */
- struct ast_cel_general_config *ast_cel_get_config(void);
- /*!
- * \since 12
- * \brief Set the current CEL configuration
- *
- * \param config The new CEL configuration
- */
- void ast_cel_set_config(struct ast_cel_general_config *config);
- struct ast_channel_snapshot;
- /*!
- * \brief Allocate and populate a CEL event structure
- *
- * \param snapshot An ast_channel_snapshot of the primary channel associated
- * with this channel event.
- * \param event_type The type of call event being reported.
- * \param userdefevname Custom name for the call event. (optional)
- * \param extra An event-specific opaque JSON blob to be rendered and placed
- * in the "CEL_EXTRA" information element of the call event. (optional)
- * \param peer_str A list of comma-separated peer channel names. (optional)
- *
- * \since 12
- *
- * \retval The created ast_event structure
- * \retval NULL on failure
- */
- struct ast_event *ast_cel_create_event(struct ast_channel_snapshot *snapshot,
- enum ast_cel_event_type event_type, const char *userdefevname,
- struct ast_json *extra, const char *peer_str);
- /*!
- * \brief CEL backend callback
- */
- /*typedef int (*ast_cel_backend_cb)(struct ast_cel_event_record *cel);*/
- typedef void (*ast_cel_backend_cb)(struct ast_event *event);
- /*!
- * \brief Register a CEL backend
- *
- * \param name Name of backend to register
- * \param backend_callback Callback to register
- *
- * \retval zero on success
- * \retval non-zero on failure
- * \since 12
- */
- int ast_cel_backend_register(const char *name, ast_cel_backend_cb backend_callback);
- /*!
- * \brief Unregister a CEL backend
- *
- * \param name Name of backend to unregister
- *
- * \retval zero on success
- * \retval non-zero on failure
- * \since 12
- */
- int ast_cel_backend_unregister(const char *name);
- #if defined(__cplusplus) || defined(c_plusplus)
- }
- #endif
- #endif /* __AST_CEL_H__ */
|