# sipep.h

Go to the documentation of this file.

    00001 /*
    00002  * sipep.h
    00003  *
    00004  * Session Initiation Protocol endpoint.
    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: 29947 $
    00028  * $Author: rjongbloed $
    00029  * $Date: 2013-06-13 05:59:17 -0500 (Thu, 13 Jun 2013) $
    00030  */
    00031
    00032 #ifndef OPAL_SIP_SIPEP_H
    00033 #define OPAL_SIP_SIPEP_H
    00034
    00035 #ifdef P_USE_PRAGMA
    00036 #pragma interface
    00037 #endif
    00038
    00039 #ifndef _PTLIB_H
    00040 #include <ptlib.h>
    00041 #endif
    00042
    00043 #include <opal/buildopts.h>
    00044
    00045 #if OPAL_SIP
    00046
    00047 #include <rtp/rtpep.h>
    00048 #include <sip/sipcon.h>
    00049 #include <sip/handlers.h>
    00050
    00051
    00053
    00056 class SIPEndPoint : public OpalRTPEndPoint
    00057 {
    00058     PCLASSINFO(SIPEndPoint, OpalRTPEndPoint);
    00059   public:
    00064     SIPEndPoint(
    00065       OpalManager & manager,
    00066       unsigned maxThreads = 15
    00067     );
    00068
    00071     ~SIPEndPoint();
    00073
    00080     virtual void ShutDown();
    00081
    00085     virtual PString GetDefaultTransport() const;
    00086
    00089     virtual WORD GetDefaultSignalPort() const;
    00090
    00095     virtual PStringList GetNetworkURIs(
    00096       const PString & name
    00097     ) const;
    00098
    00101     virtual void NewIncomingConnection(
    00102       OpalListener & listener,
    00103       const OpalTransportPtr & transport
    00104     );
    00105
    00135     virtual PSafePtr<OpalConnection> MakeConnection(
    00136       OpalCall & call,
    00137       const PString & party,
    00138       void * userData,
    00139       unsigned int options,
    00140       OpalConnection::StringOptions * stringOptions
    00141     );
    00142
    00161     virtual void OnReleased(
    00162       OpalConnection & connection
    00163     );
    00164
    00172     virtual void OnConferenceStatusChanged(
    00173       OpalEndPoint & endpoint,
    00174       const PString & uri,
    00175       OpalConferenceState::ChangeType change
    00176     );
    00177
    00182     virtual PBoolean GarbageCollection();
    00184
    00190     virtual SIPConnection * CreateConnection(
    00191       const SIPConnection::Init & init
    00192
    00193     );
    00194
    00197     virtual PBoolean SetupTransfer(
    00198       const PString & token,
    00199       const PString & callIdentity,
    00200       const PString & remoteParty,
    00201       void * userData = NULL
    00202     );
    00203
    00207     virtual PBoolean ForwardConnection(
    00208       SIPConnection & connection,
    00209       const PString & forwardParty
    00210     );
    00211
    00222     bool ClearDialogContext(
    00223       const PString & descriptor
    00224     );
    00225     bool ClearDialogContext(
    00226       SIPDialogContext & context
    00227     );
    00229
    00232
    00237     OpalTransportPtr GetTransport(
    00238       const SIPTransactionOwner & transactor,
    00239       SIP_PDU::StatusCodes & reason
    00240     );
    00241
    00242     virtual void HandlePDU(
    00243       const OpalTransportPtr & transport
    00244     );
    00245
    00248     virtual bool OnReceivedPDU(
    00249       SIP_PDU * pdu
    00250     );
    00251
    00254     virtual bool OnReceivedConnectionlessPDU(
    00255       SIP_PDU * pdu
    00256     );
    00257
    00260     virtual void OnReceivedResponse(
    00261       SIPTransaction & transaction,
    00262       SIP_PDU & response
    00263     );
    00264
    00267     virtual bool OnReceivedINVITE(
    00268       SIP_PDU * pdu
    00269     );
    00270
    00273     virtual bool OnReceivedNOTIFY(
    00274       SIP_PDU & request
    00275     );
    00276
    00279     virtual bool OnReceivedREGISTER(
    00280       SIP_PDU & request
    00281     );
    00282
    00285     virtual bool OnReceivedSUBSCRIBE(
    00286       SIP_PDU & request,
    00287       SIPDialogContext * dialog
    00288     );
    00289
    00292     virtual bool OnReceivedMESSAGE(
    00293       SIP_PDU & request
    00294     );
    00295
    00298     virtual bool OnReceivedOPTIONS(
    00299       SIP_PDU & request
    00300     );
    00301
    00304     virtual void OnTransactionFailed(
    00305       SIPTransaction & transaction
    00306     );
    00308
    00309
    00317     PSafePtr<SIPConnection> GetSIPConnectionWithLock(
    00318       const PString & token,
    00319       PSafetyMode mode = PSafeReadWrite,
    00320       SIP_PDU::StatusCodes * errorCode = NULL
    00321     );
    00322
    00323     virtual PBoolean IsAcceptedAddress(const SIPURL & toAddr);
    00324
    00325
    00360     bool Register(
    00361       const SIPRegister::Params & params,
    00362       PString & aor,
    00363       SIP_PDU::StatusCodes * reason = NULL
    00364     );
    00365
    00366     // For backward compatibility
    00367     bool Register(
    00368       const SIPRegister::Params & params,
    00369       PString & aor,
    00370       bool asynchronous
    00371     );
    00372
    00374     bool P_DEPRECATED Register(
    00375       const PString & host,
    00376       const PString & user = PString::Empty(),
    00377       const PString & autName = PString::Empty(),
    00378       const PString & password = PString::Empty(),
    00379       const PString & authRealm = PString::Empty(),
    00380       unsigned expire = 0,
    00381       const PTimeInterval & minRetryTime = PMaxTimeInterval,
    00382       const PTimeInterval & maxRetryTime = PMaxTimeInterval
    00383     );
    00384
    00399     PBoolean IsRegistered(
    00400       const PString & aor,
    00401       bool includeOffline = false
    00402     );
    00403
    00413     bool Unregister(
    00414       const PString & aor
    00415     );
    00416
    00420     bool UnregisterAll();
    00421
    00424     unsigned GetRegistrationsCount() const { return activeSIPHandlers.GetCount(SIP_PDU::Method_REGISTER); }
    00425
    00428     PStringList GetRegistrations(
    00429       bool includeOffline = false
    00430     ) const { return activeSIPHandlers.GetAddresses(includeOffline, SIP_PDU::Method_REGISTER); }
    00431
    00433     struct RegistrationStatus {
    00434       SIPRegisterHandler * m_handler;
    00435       PString              m_addressofRecord;
    00436       bool                 m_wasRegistering;
    00437       bool                 m_reRegistering;
    00438       SIP_PDU::StatusCodes m_reason;
    00439       OpalProductInfo      m_productInfo;
    00440       void               * m_userData;
    00441     };
    00442
    00446     bool GetRegistrationStatus(
    00447       const PString & token,
    00448       RegistrationStatus & status
    00449     );
    00450
    00453     virtual void OnRegistrationStatus(
    00454       const RegistrationStatus & status
    00455     );
    00456
    00457     // For backward compatibility
    00458     virtual void OnRegistrationStatus(
    00459       const PString & aor,
    00460       PBoolean wasRegistering,
    00461       PBoolean reRegistering,
    00462       SIP_PDU::StatusCodes reason
    00463     );
    00464
    00468     virtual void OnRegistrationFailed(
    00469       const PString & aor,
    00470       SIP_PDU::StatusCodes reason,
    00471       PBoolean wasRegistering
    00472     );
    00473
    00477     virtual void OnRegistered(
    00478       const PString & aor,
    00479       PBoolean wasRegistering
    00480     );
    00481
    00482
    00522     bool Subscribe(
    00523       const SIPSubscribe::Params & params,
    00524       PString & token,
    00525       bool tokenIsAOR = true
    00526     );
    00527
    00528     // For backward compatibility
    00529     bool Subscribe(
    00530       SIPSubscribe::PredefinedPackages eventPackage,
    00531       unsigned expire,
    00532       const PString & aor
    00533     );
    00534
    00541     bool IsSubscribed(
    00542       const PString & aor,
    00543       bool includeOffline = false
    00544     );
    00545     bool IsSubscribed(
    00546       const PString & eventPackage,
    00547       const PString & aor,
    00548       bool includeOffline = false
    00549     );
    00550
    00560     bool Unsubscribe(
    00561       const PString & aor,
    00562       bool invalidateNotifiers = false
    00563     );
    00564     bool Unsubscribe(
    00565       SIPSubscribe::PredefinedPackages eventPackage,
    00566       const PString & aor,
    00567       bool invalidateNotifiers = false
    00568     );
    00569     bool Unsubscribe(
    00570       const PString & eventPackage,
    00571       const PString & aor,
    00572       bool invalidateNotifiers = false
    00573     );
    00574
    00578     bool UnsubcribeAll(
    00579       SIPSubscribe::PredefinedPackages eventPackage
    00580     );
    00581     bool UnsubcribeAll(
    00582       const PString & eventPackage
    00583     );
    00584
    00587     unsigned GetSubscriptionCount(
    00588       const SIPSubscribe::EventPackage & eventPackage
    00589     ) { return activeSIPHandlers.GetCount(SIP_PDU::Method_SUBSCRIBE, eventPackage); }
    00590
    00593     PStringList GetSubscriptions(
    00594       const SIPSubscribe::EventPackage & eventPackage,
    00595       bool includeOffline = false
    00596     ) const { return activeSIPHandlers.GetAddresses(includeOffline, SIP_PDU::Method_REGISTER, eventPackage); }
    00597
    00599     typedef SIPSubscribe::SubscriptionStatus SubscriptionStatus;
    00600
    00604     bool GetSubscriptionStatus(
    00605       const PString & token,
    00606       const PString & eventPackage,
    00607       SubscriptionStatus & status
    00608     );
    00609
    00612     virtual void OnSubscriptionStatus(
    00613       const SubscriptionStatus & status
    00614     );
    00615
    00619     virtual void OnSubscriptionStatus(
    00620       const PString & eventPackage,
    00621       const SIPURL & uri,
    00622       bool wasSubscribing,
    00623       bool reSubscribing,
    00624       SIP_PDU::StatusCodes reason
    00625     );
    00626
    00627     virtual void OnSubscriptionStatus(
    00628       SIPSubscribeHandler & handler,
    00629       const SIPURL & uri,
    00630       bool wasSubscribing,
    00631       bool reSubscribing,
    00632       SIP_PDU::StatusCodes reason
    00633     );
    00634
    00642     enum CanNotifyResult {
    00643       CannotNotify,
    00644       CanNotifyImmediate,
    00645       CanNotifyDeferrred
    00646     };
    00647
    00650     virtual CanNotifyResult CanNotify(
    00651       const PString & eventPackage,
    00652       const SIPURL & aor
    00653     );
    00654
    00655     // For backward compatobility
    00656     virtual bool CanNotify(const PString & eventPackage);
    00657
    00660     bool Notify(
    00661       const SIPURL & targetAddress,
    00662       const PString & eventPackage,
    00663       const PObject & body
    00664     );
    00665
    00666
    00669     virtual void OnDialogInfoReceived(
    00670       const SIPDialogNotification & info
    00671     );
    00672
    00673     void SendNotifyDialogInfo(
    00674       const SIPDialogNotification & info
    00675     );
    00676
    00677
    00680     virtual void OnRegInfoReceived(
    00681       const SIPRegNotification & info
    00682     );
    00683
    00684
    00687     bool SendMESSAGE(
    00688       SIPMessage::Params & params
    00689     );
    00690
    00693     virtual void OnMESSAGECompleted(
    00694       const SIPMessage::Params & params,
    00695       SIP_PDU::StatusCodes reason
    00696     );
    00697
    00698     struct ConnectionlessMessageInfo {
    00699       ConnectionlessMessageInfo(SIP_PDU & pdu)
    00700         : m_pdu(pdu)
    00701         , m_transport(*pdu.GetTransport())
    00702         , m_status(ResponseSent)
    00703       { }
    00704
    00705       SIP_PDU & m_pdu;
    00706       OpalTransport & m_transport;
    00707       enum {
    00708         NotHandled,
    00709         SendOK,
    00710         MethodNotAllowed,
    00711         ResponseSent
    00712       } m_status;
    00713     };
    00714
    00715     typedef PNotifierTemplate<ConnectionlessMessageInfo &> ConnectionlessMessageNotifier;
    00716     #define PDECLARE_ConnectionlessMessageNotifier(cls, fn) PDECLARE_NOTIFIER2(SIPEndPoint, cls, fn, SIPEndPoint::ConnectionlessMessageInfo &)
    00717     #define PCREATE_ConnectionlessMessageNotifier(fn) PCREATE_NOTIFIER2(fn, SIPEndPoint::ConnectionlessMessageInfo &)
    00718
    00719     void SetConnectionlessMessageNotifier(
    00720       const ConnectionlessMessageNotifier & notifier
    00721     )
    00722     { m_onConnectionlessMessage = notifier; }
    00723
    00724
    00727     virtual bool SendOPTIONS(
    00728       const SIPOptions::Params & params
    00729     );
    00730
    00734     virtual void OnOptionsCompleted(
    00735       const SIPOptions::Params & params,
    00736       const SIP_PDU & response
    00737     );
    00738
    00739
    00743     bool Publish(
    00744       const SIPSubscribe::Params & params,
    00745       const PString & body,
    00746       PString & aor
    00747     );
    00748     bool Publish(
    00749       const PString & to,
    00750       const PString & body,
    00751       unsigned expire = 300
    00752     );
    00753
    00756     PStringList GetPublications(
    00757       const SIPSubscribe::EventPackage & eventPackage,
    00758       bool includeOffline = false
    00759     ) const { return activeSIPHandlers.GetAddresses(includeOffline, SIP_PDU::Method_PUBLISH, eventPackage); }
    00760
    00761
    00762 #if OPAL_SIP_PRESENCE
    00763
    00766     bool PublishPresence(
    00767       const SIPPresenceInfo & info,
    00768       unsigned expire = 300
    00769     );
    00770
    00773     virtual void OnPresenceInfoReceived (
    00774       const SIPPresenceInfo & info
    00775     );
    00776     virtual void OnPresenceInfoReceived (
    00777       const PString & identity,
    00778       const PString & basic,
    00779       const PString & note
    00780     );
    00781 #endif // OPAL_SIP_PRESENCE
    00782
    00783
    00786     PBoolean Ping(
    00787       const PURL & to
    00788     );
    00789
    00792     const PStringSet & GetAllowedEvents() const { return m_allowedEvents; }
    00793
    00796     SIPConnection::PRACKMode GetDefaultPRACKMode() const { return m_defaultPrackMode; }
    00797
    00800     void SetDefaultPRACKMode(SIPConnection::PRACKMode mode) { m_defaultPrackMode = mode; }
    00801
    00802     void SetMaxPacketSizeUDP(PINDEX sz) { m_maxPacketSizeUDP = sz; }
    00803     PINDEX GetMaxPacketSizeUDP() const { return m_maxPacketSizeUDP; }
    00804
    00805     void SetMaxRetries(unsigned r) { maxRetries = r; }
    00806     unsigned GetMaxRetries() const { return maxRetries; }
    00807
    00808     void SetRetryTimeouts(
    00809       const PTimeInterval & t1,
    00810       const PTimeInterval & t2
    00811     ) { retryTimeoutMin = t1; retryTimeoutMax = t2; }
    00812     const PTimeInterval & GetRetryTimeoutMin() const { return retryTimeoutMin; }
    00813     const PTimeInterval & GetRetryTimeoutMax() const { return retryTimeoutMax; }
    00814
    00815     void SetNonInviteTimeout(
    00816       const PTimeInterval & t
    00817     ) { nonInviteTimeout = t; }
    00818     const PTimeInterval & GetNonInviteTimeout() const { return nonInviteTimeout; }
    00819
    00820     void SetPduCleanUpTimeout(
    00821       const PTimeInterval & t
    00822     ) { pduCleanUpTimeout = t; }
    00823     const PTimeInterval & GetPduCleanUpTimeout() const { return pduCleanUpTimeout; }
    00824
    00825     void SetInviteTimeout(
    00826       const PTimeInterval & t
    00827     ) { inviteTimeout = t; }
    00828     const PTimeInterval & GetInviteTimeout() const { return inviteTimeout; }
    00829
    00830     void SetProgressTimeout(
    00831       const PTimeInterval & t
    00832     ) { m_progressTimeout = t; }
    00833     const PTimeInterval & GetProgressTimeout() const { return m_progressTimeout; }
    00834
    00835     void SetAckTimeout(
    00836       const PTimeInterval & t
    00837     ) { ackTimeout = t; }
    00838     const PTimeInterval & GetAckTimeout() const { return ackTimeout; }
    00839
    00840     void SetRegistrarTimeToLive(
    00841       const PTimeInterval & t
    00842     ) { registrarTimeToLive = t; }
    00843     const PTimeInterval & GetRegistrarTimeToLive() const { return registrarTimeToLive; }
    00844
    00845     void SetNotifierTimeToLive(
    00846       const PTimeInterval & t
    00847     ) { notifierTimeToLive = t; }
    00848     const PTimeInterval & GetNotifierTimeToLive() const { return notifierTimeToLive; }
    00849
    00850     P_DEPRECATED void SetNATBindingTimeout(
    00851       const PTimeInterval & t
    00852     ) { m_keepAliveTimeout = t; }
    00853     P_DEPRECATED const PTimeInterval & GetNATBindingTimeout() const { return m_keepAliveTimeout; }
    00854
    00857     enum KeepAliveType {
    00858       NoKeepAlive,
    00859       KeepAliveByCRLF,
    00860       KeepAliveByOPTION,
    00861       NumMethods
    00862     };
    00863     void GetKeepAlive(
    00864       PTimeInterval & timeout,
    00865       KeepAliveType & type
    00866     ) { timeout = m_keepAliveTimeout; type = m_keepAliveType; }
    00867     void SetKeepAlive(
    00868       const PTimeInterval & timeout,
    00869       KeepAliveType type
    00870     ) { m_keepAliveTimeout = timeout; m_keepAliveType = type; }
    00871
    00872
    00873     void AddTransaction(
    00874       SIPTransaction * transaction
    00875     ) { m_transactions.Append(transaction); }
    00876
    00877     PSafePtr<SIPTransaction> GetTransaction(const PString & transactionID, PSafetyMode mode = PSafeReadWrite)
    00878     { return PSafePtrCast<SIPTransactionBase, SIPTransaction>(m_transactions.FindWithLock(transactionID, mode)); }
    00879
    00882     unsigned GetNextCSeq() { return ++m_lastSentCSeq; }
    00883
    00889     void SetRegisteredUserMode(bool v) { m_registeredUserMode = v; }
    00890     bool GetRegisteredUserMode() const { return m_registeredUserMode; }
    00891
    00894     bool GetAuthentication(
    00895       const PString & realm,
    00896       PString & authId,
    00897       PString & password
    00898     );
    00899
    00902     virtual SIPURL GetDefaultLocalURL(const OpalTransport & transport);
    00903
    00912     void AdjustToRegistration(
    00913       SIP_PDU & pdu,
    00914       SIPConnection * connection = NULL,
    00915       const OpalTransport * transport = NULL
    00916     );
    00917
    00918
    00921     const SIPURL & GetProxy() const { return m_proxy; }
    00922
    00925     void SetProxy(const SIPURL & url);
    00926
    00929     void SetProxy(
    00930       const PString & hostname,
    00931       const PString & username,
    00932       const PString & password
    00933     );
    00934
    00935
    00938     int GetDefaultAppearanceCode() const { return m_defaultAppearanceCode; }
    00939
    00942     void SetDefaultAppearanceCode(int code) { m_defaultAppearanceCode = code; }
    00943
    00950     virtual PString GetUserAgent() const;
    00951
    00954     void SetUserAgent(const PString & str) { m_userAgentString = str; }
    00955
    00956
    00959     virtual unsigned GetAllowedMethods() const;
    00960
    00961
    00962     typedef KeepAliveType NATBindingRefreshMethod;
    00963     P_DEPRECATED void SetNATBindingRefreshMethod(const NATBindingRefreshMethod type) { SetKeepAlive(m_keepAliveTimeout, type); }
    00964
    00965     virtual SIPRegisterHandler * CreateRegisterHandler(const SIPRegister::Params & params);
    00966
    00967     virtual void OnStartTransaction(SIPConnection & conn, SIPTransaction & transaction);
    00968
    00969
    00970     PSafePtr<SIPHandler> FindSIPHandlerByCallID(const PString & callID, PSafetyMode m)
    00971       { return activeSIPHandlers.FindSIPHandlerByCallID(callID, m); }
    00972
    00973     void UpdateHandlerIndexes(SIPHandler * handler)
    00974       { activeSIPHandlers.Update(handler); }
    00975
    00976
    00977     SIPThreadPool & GetThreadPool() { return m_threadPool; }
    00978
    00979
    00980   protected:
    00981     void AddTransport(const OpalTransportPtr & transport);
    00982     void TransportThreadMain(OpalTransportPtr transport);
    00983
    00984     SIPURL        m_proxy;
    00985     PString       m_userAgentString;
    00986     PStringSet    m_allowedEvents;
    00987
    00988     SIPConnection::PRACKMode m_defaultPrackMode;
    00989
    00990     PINDEX        m_maxPacketSizeUDP;
    00991     unsigned      maxRetries;
    00992     PTimeInterval retryTimeoutMin;   // T1
    00993     PTimeInterval retryTimeoutMax;   // T2
    00994     PTimeInterval nonInviteTimeout;  // T3
    00995     PTimeInterval pduCleanUpTimeout; // T4
    00996     PTimeInterval inviteTimeout;
    00997     PTimeInterval m_progressTimeout;
    00998     PTimeInterval ackTimeout;
    00999     PTimeInterval registrarTimeToLive;
    01000     PTimeInterval notifierTimeToLive;
    01001     PTimeInterval natBindingTimeout;
    01002     PTimeInterval m_keepAliveTimeout;
    01003     KeepAliveType m_keepAliveType;
    01004     bool          m_registeredUserMode;
    01005     bool          m_shuttingDown;
    01006
    01007     // Transport management
    01008     PSafeDictionary<OpalTransportAddress, OpalTransport> m_transportsTable;
    01009
    01010     // Sub-protocol handlers
    01011     SIPHandlersList   activeSIPHandlers;
    01012     PSafePtr<SIPHandler> FindHandlerByPDU(const SIP_PDU & pdu, PSafetyMode mode);
    01013
    01014     PStringToString   m_receivedConnectionTokens;
    01015     PMutex            m_receivedConnectionMutex;
    01016
    01017     PSafeSortedList<SIPTransactionBase> m_transactions;
    01018
    01019     PAtomicInteger m_lastSentCSeq;
    01020     int            m_defaultAppearanceCode;
    01021
    01022     struct RegistrationCompletion {
    01023       PSyncPoint           m_sync;
    01024       SIP_PDU::StatusCodes m_reason;
    01025       RegistrationCompletion() : m_reason(SIP_PDU::Information_Trying) { }
    01026     };
    01027     std::map<PString, RegistrationCompletion> m_registrationComplete;
    01028
    01029     ConnectionlessMessageNotifier m_onConnectionlessMessage;
    01030     typedef std::multimap<PString, SIPURL> ConferenceMap;
    01031     ConferenceMap m_conferenceAOR;
    01032
    01033     // Thread pooling
    01034     SIPThreadPool m_threadPool;
    01035
    01036     // Network interface checking
    01037     PDECLARE_InterfaceNotifier(SIPEndPoint, OnHighPriorityInterfaceChange);
    01038     PDECLARE_InterfaceNotifier(SIPEndPoint, OnLowPriorityInterfaceChange);
    01039
    01040     bool m_disableTrying;
    01041
    01042     P_REMOVE_VIRTUAL_VOID(OnReceivedIntervalTooBrief(SIPTransaction &, SIP_PDU &));
    01043     P_REMOVE_VIRTUAL_VOID(OnReceivedAuthenticationRequired(SIPTransaction &, SIP_PDU &));
    01044     P_REMOVE_VIRTUAL_VOID(OnReceivedOK(SIPTransaction &, SIP_PDU &));
    01045     P_REMOVE_VIRTUAL_VOID(OnMessageFailed(const SIPURL &, SIP_PDU::StatusCodes));
    01046     P_REMOVE_VIRTUAL(SIPConnection *,CreateConnection(OpalCall &, const PString &, void *, const SIPURL &, OpalTransport *, SIP_PDU *, unsigned, OpalConnection::StringOptions *), NULL);
    01047     P_REMOVE_VIRTUAL(PBoolean, OnReceivedPDU(OpalTransport &, SIP_PDU *), false);
    01048     P_REMOVE_VIRTUAL(bool, OnReceivedConnectionlessPDU(OpalTransport &,  SIP_PDU *), false);
    01049     P_REMOVE_VIRTUAL(PBoolean, OnReceivedINVITE(OpalTransport &, SIP_PDU *), false);
    01050     P_REMOVE_VIRTUAL(PBoolean, OnReceivedNOTIFY(OpalTransport &, SIP_PDU &), false);
    01051     P_REMOVE_VIRTUAL(PBoolean, OnReceivedREGISTER(OpalTransport &, SIP_PDU &), false);
    01052     P_REMOVE_VIRTUAL(PBoolean, OnReceivedSUBSCRIBE(OpalTransport &, SIP_PDU &, SIPDialogContext *), false);
    01053     P_REMOVE_VIRTUAL(bool, OnReceivedMESSAGE(OpalTransport &, SIP_PDU &), false);
    01054     P_REMOVE_VIRTUAL(bool, OnReceivedOPTIONS(OpalTransport &, SIP_PDU &), false);
    01055 };
    01056
    01057
    01058 #endif // OPAL_SIP
    01059
    01060 #endif // OPAL_SIP_SIPEP_H
    01061
    01062
    01063 // End of File ///////////////////////////////////////////////////////////////