安装单个模块
make mod_sofia-install
make mod_ilbc-install
fs-cli事件订阅
/event plain ALL
/event plain CHANNEL_ANSWER
sofia 帮助文档
sofia help
USAGE:
--------------------------------------------------------------------------------
sofia global siptrace <on|off>
sofia capture <on|off>
watchdog <on|off>
sofia profile <name> [start | stop | restart | rescan] [wait]
flush_inbound_reg [<call_id> | <[user]@domain>] [reboot]
check_sync [<call_id> | <[user]@domain>]
[register | unregister] [<gateway name> | all]
killgw <gateway name>
[stun-auto-disable | stun-enabled] [true | false]]
siptrace <on|off>
capture <on|off>
watchdog <on|off>
sofia <status|xmlstatus> profile <name> [reg [<contact str>]] | [pres <pres str>] | [user <user@domain>]
sofia <status|xmlstatus> gateway <name>
sofia loglevel <all|default|tport|iptsec|nea|nta|nth_client|nth_server|nua|soa|sresolv|stun> [0-9]
sofia tracelevel <console|alert|crit|err|warning|notice|info|debug>
sofia help
--------------------------------------------------------------------------------
开启消息头压缩
<param name="enable-compact-headers" value="true"/>
fs需要重启
呼叫相关指令
# 显示当前呼叫
show calls
# 显示呼叫数量
show calls count
# 挂断某个呼叫
uuid_kill 58579bd2-db78-4c7e-a666-0f16e19be643
# 挂断所有呼叫
hupall
# sip抓包
sofia profile internal siptrace on
sofia profile external siptrace on
# 拨打某个用户并启用echo回音
originate user/1000 &echo
正则测试
在fs_cli里面可以用regex快速测试正则是否符合预期结果
regex 123123 | \d
regex 123123 | ^\d*
变量求值
eval $${mod_dir}
eval $${recording_dir}
修改UA信息
- sofia_external.conf.xml
- sofia_internal.conf.xml
<param name="user-agent-string" value="wdd"/>
<param name="username" value="wdd"/>
修改之后需要rescan profile.
mod_distributor的两个常用指令
# reload
distributor_ctl reload
# 求值
eval ${distributor(distributor_list)}
自动接听回音测试
<extension name="wdd_echo">
<condition field="destination_number" expression="^8002">
<action application="info" data=""></action>
<action application="answer" data=""></action>
<action application="echo" data=""></action>
</condition>
</extension>
odbc-dsn配置错误,fs进入假死状态
最近遇到一个奇怪的问题,相同的fs镜像,在一个环境正常运行,但是再进入另一个环境的时候,fs进程运行起来了,但是所有的功能都异常,仿佛进入了假死状态。并且控制台的日志输出也没有什么有用的信息。
后来,我想起来以前曾经遇到过这个问题。
这个fs的镜像中没有编译odbc相关的依赖,但是看sofia_external.conf.xml和sofia_internal.conf.xml, 却有odbc相关的配置。
<param name="odbc-dsn" value="....">
所以只要把这个odbc-dsn的配置注释掉,fs就正常运行了。
取消session-timer
某些情况下fs会对呼入的电话,在通过时长达到1分钟的时候,向对端发送一个re-invite, 实际上这还是一个invite请求,只是to字段有了tag参数。这个机制叫做session-timer, 具体定义在RFC4028中。
但是某些SIP终端可能不支持re-invite, 然后不对这个re-invite做回应,或者回应了一个错误的状态码,都会导致这通呼叫异常挂断。
在internal.xml中修改如下行:
<param name="enable-timer" value="false"/>
RTP失活超时检测
某个时刻开始,客户端无法再向FS发送流媒体了。例如客户端Web页面关闭,或者浏览器关闭。
但是在这种场景下,FS还是会向客户端发送一段时间的媒体流,然后再发送BYE消息。那么,我们如何控制这个RTP失活的检测时间呢?
在internal.xml或者external.xml中,有以下参数,可以控制检测RTP超时时间。
- rtp-timeout-sec rtp超时秒数
- rtp-hold-timeout-sec rtphold超时秒数
<param name="rtp-timeout-sec" value="10"/>
<param name="rtp-hold-timeout-sec" value="10"/>
sofia profile internal restart
fs 配置多租户分机
分机的相关配置都是位于conf/directory目录中, 我的directory目录中只有一个default.xml文件
<include>
<domain name="123.cc">
<user id="1000">
<params>
<param name="password" value="1234"/>
</params>
</user>
<user id="1001">
<params>
<param name="password" value="1234"/>
</params>
</user>
</domain>
<domain name="abc.cc">
<user id="1000">
<params>
<param name="password" value="1234"/>
</params>
</user>
<user id="1001">
<params>
<param name="password" value="1234"/>
</params>
</user>
</domain>
</include>