我是靠谱客的博主 鲤鱼石头,最近开发中收集的这篇文章主要介绍Asterisk 16.X DNS机制DNS初始化DNS查询发送消息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在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查询发送消息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部