Merge pull request #970 in FS/freeswitch from feature/FS-9543-add-pre-exec-state-change-hooks-to to master

* commit '6a064a953c8b7f58023b5d7388348341017d5e4d':
  FS-9543 #resolve [Add pre-exec state change hooks to core]
This commit is contained in:
Anthony Minessale II 2016-09-20 10:58:36 -05:00
commit 9b76bc2fd1
2 changed files with 47 additions and 5 deletions

View File

@ -2149,7 +2149,8 @@ typedef enum {
} switch_session_ctl_t;
typedef enum {
SSH_FLAG_STICKY = (1 << 0)
SSH_FLAG_STICKY = (1 << 0),
SSH_FLAG_PRE_EXEC = (1 << 1)
} switch_state_handler_flag_t;
#ifdef WIN32

View File

@ -433,10 +433,48 @@ void switch_core_state_machine_init(switch_memory_pool_t *pool)
} \
switch_core_session_request_video_refresh(session); \
switch_core_media_gen_key_frame(session); \
if (!driver_state_handler->on_##__STATE || (driver_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS \
)) { \
proceed = 1; \
while (do_extra_handlers && (application_state_handler = switch_channel_get_state_handler(session->channel, index++)) != 0) { \
if (!switch_test_flag(application_state_handler, SSH_FLAG_PRE_EXEC)) {\
continue; \
} \
if (!application_state_handler->on_##__STATE \
|| (application_state_handler->on_##__STATE \
&& application_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS \
)) { \
proceed++; \
continue; \
} else { \
proceed = 0; \
break; \
} \
} \
index = 0; \
if (!proceed) global_proceed = 0; \
proceed = 1; \
while (do_extra_handlers && proceed && (application_state_handler = switch_core_get_state_handler(index++)) != 0) { \
if (!switch_test_flag(application_state_handler, SSH_FLAG_PRE_EXEC)) { \
continue; \
} \
if (!application_state_handler->on_##__STATE || \
(application_state_handler->on_##__STATE && \
application_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS \
)) { \
proceed++; \
continue; \
} else { \
proceed = 0; \
break; \
} \
} \
index = 0; \
if (!proceed) global_proceed = 0; \
if (!driver_state_handler->on_##__STATE || (driver_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS )) { \
while (do_extra_handlers && (application_state_handler = switch_channel_get_state_handler(session->channel, index++)) != 0) { \
if (!application_state_handler || !application_state_handler->on_##__STATE \
if (switch_test_flag(application_state_handler, SSH_FLAG_PRE_EXEC)) { \
continue; \
} \
if (!application_state_handler->on_##__STATE \
|| (application_state_handler->on_##__STATE \
&& application_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS \
)) { \
@ -451,7 +489,10 @@ void switch_core_state_machine_init(switch_memory_pool_t *pool)
if (!proceed) global_proceed = 0; \
proceed = 1; \
while (do_extra_handlers && proceed && (application_state_handler = switch_core_get_state_handler(index++)) != 0) { \
if (!application_state_handler || !application_state_handler->on_##__STATE || \
if (switch_test_flag(application_state_handler, SSH_FLAG_PRE_EXEC)) { \
continue; \
} \
if (!application_state_handler->on_##__STATE || \
(application_state_handler->on_##__STATE && \
application_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS \
)) { \