mod_h323
About
mod_h323 is an endpoint module based on the H.323plus telephony library.
Status
In development
Installation
Method 1:
Use the script provided with FreeSWITCH by running the buildopal.sh script in the build directory.
Method 2:
Ptlib and H323plus need to be installed before you can build mod_h323. You must be sure to install the exact working combination of ptlib / h323plus in order to make this work smoothly.
Working combinations:
ptlib-2.8.2 + h323plus-trunk
ptlib-2.8.2 + h323plus-20100525
ptlib-2.8.1 + h323plus-20100525
You'll need development tools. If in Debian, run:
apt-get install build-essential bison
ptlib (trunk from trunk) (NOT WORKING AS OF 10/05/2010. USE VERSION 2.8.2 THAT FOLLOWS INSTEAD) :
In your home, create a directory e.g. h323
mkdir -p ~/h323
cd ~/h323
svn co http://svn.code.sf.net/p/opalvoip/code/ptlib/trunk ptlib
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib
cd ptlib
./configure
make
sudo make install
cd ..
ptlib (version 2.8.2): (Works on Debian 6 but not 7 AS OF 11/12/2013. For Debian 7, use trunk above)
In your home, create a directory e.g. h323
mkdir -p ~/h323
cd ~/h323
svn co http://svn.code.sf.net/p/opalvoip/code/ptlib/tags/v2_8_2/ ptlib
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib
cd ptlib
./configure
make
sudo make install
If you receive error:
configure: error: PTLib needs the GNU Project fast lexical analyzer generator flex
then:
yum install flex
install h323plus (trunk):
cd ~/h323
cvs -d:pserver:anonymous@h323plus.cvs.sourceforge.net:/cvsroot/h323plus checkout h323plus
export PTLIBDIR=~/h323/ptlib
cd h323plus
./configure
make
sudo make install
or install 20100525 version if you like:
cd ~/h323
wget http://waix.dl.sourceforge.net/project/openh323gk/Sources/2.3.2/h323plus-20100525.tar.gz
tar xzvf h323plus-20100525.tar.gz
cd h323plus-20100525
export PTLIBDIR=~/h323/ptlib
./configure
make
sudo make install
March 2012: It turned out that a good way to make h323plus running is ptlib-2.8.2 with h323plus 1.22.0 (tested under Ubuntu 10.04 64bit and Debian 6)
cd ~/h323
wget http://www.h323plus.org/source/download/h323plus-1.22.0.tar.gz
tar xzvf h323plus-1.22.0
cd h323plus-1.22.0
export PTLIBDIR=~/h323/ptlib
./configure
make
sudo make install
If you get an error: ERROR: you must first run 'aclocal' in ~/h323plus-20100525/plugins than just do it:
cd ~/h323plus-20100525/plugins
$ aclocal
cd ..
build mod_h323:
Assuming you have FreeSWITCH source in your home:
cd ~/freeswitch-trunk
make mod_h323-clean
make mod_h323
sudo make mod_h323-install
If you get an error like this: '/usr/include/openh323/h323caps.h:289:31: error: ../include/codecs.h: No such file or directory' most probably you don't have codecs.h in the correct path or you don't have it at all.
Simply:
cp ~/h323/h323plus-20100525/include/codecs.h /usr/include/
And make the mod_h323 again.
If you get an error like this:
'/usr/src/freeswitch/src/mod/endpoints/mod_h323/mod_h323.h:43:18: error: h323.h: No such file or directory'
then try doing this:
ln -s /usr/local/include/openh323 /usr/include/openh323
If you got errors like "error: 'BOOL' has not been declared" or something like that. Just do following and then do make mod_h323 again.
chmod +w /usr/include/openh323/*
sed -i "s/BOOL/PBoolean/g" /usr/include/openh323/*
chmod -w /usr/include/openh323/*
Configuration
The configuration is almost the same as for mod_opal so no big surprises here.
h323.conf.xml:
<configuration name="h323.conf" description="H323 Endpoints">
<settings>
<param name="trace-level" value="6"/>
<param name="context" value="default"/>
<param name="dialplan" value="XML"/>
<param name="codec-prefs" value="PCMA,PCMU,GSM,G729"/>
<param name="use-rtp-timer" value="true"/> <!-- enable RTP timer - should always be enabled -->
<param name="rtp-timer-name" value="soft"/> <!-- Timer name, soft is default -->
<!-- <param name="ptime-override-value" value="20"/> --> <!-- Override negotiated ptime value with this value -->
<param name="gk-address" value=""/> <!-- empty to disable, "*" to search LAN -->
<param name="gk-identifer" value=""/> <!-- optional name of gk (BUG: this parameter is currently mandatory)-->
<param name="gk-interface" value=""/> <!-- mandatory listener interface name -->
<param name="gk-retry" value="30"/> <!-- optional GK register retry timer -->
<param name="gk-prefix" value="777"/> <!-- optional register with this prefix -->
<param name="gk-prefix" value="779"/> <!-- optional register with this prefix -->
<param name="faststart" value="true"/> <!-- optional -->
<param name="h245tunneling" value="true"/> <!-- optional -->
<param name="h245insetup" value="true"/> <!-- optional -->
<param name="dtmfinband" value="false"/> <!-- optional -->
<param name="jitter-size" value="60"/> <!-- optional -->
<param name="progress-indication" value="8"/> <!-- optional - PI value in progress message-->
<param name="alerting-indication" value="8"/> <!-- optional - PI value in alerting message-->
<param name="endpoint-name" value="fs"/>
<param name="fax-old-asn" value="true"/>
</settings>
<listeners>
<listener name="default">
<param name="h323-ip" value="$${local_ip_v4}"/>
<param name="h323-port" value="1720"/>
</listener>
</listeners>
</configuration>
settings
- trace-level: it is the level of logging you will get on console (0-4, default 0)
- context: context the incoming call through mod_h323 will fall in (default set to public)
- dialplan: the type of dialplan used (default XML)
- codec-prefs: comma separated list of supported codecs (Note: the order of the codecs won't be used. It will only enable or disable them. Codecs are always sent in the same order: PCMA, PCMU, GSM, G723, G729b, G729, G729a, , G729ab, G723.1. Check in mod_h323.cpp for a table called h323_formats).
listeners (you can have more than one listener)
-
name: just a name
-
h323-ip: an ip address for mod_h323 to bind
-
h323-port: a port for mod_h323 to bind
Add this into vars.xml files to allow incoming calls to extensions (this needs to be tested!!!):
<X-PRE-PROCESS cmd="set" data="domain_name=$${local_ip_v4}"/>
Usage
create a file in $FS_DIR/conf/dialplan/default/ (e.g. 10_outgoing_via_h323.xml) and add the something like this:
<include> <extension name="OUTGOING_VIA_H323"> <condition field="destination_number" expression="^([2-8]\d{6,7}|0[1-9]\d{7,8}|00[1-9]\d{8,16})$"> <action application="set" data="effective_caller_id_number=385${ani}"/> <action application="set" data="PEER_IP=10.1.1.1"/> <action application="set" data="call_timeout=30"/> <action application="set" data="hangup_after_bridge=true"/> <action application="bridge" data="h323/$1@${PEER_IP}"/> </condition> </extension> </include>
In your $FS_DIR/conf/dialplan/public.xml make sure you have:
<extension name="public_extensions"> <condition field="destination_number" expression="^(10[01][0-9])$"> <action application="transfer" data="$1 XML default"/> </condition> </extension>
All incoming calls via mod_h323 will be transferred to context default.
Applications
needs to be updated!
API commands
needs to be updated!
Events
needs to be updated!
Channel Variables
needs to be updated!
Known Bugs
faststart and codecs v CallProceeding due to h323plus, grep "Very Frustrating - S.H." in h323plus source and uncomment commented lines. (should be fixed in H323Plus as of 2011-05-17)
missing features.
Troubleshooting
freeswitch@nemesis> load mod_h323
2010-10-02 20:16:37.660670 [INFO] mod_enum.c:808 ENUM Reloaded
2010-10-02 20:16:37.660670 [INFO] switch_time.c:950 Timezone reloaded 530 definitions
2010-10-02 20:16:37.717932 [CRIT] switch_loadable_module.c:928 Error Loading module /usr/local/freeswitch/mod/mod_h323.so
**libpt.so.2.8.2: cannot open shared object file: No such file or directory**
+OK Reloading XML
-ERR [module load file routine returned an error]
This is a common problem when libpt.so is not in path. Simply:
ln -sf /usr/local/lib/libpt.so.2.8.2 /usr/local/freeswitch/lib/libpt.so.2.8.2
freeswitch@fs01> load mod_h323
2012-03-20 12:45:25.826535 [CRIT] switch_loadable_module.c:1290 Error Loading module /usr/local/freeswitch/mod/mod_h323.so
**libh323_linux_x86_64_.so.1.22.0: cannot open shared object file: No such file or directory**
+OK Reloading XML
-ERR [module load file routine returned an error]
This is a common problem when libh323_linux_x86_64_.so.1.22.0 is not in path. Simply:
ln -sf /usr/local/lib/libh323_linux_x86_64_.so.1.22.0 /usr/local/freeswitch/lib/libh323_linux_x86_64_.so.1.22.0