<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 11/11/2014 12:46 PM, Dave WOOLLEY
wrote:<br>
</div>
<blockquote
cite="mid:A416928F598C064AA19BBF21620CD32902CB268C32@artoo.bts.co.uk"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:SimSun;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:"\@SimSun";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal">In trying to do a back port of some of the
fixes to session timers, we encountered a situation where
multiple refreshes are sent in quick succession (with
incrementing CSEQ values). Asterisk survives for a little
while, but then gets very confused.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Looking at the code, it seems to me that
every time Asterisk receives a 200 OK response, it will start
a fresh internal timer for session timers, without cancelling
the earlier one. I was hoping to find a fix for this in a
later version, but there doesn’t seem to be any up to version
12.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Is there some valid reason why
start_session_timer is called for all 200 OK responses where
session timers are in use, rather than using restart, for
re-invites, as done when handling an incoming re-invite, or
doing a stop followed by a start? Alternatively, have a
missed somewhere where the internal time is stopped when
Asterisk initiates a re-invite, or starts to handle the
response to one? (The re-invite suspected of triggering the
problem is a direct media one, rather than a session timer
one, but all 200 Oks are supposed to reset session timer
states.)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">What is worrying me a little about the
analysis is that I am surprised that this problem would have
survived for so long in the wild.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’ve not gone into great detail about the
failure symptoms, as we are debugging on a version that is
long past end of life, and I’m not asking for people to debug
that, or the back port, only to comment on the validity of the
current code.<o:p></o:p></p>
</div>
<br clear="all">
BTS Holdings PLC - Registered office: BTS House, Manor Road,
Wallington, SM6 0DD - Registered in England: 1517630<br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
</blockquote>
<br>
Looking in my Asterisk 11 version of chan_sip.c, in
start_session_timer(), the first if block looks like this:<br>
<br>
if (p->stimer->st_schedid > -1)
{
<br>
/* in the event a timer is already going, stop it
*/ <br>
ast_debug(2, "Session timer stopped: %d - %s\n",
p->stimer->st_schedid, p->callid); <br>
AST_SCHED_DEL_UNREF(sched,
p->stimer->st_schedid,
<br>
dialog_unref(p, "unref stimer->st_schedid from
dialog")); <br>
}<br>
<br>
So it appears that calling start_session_timer() should be stopping
any existing timers if they are active. Basically,
restart_session_timer() is redundant and could be removed.<br>
</body>
</html>