In rfc3261 section 10.3, item 6

6. The registrar checks whether the request contains the Contact
         header field.  If not, it skips to the last step.  If the
         Contact header field is present, the registrar checks if there
         is one Contact field value that contains the special value "*"
         and an Expires field.  If the request has additional Contact
         fields or an expiration time other than zero, the request is
         invalid, and the server MUST return a 400 (Invalid Request) and
         skip the remaining steps.  
<start here>
         If not, the registrar checks whether
         the Call-ID agrees with the value stored for each binding.  If
         not, it MUST remove the binding.  If it does agree, it MUST
         remove the binding only if the CSeq in the request is higher
         than the value stored for that binding.  Otherwise, the update
         MUST be aborted and the request fails.
<end here>

Reading through start to end, my understanding is: if Call-ID agrees, then 
check CSeq. If CSeq is less or equal than the value stored for that binding, 
the update MUST be aborted and the request fails.

I used cisco 7960 phone. When a REGISTER was sent by that phone, the 
registrations was successful. But the 200 OK to the phone was lost. As the 
phone did not get response, it retransmited the REGISTER with the same CSeq. On 
the server side, the binding was already there and the retrans' CSeq was not 
higher. So this request failed. Then the phone never knows it is registed and 
made bunch of retrans, and finally display that the line is disconnected. 

So I just modified the server and let it accept this case.
Hope my modification is correct.
Thanks!
Lun



_______________________________________________
Sip-implementors mailing list
Sip-implementors@cs.columbia.edu
https://lists.cs.columbia.edu/cucslists/listinfo/sip-implementors

Reply via email to