概述
在Asterisk 16.X中,DNS查询机制交由Asterisk核心模块来控制。
DNS初始化
在PJSIP模块load时,通过ast_sip_initialize_dns向PJSIP线程池初始化DNS,
并将DNS相关数据结构(pj_dns_resolver)与PJSIP核心endpoint(endpt->resolver)进行绑定,
这样在后续endpoint使用中可通过endpt->resolver获得DNS已经初始化完成的数据对象。
DNS查询
当UAS通过pjsip_inv_send_msg发送初始invite请求消息时,
最终会通过pjsip_endpt_send_request_stateless结构启动DNS查询,
依次pjsip_endpt_resolve—>sip_resolve(是Asterisk注册DNS启动回调),
在sip_resolve中通过调用ast_dns_query_set_resolve_async启动system DNS查询,
并注册sip_resolve_callback回调(当查询结果完全返回时启动该回调)。
system DNS查询数据对象(该对象由Asterisk DNS核心所注册)如下:
struct ast_dns_resolver dns_system_resolver_base = {
.name = "system",
.priority = DNS_SYSTEM_RESOLVER_PRIORITY,
.resolve = dns_system_resolver_resolve, //该回调由Asterisk DNS核心模块所调用
.cancel = dns_system_resolver_cancel,
};
发送消息
当sip_resolve_callback回调被调用时,所有查询皆已完成并携带结果,
调用sip_resolve_invoke_user_callback启动PJSIP 消息分发及发送功能。
sip_resolve_invoke_user_callback将会调用回调
stateless_send_resolver_callback(该回调由启动DNS查询的入口函数pjsip_endpt_resolve所注册)
来完成消息的路由及发送功能。
最后
以上就是鲤鱼石头为你收集整理的Asterisk 16.X DNS机制DNS初始化DNS查询发送消息的全部内容,希望文章能够帮你解决Asterisk 16.X DNS机制DNS初始化DNS查询发送消息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复