[commit] r3705 - in freeswitch/trunk/src: . include mod/applications/mod_conference mod/endpoints/mod_sofia
Author: anthm Date: Mon Dec 18 16:40:04 2006 New Revision: 3705 Modified: freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/trunk/src/switch_rtp.c Log: add break Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Mon Dec 18 16:40:04 2006 @@ -500,7 +500,8 @@ typedef enum { SWITCH_SIG_NONE, SWITCH_SIG_KILL, - SWITCH_SIG_XFER + SWITCH_SIG_XFER, + SWITCH_SIG_BREAK } switch_signal_t; /*! Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c (original) +++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Mon Dec 18 16:40:04 2006 @@ -1917,9 +1917,9 @@ switch_clear_flag(member, MFLAG_RUNNING); switch_set_flag(member, MFLAG_KICKED); 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); - + 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_event_set_data(channel, event); Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Mon Dec 18 16:40:04 2006 @@ -267,10 +267,10 @@ uint32_t codec_ms; switch_caller_profile_t *caller_profile; int32_t timestamp_send; - int32_t timestamp_recv; + //int32_t timestamp_recv; switch_rtp_t *rtp_session; int ssrc; - switch_time_t last_read; + //switch_time_t last_read; sofia_profile_t *profile; char *local_sdp_audio_ip; switch_port_t local_sdp_audio_port; @@ -1531,7 +1531,6 @@ switch_io_flag_t flags, int stream_id) { private_object_t *tech_pvt = NULL; - size_t bytes = 0, samples = 0, frames = 0, ms = 0; switch_channel_t *channel = NULL; int payload = 0; @@ -1557,20 +1556,16 @@ tech_pvt->read_frame.datalen = 0; switch_set_flag_locked(tech_pvt, TFLAG_READING); - - 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 0 if (tech_pvt->last_read) { -#if 0 elapsed = (unsigned int)((switch_time_now() - tech_pvt->last_read) / 1000); if (elapsed > 60000) { return SWITCH_STATUS_TIMEOUT; } -#endif } +#endif + if (switch_test_flag(tech_pvt, TFLAG_IO)) { switch_status_t status; @@ -1616,23 +1611,16 @@ if (tech_pvt->read_frame.datalen > 0) { - tech_pvt->last_read = switch_time_now(); - - if (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); - } else - 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; + size_t bytes = 0; + int frames = 0; + //tech_pvt->last_read = switch_time_now(); + bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame; + frames = (tech_pvt->read_frame.datalen / bytes); + tech_pvt->read_frame.samples = (int) (frames * tech_pvt->read_codec.implementation->samples_per_frame); break; } } - - } + } switch_clear_flag_locked(tech_pvt, TFLAG_READING); @@ -1724,12 +1712,21 @@ tech_pvt = (private_object_t *) switch_core_session_get_private(session); 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_rtp_kill_socket(tech_pvt->rtp_session); - } + switch(sig) { + 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; Modified: freeswitch/trunk/src/switch_rtp.c ============================================================================== --- freeswitch/trunk/src/switch_rtp.c (original) +++ freeswitch/trunk/src/switch_rtp.c Mon Dec 18 16:40:04 2006 @@ -776,7 +776,13 @@ if (switch_test_flag(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)) { @@ -857,7 +863,7 @@ if (status == SWITCH_STATUS_BREAK || bytes == 0) { 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; } return 0;
participants (1)
-
Freeswitch SVN