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