[asterisk-commits] jpeeler: trunk r182722 - in /trunk: ./ autoconf/ channels/ channels/h323/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Mar 17 15:47:40 CDT 2009
Author: jpeeler
Date: Tue Mar 17 15:47:31 2009
New Revision: 182722
URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=182722
Log:
Allow H.323 Plus library to be used in addition to the OpenH323 library
Chan_h323 can now be compiled against both the previously supported versions of
OpenH323 as well as the current H.323 Plus (version 1.20.2). The configure
script has been modified to look in the default install location of h323 to
hopefully help avoid using the environment variables OPENH323DIR and PWLIBDIR.
Also, the CLI command "h323 show version" has been added which indicates which
version of h323 is in use.
(closes issue #11261)
Reported by: vhatz
Patches:
asterisk-1.6.0.6-h323plus.patch uploaded by jthurman (license 614)
Modified:
trunk/autoconf/ast_check_openh323.m4
trunk/channels/chan_h323.c
trunk/channels/h323/ast_h323.cxx
trunk/channels/h323/ast_h323.h
trunk/channels/h323/chan_h323.h
trunk/channels/h323/compat_h323.cxx
trunk/channels/h323/compat_h323.h
trunk/configure
Modified: trunk/autoconf/ast_check_openh323.m4
URL: http://svn.digium.com/svn-view/asterisk/trunk/autoconf/ast_check_openh323.m4?view=diff&rev=182722&r1=182721&r2=182722
==============================================================================
--- trunk/autoconf/ast_check_openh323.m4 (original)
+++ trunk/autoconf/ast_check_openh323.m4 Tue Mar 17 15:47:31 2009
@@ -16,19 +16,19 @@
else
saved_cppflags="${CPPFLAGS}"
CPPFLAGS="${CPPFLAGS} -I${HOME}/openh323/include -I${PWLIB_INCDIR}"
- AC_CHECK_HEADER(${HOME}/openh323/include/h323.h, HAS_OPENH323=1, )
+ AC_CHECK_HEADER(${HOME}/openh323/include/h323.h, HAS_OPENH323=1, , [#include <ptlib.h>])
CPPFLAGS="${saved_cppflags}"
if test "${HAS_OPENH323:-unset}" != "unset" ; then
OPENH323DIR="${HOME}/openh323"
else
saved_cppflags="${CPPFLAGS}"
CPPFLAGS="${CPPFLAGS} -I/usr/local/include/openh323 -I${PWLIB_INCDIR}"
- AC_CHECK_HEADER(/usr/local/include/openh323/h323.h, HAS_OPENH323=1, )
+ AC_CHECK_HEADER(/usr/local/include/openh323/h323.h, HAS_OPENH323=1, , [#include <ptlib.h>])
CPPFLAGS="${saved_cppflags}"
if test "${HAS_OPENH323:-unset}" != "unset" ; then
OPENH323DIR="/usr/local/share/openh323"
OPENH323_INCDIR="/usr/local/include/openh323"
- if test "x$LIB64" != "x"; then
+ if test "x$LIB64" != "x" && test -d "/usr/local/lib64"; then
OPENH323_LIBDIR="/usr/local/lib64"
else
OPENH323_LIBDIR="/usr/local/lib"
@@ -41,7 +41,7 @@
if test "${HAS_OPENH323:-unset}" != "unset" ; then
OPENH323DIR="/usr/share/openh323"
OPENH323_INCDIR="/usr/include/openh323"
- if test "x$LIB64" != "x"; then
+ if test "x$LIB64" != "x" && test -d "/usr/local/lib64"; then
OPENH323_LIBDIR="/usr/lib64"
else
OPENH323_LIBDIR="/usr/lib"
@@ -77,7 +77,12 @@
OPENH323_SUFFIX=
prefixes="h323_${PWLIB_PLATFORM}_ h323_ openh323"
for pfx in $prefixes; do
+ #files=`ls -l /usr/local/lib/lib${pfx}*.so* 2>/dev/null`
files=`ls -l ${OPENH323_LIBDIR}/lib${pfx}*.so* 2>/dev/null`
+ if test -z "$files"; then
+ # check the default location
+ files=`ls -l /usr/local/lib/lib${pfx}*.so* 2>/dev/null`
+ fi
libfile=
if test -n "$files"; then
for f in $files; do
Modified: trunk/channels/chan_h323.c
URL: http://svn.digium.com/svn-view/asterisk/trunk/channels/chan_h323.c?view=diff&rev=182722&r1=182721&r2=182722
==============================================================================
--- trunk/channels/chan_h323.c (original)
+++ trunk/channels/chan_h323.c Tue Mar 17 15:47:31 2009
@@ -2729,12 +2729,34 @@
return CLI_SUCCESS;
}
+static char *handle_cli_h323_show_version(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+ switch (cmd) {
+ case CLI_INIT:
+ e->command = "h323 show version";
+ e->usage =
+ "Usage: h323 show version\n"
+ " Show the version of the H.323 library in use\n";
+ return NULL;
+ case CLI_GENERATE:
+ return NULL;
+ }
+
+ if (a->argc != 3)
+ return CLI_SHOWUSAGE;
+
+ h323_show_version();
+
+ return CLI_SUCCESS;
+}
+
static struct ast_cli_entry cli_h323[] = {
- AST_CLI_DEFINE(handle_cli_h323_set_trace, "Enable/Disable H.323 Stack Tracing"),
- AST_CLI_DEFINE(handle_cli_h323_set_debug, "Enable/Disable H.323 Debugging"),
- AST_CLI_DEFINE(handle_cli_h323_cycle_gk, "Manually re-register with the Gatekeper"),
- AST_CLI_DEFINE(handle_cli_h323_hangup, "Manually try to hang up a call"),
- AST_CLI_DEFINE(handle_cli_h323_show_tokens, "Show all active call tokens"),
+ AST_CLI_DEFINE(handle_cli_h323_set_trace, "Enable/Disable H.323 Stack Tracing"),
+ AST_CLI_DEFINE(handle_cli_h323_set_debug, "Enable/Disable H.323 Debugging"),
+ AST_CLI_DEFINE(handle_cli_h323_cycle_gk, "Manually re-register with the Gatekeper"),
+ AST_CLI_DEFINE(handle_cli_h323_hangup, "Manually try to hang up a call"),
+ AST_CLI_DEFINE(handle_cli_h323_show_tokens, "Show all active call tokens"),
+ AST_CLI_DEFINE(handle_cli_h323_show_version, "Show the version of the H.323 library in use"),
};
static void delete_users(void)
Modified: trunk/channels/h323/ast_h323.cxx
URL: http://svn.digium.com/svn-view/asterisk/trunk/channels/h323/ast_h323.cxx?view=diff&rev=182722&r1=182721&r2=182722
==============================================================================
--- trunk/channels/h323/ast_h323.cxx (original)
+++ trunk/channels/h323/ast_h323.cxx Tue Mar 17 15:47:31 2009
@@ -30,6 +30,7 @@
*/
#include "asterisk.h"
+#define VERSION(a,b,c) ((a)*10000+(b)*100+(c))
#include <arpa/inet.h>
@@ -42,6 +43,23 @@
#include <h323pdu.h>
#include <h323neg.h>
#include <mediafmt.h>
+
+/* H323 Plus */
+#if VERSION(OPENH323_MAJOR, OPENH323_MINOR, OPENH323_BUILD) > VERSION(1,19,4)
+
+#ifdef H323_H450
+#include "h450/h4501.h"
+#include "h450/h4504.h"
+#include "h450/h45011.h"
+#include "h450/h450pdu.h"
+#endif
+
+#ifdef H323_H460
+#include <h460/h4601.h>
+#endif
+
+#else /* !H323 Plus */
+
#include <lid.h>
#ifdef H323_H450
#include "h4501.h"
@@ -50,6 +68,10 @@
#include "h450pdu.h"
#endif
+#endif /* H323 Plus */
+
+#include "compat_h323.h"
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -66,15 +88,40 @@
#include "cisco-h225.h"
#include "caps_h323.h"
-#if PWLIB_MAJOR * 10000 + PWLIB_MINOR * 100 + PWLIB_BUILD >= 1 * 10000 + 12 * 100 + 0
+#if VERSION(PWLIB_MAJOR, PWLIB_MINOR, PWLIB_BUILD) >= VERSION(1,12,0)
#define SKIP_PWLIB_PIPE_BUG_WORKAROUND 1
#endif
+///////////////////////////////////////////////
+/* We have to have a PProcess running for the life of the instance to give
+ * h323plus a static instance of PProcess to get system information.
+ * This class is defined with PDECLARE_PROCESS(). See pprocess.h from pwlib.
+ */
+
/* PWlib Required Components */
+#if VERSION(OPENH323_MAJOR, OPENH323_MINOR, OPENH323_BUILD) > VERSION(1,19,4)
+#define MAJOR_VERSION 1
+#define MINOR_VERSION 19
+#define BUILD_TYPE ReleaseCode
+#define BUILD_NUMBER 6
+#else
#define MAJOR_VERSION 1
#define MINOR_VERSION 0
#define BUILD_TYPE ReleaseCode
#define BUILD_NUMBER 0
+#endif
+
+const char *h323manufact = "The NuFone Networks";
+const char *h323product = "H.323 Channel Driver for Asterisk";
+
+PDECLARE_PROCESS(MyProcess,PProcess,h323manufact,h323product,MAJOR_VERSION,MINOR_VERSION,BUILD_TYPE,BUILD_NUMBER)
+static MyProcess localProcess; // active for the life of the DLL
+/* void MyProcess::Main()
+{
+}
+*/
+////////////////////////////////////////////////
+
/** Counter for the number of connections */
static int channelsOpen;
@@ -85,13 +132,6 @@
* FIXME: Singleton this, for safety
*/
static MyH323EndPoint *endPoint = NULL;
-
-/** PWLib entry point */
-static MyProcess *localProcess = NULL;
-
-#ifndef SKIP_PWLIB_PIPE_BUG_WORKAROUND
-static int _timerChangePipe[2];
-#endif
static unsigned traceOptions = PTrace::Timestamp | PTrace::Thread | PTrace::FileAndLine;
@@ -176,36 +216,6 @@
#define cout \
(logstream ? (PTrace::ClearOptions((unsigned)-1), PTrace::Begin(0, __FILE__, __LINE__)) : std::cout)
#define endl my_endl
-
-/* Special class designed to call cleanup code on module destruction */
-class MyH323_Shutdown {
- public:
- MyH323_Shutdown() { };
- ~MyH323_Shutdown()
- {
- h323_end_process();
- };
-};
-
-MyProcess::MyProcess(): PProcess("The NuFone Networks",
- "H.323 Channel Driver for Asterisk",
- MAJOR_VERSION, MINOR_VERSION, BUILD_TYPE, BUILD_NUMBER)
-{
- /* Call shutdown when module being unload or asterisk has been stopped */
- static MyH323_Shutdown x;
-
- /* Fix missed one in PWLib */
- PX_firstTimeStart = FALSE;
- Resume();
-}
-
-MyProcess::~MyProcess()
-{
-#ifndef SKIP_PWLIB_PIPE_BUG_WORKAROUND
- _timerChangePipe[0] = timerChangePipe[0];
- _timerChangePipe[1] = timerChangePipe[1];
-#endif
-}
void MyProcess::Main()
{
@@ -2061,7 +2071,7 @@
cout << "Using " << addr << " for outbound H.245 transport" << endl;
controlChannel = new MyH323TransportTCP(endpoint, addr);
} else
- controlChannel = new H323TransportTCP(endpoint);
+ controlChannel = new MyH323TransportTCP(endpoint);
if (!controlChannel->SetRemoteAddress(h245Address)) {
PTRACE(1, "H225\tCould not extract H245 address");
delete controlChannel;
@@ -2250,8 +2260,7 @@
{
channelsOpen = 0;
logstream = new PAsteriskLog();
- localProcess = new MyProcess();
- localProcess->Main();
+ endPoint = new MyH323EndPoint();
}
void h323_gk_urq(void)
@@ -2359,6 +2368,33 @@
return 0;
};
+/* Addition of functions just to make the channel driver compile with H323Plus */
+#if VERSION(OPENH323_MAJOR, OPENH323_MINOR, OPENH323_BUILD) > VERSION(1,19,4)
+/* Alternate RTP port information for Same NAT */
+BOOL MyH323_ExternalRTPChannel::OnReceivedAltPDU(const H245_ArrayOf_GenericInformation & alternate )
+{
+ return TRUE;
+}
+
+/* Alternate RTP port information for Same NAT */
+BOOL MyH323_ExternalRTPChannel::OnSendingAltPDU(H245_ArrayOf_GenericInformation & alternate) const
+{
+ return TRUE;
+}
+
+/* Alternate RTP port information for Same NAT */
+void MyH323_ExternalRTPChannel::OnSendOpenAckAlt(H245_ArrayOf_GenericInformation & alternate) const
+{
+}
+
+/* Alternate RTP port information for Same NAT */
+BOOL MyH323_ExternalRTPChannel::OnReceivedAckAltPDU(const H245_ArrayOf_GenericInformation & alternate)
+{
+ return TRUE;
+}
+#endif
+
+
int h323_set_alias(struct oh323_alias *alias)
{
char *p;
@@ -2374,7 +2410,7 @@
cout << "== Adding alias \"" << h323id << "\" to endpoint" << endl;
endPoint->AddAliasName(h323id);
- endPoint->RemoveAliasName(localProcess->GetUserName());
+ endPoint->RemoveAliasName(PProcess::Current().GetName());
if (!e164.IsEmpty()) {
cout << "== Adding E.164 \"" << e164 << "\" to endpoint" << endl;
@@ -2407,6 +2443,11 @@
void h323_show_tokens(void)
{
cout << "Current call tokens: " << setprecision(2) << endPoint->GetAllConnections() << endl;
+}
+
+void h323_show_version(void)
+{
+ cout << "H.323 version: " << OPENH323_MAJOR << "." << OPENH323_MINOR << "." << OPENH323_BUILD << endl;
}
/** Establish Gatekeeper communiations, if so configured,
@@ -2626,22 +2667,10 @@
void h323_end_process(void)
{
if (endPoint) {
- endPoint->ClearAllCalls();
- endPoint->RemoveListener(NULL);
delete endPoint;
endPoint = NULL;
}
- if (localProcess) {
- delete localProcess;
- localProcess = NULL;
-#ifndef SKIP_PWLIB_PIPE_BUG_WORKAROUND
- close(_timerChangePipe[0]);
- close(_timerChangePipe[1]);
-#endif
- }
if (logstream) {
- PTrace::SetLevel(0);
- PTrace::SetStream(&cout);
delete logstream;
logstream = NULL;
}
Modified: trunk/channels/h323/ast_h323.h
URL: http://svn.digium.com/svn-view/asterisk/trunk/channels/h323/ast_h323.h?view=diff&rev=182722&r1=182721&r2=182722
==============================================================================
--- trunk/channels/h323/ast_h323.h (original)
+++ trunk/channels/h323/ast_h323.h Tue Mar 17 15:47:31 2009
@@ -151,26 +151,24 @@
PIPSocket::Address localIpAddr;
PIPSocket::Address remoteIpAddr;
+ /* Additional functions in order to have chan_h323 compile with H323Plus */
+#if VERSION(OPENH323_MAJOR, OPENH323_MINOR, OPENH323_BUILD) > VERSION(1,19,4)
+ BOOL OnReceivedAltPDU(const H245_ArrayOf_GenericInformation & alternate );
+ BOOL OnSendingAltPDU(H245_ArrayOf_GenericInformation & alternate) const;
+ void OnSendOpenAckAlt(H245_ArrayOf_GenericInformation & alternate) const;
+ BOOL OnReceivedAckAltPDU(const H245_ArrayOf_GenericInformation & alternate);
+#endif
WORD localPort;
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);
+#ifdef H323_H450
-public:
- MyProcess();
- ~MyProcess();
- void Main();
-};
-
-#ifdef H323_H450
+#if VERSION(OPENH323_MAJOR, OPENH323_MINOR, OPENH323_BUILD) > VERSION(1,19,4)
+#include <h450/h450pdu.h>
+#else
#include <h450pdu.h>
+#endif
class MyH4504Handler : public H4504Handler
{
@@ -186,6 +184,4 @@
};
#endif
-#include "compat_h323.h"
-
#endif /* !defined AST_H323_H */
Modified: trunk/channels/h323/chan_h323.h
URL: http://svn.digium.com/svn-view/asterisk/trunk/channels/h323/chan_h323.h?view=diff&rev=182722&r1=182721&r2=182722
==============================================================================
--- trunk/channels/h323/chan_h323.h (original)
+++ trunk/channels/h323/chan_h323.h Tue Mar 17 15:47:31 2009
@@ -242,6 +242,7 @@
int h323_set_gk(int, char *, char *);
void h323_set_id(char *);
void h323_show_tokens(void);
+ void h323_show_version(void);
/* H323 listener related funcions */
int h323_start_listener(int, struct sockaddr_in);
Modified: trunk/channels/h323/compat_h323.cxx
URL: http://svn.digium.com/svn-view/asterisk/trunk/channels/h323/compat_h323.cxx?view=diff&rev=182722&r1=182721&r2=182722
==============================================================================
--- trunk/channels/h323/compat_h323.cxx (original)
+++ trunk/channels/h323/compat_h323.cxx Tue Mar 17 15:47:31 2009
@@ -33,6 +33,7 @@
#include <transports.h>
#include "ast_h323.h"
+#include "compat_h323.h"
#if VERSION(OPENH323_MAJOR,OPENH323_MINOR,OPENH323_BUILD) < VERSION(1,17,3)
MyH323TransportTCP::MyH323TransportTCP(
Modified: trunk/channels/h323/compat_h323.h
URL: http://svn.digium.com/svn-view/asterisk/trunk/channels/h323/compat_h323.h?view=diff&rev=182722&r1=182721&r2=182722
==============================================================================
--- trunk/channels/h323/compat_h323.h (original)
+++ trunk/channels/h323/compat_h323.h Tue Mar 17 15:47:31 2009
@@ -1,5 +1,7 @@
#ifndef COMPAT_H323_H
#define COMPAT_H323_H
+
+#include "ast_ptlib.h"
#if VERSION(OPENH323_MAJOR,OPENH323_MINOR,OPENH323_BUILD) < VERSION(1,17,3)
/**
More information about the asterisk-commits
mailing list