FreeSWITCH源码分析之mod_xml_curl
来源:互联网 发布:windows longhorn铃声 编辑:程序博客网 时间:2024/05/22 14:12
近期又开始了我的FreeSWITCH研究之路, 因为项目中需要, 使用sip_profile中的internal端点来处理sipUA的注册及在线保持做被叫, 打开了登录及呼叫认证的开关, 我们都知道FreeSWITCH默认的directory中有1000-1019这20个默认用户, 如果新增用户也有一个批处理脚本能快速的生成出来新的用户, 但是我们做为一个统一平台的操作, 有一个分布式的FS集群, 如果所有的用户都以文档的方式存在每一台有FS的机器上, 管理起来非常不方便, 并且也不便于查询等操作, 所以就有了mod_xml_curl这个模块, 这个模块主要是来集中远程RPC的方式来管理用户目录, 拨号计划, 端点配置等相关的xml配置, 本文主要是从源码的级别来阐述它到底是如何工作的。
一、总体结构
正如其它模块一样, 每一个FS模块都要存在几个通用方法, 如下:
SWITCH_MODULE_LOAD_FUNCTION(mod_xml_curl_load); // 模块装载SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_curl_shutdown); // 模块缷载SWITCH_MODULE_DEFINITION(mod_xml_curl, mod_xml_curl_load, mod_xml_curl_shutdown, NULL); // 导出外部对本模块的操作入口
switch_status_t mod_xml_curl_load (switch_loadable_module_interface_t **module_interface, switch_memory_pool_t *pool)SWITCH_MODULE_LOAD_FUNCTION(mod_xml_curl_load){switch_api_interface_t *xml_curl_api_interface; // 这里定义了一个api的使用实例指针/* connect my internal structure to the blank pointer passed to me */*module_interface = switch_loadable_module_create_module_interface(pool, modname); // 这里使用core方法来创建一个模块实例 // 其中的参数, pool为FS共用的内存池, 这里都统一使用core中的内存池, 如果处理不好会导致所有的模块都会有问题, 这点感觉设计的不太好, 第二个 // 参数是modname: 这个是模块的名称memset(&globals, 0, sizeof(globals)); // 对struct的一个初始化过程globals.pool = pool; // 保存core内存池句柄到本模块全局变量中去, 以便以后引用globals.hash_root = NULL; globals.hash_tail = NULL; // 这里是对模块的配置文件进行了一个解析的过程, 主要操作xml_curl.conf文件, 以节点xml_binding_t保存 // 这个方法很重要,除了上面说的对配置文件的解析,还对xml_url_fetch回调rpc业务处理方法做了bind,并在switch_xml_bind_search_function方法中// 将binding保存到了全局的BINDINGS的一个搜索链表中去, 以便core在查找用户时直接回调本方法来拿到用户数据并使用if (do_config() != SWITCH_STATUS_SUCCESS) {return SWITCH_STATUS_FALSE;}// 这里对这个api进行了初始化, 把xml_curl加入到module_interface模块实例中去, 其中xml_curl_function这个模块回调指针// 主要设置了控制台api操作时对模块变量keep_file_around参数的赋值, 调试器打开或关闭, 并响应控制台结果.SWITCH_ADD_API(xml_curl_api_interface, "xml_curl", "XML Curl", xml_curl_function, XML_CURL_SYNTAX);// 这里是控制台指令调用方法入口,组装sql语句,并通过switch_core_sql_exec(mystream.data)方法将本条指令放入db中去switch_console_set_complete("add xml_curl debug_on");switch_console_set_complete("add xml_curl debug_off");/* indicate that the module should continue to be loaded */return SWITCH_STATUS_SUCCESS;}
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_curl_shutdown){hash_node_t *ptr = NULL;// 这里对模块产生的内存进行释放while (globals.hash_root) {ptr = globals.hash_root;switch_core_hash_destroy(&ptr->hash);globals.hash_root = ptr->next;switch_safe_free(ptr);}// 并且取消已解析绑定的xml配置资源switch_xml_unbind_search_function_ptr(xml_url_fetch);return SWITCH_STATUS_SUCCESS;}
阅读全文
1 0
- FreeSWITCH源码分析之mod_xml_curl
- FreeSWITCH源码分析之主函数main()
- FreeSWITCH - mod_xml_rpc源码分析一socket_win.c
- FreeSWITCH - mod_xml_rpc源码分析二channel.c
- FreeSWITCH - mod_xml_rpc源码分析三chanswitch.c
- FreeSWITCH - mod_xml_rpc源码分析五init.c
- FreeSWITCH - mod_xml_rpc源码分析四data.c
- FreeSWITCH - mod_xml_rpc源码分析六thread_windows.c
- FreeSWITCH - mod_xml_rpc源码分析七server.c
- FreeSWITCH - mod_xml_rpc源码分析八conn.c
- FreeSWITCH - mod_xml_rpc源码分析九session.c
- freeswitch mrcp 源码分析--数据解析
- freeswitch mrcp 源码分析--event事件产生
- freeswitch源码阅读 之 sofia模块
- freeswitch mrcp 源码分析--数据接收(上)
- freeswitch mrcp 源码分析--数据接收(下)
- freeswitch源码研究
- FreeSwitch学习之一:FreeSwitch源码安装
- 通过DBF Viewer plus(v1.74)工具将csv转成dbf格式
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- Hbase的region优化
- android解析json数据
- 理解serialVersionUID
- FreeSWITCH源码分析之mod_xml_curl
- 方差与协方差
- 布隆过滤器--海量数据处理利器
- 学会Retrofit+OkHttp+RxAndroid三剑客的使用,让自己紧跟Android潮流的步伐
- ClassNotFoundException问题解决
- Unity3D使用SQLite——Android应用开发时问题的解决办法
- vue安装教程(自己安装过程及遇到的一些坑)
- 代码笔记(个人笔记,看懂就看,看不懂就不看)
- 抽象工厂模式(Abstract Factory)(对象创建型模式)