Asterisk 16.X 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所注册)
来完成消息的路由及发送功能。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值