Thanks, we'll certainly give it a try. Could you explain what this patch does exactly?
If no RTP has been sent yet, wouldn't stats->recv be 0, and audio_stream_alive() always return TRUE? Thanks, Dan On Wed, Feb 9, 2011 at 12:46 PM, damico <[email protected]> wrote: > Hi Dan, > try this patch... I write it on the fly (without compiling :) ) > > I think it should work. I wrote a patch like this for an old linphone > version. > > I hope it works and fix your issue. > > Regards > > --Michele > > diff --git a/src/audiostream.c b/src/audiostream.c > index 45764d4..586db87 100644 > --- a/src/audiostream.c > +++ b/src/audiostream.c > @@ -144,27 +144,30 @@ ms_time (time_t *t) > } > #endif > > +static void _reset_rtp_alive_info(AudioStream * stream){ > + stream->last_packet_count=0; > + stream->last_packet_time=time(NULL); > +} > + > bool_t audio_stream_alive(AudioStream * stream, int timeout){ > RtpSession *session=stream->session; > const rtp_stats_t *stats=rtp_session_get_stats(session); > - if (stats->recv!=0){ > - if (stream->evq){ > - OrtpEvent *ev=ortp_ev_queue_get(stream->evq); > - if (ev!=NULL){ > - if > (ortp_event_get_type(ev)==ORTP_EVENT_RTCP_PACKET_RECEIVED){ > - > stream->last_packet_time=ms_time(NULL); > - } > - ortp_event_destroy(ev); > + if (stats->recv && stream->evq){ > + OrtpEvent *ev=ortp_ev_queue_get(stream->evq); > + if (ev!=NULL){ > + if > (ortp_event_get_type(ev)==ORTP_EVENT_RTCP_PACKET_RECEIVED){ > + stream->last_packet_time=ms_time(NULL); > } > + ortp_event_destroy(ev); > } > - if (stats->recv!=stream->last_packet_count){ > - stream->last_packet_count=stats->recv; > - stream->last_packet_time=ms_time(NULL); > - }else{ > - if > (ms_time(NULL)-stream->last_packet_time>timeout){ > - /* more than timeout seconds of > inactivity*/ > - return FALSE; > - } > + } > + if (stats->recv!=stream->last_packet_count){ > + stream->last_packet_count=stats->recv; > + stream->last_packet_time=ms_time(NULL); > + }else{ > + if (ms_time(NULL)-stream->last_packet_time>timeout){ > + /* more than timeout seconds of inactivity*/ > + return FALSE; > } > } > return TRUE; > @@ -206,6 +209,7 @@ static void payload_type_changed(RtpSession *session, > unsigned long data){ > AudioStream *stream=(AudioStream*)data; > int pt=rtp_session_get_recv_payload_type(stream->session); > audio_stream_change_decoder(stream,pt); > + _reset_rtp_alive_info(stream); > } > > int audio_stream_start_full(AudioStream *stream, RtpProfile *profile, > const char *remip,int remport, > @@ -379,6 +383,8 @@ int audio_stream_start_full(AudioStream *stream, > RtpProfile *profile, const char > ms_ticker_attach(stream->ticker,stream->soundread); > ms_ticker_attach(stream->ticker,stream->rtprecv); > > + _reset_rtp_alive_info(stream); > + > return 0; > > } > > > > On 09/02/2011 18:08, Dan Le wrote: > > Thanks for the response Simon. > > The RTP timer seems to work great as long as it has received at least one > RTP packet for the session to start the timer, but if the incoming call > silently terminates before RTP has started, the call remains > up indefinitely, which is why I was looking for a SIP session timer > solution. Is there anything else I could try? > > Thanks, > Dan > > > > On Mon, Feb 7, 2011 at 3:29 PM, Simon Morlat <[email protected]>wrote: > >> Hi Dan, >> >> Actually what is implemented when use_session_timers=1 is accepting SIP >> updates and answering correctly to them, but linphone does not send any >> SIP update or reINVITE to check the session is alive. >> However it detects loss of RTP streams, after 30 seconds of RTP >> inactivity (RTP and RTCP), then it hangups the call. >> >> Simon >> >> Le mardi 01 février 2011 à 19:43 -0500, Dan Le a écrit : >> > Hi, I'm newly joined to the mailing list, and was hoping someone could >> > clarify a few things in linphone. >> > >> > >> > There's scattered reports that SIP Session Timers (RFC 4028) may be >> > supported in linphone, but attempting to enable it, I can't seem to >> > trigger it. I'm using version 3.3.2 of linphone. >> > >> > >> > I've set use_session_timers=1 under [sip] in my linphonerc config >> > file, and then dial the linphonec agent; after the call connects, I >> > kill the call on the originator side. Linphone appears to be still in >> > the call, and I would expect after some time, it would send a SIP >> > packet to check if the call exists (and subsequently terminating the >> > call when it find it no longer exists), but it doesn't, at least not >> > after 5min of waiting. >> > >> > >> > I would be grateful for any insights. >> > >> > >> > Thanks, >> > Dan >> > _______________________________________________ >> > Linphone-users mailing list >> > [email protected] >> > http://lists.nongnu.org/mailman/listinfo/linphone-users >> >> >> >> _______________________________________________ >> Linphone-users mailing list >> [email protected] >> http://lists.nongnu.org/mailman/listinfo/linphone-users >> > > > _______________________________________________ > Linphone-users mailing > [email protected]http://lists.nongnu.org/mailman/listinfo/linphone-users > > > > _______________________________________________ > Linphone-users mailing list > [email protected] > http://lists.nongnu.org/mailman/listinfo/linphone-users > >
_______________________________________________ Linphone-users mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/linphone-users
