diff options
author | Kinsey Moore <kmoore@digium.com> | 2013-06-13 13:15:56 +0000 |
---|---|---|
committer | Kinsey Moore <kmoore@digium.com> | 2013-06-13 13:15:56 +0000 |
commit | 4f84e48028b8f21babd26b7f0b8c1d375f1c356c (patch) | |
tree | 584e569f685ea7ed662d696793b7442ab8496e47 /main/channel.c | |
parent | 65c492e851639897d8db79741bdcebc3557ad29d (diff) |
Refactor CEL channel events on top of Stasis-Core
This uses the channel state change events from Stasis-Core to determine
when channel-related CEL events should be raised. Those refactored in
this patch are:
* AST_CEL_CHANNEL_START
* AST_CEL_ANSWER
* AST_CEL_APP_START
* AST_CEL_APP_END
* AST_CEL_HANGUP
* AST_CEL_CHANNEL_END
Retirement of Linked IDs is also refactored.
CEL configuration has been refactored to use the config framework.
Note: Some HANGUP events are not generated correctly because the bridge
layer does not propagate hangupcause/hangupsource information yet.
Review: https://reviewboard.asterisk.org/r/2544/
(closes issue ASTERISK-21563)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@391622 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/channel.c')
-rw-r--r-- | main/channel.c | 24 |
1 files changed, 0 insertions, 24 deletions
diff --git a/main/channel.c b/main/channel.c index f3aabd04a..86a8f4994 100644 --- a/main/channel.c +++ b/main/channel.c @@ -1058,14 +1058,6 @@ __ast_channel_alloc_ap(int needqueue, int state, const char *cid_num, const char ast_channel_timingfd_set(tmp, ast_timer_fd(ast_channel_timer(tmp))); } - /* - * This is the last place the channel constructor can fail. - * - * The destructor takes advantage of this fact to ensure that the - * AST_CEL_CHANNEL_END is not posted if we have not posted the - * AST_CEL_CHANNEL_START yet. - */ - if (needqueue && ast_channel_internal_alertpipe_init(tmp)) { return ast_channel_unref(tmp); } @@ -1151,7 +1143,6 @@ __ast_channel_alloc_ap(int needqueue, int state, const char *cid_num, const char ast_cdr_start(ast_channel_cdr(tmp)); ast_atomic_fetchadd_int(&chancount, +1); - ast_cel_report_event(tmp, AST_CEL_CHANNEL_START, NULL, NULL, NULL); headp = ast_channel_varshead(tmp); AST_LIST_HEAD_INIT_NOLOCK(headp); @@ -2389,11 +2380,6 @@ static void ast_channel_destructor(void *obj) publish_cache_clear(chan); - if (ast_channel_internal_is_finalized(chan)) { - ast_cel_report_event(chan, AST_CEL_CHANNEL_END, NULL, NULL, NULL); - ast_cel_check_retire_linkedid(chan); - } - ast_pbx_hangup_handler_destroy(chan); ast_channel_lock(chan); @@ -2808,8 +2794,6 @@ static void destroy_hooks(struct ast_channel *chan) /*! \brief Hangup a channel */ int ast_hangup(struct ast_channel *chan) { - char extra_str[64]; /* used for cel logging below */ - ast_autoservice_stop(chan); ast_channel_lock(chan); @@ -2884,9 +2868,6 @@ int ast_hangup(struct ast_channel *chan) ast_channel_generatordata_set(chan, NULL); ast_channel_generator_set(chan, NULL); - snprintf(extra_str, sizeof(extra_str), "%d,%s,%s", ast_channel_hangupcause(chan), ast_channel_hangupsource(chan), S_OR(pbx_builtin_getvar_helper(chan, "DIALSTATUS"), "")); - ast_cel_report_event(chan, AST_CEL_HANGUP, NULL, extra_str, NULL); - if (ast_test_flag(ast_channel_flags(chan), AST_FLAG_BLOCKING)) { ast_log(LOG_WARNING, "Hard hangup called by thread %ld on %s, while fd " "is blocked by thread %ld in procedure %s! Expect a failure\n", @@ -2951,11 +2932,9 @@ int ast_raw_answer(struct ast_channel *chan, int cdr_answer) if (cdr_answer) { ast_cdr_answer(ast_channel_cdr(chan)); } - ast_cel_report_event(chan, AST_CEL_ANSWER, NULL, NULL, NULL); ast_channel_unlock(chan); break; case AST_STATE_UP: - ast_cel_report_event(chan, AST_CEL_ANSWER, NULL, NULL, NULL); /* Calling ast_cdr_answer when it it has previously been called * is essentially a no-op, so it is safe. */ @@ -4101,8 +4080,6 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) } else { /* Answer the CDR */ ast_setstate(chan, AST_STATE_UP); - /* removed a call to ast_cdr_answer(chan->cdr) from here. */ - ast_cel_report_event(chan, AST_CEL_ANSWER, NULL, NULL, NULL); } } else if (f->subclass.integer == AST_CONTROL_READ_ACTION) { read_action_payload = f->data.ptr; @@ -6611,7 +6588,6 @@ static void ast_channel_change_linkedid(struct ast_channel *chan, const char *li return; } - ast_cel_check_retire_linkedid(chan); ast_channel_linkedid_set(chan, linkedid); ast_cel_linkedid_ref(linkedid); } |