Ah, I think I follow now. I was reading it straight from the email/patch,
which is hard to follow the bracket boundaries.

I tried a small initial test, and I believe it's working exactly how I need
it.

Many thanks!

Dan


On Thu, Feb 10, 2011 at 4:12 AM, damico <[email protected]> wrote:

>  On 09/02/2011 23:31, Dan Le wrote:
>
> 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
>
>
> if stats->recv = 0 like stream->last_packet_count (when audio start or
> payload change _reset_rtp_alive_info() set last_packet_count to 0 and
> last_packet_time to "now")
>
> So, if there aren't any packets after timeout+1 seconds become:
> !(stats->recv!=stream->last_packet_count) &&
> (ms_time(NULL)-stream->last_packet_time>timeout)
> => return False
>
> Is it OK?
>
> Regards
>
> --Michele
>
>
>
>
>  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 
> [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

Reply via email to