Basically, on the AASIP code, we did end to end SDP negotiation. That means that on a call transfer we had to re-negotiate the end to end SDP for the joined calls. This is made worse if the transfer is to a set of ringing phones, etc.
The new code means we do the media relay, so we never re-negotiate the media. All we have to do is change the mapping of what goes where internally - very simple. It also makes generating ring tone or the like in the middle of the transfer just work.
To add to the fun, it appears there are a few ways to transfer a call.
- Transfer a ringing call without answering (done using a 3xx response just like a divert)
- Answer call and blind transfer it (done using a REFER)
- Answer a call, put on hold, call another number, and transfer before answer (seems snom cancel the call and then REFER as above, but we allow REFER with Replaces=)
- Answer a call, put on hold, call another, wait for answer, then transfer (done with a REFER with Replaces=)
I am still pondering if you should be able to transfer an outgoing external call to an external number... That may be a setting.