OPAL  Version 3.18.8
sipep.h
Go to the documentation of this file.
1 /*
2  * sipep.h
3  *
4  * Session Initiation Protocol endpoint.
5  *
6  * Open Phone Abstraction Library (OPAL)
7  * Formally known as the Open H323 project.
8  *
9  * Copyright (c) 2001 Equivalence Pty. Ltd.
10  *
11  * The contents of this file are subject to the Mozilla Public License
12  * Version 1.0 (the "License"); you may not use this file except in
13  * compliance with the License. You may obtain a copy of the License at
14  * http://www.mozilla.org/MPL/
15  *
16  * Software distributed under the License is distributed on an "AS IS"
17  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
18  * the License for the specific language governing rights and limitations
19  * under the License.
20  *
21  * The Original Code is Open Phone Abstraction Library.
22  *
23  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
24  *
25  * Contributor(s): ______________________________________.
26  */
27 
28 #ifndef OPAL_SIP_SIPEP_H
29 #define OPAL_SIP_SIPEP_H
30 
31 #ifdef P_USE_PRAGMA
32 #pragma interface
33 #endif
34 
35 #ifndef _PTLIB_H
36 #include <ptlib.h>
37 #endif
38 
39 #include <opal_config.h>
40 
41 #if OPAL_SIP
42 
43 #include <sdp/sdpep.h>
44 #include <sip/sipcon.h>
45 #include <sip/handlers.h>
46 
47 
49 
52 class SIPEndPoint : public OpalSDPEndPoint
53 {
54  PCLASSINFO(SIPEndPoint, OpalSDPEndPoint);
55  public:
61  OpalManager & manager,
62  unsigned maxThreads = 15
63  );
64 
67  ~SIPEndPoint();
69 
76  virtual void ShutDown();
77 
81  virtual PString GetDefaultTransport() const;
82 
85  virtual WORD GetDefaultSignalPort() const;
86 
91  virtual PStringList GetNetworkURIs(
92  const PString & name
93  ) const;
94 
97  virtual void NewIncomingConnection(
98  OpalListener & listener,
99  const OpalTransportPtr & transport
100  );
101 
131  virtual PSafePtr<OpalConnection> MakeConnection(
132  OpalCall & call,
133  const PString & party,
134  void * userData,
135  unsigned int options,
136  OpalConnection::StringOptions * stringOptions
137  );
138 
157  virtual void OnReleased(
158  OpalConnection & connection
159  );
160 
168  virtual void OnConferenceStatusChanged(
169  OpalEndPoint & endpoint,
170  const PString & uri,
172  );
173 
178  virtual PBoolean GarbageCollection();
179 
182  virtual PStringList GetAvailableStringOptions() const;
184 
191  const SIPConnection::Init & init
192 
193  );
194 
197  virtual PBoolean SetupTransfer(
198  SIPConnection & connection,
199  const PString & remoteParty,
200  const PString & replaces
201  );
202 
206  virtual PBoolean ForwardConnection(
207  SIPConnection & connection,
208  const PString & forwardParty
209  );
210 
221  bool ClearDialogContext(
222  const PString & descriptor
223  );
224  bool ClearDialogContext(
225  SIPDialogContext & context
226  );
228 
231 
237  const SIPTransactionOwner & transactor,
238  SIP_PDU::StatusCodes & reason
239  );
240 
241  virtual void HandlePDU(
242  const OpalTransportPtr & transport
243  );
244 
248  virtual bool OnReceivedPDU(
249  SIP_PDU * pdu
250  );
251 
254  virtual void OnReceivedResponse(
255  SIPTransaction & transaction,
256  SIP_PDU & response
257  );
258 
262  virtual bool OnReceivedINVITE(
263  SIP_PDU * pdu
264  );
265 
269  virtual bool OnReceivedREFER(
270  SIP_PDU & request
271  );
272 
276  virtual bool OnReceivedNOTIFY(
277  SIP_PDU & request
278  );
279 
283  virtual bool OnReceivedREGISTER(
284  SIP_PDU & request
285  );
286 
290  virtual bool OnReceivedSUBSCRIBE(
291  SIP_PDU & request,
292  SIPDialogContext * dialog
293  );
294 
298  virtual bool OnReceivedMESSAGE(
299  SIP_PDU & request
300  );
301 
305  virtual bool OnReceivedOPTIONS(
306  SIP_PDU & request
307  );
308 
311  virtual void OnTransactionFailed(
312  SIPTransaction & transaction
313  );
315 
316 
324  PSafePtr<SIPConnection> GetSIPConnectionWithLock(
325  const PString & token,
326  PSafetyMode mode = PSafeReadWrite,
327  SIP_PDU::StatusCodes * errorCode = NULL
328  );
329 
330  virtual PBoolean IsAcceptedAddress(const SIPURL & toAddr);
331 
332 
367  bool Register(
368  const SIPRegister::Params & params,
369  PString & aor,
370  SIP_PDU::StatusCodes * reason = NULL
371  );
372 
373  // For backward compatibility
374  bool Register(
375  const SIPRegister::Params & params,
376  PString & aor,
377  bool asynchronous
378  );
379 
381  bool P_DEPRECATED Register(
382  const PString & host,
383  const PString & user = PString::Empty(),
384  const PString & autName = PString::Empty(),
385  const PString & password = PString::Empty(),
386  const PString & authRealm = PString::Empty(),
387  unsigned expire = 0,
388  const PTimeInterval & minRetryTime = PMaxTimeInterval,
389  const PTimeInterval & maxRetryTime = PMaxTimeInterval
390  );
391 
406  PBoolean IsRegistered(
407  const PString & aor,
408  bool includeOffline = false
409  );
410 
420  bool Unregister(
421  const PString & aor
422  );
423 
427  bool UnregisterAll();
428 
432 
435  PStringList GetRegistrations(
436  bool includeOffline = false
437  ) const { return m_activeSIPHandlers.GetAddresses(includeOffline, SIP_PDU::Method_REGISTER); }
438 
447  void * m_userData;
448  friend ostream & operator<<(ostream & strm, const RegistrationStatus & status);
449  };
450 
455  const PString & token,
456  RegistrationStatus & status
457  );
458 
461  virtual void OnRegistrationStatus(
462  const RegistrationStatus & status
463  );
464 
465  // For backward compatibility
466  virtual void OnRegistrationStatus(
467  const PString & aor,
468  PBoolean wasRegistering,
469  PBoolean reRegistering,
470  SIP_PDU::StatusCodes reason
471  );
472 
476  virtual void OnRegistrationFailed(
477  const PString & aor,
478  SIP_PDU::StatusCodes reason,
479  PBoolean wasRegistering
480  );
481 
485  virtual void OnRegistered(
486  const PString & aor,
487  PBoolean wasRegistering
488  );
489 
490 
530  bool Subscribe(
531  const SIPSubscribe::Params & params,
532  PString & token,
533  bool tokenIsAOR = true
534  );
535 
536  // For backward compatibility
537  bool Subscribe(
538  SIPSubscribe::PredefinedPackages eventPackage,
539  unsigned expire,
540  const PString & aor
541  );
542 
549  bool IsSubscribed(
550  const PString & aor,
551  bool includeOffline = false
552  );
553  bool IsSubscribed(
554  const PString & eventPackage,
555  const PString & aor,
556  bool includeOffline = false
557  );
558 
568  bool Unsubscribe(
569  const PString & aor,
570  bool invalidateNotifiers = false
571  );
572  bool Unsubscribe(
573  SIPSubscribe::PredefinedPackages eventPackage,
574  const PString & aor,
575  bool invalidateNotifiers = false
576  );
577  bool Unsubscribe(
578  const PString & eventPackage,
579  const PString & aor,
580  bool invalidateNotifiers = false
581  );
582 
586  bool UnsubcribeAll(
588  );
589  bool UnsubcribeAll(
590  const PString & eventPackage
591  );
592 
596  const SIPSubscribe::EventPackage & eventPackage
597  ) { return m_activeSIPHandlers.GetCount(SIP_PDU::Method_SUBSCRIBE, eventPackage); }
598 
601  PStringList GetSubscriptions(
602  const SIPSubscribe::EventPackage & eventPackage,
603  bool includeOffline = false
604  ) const { return m_activeSIPHandlers.GetAddresses(includeOffline, SIP_PDU::Method_REGISTER, eventPackage); }
605 
608 
613  const PString & token,
614  const PString & eventPackage,
615  SubscriptionStatus & status
616  );
617 
620  virtual void OnSubscriptionStatus(
621  const SubscriptionStatus & status
622  );
623 
627  virtual void OnSubscriptionStatus(
628  const PString & eventPackage,
629  const SIPURL & uri,
630  bool wasSubscribing,
631  bool reSubscribing,
632  SIP_PDU::StatusCodes reason
633  );
634 
635  virtual void OnSubscriptionStatus(
636  SIPSubscribeHandler & handler,
637  const SIPURL & uri,
638  bool wasSubscribing,
639  bool reSubscribing,
640  SIP_PDU::StatusCodes reason
641  );
642 
654  };
655 
658  virtual CanNotifyResult CanNotify(
659  const PString & eventPackage,
660  const SIPURL & aor
661  );
662 
663  // For backward compatobility
664  virtual bool CanNotify(const PString & eventPackage);
665 
668  bool Notify(
669  const SIPURL & targetAddress,
670  const PString & eventPackage,
671  const PObject & body
672  );
673 
674 
679  virtual bool OnReINVITE(
680  SIPConnection & connection,
681  bool fromRemote,
682  const PString & remoteSDP
683  );
684 
687  virtual void OnDialogInfoReceived(
688  const SIPDialogNotification & info
689  );
690 
692  const SIPDialogNotification & info
693  );
694 
695 
698  virtual void OnRegInfoReceived(
699  const SIPRegNotification & info
700  );
701 
702 
706  virtual bool OnReceivedInfoPackage(
707  SIPConnection & connection,
708  const PString & package,
709  const PMultiPartList & content
710  );
711 
712 
715  bool SendMESSAGE(
716  SIPMessage::Params & params
717  );
718 
721  virtual void OnMESSAGECompleted(
722  const SIPMessage::Params & params,
723  SIP_PDU::StatusCodes reason
724  );
725 
728  : m_pdu(pdu)
729  , m_transport(*pdu.GetTransport())
731  { }
732 
735  enum {
740  } m_status;
741  };
742 
743  typedef PNotifierTemplate<ConnectionlessMessageInfo &> ConnectionlessMessageNotifier;
744  #define PDECLARE_ConnectionlessMessageNotifier(cls, fn) PDECLARE_NOTIFIER2(SIPEndPoint, cls, fn, SIPEndPoint::ConnectionlessMessageInfo &)
745  #define PCREATE_ConnectionlessMessageNotifier(fn) PCREATE_NOTIFIER2(fn, SIPEndPoint::ConnectionlessMessageInfo &)
746 
748  const ConnectionlessMessageNotifier & notifier
749  )
750  { m_onConnectionlessMessage = notifier; }
751 
752 
755  virtual bool SendOPTIONS(
756  const SIPOptions::Params & params
757  );
758 
762  virtual void OnOptionsCompleted(
763  const SIPOptions::Params & params,
764  const SIP_PDU & response
765  );
766 
767 
771  bool Publish(
772  const SIPSubscribe::Params & params,
773  const PString & body,
774  PString & aor
775  );
776  bool Publish(
777  const PString & to,
778  const PString & body,
779  unsigned expire = 300
780  );
781 
784  PStringList GetPublications(
785  const SIPSubscribe::EventPackage & eventPackage,
786  bool includeOffline = false
787  ) const { return m_activeSIPHandlers.GetAddresses(includeOffline, SIP_PDU::Method_PUBLISH, eventPackage); }
788 
789 
790 #if OPAL_SIP_PRESENCE
791 
794  bool PublishPresence(
795  const SIPPresenceInfo & info,
796  unsigned expire = 300
797  );
798 
801  virtual void OnPresenceInfoReceived (
802  const SIPPresenceInfo & info
803  );
804  virtual void OnPresenceInfoReceived (
805  const PString & identity,
806  const PString & basic,
807  const PString & note
808  );
809 #endif // OPAL_SIP_PRESENCE
810 
811 
814  PBoolean Ping(
815  const PURL & to
816  );
817 
818  // Registrar
819  class RegistrarAoR : public PSafeObject
820  {
821  PCLASSINFO(RegistrarAoR, PSafeObject)
822  public:
823  RegistrarAoR(const PURL & aor);
824 
825  virtual Comparison Compare(const PObject & obj) const;
826  virtual void PrintOn(ostream & strm) const;
827 
828  virtual SIP_PDU::StatusCodes OnReceivedREGISTER(SIPEndPoint & endpoint, const SIP_PDU & request);
829  virtual bool ExpireBindings();
830 
831  const SIPURL & GetAoR() const { return m_aor; }
832  SIPURLList GetContacts() const;
833  const OpalProductInfo & GetProductInfo() const { return m_productInfo; }
834 
835  bool HasBindings() const { return !m_bindings.empty(); }
836 
837  protected:
840 
841  struct Binding {
842  PString m_id;
844  };
845  typedef std::map<SIPURL, Binding> BindingMap;
847 
848  std::map<PString, unsigned> m_cseq;
849  };
850  friend class RegistrarAoR;
851 
852  virtual RegistrarAoR * CreateRegistrarAoR(const SIP_PDU & request);
853  virtual PSafePtr<RegistrarAoR> FindRegistrarAoR(const SIPURL & aor) { return m_registeredUAs.Find(aor); }
854  virtual SIPURLList GetRegistrarAoRs() const;
855  virtual void OnChangedRegistrarAoR(RegistrarAoR & ua);
856 
857  void SetRegistrarDomains(const PStringSet & domains) { m_registrarDomains = domains; }
858  const PStringSet & GetRegistrarDomains() const { return m_registrarDomains; }
859 
862  const PStringSet & GetAllowedEvents() const { return m_allowedEvents; }
863 
867 
871 
872  void SetMaxPacketSizeUDP(PINDEX sz) { m_maxPacketSizeUDP = sz; }
873  PINDEX GetMaxPacketSizeUDP() const { return m_maxPacketSizeUDP; }
874 
875  void SetMaxRetries(unsigned r) { m_maxRetries = r; }
876  unsigned GetMaxRetries() const { return m_maxRetries; }
877 
879  const PTimeInterval & t1,
880  const PTimeInterval & t2
881  ) { m_retryTimeoutMin = t1; m_retryTimeoutMax = t2; }
882  const PTimeInterval & GetRetryTimeoutMin() const { return m_retryTimeoutMin; }
883  const PTimeInterval & GetRetryTimeoutMax() const { return m_retryTimeoutMax; }
884 
886  const PTimeInterval & t
887  ) { m_nonInviteTimeout = t; }
888  const PTimeInterval & GetNonInviteTimeout() const { return m_nonInviteTimeout; }
889 
891  const PTimeInterval & t
892  ) { m_pduCleanUpTimeout = t; }
893  const PTimeInterval & GetPduCleanUpTimeout() const { return m_pduCleanUpTimeout; }
894 
896  const PTimeInterval & t
897  ) { m_inviteTimeout = t; }
898  const PTimeInterval & GetInviteTimeout() const { return m_inviteTimeout; }
899 
901  const PTimeInterval & t
902  ) { m_progressTimeout = t; }
903  const PTimeInterval & GetProgressTimeout() const { return m_progressTimeout; }
904 
906  const PTimeInterval & t
907  ) { m_ackTimeout = t; }
908  const PTimeInterval & GetAckTimeout() const { return m_ackTimeout; }
909 
911  const PTimeInterval & t
912  ) { m_registrarTimeToLive = t; }
913  const PTimeInterval & GetRegistrarTimeToLive() const { return m_registrarTimeToLive; }
914 
916  const PTimeInterval & t
917  ) { m_notifierTimeToLive = t; }
918  const PTimeInterval & GetNotifierTimeToLive() const { return m_notifierTimeToLive; }
919 
920  P_DEPRECATED void SetNATBindingTimeout(
921  const PTimeInterval & t
922  ) { m_keepAliveTimeout = t; }
923  P_DEPRECATED const PTimeInterval & GetNATBindingTimeout() const { return m_keepAliveTimeout; }
924 
932  };
934  PTimeInterval & timeout,
935  KeepAliveType & type
936  ) { timeout = m_keepAliveTimeout; type = m_keepAliveType; }
938  const PTimeInterval & timeout,
939  KeepAliveType type
940  ) { m_keepAliveTimeout = timeout; m_keepAliveType = type; }
941 
942 
944  SIPTransaction * transaction
945  ) { m_activeTransactions.SetAt(transaction->GetTransactionID(), transaction); }
946 
947  PSafePtr<SIPTransaction> GetTransaction(const PString & transactionID, PSafetyMode mode)
948  { return PSafePtrCast<SIPTransactionBase, SIPTransaction>(m_activeTransactions.Find(transactionID, mode)); }
949 
952  unsigned GetNextCSeq() { return ++m_lastSentCSeq; }
953 
961 
964  bool GetAuthentication(
965  const PString & realm,
966  PString & authId,
967  PString & password
968  );
969 
972  virtual SIPURL GetDefaultLocalURL(const OpalTransport & transport, const SIPURL & remoteAddress);
973 
982  virtual void AdjustToRegistration(
983  SIP_PDU & pdu,
984  SIPConnection * connection = NULL,
985  const OpalTransport * transport = NULL
986  );
987 
988 
991  const SIPURL & GetProxy() const { return m_proxy; }
992 
995  void SetProxy(const SIPURL & url);
996 
999  void SetProxy(
1000  const PString & hostname,
1001  const PString & username,
1002  const PString & password
1003  );
1004 
1005 
1009 
1013 
1020  virtual PString GetUserAgent() const;
1021 
1024  void SetUserAgent(const PString & str) { m_userAgentString = str; }
1025 
1026 
1029  virtual unsigned GetAllowedMethods() const;
1030 
1031 
1034 
1036 
1037  virtual void OnStartTransaction(SIPConnection & conn, SIPTransaction & transaction);
1038 
1039 
1040  PSafePtr<SIPHandler> FindSIPHandlerByCallID(const PString & callID, PSafetyMode m)
1041  { return m_activeSIPHandlers.FindSIPHandlerByCallID(callID, m); }
1042 
1043  PSafePtr<SIPHandler> FindSIPHandlerByUrl(const PString & aor, SIP_PDU::Methods method, PSafetyMode mode)
1044  { return m_activeSIPHandlers.FindSIPHandlerByUrl(aor, method, mode); }
1045 
1047  { m_activeSIPHandlers.Update(handler); }
1048 
1049 
1051 
1052  PINDEX GetSRVIndex(const SIPURL & url);
1053  void ResetSRVIndex(const SIPURL & url);
1055 
1056  protected:
1057  void AddTransport(const OpalTransportPtr & transport, KeepAliveType keepAliveType);
1058  void TransportThreadMain(OpalTransportPtr transport);
1060 
1061  typedef std::map<PCaselessString, PINDEX> SRVIndexMap;
1063  PDECLARE_MUTEX(m_SRVIndexMutex);
1064 
1067  PStringSet m_allowedEvents;
1068 
1070 
1072  unsigned m_maxRetries;
1073  PTimeInterval m_retryTimeoutMin; // T1
1074  PTimeInterval m_retryTimeoutMax; // T2
1075  PTimeInterval m_nonInviteTimeout; // T3
1076  PTimeInterval m_pduCleanUpTimeout; // T4
1077  PTimeInterval m_inviteTimeout;
1078  PTimeInterval m_progressTimeout;
1079  PTimeInterval m_ackTimeout;
1080  PTimeInterval m_registrarTimeToLive;
1081  PTimeInterval m_notifierTimeToLive;
1082  PTimeInterval m_keepAliveTimeout;
1086 
1087  // Transport management
1088  PSafeDictionary<OpalTransportAddress, OpalTransport> m_transportsTable;
1089  PDECLARE_INSTRUMENTED_MUTEX(m_transportsMutex, SIPTransport, 2000, 1000);
1090 
1091  // Sub-protocol handlers
1093  PSafePtr<SIPHandler> FindHandlerByPDU(const SIP_PDU & pdu, PSafetyMode mode);
1094 
1096  PDECLARE_MUTEX(m_receivedConnectionMutex);
1097 
1098  PSafeDictionary<PString, SIPTransactionBase> m_activeTransactions;
1099 
1100  atomic<unsigned> m_lastSentCSeq;
1102 
1104  PSyncPoint m_sync;
1106  RegistrationCompletion() : m_reason(SIP_PDU::Information_Trying) { }
1107  };
1108  std::map<PString, RegistrationCompletion> m_registrationComplete;
1109 
1111  typedef std::multimap<PString, SIPURL> ConferenceMap;
1113 
1114  // Registrar
1115  typedef PSafeDictionary<SIPURL, RegistrarAoR> RegistrarDict;
1118 
1119  // Thread pooling
1121 
1122  // Network interface checking
1123  PDECLARE_InterfaceNotifier(SIPEndPoint, OnHighPriorityInterfaceChange);
1124  PDECLARE_InterfaceNotifier(SIPEndPoint, OnLowPriorityInterfaceChange);
1125  PInterfaceMonitor::Notifier m_onHighPriorityInterfaceChange;
1126  PInterfaceMonitor::Notifier m_onLowPriorityInterfaceChange;
1127 
1129 
1130  P_REMOVE_VIRTUAL_VOID(OnReceivedIntervalTooBrief(SIPTransaction &, SIP_PDU &));
1131  P_REMOVE_VIRTUAL_VOID(OnReceivedAuthenticationRequired(SIPTransaction &, SIP_PDU &));
1132  P_REMOVE_VIRTUAL_VOID(OnReceivedOK(SIPTransaction &, SIP_PDU &));
1133  P_REMOVE_VIRTUAL_VOID(OnMessageFailed(const SIPURL &, SIP_PDU::StatusCodes));
1134  P_REMOVE_VIRTUAL(SIPConnection *,CreateConnection(OpalCall &, const PString &, void *, const SIPURL &, OpalTransport *, SIP_PDU *, unsigned, OpalConnection::StringOptions *), NULL);
1135  P_REMOVE_VIRTUAL(PBoolean, OnReceivedPDU(OpalTransport &, SIP_PDU *), false);
1136  P_REMOVE_VIRTUAL(bool, OnReceivedConnectionlessPDU(OpalTransport &, SIP_PDU *), false);
1137  P_REMOVE_VIRTUAL(bool, OnReceivedConnectionlessPDU(SIP_PDU *), false);
1138  P_REMOVE_VIRTUAL(PBoolean, OnReceivedINVITE(OpalTransport &, SIP_PDU *), false);
1139  P_REMOVE_VIRTUAL(PBoolean, OnReceivedNOTIFY(OpalTransport &, SIP_PDU &), false);
1140  P_REMOVE_VIRTUAL(PBoolean, OnReceivedREGISTER(OpalTransport &, SIP_PDU &), false);
1144  P_REMOVE_VIRTUAL(bool, OnReceivedInfoPackage(SIPConnection &, const PString &, const PString &), false);
1145 };
1146 
1147 
1148 #endif // OPAL_SIP
1149 
1150 #endif // OPAL_SIP_SIPEP_H
1151 
1152 
1153 // End of File ///////////////////////////////////////////////////////////////
Definition: sipep.h:930
Definition: sipep.h:931
PTimeInterval m_retryTimeoutMax
Definition: sipep.h:1074
const PString & GetTransactionID() const
Definition: sippdu.h:699
Definition: sippdu.h:1328
void SetAckTimeout(const PTimeInterval &t)
Definition: sipep.h:905
Definition: sippdu.h:71
PInterfaceMonitor::Notifier m_onLowPriorityInterfaceChange
Definition: sipep.h:1126
friend ostream & operator<<(ostream &strm, const RegistrationStatus &status)
P_DEPRECATED void SetNATBindingRefreshMethod(const NATBindingRefreshMethod type)
Definition: sipep.h:1033
Definition: manager.h:150
PSafePtr< SIPHandler > FindSIPHandlerByUrl(const PString &url, SIP_PDU::Methods meth, PSafetyMode m)
void GetKeepAlive(PTimeInterval &timeout, KeepAliveType &type)
Definition: sipep.h:933
void SetKeepAlive(const PTimeInterval &timeout, KeepAliveType type)
Definition: sipep.h:937
virtual void OnStartTransaction(SIPConnection &conn, SIPTransaction &transaction)
unsigned GetRegistrationsCount() const
Definition: sipep.h:431
virtual void OnDialogInfoReceived(const SIPDialogNotification &info)
PString m_userAgentString
Definition: sipep.h:1066
Definition: endpoint.h:65
bool m_wasRegistering
Was registering or unregistering.
Definition: sipep.h:443
virtual PBoolean IsAcceptedAddress(const SIPURL &toAddr)
void SetProxy(const SIPURL &url)
PRACKMode
Mode for reliable provisional responses.
Definition: sipcon.h:633
void SetDefaultPRACKMode(SIPConnection::PRACKMode mode)
Definition: sipep.h:870
const PStringSet & GetRegistrarDomains() const
Definition: sipep.h:858
void SetDefaultAppearanceCode(int code)
Definition: sipep.h:1012
virtual void OnSubscriptionStatus(const SubscriptionStatus &status)
friend class RegistrarAoR
Definition: sipep.h:850
Definition: handlers.h:440
virtual bool OnReINVITE(SIPConnection &connection, bool fromRemote, const PString &remoteSDP)
void SetMaxPacketSizeUDP(PINDEX sz)
Definition: sipep.h:872
PredefinedPackages
Definition: sippdu.h:1309
const SIPURL & GetProxy() const
Definition: sipep.h:991
virtual bool OnReceivedINVITE(SIP_PDU *pdu)
Definition: sippdu.h:1056
int GetDefaultAppearanceCode() const
Definition: sipep.h:1008
SIPSubscribe::SubscriptionStatus SubscriptionStatus
Definition: sipep.h:607
void SetRegistrarDomains(const PStringSet &domains)
Definition: sipep.h:857
void SetRegisteredUserMode(bool v)
Definition: sipep.h:959
SRVIndexMap m_SRVIndex
Definition: sipep.h:1062
PNotifierTemplate< ConnectionlessMessageInfo & > ConnectionlessMessageNotifier
Definition: sipep.h:743
PTimeInterval m_keepAliveTimeout
Definition: sipep.h:1082
ConnectionlessMessageInfo(SIP_PDU &pdu)
Definition: sipep.h:727
Definition: sippdu.h:1548
unsigned GetNextCSeq()
Definition: sipep.h:952
virtual void OnReceivedResponse(SIPTransaction &transaction, SIP_PDU &response)
void SetNonInviteTimeout(const PTimeInterval &t)
Definition: sipep.h:885
PBoolean IsRegistered(const PString &aor, bool includeOffline=false)
virtual SIPConnection * CreateConnection(const SIPConnection::Init &init)
bool m_registeredUserMode
Definition: sipep.h:1084
virtual PString GetUserAgent() const
virtual bool OnReceivedPDU(SIP_PDU *pdu)
SIPHandlers m_activeSIPHandlers
Definition: sipep.h:1092
Definition: sipcon.h:131
OpalTransportAddress NextSRVAddress(const SIPURL &url)
PString m_addressofRecord
Address of record for registration.
Definition: sipep.h:442
PTimeInterval m_inviteTimeout
Definition: sipep.h:1077
PTimeInterval m_retryTimeoutMin
Definition: sipep.h:1073
Definition: transports.h:788
Definition: sippdu.h:533
PStringSet m_registrarDomains
Definition: sipep.h:1117
Definition: sippdu.h:1388
Definition: sipep.h:52
PSafePtr< SIPHandler > FindSIPHandlerByCallID(const PString &callID, PSafetyMode m)
RegistrarDict m_registeredUAs
Definition: sipep.h:1116
bool GetAuthentication(const PString &realm, PString &authId, PString &password)
SIPConnection::PRACKMode GetDefaultPRACKMode() const
Definition: sipep.h:866
Definition: handlers.h:325
const PTimeInterval & GetPduCleanUpTimeout() const
Definition: sipep.h:893
virtual PString GetDefaultTransport() const
enum SIPEndPoint::ConnectionlessMessageInfo::@42 m_status
virtual bool OnReceivedNOTIFY(SIP_PDU &request)
PSafeDictionary< OpalTransportAddress, OpalTransport > m_transportsTable
Definition: sipep.h:1088
SIP_PDU::StatusCodes m_reason
Definition: sipep.h:1105
StatusCodes
Definition: sippdu.h:544
virtual void OnRegistrationFailed(const PString &aor, SIP_PDU::StatusCodes reason, PBoolean wasRegistering)
virtual SIPURLList GetRegistrarAoRs() const
Definition: sippdu.h:522
SIPRegisterHandler * m_handler
Handler for registration.
Definition: sipep.h:441
PStringList GetSubscriptions(const SIPSubscribe::EventPackage &eventPackage, bool includeOffline=false) const
Definition: sipep.h:601
SIP_PDU::StatusCodes InternalHandleREGISTER(SIP_PDU &request, SIP_PDU *response)
SIPEndPoint(OpalManager &manager, unsigned maxThreads=15)
virtual void OnRegistered(const PString &aor, PBoolean wasRegistering)
CanNotifyResult
Definition: sipep.h:650
void AddTransaction(SIPTransaction *transaction)
Definition: sipep.h:943
const PTimeInterval & GetNonInviteTimeout() const
Definition: sipep.h:888
virtual WORD GetDefaultSignalPort() const
BindingMap m_bindings
Definition: sipep.h:846
bool ClearDialogContext(const PString &descriptor)
void TransportThreadMain(OpalTransportPtr transport)
PTimeInterval m_notifierTimeToLive
Definition: sipep.h:1081
P_DEPRECATED void SetNATBindingTimeout(const PTimeInterval &t)
Definition: sipep.h:920
const OpalProductInfo & GetProductInfo() const
Definition: sipep.h:833
OpalTransport & m_transport
Definition: sipep.h:734
std::multimap< PString, SIPURL > ConferenceMap
Definition: sipep.h:1111
Definition: sippdu.h:972
Definition: transports.h:411
void SetInviteTimeout(const PTimeInterval &t)
Definition: sipep.h:895
virtual void OnOptionsCompleted(const SIPOptions::Params &params, const SIP_PDU &response)
virtual SIP_PDU::StatusCodes OnReceivedREGISTER(SIPEndPoint &endpoint, const SIP_PDU &request)
bool UnregisterAll()
PTimeInterval m_progressTimeout
Definition: sipep.h:1078
RegistrationCompletion()
Definition: sipep.h:1106
const PTimeInterval & GetInviteTimeout() const
Definition: sipep.h:898
PBoolean Ping(const PURL &to)
void * m_userData
User data corresponding to this registration.
Definition: sipep.h:447
Definition: sipep.h:928
const PTimeInterval & GetAckTimeout() const
Definition: sipep.h:908
PTimeInterval m_nonInviteTimeout
Definition: sipep.h:1075
Definition: sipep.h:1103
RegistrarAoR(const PURL &aor)
std::map< PCaselessString, PINDEX > SRVIndexMap
Definition: sipep.h:1061
PTimeInterval m_ackTimeout
Definition: sipep.h:1079
const SIPURL & GetAoR() const
Definition: sipep.h:831
virtual bool OnReceivedREFER(SIP_PDU &request)
KeepAliveType m_keepAliveType
Definition: sipep.h:1083
PSafeDictionary< SIPURL, RegistrarAoR > RegistrarDict
Definition: sipep.h:1115
void SetRegistrarTimeToLive(const PTimeInterval &t)
Definition: sipep.h:910
std::map< SIPURL, Binding > BindingMap
Definition: sipep.h:845
PString m_id
Definition: sipep.h:842
SIPConnection::PRACKMode m_defaultPrackMode
Definition: sipep.h:1069
virtual void PrintOn(ostream &strm) const
Refuse SUBSCRIBE.
Definition: sipep.h:651
Definition: connection.h:530
unsigned GetMaxRetries() const
Definition: sipep.h:876
Definition: sippdu.h:1593
virtual void OnRegistrationStatus(const RegistrationStatus &status)
virtual PBoolean ForwardConnection(SIPConnection &connection, const PString &forwardParty)
void SendNotifyDialogInfo(const SIPDialogNotification &info)
PStringToString m_receivedConnectionTokens
Definition: sipep.h:1095
P_REMOVE_VIRTUAL(SIPConnection *, CreateConnection(OpalCall &, const PString &, void *, const SIPURL &, OpalTransport *, SIP_PDU *, unsigned, OpalConnection::StringOptions *), NULL)
bool GetSubscriptionStatus(const PString &token, const PString &eventPackage, SubscriptionStatus &status)
PINDEX GetMaxPacketSizeUDP() const
Definition: sipep.h:873
virtual bool OnReceivedInfoPackage(SIPConnection &connection, const PString &package, const PMultiPartList &content)
virtual PSafePtr< OpalConnection > MakeConnection(OpalCall &call, const PString &party, void *userData, unsigned int options, OpalConnection::StringOptions *stringOptions)
Definition: sippdu.h:539
PStringList GetPublications(const SIPSubscribe::EventPackage &eventPackage, bool includeOffline=false) const
Definition: sipep.h:784
PDECLARE_MUTEX(m_SRVIndexMutex)
Definition: handlers.h:49
PStringSet m_allowedEvents
Definition: sipep.h:1067
virtual SIPURL GetDefaultLocalURL(const OpalTransport &transport, const SIPURL &remoteAddress)
Definition: call.h:62
void AddTransport(const OpalTransportPtr &transport, KeepAliveType keepAliveType)
virtual void HandlePDU(const OpalTransportPtr &transport)
unsigned m_maxRetries
Definition: sipep.h:1072
SIPURL m_aor
Definition: sipep.h:838
OpalProductInfo m_productInfo
Server product info from registrar if available.
Definition: sipep.h:446
PTime m_lastUpdate
Definition: sipep.h:843
const PStringSet & GetAllowedEvents() const
Definition: sipep.h:862
KeepAliveType NATBindingRefreshMethod
Definition: sipep.h:1032
virtual bool ExpireBindings()
ConferenceMap m_conferenceAOR
Definition: sipep.h:1112
PInterfaceMonitor::Notifier m_onHighPriorityInterfaceChange
Definition: sipep.h:1125
SIP_PDU::StatusCodes m_reason
Reason for status change.
Definition: sipep.h:445
SIPURLList GetContacts() const
virtual void NewIncomingConnection(OpalListener &listener, const OpalTransportPtr &transport)
virtual bool OnReceivedMESSAGE(SIP_PDU &request)
virtual void OnReleased(OpalConnection &connection)
bool m_reRegistering
Was a registration refresh.
Definition: sipep.h:444
bool SendMESSAGE(SIPMessage::Params &params)
Definition: sippdu.h:1349
Accept SUBSCRIBE, but NOTIFY will be sent at a later time by caller
Definition: sipep.h:653
Definition: sippdu.h:761
virtual PBoolean SetupTransfer(SIPConnection &connection, const PString &remoteParty, const PString &replaces)
void UpdateHandlerIndexes(SIPHandler *handler)
Definition: sipep.h:1046
PINDEX GetSRVIndex(const SIPURL &url)
Definition: sipep.h:929
PStringList GetRegistrations(bool includeOffline=false) const
Definition: sipep.h:435
void SetProgressTimeout(const PTimeInterval &t)
Definition: sipep.h:900
PSafePtr< SIPHandler > FindHandlerByPDU(const SIP_PDU &pdu, PSafetyMode mode)
ConnectionlessMessageNotifier m_onConnectionlessMessage
Definition: sipep.h:1110
virtual void OnConferenceStatusChanged(OpalEndPoint &endpoint, const PString &uri, OpalConferenceState::ChangeType change)
PSafePtr< SIPConnection > GetSIPConnectionWithLock(const PString &token, PSafetyMode mode=PSafeReadWrite, SIP_PDU::StatusCodes *errorCode=NULL)
void SetMaxRetries(unsigned r)
Definition: sipep.h:875
virtual void OnTransactionFailed(SIPTransaction &transaction)
ChangeType
Definition: manager.h:76
Definition: sipep.h:440
virtual PStringList GetAvailableStringOptions() const
bool IsSubscribed(const PString &aor, bool includeOffline=false)
virtual void OnChangedRegistrarAoR(RegistrarAoR &ua)
bool Unregister(const PString &aor)
int m_defaultAppearanceCode
Definition: sipep.h:1101
Definition: sipcon.h:138
PSafePtr< OpalTransport > OpalTransportPtr
Definition: transports.h:50
bool Register(const SIPRegister::Params &params, PString &aor, SIP_PDU::StatusCodes *reason=NULL)
Definition: handlers.h:205
void SetNotifierTimeToLive(const PTimeInterval &t)
Definition: sipep.h:915
SIPThreadPool m_threadPool
Definition: sipep.h:1120
Registrar parameters.
Definition: sippdu.h:1260
void Update(SIPHandler *handler)
OpalTransportPtr GetTransport(const SIPTransactionOwner &transactor, SIP_PDU::StatusCodes &reason)
SIP_PDU & m_pdu
Definition: sipep.h:733
const PTimeInterval & GetRegistrarTimeToLive() const
Definition: sipep.h:913
virtual void OnMESSAGECompleted(const SIPMessage::Params &params, SIP_PDU::StatusCodes reason)
PDECLARE_InterfaceNotifier(SIPEndPoint, OnHighPriorityInterfaceChange)
P_REMOVE_VIRTUAL_VOID(OnReceivedIntervalTooBrief(SIPTransaction &, SIP_PDU &))
bool HasBindings() const
Definition: sipep.h:835
virtual void AdjustToRegistration(SIP_PDU &pdu, SIPConnection *connection=NULL, const OpalTransport *transport=NULL)
Definition: sippdu.h:244
bool GetRegistrationStatus(const PString &token, RegistrationStatus &status)
void SetUserAgent(const PString &str)
Definition: sipep.h:1024
PTimeInterval m_pduCleanUpTimeout
Definition: sipep.h:1076
Methods
Definition: sippdu.h:526
Definition: connection.h:415
void ResetSRVIndex(const SIPURL &url)
bool UnsubcribeAll(SIPSubscribe::PredefinedPackages eventPackage)
virtual void OnRegInfoReceived(const SIPRegNotification &info)
virtual unsigned GetAllowedMethods() const
KeepAliveType
Definition: sipep.h:927
Definition: sippdu.h:899
Definition: handlers.h:171
const PTimeInterval & GetNotifierTimeToLive() const
Definition: sipep.h:918
PTimeInterval m_registrarTimeToLive
Definition: sipep.h:1080
const PTimeInterval & GetRetryTimeoutMax() const
Definition: sipep.h:883
virtual bool OnReceivedOPTIONS(SIP_PDU &request)
PStringList GetAddresses(bool includeOffline, SIP_PDU::Methods meth, const PString &eventPackage=PString::Empty()) const
bool m_disableTrying
Definition: sipep.h:1128
bool Publish(const SIPSubscribe::Params &params, const PString &body, PString &aor)
void SetPduCleanUpTimeout(const PTimeInterval &t)
Definition: sipep.h:890
virtual CanNotifyResult CanNotify(const PString &eventPackage, const SIPURL &aor)
Definition: sipep.h:819
SIPThreadPool & GetThreadPool()
Definition: sipep.h:1050
OpalProductInfo m_productInfo
Definition: sipep.h:839
atomic< unsigned > m_lastSentCSeq
Definition: sipep.h:1100
Definition: transports.h:151
bool Notify(const SIPURL &targetAddress, const PString &eventPackage, const PObject &body)
virtual Comparison Compare(const PObject &obj) const
void SetRetryTimeouts(const PTimeInterval &t1, const PTimeInterval &t2)
Definition: sipep.h:878
bool GetRegisteredUserMode() const
Definition: sipep.h:960
PINDEX m_maxPacketSizeUDP
Definition: sipep.h:1071
virtual RegistrarAoR * CreateRegistrarAoR(const SIP_PDU &request)
Definition: handlers.h:499
std::map< PString, unsigned > m_cseq
Definition: sipep.h:848
virtual PBoolean GarbageCollection()
virtual bool OnReceivedREGISTER(SIP_PDU &request)
PSafePtr< SIPTransaction > GetTransaction(const PString &transactionID, PSafetyMode mode)
Definition: sipep.h:947
SIPURL m_proxy
Definition: sipep.h:1065
virtual SIPRegisterHandler * CreateRegisterHandler(const SIPRegister::Params &params)
bool Subscribe(const SIPSubscribe::Params &params, PString &token, bool tokenIsAOR=true)
PSafeDictionary< PString, SIPTransactionBase > m_activeTransactions
Definition: sipep.h:1098
unsigned GetCount(SIP_PDU::Methods meth, const PString &eventPackage=PString::Empty()) const
bool m_shuttingDown
Definition: sipep.h:1085
Accept SUBSCRIBE and send NOTIFY.
Definition: sipep.h:652
PDECLARE_INSTRUMENTED_MUTEX(m_transportsMutex, SIPTransport, 2000, 1000)
virtual PStringList GetNetworkURIs(const PString &name) const
virtual PSafePtr< RegistrarAoR > FindRegistrarAoR(const SIPURL &aor)
Definition: sipep.h:853
PSafePtr< SIPHandler > FindSIPHandlerByUrl(const PString &aor, SIP_PDU::Methods method, PSafetyMode mode)
Definition: sipep.h:1043
virtual bool OnReceivedSUBSCRIBE(SIP_PDU &request, SIPDialogContext *dialog)
P_DEPRECATED const PTimeInterval & GetNATBindingTimeout() const
Definition: sipep.h:923
bool Unsubscribe(const PString &aor, bool invalidateNotifiers=false)
Definition: sippdu.h:532
unsigned GetSubscriptionCount(const SIPSubscribe::EventPackage &eventPackage)
Definition: sipep.h:595
const PTimeInterval & GetRetryTimeoutMin() const
Definition: sipep.h:882
Definition: connection.h:358
virtual bool SendOPTIONS(const SIPOptions::Params &params)
PSyncPoint m_sync
Definition: sipep.h:1104
PSafePtr< SIPHandler > FindSIPHandlerByCallID(const PString &callID, PSafetyMode m)
Definition: sipep.h:1040
std::map< PString, RegistrationCompletion > m_registrationComplete
Definition: sipep.h:1108
Definition: sipep.h:841
virtual void ShutDown()
const PTimeInterval & GetProgressTimeout() const
Definition: sipep.h:903
void SetConnectionlessMessageNotifier(const ConnectionlessMessageNotifier &notifier)
Definition: sipep.h:747