<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>