manager.h

Go to the documentation of this file.
00001 /*
00002  * manager.h
00003  *
00004  * OPAL system manager.
00005  *
00006  * Open Phone Abstraction Library (OPAL)
00007  * Formally known as the Open H323 project.
00008  *
00009  * Copyright (c) 2001 Equivalence Pty. Ltd.
00010  *
00011  * The contents of this file are subject to the Mozilla Public License
00012  * Version 1.0 (the "License"); you may not use this file except in
00013  * compliance with the License. You may obtain a copy of the License at
00014  * http://www.mozilla.org/MPL/
00015  *
00016  * Software distributed under the License is distributed on an "AS IS"
00017  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00018  * the License for the specific language governing rights and limitations
00019  * under the License.
00020  *
00021  * The Original Code is Open Phone Abstraction Library.
00022  *
00023  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
00024  *
00025  * Contributor(s): ______________________________________.
00026  *
00027  * $Revision: 30165 $
00028  * $Author: ededu $
00029  * $Date: 2013-07-11 08:43:31 -0500 (Thu, 11 Jul 2013) $
00030  */
00031 
00032 #ifndef OPAL_OPAL_MANAGER_H
00033 #define OPAL_OPAL_MANAGER_H
00034 
00035 #ifdef P_USE_PRAGMA
00036 #pragma interface
00037 #endif
00038 
00039 #include <opal/buildopts.h>
00040 
00041 #include <opal/pres_ent.h>
00042 #include <opal/call.h>
00043 #include <opal/connection.h> //OpalConnection::AnswerCallResponse
00044 #include <opal/guid.h>
00045 #include <codec/silencedetect.h>
00046 #include <codec/echocancel.h>
00047 #include <ptclib/pstun.h>
00048 #include <ptclib/url.h>
00049 
00050 #if OPAL_VIDEO
00051 #include <ptlib/videoio.h>
00052 #endif
00053 
00054 class OpalEndPoint;
00055 class OpalMediaPatch;
00056 
00057 
00074 class OpalManager : public PObject
00075 {
00076     PCLASSINFO(OpalManager, PObject);
00077   public:
00082     OpalManager();
00083 
00088     ~OpalManager();
00090 
00100     void AttachEndPoint(
00101       OpalEndPoint * endpoint,    
00102       const PString & prefix = PString::Empty()  
00103     );
00104 
00108     void DetachEndPoint(
00109       const PString & prefix
00110     );
00111     void DetachEndPoint(
00112       OpalEndPoint * endpoint
00113     );
00114 
00117     OpalEndPoint * FindEndPoint(
00118       const PString & prefix
00119     );
00120 
00123     PList<OpalEndPoint> GetEndPoints() const;
00124 
00130     void ShutDownEndpoints();
00132 
00151     virtual PSafePtr<OpalCall> SetUpCall(
00152       const PString & partyA,       
00153       const PString & partyB,       
00154       void * userData = NULL,       
00155       unsigned options = 0,         
00156       OpalConnection::StringOptions * stringOptions = NULL 
00157     );
00158     virtual PBoolean SetUpCall(
00159       const PString & partyA,       
00160       const PString & partyB,       
00161       PString & token,              
00162       void * userData = NULL,       
00163       unsigned options = 0,         
00164       OpalConnection::StringOptions * stringOptions = NULL 
00165     );
00166 
00172     virtual PBoolean HasCall(
00173       const PString & token  
00174     ) { return activeCalls.FindWithLock(token, PSafeReference) != NULL; }
00175 
00178     PINDEX GetCallCount() const { return activeCalls.GetSize(); }
00179 
00182      PArray<PString> GetAllCalls() const { return activeCalls.GetKeys(); }
00183 
00192     PSafePtr<OpalCall> FindCallWithLock(
00193       const PString & token,  
00194       PSafetyMode mode = PSafeReadWrite 
00195     ) { return activeCalls.FindWithLock(token, mode); }
00196 
00205     virtual void OnEstablishedCall(
00206       OpalCall & call   
00207     );
00208 
00215     virtual PBoolean IsCallEstablished(
00216       const PString & token  
00217     );
00218 
00228     virtual PBoolean ClearCall(
00229       const PString & token,    
00230       OpalConnection::CallEndReason reason = OpalConnection::EndedByLocalUser, 
00231       PSyncPoint * sync = NULL  
00232     );
00233 
00241     virtual PBoolean ClearCallSynchronous(
00242       const PString & token,    
00243       OpalConnection::CallEndReason reason = OpalConnection::EndedByLocalUser 
00244     );
00245 
00251     virtual void ClearAllCalls(
00252       OpalConnection::CallEndReason reason = OpalConnection::EndedByLocalUser, 
00253       PBoolean wait = true   
00254     );
00255 
00269     virtual void OnClearedCall(
00270       OpalCall & call   
00271     );
00272 
00281     virtual OpalCall * CreateCall(
00282       void * userData            
00283     );
00284     OpalCall * InternalCreateCall();
00285 
00294     virtual void DestroyCall(
00295       OpalCall * call
00296     );
00297 
00302     virtual PString GetNextToken(char prefix);
00304 
00313     virtual PSafePtr<OpalPresentity> AddPresentity(
00314       const PString & presentity  
00315     );
00316 
00319     virtual PSafePtr<OpalPresentity> GetPresentity(
00320       const PString & presentity,         
00321       PSafetyMode mode = PSafeReference   
00322     );
00323 
00326     virtual PStringList GetPresentities() const;
00327 
00330     virtual bool RemovePresentity(
00331       const PString & presentity  
00332     );
00334 
00339     virtual PBoolean Message(
00340       const PString & to, 
00341       const PString & body
00342     );
00343     virtual PBoolean Message(
00344       const PURL & to, 
00345       const PString & type,
00346       const PString & body,
00347       PURL & from, 
00348       PString & conversationId
00349     );
00350     virtual PBoolean Message(
00351       OpalIM & message
00352     );
00353 
00356     virtual void OnMessageReceived(
00357       const OpalIM & message
00358     );
00359 
00361 
00398     virtual PSafePtr<OpalConnection> MakeConnection(
00399       OpalCall & call,                   
00400       const PString & party,             
00401       void * userData = NULL,            
00402       unsigned int options = 0,          
00403       OpalConnection::StringOptions * stringOptions = NULL 
00404     );
00405 
00411     virtual void OnNewConnection(
00412       OpalConnection & connection   
00413     );
00414 
00441     virtual PBoolean OnIncomingConnection(
00442       OpalConnection & connection,   
00443       unsigned options,              
00444       OpalConnection::StringOptions * stringOptions 
00445     );
00446 
00453     virtual bool OnRouteConnection(
00454       PStringSet & routesTried,     
00455       const PString & a_party,      
00456       const PString & b_party,      
00457       OpalCall & call,              
00458       unsigned options,             
00459       OpalConnection::StringOptions * stringOptions 
00460     );
00461 
00477     virtual void OnProceeding(
00478       OpalConnection & connection   
00479     );
00480 
00497     virtual void OnAlerting(
00498       OpalConnection & connection   
00499     );
00500 
00517     virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00518       OpalConnection & connection,    
00519        const PString & caller         
00520     );
00521 
00533     virtual void OnConnected(
00534       OpalConnection & connection   
00535     );
00536 
00550     virtual void OnEstablished(
00551       OpalConnection & connection   
00552     );
00553 
00569     virtual void OnReleased(
00570       OpalConnection & connection   
00571     );
00572     
00579     virtual void OnHold(
00580       OpalConnection & connection,   
00581       bool fromRemote,               
00582       bool onHold                    
00583     );
00584     virtual void OnHold(OpalConnection & connection); // For backward compatibility
00585 
00590     virtual PBoolean OnForwarded(
00591       OpalConnection & connection,  
00592       const PString & remoteParty         
00593     );
00594 
00640     virtual bool OnTransferNotify(
00641       OpalConnection & connection,  
00642       const PStringToString & info  
00643     );
00645 
00646 
00656     virtual OpalMediaFormatList GetCommonMediaFormats(
00657       bool transportable,  
00658       bool pcmAudio        
00659     ) const;
00660 
00670     virtual void AdjustMediaFormats(
00671       bool local,                         
00672       const OpalConnection & connection,  
00673       OpalMediaFormatList & mediaFormats  
00674     ) const;
00675 
00678     virtual PBoolean IsMediaBypassPossible(
00679       const OpalConnection & source,      
00680       const OpalConnection & destination, 
00681       unsigned sessionID                  
00682     ) const;
00683 
00699     virtual PBoolean OnOpenMediaStream(
00700       OpalConnection & connection,  
00701       OpalMediaStream & stream    
00702     );
00703 
00712         virtual RTP_UDP * CreateRTPSession (const RTP_Session::Params & params);
00713 
00721     virtual void OnRTPStatistics(
00722       const OpalConnection & connection,  
00723       const RTP_Session & session         
00724     );
00725 
00742     virtual bool OnLocalRTP(
00743       OpalConnection & connection1, 
00744       OpalConnection & connection2, 
00745       unsigned sessionID,           
00746       bool opened                   
00747     ) const;
00748 
00774     bool SetMediaPassThrough(
00775       const PString & token1, 
00776       const PString & token2, 
00777       bool bypass,            
00778       unsigned sessionID = 0, 
00779       bool network  = true    
00780     );
00781     static bool SetMediaPassThrough(
00782       OpalConnection & connection1, 
00783       OpalConnection & connection2, 
00784       bool bypass,                  
00785       unsigned sessionID = 0        
00786     );
00787 
00792     virtual void OnClosedMediaStream(
00793       const OpalMediaStream & stream     
00794     );
00795 
00796 #if OPAL_VIDEO
00797 
00799     virtual PBoolean CreateVideoInputDevice(
00800       const OpalConnection & connection,    
00801       const OpalMediaFormat & mediaFormat,  
00802       PVideoInputDevice * & device,         
00803       PBoolean & autoDelete                     
00804     );
00805 
00809     virtual PBoolean CreateVideoOutputDevice(
00810       const OpalConnection & connection,    
00811       const OpalMediaFormat & mediaFormat,  
00812       PBoolean preview,                         
00813       PVideoOutputDevice * & device,        
00814       PBoolean & autoDelete                     
00815     );
00816 #endif
00817 
00825     virtual OpalMediaPatch * CreateMediaPatch(
00826       OpalMediaStream & source,         
00827       PBoolean requiresPatchThread = true  
00828     );
00829 
00836     virtual void OnStartMediaPatch(
00837       OpalConnection & connection,  
00838       OpalMediaPatch & patch        
00839     );
00840 
00843     virtual void OnStopMediaPatch(
00844       OpalConnection & connection,  
00845       OpalMediaPatch & patch        
00846     );
00848 
00856     virtual void OnUserInputString(
00857       OpalConnection & connection,  
00858       const PString & value         
00859     );
00860 
00867     virtual void OnUserInputTone(
00868       OpalConnection & connection,  
00869       char tone,                    
00870       int duration                  
00871     );
00872 
00875     virtual PString ReadUserInput(
00876       OpalConnection & connection,        
00877       const char * terminators = "#\r\n", 
00878       unsigned lastDigitTimeout = 4,      
00879       unsigned firstDigitTimeout = 30     
00880     );
00882 
00885 
00886     enum MessageWaitingType { 
00887       NoMessageWaiting,
00888       VoiceMessageWaiting, 
00889       FaxMessageWaiting,
00890       PagerMessageWaiting,
00891       MultimediaMessageWaiting,
00892       TextMessageWaiting,
00893       NumMessageWaitingTypes
00894     };
00895 
00906     virtual void OnMWIReceived(
00907       const PString & party,    
00908       MessageWaitingType type,  
00909       const PString & extraInfo 
00910     );
00911     
00912     
00913     class RouteEntry : public PObject
00914     {
00915         PCLASSINFO(RouteEntry, PObject);
00916       public:
00917         RouteEntry(const PString & pat, const PString & dest);
00918         void PrintOn(ostream & strm) const;
00919         PString            pattern;
00920         PString            destination;
00921         PRegularExpression regex;
00922     };
00923     PARRAY(RouteTable, RouteEntry);
00924 
01035     virtual PBoolean AddRouteEntry(
01036       const PString & spec  
01037     );
01038 
01045     PBoolean SetRouteTable(
01046       const PStringArray & specs  
01047     );
01048 
01053     void SetRouteTable(
01054       const RouteTable & table  
01055     );
01056 
01059     const RouteTable & GetRouteTable() const { return m_routeTable; }
01060 
01068     virtual PString ApplyRouteTable(
01069       const PString & source,      
01070       const PString & destination, 
01071       PINDEX & entry               
01072     );
01074 
01075 #if OPAL_HAS_MIXER
01076 
01086     virtual PBoolean StartRecording(
01087       const PString & callToken,  
01088       const PFilePath & filename, 
01089       const OpalRecordManager::Options & options = false 
01090     );
01091 
01094     virtual bool IsRecording(
01095       const PString & callToken   
01096     );
01097 
01102     virtual bool StopRecording(
01103       const PString & callToken   
01104     );
01105 
01107 #endif
01108 
01113     const OpalProductInfo & GetProductInfo() const { return productInfo; }
01114 
01117     void SetProductInfo(
01118       const OpalProductInfo & info, 
01119       bool updateAll = true         
01120     );
01121 
01124     const PString & GetDefaultUserName() const { return defaultUserName; }
01125 
01128     void SetDefaultUserName(
01129       const PString & name,   
01130       bool updateAll = true   
01131     );
01132 
01135     const PString & GetDefaultDisplayName() const { return defaultDisplayName; }
01136 
01139     void SetDefaultDisplayName(
01140       const PString & name,   
01141       bool updateAll = true   
01142     );
01143 
01144 #if OPAL_VIDEO
01145 
01146     //
01147     // these functions are deprecated and used only for backwards compatibility
01148     // applications should use OpalConnection::GetAutoStart() to check whether
01149     // a specific media type can be auto-started
01150     //
01151 
01154     bool CanAutoStartReceiveVideo() const { return (OpalMediaType::Video().GetAutoStart()&OpalMediaType::Receive) != 0; }
01155 
01158     void SetAutoStartReceiveVideo(bool can) { OpalMediaType::Video().GetDefinition()->SetAutoStart(OpalMediaType::Receive, can); }
01159 
01162     bool CanAutoStartTransmitVideo() const { return (OpalMediaType::Video().GetAutoStart()&OpalMediaType::Transmit) != 0; }
01163 
01166     void SetAutoStartTransmitVideo(bool can) { OpalMediaType::Video().GetDefinition()->SetAutoStart(OpalMediaType::Transmit, can); }
01167 
01168 #endif
01169 
01176     virtual PBoolean IsLocalAddress(
01177       const PIPSocket::Address & remoteAddress
01178     ) const;
01179 
01197     virtual PBoolean IsRTPNATEnabled(
01198       OpalConnection & connection,            
01199       const PIPSocket::Address & localAddr,   
01200       const PIPSocket::Address & peerAddr,    
01201       const PIPSocket::Address & signalAddr,  
01202       PBoolean incoming                       
01203     );
01204 
01211     virtual PBoolean TranslateIPAddress(
01212       PIPSocket::Address & localAddress,
01213       const PIPSocket::Address & remoteAddress
01214     );
01215 
01218     const PString & GetTranslationHost() const { return translationHost; }
01219 
01222     bool SetTranslationHost(
01223       const PString & host
01224     );
01225 
01228     const PIPSocket::Address & GetTranslationAddress() const { return translationAddress; }
01229 
01232     void SetTranslationAddress(
01233       const PIPSocket::Address & address
01234     );
01235 
01241     virtual PNatMethod * GetNatMethod(
01242       const PIPSocket::Address & remoteAddress = PIPSocket::GetDefaultIpAny()
01243     ) const;
01244 
01249     PSTUNClient::NatTypes SetSTUNServer(
01250       const PString & server
01251     );
01252 
01255     const PString & GetSTUNServer() const { return stunServer; }
01256 
01259     PSTUNClient * GetSTUNClient() const { return stun; }
01260 
01263     WORD GetTCPPortBase() const { return tcpPorts.base; }
01264 
01267     WORD GetTCPPortMax() const { return tcpPorts.max; }
01268 
01271     void SetTCPPorts(unsigned tcpBase, unsigned tcpMax);
01272 
01275     WORD GetNextTCPPort();
01276 
01279     WORD GetUDPPortBase() const { return udpPorts.base; }
01280 
01283     WORD GetUDPPortMax() const { return udpPorts.max; }
01284 
01287     void SetUDPPorts(unsigned udpBase, unsigned udpMax);
01288 
01291     WORD GetNextUDPPort();
01292 
01295     WORD GetRtpIpPortBase() const { return rtpIpPorts.base; }
01296 
01299     WORD GetRtpIpPortMax() const { return rtpIpPorts.max; }
01300 
01303     void SetRtpIpPorts(unsigned udpBase, unsigned udpMax);
01304 
01307     WORD GetRtpIpPortPair();
01308 
01311     BYTE GetMediaTypeOfService() const { return m_defaultMediaTypeOfService; }
01312 
01315     void SetMediaTypeOfService(unsigned tos) { m_defaultMediaTypeOfService = (BYTE)tos; }
01316 
01317     // For backward compatibility
01318     BYTE P_DEPRECATED GetRtpIpTypeofService() const { return m_defaultMediaTypeOfService; }
01319     void P_DEPRECATED SetRtpIpTypeofService(unsigned tos) { m_defaultMediaTypeOfService = (BYTE)tos; }
01320 
01323     BYTE GetMediaTypeOfService(const OpalMediaType & type) const;
01324 
01327     void SetMediaTypeOfService(const OpalMediaType & type, unsigned tos);
01328 
01333     PINDEX GetMaxRtpPayloadSize() const { return rtpPayloadSizeMax; }
01334 
01339     void SetMaxRtpPayloadSize(
01340       PINDEX size,
01341       bool mtu = false
01342     ) { rtpPayloadSizeMax = size - (mtu ? (20+16+12) : 0); }
01343 
01347     PINDEX GetMaxRtpPacketSize() const { return rtpPacketSizeMax; }
01348 
01352     void SetMaxRtpPacketSize(
01353       PINDEX size
01354     ) { rtpPacketSizeMax = size; }
01355 
01359     unsigned GetMinAudioJitterDelay() const { return minAudioJitterDelay; }
01360 
01364     unsigned GetMaxAudioJitterDelay() const { return maxAudioJitterDelay; }
01365 
01375     void SetAudioJitterDelay(
01376       unsigned minDelay,   
01377       unsigned maxDelay    
01378     );
01379 
01382     const PStringArray & GetMediaFormatOrder() const { return mediaFormatOrder; }
01383 
01386     void SetMediaFormatOrder(
01387       const PStringArray & order   
01388     );
01389 
01395     const PStringArray & GetMediaFormatMask() const { return mediaFormatMask; }
01396 
01402     void SetMediaFormatMask(
01403       const PStringArray & mask   //< New mask
01404     );
01405 
01408     virtual void SetSilenceDetectParams(
01409       const OpalSilenceDetector::Params & params
01410     ) { silenceDetectParams = params; }
01411 
01414     const OpalSilenceDetector::Params & GetSilenceDetectParams() const { return silenceDetectParams; }
01415     
01416 #if OPAL_AEC
01417 
01419     virtual void SetEchoCancelParams(
01420       const OpalEchoCanceler::Params & params
01421     ) { echoCancelParams = params; }
01422 
01425     const OpalEchoCanceler::Params & GetEchoCancelParams() const { return echoCancelParams; }
01426 #endif
01427 
01428 #if OPAL_VIDEO
01429 
01437     virtual PBoolean SetVideoInputDevice(
01438       const PVideoDevice::OpenArgs & deviceArgs 
01439     );
01440 
01444     const PVideoDevice::OpenArgs & GetVideoInputDevice() const { return videoInputDevice; }
01445 
01453     virtual PBoolean SetVideoPreviewDevice(
01454       const PVideoDevice::OpenArgs & deviceArgs 
01455     );
01456 
01460     const PVideoDevice::OpenArgs & GetVideoPreviewDevice() const { return videoPreviewDevice; }
01461 
01469     virtual PBoolean SetVideoOutputDevice(
01470       const PVideoDevice::OpenArgs & deviceArgs 
01471     );
01472 
01476     const PVideoDevice::OpenArgs & GetVideoOutputDevice() const { return videoOutputDevice; }
01477 
01478 #endif
01479 
01480     PBoolean DetectInBandDTMFDisabled() const
01481       { return disableDetectInBandDTMF; }
01482 
01485     void DisableDetectInBandDTMF(
01486       PBoolean mode 
01487     ) { disableDetectInBandDTMF = mode; } 
01488 
01491     const PTimeInterval & GetNoMediaTimeout() const { return noMediaTimeout; }
01492 
01495     PBoolean SetNoMediaTimeout(
01496       const PTimeInterval & newInterval  
01497     );
01498 
01501     const PString & GetDefaultILSServer() const { return ilsServer; }
01502 
01505     void SetDefaultILSServer(
01506       const PString & server
01507     ) { ilsServer = server; }
01509 
01510     // needs to be public for gcc 3.4
01511     void GarbageCollection();
01512 
01513 #ifdef OPAL_ZRTP
01514     virtual bool GetZRTPEnabled() const;
01515 #endif
01516 
01517     virtual void OnApplyStringOptions(
01518       OpalConnection & conn,
01519       OpalConnection::StringOptions & stringOptions
01520     );
01521 
01522   protected:
01523     // Configuration variables
01524     OpalProductInfo productInfo;
01525 
01526     PString       defaultUserName;
01527     PString       defaultDisplayName;
01528 
01529     BYTE                     m_defaultMediaTypeOfService;
01530     map<OpalMediaType, BYTE> m_mediaTypeOfService;
01531 
01532     PINDEX        rtpPayloadSizeMax;
01533     PINDEX        rtpPacketSizeMax;
01534     unsigned      minAudioJitterDelay;
01535     unsigned      maxAudioJitterDelay;
01536     PStringArray  mediaFormatOrder;
01537     PStringArray  mediaFormatMask;
01538     PBoolean          disableDetectInBandDTMF;
01539     PTimeInterval noMediaTimeout;
01540     PString       ilsServer;
01541 
01542     OpalSilenceDetector::Params silenceDetectParams;
01543 #if OPAL_AEC
01544     OpalEchoCanceler::Params echoCancelParams;
01545 #endif
01546 
01547 #if OPAL_VIDEO
01548     PVideoDevice::OpenArgs videoInputDevice;
01549     PVideoDevice::OpenArgs videoPreviewDevice;
01550     PVideoDevice::OpenArgs videoOutputDevice;
01551 #endif
01552 
01553     struct PortInfo {
01554       void Set(
01555         unsigned base,
01556         unsigned max,
01557         unsigned range,
01558         unsigned dflt
01559       );
01560       WORD GetNext(
01561         unsigned increment
01562       );
01563 
01564       PMutex mutex;
01565       WORD   base;
01566       WORD   max;
01567       WORD   current;
01568     } tcpPorts, udpPorts, rtpIpPorts;
01569     
01570     class InterfaceMonitor : public PInterfaceMonitorClient
01571     {
01572       PCLASSINFO(InterfaceMonitor, PInterfaceMonitorClient);
01573       
01574       enum {
01575         OpalManagerInterfaceMonitorClientPriority = 100,
01576       };
01577       public:
01578         InterfaceMonitor(OpalManager & manager);
01579         
01580       protected:
01581         virtual void OnAddInterface(const PIPSocket::InterfaceEntry & entry);
01582         virtual void OnRemoveInterface(const PIPSocket::InterfaceEntry & entry);
01583         
01584         OpalManager & m_manager;
01585     };
01586 
01587     PString            translationHost;
01588     PIPSocket::Address translationAddress;
01589     PString            stunServer;
01590     PSTUNClient      * stun;
01591     InterfaceMonitor * interfaceMonitor;
01592 
01593     RouteTable m_routeTable;
01594     PMutex     m_routeMutex;
01595 
01596     // Dynamic variables
01597     PReadWriteMutex     endpointsMutex;
01598     PList<OpalEndPoint> endpointList;
01599     std::map<PString, OpalEndPoint *> endpointMap;
01600 
01601     PAtomicInteger lastCallTokenID;
01602 
01603     class CallDict : public PSafeDictionary<PString, OpalCall>
01604     {
01605       public:
01606         CallDict(OpalManager & mgr) : manager(mgr) { }
01607         virtual void DeleteObject(PObject * object) const;
01608         OpalManager & manager;
01609     } activeCalls;
01610 
01611     PSafeDictionary<PString, OpalPresentity> m_presentities;
01612 
01613     PAtomicInteger m_clearingAllCallsCount;
01614     PMutex         m_clearingAllCallsMutex;
01615     PSyncPoint     m_allCallsCleared;
01616     void InternalClearAllCalls(OpalConnection::CallEndReason reason, bool wait, bool first);
01617 
01618     PThread    * garbageCollector;
01619     PSyncPoint   garbageCollectExit;
01620     bool         garbageCollectSkip;
01621     PDECLARE_NOTIFIER(PThread, OpalManager, GarbageMain);
01622 
01623 #ifdef OPAL_ZRTP
01624     bool zrtpEnabled;
01625 #endif
01626 
01627     friend OpalCall::OpalCall(OpalManager & mgr);
01628     friend void OpalCall::InternalOnClear();
01629 
01630   private:
01631     P_REMOVE_VIRTUAL(OpalCall *,CreateCall(), 0);
01632     P_REMOVE_VIRTUAL(PBoolean, OnIncomingConnection(OpalConnection &, unsigned), false);
01633     P_REMOVE_VIRTUAL(PBoolean, OnIncomingConnection(OpalConnection &), false);
01634     P_REMOVE_VIRTUAL(PBoolean, OnStartMediaPatch(const OpalMediaPatch &), false);
01635     P_REMOVE_VIRTUAL_VOID(AdjustMediaFormats(const OpalConnection &, OpalMediaFormatList &) const);
01636     P_REMOVE_VIRTUAL_VOID(OnMessageReceived(const PURL&,const PString&,const PURL&,const PString&,const PString&,const PString&));
01637 
01638 
01639 #ifdef OPAL_HAS_IM
01640   public:
01641     OpalIMManager & GetIMManager() { return *m_imManager; }
01642 
01643   protected:
01644     OpalIMManager * m_imManager;
01645 #endif
01646 };
01647 
01648 
01649 PString  OpalGetVersion();
01650 unsigned OpalGetMajorVersion();
01651 unsigned OpalGetMinorVersion();
01652 unsigned OpalGetBuildNumber();
01653 
01654 
01655 #endif // OPAL_OPAL_MANAGER_H
01656 
01657 
01658 // End of File ///////////////////////////////////////////////////////////////

Generated on 14 Aug 2013 for OPAL by  doxygen 1.4.7