dect
/
asterisk
Archived
13
0
Fork 0

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:
mattf 2006-09-19 17:07:22 +00:00
parent e61c86f66a
commit 42a59d0531
16 changed files with 3179 additions and 1526 deletions

View File

@ -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"

View File

@ -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])

View File

@ -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">

View File

@ -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@

View File

@ -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\"

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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