mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@43582 65c4cc65-6c06-0410-ace0-fbb531ad65f3
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #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)
 | |
| 
 | |
| #endif /* !defined AST_H323_H */
 |