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__)
|
||||
|
||||
/*!
|
||||
\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
|
||||
\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_NO_INDICATE = (1 << 16) - Disable Indications
|
||||
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>
|
||||
*/
|
||||
|
||||
|
@ -508,7 +509,8 @@ typedef enum {
|
|||
CF_SUSPEND = (1 << 14),
|
||||
CF_EVENT_PARSE = (1 << 15),
|
||||
CF_NO_INDICATE = (1 << 16),
|
||||
CF_REPEAT_STATE = (1 << 17)
|
||||
CF_REPEAT_STATE = (1 << 17),
|
||||
CF_RING_READY = (1 << 18)
|
||||
} switch_channel_flag_t;
|
||||
|
||||
|
||||
|
|
|
@ -2811,6 +2811,7 @@ static void sip_i_state(int status,
|
|||
case nua_callstate_proceeding:
|
||||
if (channel) {
|
||||
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 ((uuid = switch_channel_get_variable(channel, SWITCH_BRIDGE_VARIABLE)) && (other_session = switch_core_session_locate(uuid))) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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,
|
||||
const char *file,
|
||||
const char *func,
|
||||
|
@ -985,6 +1002,8 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_
|
|||
{
|
||||
switch_event_t *event;
|
||||
|
||||
switch_channel_mark_ring_ready(channel);
|
||||
|
||||
if (!switch_channel_test_flag(channel, CF_EARLY_MEDIA)) {
|
||||
char *uuid;
|
||||
switch_core_session_t *other_session;
|
||||
|
|
|
@ -2882,7 +2882,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
|
|||
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) {
|
||||
uint8_t abuf[1024];
|
||||
switch_size_t mlen, olen;
|
||||
|
|
Loading…
Reference in New Issue