There is a few recent changes to the SIP channel in Asterisk I want to explain:
- Registrations: When Asterisk registers with a SIP service, the old version tried registering forever, even if it was obvious that the host did not exist or the password was wrong. In the current development version, we fail registration. You can revert to the old behaviour by setting the registerattempts configuration variable to 0 (zero). Asterisk will send an event to the manager interface when a registration fails.
- Invites: If we call a SIP service that challenges us for authentication and there is no authentication credentials available or we fail to authenticate, the call fails. In 1.0.9. Asterisk will try calling forever, without going back to the dial plan with a failure. CVS head will return CONGESTION as a result of this call.
- Retransmissions: We have no implemented the very basic SIP retransmassion timer described in the SIP RFC, called timer T1. Previously we did retransmit unacknowledged SIP messages with the same interval, a bit too fast. Now, Asterisk doubles the time between each transmission, following the RFC. If we monitor the peer we\’re calling (qualify=on in sip.conf), we base retransmission on the known round-trip time.
To summarize, we have been trying too hard before, these changes make Asterisk a bit more friendly in a SIP network.
The SIP channel is getting more RFC-compliant and robust every month. In september, I will participate in the SIPit interoperability tests with Asterisk 1.2, which is a first for Asterisk, something I wouldn\’t have dared a year ago with the 1.0 version of chan_sip. We still have a lot of work to do with the SIP support in Asterisk.
Together with Digium, I will soon start working on a new generation of the SIP channel aimed for Asterisk 1.4. That version will not be fully backwards compatible with the current SIP channel, but much more SIP compatible. Before that project takes off, we concentrate on releasing 1.2, an Asterisk relase that is a huge step forward compared with 1.0!