Asterisk - The Open Source Telephony Project
21.4.1
|
Stasis Messages and Data Types for Channel Objects. More...
#include "asterisk.h"
#include "asterisk/astobj2.h"
#include "asterisk/json.h"
#include "asterisk/pbx.h"
#include "asterisk/bridge.h"
#include "asterisk/translate.h"
#include "asterisk/stasis.h"
#include "asterisk/stasis_channels.h"
#include "asterisk/dial.h"
#include "asterisk/linkedlists.h"
#include "asterisk/utf8.h"
Go to the source code of this file.
Data Structures | |
struct | ast_multi_channel_blob |
A multi channel blob data structure for multi_channel_blob stasis messages. More... | |
struct | channel_role_snapshot |
A channel snapshot wrapper object used in ast_multi_channel_blob objects. More... | |
struct | dial_masquerade_datastore |
struct | dial_target |
Macros | |
#define | NUM_MULTI_CHANNEL_BLOB_BUCKETS 7 |
Functions | |
static struct ast_manager_event_blob * | agent_login_to_ami (struct stasis_message *msg) |
static struct ast_manager_event_blob * | agent_logoff_to_ami (struct stasis_message *msg) |
struct stasis_message * | ast_channel_blob_create (struct ast_channel *chan, struct stasis_message_type *type, struct ast_json *blob) |
Creates a ast_channel_blob message. More... | |
struct stasis_message * | ast_channel_blob_create_from_cache (const char *channel_id, struct stasis_message_type *type, struct ast_json *blob) |
Create a ast_channel_blob message, pulling channel state from the cache. More... | |
struct ao2_container * | ast_channel_cache_all (void) |
struct ao2_container * | ast_channel_cache_by_name (void) |
Secondary channel cache, indexed by name. More... | |
void | ast_channel_publish_blob (struct ast_channel *chan, struct stasis_message_type *type, struct ast_json *blob) |
Publish a channel blob message. More... | |
void | ast_channel_publish_cached_blob (struct ast_channel *chan, struct stasis_message_type *type, struct ast_json *blob) |
Publish a channel blob message using the latest snapshot from the cache. More... | |
void | ast_channel_publish_dial (struct ast_channel *caller, struct ast_channel *peer, const char *dialstring, const char *dialstatus) |
Publish in the ast_channel_topic or ast_channel_topic_all topics a stasis message for the channels involved in a dial operation. More... | |
void | ast_channel_publish_dial_forward (struct ast_channel *caller, struct ast_channel *peer, struct ast_channel *forwarded, const char *dialstring, const char *dialstatus, const char *forward) |
Publish in the ast_channel_topic or ast_channel_topic_all topics a stasis message for the channels involved in a dial operation that is forwarded. More... | |
static void | ast_channel_publish_dial_internal (struct ast_channel *caller, struct ast_channel *peer, struct ast_channel *forwarded, const char *dialstring, const char *dialstatus, const char *forward) |
void | ast_channel_publish_final_snapshot (struct ast_channel *chan) |
Send the final channel snapshot for a channel, thus removing it from cache. More... | |
void | ast_channel_publish_snapshot (struct ast_channel *chan) |
Publish a ast_channel_snapshot for a channel. More... | |
void | ast_channel_publish_varset (struct ast_channel *chan, const char *name, const char *value) |
Publish a ast_channel_publish_varset for a channel. More... | |
int | ast_channel_snapshot_caller_id_equal (const struct ast_channel_snapshot *old_snapshot, const struct ast_channel_snapshot *new_snapshot) |
Compares the callerid info of two snapshots. More... | |
int | ast_channel_snapshot_cep_equal (const struct ast_channel_snapshot *old_snapshot, const struct ast_channel_snapshot *new_snapshot) |
Compares the context, exten and priority of two snapshots. More... | |
int | ast_channel_snapshot_connected_line_equal (const struct ast_channel_snapshot *old_snapshot, const struct ast_channel_snapshot *new_snapshot) |
Compares the connected line info of two snapshots. More... | |
struct ast_channel_snapshot * | ast_channel_snapshot_create (struct ast_channel *chan) |
Generate a snapshot of the channel state. This is an ao2 object, so ao2_cleanup() to deallocate. More... | |
struct ast_channel_snapshot * | ast_channel_snapshot_get_latest (const char *uniqueid) |
Obtain the latest ast_channel_snapshot from the Stasis Message Bus API cache. This is an ao2 object, so use ao2_cleanup() to deallocate. More... | |
struct ast_channel_snapshot * | ast_channel_snapshot_get_latest_by_name (const char *name) |
Obtain the latest ast_channel_snapshot from the Stasis Message Bus API cache. This is an ao2 object, so use ao2_cleanup() to deallocate. More... | |
void | ast_channel_snapshot_invalidate_segment (struct ast_channel *chan, enum ast_channel_snapshot_segment_invalidation segment) |
Invalidate a channel snapshot segment from being reused. More... | |
struct ast_json * | ast_channel_snapshot_to_json (const struct ast_channel_snapshot *snapshot, const struct stasis_message_sanitizer *sanitize) |
Build a JSON object from a ast_channel_snapshot. More... | |
void | ast_channel_stage_snapshot (struct ast_channel *chan) |
Set flag to indicate channel snapshot is being staged. More... | |
void | ast_channel_stage_snapshot_done (struct ast_channel *chan) |
Clear flag to indicate channel snapshot is being staged, and publish snapshot. More... | |
struct stasis_topic * | ast_channel_topic_all (void) |
A topic which publishes the events for all channels. More... | |
void | ast_multi_channel_blob_add_channel (struct ast_multi_channel_blob *obj, const char *role, struct ast_channel_snapshot *snapshot) |
Add a ast_channel_snapshot to a ast_multi_channel_blob object. More... | |
struct ast_multi_channel_blob * | ast_multi_channel_blob_create (struct ast_json *blob) |
Create a ast_multi_channel_blob suitable for a stasis_message. More... | |
struct ast_channel_snapshot * | ast_multi_channel_blob_get_channel (struct ast_multi_channel_blob *obj, const char *role) |
Retrieve a channel snapshot associated with a specific role from a ast_multi_channel_blob. More... | |
struct ao2_container * | ast_multi_channel_blob_get_channels (struct ast_multi_channel_blob *obj, const char *role) |
Retrieve all channel snapshots associated with a specific role from a ast_multi_channel_blob. More... | |
struct ast_json * | ast_multi_channel_blob_get_json (struct ast_multi_channel_blob *obj) |
Retrieve the JSON blob from a ast_multi_channel_blob. Returned ast_json is still owned by obj. More... | |
int | ast_stasis_channels_init (void) |
Initialize the stasis channel topic and message types. More... | |
static void | channel_blob_dtor (void *obj) |
static struct ast_json * | channel_blob_to_json (struct stasis_message *message, const char *type, const struct stasis_message_sanitizer *sanitize) |
static int | channel_role_cmp_cb (void *obj, void *arg, int flags) |
static int | channel_role_hash_cb (const void *obj, const int flags) |
static void | channel_role_snapshot_dtor (void *obj) |
static struct ast_channel_snapshot_base * | channel_snapshot_base_create (struct ast_channel *chan) |
static void | channel_snapshot_base_dtor (void *obj) |
static struct ast_channel_snapshot_bridge * | channel_snapshot_bridge_create (struct ast_channel *chan) |
static struct ast_channel_snapshot_caller * | channel_snapshot_caller_create (struct ast_channel *chan) |
static void | channel_snapshot_caller_dtor (void *obj) |
static int | channel_snapshot_cmp_cb (void *obj, void *arg, int flags) |
static struct ast_channel_snapshot_connected * | channel_snapshot_connected_create (struct ast_channel *chan) |
static struct ast_channel_snapshot_dialplan * | channel_snapshot_dialplan_create (struct ast_channel *chan) |
static void | channel_snapshot_dialplan_dtor (void *obj) |
static void | channel_snapshot_dtor (void *obj) |
static struct ast_channel_snapshot_hangup * | channel_snapshot_hangup_create (struct ast_channel *chan) |
static int | channel_snapshot_hash_cb (const void *obj, const int flags) |
static struct ast_channel_snapshot_peer * | channel_snapshot_peer_create (struct ast_channel *chan) |
static int | channel_snapshot_uniqueid_cmp_cb (void *obj, void *arg, int flags) |
static int | channel_snapshot_uniqueid_hash_cb (const void *obj, const int flags) |
static struct ast_channel_snapshot_update * | channel_snapshot_update_create (struct ast_channel *chan) |
static void | channel_snapshot_update_dtor (void *obj) |
static struct stasis_message * | create_channel_blob_message (struct ast_channel_snapshot *snapshot, struct stasis_message_type *type, struct ast_json *blob) |
static void | dial_masquerade_breakdown (void *data, struct ast_channel *old_chan, struct ast_channel *new_chan) |
static void | dial_masquerade_caller_datastore_destroy (void *data) |
static struct dial_masquerade_datastore * | dial_masquerade_datastore_add (struct ast_channel *chan, struct dial_masquerade_datastore *masq_data) |
static struct dial_masquerade_datastore * | dial_masquerade_datastore_alloc (void) |
static void | dial_masquerade_datastore_cleanup (struct dial_masquerade_datastore *masq_data) |
static void | dial_masquerade_datastore_destroy (void *data) |
static void | dial_masquerade_datastore_dtor (void *vdoomed) |
static struct ast_datastore * | dial_masquerade_datastore_find (struct ast_channel *chan) |
static void | dial_masquerade_datastore_remove_chan (struct dial_masquerade_datastore *masq_data, struct ast_channel *chan) |
static void | dial_masquerade_fixup (void *data, struct ast_channel *old_chan, struct ast_channel *new_chan) |
static void | dial_target_free (struct dial_target *doomed) |
static struct ast_json * | dial_to_json (struct stasis_message *message, const struct stasis_message_sanitizer *sanitize) |
static struct ast_json * | dtmf_end_to_json (struct stasis_message *message, const struct stasis_message_sanitizer *sanitize) |
static struct ast_json * | hangup_request_to_json (struct stasis_message *message, const struct stasis_message_sanitizer *sanitize) |
static struct ast_json * | hold_to_json (struct stasis_message *message, const struct stasis_message_sanitizer *sanitize) |
static void | multi_channel_blob_dtor (void *obj) |
static void | publish_message_for_channel_topics (struct stasis_message *message, struct ast_channel *chan) |
static void | remove_dial_masquerade (struct ast_channel *peer) |
static void | remove_dial_masquerade_caller (struct ast_channel *caller) |
static int | set_dial_masquerade (struct ast_channel *caller, struct ast_channel *peer, const char *dialstring) |
static void | stasis_channels_cleanup (void) |
static struct ast_manager_event_blob * | talking_start_to_ami (struct stasis_message *msg) |
static struct ast_json * | talking_start_to_json (struct stasis_message *message, const struct stasis_message_sanitizer *sanitize) |
static struct ast_manager_event_blob * | talking_stop_to_ami (struct stasis_message *msg) |
static struct ast_json * | talking_stop_to_json (struct stasis_message *message, const struct stasis_message_sanitizer *sanitize) |
static struct ast_json * | unhold_to_json (struct stasis_message *message, const struct stasis_message_sanitizer *sanitize) |
static struct ast_manager_event_blob * | varset_to_ami (struct stasis_message *msg) |
static struct ast_json * | varset_to_json (struct stasis_message *message, const struct stasis_message_sanitizer *sanitize) |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_snapshot_type) | |
Define channel message types. | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_dial_type,.to_json=dial_to_json,) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_varset_type,.to_ami=varset_to_ami,.to_json=varset_to_json,) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_hangup_request_type,.to_json=hangup_request_to_json,) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_masquerade_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_dtmf_begin_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_dtmf_end_type,.to_json=dtmf_end_to_json,) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_hold_type,.to_json=hold_to_json,) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_unhold_type,.to_json=unhold_to_json,) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_flash_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_wink_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_chanspy_start_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_chanspy_stop_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_fax_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_hangup_handler_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_moh_start_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_moh_stop_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_mixmonitor_start_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_mixmonitor_stop_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_mixmonitor_mute_type) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_agent_login_type,.to_ami=agent_login_to_ami,) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_agent_logoff_type,.to_ami=agent_logoff_to_ami,) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_talking_start,.to_ami=talking_start_to_ami,.to_json=talking_start_to_json,) | |
STASIS_MESSAGE_TYPE_DEFN (ast_channel_talking_stop,.to_ami=talking_stop_to_ami,.to_json=talking_stop_to_json,) | |
Variables | |
static struct ao2_container * | channel_cache |
static struct ao2_container * | channel_cache_by_name |
static struct stasis_topic * | channel_topic_all |
static const struct ast_datastore_info | dial_masquerade_caller_info |
static const struct ast_datastore_info | dial_masquerade_info |
Stasis Messages and Data Types for Channel Objects.
Definition in file stasis_channels.c.
int ast_channel_snapshot_caller_id_equal | ( | const struct ast_channel_snapshot * | old_snapshot, |
const struct ast_channel_snapshot * | new_snapshot | ||
) |
Compares the callerid info of two snapshots.
old_snapshot | Old snapshot |
new_snapshot | New snapshot |
True | (non-zero) if callerid are identical. |
False | (zero) if callerid changed. |
Definition at line 1356 of file stasis_channels.c.
References ast_channel_snapshot::caller, ast_channel_snapshot_caller::name, and ast_channel_snapshot_caller::number.
int ast_channel_snapshot_cep_equal | ( | const struct ast_channel_snapshot * | old_snapshot, |
const struct ast_channel_snapshot * | new_snapshot | ||
) |
Compares the context, exten and priority of two snapshots.
old_snapshot | Old snapshot |
new_snapshot | New snapshot |
True | (non-zero) if context, exten or priority are identical. |
False | (zero) if context, exten and priority changed. |
Definition at line 1335 of file stasis_channels.c.
References ast_channel_snapshot_dialplan::appl, ast_channel_snapshot_dialplan::context, ast_channel_snapshot::dialplan, ast_channel_snapshot_dialplan::exten, and ast_channel_snapshot_dialplan::priority.
int ast_channel_snapshot_connected_line_equal | ( | const struct ast_channel_snapshot * | old_snapshot, |
const struct ast_channel_snapshot * | new_snapshot | ||
) |
Compares the connected line info of two snapshots.
old_snapshot | Old snapshot |
new_snapshot | New snapshot |
True | (non-zero) if callerid are identical. |
False | (zero) if callerid changed. |
Definition at line 1366 of file stasis_channels.c.
References ast_channel_snapshot::connected, ast_channel_snapshot_connected::name, and ast_channel_snapshot_connected::number.
struct ast_json* ast_channel_snapshot_to_json | ( | const struct ast_channel_snapshot * | snapshot, |
const struct stasis_message_sanitizer * | sanitize | ||
) |
Build a JSON object from a ast_channel_snapshot.
snapshot | The snapshot to convert to JSON |
sanitize | The message sanitizer to use on the snapshot |
NULL | on error |
Definition at line 1288 of file stasis_channels.c.
References ast_channel_snapshot_base::accountcode, ast_channel_snapshot_dialplan::appl, ast_channel_snapshot::ari_vars, ast_json_channel_vars(), ast_json_dialplan_cep_app(), ast_json_name_number(), ast_json_object_set(), ast_json_pack(), ast_json_string_create(), ast_json_timeval(), AST_LIST_EMPTY, ast_state2str(), ast_channel_snapshot::base, ast_channel_snapshot::caller, stasis_message_sanitizer::channel_snapshot, ast_channel_snapshot::connected, ast_channel_snapshot_dialplan::context, ast_channel_snapshot_base::creationtime, ast_channel_snapshot_dialplan::data, ast_channel_snapshot::dialplan, ast_channel_snapshot_dialplan::exten, ast_channel_snapshot_base::language, ast_channel_snapshot_caller::name, ast_channel_snapshot_connected::name, ast_channel_snapshot_base::name, ast_channel_snapshot_caller::number, ast_channel_snapshot_connected::number, ast_channel_snapshot_dialplan::priority, ast_channel_snapshot_caller::rdnis, ast_channel_snapshot::state, and ast_channel_snapshot_base::uniqueid.
Referenced by ast_ari_channels_create(), ast_ari_channels_get(), ast_ari_channels_list(), and stasis_app_exec().
int ast_stasis_channels_init | ( | void | ) |
Initialize the stasis channel topic and message types.
0 | on success |
Non-zero | on error |
Definition at line 1702 of file stasis_channels.c.
References AO2_ALLOC_OPT_LOCK_RWLOCK, ao2_container_alloc_hash, ast_channel_agent_login_type(), ast_channel_agent_logoff_type(), ast_channel_chanspy_start_type(), ast_channel_chanspy_stop_type(), ast_channel_dial_type(), ast_channel_dtmf_begin_type(), ast_channel_dtmf_end_type(), ast_channel_fax_type(), ast_channel_flash_type(), ast_channel_hangup_handler_type(), ast_channel_hangup_request_type(), ast_channel_hold_type(), ast_channel_masquerade_type(), ast_channel_mixmonitor_mute_type(), ast_channel_mixmonitor_start_type(), ast_channel_mixmonitor_stop_type(), ast_channel_moh_start_type(), ast_channel_moh_stop_type(), ast_channel_snapshot_type(), ast_channel_talking_start(), ast_channel_talking_stop(), ast_channel_unhold_type(), ast_channel_varset_type(), ast_channel_wink_type(), AST_NUM_CHANNEL_BUCKETS, ast_register_cleanup(), STASIS_MESSAGE_TYPE_INIT, and stasis_topic_create().
Referenced by ast_channels_init().