diff options
Diffstat (limited to 'channels/h323')
-rw-r--r-- | channels/h323/ast_h323.cxx | 137 | ||||
-rw-r--r-- | channels/h323/ast_h323.h | 28 | ||||
-rw-r--r-- | channels/h323/chan_h323.h | 1 | ||||
-rw-r--r-- | channels/h323/compat_h323.cxx | 1 | ||||
-rw-r--r-- | channels/h323/compat_h323.h | 2 |
5 files changed, 99 insertions, 70 deletions
diff --git a/channels/h323/ast_h323.cxx b/channels/h323/ast_h323.cxx index 0c31569f3..489cf7a12 100644 --- a/channels/h323/ast_h323.cxx +++ b/channels/h323/ast_h323.cxx @@ -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 @@ extern "C" { #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; @@ -86,13 +133,6 @@ static int channelsOpen; */ 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; class PAsteriskLog : public PObject, public iostream { @@ -177,36 +217,6 @@ static ostream &my_endl(ostream &os) (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() { PTrace::Initialise(PTrace::GetLevel(), NULL, traceOptions); @@ -2061,7 +2071,7 @@ PBoolean MyH323Connection::StartControlChannel(const H225_TransportAddress & h24 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 @@ void h323_end_point_create(void) { channelsOpen = 0; logstream = new PAsteriskLog(); - localProcess = new MyProcess(); - localProcess->Main(); + endPoint = new MyH323EndPoint(); } void h323_gk_urq(void) @@ -2359,6 +2368,33 @@ int h323_start_listener(int listenPort, struct sockaddr_in bindaddr) 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 @@ int h323_set_alias(struct oh323_alias *alias) 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; @@ -2409,6 +2445,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, * register aliases for the H.323 endpoint to respond to. */ @@ -2626,22 +2667,10 @@ int h323_hold_call(const char *token, int is_hold) 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; } diff --git a/channels/h323/ast_h323.h b/channels/h323/ast_h323.h index afc0f3d1b..b9e793c0f 100644 --- a/channels/h323/ast_h323.h +++ b/channels/h323/ast_h323.h @@ -151,26 +151,24 @@ protected: 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); - -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 @@ private: }; #endif -#include "compat_h323.h" - #endif /* !defined AST_H323_H */ diff --git a/channels/h323/chan_h323.h b/channels/h323/chan_h323.h index 95e8c491d..e121f02fb 100644 --- a/channels/h323/chan_h323.h +++ b/channels/h323/chan_h323.h @@ -242,6 +242,7 @@ extern "C" { 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); diff --git a/channels/h323/compat_h323.cxx b/channels/h323/compat_h323.cxx index 8eb73a98e..609d18e8a 100644 --- a/channels/h323/compat_h323.cxx +++ b/channels/h323/compat_h323.cxx @@ -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( diff --git a/channels/h323/compat_h323.h b/channels/h323/compat_h323.h index 53938350d..61076f1be 100644 --- a/channels/h323/compat_h323.h +++ b/channels/h323/compat_h323.h @@ -1,6 +1,8 @@ #ifndef COMPAT_H323_H #define COMPAT_H323_H +#include "ast_ptlib.h" + #if VERSION(OPENH323_MAJOR,OPENH323_MINOR,OPENH323_BUILD) < VERSION(1,17,3) /** * Workaround for broken (less than 1.17.3) OpenH323 stack to be able to |