diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-01-19 00:19:29 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-01-19 00:19:29 +0000 |
commit | f8247040e6231c4b3b5099ea3a526348b7941566 (patch) | |
tree | 0cc92ad6ebf6ae49a62f6e7ef8ec819121d63630 /trunk/channels/h323/compat_h323.h | |
parent | d88e56c61ce2042544c1a8a71c93b69ab2e6ffba (diff) |
Creating tag for the release of asterisk-1.6.0-beta1v1.6.0-beta1
git-svn-id: http://svn.digium.com/svn/asterisk/tags/1.6.0-beta1@99163 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'trunk/channels/h323/compat_h323.h')
-rw-r--r-- | trunk/channels/h323/compat_h323.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/trunk/channels/h323/compat_h323.h b/trunk/channels/h323/compat_h323.h new file mode 100644 index 000000000..5437898f4 --- /dev/null +++ b/trunk/channels/h323/compat_h323.h @@ -0,0 +1,94 @@ +#ifndef COMPAT_H323_H +#define COMPAT_H323_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 + * make TCP connections from specific address + */ +class MyH323TransportTCP : public H323TransportTCP +{ + PCLASSINFO(MyH323TransportTCP, H323TransportTCP); + +public: + MyH323TransportTCP( + H323EndPoint & endpoint, ///< H323 End Point object + PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(), ///< Local interface to use + BOOL listen = FALSE ///< Flag for need to wait for remote to connect + ); + /**Connect to the remote party. + */ + virtual BOOL Connect(); +}; +#else +#define MyH323TransportTCP H323TransportTCP +#endif /* <VERSION(1,17,3) */ + +class MyH323TransportUDP: public H323TransportUDP +{ + PCLASSINFO(MyH323TransportUDP, H323TransportUDP); + +public: + MyH323TransportUDP(H323EndPoint &endpoint, + PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(), + WORD localPort = 0, + WORD remotePort = 0): H323TransportUDP(endpoint, binding, localPort, remotePort) + { + } + virtual BOOL DiscoverGatekeeper(H323Gatekeeper &, + H323RasPDU &, + const H323TransportAddress &); +protected: + PDECLARE_NOTIFIER(PThread, MyH323TransportUDP, DiscoverMain); + H323Gatekeeper *discoverGatekeeper; + H323RasPDU *discoverPDU; + const H323TransportAddress *discoverAddress; + BOOL discoverResult; + BOOL discoverReady; + PMutex discoverMutex; +}; + +template <class _Abstract_T, typename _Key_T = PString> +class MyPFactory: public PFactory<_Abstract_T, _Key_T> +{ +public: + template <class _Concrete_T> class Worker: public PFactory<_Abstract_T, _Key_T>::WorkerBase + { + public: + Worker(const _Key_T &_key, bool singleton = false) + :PFactory<_Abstract_T, _Key_T>::WorkerBase(singleton), key(_key) + { + PFactory<_Abstract_T, _Key_T>::Register(key, this); + } + ~Worker() + { + PFactory<_Abstract_T, _Key_T>::Unregister(key); + } + protected: + virtual _Abstract_T *Create(const _Key_T &) const { return new _Concrete_T; } + + private: + PString key; + }; +}; + +#ifdef H323_REGISTER_CAPABILITY +#undef H323_REGISTER_CAPABILITY +#endif +#define H323_REGISTER_CAPABILITY(cls, capName) static MyPFactory<H323Capability>::Worker<cls> cls##Factory(capName, true) + +#ifdef OPAL_MEDIA_FORMAT_DECLARE +#undef OPAL_MEDIA_FORMAT_DECLARE +#endif + +#define OPAL_MEDIA_FORMAT_DECLARE(classname, _fullName, _defaultSessionID, _rtpPayloadType, _needsJitter,_bandwidth, _frameSize, _frameTime, _timeUnits, _timeStamp) \ +class classname : public OpalMediaFormat \ +{ \ + public: \ + classname() \ + : OpalMediaFormat(_fullName, _defaultSessionID, _rtpPayloadType, _needsJitter, _bandwidth, \ + _frameSize, _frameTime, _timeUnits, _timeStamp){} \ +}; \ +static MyPFactory<OpalMediaFormat>::Worker<classname> classname##Factory(_fullName, true) + +#endif /* !defined AST_H323_H */ |