如dict_lxml.c调用dict_lxml_entry,此函数通过yacc文件,执行yyparse,进而调用dict_lxml_parse,xmlSAXUserParseFile解析xml文件,直接存储到fd_g_config->cnf_dict中;
还有一些其他扩展,如sip,则不是通过xml文件解析添加到fd_g_config->cnf_dict中,而是通过ds_dict_init等直接hard code写入字典中;
加载完配置文件后,server执行fd_core_start,fd_servers_start:
启动几个client_worker线程(对应一个serv_th线程)负责处理消息;
启动serv_th线程,负责监听端口;serv_th线程监听到消息后,转个client_worker线程进行处理;
client_worker线程执行fd_peer_handle_newCER,启动p_psm_th线程处理协议栈,发送FDEVP_CNX_INCOMING;
在p_psm_th线程中,fd_p_ce_handle_newCER,fd_p_ce_process_receiver,最后回复CEA;
编译加简单调试
http://blog.csdn.net/xmuyn/article/details/6002888
mkdir build
cd build
cmake ../
cmake ../ -DBUILD_TEST_APP:BOOL=ON
make edit_cache
make
make install
mkdir client
mkdir server
把freediameterd/freediameter-1.2.0复制到client和server
把test_app.fdx复制到client和server
把doc/single_host/test_app1.conf和freeDiameter-1.conf复制到client文件夹,test_app2.conf和freeDiameter-2.conf复制到server文件夹
修改freeDiameter-1.conf和freeDiameter-2.conf:
1. 把TLS_Cred和TLS_CA注释掉;
2. 把SecPort = 3869;等修改为SecPort = 0;即可。
3. 加入No_SCTP;
Prefer_TCP;
即可看到建起来diameter连接。