好多人問(wèn)我如何使用 mod_xml_curl 進(jìn)行用戶(hù)驗證,每次回答指導都很費勁。今天用 PHP 寫(xiě)了一個(gè)萬(wàn)能腳本,希望對大家有幫助。
FreeSWITCH 默認使用靜態(tài)的 XML 文件配置用戶(hù),但如果需要動(dòng)態(tài)認證,就需要跟數據庫關(guān)聯(lián)。FreeSWITCH 通過(guò)使用 mod_xml_curl 模塊完美解決了這個(gè)問(wèn)題。實(shí)現思路是你自己提供一個(gè) WEB 服務(wù)器,當有用戶(hù)注冊(或 INVITE)請求時(shí),FreeSWITCH 向你的WEB服務(wù)器發(fā)送請求,你查詢(xún)數據庫生成一個(gè)標準的XML文件,FreeSWITCH 進(jìn)而通過(guò)這一文件對用戶(hù)進(jìn)行認證。
好了,別的不多說(shuō)了,看腳本(用PHP實(shí)現):
<?php $user = $POST['user']; $domain = $POST['domain']; $context = $_POST['Hunt-Context']; $password = "1234"; ?>
<domain name="<?php echo $domain;?>">
<params>
<param name="dial-string" value="{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
</params>
<groups>
<group name="default">
<users>
<user id="<?php echo $user; ?>">
<params>
<param name="password" value="<?php echo $password; ?>"/>
<param name="vm-password" value="<?php echo $password; ?>"/>
</params>
<variables>
<variable name="toll_allow" value="domestic,international,local"/>
<variable name="accountcode" value="<?php echo $user; ?>"/>
<variable name="user_context" value="<?php echo $context ?>"/>
<variable name="effective_caller_id_name" value="FreeSWITCH-CN"/>
<variable name="effective_caller_id_number" value="<?php echo $user;?>"/>
<!-- <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/> -->
<!-- <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/> -->
<variable name="callgroup" value="default"/>
<variable name="sip-force-contact" value="NDLB-connectile-dysfunction"/>
<variable name="x-powered-by" value="http://www.freeswitch.org.cn"/>
</variables>
</user>
</users>
</group>
</groups>
</domain>
之所以稱(chēng)這是萬(wàn)能腳本,是因為它根本不查詢(xún)數據庫,任何注冊請求只要密碼是 1234 就都能通過(guò)注冊。
好了,把上述PHP文件放到你的服務(wù)器上,確保它能正確執行。
接下來(lái)配置你的 FreeSWITCH, conf/autoload_configs/xml_curl.conf.xml
<binding name="directory">
<param name="gateway-url" value="http://localhost/~seven/freeswitch/directory.php" bindings="directory"/>
</binding>
然后
reloadxml
reload mod_xml_curl
拿起你的SIP電話(huà)注冊試試吧,別忘了萬(wàn)能密碼是 1234。
然后怎么辦?把最開(kāi)頭的幾行換能你的業(yè)務(wù)邏輯(查詢(xún)數據庫等),就實(shí)現你自己的認證了。
上面的 php 腳本也放到 github 上了:https://gist.github.com/1086122
調試:
load mod_xml_curl 錯誤
mod_xml_curl 默認是不編譯的,到你的源代碼目錄中執行 make mod_xml_curl-install