freeswitch用户用mysql数据库管理

本文介绍了在CentOS 6.4上,如何使用MySQL数据库与Freeswitch进行集成,通过UnixODBC安装和配置连接数据库,然后修改Freeswitch的lua脚本来实现用户注册的lua脚本验证。
开发环境:centos 6.4 64位, freeswitch 1.4, 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的部分,将驱动包指向正确,这要根据你本身的包安装路径配置


# 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
如果出现
[code="java"]
# isql -v freeswitch
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
[/code]
则代表你的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
脚本内容如下:

local req_domain = params:getHeader("domain")
local req_key = params:getHeader("key")
local req_user = params:getHeader("user")
local dbh = freeswitch.Dbh("freeswitch","root","root123")
if dbh:connected() == false then
freeswitch.consoleLog("notice", "mysql.lua cannot connect to database" .. dsn .. "\n")
return
end
if req_user==nil then
req_user="0000"
end
XML_STRING =
[[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type=" freeswitch/xml">
<section name="directory">
<domain name="]] .. req_domain .. [[">
<user id="]] .. req_user .. [[">
<params>
<param name="password" value=""/>
<param name="dial-string" value="{sip_invite_domain=${dialed_domain},presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
</params>
<variables>
<variable name="user_context" value="default"/>
</variables>
</user>
</domain>
</section>
</document>]]

local pass="43211234567890"
if req_domain==nil then
req_domain="192.168.20.133"
end
if req_user==nil then
req_user="1000"
end

pass="4321_"..req_user;

local my_query = string.format("select password from userinfo where username='%s' limit 1", req_user)
assert (dbh:query(my_query, function(u) -- there will be only 0 or 1 iteration (limit 1)
XML_STRING =
[[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type=" freeswitch/xml">
<section name="directory">
<domain name="]] .. req_domain .. [[">
<user id="]] .. req_user .. [[">
<params>
<param name="password" value="]] .. u.password .. [["/>
<param name="dial-string" value="{sip_invite_domain=${dialed_domain},presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
</params>
<variables>
<variable name="user_context" value="default"/>
</variables>
</user>
</domain>
</section>
</document>]]
end))
--freeswitch.consoleLog("warning", "Debug from user.lua, generated XML:\n" .. XML_STRING .. "\n")

在 Debian 12 系统中使用 MySQL 替代 FreeSWITCH 原有数据库可按以下步骤操作: 1. **确认数据库连接**:使用 MySQL 替代原有数据库,可让多个 FreeSWITCH 使用同一 MySQL 数据库。使用 `isql freeswitch -v` 命令,若显示如下内容则表示正常连接: ```plaintext +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ ``` 2. **下载并编译安装 FreeSWITCH 源码**:具体编译安装可参照之前的 FreeSWITCH 编译安装方法,不过在 `./configure` 步骤时需进行特定配置(引用未详细说明,需进一步查找相关资料) [^1]。 ### 相关脚本示例(可选) 若涉及紧急配置同步,可创建 Python 脚本 `/opt/scripts/sync_emergency_config.py`,用于同步紧急号码配置和主叫白名单: ```python import redis import MySQLdb import schedule import time def sync_config(): # 连接 MySQL db = MySQLdb.connect("localhost","user","pass","db") cursor = db.cursor() # 同步紧急号码配置 cursor.execute("SELECT prefix, is_blocked FROM emergency_config") r = redis.Redis(host='localhost', port=6379, db=10) r.delete("emergency:config") for row in cursor.fetchall(): r.hset("emergency:config", row[0], row[1]) # 同步主叫白名单 cursor.execute("SELECT caller_id FROM emergency_whitelist") r.delete("emergency:whitelist") for row in cursor.fetchall(): r.sadd("emergency:whitelist", row[0]) db.close() # 每5分钟同步一次 schedule.every(5).minutes.do(sync_config) while True: schedule.run_pending() time.sleep(1) ``` 此脚本可使用 Systemd 进行管理,以保证同步服务稳定运行 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值