switch_assert(session != NULL);
+ if (message->message_id == SWITCH_MESSAGE_INDICATE_SIGNAL_DATA) {
+ if (session->endpoint_interface->io_routines->receive_message) {
+ status = session->endpoint_interface->io_routines->receive_message(session, message);
+ }
+
+ switch_core_session_free_message(&message);
+ return status;
+ }
+
if ((status = switch_core_session_read_lock_hangup(session)) != SWITCH_STATUS_SUCCESS) {
return status;
}
}
- if (switch_channel_down_nosig(session->channel) && message->message_id != SWITCH_MESSAGE_INDICATE_SIGNAL_DATA) {
+ if (switch_channel_down_nosig(session->channel)) {
switch_log_printf(SWITCH_CHANNEL_ID_LOG, message->_file, message->_func, message->_line,
switch_core_session_get_uuid(session), SWITCH_LOG_DEBUG, "%s skip receive message [%s] (channel is hungup already)\n",
switch_channel_get_name(session->channel), message_names[message->message_id]);
if (session->media_handle) {
status = switch_core_media_receive_message(session, message);
}
- if (status == SWITCH_STATUS_SUCCESS || message->message_id == SWITCH_MESSAGE_INDICATE_SIGNAL_DATA) {
+ if (status == SWITCH_STATUS_SUCCESS) {
if (session->endpoint_interface->io_routines->receive_message) {
status = session->endpoint_interface->io_routines->receive_message(session, message);
}
int i = 0;
switch_channel_t *channel = switch_core_session_get_channel(session);
+ if (!switch_core_session_in_thread(session)) {
+ return SWITCH_STATUS_FALSE;
+ }
if (switch_channel_test_flag(channel, CF_SIGNAL_DATA)) {
return SWITCH_STATUS_FALSE;