广告 《大道至简,给所有人看的编程课》 🔥

《FreeSWITCH参考手册》

1.23 mod_xml_rpc

其实除了mod_verto外,在FreeSWITCH中很早就有另一个模块可以提供HTTP Server功能,这就是mod_xml_rpc

该模块是最早的HTTP Server功能,在FreeSWITCH Console上执行

load mod_xml_rpc

可以看到类似如下输出:

mod_xml_rpc.c:1242 Starting HTTP Port 8080, DocRoot [/usr/local/freeswitch/htdocs]

表明一个监听8080端口的HTTP Server已经准备好了。

该模块默认使用HTTP Basic验证,用户名和密码都在xml_rpc.conf.xml中配置。

用浏览器打开FreeSWITCH服务器的8080端口,输入密码,就进入了一个小型的网站。里面的功能不多,不过,FreeSWITCH自己带了一个小小的FreeSWITCH Portal,这一块在《FreeSWITCH权威指南》里写得很详细,我们就不多说了。

我们来看看它提供的API:

$ curl --user freeswitch:works localhost:8080/api/status
<h1>FreeSWITCH Status</h1>
2015-06-30 18:42:49<br>
UP 0 years, 1 day, 21 hours, 31 minutes, 33 seconds, 325 milliseconds, 220 microseconds<br>
FreeSWITCH (Version 1.7.0 git 2a1195e 2015-06-26 19:51:40Z 64bit) is ready<br>
2 session(s) since startup<br>
0 session(s) - peak 1, last 5min 0 <br>
0 session(s) per Sec out of max 30, peak 1, last 5min 0 <br>
1000 session(s) max<br>
min idle cpu 0.00/100.00<br>
Current Stack Size/Max 240K/8192K

很熟悉吧,跟在Console上执行的结果基本一样。如果你熟悉Curl的话,你就明白以上命令向FreeSWITCH发了一个HTTP请求,并得到了结果。

其实我们完全可以执行更复杂的命令,如

 $ curl --user freeswitch:works localhost:8080/api/sofia?status
                      Name        Type                                           Data     State
 =================================================================================================
               192.168.7.6       alias                                       internal     ALIASED
                  external     profile                 sip`mod_sofia`@192.168.7.6:5080     RUNNING (0)
 .....

甚至发起一个呼叫,如:

curl --user freeswitch:works "localhost:8080/api/originate?user/1000%20%26echo"

其中,参数经过urlencode处理,经过FreeSWITCH urldecode以后的命令就相当于:

originate usr/1000 &echo

当然,更强大的还在后台,因为,你可以调用Lua

$ curl --user freeswitch:works "localhost:8080/api/lua?/tmp/test.lua"
Hi, 欢迎交流FreeSWITCH-CN微信公众号

对应的Lua脚本内容如下:/tmp/test.lua

stream:write("Hi, 欢迎交流FreeSWITCH-CN微信公众号\n")

有了Lua,就有了无限可能。比方,你可以POST一些参数:

$ curl --user freeswitch:works -XPOST -d "a=1&b=2" "localhost:8080/api/lua?/tmp/test.lua"
Hi, 欢迎交流FreeSWITCH-CN微信公众号, 我收到的参数是 a=1 b=2

对应的Lua脚本是:

a = env:getHeader("a")
b = env:getHeader("b")

stream:write("Hi, 欢迎交流FreeSWITCH-CN微信公众号, 参数是 a=" .. a .. " b=" .. b .. "\n")

大家已经看到,FreeSWITCH会将收到的POST参数存到env变量里,env是一个标准的Event变量,可以用getHeader取到参数的值。如果想查看全部的env变量,可以在脚本中加入以下代码:

stream:write(env:serialize());

你甚至可以POST XML,如:

curl --user freeswitch:works -XPOST -d '<xml><a>100</a><b>200</b></xml>' -H "Content-Type: application/xml" "localhost:8080/api/lua?/tmp/test.lua"

如果你像上面一个使用了stream:write的话,你就知道怎么取得这段XML字符串了。



本书版权所有 © 杜金房及各位贡献者 2016-2023,仅供在线阅读,谢绝一切形式转载。 本书还在写作中,持续更新。 如果你也想写上几句,欢迎加入我们。 | 返回首页 |