一、概述
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