一、概述
Asterisk从12版本开始就引入了Stasis Message Bus。Stasis虽然是一个内部publish/subscribe message,但是它可以支持Asterisk实时core或者其他的模块的事件获取,如果有系统用户订阅了实时core或者其他模块的指定消息以后,它负责处理用户这些关注的事件。如果其他相关的资源需要进行实时处理时,可以对你模块进行订阅,或者要求推送这些信息,这样可以进一步确保信息的一致性。一些实时功能模块,例如CDR,AMI或者现在的新API接口ARI很多时候确实需要通过这些实时信息来处理模块本身的逻辑。比如,呼叫录音或者计费的问题。
二、ast_network_change_type分析
1、定义
STASIS_MESSAGE_TYPE_DEFN的宏为:
/*!
* \brief Boiler-plate messaging macro for defining public message types.
*
* \code
* STASIS_MESSAGE_TYPE_DEFN(ast_foo_type,
* .to_ami = foo_to_ami,
* .to_json = foo_to_json,
* .to_event = foo_to_event,
* );
* \endcode
*
* \param name Name of message type.
* \param ... Virtual table method
本文介绍了Asterisk 12版本引入的Stasis Message Bus,它用于处理Asterisk实时core和其他模块的事件。重点分析了`ast_network_change_type`,包括其定义、销毁、初始化和应用程序调用,并以chan_iax2和PJSIP为例说明网络更改事件如何影响模块行为,如触发IAX Endpoint的重新注册。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



