Files
asterisk/res/ari/ari_model_validators.h
Daniel Donoghue 8f4360f082 stasis_broadcast: Add optional ARI broadcast with first-claim-wins
Adds two optional modules:
res_stasis_broadcast.so: Infrastructure for broadcasting a single incoming
channel to multiple ARI applications with atomic first-claim-wins semantics.

app_stasis_broadcast.so: Provides the StasisBroadcast() dialplan application
which invokes the broadcast infrastructure.

Both modules are self-contained; if neither is loaded there is zero runtime
impact. Loading them does not alter existing Stasis or ARI behavior unless
explicitly used.

Key Features (only active when modules are loaded):
Fisher-Yates shuffled broadcast dispatch for fair claim races
Atomic claim operations using mutex + condition variable signaling
Configurable broadcast timeouts
Safe regex application filtering with validation to mitigate ReDoS risk
Thread-safe channel variable snapshotting (channel locked during reads)
Late-claim safety: broadcast context kept alive until after the Stasis
session ends so concurrent claimants always receive 409 Conflict rather
than 404 Not Found
Memory safety via RAII_VAR, ast_json_ref/unref, and ao2 reference counting

Components Added:
res/res_stasis_broadcast.c: Core broadcast + claim logic
apps/app_stasis_broadcast.c: StasisBroadcast() dialplan application
include/asterisk/stasis_app_broadcast.h: Public API header
res/ari/resource_events.c: Integrates POST /ari/events/claim endpoint
rest-api/api-docs/events.json: New CallBroadcast and CallClaimed events

Implementation Notes:
Broadcast contexts reside in an ao2 hash container keyed by channel id. Each
context holds atomic claim state, winner application name, timeout metadata,
and a condition variable for waiters. Broadcast contexts are kept alive until
after stasis_app_exec() returns so that concurrent claimants racing against
the timeout always receive 409 Conflict. Broadcast dispatch calls
stasis_app_send() directly for each matching application in shuffled order.
Regex filters are validated with bounded length, group depth, quantified
group count, and alternation limits to reduce pathological backtracking.
Timeout calculation uses timespec arithmetic with overflow-safe millisecond
remainder handling. Event JSON follows existing Stasis/ARI conventions;
references are managed correctly to avoid leaks or double frees.

Optional Nature / Impact:
No changes to existing APIs, events, or applications when absent.
Clean fallback: systems ignoring the modules behave identically to prior
versions.

Development was assisted by Claude (Anthropic). All generated code has been
reviewed, tested, and is understood by the author.

UserNote: New optional modules res_stasis_broadcast.so and
app_stasis_broadcast.so enable broadcasting an incoming channel to multiple
ARI applications. The first application to successfully claim (via
POST /ari/events/claim) wins channel control. StasisBroadcast() dialplan
application initiates broadcasts. CallBroadcast and CallClaimed events notify
applications. When modules are not loaded, behavior is unchanged.

DeveloperNote: New public APIs in stasis_app_broadcast.h:
stasis_app_broadcast_channel(), stasis_app_claim_channel(),
stasis_app_broadcast_winner(), and stasis_app_broadcast_wait(). New ARI event
types (CallBroadcast, CallClaimed) added to events.json. All code is isolated;
no existing ABI modified.
2026-06-04 13:55:16 +00:00

2069 lines
54 KiB
C

/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2013, 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 Generated file - Build validators for ARI model objects.
*
* In addition to the normal validation functions one would normally expect,
* each validator has a ast_ari_validate_{id}_fn() companion function that returns
* the validator's function pointer.
*
* The reason for this seamingly useless indirection is the way function
* pointers used to interfere with module loading. Previously, Asterisk
* attempted to dlopen() each module using \c RTLD_LAZY in order to read some
* metadata from the module. Using functions to get the function pointer
* allowed us to be lazy.
*/
/*
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* !!!!! DO NOT EDIT !!!!!
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* This file is generated by a mustache template. Please see the original
* template in rest-api-templates/ari_model_validators.h.mustache
*/
#ifndef _ASTERISK_ARI_MODEL_H
#define _ASTERISK_ARI_MODEL_H
#include "asterisk/json.h"
/*! @{ */
/*!
* \brief Validator for native Swagger void.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_void(struct ast_json *json);
/*!
* \brief Validator for native Swagger object.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_object(struct ast_json *json);
/*!
* \brief Validator for native Swagger byte.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_byte(struct ast_json *json);
/*!
* \brief Validator for native Swagger boolean.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_boolean(struct ast_json *json);
/*!
* \brief Validator for native Swagger int.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_int(struct ast_json *json);
/*!
* \brief Validator for native Swagger long.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_long(struct ast_json *json);
/*!
* \brief Validator for native Swagger float.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_float(struct ast_json *json);
/*!
* \brief Validator for native Swagger double.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_double(struct ast_json *json);
/*!
* \brief Validator for native Swagger string.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_string(struct ast_json *json);
/*!
* \brief Validator for native Swagger date.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_date(struct ast_json *json);
/*!
* \brief Validator for a Swagger List[]/JSON array.
*
* \param json JSON object to validate.
* \param fn Validator to call on every element in the array.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_list(struct ast_json *json, int (*fn)(struct ast_json *));
/*! @} */
/*!
* \brief Function type for validator functions. Allows for
*/
typedef int (*ari_validator)(struct ast_json *json);
/*!
* \brief Validator for AsteriskInfo.
*
* Asterisk system information
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_asterisk_info(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_asterisk_info().
*/
ari_validator ast_ari_validate_asterisk_info_fn(void);
/*!
* \brief Validator for AsteriskPing.
*
* Asterisk ping information
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_asterisk_ping(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_asterisk_ping().
*/
ari_validator ast_ari_validate_asterisk_ping_fn(void);
/*!
* \brief Validator for BuildInfo.
*
* Info about how Asterisk was built
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_build_info(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_build_info().
*/
ari_validator ast_ari_validate_build_info_fn(void);
/*!
* \brief Validator for ConfigInfo.
*
* Info about Asterisk configuration
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_config_info(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_config_info().
*/
ari_validator ast_ari_validate_config_info_fn(void);
/*!
* \brief Validator for ConfigTuple.
*
* A key/value pair that makes up part of a configuration object.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_config_tuple(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_config_tuple().
*/
ari_validator ast_ari_validate_config_tuple_fn(void);
/*!
* \brief Validator for LogChannel.
*
* Details of an Asterisk log channel
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_log_channel(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_log_channel().
*/
ari_validator ast_ari_validate_log_channel_fn(void);
/*!
* \brief Validator for Module.
*
* Details of an Asterisk module
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_module(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_module().
*/
ari_validator ast_ari_validate_module_fn(void);
/*!
* \brief Validator for SetId.
*
* Effective user/group id
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_set_id(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_set_id().
*/
ari_validator ast_ari_validate_set_id_fn(void);
/*!
* \brief Validator for StatusInfo.
*
* Info about Asterisk status
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_status_info(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_status_info().
*/
ari_validator ast_ari_validate_status_info_fn(void);
/*!
* \brief Validator for SystemInfo.
*
* Info about Asterisk
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_system_info(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_system_info().
*/
ari_validator ast_ari_validate_system_info_fn(void);
/*!
* \brief Validator for Variable.
*
* The value of a channel variable
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_variable(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_variable().
*/
ari_validator ast_ari_validate_variable_fn(void);
/*!
* \brief Validator for Endpoint.
*
* An external device that may offer/accept calls to/from Asterisk.
*
* Unlike most resources, which have a single unique identifier, an endpoint is uniquely identified by the technology/resource pair.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_endpoint(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_endpoint().
*/
ari_validator ast_ari_validate_endpoint_fn(void);
/*!
* \brief Validator for TextMessage.
*
* A text message.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_text_message(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_text_message().
*/
ari_validator ast_ari_validate_text_message_fn(void);
/*!
* \brief Validator for CallerID.
*
* Caller identification
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_caller_id(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_caller_id().
*/
ari_validator ast_ari_validate_caller_id_fn(void);
/*!
* \brief Validator for Channel.
*
* A specific communication connection between Asterisk and an Endpoint.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel().
*/
ari_validator ast_ari_validate_channel_fn(void);
/*!
* \brief Validator for Dialed.
*
* Dialed channel information.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_dialed(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_dialed().
*/
ari_validator ast_ari_validate_dialed_fn(void);
/*!
* \brief Validator for DialplanCEP.
*
* Dialplan location (context/extension/priority)
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_dialplan_cep(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_dialplan_cep().
*/
ari_validator ast_ari_validate_dialplan_cep_fn(void);
/*!
* \brief Validator for RTPstat.
*
* A statistics of a RTP.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_rtpstat(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_rtpstat().
*/
ari_validator ast_ari_validate_rtpstat_fn(void);
/*!
* \brief Validator for Bridge.
*
* The merging of media from one or more channels.
*
* Everyone on the bridge receives the same audio.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_bridge(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_bridge().
*/
ari_validator ast_ari_validate_bridge_fn(void);
/*!
* \brief Validator for LiveRecording.
*
* A recording that is in progress
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_live_recording(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_live_recording().
*/
ari_validator ast_ari_validate_live_recording_fn(void);
/*!
* \brief Validator for StoredRecording.
*
* A past recording that may be played back.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_stored_recording(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_stored_recording().
*/
ari_validator ast_ari_validate_stored_recording_fn(void);
/*!
* \brief Validator for FormatLangPair.
*
* Identifies the format and language of a sound file
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_format_lang_pair(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_format_lang_pair().
*/
ari_validator ast_ari_validate_format_lang_pair_fn(void);
/*!
* \brief Validator for Sound.
*
* A media file that may be played back.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_sound(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_sound().
*/
ari_validator ast_ari_validate_sound_fn(void);
/*!
* \brief Validator for Playback.
*
* Object representing the playback of media to a channel
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_playback(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_playback().
*/
ari_validator ast_ari_validate_playback_fn(void);
/*!
* \brief Validator for DeviceState.
*
* Represents the state of a device.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_device_state(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_device_state().
*/
ari_validator ast_ari_validate_device_state_fn(void);
/*!
* \brief Validator for Mailbox.
*
* Represents the state of a mailbox.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_mailbox(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_mailbox().
*/
ari_validator ast_ari_validate_mailbox_fn(void);
/*!
* \brief Validator for AdditionalParam.
*
* Protocol specific additional parameter
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_additional_param(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_additional_param().
*/
ari_validator ast_ari_validate_additional_param_fn(void);
/*!
* \brief Validator for ApplicationMoveFailed.
*
* Notification that trying to move a channel to another Stasis application failed.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_application_move_failed(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_application_move_failed().
*/
ari_validator ast_ari_validate_application_move_failed_fn(void);
/*!
* \brief Validator for ApplicationRegistered.
*
* Notification that a Stasis app has been registered.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_application_registered(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_application_registered().
*/
ari_validator ast_ari_validate_application_registered_fn(void);
/*!
* \brief Validator for ApplicationReplaced.
*
* Notification that another WebSocket has taken over for an application.
*
* An application may only be subscribed to by a single WebSocket at a time. If multiple WebSockets attempt to subscribe to the same application, the newer WebSocket wins, and the older one receives this event.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_application_replaced(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_application_replaced().
*/
ari_validator ast_ari_validate_application_replaced_fn(void);
/*!
* \brief Validator for ApplicationUnregistered.
*
* Notification that a Stasis app has been unregistered.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_application_unregistered(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_application_unregistered().
*/
ari_validator ast_ari_validate_application_unregistered_fn(void);
/*!
* \brief Validator for BridgeAttendedTransfer.
*
* Notification that an attended transfer has occurred.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_bridge_attended_transfer(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_bridge_attended_transfer().
*/
ari_validator ast_ari_validate_bridge_attended_transfer_fn(void);
/*!
* \brief Validator for BridgeBlindTransfer.
*
* Notification that a blind transfer has occurred.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_bridge_blind_transfer(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_bridge_blind_transfer().
*/
ari_validator ast_ari_validate_bridge_blind_transfer_fn(void);
/*!
* \brief Validator for BridgeCreated.
*
* Notification that a bridge has been created.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_bridge_created(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_bridge_created().
*/
ari_validator ast_ari_validate_bridge_created_fn(void);
/*!
* \brief Validator for BridgeDestroyed.
*
* Notification that a bridge has been destroyed.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_bridge_destroyed(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_bridge_destroyed().
*/
ari_validator ast_ari_validate_bridge_destroyed_fn(void);
/*!
* \brief Validator for BridgeMerged.
*
* Notification that one bridge has merged into another.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_bridge_merged(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_bridge_merged().
*/
ari_validator ast_ari_validate_bridge_merged_fn(void);
/*!
* \brief Validator for BridgeVideoSourceChanged.
*
* Notification that the source of video in a bridge has changed.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_bridge_video_source_changed(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_bridge_video_source_changed().
*/
ari_validator ast_ari_validate_bridge_video_source_changed_fn(void);
/*!
* \brief Validator for CallBroadcast.
*
* Notification that a channel is being broadcast to ARI applications for claiming.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_call_broadcast(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_call_broadcast().
*/
ari_validator ast_ari_validate_call_broadcast_fn(void);
/*!
* \brief Validator for CallClaimed.
*
* Notification that a broadcast channel has been successfully claimed by an ARI application.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_call_claimed(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_call_claimed().
*/
ari_validator ast_ari_validate_call_claimed_fn(void);
/*!
* \brief Validator for ChannelCallerId.
*
* Channel changed Caller ID.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_caller_id(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_caller_id().
*/
ari_validator ast_ari_validate_channel_caller_id_fn(void);
/*!
* \brief Validator for ChannelConnectedLine.
*
* Channel changed Connected Line.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_connected_line(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_connected_line().
*/
ari_validator ast_ari_validate_channel_connected_line_fn(void);
/*!
* \brief Validator for ChannelCreated.
*
* Notification that a channel has been created.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_created(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_created().
*/
ari_validator ast_ari_validate_channel_created_fn(void);
/*!
* \brief Validator for ChannelDestroyed.
*
* Notification that a channel has been destroyed.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_destroyed(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_destroyed().
*/
ari_validator ast_ari_validate_channel_destroyed_fn(void);
/*!
* \brief Validator for ChannelDialplan.
*
* Channel changed location in the dialplan.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_dialplan(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_dialplan().
*/
ari_validator ast_ari_validate_channel_dialplan_fn(void);
/*!
* \brief Validator for ChannelDtmfReceived.
*
* DTMF received on a channel.
*
* This event is sent when the DTMF ends. There is no notification about the start of DTMF
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_dtmf_received(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_dtmf_received().
*/
ari_validator ast_ari_validate_channel_dtmf_received_fn(void);
/*!
* \brief Validator for ChannelEnteredBridge.
*
* Notification that a channel has entered a bridge.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_entered_bridge(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_entered_bridge().
*/
ari_validator ast_ari_validate_channel_entered_bridge_fn(void);
/*!
* \brief Validator for ChannelHangupRequest.
*
* A hangup was requested on the channel.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_hangup_request(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_hangup_request().
*/
ari_validator ast_ari_validate_channel_hangup_request_fn(void);
/*!
* \brief Validator for ChannelHold.
*
* A channel initiated a media hold.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_hold(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_hold().
*/
ari_validator ast_ari_validate_channel_hold_fn(void);
/*!
* \brief Validator for ChannelLeftBridge.
*
* Notification that a channel has left a bridge.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_left_bridge(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_left_bridge().
*/
ari_validator ast_ari_validate_channel_left_bridge_fn(void);
/*!
* \brief Validator for ChannelStateChange.
*
* Notification of a channel's state change.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_state_change(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_state_change().
*/
ari_validator ast_ari_validate_channel_state_change_fn(void);
/*!
* \brief Validator for ChannelTalkingFinished.
*
* Talking is no longer detected on the channel.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_talking_finished(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_talking_finished().
*/
ari_validator ast_ari_validate_channel_talking_finished_fn(void);
/*!
* \brief Validator for ChannelTalkingStarted.
*
* Talking was detected on the channel.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_talking_started(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_talking_started().
*/
ari_validator ast_ari_validate_channel_talking_started_fn(void);
/*!
* \brief Validator for ChannelToneDetected.
*
* Tone was detected on the channel.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_tone_detected(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_tone_detected().
*/
ari_validator ast_ari_validate_channel_tone_detected_fn(void);
/*!
* \brief Validator for ChannelTransfer.
*
* transfer on a channel.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_transfer(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_transfer().
*/
ari_validator ast_ari_validate_channel_transfer_fn(void);
/*!
* \brief Validator for ChannelUnhold.
*
* A channel initiated a media unhold.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_unhold(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_unhold().
*/
ari_validator ast_ari_validate_channel_unhold_fn(void);
/*!
* \brief Validator for ChannelUserevent.
*
* User-generated event with additional user-defined fields in the object.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_userevent(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_userevent().
*/
ari_validator ast_ari_validate_channel_userevent_fn(void);
/*!
* \brief Validator for ChannelVarset.
*
* Channel variable changed.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_channel_varset(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_channel_varset().
*/
ari_validator ast_ari_validate_channel_varset_fn(void);
/*!
* \brief Validator for ContactInfo.
*
* Detailed information about a contact on an endpoint.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_contact_info(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_contact_info().
*/
ari_validator ast_ari_validate_contact_info_fn(void);
/*!
* \brief Validator for ContactStatusChange.
*
* The state of a contact on an endpoint has changed.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_contact_status_change(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_contact_status_change().
*/
ari_validator ast_ari_validate_contact_status_change_fn(void);
/*!
* \brief Validator for DeviceStateChanged.
*
* Notification that a device state has changed.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_device_state_changed(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_device_state_changed().
*/
ari_validator ast_ari_validate_device_state_changed_fn(void);
/*!
* \brief Validator for Dial.
*
* Dialing state has changed.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_dial(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_dial().
*/
ari_validator ast_ari_validate_dial_fn(void);
/*!
* \brief Validator for EndpointStateChange.
*
* Endpoint state changed.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_endpoint_state_change(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_endpoint_state_change().
*/
ari_validator ast_ari_validate_endpoint_state_change_fn(void);
/*!
* \brief Validator for Event.
*
* Base type for asynchronous events from Asterisk.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_event(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_event().
*/
ari_validator ast_ari_validate_event_fn(void);
/*!
* \brief Validator for Message.
*
* Base type for errors and events
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_message(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_message().
*/
ari_validator ast_ari_validate_message_fn(void);
/*!
* \brief Validator for MissingParams.
*
* Error event sent when required params are missing.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_missing_params(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_missing_params().
*/
ari_validator ast_ari_validate_missing_params_fn(void);
/*!
* \brief Validator for Peer.
*
* Detailed information about a remote peer that communicates with Asterisk.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_peer(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_peer().
*/
ari_validator ast_ari_validate_peer_fn(void);
/*!
* \brief Validator for PeerStatusChange.
*
* The state of a peer associated with an endpoint has changed.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_peer_status_change(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_peer_status_change().
*/
ari_validator ast_ari_validate_peer_status_change_fn(void);
/*!
* \brief Validator for PlaybackContinuing.
*
* Event showing the continuation of a media playback operation from one media URI to the next in the list.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_playback_continuing(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_playback_continuing().
*/
ari_validator ast_ari_validate_playback_continuing_fn(void);
/*!
* \brief Validator for PlaybackFinished.
*
* Event showing the completion of a media playback operation.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_playback_finished(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_playback_finished().
*/
ari_validator ast_ari_validate_playback_finished_fn(void);
/*!
* \brief Validator for PlaybackStarted.
*
* Event showing the start of a media playback operation.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_playback_started(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_playback_started().
*/
ari_validator ast_ari_validate_playback_started_fn(void);
/*!
* \brief Validator for RESTHeader.
*
* REST over Websocket header
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_restheader(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_restheader().
*/
ari_validator ast_ari_validate_restheader_fn(void);
/*!
* \brief Validator for RESTQueryStringParameter.
*
* REST over Websocket Query String Parameter
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_restquery_string_parameter(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_restquery_string_parameter().
*/
ari_validator ast_ari_validate_restquery_string_parameter_fn(void);
/*!
* \brief Validator for RESTRequest.
*
* REST over Websocket Request.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_restrequest(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_restrequest().
*/
ari_validator ast_ari_validate_restrequest_fn(void);
/*!
* \brief Validator for RESTResponse.
*
* REST over Websocket Response.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_restresponse(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_restresponse().
*/
ari_validator ast_ari_validate_restresponse_fn(void);
/*!
* \brief Validator for RecordingFailed.
*
* Event showing failure of a recording operation.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_recording_failed(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_recording_failed().
*/
ari_validator ast_ari_validate_recording_failed_fn(void);
/*!
* \brief Validator for RecordingFinished.
*
* Event showing the completion of a recording operation.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_recording_finished(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_recording_finished().
*/
ari_validator ast_ari_validate_recording_finished_fn(void);
/*!
* \brief Validator for RecordingStarted.
*
* Event showing the start of a recording operation.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_recording_started(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_recording_started().
*/
ari_validator ast_ari_validate_recording_started_fn(void);
/*!
* \brief Validator for ReferTo.
*
* transfer destination requested by transferee
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_refer_to(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_refer_to().
*/
ari_validator ast_ari_validate_refer_to_fn(void);
/*!
* \brief Validator for ReferredBy.
*
* transfer destination requested by transferee
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_referred_by(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_referred_by().
*/
ari_validator ast_ari_validate_referred_by_fn(void);
/*!
* \brief Validator for RequiredDestination.
*
* Information about the requested destination
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_required_destination(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_required_destination().
*/
ari_validator ast_ari_validate_required_destination_fn(void);
/*!
* \brief Validator for StasisEnd.
*
* Notification that a channel has left a Stasis application.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_stasis_end(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_stasis_end().
*/
ari_validator ast_ari_validate_stasis_end_fn(void);
/*!
* \brief Validator for StasisStart.
*
* Notification that a channel has entered a Stasis application.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_stasis_start(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_stasis_start().
*/
ari_validator ast_ari_validate_stasis_start_fn(void);
/*!
* \brief Validator for TextMessageReceived.
*
* A text message was received from an endpoint.
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_text_message_received(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_text_message_received().
*/
ari_validator ast_ari_validate_text_message_received_fn(void);
/*!
* \brief Validator for Application.
*
* Details of a Stasis application
*
* \param json JSON object to validate.
* \retval True (non-zero) if valid.
* \retval False (zero) if invalid.
*/
int ast_ari_validate_application(struct ast_json *json);
/*!
* \brief Function pointer to ast_ari_validate_application().
*/
ari_validator ast_ari_validate_application_fn(void);
/*
* JSON models
*
* AsteriskInfo
* - build: BuildInfo
* - config: ConfigInfo
* - status: StatusInfo
* - system: SystemInfo
* AsteriskPing
* - asterisk_id: string (required)
* - ping: string (required)
* - timestamp: string (required)
* BuildInfo
* - date: string (required)
* - kernel: string (required)
* - machine: string (required)
* - options: string (required)
* - os: string (required)
* - user: string (required)
* ConfigInfo
* - default_language: string (required)
* - max_channels: int
* - max_load: double
* - max_open_files: int
* - name: string (required)
* - setid: SetId (required)
* ConfigTuple
* - attribute: string (required)
* - value: string (required)
* LogChannel
* - channel: string (required)
* - configuration: string (required)
* - status: string (required)
* - type: string (required)
* Module
* - description: string (required)
* - name: string (required)
* - status: string (required)
* - support_level: string (required)
* - use_count: int (required)
* SetId
* - group: string (required)
* - user: string (required)
* StatusInfo
* - last_reload_time: Date (required)
* - startup_time: Date (required)
* SystemInfo
* - entity_id: string (required)
* - version: string (required)
* Variable
* - value: string (required)
* Endpoint
* - channel_ids: List[string] (required)
* - resource: string (required)
* - state: string
* - technology: string (required)
* TextMessage
* - body: string (required)
* - from: string (required)
* - to: string (required)
* - variables: object
* CallerID
* - name: string (required)
* - number: string (required)
* Channel
* - accountcode: string (required)
* - caller: CallerID (required)
* - caller_rdnis: string
* - channelvars: object
* - connected: CallerID (required)
* - creationtime: Date (required)
* - dialplan: DialplanCEP (required)
* - id: string (required)
* - language: string (required)
* - name: string (required)
* - protocol_id: string (required)
* - state: string (required)
* - tenantid: string
* Dialed
* DialplanCEP
* - app_data: string (required)
* - app_name: string (required)
* - context: string (required)
* - exten: string (required)
* - priority: long (required)
* RTPstat
* - channel_uniqueid: string (required)
* - local_maxjitter: double
* - local_maxrxploss: double
* - local_minjitter: double
* - local_minrxploss: double
* - local_normdevjitter: double
* - local_normdevrxploss: double
* - local_ssrc: int (required)
* - local_stdevjitter: double
* - local_stdevrxploss: double
* - maxrtt: double
* - minrtt: double
* - normdevrtt: double
* - remote_maxjitter: double
* - remote_maxrxploss: double
* - remote_minjitter: double
* - remote_minrxploss: double
* - remote_normdevjitter: double
* - remote_normdevrxploss: double
* - remote_ssrc: int (required)
* - remote_stdevjitter: double
* - remote_stdevrxploss: double
* - rtt: double
* - rxcount: int (required)
* - rxjitter: double
* - rxoctetcount: int (required)
* - rxploss: int (required)
* - stdevrtt: double
* - txcount: int (required)
* - txjitter: double
* - txoctetcount: int (required)
* - txploss: int (required)
* Bridge
* - bridge_class: string (required)
* - bridge_type: string (required)
* - channels: List[string] (required)
* - creationtime: Date (required)
* - creator: string (required)
* - id: string (required)
* - name: string (required)
* - technology: string (required)
* - video_mode: string
* - video_source_id: string
* LiveRecording
* - cause: string
* - duration: int
* - format: string (required)
* - name: string (required)
* - silence_duration: int
* - state: string (required)
* - talking_duration: int
* - target_uri: string (required)
* StoredRecording
* - format: string (required)
* - name: string (required)
* FormatLangPair
* - format: string (required)
* - language: string (required)
* Sound
* - formats: List[FormatLangPair] (required)
* - id: string (required)
* - text: string
* Playback
* - id: string (required)
* - language: string
* - media_uri: string (required)
* - next_media_uri: string
* - state: string (required)
* - target_uri: string (required)
* DeviceState
* - name: string (required)
* - state: string (required)
* Mailbox
* - name: string (required)
* - new_messages: int (required)
* - old_messages: int (required)
* AdditionalParam
* - parameter_name: string (required)
* - parameter_value: string (required)
* ApplicationMoveFailed
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - args: List[string] (required)
* - channel: Channel (required)
* - destination: string (required)
* ApplicationRegistered
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* ApplicationReplaced
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* ApplicationUnregistered
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* BridgeAttendedTransfer
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - destination_application: string
* - destination_bridge: string
* - destination_link_first_leg: Channel
* - destination_link_second_leg: Channel
* - destination_threeway_bridge: Bridge
* - destination_threeway_channel: Channel
* - destination_type: string (required)
* - is_external: boolean (required)
* - replace_channel: Channel
* - result: string (required)
* - transfer_target: Channel
* - transferee: Channel
* - transferer_first_leg: Channel (required)
* - transferer_first_leg_bridge: Bridge
* - transferer_second_leg: Channel (required)
* - transferer_second_leg_bridge: Bridge
* BridgeBlindTransfer
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - bridge: Bridge
* - channel: Channel (required)
* - context: string (required)
* - exten: string (required)
* - is_external: boolean (required)
* - replace_channel: Channel
* - result: string (required)
* - transferee: Channel
* BridgeCreated
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - bridge: Bridge (required)
* BridgeDestroyed
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - bridge: Bridge (required)
* BridgeMerged
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - bridge: Bridge (required)
* - bridge_from: Bridge (required)
* BridgeVideoSourceChanged
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - bridge: Bridge (required)
* - old_video_source_id: string
* CallBroadcast
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - called: string
* - caller: string
* - channel: Channel (required)
* CallClaimed
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* - winner_app: string (required)
* ChannelCallerId
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - caller_presentation: int (required)
* - caller_presentation_txt: string (required)
* - channel: Channel (required)
* ChannelConnectedLine
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* ChannelCreated
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* ChannelDestroyed
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - cause: int (required)
* - cause_txt: string (required)
* - channel: Channel (required)
* - tech_cause: int
* ChannelDialplan
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* - dialplan_app: string (required)
* - dialplan_app_data: string (required)
* ChannelDtmfReceived
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* - digit: string (required)
* - duration_ms: int (required)
* ChannelEnteredBridge
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - bridge: Bridge (required)
* - channel: Channel
* ChannelHangupRequest
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - cause: int
* - channel: Channel (required)
* - soft: boolean
* - tech_cause: int
* ChannelHold
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* - musicclass: string
* ChannelLeftBridge
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - bridge: Bridge (required)
* - channel: Channel (required)
* ChannelStateChange
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* ChannelTalkingFinished
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* - duration: int (required)
* ChannelTalkingStarted
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* ChannelToneDetected
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* ChannelTransfer
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - refer_to: ReferTo (required)
* - referred_by: ReferredBy (required)
* - state: string
* ChannelUnhold
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* ChannelUserevent
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - bridge: Bridge
* - channel: Channel
* - endpoint: Endpoint
* - eventname: string (required)
* - userevent: object (required)
* ChannelVarset
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel
* - value: string (required)
* - variable: string (required)
* ContactInfo
* - aor: string (required)
* - contact_status: string (required)
* - roundtrip_usec: string
* - uri: string (required)
* ContactStatusChange
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - contact_info: ContactInfo (required)
* - endpoint: Endpoint (required)
* DeviceStateChanged
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - device_state: DeviceState (required)
* Dial
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - caller: Channel
* - dialstatus: string (required)
* - dialstring: string
* - forward: string
* - forwarded: Channel
* - peer: Channel (required)
* EndpointStateChange
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - endpoint: Endpoint (required)
* Event
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* Message
* - asterisk_id: string
* - type: string (required)
* MissingParams
* - asterisk_id: string
* - type: string (required)
* - params: List[string] (required)
* Peer
* - address: string
* - cause: string
* - peer_status: string (required)
* - port: string
* - time: string
* PeerStatusChange
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - endpoint: Endpoint (required)
* - peer: Peer (required)
* PlaybackContinuing
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - playback: Playback (required)
* PlaybackFinished
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - playback: Playback (required)
* PlaybackStarted
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - playback: Playback (required)
* RESTHeader
* - name: string (required)
* - value: string (required)
* RESTQueryStringParameter
* - name: string (required)
* - value: string (required)
* RESTRequest
* - content_type: string
* - message_body: string
* - method: string (required)
* - query_strings: List[RESTQueryStringParameter]
* - request_id: string (required)
* - transaction_id: string (required)
* - type: string (required)
* - uri: string (required)
* RESTResponse
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - content_type: string
* - message_body: string
* - reason_phrase: string (required)
* - request_id: string (required)
* - status_code: int (required)
* - transaction_id: string (required)
* - uri: string (required)
* RecordingFailed
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - recording: LiveRecording (required)
* RecordingFinished
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - recording: LiveRecording (required)
* RecordingStarted
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - recording: LiveRecording (required)
* ReferTo
* - bridge: Bridge
* - connected_channel: Channel
* - destination_channel: Channel
* - requested_destination: RequiredDestination (required)
* ReferredBy
* - bridge: Bridge
* - connected_channel: Channel
* - source_channel: Channel (required)
* RequiredDestination
* - additional_protocol_params: List[AdditionalParam]
* - destination: string
* - protocol_id: string
* StasisEnd
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - channel: Channel (required)
* StasisStart
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - args: List[string] (required)
* - channel: Channel (required)
* - replace_channel: Channel
* TextMessageReceived
* - asterisk_id: string
* - type: string (required)
* - application: string (required)
* - timestamp: Date (required)
* - endpoint: Endpoint
* - message: TextMessage (required)
* Application
* - bridge_ids: List[string] (required)
* - channel_ids: List[string] (required)
* - device_names: List[string] (required)
* - endpoint_ids: List[string] (required)
* - events_allowed: List[object] (required)
* - events_disallowed: List[object] (required)
* - name: string (required)
*/
#endif /* _ASTERISK_ARI_MODEL_H */