]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add execute_on_originate var '<app> <arg>' to run in origination thread or '<app...
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 20 Jan 2011 19:52:00 +0000 (13:52 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Thu, 20 Jan 2011 19:52:00 +0000 (13:52 -0600)
src/switch_ivr_originate.c

index d156c700fd663c043f0569e860554761a37c8329..78743e6420229ce5213df34be3cc57cefe70a0d4 100644 (file)
@@ -2755,6 +2755,26 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                                                        }
                                                }
                                        }
+
+                                       if (session) {
+                                               switch_channel_set_variable(originate_status[i].peer_channel, "originating_leg_uuid", switch_core_session_get_uuid(session));
+                                       }
+
+                                       if ((vvar = switch_channel_get_variable_dup(originate_status[i].peer_channel, "execute_on_originate", SWITCH_FALSE))) {
+                                               char *app = switch_core_session_strdup(originate_status[i].peer_session, vvar);
+                                               char *arg = NULL;
+
+                                               if (strstr(app, "::")) {
+                                                       switch_core_session_execute_application_async(originate_status[i].peer_session, app, arg);
+                                               } else {
+                                                       if ((arg = strchr(app, ' '))) {
+                                                               *arg++ = '\0';
+                                                       }
+                                                       
+                                                       switch_core_session_execute_application(originate_status[i].peer_session, app, arg);
+                                               }
+                                               
+                                       }
                                }
 
                                if (table) {
@@ -2773,7 +2793,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                                        *cause = SWITCH_CAUSE_SUCCESS;
                                        goto outer_for;
                                }
-
+                               
                                if (!switch_core_session_running(originate_status[i].peer_session)) {
                                        if (originate_status[i].per_channel_delay_start) {
                                                switch_channel_set_flag(originate_status[i].peer_channel, CF_BLOCK_STATE);