linphone-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Linphone-users] SIP Session Timers


From: Dan Le
Subject: Re: [Linphone-users] SIP Session Timers
Date: Thu, 10 Feb 2011 18:30:40 -0500

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 <address@hidden> 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 <address@hidden> 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 <address@hidden> 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
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/linphone-users



_______________________________________________
Linphone-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/linphone-users

_______________________________________________ Linphone-users mailing list address@hidden http://lists.nongnu.org/mailman/listinfo/linphone-users


_______________________________________________
Linphone-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/linphone-users


_______________________________________________ Linphone-users mailing list address@hidden http://lists.nongnu.org/mailman/listinfo/linphone-users


_______________________________________________
Linphone-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/linphone-users



reply via email to

[Prev in Thread] Current Thread [Next in Thread]