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;
|
} switch_session_ctl_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SSH_FLAG_STICKY = (1 << 0)
|
SSH_FLAG_STICKY = (1 << 0),
|
||||||
|
SSH_FLAG_PRE_EXEC = (1 << 1)
|
||||||
} switch_state_handler_flag_t;
|
} switch_state_handler_flag_t;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
|
@ -433,10 +433,48 @@ void switch_core_state_machine_init(switch_memory_pool_t *pool)
|
||||||
} \
|
} \
|
||||||
switch_core_session_request_video_refresh(session); \
|
switch_core_session_request_video_refresh(session); \
|
||||||
switch_core_media_gen_key_frame(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) { \
|
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 \
|
||||||
&& application_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS \
|
&& 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; \
|
if (!proceed) global_proceed = 0; \
|
||||||
proceed = 1; \
|
proceed = 1; \
|
||||||
while (do_extra_handlers && proceed && (application_state_handler = switch_core_get_state_handler(index++)) != 0) { \
|
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 && \
|
||||||
application_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS \
|
application_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS \
|
||||||
)) { \
|
)) { \
|
||||||
|
|
Loading…
Reference in New Issue