本文将对 sofia 发送 subscriber 这个信令进行源码分析其中会对一些涉及到的其它源码进行解析,用以后续学习
Sofia 的 handle
这里对 handle 进行一定的解释。这个 handle 用于管理向谁发送什么样的数据,这个谁一般指定 uac 。 一个 handle 会生成一个新的 call-id,产生一个新的 session。
nua_handle_destroy()
: 用于销毁这个 handle。- 小知识:FreeSWITCH 一般在创建后
nua_handle_bind(fnh, &mod_sofia_globals.destroy_private)
,后续不用后会自动销毁, 这个销毁主要依赖于 our_sofia_event_callback
中的以下代码:1
2
3
4
5if ((sofia_private && sofia_private == &mod_sofia_globals.destroy_private)) {
nua_handle_bind(nh, NULL);
nua_handle_destroy(nh);
nh = NULL;
}
- 小知识:FreeSWITCH 一般在创建后
nua_handle_bind
: 绑定给回调函数一个上下文。在发生 sip 的状态机变化的时候,nua_create 注册的回调函数会回调,其中的会带有这个绑定的值。解绑传值为 NULLnua_handle_ref
: 增加了 handle 的 sub_ref, 未知nua_handle_unref
: 减少了 handle 的 sub_ref,未知1
nua.c:304
Sofia 的 subscribe 流程
1 | nua.c:701 nua_subscribe NUA_SIGNAL(nh, nua_r_subscribe, tag, value) |