summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2015-01-19 18:05:15 +0000
committerMark Michelson <mmichelson@digium.com>2015-01-19 18:05:15 +0000
commitab5af1f3d8180cdba1b638bdec603ef5ee893ddd (patch)
tree6791976b08b9edde1df7b804bef7185dec046223
parent643b81d98e9c8a8f55116c543e8a727ea597b080 (diff)
Call extension state callbacks at hint creation.
When a hint gets created, any subsequent device or presence state changes result in extension status events getting sent out to interested parties. However, at the time of hint creation, no such event gets sent out, so watchers of extension state are potentially left in the dark until the first state change after hint creation. Patch contributed by John Hardin (License #6512) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430776 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--main/pbx.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/main/pbx.c b/main/pbx.c
index eb7517bda..f13fad002 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -5829,6 +5829,24 @@ static int ast_add_hint(struct ast_exten *e)
ast_get_context_name(ast_get_extension_context(e)));
}
+ /* if not dynamic */
+ if (!(strstr(e->app, "${") && e->exten[0] == '_')) {
+ struct ast_state_cb *state_cb;
+ struct ao2_iterator cb_iter;
+
+ /* For general callbacks */
+ cb_iter = ao2_iterator_init(statecbs, 0);
+ for (; (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
+ execute_state_callback(state_cb->change_cb,
+ ast_get_context_name(ast_get_extension_context(e)),
+ ast_get_extension_name(e),
+ state_cb->data,
+ AST_HINT_UPDATE_DEVICE,
+ hint_new,
+ NULL);
+ }
+ ao2_iterator_destroy(&cb_iter);
+ }
ao2_unlock(hints);
ao2_ref(hint_new, -1);