If you’ve been watching the Asterisk trunk subversion repository lately, you may have noticed a new channel driver suddenly appear: chan_motif. And you may have asked, yourself, “Motif? What’s a motif? What new fangled protocol is that?”
Well, we’re going to explain all that, but first, a bit of history.
Back in 02/04/06, what would become chan_jingle was added to Asterisk. At the time, it serviced both what was expected to be the Jingle protocol, as well as Google Talk. Of course, this soon proved to be problematic: the protocol Google implemented wasn’t conforming to the Jingle draft specification! And so, in a rather prophetic sort of way, chan_gtalk was created. The first commit message for chan_gtalk, all the way back on 8/23/06, is the following:
step one seperate jingle from gtalk as this
will make it easier to keep up and then phase out.
As the past six years have shown, there’s nothing quite so permanent as a temporary solution. During this time, the Asterisk developer community has tried to maintain both channel drivers, keeping up with both additions to the Jingle protocol and the moving protocol target that has been Google Talk. In the end, this has not gone as well as we’d like. Some of this is due to the design and implementation of the channel drivers (for example, the fact that there are two of them!); some of this is due to Google changing the protocol of Google Talk. We here at Digium decided last year to ask the developer community to help and take ownership of the two channel drivers. Unfortunately, neither Digium nor the open source developer community has been able to keep chan_jingle/chan_gtalk maintained to the level that any of us have liked.
And yet, six years later, some things have settled down. The Jingle protocol has a robust and concrete specification to base a channel driver on. Google released the 0.5.x branch of the libjingle library (Google Jingle), which is much closer to the Jingle protocol then the old Google Talk protocol. The differences between Google Talk and the Jingle protocol are much more well understood then they were at the time the original channel drivers were written. All of this has resulted in a state where the rate of change is considerably slower.
After a lengthy period of investigation and research, we decided to resolve the temporary solution and combine the functionality of chan_jingle and chan_gtalk into a single channel driver. This new channel driver would unify support for Jingle, Google Jingle, and Google Talk in a single channel driver. Unfortunately, creating a drop in replacement for chan_jingle would require tying the implementation of the resulting channel driver into some of the same design decisions that limited us initially – and so we opted for a brand new channel driver. And thus was born chan_motif.
The chan_motif channel driver is a replacement for both chan_gtalk and chan_jingle but adds additional features not found in either. This includes:
- Full compliance with the Jingle and Google Jingle specifications, as well as compatibility with the Google Talk specification for Google Voice interoperability
- Full configuration reload
- Full video/codec support
- Bidirectional cause code mapping
- Hold/Unhold/Ringing indications
The new chan_motif channel driver will be a core supported channel driver in Asterisk. We plan to fix any XEP compliance issues, and hope that this will provide a more robust mechanism for supporting Jingle/Google Jingle/Google Talk.
And now: why chan_motif?
Motif: a perceivable or salient recurring fragment or succession of notes.
Sort of like… a jingle!