Mergeing in Paul Cadach's chan_h323 changes *holds breath*
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@43281 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
e61c86f66a
commit
42a59d0531
2
Makefile
2
Makefile
|
@ -641,7 +641,7 @@ uninstall-all: _uninstall
|
||||||
rm -rf $(DESTDIR)$(ASTLOGDIR)
|
rm -rf $(DESTDIR)$(ASTLOGDIR)
|
||||||
|
|
||||||
menuselect: menuselect/menuselect menuselect-tree
|
menuselect: menuselect/menuselect menuselect-tree
|
||||||
-@menuselect/menuselect $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS) menuselect.makeopts && echo "menuselect changes saved!" || echo "menuselect changes NOT saved!"
|
-@menuselect/menuselect $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS) menuselect.makeopts && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
|
||||||
|
|
||||||
menuselect/menuselect: makeopts menuselect/menuselect.c menuselect/menuselect_curses.c menuselect/menuselect_stub.c menuselect/menuselect.h menuselect/linkedlists.h makeopts
|
menuselect/menuselect: makeopts menuselect/menuselect.c menuselect/menuselect_curses.c menuselect/menuselect_stub.c menuselect/menuselect.h menuselect/linkedlists.h makeopts
|
||||||
@unset CC LD AR RANLIB && $(MAKE) -C menuselect CONFIGURE_SILENT="--silent"
|
@unset CC LD AR RANLIB && $(MAKE) -C menuselect CONFIGURE_SILENT="--silent"
|
||||||
|
|
314
acinclude.m4
314
acinclude.m4
|
@ -116,6 +116,320 @@ fi
|
||||||
AC_SUBST([GNU_MAKE])
|
AC_SUBST([GNU_MAKE])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN(
|
||||||
|
[AST_CHECK_PWLIB], [
|
||||||
|
PWLIB_INCDIR=
|
||||||
|
PWLIB_LIBDIR=
|
||||||
|
if test "${PWLIBDIR:-unset}" != "unset" ; then
|
||||||
|
AC_CHECK_FILE(${PWLIBDIR}/version.h, HAS_PWLIB=1, )
|
||||||
|
fi
|
||||||
|
if test "${HAS_PWLIB:-unset}" = "unset" ; then
|
||||||
|
if test "${OPENH323DIR:-unset}" != "unset"; then
|
||||||
|
AC_CHECK_FILE(${OPENH323DIR}/../pwlib/version.h, HAS_PWLIB=1, )
|
||||||
|
fi
|
||||||
|
if test "${HAS_PWLIB:-unset}" != "unset" ; then
|
||||||
|
PWLIBDIR="${OPENH323DIR}/../pwlib"
|
||||||
|
else
|
||||||
|
AC_CHECK_FILE(${HOME}/pwlib/include/ptlib.h, HAS_PWLIB=1, )
|
||||||
|
if test "${HAS_PWLIB:-unset}" != "unset" ; then
|
||||||
|
PWLIBDIR="${HOME}/pwlib"
|
||||||
|
else
|
||||||
|
AC_CHECK_FILE(/usr/local/include/ptlib.h, HAS_PWLIB=1, )
|
||||||
|
if test "${HAS_PWLIB:-unset}" != "unset" ; then
|
||||||
|
AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/local/bin)
|
||||||
|
if test "${PTLIB_CONFIG:-unset}" = "unset" ; then
|
||||||
|
AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/local/share/pwlib/make)
|
||||||
|
fi
|
||||||
|
PWLIB_INCDIR="/usr/local/include"
|
||||||
|
PWLIB_LIBDIR="/usr/local/lib"
|
||||||
|
else
|
||||||
|
AC_CHECK_FILE(/usr/include/ptlib.h, HAS_PWLIB=1, )
|
||||||
|
if test "${HAS_PWLIB:-unset}" != "unset" ; then
|
||||||
|
AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/share/pwlib/make)
|
||||||
|
PWLIB_INCDIR="/usr/include"
|
||||||
|
PWLIB_LIBDIR="/usr/lib"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#if test "${HAS_PWLIB:-unset}" = "unset" ; then
|
||||||
|
# echo "Cannot find pwlib - please install or set PWLIBDIR and try again"
|
||||||
|
# exit
|
||||||
|
#fi
|
||||||
|
|
||||||
|
if test "${HAS_PWLIB:-unset}" != "unset" ; then
|
||||||
|
if test "${PWLIBDIR:-unset}" = "unset" ; then
|
||||||
|
if test "${PTLIB_CONFIG:-unset}" != "unset" ; then
|
||||||
|
PWLIBDIR=`$PTLIB_CONFIG --prefix`
|
||||||
|
else
|
||||||
|
echo "Cannot find ptlib-config - please install and try again"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$PWLIBDIR" = "x/usr" -o "x$PWLIBDIR" = "x/usr/"; then
|
||||||
|
PWLIBDIR="/usr/share/pwlib"
|
||||||
|
PWLIB_INCDIR="/usr/include"
|
||||||
|
PWLIB_LIBDIR="/usr/lib"
|
||||||
|
fi
|
||||||
|
if test "x$PWLIBDIR" = "x/usr/local" -o "x$PWLIBDIR" = "x/usr/"; then
|
||||||
|
PWLIBDIR="/usr/local/share/pwlib"
|
||||||
|
PWLIB_INCDIR="/usr/local/include"
|
||||||
|
PWLIB_LIBDIR="/usr/local/lib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "${PWLIB_INCDIR:-unset}" = "unset"; then
|
||||||
|
PWLIB_INCDIR="${PWLIBDIR}/include"
|
||||||
|
fi
|
||||||
|
if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
|
||||||
|
PWLIB_LIBDIR="${PWLIBDIR}/lib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST([PWLIBDIR])
|
||||||
|
AC_SUBST([PWLIB_INCDIR])
|
||||||
|
AC_SUBST([PWLIB_LIBDIR])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN(
|
||||||
|
[AST_CHECK_OPENH323_PLATFORM], [
|
||||||
|
PWLIB_OSTYPE=
|
||||||
|
case "$host_os" in
|
||||||
|
linux*) PWLIB_OSTYPE=linux ;
|
||||||
|
;;
|
||||||
|
freebsd* ) PWLIB_OSTYPE=FreeBSD ;
|
||||||
|
;;
|
||||||
|
openbsd* ) PWLIB_OSTYPE=OpenBSD ;
|
||||||
|
ENDLDLIBS="-lossaudio" ;
|
||||||
|
;;
|
||||||
|
netbsd* ) PWLIB_OSTYPE=NetBSD ;
|
||||||
|
ENDLDLIBS="-lossaudio" ;
|
||||||
|
;;
|
||||||
|
solaris* | sunos* ) PWLIB_OSTYPE=solaris ;
|
||||||
|
;;
|
||||||
|
darwin* ) PWLIB_OSTYPE=Darwin ;
|
||||||
|
;;
|
||||||
|
beos*) PWLIB_OSTYPE=beos ;
|
||||||
|
STDCCFLAGS="$STDCCFLAGS -D__BEOS__"
|
||||||
|
;;
|
||||||
|
cygwin*) PWLIB_OSTYPE=cygwin ;
|
||||||
|
;;
|
||||||
|
mingw*) PWLIB_OSTYPE=mingw ;
|
||||||
|
STDCCFLAGS="$STDCCFLAGS -mms-bitfields" ;
|
||||||
|
ENDLDLIBS="-lwinmm -lwsock32 -lsnmpapi -lmpr -lcomdlg32 -lgdi32 -lavicap32" ;
|
||||||
|
;;
|
||||||
|
* ) PWLIB_OSTYPE="$host_os" ;
|
||||||
|
AC_MSG_WARN("OS $PWLIB_OSTYPE not recognized - proceed with caution!") ;
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
PWLIB_MACHTYPE=
|
||||||
|
case "$host_cpu" in
|
||||||
|
x86 | i686 | i586 | i486 | i386 ) PWLIB_MACHTYPE=x86
|
||||||
|
;;
|
||||||
|
|
||||||
|
x86_64) PWLIB_MACHTYPE=x86_64 ;
|
||||||
|
P_64BIT=1 ;
|
||||||
|
LIB64=1 ;
|
||||||
|
;;
|
||||||
|
|
||||||
|
alpha | alphaev56 | alphaev6 | alphaev67 | alphaev7) PWLIB_MACHTYPE=alpha ;
|
||||||
|
P_64BIT=1 ;
|
||||||
|
;;
|
||||||
|
|
||||||
|
sparc ) PWLIB_MACHTYPE=sparc ;
|
||||||
|
;;
|
||||||
|
|
||||||
|
powerpc ) PWLIB_MACHTYPE=ppc ;
|
||||||
|
;;
|
||||||
|
|
||||||
|
ppc ) PWLIB_MACHTYPE=ppc ;
|
||||||
|
;;
|
||||||
|
|
||||||
|
powerpc64 ) PWLIB_MACHTYPE=ppc64 ;
|
||||||
|
P_64BIT=1 ;
|
||||||
|
LIB64=1 ;
|
||||||
|
;;
|
||||||
|
|
||||||
|
ppc64 ) PWLIB_MACHTYPE=ppc64 ;
|
||||||
|
P_64BIT=1 ;
|
||||||
|
LIB64=1 ;
|
||||||
|
;;
|
||||||
|
|
||||||
|
ia64) PWLIB_MACHTYPE=ia64 ;
|
||||||
|
P_64BIT=1 ;
|
||||||
|
;;
|
||||||
|
|
||||||
|
s390x) PWLIB_MACHTYPE=s390x ;
|
||||||
|
P_64BIT=1 ;
|
||||||
|
LIB64=1 ;
|
||||||
|
;;
|
||||||
|
|
||||||
|
s390) PWLIB_MACHTYPE=s390 ;
|
||||||
|
;;
|
||||||
|
|
||||||
|
* ) PWLIB_MACHTYPE="$host_cpu";
|
||||||
|
AC_MSG_WARN("CPU $PWLIB_MACHTYPE not recognized - proceed with caution!") ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
PWLIB_PLATFORM="${PWLIB_OSTYPE}_${PWLIB_MACHTYPE}"
|
||||||
|
|
||||||
|
AC_SUBST([PWLIB_PLATFORM])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN(
|
||||||
|
[AST_CHECK_OPENH323], [
|
||||||
|
OPENH323_INCDIR=
|
||||||
|
OPENH323_LIBDIR=
|
||||||
|
if test "${OPENH323DIR:-unset}" != "unset" ; then
|
||||||
|
AC_CHECK_FILE(${OPENH323DIR}/version.h, HAS_OPENH323=1, )
|
||||||
|
fi
|
||||||
|
if test "${HAS_OPENH323:-unset}" = "unset" ; then
|
||||||
|
AC_CHECK_FILE(${PWLIBDIR}/../openh323/version.h, OPENH323DIR="${PWLIBDIR}/../openh323"; HAS_OPENH323=1, )
|
||||||
|
if test "${HAS_OPENH323:-unset}" != "unset" ; then
|
||||||
|
OPENH323DIR="${PWLIBDIR}/../openh323"
|
||||||
|
AC_CHECK_FILE(${OPENH323DIR}/include/h323.h, , OPENH323_INCDIR="${PWLIB_INCDIR}/openh323"; OPENH323_LIBDIR="${PWLIB_LIBDIR}")
|
||||||
|
else
|
||||||
|
AC_CHECK_FILE(${HOME}/openh323/include/h323.h, HAS_OPENH323=1, )
|
||||||
|
if test "${HAS_OPENH323:-unset}" != "unset" ; then
|
||||||
|
OPENH323DIR="${HOME}/openh323"
|
||||||
|
else
|
||||||
|
AC_CHECK_FILE(/usr/local/include/openh323/h323.h, HAS_OPENH323=1, )
|
||||||
|
if test "${HAS_OPENH323:-unset}" != "unset" ; then
|
||||||
|
OPENH323DIR="/usr/local/share/openh323"
|
||||||
|
OPENH323_INCDIR="/usr/local/include/openh323"
|
||||||
|
OPENH323_LIBDIR="/usr/local/lib"
|
||||||
|
else
|
||||||
|
AC_CHECK_FILE(/usr/include/openh323/h323.h, HAS_OPENH323=1, )
|
||||||
|
if test "${HAS_OPENH323:-unset}" != "unset" ; then
|
||||||
|
OPENH323DIR="/usr/share/openh323"
|
||||||
|
OPENH323_INCDIR="/usr/include/openh323"
|
||||||
|
OPENH323_LIBDIR="/usr/lib"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "${HAS_OPENH323:-unset}" != "unset" ; then
|
||||||
|
if test "${OPENH323_INCDIR:-unset}" = "unset"; then
|
||||||
|
OPENH323_INCDIR="${OPENH323DIR}/include"
|
||||||
|
fi
|
||||||
|
if test "${OPENH323_LIBDIR:-unset}" = "unset"; then
|
||||||
|
OPENH323_LIBDIR="${OPENH323DIR}/lib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST([OPENH323DIR])
|
||||||
|
AC_SUBST([OPENH323_INCDIR])
|
||||||
|
AC_SUBST([OPENH323_LIBDIR])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN(
|
||||||
|
[AST_CHECK_PWLIB_VERSION], [
|
||||||
|
if test "${HAS_$2:-unset}" != "unset"; then
|
||||||
|
$2_VERSION=`grep "$2_VERSION" ${$2_INCDIR}/$3 | cut -f2 -d ' ' | sed -e 's/"//g'`
|
||||||
|
$2_MAJOR_VERSION=`echo ${$2_VERSION} | cut -f1 -d.`
|
||||||
|
$2_MINOR_VERSION=`echo ${$2_VERSION} | cut -f2 -d.`
|
||||||
|
$2_BUILD_NUMBER=`echo ${$2_VERSION} | cut -f3 -d.`
|
||||||
|
let $2_VER=${$2_MAJOR_VERSION}*10000+${$2_MINOR_VERSION}*100+${$2_BUILD_NUMBER}
|
||||||
|
let $2_REQ=$4*10000+$5*100+$6
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(if $1 version ${$2_VERSION} is compatible with chan_h323)
|
||||||
|
if test ${$2_VER} -lt ${$2_REQ}; then
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
unset HAS_$2
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN(
|
||||||
|
[AST_CHECK_PWLIB_BUILD], [
|
||||||
|
if test "${HAS_$2:-unset}" != "unset"; then
|
||||||
|
AC_MSG_CHECKING($1 installation validity)
|
||||||
|
|
||||||
|
saved_cppflags="${CPPFLAGS}"
|
||||||
|
saved_libs="${LIBS}"
|
||||||
|
LIBS="${LIBS} -L${$2_LIBDIR} -l${PLATFORM_$2} $7"
|
||||||
|
CPPFLAGS="${CPPFLAGS} -I${$2_INCDIR} $6"
|
||||||
|
|
||||||
|
AC_LANG_PUSH([C++])
|
||||||
|
|
||||||
|
AC_LINK_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM([$4],[$5])],
|
||||||
|
[ AC_MSG_RESULT(yes)
|
||||||
|
ac_cv_lib_$2="yes"
|
||||||
|
],
|
||||||
|
[ AC_MSG_RESULT(no)
|
||||||
|
ac_cv_lib_$2="no"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_LANG_POP([C++])
|
||||||
|
|
||||||
|
LIBS="${saved_libs}"
|
||||||
|
CPPFLAGS="${saved_cppflags}"
|
||||||
|
|
||||||
|
if test "${ac_cv_lib_$2}" = "yes"; then
|
||||||
|
if test "${$2_LIBDIR}" != "" -a "${$2_LIBDIR}" != "/usr/lib"; then
|
||||||
|
$2_LIB="-L${$2_LIBDIR} -l${PLATFORM_$2}"
|
||||||
|
else
|
||||||
|
$2_LIB="-l${PLATFORM_$2}"
|
||||||
|
fi
|
||||||
|
if test "${$2_INCDIR}" != "" -a "${$2_INCDIR}" != "/usr/include"; then
|
||||||
|
$2_INCLUDE="-I${$2_INCDIR}"
|
||||||
|
fi
|
||||||
|
PBX_$2=1
|
||||||
|
AC_DEFINE([HAVE_$2], 1, [$3])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN(
|
||||||
|
[AST_CHECK_OPENH323_BUILD], [
|
||||||
|
if test "${HAS_OPENH323:-unset}" != "unset"; then
|
||||||
|
AC_MSG_CHECKING(OpenH323 build option)
|
||||||
|
OPENH323_SUFFIX=
|
||||||
|
files=`ls -l ${OPENH323_LIBDIR}/libh323_${PWLIB_PLATFORM}_*.so*`
|
||||||
|
libfile=
|
||||||
|
if test -n "$files"; then
|
||||||
|
for f in $files; do
|
||||||
|
if test -f $f -a ! -L $f; then
|
||||||
|
libfile=`basename $f`
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if test "${libfile:-unset}" != "unset"; then
|
||||||
|
OPENH323_SUFFIX=`eval "echo ${libfile} | sed -e 's/libh323_${PWLIB_PLATFORM}_\(@<:@^.@:>@*\)\..*/\1/'"`
|
||||||
|
fi
|
||||||
|
case "${OPENH323_SUFFIX}" in
|
||||||
|
n)
|
||||||
|
OPENH323_BUILD="notrace";;
|
||||||
|
r)
|
||||||
|
OPENH323_BUILD="opt";;
|
||||||
|
d)
|
||||||
|
OPENH323_BUILD="debug";;
|
||||||
|
*)
|
||||||
|
OPENH323_BUILD="notrace";;
|
||||||
|
esac
|
||||||
|
AC_MSG_RESULT(${OPENH323_BUILD})
|
||||||
|
|
||||||
|
AC_SUBST([OPENH323_SUFFIX])
|
||||||
|
AC_SUBST([OPENH323_BUILD])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
# AST_FUNC_FORK
|
# AST_FUNC_FORK
|
||||||
# -------------
|
# -------------
|
||||||
AN_FUNCTION([fork], [AST_FUNC_FORK])
|
AN_FUNCTION([fork], [AST_FUNC_FORK])
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
</member>
|
</member>
|
||||||
<member name="DETECT_DEADLOCKS" displayname="Detect Deadlocks">
|
<member name="DETECT_DEADLOCKS" displayname="Detect Deadlocks">
|
||||||
</member>
|
</member>
|
||||||
|
<member name="DO_CRASH" displayname="Crash on fatal errors">
|
||||||
|
</member>
|
||||||
<member name="DONT_OPTIMIZE" displayname="Disable Optimizations by the Compiler">
|
<member name="DONT_OPTIMIZE" displayname="Disable Optimizations by the Compiler">
|
||||||
</member>
|
</member>
|
||||||
<member name="DUMP_SCHEDULER" displayname="Dump Scheduler Contents for Debugging">
|
<member name="DUMP_SCHEDULER" displayname="Dump Scheduler Contents for Debugging">
|
||||||
|
|
|
@ -4,6 +4,7 @@ FREETDS=@PBX_FREETDS@
|
||||||
GSM=@PBX_GSM@
|
GSM=@PBX_GSM@
|
||||||
GTK=@PBX_GTK@
|
GTK=@PBX_GTK@
|
||||||
H323=@PBX_H323@
|
H323=@PBX_H323@
|
||||||
|
OPENH323=@PBX_OPENH323@
|
||||||
IKSEMEL=@PBX_IKSEMEL@
|
IKSEMEL=@PBX_IKSEMEL@
|
||||||
IMAP_TK=@PBX_IMAP_TK@
|
IMAP_TK=@PBX_IMAP_TK@
|
||||||
IXJUSER=@PBX_IXJUSER@
|
IXJUSER=@PBX_IXJUSER@
|
||||||
|
|
|
@ -63,7 +63,20 @@ clean::
|
||||||
rm -f busy.h ringtone.h gentone
|
rm -f busy.h ringtone.h gentone
|
||||||
$(MAKE) -C misdn clean
|
$(MAKE) -C misdn clean
|
||||||
|
|
||||||
-include $(PWD)/Makefile.ast
|
ifneq ($(wildcard h323/Makefile.ast),)
|
||||||
|
include h323/Makefile.ast
|
||||||
|
H323LDFLAGS += -Wl,--version-script=h323/noexport.map
|
||||||
|
else
|
||||||
|
h323/libchanh323.a h323/Makefile.ast:
|
||||||
|
$(CMD_PREFIX) $(MAKE) -C h323
|
||||||
|
$(CMD_PREFIX) rm -f ../main/asterisk
|
||||||
|
$(CMD_PREFIX) echo "***************************************************************"
|
||||||
|
$(CMD_PREFIX) echo
|
||||||
|
$(CMD_PREFIX) echo "********** Re-run 'make' to pick up H.323 parameters **********"
|
||||||
|
$(CMD_PREFIX) echo
|
||||||
|
$(CMD_PREFIX) echo "***************************************************************"
|
||||||
|
$(CMD_PREFIX) exit 1
|
||||||
|
endif
|
||||||
|
|
||||||
$(eval $(call ast_make_final_host,gentone,gentone.c))
|
$(eval $(call ast_make_final_host,gentone,gentone.c))
|
||||||
gentone: LIBS+=-lm
|
gentone: LIBS+=-lm
|
||||||
|
@ -81,11 +94,13 @@ $(chan_iax2): iax2-parser.o iax2-provision.o
|
||||||
chan_alsa.o: busy.h ringtone.h
|
chan_alsa.o: busy.h ringtone.h
|
||||||
|
|
||||||
ifeq ($(OSARCH),linux-gnu)
|
ifeq ($(OSARCH),linux-gnu)
|
||||||
chan_h323.so: chan_h323.o h323_module_interface.so h323/libchanh323.a h323/Makefile.ast
|
chan_h323.so: chan_h323.o h323/libchanh323.a h323/Makefile.ast
|
||||||
$(CC) $(SOLINK) $(H323LDFLAGS) -o $@ $^ h323/libchanh323.a $(H323LDLIBS) -lstdc++
|
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
||||||
|
$(CMD_PREFIX) $(CXX) $(SOLINK) $(H323LDFLAGS) -o $@ $< h323/libchanh323.a $(H323LDLIBS)
|
||||||
else
|
else
|
||||||
chan_h323.so: chan_h323.o h323_module_interface.so h323/libchanh323.a
|
chan_h323.so: chan_h323.o h323/libchanh323.a
|
||||||
$(CC) $(SOLINK) -o $@ $^ h323/libchanh323.a $(CHANH323LIB) -L$(PWLIBDIR)/lib $(PTLIB) -L$(OPENH323DIR)/lib $(H323LIB) -L/usr/lib -lcrypto -lssl -lexpat
|
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
||||||
|
$(CMD_PREFIX) $(CXX) $(SOLINK) -o $@ $< h323/libchanh323.a $(CHANH323LIB) -L$(PWLIBDIR)/lib $(PTLIB) -L$(OPENH323DIR)/lib $(H323LIB) -L/usr/lib -lcrypto -lssl -lexpat
|
||||||
endif
|
endif
|
||||||
|
|
||||||
chan_misdn.o: CFLAGS+=-Imisdn -DCHAN_MISDN_VERSION=\"0.3.0\"
|
chan_misdn.o: CFLAGS+=-Imisdn -DCHAN_MISDN_VERSION=\"0.3.0\"
|
||||||
|
|
2224
channels/chan_h323.c
2224
channels/chan_h323.c
File diff suppressed because it is too large
Load Diff
|
@ -4,34 +4,50 @@
|
||||||
# Make file for OpenH323 support layer
|
# Make file for OpenH323 support layer
|
||||||
#
|
#
|
||||||
|
|
||||||
.PHONY: Makefile.ast
|
.PHONY: Makefile.ast clean
|
||||||
|
|
||||||
|
default:: opt
|
||||||
|
|
||||||
# Verify those options with main Makefile
|
# Verify those options with main Makefile
|
||||||
STDCCFLAGS += -DNDEBUG
|
STDCCFLAGS = -DNDEBUG
|
||||||
STDCCFLAGS += $(shell grep ^DEBUG_THREADS ../../Makefile | sed -e "s/^DEBUG_THREADS[ ]*=//" -e "s/\([^\#]*\)\#.*/\1/")
|
STDCCFLAGS += -I../../include -include ../../include/asterisk/autoconfig.h
|
||||||
STDCCFLAGS += -I../../include -include autoconfig.h
|
STDCCFLAGS += -fPIC
|
||||||
#OPTCCFLAGS +=
|
#OPTCCFLAGS +=
|
||||||
CFLAGS += -pipe
|
CFLAGS = -pipe
|
||||||
TARGET += libchanh323.a
|
TARGET = libchanh323.a
|
||||||
TARGET += Makefile.ast
|
TARGET += Makefile.ast
|
||||||
SOURCES = ast_h323.cxx
|
SOURCES = ast_h323.cxx compat_h323.cxx cisco-h225.cxx
|
||||||
OBJDIR = .
|
OBJDIR = .
|
||||||
|
OBJS =
|
||||||
|
|
||||||
ifndef OPENH323DIR
|
ifndef OPENH323DIR
|
||||||
OPENH323DIR=$(HOME)/openh323
|
OPENH323DIR=/usr/src/OpenH323/openh323
|
||||||
endif
|
endif
|
||||||
|
|
||||||
include $(OPENH323DIR)/openh323u.mak
|
include $(OPENH323DIR)/openh323u.mak
|
||||||
|
|
||||||
$(SOURCES):: $(SOURCES:.cxx=.cpp)
|
notrace::
|
||||||
ln -f $< $@
|
$(MAKE) NOTRACE=1 opt
|
||||||
|
|
||||||
|
define module_cxx_template
|
||||||
|
$(1):: $(2)
|
||||||
|
ln -f $(2) $(1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(foreach mod,$(SOURCES),$(eval $(call module_cxx_template,$(mod),$(mod:.cxx=.cpp))))
|
||||||
|
#$(SOURCES):: $(SOURCES:.cxx=.cpp)
|
||||||
|
# ln -f $(patsubst %.cxx, %.cpp, $@) $@
|
||||||
|
|
||||||
$(SOURCES):: Makefile ../../Makefile
|
$(SOURCES):: Makefile ../../Makefile
|
||||||
touch $(SOURCES)
|
touch $@
|
||||||
|
|
||||||
libchanh323.a: $(OBJS)
|
libchanh323.a: $(OBJS)
|
||||||
ar crv $@ $(OBJS)
|
ar crv $@ $(OBJS)
|
||||||
|
|
||||||
|
cisco-h225.cpp:: cisco-h225.asn
|
||||||
|
asnparser -m CISCO_H225 -c $<
|
||||||
|
mv -f cisco-h225.cxx cisco-h225.cpp
|
||||||
|
|
||||||
Makefile.ast:
|
Makefile.ast:
|
||||||
@echo H323CFLAGS = $(STDCCFLAGS) $(OPTCCFLAGS) $(CFLAGS) >$@.tmp
|
@echo H323CFLAGS = $(STDCCFLAGS) $(OPTCCFLAGS) $(CFLAGS) >$@.tmp
|
||||||
@echo H323LDFLAGS = $(CFLAGS) $(LDFLAGS) >>$@.tmp
|
@echo H323LDFLAGS = $(CFLAGS) $(LDFLAGS) >>$@.tmp
|
||||||
|
@ -39,4 +55,4 @@ Makefile.ast:
|
||||||
@if [ -r $@ ] && cmp -s $@ $@.tmp; then rm -f $@.tmp; else mv -f $@.tmp $@; fi
|
@if [ -r $@ ] && cmp -s $@ $@.tmp; then rm -f $@.tmp; else mv -f $@.tmp $@; fi
|
||||||
|
|
||||||
clean::
|
clean::
|
||||||
rm -f ast_h323.cxx libchanh323.a Makefile.ast *.dep
|
rm -f $(SOURCES) $(TARGET) $(OBJS) Makefile.ast *.dep
|
||||||
|
|
|
@ -4,13 +4,15 @@
|
||||||
|
|
||||||
First public release on November 10th, 2002
|
First public release on November 10th, 2002
|
||||||
|
|
||||||
Dependancies: openssl-0.9.6b+
|
Dependancies (based on OpenH323/PWLib ones):
|
||||||
openssl-devel-0.9.6b+
|
openssl-0.9.6b+
|
||||||
expat-1.95+
|
openssl-devel-0.9.6b+
|
||||||
expat-dev-1.95+
|
expat-1.95+
|
||||||
|
expat-dev-1.95+
|
||||||
|
|
||||||
Tested with Open H.323 version v1.17.1, PWLib v1.9.0 and GCC v3.2.2. Usage of any
|
Tested with Open H.323 version v1.18.0, PWLib v1.10.0 and GCC v3.2.2. Usage of any
|
||||||
other versions is not supported.
|
other (especially prior OpenH323 v1.17.3 and PWLib v1.9.2) versions is not
|
||||||
|
supported.
|
||||||
|
|
||||||
NOTICE: Whatever you do, DO NOT USE distrubution specific installs
|
NOTICE: Whatever you do, DO NOT USE distrubution specific installs
|
||||||
of Open H.323 and PWLib. In fact, you should check to make sure
|
of Open H.323 and PWLib. In fact, you should check to make sure
|
||||||
|
|
|
@ -2,11 +2,6 @@ The NuFone Network's Open H.323 Channel Driver for Asterisk
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
|
|
||||||
- Fix Gatekeeper re-registration seg (HELP)
|
|
||||||
|
|
||||||
- Track down why calls to invalid extensions always
|
|
||||||
get sent to 's' in context 'default'
|
|
||||||
|
|
||||||
- H.323 Native Bridging
|
- H.323 Native Bridging
|
||||||
|
|
||||||
- Gatekeeping support (started)
|
- Gatekeeping support (started)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -13,24 +13,27 @@
|
||||||
* chan_h323 is free software; you can redistribute it and/or modify
|
* chan_h323 is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* chan_h323 is distributed WITHOUT ANY WARRANTY; without even
|
* chan_h323 is distributed WITHOUT ANY WARRANTY; without even
|
||||||
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
* PURPOSE. See the GNU General Public License for more details.
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*
|
*
|
||||||
* Version Info: $Id$
|
* Version Info: $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef AST_H323_H
|
#ifndef AST_H323_H
|
||||||
#define AST_H323_H
|
#define AST_H323_H
|
||||||
|
|
||||||
|
#define VERSION(a,b,c) ((a)*10000+(b)*100+(c))
|
||||||
|
|
||||||
|
#if 0
|
||||||
/** These need to be redefined here because the C++
|
/** These need to be redefined here because the C++
|
||||||
side of this driver is blind to the asterisk headers */
|
side of this driver is blind to the asterisk headers */
|
||||||
/*! G.723.1 compression */
|
/*! G.723.1 compression */
|
||||||
#define AST_FORMAT_G723_1 (1 << 0)
|
#define AST_FORMAT_G723_1 (1 << 0)
|
||||||
/*! GSM compression */
|
/*! GSM compression */
|
||||||
|
@ -52,114 +55,149 @@
|
||||||
/*! SpeeX Free Compression */
|
/*! SpeeX Free Compression */
|
||||||
#define AST_FORMAT_SPEEX (1 << 9)
|
#define AST_FORMAT_SPEEX (1 << 9)
|
||||||
/*! ILBC Free Codec */
|
/*! ILBC Free Codec */
|
||||||
#define AST_FORMAT_ILBC (1 << 10)
|
#define AST_FORMAT_ILBC (1 << 10)
|
||||||
|
#endif
|
||||||
|
|
||||||
/**This class describes the G.723.1 codec capability.
|
/**This class describes the G.723.1 codec capability.
|
||||||
*/
|
*/
|
||||||
class H323_G7231Capability : public H323AudioCapability
|
class H323_G7231Capability : public H323AudioCapability
|
||||||
{
|
{
|
||||||
PCLASSINFO(H323_G7231Capability, H323AudioCapability);
|
PCLASSINFO(H323_G7231Capability, H323AudioCapability);
|
||||||
public:
|
|
||||||
H323_G7231Capability(BOOL annexA = TRUE);
|
public:
|
||||||
Comparison Compare(const PObject & obj) const;
|
H323_G7231Capability(BOOL annexA = TRUE);
|
||||||
PObject * Clone() const;
|
Comparison Compare(const PObject & obj) const;
|
||||||
virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
|
virtual PObject * Clone() const;
|
||||||
unsigned GetSubType() const;
|
virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
|
||||||
PString GetFormatName() const;
|
virtual unsigned GetSubType() const;
|
||||||
BOOL OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize) const;
|
virtual PString GetFormatName() const;
|
||||||
BOOL OnReceivedPDU(const H245_AudioCapability & pdu, unsigned & packetSize);
|
virtual BOOL OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize) const;
|
||||||
protected:
|
virtual BOOL OnReceivedPDU(const H245_AudioCapability & pdu, unsigned & packetSize);
|
||||||
BOOL annexA;
|
|
||||||
|
protected:
|
||||||
|
BOOL annexA;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**This class describes the (fake) G729 codec capability.
|
/**This class describes the (fake) G729 codec capability.
|
||||||
*/
|
*/
|
||||||
class AST_G729Capability : public H323AudioCapability
|
class AST_G729Capability : public H323AudioCapability
|
||||||
{
|
{
|
||||||
PCLASSINFO(AST_G729Capability, H323AudioCapability);
|
PCLASSINFO(AST_G729Capability, H323AudioCapability);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AST_G729Capability();
|
AST_G729Capability();
|
||||||
/* Create a copy of the object. */
|
/* Create a copy of the object. */
|
||||||
virtual PObject * Clone() const;
|
virtual PObject * Clone() const;
|
||||||
|
|
||||||
/* Create the codec instance, allocating resources as required. */
|
/* Create the codec instance, allocating resources as required. */
|
||||||
virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
|
virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
|
||||||
|
|
||||||
/* Get the sub-type of the capability. This is a code dependent on the
|
/* Get the sub-type of the capability. This is a code dependent on the
|
||||||
main type of the capability.
|
main type of the capability.
|
||||||
|
|
||||||
This returns one of the four possible combinations of mode and speed
|
This returns one of the four possible combinations of mode and speed
|
||||||
using the enum values of the protocol ASN H245_AudioCapability class. */
|
using the enum values of the protocol ASN H245_AudioCapability class. */
|
||||||
virtual unsigned GetSubType() const;
|
virtual unsigned GetSubType() const;
|
||||||
|
|
||||||
/* Get the name of the media data format this class represents. */
|
|
||||||
virtual PString GetFormatName() const;
|
|
||||||
|
|
||||||
|
/* Get the name of the media data format this class represents. */
|
||||||
|
virtual PString GetFormatName() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This class describes the VoiceAge G729A codec capability. */
|
/* This class describes the VoiceAge G729A codec capability. */
|
||||||
class AST_G729ACapability : public H323AudioCapability
|
class AST_G729ACapability : public H323AudioCapability
|
||||||
{
|
{
|
||||||
PCLASSINFO(AST_G729ACapability, H323AudioCapability);
|
PCLASSINFO(AST_G729ACapability, H323AudioCapability);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/* Create a new G.729A capability. */
|
/* Create a new G.729A capability. */
|
||||||
AST_G729ACapability();
|
AST_G729ACapability();
|
||||||
|
|
||||||
/* Create a copy of the object. */
|
/* Create a copy of the object. */
|
||||||
virtual PObject * Clone() const;
|
virtual PObject * Clone() const;
|
||||||
/* Create the codec instance, allocating resources as required. */
|
/* Create the codec instance, allocating resources as required. */
|
||||||
virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
|
virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
|
||||||
|
|
||||||
/* Get the sub-type of the capability. This is a code dependent on the
|
/* Get the sub-type of the capability. This is a code dependent on the
|
||||||
main type of the capability.
|
main type of the capability.
|
||||||
|
|
||||||
This returns one of the four possible combinations of mode and speed
|
This returns one of the four possible combinations of mode and speed
|
||||||
using the enum values of the protocol ASN H245_AudioCapability class. */
|
using the enum values of the protocol ASN H245_AudioCapability class. */
|
||||||
virtual unsigned GetSubType() const;
|
virtual unsigned GetSubType() const;
|
||||||
|
|
||||||
/* Get the name of the media data format this class represents. */
|
/* Get the name of the media data format this class represents. */
|
||||||
virtual PString GetFormatName() const;
|
virtual PString GetFormatName() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MyH323EndPoint : public H323EndPoint {
|
/* This class describes the GSM-06.10 codec capability. */
|
||||||
|
class AST_GSM0610Capability : public H323AudioCapability
|
||||||
|
{
|
||||||
|
PCLASSINFO(AST_GSM0610Capability, H323AudioCapability);
|
||||||
|
|
||||||
|
public:
|
||||||
|
/* Create a new GSM capability. */
|
||||||
|
AST_GSM0610Capability(int comfortNoise = 0, int scrambled = 0);
|
||||||
|
|
||||||
|
/* Create a copy of the object. */
|
||||||
|
virtual PObject * Clone() const;
|
||||||
|
|
||||||
|
/* Create the codec instance, allocating resources as required. */
|
||||||
|
virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
|
||||||
|
|
||||||
|
/* Get the sub-type of the capability. This is a code dependent on the
|
||||||
|
main type of the capability.
|
||||||
|
|
||||||
|
This returns one of the four possible combinations of mode and speed
|
||||||
|
using the enum values of the protocol ASN H245_AudioCapability class. */
|
||||||
|
virtual unsigned GetSubType() const;
|
||||||
|
|
||||||
|
/* Get the name of the media data format this class represents. */
|
||||||
|
virtual PString GetFormatName() const;
|
||||||
|
|
||||||
|
BOOL OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize) const;
|
||||||
|
BOOL OnReceivedPDU(const H245_AudioCapability & pdu, unsigned & packetSize);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int comfortNoise;
|
||||||
|
int scrambled;
|
||||||
|
};
|
||||||
|
|
||||||
|
class MyH323EndPoint : public H323EndPoint
|
||||||
|
{
|
||||||
PCLASSINFO(MyH323EndPoint, H323EndPoint);
|
PCLASSINFO(MyH323EndPoint, H323EndPoint);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MyH323EndPoint();
|
MyH323EndPoint();
|
||||||
int MakeCall(const PString &, PString &, unsigned int *, call_options_t *opts);
|
int MyMakeCall(const PString &, PString &, void *_callReference, void *_opts);
|
||||||
BOOL ClearCall(const PString &, H323Connection::CallEndReason reason);
|
BOOL ClearCall(const PString &, H323Connection::CallEndReason reason);
|
||||||
BOOL ClearCall(const PString &);
|
BOOL ClearCall(const PString &);
|
||||||
|
|
||||||
void OnClosedLogicalChannel(H323Connection &, const H323Channel &);
|
void OnClosedLogicalChannel(H323Connection &, const H323Channel &);
|
||||||
void OnConnectionEstablished(H323Connection &, const PString &);
|
void OnConnectionEstablished(H323Connection &, const PString &);
|
||||||
void OnConnectionCleared(H323Connection &, const PString &);
|
void OnConnectionCleared(H323Connection &, const PString &);
|
||||||
H323Connection * CreateConnection(unsigned, void *);
|
virtual H323Connection * CreateConnection(unsigned, void *, H323Transport *, H323SignalPDU *);
|
||||||
void SendUserTone(const PString &, char);
|
void SendUserTone(const PString &, char);
|
||||||
BOOL OnConnectionForwarded(H323Connection &, const PString &, const H323SignalPDU &);
|
BOOL OnConnectionForwarded(H323Connection &, const PString &, const H323SignalPDU &);
|
||||||
BOOL ForwardConnection(H323Connection &, const PString &, const H323SignalPDU &);
|
BOOL ForwardConnection(H323Connection &, const PString &, const H323SignalPDU &);
|
||||||
void SetEndpointTypeInfo( H225_EndpointType & info ) const;
|
void SetEndpointTypeInfo( H225_EndpointType & info ) const;
|
||||||
void SetGateway(void);
|
void SetGateway(void);
|
||||||
PStringArray SupportedPrefixes;
|
PStringArray SupportedPrefixes;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MyH323Connection : public H323Connection {
|
class MyH323Connection : public H323Connection
|
||||||
|
{
|
||||||
PCLASSINFO(MyH323Connection, H323Connection);
|
PCLASSINFO(MyH323Connection, H323Connection);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MyH323Connection(MyH323EndPoint &, unsigned, unsigned);
|
MyH323Connection(MyH323EndPoint &, unsigned, unsigned);
|
||||||
~MyH323Connection();
|
~MyH323Connection();
|
||||||
H323Channel * CreateRealTimeLogicalChannel(const H323Capability &,
|
H323Channel * CreateRealTimeLogicalChannel(const H323Capability &,
|
||||||
H323Channel::Directions,
|
H323Channel::Directions,
|
||||||
unsigned,
|
unsigned,
|
||||||
const H245_H2250LogicalChannelParameters *,
|
const H245_H2250LogicalChannelParameters *,
|
||||||
RTP_QOS *);
|
RTP_QOS *);
|
||||||
H323Connection::AnswerCallResponse OnAnswerCall(const PString &,
|
H323Connection::AnswerCallResponse OnAnswerCall(const PString &,
|
||||||
const H323SignalPDU &,
|
const H323SignalPDU &,
|
||||||
H323SignalPDU &);
|
H323SignalPDU &);
|
||||||
void OnReceivedReleaseComplete(const H323SignalPDU &);
|
void OnReceivedReleaseComplete(const H323SignalPDU &);
|
||||||
BOOL OnAlerting(const H323SignalPDU &, const PString &);
|
BOOL OnAlerting(const H323SignalPDU &, const PString &);
|
||||||
BOOL OnSendReleaseComplete(H323SignalPDU &);
|
BOOL OnSendReleaseComplete(H323SignalPDU &);
|
||||||
|
@ -167,46 +205,57 @@ class MyH323Connection : public H323Connection {
|
||||||
BOOL OnReceivedFacility(const H323SignalPDU &);
|
BOOL OnReceivedFacility(const H323SignalPDU &);
|
||||||
BOOL OnSendSignalSetup(H323SignalPDU &);
|
BOOL OnSendSignalSetup(H323SignalPDU &);
|
||||||
BOOL OnStartLogicalChannel(H323Channel &);
|
BOOL OnStartLogicalChannel(H323Channel &);
|
||||||
BOOL OnClosingLogicalChannel(H323Channel &);
|
BOOL OnClosingLogicalChannel(H323Channel &);
|
||||||
void SendUserInputTone(char, unsigned);
|
virtual void SendUserInputTone(char tone, unsigned duration = 0, unsigned logicalChannel = 0, unsigned rtpTimestamp = 0);
|
||||||
void OnUserInputTone(char, unsigned, unsigned, unsigned);
|
virtual void OnUserInputTone(char, unsigned, unsigned, unsigned);
|
||||||
void OnUserInputString(const PString &value);
|
virtual void OnUserInputString(const PString &value);
|
||||||
BOOL OnReceivedProgress(const H323SignalPDU &);
|
BOOL OnReceivedProgress(const H323SignalPDU &);
|
||||||
void OnSendCapabilitySet(H245_TerminalCapabilitySet &);
|
void OnSendCapabilitySet(H245_TerminalCapabilitySet &);
|
||||||
void OnSetLocalCapabilities();
|
void OnSetLocalCapabilities();
|
||||||
void SetCapabilities(int, int);
|
void SetCapabilities(int, int, void *, int);
|
||||||
BOOL OnReceivedCapabilitySet(const H323Capabilities &, const H245_MultiplexCapability *,
|
BOOL OnReceivedCapabilitySet(const H323Capabilities &, const H245_MultiplexCapability *,
|
||||||
H245_TerminalCapabilitySetReject &);
|
H245_TerminalCapabilitySetReject &);
|
||||||
void SetCause(int _cause) { cause = _cause; };
|
void SetCause(int _cause) { cause = _cause; };
|
||||||
|
virtual BOOL StartControlChannel(const H225_TransportAddress & h245Address);
|
||||||
|
void SetCallOptions(void *opts, BOOL isIncoming);
|
||||||
|
void SetCallDetails(void *callDetails, const H323SignalPDU &setupPDU, BOOL isIncoming);
|
||||||
|
#ifdef TUNNELLING
|
||||||
|
virtual BOOL HandleSignalPDU(H323SignalPDU &pdu);
|
||||||
|
BOOL EmbedTunneledInfo(H323SignalPDU &pdu);
|
||||||
|
#endif
|
||||||
|
|
||||||
PString sourceAliases;
|
PString sourceAliases;
|
||||||
PString destAliases;
|
PString destAliases;
|
||||||
PString sourceE164;
|
PString sourceE164;
|
||||||
PString destE164;
|
PString destE164;
|
||||||
|
PString rdnis;
|
||||||
|
int redirect_reason;
|
||||||
|
|
||||||
WORD sessionId;
|
WORD sessionId;
|
||||||
BOOL bridging;
|
BOOL bridging;
|
||||||
|
#ifdef TUNNELLING
|
||||||
|
int remoteTunnelOptions;
|
||||||
|
int tunnelOptions;
|
||||||
|
#endif
|
||||||
|
|
||||||
unsigned progressSetup;
|
unsigned progressSetup;
|
||||||
unsigned progressAlert;
|
unsigned progressAlert;
|
||||||
int cause;
|
int cause;
|
||||||
|
|
||||||
RTP_DataFrame::PayloadTypes dtmfCodec;
|
RTP_DataFrame::PayloadTypes dtmfCodec;
|
||||||
|
int dtmfMode;
|
||||||
PString ast_cid_num;
|
|
||||||
PString ast_cid_name;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class MyH323_ExternalRTPChannel : public H323_ExternalRTPChannel {
|
class MyH323_ExternalRTPChannel : public H323_ExternalRTPChannel
|
||||||
|
{
|
||||||
|
PCLASSINFO(MyH323_ExternalRTPChannel, H323_ExternalRTPChannel);
|
||||||
|
|
||||||
PCLASSINFO(MyH323_ExternalRTPChannel, H323_ExternalRTPChannel);
|
public:
|
||||||
|
|
||||||
public:
|
|
||||||
MyH323_ExternalRTPChannel(
|
MyH323_ExternalRTPChannel(
|
||||||
MyH323Connection & connection,
|
MyH323Connection & connection,
|
||||||
const H323Capability & capability,
|
const H323Capability & capability,
|
||||||
Directions direction,
|
Directions direction,
|
||||||
unsigned sessionID);
|
unsigned sessionID);
|
||||||
|
|
||||||
~MyH323_ExternalRTPChannel();
|
~MyH323_ExternalRTPChannel();
|
||||||
|
|
||||||
|
@ -214,26 +263,29 @@ class MyH323_ExternalRTPChannel : public H323_ExternalRTPChannel {
|
||||||
BOOL Start(void);
|
BOOL Start(void);
|
||||||
BOOL OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param);
|
BOOL OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BYTE payloadCode;
|
BYTE payloadCode;
|
||||||
|
|
||||||
PIPSocket::Address localIpAddr;
|
PIPSocket::Address localIpAddr;
|
||||||
PIPSocket::Address remoteIpAddr;
|
PIPSocket::Address remoteIpAddr;
|
||||||
WORD localPort;
|
WORD localPort;
|
||||||
WORD remotePort;
|
WORD remotePort;
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The MyProcess is a necessary descendant PProcess class so that the H323EndPoint
|
|
||||||
* objected to be created from within that class. (Solves the who owns main() problem).
|
|
||||||
*/
|
|
||||||
class MyProcess : public PProcess {
|
|
||||||
|
|
||||||
PCLASSINFO(MyProcess, PProcess);
|
|
||||||
|
|
||||||
public:
|
|
||||||
MyProcess();
|
|
||||||
void Main();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The MyProcess is a necessary descendant PProcess class so that the H323EndPoint
|
||||||
|
* objected to be created from within that class. (Solves the who owns main() problem).
|
||||||
|
*/
|
||||||
|
class MyProcess : public PProcess
|
||||||
|
{
|
||||||
|
PCLASSINFO(MyProcess, PProcess);
|
||||||
|
|
||||||
|
public:
|
||||||
|
MyProcess();
|
||||||
|
~MyProcess();
|
||||||
|
void Main();
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "compat_h323.h"
|
||||||
|
|
||||||
#endif /* !defined AST_H323_H */
|
#endif /* !defined AST_H323_H */
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
* OpenH323 Channel Driver for ASTERISK PBX.
|
* OpenH323 Channel Driver for ASTERISK PBX.
|
||||||
* By Jeremy McNamara
|
* By Jeremy McNamara
|
||||||
* For The NuFone Network
|
* For The NuFone Network
|
||||||
*
|
*
|
||||||
* This code has been derived from code created by
|
* This code has been derived from code created by
|
||||||
* Michael Manousos and Mark Spencer
|
* Michael Manousos and Mark Spencer
|
||||||
*
|
*
|
||||||
* This file is part of the chan_h323 driver for Asterisk
|
* This file is part of the chan_h323 driver for Asterisk
|
||||||
|
@ -13,29 +13,42 @@
|
||||||
* chan_h323 is free software; you can redistribute it and/or modify
|
* chan_h323 is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* chan_h323 is distributed WITHOUT ANY WARRANTY; without even
|
* chan_h323 is distributed WITHOUT ANY WARRANTY; without even
|
||||||
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
* PURPOSE. See the GNU General Public License for more details.
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*
|
*
|
||||||
* Version Info: $Id$
|
* Version Info: $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enable support for sending/reception of tunnelled Q.SIG messages and
|
||||||
|
* some sort of IEs (especially RedirectingNumber) which Cisco CallManager
|
||||||
|
* isn't like to pass in standard Q.931 message.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define TUNNELLING
|
||||||
|
|
||||||
|
#define H323_TUNNEL_CISCO (1 << 0)
|
||||||
|
#define H323_TUNNEL_QSIG (1 << 1)
|
||||||
|
|
||||||
/** call_option struct holds various bits
|
/** call_option struct holds various bits
|
||||||
* of information for each call */
|
* of information for each call */
|
||||||
typedef struct call_options {
|
typedef struct call_options {
|
||||||
char cid_num[80];
|
char cid_num[80];
|
||||||
char cid_name[80];
|
char cid_name[80];
|
||||||
int noFastStart;
|
char cid_rdnis[80];
|
||||||
int noH245Tunneling;
|
int redirect_reason;
|
||||||
int noSilenceSuppression;
|
int fastStart;
|
||||||
|
int h245Tunneling;
|
||||||
|
int silenceSuppression;
|
||||||
int progress_setup;
|
int progress_setup;
|
||||||
int progress_alert;
|
int progress_alert;
|
||||||
int progress_audio;
|
int progress_audio;
|
||||||
|
@ -44,57 +57,58 @@ typedef struct call_options {
|
||||||
int capability;
|
int capability;
|
||||||
int bridge;
|
int bridge;
|
||||||
int nat;
|
int nat;
|
||||||
|
int tunnelOptions;
|
||||||
|
struct ast_codec_pref prefs;
|
||||||
} call_options_t;
|
} call_options_t;
|
||||||
|
|
||||||
/* structure to hold the valid asterisk users */
|
/* structure to hold the valid asterisk users */
|
||||||
struct oh323_user {
|
struct oh323_user {
|
||||||
char name[80];
|
ASTOBJ_COMPONENTS(struct oh323_user);
|
||||||
|
// char name[80];
|
||||||
char context[80];
|
char context[80];
|
||||||
char secret[80];
|
char secret[80];
|
||||||
char callerid[80];
|
|
||||||
char accountcode[AST_MAX_ACCOUNT_CODE];
|
char accountcode[AST_MAX_ACCOUNT_CODE];
|
||||||
int amaflags;
|
int amaflags;
|
||||||
int host;
|
int host;
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_in addr;
|
||||||
struct ast_ha *ha;
|
struct ast_ha *ha;
|
||||||
call_options_t options;
|
call_options_t options;
|
||||||
struct oh323_user *next;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* structure to hold the valid asterisk peers
|
/* structure to hold the valid asterisk peers
|
||||||
All peers are registered to a GK if there is one */
|
All peers are registered to a GK if there is one */
|
||||||
struct oh323_peer {
|
struct oh323_peer {
|
||||||
char name[80];
|
ASTOBJ_COMPONENTS(struct oh323_peer);
|
||||||
char mailbox[80];
|
char mailbox[80];
|
||||||
int delme;
|
int delme;
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_in addr;
|
||||||
struct ast_ha *ha;
|
struct ast_ha *ha;
|
||||||
call_options_t options;
|
call_options_t options;
|
||||||
struct oh323_peer *next;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* structure to hold the H.323 aliases which get registered to
|
/* structure to hold the H.323 aliases which get registered to
|
||||||
the H.323 endpoint and gatekeeper */
|
the H.323 endpoint and gatekeeper */
|
||||||
struct oh323_alias {
|
struct oh323_alias {
|
||||||
char name[80];
|
ASTOBJ_COMPONENTS(struct oh323_alias);
|
||||||
char e164[20]; /* tells a GK to route this E.164 to this alias */
|
char e164[20]; /* tells a GK to route this E.164 to this alias */
|
||||||
char prefix[500]; /* tells a GK this alias supports these prefixes */
|
char prefix[500]; /* tells a GK this alias supports these prefixes */
|
||||||
char secret[20]; /* the H.235 password to send to the GK for authentication */
|
char secret[20]; /* the H.235 password to send to the GK for authentication */
|
||||||
char context[80];
|
char context[80];
|
||||||
struct oh323_alias *next;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** call_details struct call detail records
|
/** call_details struct call detail records
|
||||||
to asterisk for processing and used for matching up
|
to asterisk for processing and used for matching up
|
||||||
asterisk channels to acutal h.323 connections */
|
asterisk channels to acutal h.323 connections */
|
||||||
typedef struct call_details {
|
typedef struct call_details {
|
||||||
unsigned int call_reference;
|
unsigned int call_reference;
|
||||||
char *call_token;
|
char *call_token;
|
||||||
char *call_source_aliases;
|
char *call_source_aliases;
|
||||||
char *call_dest_alias;
|
char *call_dest_alias;
|
||||||
char *call_source_name;
|
char *call_source_name;
|
||||||
char *call_source_e164;
|
char *call_source_e164;
|
||||||
char *call_dest_e164;
|
char *call_dest_e164;
|
||||||
|
char *redirect_number;
|
||||||
|
int redirect_reason;
|
||||||
int presentation;
|
int presentation;
|
||||||
int screening;
|
int screening;
|
||||||
char *sourceIp;
|
char *sourceIp;
|
||||||
|
@ -107,18 +121,18 @@ typedef struct rtp_info {
|
||||||
|
|
||||||
/* This is a callback prototype function, called pass
|
/* This is a callback prototype function, called pass
|
||||||
DTMF down the RTP. */
|
DTMF down the RTP. */
|
||||||
typedef int (*send_digit_cb)(unsigned, char, const char *);
|
typedef int (*receive_digit_cb)(unsigned, char, const char *, int);
|
||||||
extern send_digit_cb on_send_digit;
|
extern receive_digit_cb on_receive_digit;
|
||||||
|
|
||||||
/* This is a callback prototype function, called to collect
|
/* This is a callback prototype function, called to collect
|
||||||
the external RTP port from Asterisk. */
|
the external RTP port from Asterisk. */
|
||||||
typedef rtp_info_t *(*on_rtp_cb)(unsigned, const char *);
|
typedef rtp_info_t *(*on_rtp_cb)(unsigned, const char *);
|
||||||
extern on_rtp_cb on_external_rtp_create;
|
extern on_rtp_cb on_external_rtp_create;
|
||||||
|
|
||||||
/* This is a callback prototype function, called to send
|
/* This is a callback prototype function, called to send
|
||||||
the remote IP and RTP port from H.323 to Asterisk */
|
the remote IP and RTP port from H.323 to Asterisk */
|
||||||
typedef void (*start_rtp_cb)(unsigned int, const char *, int, const char *, int);
|
typedef void (*start_rtp_cb)(unsigned int, const char *, int, const char *, int);
|
||||||
extern start_rtp_cb on_start_rtp_channel;
|
extern start_rtp_cb on_start_rtp_channel;
|
||||||
|
|
||||||
/* This is a callback that happens when call progress is
|
/* This is a callback that happens when call progress is
|
||||||
* made, and handles inband progress */
|
* made, and handles inband progress */
|
||||||
|
@ -133,7 +147,7 @@ extern setup_incoming_cb on_incoming_call;
|
||||||
/* This is a callback prototype function, called upon
|
/* This is a callback prototype function, called upon
|
||||||
an outbound call. */
|
an outbound call. */
|
||||||
typedef int (*setup_outbound_cb)(call_details_t *);
|
typedef int (*setup_outbound_cb)(call_details_t *);
|
||||||
extern setup_outbound_cb on_outgoing_call;
|
extern setup_outbound_cb on_outgoing_call;
|
||||||
|
|
||||||
/* This is a callback prototype function, called when
|
/* This is a callback prototype function, called when
|
||||||
OnAlerting is invoked */
|
OnAlerting is invoked */
|
||||||
|
@ -151,7 +165,7 @@ typedef void (*clear_con_cb)(unsigned, const char *);
|
||||||
extern clear_con_cb on_connection_cleared;
|
extern clear_con_cb on_connection_cleared;
|
||||||
|
|
||||||
/* This is a callback prototype function, called when
|
/* This is a callback prototype function, called when
|
||||||
an H.323 call is answered */
|
an H.323 call is answered */
|
||||||
typedef int (*answer_call_cb)(unsigned, const char *);
|
typedef int (*answer_call_cb)(unsigned, const char *);
|
||||||
extern answer_call_cb on_answer_call;
|
extern answer_call_cb on_answer_call;
|
||||||
|
|
||||||
|
@ -167,6 +181,9 @@ extern hangup_cb on_hangup;
|
||||||
typedef void (*setcapabilities_cb)(unsigned, const char *);
|
typedef void (*setcapabilities_cb)(unsigned, const char *);
|
||||||
extern setcapabilities_cb on_setcapabilities;
|
extern setcapabilities_cb on_setcapabilities;
|
||||||
|
|
||||||
|
typedef void (*setpeercapabilities_cb)(unsigned, const char *, int);
|
||||||
|
extern setpeercapabilities_cb on_setpeercapabilities;
|
||||||
|
|
||||||
/* debug flag */
|
/* debug flag */
|
||||||
extern int h323debug;
|
extern int h323debug;
|
||||||
|
|
||||||
|
@ -179,30 +196,31 @@ extern int h323debug;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void h323_gk_urq(void);
|
void h323_gk_urq(void);
|
||||||
void h323_end_point_create(void);
|
void h323_end_point_create(void);
|
||||||
void h323_end_process(void);
|
void h323_end_process(void);
|
||||||
int h323_end_point_exist(void);
|
int h323_end_point_exist(void);
|
||||||
|
|
||||||
void h323_debug(int, unsigned);
|
void h323_debug(int, unsigned);
|
||||||
|
|
||||||
/* callback function handler*/
|
/* callback function handler*/
|
||||||
void h323_callback_register(setup_incoming_cb,
|
void h323_callback_register(setup_incoming_cb,
|
||||||
setup_outbound_cb,
|
setup_outbound_cb,
|
||||||
on_rtp_cb,
|
on_rtp_cb,
|
||||||
start_rtp_cb,
|
start_rtp_cb,
|
||||||
clear_con_cb,
|
clear_con_cb,
|
||||||
chan_ringing_cb,
|
chan_ringing_cb,
|
||||||
con_established_cb,
|
con_established_cb,
|
||||||
send_digit_cb,
|
receive_digit_cb,
|
||||||
answer_call_cb,
|
answer_call_cb,
|
||||||
progress_cb,
|
progress_cb,
|
||||||
rfc2833_cb,
|
rfc2833_cb,
|
||||||
hangup_cb,
|
hangup_cb,
|
||||||
setcapabilities_cb);
|
setcapabilities_cb,
|
||||||
int h323_set_capabilities(const char *, int, int);
|
setpeercapabilities_cb);
|
||||||
|
int h323_set_capabilities(const char *, int, int, struct ast_codec_pref *, int);
|
||||||
int h323_set_alias(struct oh323_alias *);
|
int h323_set_alias(struct oh323_alias *);
|
||||||
int h323_set_gk(int, char *, char *);
|
int h323_set_gk(int, char *, char *);
|
||||||
void h323_set_id(char *);
|
void h323_set_id(char *);
|
||||||
|
@ -219,12 +237,12 @@ extern "C" {
|
||||||
/* H323 create and destroy sessions */
|
/* H323 create and destroy sessions */
|
||||||
int h323_make_call(char *dest, call_details_t *cd, call_options_t *);
|
int h323_make_call(char *dest, call_details_t *cd, call_options_t *);
|
||||||
int h323_clear_call(const char *, int cause);
|
int h323_clear_call(const char *, int cause);
|
||||||
|
|
||||||
/* H.323 alerting and progress */
|
/* H.323 alerting and progress */
|
||||||
int h323_send_alerting(const char *token);
|
int h323_send_alerting(const char *token);
|
||||||
int h323_send_progress(const char *token);
|
int h323_send_progress(const char *token);
|
||||||
int h323_answering_call(const char *token, int);
|
int h323_answering_call(const char *token, int);
|
||||||
int h323_soft_hangup(const char *data);
|
int h323_soft_hangup(const char *data);
|
||||||
int h323_show_codec(int fd, int argc, char *argv[]);
|
int h323_show_codec(int fd, int argc, char *argv[]);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -1,149 +0,0 @@
|
||||||
; The NuFone Network's
|
|
||||||
; Open H.323 driver configuration
|
|
||||||
;
|
|
||||||
[general]
|
|
||||||
port = 1720
|
|
||||||
bindaddr = 1.2.3.4 ; this SHALL contain a single, valid IP address for this machine
|
|
||||||
;tos=lowdelay
|
|
||||||
;
|
|
||||||
; You may specify a global default AMA flag for iaxtel calls. It must be
|
|
||||||
; one of 'default', 'omit', 'billing', or 'documentation'. These flags
|
|
||||||
; are used in the generation of call detail records.
|
|
||||||
;
|
|
||||||
;amaflags = default
|
|
||||||
;
|
|
||||||
; You may specify a default account for Call Detail Records in addition
|
|
||||||
; to specifying on a per-user basis
|
|
||||||
;
|
|
||||||
;accountcode=lss0101
|
|
||||||
;
|
|
||||||
; You can fine tune codecs here using "allow" and "disallow" clauses
|
|
||||||
; with specific codecs. Use "all" to represent all formats.
|
|
||||||
;
|
|
||||||
disallow=all
|
|
||||||
;allow=all ; turns on all installed codecs
|
|
||||||
;disallow=g723.1 ; Hm... Proprietary, don't use it...
|
|
||||||
allow=gsm ; Always allow GSM, it's cool :)
|
|
||||||
;
|
|
||||||
; User-Input Mode (DTMF)
|
|
||||||
;
|
|
||||||
; valid entries are: rfc2833, inband
|
|
||||||
; default is rfc2833
|
|
||||||
;dtmfmode=rfc2833
|
|
||||||
;
|
|
||||||
; Default RTP Payload to send RFC2833 DTMF on. This is used to
|
|
||||||
; interoperate with broken gateways which cannot successfully
|
|
||||||
; negotiate a RFC2833 payload type in the TerminalCapabilitySet.
|
|
||||||
;
|
|
||||||
; You may also specify on either a per-peer or per-user basis below.
|
|
||||||
;dtmfcodec=101
|
|
||||||
;
|
|
||||||
; Set the gatekeeper
|
|
||||||
; DISCOVER - Find the Gk address using multicast
|
|
||||||
; DISABLE - Disable the use of a GK
|
|
||||||
; <IP address> or <Host name> - The acutal IP address or hostname of your GK
|
|
||||||
;gatekeeper = DISABLE
|
|
||||||
;
|
|
||||||
;
|
|
||||||
; Tell Asterisk whether or not to accept Gatekeeper
|
|
||||||
; routed calls or not. Normally this should always
|
|
||||||
; be set to yes, unless you want to have finer control
|
|
||||||
; over which users are allowed access to Asterisk.
|
|
||||||
; Default: YES
|
|
||||||
;
|
|
||||||
;AllowGKRouted = yes
|
|
||||||
;
|
|
||||||
; Optionally you can determine a user by Source IP versus its H.323 alias.
|
|
||||||
; Default behavour is to determine user by H.323 alias.
|
|
||||||
;UserByAlias=no
|
|
||||||
;
|
|
||||||
; Default context gets used in siutations where you are using
|
|
||||||
; the GK routed model or no type=user was found. This gives you
|
|
||||||
; the ability to either play an invalid message or to simply not
|
|
||||||
; use user authentication at all.
|
|
||||||
;
|
|
||||||
;context=default
|
|
||||||
;------------------------------ JITTER BUFFER CONFIGURATION --------------------------
|
|
||||||
; jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of a
|
|
||||||
; H323 channel. Defaults to "no". An enabled jitterbuffer will
|
|
||||||
; be used only if the sending side can create and the receiving
|
|
||||||
; side can not accept jitter. The H323 channel can accept jitter,
|
|
||||||
; thus an enabled jitterbuffer on the receive H323 side will only
|
|
||||||
; be used if the sending side can create jitter and jbforce is
|
|
||||||
; also set to yes.
|
|
||||||
|
|
||||||
; jbforce = no ; Forces the use of a jitterbuffer on the receive side of a H323
|
|
||||||
; channel. Defaults to "no".
|
|
||||||
|
|
||||||
; jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds.
|
|
||||||
|
|
||||||
; jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is
|
|
||||||
; resynchronized. Useful to improve the quality of the voice, with
|
|
||||||
; big jumps in/broken timestamps, usualy sent from exotic devices
|
|
||||||
; and programs. Defaults to 1000.
|
|
||||||
|
|
||||||
; jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a H323
|
|
||||||
; channel. Two implementations are currenlty available - "fixed"
|
|
||||||
; (with size always equals to jbmax-size) and "adaptive" (with
|
|
||||||
; variable size, actually the new jb of IAX2). Defaults to fixed.
|
|
||||||
|
|
||||||
; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no".
|
|
||||||
;-----------------------------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; H.323 Alias definitions
|
|
||||||
;
|
|
||||||
; Type 'h323' will register aliases to the endpoint
|
|
||||||
; and Gatekeeper, if there is one.
|
|
||||||
;
|
|
||||||
; Example: if someone calls time@your.asterisk.box.com
|
|
||||||
; Asterisk will send the call to the extension 'time'
|
|
||||||
; in the context default
|
|
||||||
;
|
|
||||||
; [default]
|
|
||||||
; exten => time,1,Answer
|
|
||||||
; exten => time,2,Playback,current-time
|
|
||||||
;
|
|
||||||
; Keyword's 'prefix' and 'e164' are only make sense when
|
|
||||||
; used with a gatekeeper. You can specify either a prefix
|
|
||||||
; or E.164 this endpoint is responsible for terminating.
|
|
||||||
;
|
|
||||||
; Example: The H.323 alias 'det-gw' will tell the gatekeeper
|
|
||||||
; to route any call with the prefix 1248 to this alias. Keyword
|
|
||||||
; e164 is used when you want to specifiy a full telephone
|
|
||||||
; number. So a call to the number 18102341212 would be
|
|
||||||
; routed to the H.323 alias 'time'.
|
|
||||||
;
|
|
||||||
;[time]
|
|
||||||
;type=h323
|
|
||||||
;e164=18102341212
|
|
||||||
;context=default
|
|
||||||
;
|
|
||||||
;[det-gw]
|
|
||||||
;type=h323
|
|
||||||
;prefix=1248,1313
|
|
||||||
;context=detroit
|
|
||||||
;
|
|
||||||
;
|
|
||||||
; Inbound H.323 calls from BillyBob would land in the incoming
|
|
||||||
; context with a maximum of 4 concurrent incoming calls
|
|
||||||
;
|
|
||||||
;
|
|
||||||
; Note: If keyword 'incominglimit' are omitted Asterisk will not
|
|
||||||
; enforce any maximum number of concurrent calls.
|
|
||||||
;
|
|
||||||
;[BillyBob]
|
|
||||||
;type=user
|
|
||||||
;host=192.168.1.1
|
|
||||||
;context=incoming
|
|
||||||
;incominglimit=4
|
|
||||||
;
|
|
||||||
;
|
|
||||||
; Outbound H.323 call to Larry using SlowStart
|
|
||||||
;
|
|
||||||
[Larry]
|
|
||||||
type=peer
|
|
||||||
host=192.168.2.1
|
|
||||||
noFastStart=yes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
88
configure.ac
88
configure.ac
|
@ -195,6 +195,7 @@ AST_EXT_LIB_SETUP([POPT], [popt], [popt])
|
||||||
AST_EXT_LIB_SETUP([PGSQL], [PostgreSQL], [postgres])
|
AST_EXT_LIB_SETUP([PGSQL], [PostgreSQL], [postgres])
|
||||||
AST_EXT_LIB_SETUP([PRI], [ISDN PRI], [pri])
|
AST_EXT_LIB_SETUP([PRI], [ISDN PRI], [pri])
|
||||||
AST_EXT_LIB_SETUP([PWLIB], [PWlib], [pwlib])
|
AST_EXT_LIB_SETUP([PWLIB], [PWlib], [pwlib])
|
||||||
|
AST_EXT_LIB_SETUP([OPENH323], [OpenH323], [h323])
|
||||||
AST_EXT_LIB_SETUP([QT], [Qt], [qt])
|
AST_EXT_LIB_SETUP([QT], [Qt], [qt])
|
||||||
AST_EXT_LIB_SETUP([RADIUS], [Radius Client], [radius])
|
AST_EXT_LIB_SETUP([RADIUS], [Radius Client], [radius])
|
||||||
AST_EXT_LIB_SETUP([SPEEX], [Speex], [speex])
|
AST_EXT_LIB_SETUP([SPEEX], [Speex], [speex])
|
||||||
|
@ -701,49 +702,58 @@ AST_EXT_LIB_CHECK([POPT], [popt], [poptStrerror], [popt.h])
|
||||||
|
|
||||||
AST_EXT_LIB_CHECK([PRI], [pri], [pri_call], [libpri.h])
|
AST_EXT_LIB_CHECK([PRI], [pri], [pri_call], [libpri.h])
|
||||||
|
|
||||||
PLATFORM_PTLIB="ptlib_${OSTYPE}_${MACHTYPE}_r"
|
|
||||||
if test "${USE_PWLIB}" != "no"; then
|
if test "${USE_PWLIB}" != "no"; then
|
||||||
AC_MSG_CHECKING(for existence of pwlib)
|
if test ! -z "${PWLIB_DIR}"; then
|
||||||
|
PWLIBDIR="${PWLIB_DIR}"
|
||||||
saved_cppflags="${CPPFLAGS}"
|
fi
|
||||||
saved_libs="${LIBS}"
|
AST_CHECK_PWLIB()
|
||||||
LIBS="${LIBS} -L${PWLIB_DIR} -l${PLATFORM_PTLIB}"
|
AST_CHECK_PWLIB_VERSION([PWLib], [PWLIB], [ptbuildopts.h], [1], [9], [2])
|
||||||
CPPFLAGS="${CPPFLAGS} -I${PWLIB_DIR}/include"
|
|
||||||
|
if test "${HAS_PWLIB:-unset}" != "unset"; then
|
||||||
AC_LINK_IFELSE(
|
AST_CHECK_OPENH323_PLATFORM()
|
||||||
[
|
|
||||||
AC_LANG_PROGRAM(
|
|
||||||
[#include "ptime.h"],
|
|
||||||
[int q = PTime::IsDaylightSaving();])
|
|
||||||
],
|
|
||||||
[ AC_MSG_RESULT(yes)
|
|
||||||
ac_cv_lib_pwlib="yes"
|
|
||||||
],
|
|
||||||
[ AC_MSG_RESULT(no)
|
|
||||||
ac_cv_lib_pwlib="no"
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
LIBS="${saved_libs}"
|
PLATFORM_PWLIB="pt_${PWLIB_PLATFORM}_r"
|
||||||
CPPFLAGS="${saved_cppflags}"
|
|
||||||
|
|
||||||
if test "${ac_cv_lib_pwlib}" = "yes"; then
|
AST_CHECK_PWLIB_BUILD([PWLib], [PWLIB],
|
||||||
PWLIB_LIB="-l{PLATFORM_PWLIB}"
|
[Define if your system has the PWLib libraries.],
|
||||||
if test "${PWLIB_DIR}" != ""; then
|
[#include "ptlib.h"],
|
||||||
PWLIB_LIB="-L${PWLIB_DIR}/lib ${PWLIB_LIB}"
|
[BOOL q = PTime::IsDaylightSavings();])
|
||||||
PWLIB_INCLUDE="-I${PWLIB_DIR}/include"
|
fi
|
||||||
fi
|
|
||||||
PBX_PWLIB=1
|
|
||||||
AC_DEFINE([HAVE_PWLIB], 1, [Define if your system has the pwlib libraries.])
|
|
||||||
elif test ! -z "${PWLIB_MANDATORY}"; then
|
|
||||||
AC_MSG_NOTICE(***)
|
|
||||||
AC_MSG_NOTICE(*** The PWLIB installation on this system appears to be broken.)
|
|
||||||
AC_MSG_NOTICE(*** Either correct the installation, or run configure)
|
|
||||||
AC_MSG_NOTICE(*** including --without-pwlib)
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "${USE_PWLIB}" != "no" -a "x${ac_cv_lib_PWLIB}" != "xyes" -a ! -z "${PWLIB_MANDATORY}"; then
|
||||||
|
AC_MSG_NOTICE(***)
|
||||||
|
AC_MSG_NOTICE(*** The PWLIB installation on this system appears to be broken.)
|
||||||
|
AC_MSG_NOTICE(*** Either correct the installation, or run configure)
|
||||||
|
AC_MSG_NOTICE(*** including --without-pwlib)
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "${PBX_PWLIB}" = "1" -a "${USE_OPENH323}" != "no" ; then
|
||||||
|
if test ! -z "${OPENH323_DIR}"; then
|
||||||
|
OPENH323DIR="${OPENH323_DIR}"
|
||||||
|
fi
|
||||||
|
AST_CHECK_OPENH323()
|
||||||
|
AST_CHECK_PWLIB_VERSION([OpenH323], [OPENH323], [openh323buildopts.h], [1], [17], [3])
|
||||||
|
AST_CHECK_OPENH323_BUILD()
|
||||||
|
PLATFORM_OPENH323="h323_${PWLIB_PLATFORM}_${OPENH323_SUFFIX}"
|
||||||
|
AST_CHECK_PWLIB_BUILD([OpenH323], [OPENH323],
|
||||||
|
[Define if your system has the OpenH323 libraries.],
|
||||||
|
[#include "ptlib.h"
|
||||||
|
#include "h323.h"
|
||||||
|
#include "h323ep.h"],
|
||||||
|
[H323EndPoint ep = H323EndPoint();],
|
||||||
|
[${PWLIB_INCLUDE}], [${PWLIB_LIB}])
|
||||||
|
fi
|
||||||
|
if test "${USE_OPENH323}" != "no" -a "x${ac_cv_lib_OPENH323}" != "xyes" -a ! -z "${OPENH323_MANDATORY}"; then
|
||||||
|
AC_MSG_NOTICE(***)
|
||||||
|
AC_MSG_NOTICE(*** The PWLIB installation on this system appears to be broken.)
|
||||||
|
AC_MSG_NOTICE(*** Either correct the installation, or run configure)
|
||||||
|
AC_MSG_NOTICE(*** including --without-pwlib)
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
AC_LANG_PUSH(C++)
|
AC_LANG_PUSH(C++)
|
||||||
|
|
||||||
if test "${USE_QT}" != "no"; then
|
if test "${USE_QT}" != "no"; then
|
||||||
|
@ -1000,7 +1010,7 @@ AC_SUBST(PBX_CURL)
|
||||||
AC_SUBST(CURL_INCLUDE)
|
AC_SUBST(CURL_INCLUDE)
|
||||||
AC_SUBST(CURL_LIB)
|
AC_SUBST(CURL_LIB)
|
||||||
|
|
||||||
AC_CONFIG_FILES([build_tools/menuselect-deps makeopts])
|
AC_CONFIG_FILES([build_tools/menuselect-deps makeopts channels/h323/Makefile])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
if test "x${silent}" != "xyes" ; then
|
if test "x${silent}" != "xyes" ; then
|
||||||
|
|
|
@ -52,6 +52,11 @@ the ones in static configuration.
|
||||||
With caching, the device stays in memory for a specified time. More
|
With caching, the device stays in memory for a specified time. More
|
||||||
information about this is to be found in the sip.conf sample file.
|
information about this is to be found in the sip.conf sample file.
|
||||||
|
|
||||||
|
* Realtime H.323 friends
|
||||||
|
------------------------
|
||||||
|
Like SIP realtime friends, H.323 friends aslo can be configured using
|
||||||
|
dynamic realtime objects.
|
||||||
|
|
||||||
* New function in the dial plan: The Realtime Switch
|
* New function in the dial plan: The Realtime Switch
|
||||||
----------------------------------------------------
|
----------------------------------------------------
|
||||||
The realtime switch is more than a port of functionality in v1.0 to the
|
The realtime switch is more than a port of functionality in v1.0 to the
|
||||||
|
|
|
@ -115,6 +115,13 @@ AST_EMBED_LDFLAGS:=$(foreach dep,$(EMBED_LDFLAGS),$(value $(dep)))
|
||||||
AST_EMBED_LIBS:=$(foreach dep,$(EMBED_LIBS),$(value $(dep)))
|
AST_EMBED_LIBS:=$(foreach dep,$(EMBED_LIBS),$(value $(dep)))
|
||||||
OBJS:=$(sort $(OBJS))
|
OBJS:=$(sort $(OBJS))
|
||||||
|
|
||||||
|
ifneq ($(wildcard ../channels/h323/Makefile.ast),)
|
||||||
|
include ../channels/h323/Makefile.ast
|
||||||
|
else
|
||||||
|
H323LDFLAGS=
|
||||||
|
H323LDLIBS=
|
||||||
|
endif
|
||||||
|
|
||||||
asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS)
|
asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS)
|
||||||
@$(ASTTOPDIR)/build_tools/make_build_h > $(ASTTOPDIR)/include/asterisk/build.h.tmp
|
@$(ASTTOPDIR)/build_tools/make_build_h > $(ASTTOPDIR)/include/asterisk/build.h.tmp
|
||||||
@if cmp -s $(ASTTOPDIR)/include/asterisk/build.h.tmp $(ASTTOPDIR)/include/asterisk/build.h ; then echo ; else \
|
@if cmp -s $(ASTTOPDIR)/include/asterisk/build.h.tmp $(ASTTOPDIR)/include/asterisk/build.h ; then echo ; else \
|
||||||
|
@ -123,7 +130,7 @@ asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS)
|
||||||
@rm -f $(ASTTOPDIR)/include/asterisk/build.h.tmp
|
@rm -f $(ASTTOPDIR)/include/asterisk/build.h.tmp
|
||||||
@$(CC) -c -o buildinfo.o $(CFLAGS) buildinfo.c
|
@$(CC) -c -o buildinfo.o $(CFLAGS) buildinfo.c
|
||||||
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
||||||
$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o asterisk $(ASTLINK) $(AST_EMBED_LDFLAGS) $(LDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS)
|
$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o asterisk $(ASTLINK) $(AST_EMBED_LDFLAGS) $(LDFLAGS) $(H323LDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS)
|
||||||
|
|
||||||
clean::
|
clean::
|
||||||
rm -f asterisk
|
rm -f asterisk
|
||||||
|
|
Reference in New Issue