add break
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3705 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
e21807076a
commit
c40aa9eec4
|
@ -500,7 +500,8 @@ SWITCH_SIG_XFER - Stop the current io but leave it viable
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SWITCH_SIG_NONE,
|
SWITCH_SIG_NONE,
|
||||||
SWITCH_SIG_KILL,
|
SWITCH_SIG_KILL,
|
||||||
SWITCH_SIG_XFER
|
SWITCH_SIG_XFER,
|
||||||
|
SWITCH_SIG_BREAK
|
||||||
} switch_signal_t;
|
} switch_signal_t;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -1917,9 +1917,9 @@ static int conference_function_kick_member(conference_obj_t *conference, confere
|
||||||
switch_clear_flag(member, MFLAG_RUNNING);
|
switch_clear_flag(member, MFLAG_RUNNING);
|
||||||
switch_set_flag(member, MFLAG_KICKED);
|
switch_set_flag(member, MFLAG_KICKED);
|
||||||
switch_mutex_unlock(member->flag_mutex);
|
switch_mutex_unlock(member->flag_mutex);
|
||||||
|
switch_core_session_kill_channel(member->session, SWITCH_SIG_BREAK);
|
||||||
stream->write_function(stream, "OK kicked %u\n", id);
|
stream->write_function(stream, "OK kicked %u\n", id);
|
||||||
|
|
||||||
if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
|
if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
|
||||||
switch_channel_t *channel = switch_core_session_get_channel(member->session);
|
switch_channel_t *channel = switch_core_session_get_channel(member->session);
|
||||||
switch_channel_event_set_data(channel, event);
|
switch_channel_event_set_data(channel, event);
|
||||||
|
|
|
@ -267,10 +267,10 @@ struct private_object {
|
||||||
uint32_t codec_ms;
|
uint32_t codec_ms;
|
||||||
switch_caller_profile_t *caller_profile;
|
switch_caller_profile_t *caller_profile;
|
||||||
int32_t timestamp_send;
|
int32_t timestamp_send;
|
||||||
int32_t timestamp_recv;
|
//int32_t timestamp_recv;
|
||||||
switch_rtp_t *rtp_session;
|
switch_rtp_t *rtp_session;
|
||||||
int ssrc;
|
int ssrc;
|
||||||
switch_time_t last_read;
|
//switch_time_t last_read;
|
||||||
sofia_profile_t *profile;
|
sofia_profile_t *profile;
|
||||||
char *local_sdp_audio_ip;
|
char *local_sdp_audio_ip;
|
||||||
switch_port_t local_sdp_audio_port;
|
switch_port_t local_sdp_audio_port;
|
||||||
|
@ -1531,7 +1531,6 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
|
||||||
switch_io_flag_t flags, int stream_id)
|
switch_io_flag_t flags, int stream_id)
|
||||||
{
|
{
|
||||||
private_object_t *tech_pvt = NULL;
|
private_object_t *tech_pvt = NULL;
|
||||||
size_t bytes = 0, samples = 0, frames = 0, ms = 0;
|
|
||||||
switch_channel_t *channel = NULL;
|
switch_channel_t *channel = NULL;
|
||||||
int payload = 0;
|
int payload = 0;
|
||||||
|
|
||||||
|
@ -1557,19 +1556,15 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
|
||||||
tech_pvt->read_frame.datalen = 0;
|
tech_pvt->read_frame.datalen = 0;
|
||||||
switch_set_flag_locked(tech_pvt, TFLAG_READING);
|
switch_set_flag_locked(tech_pvt, TFLAG_READING);
|
||||||
|
|
||||||
|
#if 0
|
||||||
bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame;
|
|
||||||
samples = tech_pvt->read_codec.implementation->samples_per_frame;
|
|
||||||
ms = tech_pvt->read_codec.implementation->microseconds_per_frame;
|
|
||||||
|
|
||||||
if (tech_pvt->last_read) {
|
if (tech_pvt->last_read) {
|
||||||
#if 0
|
|
||||||
elapsed = (unsigned int)((switch_time_now() - tech_pvt->last_read) / 1000);
|
elapsed = (unsigned int)((switch_time_now() - tech_pvt->last_read) / 1000);
|
||||||
if (elapsed > 60000) {
|
if (elapsed > 60000) {
|
||||||
return SWITCH_STATUS_TIMEOUT;
|
return SWITCH_STATUS_TIMEOUT;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if (switch_test_flag(tech_pvt, TFLAG_IO)) {
|
if (switch_test_flag(tech_pvt, TFLAG_IO)) {
|
||||||
switch_status_t status;
|
switch_status_t status;
|
||||||
|
@ -1616,23 +1611,16 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
|
||||||
|
|
||||||
|
|
||||||
if (tech_pvt->read_frame.datalen > 0) {
|
if (tech_pvt->read_frame.datalen > 0) {
|
||||||
tech_pvt->last_read = switch_time_now();
|
size_t bytes = 0;
|
||||||
|
int frames = 0;
|
||||||
if (tech_pvt->read_codec.implementation->encoded_bytes_per_frame) {
|
//tech_pvt->last_read = switch_time_now();
|
||||||
bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame;
|
bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame;
|
||||||
frames = (tech_pvt->read_frame.datalen / bytes);
|
frames = (tech_pvt->read_frame.datalen / bytes);
|
||||||
} else
|
tech_pvt->read_frame.samples = (int) (frames * tech_pvt->read_codec.implementation->samples_per_frame);
|
||||||
frames = 1;
|
|
||||||
|
|
||||||
samples = frames * tech_pvt->read_codec.implementation->samples_per_frame;
|
|
||||||
ms = frames * tech_pvt->read_codec.implementation->microseconds_per_frame;
|
|
||||||
tech_pvt->timestamp_recv += (int32_t) samples;
|
|
||||||
tech_pvt->read_frame.samples = (int) samples;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
||||||
switch_clear_flag_locked(tech_pvt, TFLAG_READING);
|
switch_clear_flag_locked(tech_pvt, TFLAG_READING);
|
||||||
|
|
||||||
|
@ -1724,12 +1712,21 @@ static switch_status_t sofia_kill_channel(switch_core_session_t *session, int si
|
||||||
tech_pvt = (private_object_t *) switch_core_session_get_private(session);
|
tech_pvt = (private_object_t *) switch_core_session_get_private(session);
|
||||||
assert(tech_pvt != NULL);
|
assert(tech_pvt != NULL);
|
||||||
|
|
||||||
switch_clear_flag_locked(tech_pvt, TFLAG_IO);
|
|
||||||
switch_set_flag_locked(tech_pvt, TFLAG_HUP);
|
|
||||||
|
|
||||||
if (switch_rtp_ready(tech_pvt->rtp_session)) {
|
switch(sig) {
|
||||||
switch_rtp_kill_socket(tech_pvt->rtp_session);
|
case SWITCH_SIG_BREAK:
|
||||||
}
|
switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_BREAK);
|
||||||
|
break;
|
||||||
|
case SWITCH_SIG_KILL:
|
||||||
|
default:
|
||||||
|
switch_clear_flag_locked(tech_pvt, TFLAG_IO);
|
||||||
|
switch_set_flag_locked(tech_pvt, TFLAG_HUP);
|
||||||
|
|
||||||
|
if (switch_rtp_ready(tech_pvt->rtp_session)) {
|
||||||
|
switch_rtp_kill_socket(tech_pvt->rtp_session);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
|
|
@ -776,7 +776,13 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
|
||||||
|
|
||||||
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BREAK)) {
|
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BREAK)) {
|
||||||
switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_BREAK);
|
switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_BREAK);
|
||||||
return 0;
|
|
||||||
|
memset(&rtp_session->recv_msg, 0, SWITCH_RTP_CNG_PAYLOAD);
|
||||||
|
rtp_session->recv_msg.header.pt = SWITCH_RTP_CNG_PAYLOAD;
|
||||||
|
*flags |= SFF_CNG;
|
||||||
|
/* Return a CNG frame */
|
||||||
|
*payload_type = SWITCH_RTP_CNG_PAYLOAD;
|
||||||
|
return SWITCH_RTP_CNG_PAYLOAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_IO)) {
|
if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_IO)) {
|
||||||
|
@ -857,7 +863,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
|
||||||
|
|
||||||
if (status == SWITCH_STATUS_BREAK || bytes == 0) {
|
if (status == SWITCH_STATUS_BREAK || bytes == 0) {
|
||||||
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_DATAWAIT)) {
|
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_DATAWAIT)) {
|
||||||
switch_yield(rtp_session->ms_per_packet);
|
switch_yield(rtp_session->ms_per_packet/2);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue