• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

freeswitch通过LUA加载用户数据

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

freeswitch是一款强大的voip服务器,可以语音和视频。但是它默认是采用/directory文件夹下的xml来配置用户的,对于整合到现有系统或者使用数据库保存用户信息的系统都是非常不方便的,所以,本文主要描述一种方法,解决freeswitch用户整合的问题。

 

完成这一任务需要三步,配置unixodbc,将用户验证转接到lua脚本,修改拨号计划使得拨通所有号码

 


 

 

开发环境:centos 6.2 64位,  freeswitch,  linphone,mysql

 

1  首先安装unixodbc

    unixODBC是一个可以让你在Unix/Linux系统下使用ODBC来连接数据库的组件,就像java中的mysql-connector-java-5.1.6-bin.jar一样,负责连接数据库的。

 

yum install unixODBC-devel.x86_64

yum install mysql-connector-odbc.x86_64

 

安装后修改两个文件:/etc/odbc.ini,/etc/odbcinst.ini

 

/etc/odbc.ini  配置要连接的数据库信息

 

[freeswitch]

Driver          = /usr/lib64/libmyodbc5.so

SERVER       = ip

PORT           = 3306

DATABASE    = database

USER            = user

PASSWORD   = password

 

/etc/odbcinst.ini 修改mysq的部分,将驱动包指向正确,这要根据你本身的包安装路径配置

 

# Example driver definitions

 

# Driver from the postgresql-odbc package

# Setup from the unixODBC package

[PostgreSQL]

Description     = ODBC for PostgreSQL

Driver          = /usr/lib/psqlodbc.so

Setup           = /usr/lib/libodbcpsqlS.so

Driver64        = /usr/lib64/psqlodbc.so

Setup64         = /usr/lib64/libodbcpsqlS.so

FileUsage       = 1

 

 

# Driver from the mysql-connector-odbc package

# Setup from the unixODBC package

[MySQL]

Description     = ODBC for MySQL

Driver          = /usr/lib64/libmyodbc5.so

Setup           = /usr/lib64/libodbcmyS.so

Driver64        = /usr/lib64/libmyodbc5.so

Setup64         = /usr/lib64/libodbcmyS.so

FileUsage       = 1

 

 

修改之后,执行  isql -v freeswitch

如果出现

[[email protected] etc]# isql -v freeswitch

+---------------------------------------+

| Connected!                            |

|                                       |

| sql-statement                         |

| help [tablename]                      |

| quit                                  |

|                                       |

+---------------------------------------+

SQL> 

则代表你的unixodbc配置成功了

 

2  修改用户注册部分,转接到lua脚本进行注册验证

修改freeswitch/conf/autoload_configs/lua.conf.xml

 

<configuration name="lua.conf" description="LUA Configuration">

  <settings>

 

    <!--

    Specify local directories that will be searched for LUA modules

    These entries will be pre-pended to the LUA_CPATH environment variable

    -->

    <!-- <param name="module-directory" value="/usr/lib/lua/5.1/?.so"/> -->

    <!-- <param name="module-directory" value="/usr/local/lib/lua/5.1/?.so"/> -->

 

    <!--

    Specify local directories that will be searched for LUA scripts

    These entries will be pre-pended to the LUA_PATH environment variable

    -->

    <!-- <param name="script-directory" value="/usr/local/lua/?.lua"/> -->

    <!-- <param name="script-directory" value="$${base_dir}/scripts/?.lua"/> -->

 

    <!--<param name="xml-handler-script" value="/dp.lua"/>-->

    <!--<param name="xml-handler-bindings" value="dialplan"/>-->

    <param name="xml-handler-script" value="gen_dir_user_xml.lua" />

    <param name="xml-handler-bindings" value="directory" />

    <!--

        The following options identifies a lua script that is launched

        at startup and may live forever in the background.

        You can define multiple lines, one for each script you

        need to run.

    -->

    <!--<param name="startup-script" value="startup_script_1.lua"/>-->

    <!--<param name="startup-script" value="startup_script_2.lua"/>-->

  </settings>

</configuration>

让lua脚本接管用户注册验证,这里默认调用的脚本是freeswitch/script/gen_dir_user_xml.lua

脚本内容如下:

freeswitch.consoleLog("NOTICE","lua take the users...\n");

-- gen_dir_user_xml.lua

-- example script for generating user directory XML

 

-- comment the following line for production:

--freeswitch.consoleLog("notice", "Debug from gen_dir_user_xml.lua, provided params:\n" .. params:serialize() .. "\n")

 

local req_domain = params:getHeader("domain")

local req_key    = params:getHeader("key")

local req_user   = params:getHeader("user")

local req_password   = params:getHeader("pass")

 

local dbh = freeswitch.Dbh("freeswitch","user","password");

freeswitch.consoleLog("NOTICE","start connect DB...\r\n");

assert(dbh:connected());

dbh:query("select password from Users where id="..req_user,function(row)

        freeswitch.consoleLog("NOTICE",string.format("%s\n",row.password))

        req_password=string.format("%s",row.password)

end);

dbh:release();

 

freeswitch.consoleLog("NOTICE","info:"..req_domain.."--"..req_key.."--"..req_user.."--"..req_password.."\n");

 

 

 

--assert (req_domain and req_key and req_user,

--"This example script only supports generating directory xml for a single user !\n")

if req_domain ~= nil and req_key~=nil and req_user~=nil then

    XML_STRING =

    [[<?xml version="1.0" encoding="UTF-8" standalone="no"?>

    <document type="freeswitch/xml">

      <section name="directory">

        <domain name="]]..req_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="]] ..req_user..[[">

              <params>

            <param name="password" value="]]..req_password..[["/>

            <param name="vm-password" value="]]..req_password..[["/>

              </params>

              <variables>

            <variable name="toll_allow" value="domestic,international,local"/>

            <variable name="accountcode" value="]] ..req_user..[["/>

            <variable name="user_context" value="default"/>

            <variable name="directory-visible" value="true"/>

            <variable name="directory-exten-visible" value="true"/>

            <variable name="limit_max" value="15"/>

            <variable name="effective_caller_id_name" value="Extension ]] ..req_user..[["/>

            <variable name="effective_caller_id_number" value="]] ..req_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="techsupport"/>

              </variables>

            </user>

          </users>

        </group>

          </groups>

        </domain>

      </section>

    </document>]]

else

    XML_STRING =

    [[<?xml version="1.0" encoding="UTF-8" standalone="no"?>

    <document type="freeswitch/xml">

      <section name="directory">

      </section>

    </document>]]

end

 

-- comment the following line for production:

freeswitch.consoleLog("notice", "Debug from gen_dir_user_xml.lua, generated XML:\n" .. XML_STRING .. "\n");

 

 

修改freeswitch/conf/directory中的一部分内容,使得通过xml验证用户的功能失效,这样lua才能真正接管用户注册

删除的内容如下:

<group name="default">

        <users>

          <X-PRE-PROCESS cmd="include" data="default/*.xml"/>

        </users>

 </group>

 

 

3  修改拨号计划

修改freeswitch/conf/dialplan/default.xml

修改如下内容,好让所有的拨号通过以下的条件

 <extension name="Local_Extension">

       <!--<condition field="destination_number" expression="^(10[01][0-9])$">-->

       <condition field="destination_number" expression="^(.*)$">

 

完成以上步骤,就基本完成了用户整合的全部内容,但是要注意一点,第一步配置unixodbc之后,要重新编译下freeswitch的源码,即在/usr/local/src/freeswitch下执行 configure&&make install,然后重启freeswitch。

还有就是每次修改xml后都需要重新在freeswitch控制台或者fs_cli下执行reloadxml,使得修改生效,修改lua脚本,则不需要如上操作。

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
京东三级列表页持续架构优化—Golang+Lua(OpenResty)最佳实践发布时间:2022-07-22
下一篇:
Lua 调试(Debug)发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap