Asterisk事件系统主要用于模块之间的通信,例如当新的语音留言产生,Asterisk生成一个AST_EVENT_MWI事件,当订阅该事件的模块将收到该事件,并根据事件内容进行相应的处理。
1. asterisk支持订阅事件包含的类型?
2. 如何订阅该事件?
struct ast_event_sub *ast_event_subscribe(enum ast_event_type type, ast_event_cb_t cb,
void *userdata, ...)
type:事件类型
cb:当事件发生时,处理该事件的函数
userdata: 传递给事件处理函数的参数
剩下的参数用于指定传递给订阅者的具体事件。
peer->mwi_event_sub = ast_event_subscribe(AST_EVENT_MWI, mwi_event_cb, peer,
AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_STR, peer->mailbox,
AST_EVENT_IE_END);
AST_EVENT_MWI事件,该事件包含的信息单元类型是AST_EVENT_IE_MAILBOX,信息单元的载荷类型是字符串,该字符串是peer->mailbox。
AST_EVENT_IE_END表示参数结束。
3. 如何产生事件?
产生语音留言信息提示,其中包含三个信息单元,语音邮箱,新邮件数量和旧邮件数量。
希望大家对事件生成以及订阅的内部机制研究一下,一起学习。