]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Call extension state callbacks at hint creation.
authorMark Michelson <mmichelson@digium.com>
Mon, 19 Jan 2015 18:05:15 +0000 (18:05 +0000)
committerMark Michelson <mmichelson@digium.com>
Mon, 19 Jan 2015 18:05:15 +0000 (18:05 +0000)
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

main/pbx.c

index eb7517bda016e93ff349620f2cdcdc659c25ee11..f13fad002ba517afb8de711adc2bcae84d1d19dd 100644 (file)
@@ -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);