diff options
author | Kinsey Moore <kmoore@digium.com> | 2013-05-10 13:13:06 +0000 |
---|---|---|
committer | Kinsey Moore <kmoore@digium.com> | 2013-05-10 13:13:06 +0000 |
commit | 7ce05bfb9b5f06c18451e37bb5b91cd543d6ba84 (patch) | |
tree | b4e833909ec2ba776d39848ecf8d28f74b341424 /main/stasis_channels.c | |
parent | 2cfedc12adf64cc24e855bd9ea30df3aa1b759ce (diff) |
Add channel events for res_stasis apps
This change adds a framework in res_stasis for handling events from
channel topics. JSON event generation and validation code is created
from event documentation in rest-api/api-docs/events.json to assist in
JSON event generation, ensure consistency, and ensure that accurate
documentation is available for ALL events that are received by
res_stasis applications.
The userevent application has been refactored along with the code that
handles userevent channel blob events to pass the headers as key/value
pairs in the JSON blob. As a side-effect, app_userevent now handles
duplicate keys by overwriting the previous value.
Review: https://reviewboard.asterisk.org/r/2428/
(closes issue ASTERISK-21180)
Patch-By: Kinsey Moore <kmoore@digium.com>
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@388275 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/stasis_channels.c')
-rw-r--r-- | main/stasis_channels.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/main/stasis_channels.c b/main/stasis_channels.c index c032ec956..acae81939 100644 --- a/main/stasis_channels.c +++ b/main/stasis_channels.c @@ -448,6 +448,37 @@ struct ast_json *ast_channel_snapshot_to_json(const struct ast_channel_snapshot return ast_json_ref(json_chan); } +int ast_channel_snapshot_cep_equal( + const struct ast_channel_snapshot *old_snapshot, + const struct ast_channel_snapshot *new_snapshot) +{ + ast_assert(old_snapshot != NULL); + ast_assert(new_snapshot != NULL); + + /* We actually get some snapshots with CEP set, but before the + * application is set. Since empty application is invalid, we treat + * setting the application from nothing as a CEP change. + */ + if (ast_strlen_zero(old_snapshot->appl) && + !ast_strlen_zero(new_snapshot->appl)) { + return 0; + } + + return old_snapshot->priority == new_snapshot->priority && + strcmp(old_snapshot->context, new_snapshot->context) == 0 && + strcmp(old_snapshot->exten, new_snapshot->exten) == 0; +} + +int ast_channel_snapshot_caller_id_equal( + const struct ast_channel_snapshot *old_snapshot, + const struct ast_channel_snapshot *new_snapshot) +{ + ast_assert(old_snapshot != NULL); + ast_assert(new_snapshot != NULL); + return strcmp(old_snapshot->caller_number, new_snapshot->caller_number) == 0 && + strcmp(old_snapshot->caller_name, new_snapshot->caller_name) == 0; +} + void ast_stasis_channels_shutdown(void) { STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_snapshot_type); |