add ring ready flag to core
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4221 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
db5557983a
commit
07efd559d2
|
@ -330,6 +330,13 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_
|
||||||
*/
|
*/
|
||||||
#define switch_channel_pre_answer(channel) switch_channel_perform_pre_answer(channel, __FILE__, __SWITCH_FUNC__, __LINE__)
|
#define switch_channel_pre_answer(channel) switch_channel_perform_pre_answer(channel, __FILE__, __SWITCH_FUNC__, __LINE__)
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Indicate a channel is ready to provide ringback
|
||||||
|
\param channel channel
|
||||||
|
\return SWITCH_STATUS_SUCCESS
|
||||||
|
*/
|
||||||
|
#define switch_channel_mark_ring_ready(channel) switch_channel_perform_mark_ring_ready(channel, __FILE__, __SWITCH_FUNC__, __LINE__)
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief add a state handler table to a given channel
|
\brief add a state handler table to a given channel
|
||||||
\param channel channel on which to add the state handler table
|
\param channel channel on which to add the state handler table
|
||||||
|
|
|
@ -487,6 +487,7 @@ CF_SUSPEND = (1 << 14) - Suspend i/o
|
||||||
CF_EVENT_PARSE = (1 << 15) - Suspend control events
|
CF_EVENT_PARSE = (1 << 15) - Suspend control events
|
||||||
CF_NO_INDICATE = (1 << 16) - Disable Indications
|
CF_NO_INDICATE = (1 << 16) - Disable Indications
|
||||||
CF_REPEAT_STATE = (1 << 17) - Tell the state machine to repeat a state
|
CF_REPEAT_STATE = (1 << 17) - Tell the state machine to repeat a state
|
||||||
|
CF_RING_READY = (1 << 18) - Channel is ready to send ringback
|
||||||
</pre>
|
</pre>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -508,7 +509,8 @@ typedef enum {
|
||||||
CF_SUSPEND = (1 << 14),
|
CF_SUSPEND = (1 << 14),
|
||||||
CF_EVENT_PARSE = (1 << 15),
|
CF_EVENT_PARSE = (1 << 15),
|
||||||
CF_NO_INDICATE = (1 << 16),
|
CF_NO_INDICATE = (1 << 16),
|
||||||
CF_REPEAT_STATE = (1 << 17)
|
CF_REPEAT_STATE = (1 << 17),
|
||||||
|
CF_RING_READY = (1 << 18)
|
||||||
} switch_channel_flag_t;
|
} switch_channel_flag_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2811,6 +2811,7 @@ static void sip_i_state(int status,
|
||||||
case nua_callstate_proceeding:
|
case nua_callstate_proceeding:
|
||||||
if (channel) {
|
if (channel) {
|
||||||
if (status == 180 && !(switch_channel_test_flag(channel, CF_NO_INDICATE))) {
|
if (status == 180 && !(switch_channel_test_flag(channel, CF_NO_INDICATE))) {
|
||||||
|
switch_channel_mark_ring_ready(channel);
|
||||||
if (switch_test_flag(tech_pvt, TFLAG_NOMEDIA)) {
|
if (switch_test_flag(tech_pvt, TFLAG_NOMEDIA)) {
|
||||||
if ((uuid = switch_channel_get_variable(channel, SWITCH_BRIDGE_VARIABLE)) && (other_session = switch_core_session_locate(uuid))) {
|
if ((uuid = switch_channel_get_variable(channel, SWITCH_BRIDGE_VARIABLE)) && (other_session = switch_core_session_locate(uuid))) {
|
||||||
switch_core_session_message_t msg;
|
switch_core_session_message_t msg;
|
||||||
|
|
|
@ -978,6 +978,23 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_hangup(switch_chan
|
||||||
return channel->state;
|
return channel->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_ring_ready(switch_channel_t *channel,
|
||||||
|
const char *file,
|
||||||
|
const char *func,
|
||||||
|
int line)
|
||||||
|
{
|
||||||
|
if (!switch_channel_test_flag(channel, CF_RING_READY)) {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_ID_LOG, (char *) file, func, line, SWITCH_LOG_NOTICE, "Ring-Ready %s!\n", channel->name);
|
||||||
|
switch_channel_set_flag(channel, CF_RING_READY);
|
||||||
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SWITCH_STATUS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_channel_t *channel,
|
SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_channel_t *channel,
|
||||||
const char *file,
|
const char *file,
|
||||||
const char *func,
|
const char *func,
|
||||||
|
@ -985,6 +1002,8 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_
|
||||||
{
|
{
|
||||||
switch_event_t *event;
|
switch_event_t *event;
|
||||||
|
|
||||||
|
switch_channel_mark_ring_ready(channel);
|
||||||
|
|
||||||
if (!switch_channel_test_flag(channel, CF_EARLY_MEDIA)) {
|
if (!switch_channel_test_flag(channel, CF_EARLY_MEDIA)) {
|
||||||
char *uuid;
|
char *uuid;
|
||||||
switch_core_session_t *other_session;
|
switch_core_session_t *other_session;
|
||||||
|
|
|
@ -2882,7 +2882,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (read_frame && !pass && !switch_test_flag(read_frame, SFF_CNG) && read_frame->datalen > 1) {
|
if (switch_channel_test_flag(caller_channel, CF_RING_READY) &&
|
||||||
|
read_frame && !pass && !switch_test_flag(read_frame, SFF_CNG) && read_frame->datalen > 1) {
|
||||||
if (ringback.fh) {
|
if (ringback.fh) {
|
||||||
uint8_t abuf[1024];
|
uint8_t abuf[1024];
|
||||||
switch_size_t mlen, olen;
|
switch_size_t mlen, olen;
|
||||||
|
|
Loading…
Reference in New Issue