提交 9cf44f3a authored 作者: Anthony Minessale's avatar Anthony Minessale 提交者: Brian West

fix campon to play music even on first run and cancel faster

上级 56a82812
...@@ -125,6 +125,7 @@ SWITCH_DECLARE(switch_call_cause_t) switch_channel_get_cause(_In_ switch_channel ...@@ -125,6 +125,7 @@ SWITCH_DECLARE(switch_call_cause_t) switch_channel_get_cause(_In_ switch_channel
SWITCH_DECLARE(switch_call_cause_t) switch_channel_cause_q850(switch_call_cause_t cause); SWITCH_DECLARE(switch_call_cause_t) switch_channel_cause_q850(switch_call_cause_t cause);
SWITCH_DECLARE(switch_call_cause_t) switch_channel_get_cause_q850(switch_channel_t *channel); SWITCH_DECLARE(switch_call_cause_t) switch_channel_get_cause_q850(switch_channel_t *channel);
SWITCH_DECLARE(switch_call_cause_t *) switch_channel_get_cause_ptr(switch_channel_t *channel);
/*! /*!
\brief return a cause string for a given cause \brief return a cause string for a given cause
......
...@@ -2517,6 +2517,7 @@ static void *SWITCH_THREAD_FUNC camp_music_thread(switch_thread_t *thread, void ...@@ -2517,6 +2517,7 @@ static void *SWITCH_THREAD_FUNC camp_music_thread(switch_thread_t *thread, void
switch_core_session_rwunlock(session); switch_core_session_rwunlock(session);
stake->running = 0; stake->running = 0;
return NULL; return NULL;
} }
...@@ -2538,6 +2539,7 @@ SWITCH_STANDARD_APP(audio_bridge_function) ...@@ -2538,6 +2539,7 @@ SWITCH_STANDARD_APP(audio_bridge_function)
switch_threadattr_t *thd_attr = NULL; switch_threadattr_t *thd_attr = NULL;
char *camp_data = NULL; char *camp_data = NULL;
switch_status_t status; switch_status_t status;
int camp_loops = 0;
if (zstr(data)) { if (zstr(data)) {
return; return;
...@@ -2607,7 +2609,6 @@ SWITCH_STANDARD_APP(audio_bridge_function) ...@@ -2607,7 +2609,6 @@ SWITCH_STANDARD_APP(audio_bridge_function)
do { do {
fail = 0; fail = 0;
status = switch_ivr_originate(NULL, &peer_session, &cause, camp_data, campon_timeout, NULL, NULL, NULL, NULL, NULL, SOF_NONE, NULL);
if (!switch_channel_ready(caller_channel)) { if (!switch_channel_ready(caller_channel)) {
fail = 1; fail = 1;
...@@ -2635,22 +2636,29 @@ SWITCH_STANDARD_APP(audio_bridge_function) ...@@ -2635,22 +2636,29 @@ SWITCH_STANDARD_APP(audio_bridge_function)
thread_started = 1; thread_started = 1;
} }
if (camp_loops++) {
if (--campon_retries <= 0 || stake.do_xfer) {
camping = 0;
stake.do_xfer = 1;
break;
}
if (--campon_retries <= 0 || stake.do_xfer) { if (fail) {
camping = 0; int64_t wait = campon_sleep * 1000000;
stake.do_xfer = 1;
break; while (stake.running && wait > 0 && switch_channel_ready(caller_channel)) {
} switch_yield(100000);
wait -= 100000;
if (fail) { }
int64_t wait = campon_sleep * 1000000;
while (stake.running && wait > 0 && switch_channel_ready(caller_channel)) {
switch_yield(100000);
wait -= 100000;
} }
} }
} }
status = switch_ivr_originate(NULL, &peer_session,
&cause, camp_data, campon_timeout, NULL, NULL, NULL, NULL, NULL, SOF_NONE,
switch_channel_get_cause_ptr(caller_channel));
} while (camping && switch_channel_ready(caller_channel)); } while (camping && switch_channel_ready(caller_channel));
if (thread) { if (thread) {
......
...@@ -181,6 +181,12 @@ SWITCH_DECLARE(switch_call_cause_t) switch_channel_get_cause(switch_channel_t *c ...@@ -181,6 +181,12 @@ SWITCH_DECLARE(switch_call_cause_t) switch_channel_get_cause(switch_channel_t *c
} }
SWITCH_DECLARE(switch_call_cause_t *) switch_channel_get_cause_ptr(switch_channel_t *channel)
{
return &channel->hangup_cause;
}
struct switch_callstate_table { struct switch_callstate_table {
const char *name; const char *name;
switch_channel_callstate_t callstate; switch_channel_callstate_t callstate;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论