freediameter状态机启动p_psm_th。
client端:
fd_peer_add添加server,连接每个server启动一个线程,fd_psm_begin,p_psm_th,通过fd_event_timedget获取消息;
如果超时未获取,得到FDEVP_PSM_TIMEOUT消息,执行fd_p_cnx_init,启动connect_thr线程,给自己发送FDEVP_CNX_ESTABLISHED消息;
状态机收到此FDEVP_CNX_ESTABLISHED消息,执行fd_p_ce_handle_newcnx,create_CER并发送,切换到STATE_WAITCEA状态。
如果状态机收到server回复的应答CC_CAPABILITIES_EXCHANGE消息,fd_p_ce_msgrcv,切换到STATE_OPEN状态;启动定时器;
定时器超时fd_p_dw_timeout,如果是第一次,发送DWR,fd_out_send,启动out_thr线程发送消息;
server端:
解析配置文件fd_core_parseconf;通过fd_ext_load,可以加载扩展的动态库;其中每个扩展的动态库,都调用EXTENSION_ENTRY,生成fd_ext_init,动态库的入口。
每个扩展都通过EXTENSION_ENTRY生成自己动态库的fd_ext_init函数,此函数实际调用注册的函数,
client端:
fd_peer_add添加server,连接每个server启动一个线程,fd_psm_begin,p_psm_th,通过fd_event_timedget获取消息;
如果超时未获取,得到FDEVP_PSM_TIMEOUT消息,执行fd_p_cnx_init,启动connect_thr线程,给自己发送FDEVP_CNX_ESTABLISHED消息;
状态机收到此FDEVP_CNX_ESTABLISHED消息,执行fd_p_ce_handle_newcnx,create_CER并发送,切换到STATE_WAITCEA状态。
如果状态机收到server回复的应答CC_CAPABILITIES_EXCHANGE消息,fd_p_ce_msgrcv,切换到STATE_OPEN状态;启动定时器;
定时器超时fd_p_dw_timeout,如果是第一次,发送DWR,fd_out_send,启动out_thr线程发送消息;
server端:
解析配置文件fd_core_parseconf;通过fd_ext_load,可以加载扩展的动态库;其中每个扩展的动态库,都调用EXTENSION_ENTRY,生成fd_ext_init,动态库的入口。
每个扩展都通过EXTENSION_ENTRY生成自己动态库的fd_ext_init函数,此函数实际调用注册的函数,
如dict_lxml.c调用dict_lxml_entry&