FS-9543 #resolve [Add pre-exec state change hooks to core]
This commit is contained in:
parent
c591a212e8
commit
6a064a953c
|
@ -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
|
||||
|
|
|
@ -433,10 +433,12 @@ 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 (!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 +453,46 @@ 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 \
|
||||
)) { \
|
||||
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 (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 \
|
||||
)) { \
|
||||
|
|
Loading…
Reference in New Issue