FreeSwitch
文章平均质量分 77
cww_zju_amdocs
这个作者很懒,什么都没留下…
展开
-
Freeswitch的一个内存泄漏分析
发现问题在平常开发过程中,要做一个细心的人,不轻易放过任何一个问题。这次发现Freeswitch的内存泄漏,是因为经常有关注测试环境的Freeswitch内存占用。发现在测试环境升级的第二天Freeswitch内存就升到了200-300M,非常异常!观察问题使用脚本定时统计Freeswitch的内存占用,同时打开Freeswitch的调试开关。export TPORT_DUMP=/usr/local/freeswitch/log/tport_sip.log输出Freeswi.原创 2021-04-16 18:29:32 · 1556 阅读 · 2 评论 -
FreeSwitch系列之监控
如何安装1、git clonehttps://gitee.com/chenvv0417/freeswitch-monitor.git2、效果图原创 2020-11-27 15:53:13 · 1025 阅读 · 4 评论 -
FreeSwitch系列之认证算法
直接看最后认证的源代码(sofia_reg.c:sofia_reg_parse_auth):for_the_sake_of_interop: if ((input = switch_mprintf("%s:%q", regstr, uri))) { switch_md5_string(uridigest, (void *) input, strlen(input)); } if (nc && cnonce && qop) {原创 2020-11-20 16:40:39 · 757 阅读 · 0 评论 -
FreeSwitch系列之注册流程处理
业务流程终端向服务器发送REGISTER请求sip消息示例: REGISTER sip:39.108.105.163 SIP/2.0 Max-Forwards: 10 Record-Route: <sip:39.108.105.163:5070;r2=on;lr> Record-Route: <sip:39.108.105.163:5070;transport=tcp;r2=on;lr> Via: SIP/2.0/UDP 39.10.原创 2020-11-12 17:27:45 · 1427 阅读 · 0 评论 -
FREESWITCH系列之内存泄漏排查总结
心路历程1.懵逼状态在接到这个任务的时候,对FreeSwitch处于一问三不知的情况,不了解FreeSwitch的业务,不了解流程,更要不要说代码了。但是还是硬着头皮上了,原本以为是个短期接触战,没想到被自己搞成了持久战。回过来头看,一开始对任务的难度还是低估了,没有做好持久战的准备。2.无头苍蝇状态在接到任务后,在没有先去了解业务的情况下,就开始了各种尝试。工具1:valgrind,跑了一段时间后,除了输出一堆无用的垃圾外,没什么用工具2:fmpool,开源的工具,使用该工具后,性原创 2020-11-12 09:08:40 · 1992 阅读 · 0 评论 -
FREESWITCH系列之调试技巧
打开日志开关export SOFIA_DEBUG=9export NUA_DEBUG=9export NTA_DEBUG=9export NEA_DEBUG=9export TPORT_DEBUG=9export TPORT_LOG=1export TPORT_DUMP=/usr/local/freeswitch/log/tport_sip.logexport SOA_DEBUG=9export IPTSEC_DEBUG=9export SU_DEBUG=9修改su的日志打印原创 2020-11-12 08:58:15 · 548 阅读 · 0 评论 -
FreeSwitch系列之接收消息处理流程
接收消息处理流程tport_wakeup_pri在profile clone线程中被触发。1、接收消息2、解析消息成结构体msg3、找到leg去处理请求4、创建irq5、执行leg的回调函数,转到nua_handle层去处理。6、找到method。7、执行三部曲:init-->preprocess-->reporttport_wakeup_pri =>tport_recv_event =>tport_recv_data(self);原创 2020-11-11 17:59:19 · 614 阅读 · 1 评论 -
FreeSwitch系列之mod_sofia启动流程
模块加载过程启动事件处理线程池启动事件处理线程池 :SWITCH_MODULE_LOAD_FUNCTION(mod_sofia_load) => sofia_msg_thread_start(0); => sofia_msg_thread_run => sofia_process_dispatch_event => our_sofia_event_callback : 处理消息这个线程的原创 2020-11-11 16:38:41 · 823 阅读 · 0 评论 -
FREESWITCH系列之学习资料汇总
FreeSwitch架构篇FreeSwitch的架构https://blog.csdn.net/yetyongjin/article/details/96838256https://blog.csdn.net/hello_zyg/article/details/79125052FreeSwitch总体架构https://www.cnblogs.com/Braveliu/p/11325031.htmlSofia-Sip辅助文档Sofia-SIP辅助文档一 – Sofia-SIP源代原创 2020-11-11 16:30:53 · 336 阅读 · 1 评论 -
FREESWITCH系列之代码技巧
FreeSwitch是一款优秀的开源软件,里面很多代码技巧值得大家学习。1.条件判断转化成函数比如nta.c:2768,tport_is_stream把复杂的条件判断提取成一个函数,利用函数命名tport_is_stream让代码清晰易读。 stream = tport_is_stream(tport); /* Try to use compression on reverse direction if @Via has comp=sigcomp */ if (s原创 2020-11-06 18:06:28 · 413 阅读 · 0 评论 -
FreeSwitch系列之内存管理
1.sofia-sip库的内存管理home-based 内存管理机制,在需要分配许多内存块的情况下非常有用。分配器是通过分配中心保存各个分配内存块的引用来实现的。当分配中心释放,所有它保持引用的内存块都会被释放。为一个给定任务分配大量的内存块时基于home的内存管理将非常高效。分配将通过home内存来执行,home内存保留着每个分配内存块的地址。当home内存被释放时,它也将释放那些它跟踪的内存块。这大大简化了应用代码逻辑,不再需要维护每块分配的内存空间,不需要保留他们的地址也不再需要一个个单独释放原创 2020-11-02 19:27:02 · 1012 阅读 · 1 评论 -
使用GPERFOOLS排查内存泄漏
什么是gperftools一个优化的内存管理算法—tcmalloc性能优于malloc。一个用于CPU profile的工具,用于检测程序的性能热点,这个功能和gprof类似。一个用于堆检查工具,用于检测程序在是够有内存泄露,这个功能和valgrind类似。一个用于Heap profile的工具,用于监控程序在执行过程的内存使用情况。如何安装代码:https://github.com/gperftools/gperftoolsgit clone https://githu.原创 2020-10-27 17:57:04 · 633 阅读 · 0 评论