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
[email protected]
https://lists.cs.columbia.edu/cucslists/listinfo/sip-implementors