FreeSWITCH中文 FreeSWITCH参考手册
← 目录

mod_dptools

mod_dptools这应该是FreeSWITCH中最常用的模块了。

本模块实现了系统大部分的Application(即我们常说的App)。dptools是Dialplan Tools的简写。也就是说,这些App大部分是在Dialplan中用的。

我们可以通过在FreeSWITCH中重新加载该模块来查看一些信息,如:

 freeswitch> reload`mod_dptools`
 ...
 Adding Application 'blind_transfer_ack'
 Adding Application 'bind_digit_action'
 Adding Application 'capture'
 Adding Application 'clear_digit_action'
 Adding Application 'digit_action_set_realm'
 Adding Application 'privacy'
 Adding Application 'set_audio_level'
 Adding Application 'set_mute'
 …

从上面的例子可以看出,里面实现了很多我们不熟悉的App。关于这些App,我想,等所有模块都讲完了后我们也可以一个一个的讲。

关于App,我们前面讲过了,最常见的如answerechobridge等,它们都是执行一些功能跟通话的另一端进行交互。还记得吗?我们以前说过,跟FreeSWITCH通信其实就是在跟FreeSWITCH中的一个App在通信。

除App外,该模块还实现了一些Endpoint、Dialplan、API、File、Chat等Interface。

其中,有一个我们最熟悉的Endpoint——user,是的,可能大家都天天在使用,但没有注意到它是一个Endpoint。实际上,它相当于一个虚拟的Endpoint,我们先看一下下面的例子:

 <action application="bridge" data="user/1000"/>

这里,user/1000是一个呼叫字符串,而user就是个Endpoint,实际上,它(在默认的配置下)相当于如下的字符串:

 <action application="bridge" data="sofia/internal/1000@192.168.x.x"/>

其中,192.168.x.x是一个IP(实际上它是一个Domain,参见第节)。所以,这里的sofia才是真正的endpoint,而user只是相当于到sofia的一个快捷方式而已。

别的不说了,将该模块多reload几遍相信你在日志中就有更多的发现。然后,有时间可以看看源代码啊,很好懂的。

mod_commands

接下来,我们来看一mod_commands模块。该模块实现了系统大多数的API命令,如 versionstatus以及我们常用的originate等。

类似于上一节,我们可以通过reload模块的方式查看模块的一些信息,不妨输入下列命令试试:

freeswitch> reload`mod_commands`

+OK Reloading XML

-ERR unloading module [Module is not unloadable]

我们看到,该命令无情地抛出了一个错误,说该模块是无法被卸载的,自然,就无法重新加载了。看来,我们昨天学到的技术不好用了。我们只得另想办法。

我们知道fs_cli可以做为一个客户端连接到FreeSWITCH上,看日志,执行命令什么的。其实,它也有一个小的技巧,就是,用-x参数执行一个命令立即即出,如:

$ fs_cli -x "status"

UP 0 years, 0 days, 13 hours, 46 minutes, 47 seconds, 330 milliseconds, 78 microseconds
FreeSWITCH (Version 1.5.8b git 0c8d8ba 2014-01-16 01:06:11Z 64bit) is ready
6 session(s) since startup
0 session(s) - peak 1, last 5min 0
0 session(s) per Sec out of max 200, peak 1, last 5min 0
3000 session(s) max
min idle cpu 0.00/100.00
Current Stack Size/Max 240K/8192K

哇,既然能这样用就好办了。我们可以用下面的命令看一看mod_commands模块中都实现了哪些API命令:

$ fs_cli -x "help" | grep`mod_commands`
...,,Shutdown`mod_commands`
acl,<ip> <list_name>,Compare an ip to an acl list`mod_commands`
alias,[add|stickyadd] <alias> <command> | del [<alias>|*],Alias`mod_commands`
banner,,Return the system banner`mod_commands`
bg_system,<command>,Execute a system command in the background`mod_commands`
bgapi,<command>[ <arg>],Execute an api command in a thread`mod_commands`
… 此处省略XXXX字

其实,这里的help命令也是在mod_commands里实现的,同样,load/unload/reload也都是,这也是为什么该模块不能卸载的根本原因——unload依赖mod_commands,所以,它不能卸载自己所在的模块。

当然,另外一个方法就是到Wiki上找文档了。该模块的文档还是挺全的。见:https://freeswitch.org/confluence/display/FREESWITCH`mod_commands`

通过这两节你应该会注意到一些小技巧:如通过reload一个模块查看某模块中实现了哪些Interface这种技巧。如果想好好学习的话一定要注意发现。以后,我们就不详细详解这些技巧的细节了。


本书版权所有 © 杜金房及各位贡献者 2016-2023,仅供在线阅读,谢绝一切形式转载。