Skip to main content

Third Party Libraries

About

We will explain here how you can use luarocks to install third party libraries and use them in your Lua application

Luarocks

Luarocks is a package/library manager for lua. It can install libraries into a systemwide directory and then you can Freeswitch's LUA to use them. You may have to install a systemwide lua just to keep the luarocks installer happy...

For example if you want the LuaXML library in Ubuntu 12.04:

sudo apt-get install lua5.2 luarocks
luarocks install luaxml

Then edit /usr/local/freeswitch/conf/autoload_configs/lua.conf.xml, de-comment lines to leave the following:

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

You may also add it manually in a script:

package.path = package.path .. ";" .. [[/usr/share/lua/5.2/?.lua]]

A lua script in your dialplan can now use the XML functions. A trivial example:

require("LuaXml")
local xobj = xml.eval('<Cmd Message="Hello"/>')
freeswitch.consoleLog("INFO","The message in the XML is "..xobj["Message"].."\n")

Where to put third party Lua scripts/modules

Where do I need to stick my Lua classes for FreeSWITCH to see them. I am running a Lua script from within the /scripts folder, but it includes (requires) another Lua file. FreeSWITCH.

The short answer is /usr/local/share/lua/5.1/

Alternatively, you can install a system Lua (think apt-get or yum), and the Lua embedded in freeswitch will look in the add-ons directory.

To do this in the mod_lua.conf file (currently not possible), the following development would be needed.

  • Install them to a nonstandard.
  • Push a nonstandard place into the path of where it looks.

NOTE: Assuming you have <param name="module-directory" value="$${base\_dir}/scripts/?.so"/> in lua.conf.xml, in the scripts, require statements in the form of:

require "luasql.mysql"

This will look for the shared object ${base\_dir}/scripts/luasql/mysql.so

NOTE: The native MySQL driver for Lua has a very bad memory leak. Do not use it.