}
if (tech_pvt->auto_answer > 0) {
+ int sanity = tech_pvt->auto_answer;
+
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "CHANNEL CONSUME_MEDIA - answering in %d ms\n", tech_pvt->auto_answer);
- switch_yield(tech_pvt->auto_answer * 1000);
+
+ while(switch_channel_ready(channel) && sanity > 0) {
+ switch_yield(1000 * 1000);
+ sanity -= 1000;
+ }
+
switch_channel_mark_answered(channel);
}
switch_channel_t *ochannel = NULL;
const char *auto_answer = switch_event_get_header(var_event, "null_auto_answer");
const char *pre_answer = switch_event_get_header(var_event, "null_pre_answer");
+ const char *hangup_cause = switch_event_get_header(var_event, "null_hangup_cause");
if (session) {
ochannel = switch_core_session_get_channel(session);
if ((*new_session = switch_core_session_request(null_endpoint_interface, SWITCH_CALL_DIRECTION_OUTBOUND, flags, pool)) != 0) {
null_private_t *tech_pvt;
switch_channel_t *channel;
- switch_caller_profile_t *caller_profile;
+ switch_caller_profile_t *caller_profile = NULL;
switch_core_session_add_stream(*new_session, NULL);
return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
}
+ switch_assert(caller_profile);
+
+ if (hangup_cause || !strncmp(caller_profile->destination_number, "cause-", 6)) {
+ if (!hangup_cause) hangup_cause = caller_profile->destination_number + 6;
+ return switch_channel_str2cause(hangup_cause);
+ }
+
switch_channel_set_state(channel, CS_INIT);
switch_channel_set_flag(channel, CF_AUDIO);
return SWITCH_CAUSE_SUCCESS;