OPAL  Version 3.18.8
h323ep.h
Go to the documentation of this file.
1 /*
2  * h323ep.h
3  *
4  * H.323 protocol handler
5  *
6  * Open H323 Library
7  *
8  * Copyright (c) 1998-2001 Equivalence Pty. Ltd.
9  *
10  * The contents of this file are subject to the Mozilla Public License
11  * Version 1.0 (the "License"); you may not use this file except in
12  * compliance with the License. You may obtain a copy of the License at
13  * http://www.mozilla.org/MPL/
14  *
15  * Software distributed under the License is distributed on an "AS IS"
16  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17  * the License for the specific language governing rights and limitations
18  * under the License.
19  *
20  * The Original Code is Open H323 Library.
21  *
22  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
23  *
24  * Portions of this code were written with the assisance of funding from
25  * Vovida Networks, Inc. http://www.vovida.com.
26  *
27  * Contributor(s): ______________________________________.
28  */
29 
30 #ifndef OPAL_H323_H323EP_H
31 #define OPAL_H323_H323EP_H
32 
33 #ifdef P_USE_PRAGMA
34 #pragma interface
35 #endif
36 
37 #include <opal_config.h>
38 
39 #if OPAL_H323
40 
41 #include <rtp/rtpep.h>
42 #include <opal/manager.h>
43 #include <opal/call.h>
44 #include <opal/transports.h>
45 #include <h323/h323con.h>
46 #include <h323/h323caps.h>
47 #include <h323/h235auth.h>
48 #include <h323/gkclient.h>
49 #include <asn/h225.h>
50 #include <h460/h4601.h>
51 
52 
53 class H225_EndpointType;
54 class H225_VendorIdentifier;
55 class H225_H221NonStandard;
56 class H225_ServiceControlDescriptor;
57 class H225_FeatureSet;
58 
59 class H235SecurityInfo;
60 
61 class H323Gatekeeper;
62 class H323SignalPDU;
64 
65 class H46019Server;
66 
67 
69 
83 {
84  PCLASSINFO(H323EndPoint, OpalRTPEndPoint);
85 
86  public:
87  enum {
89  };
90  static const OpalProductInfo & AvayaPhone();
91 
97  OpalManager & manager
98  );
99 
102  ~H323EndPoint();
104 
111  virtual void ShutDown();
112 
117  virtual PBoolean GarbageCollection();
118 
148  virtual PSafePtr<OpalConnection> MakeConnection(
149  OpalCall & call,
150  const PString & party,
151  void * userData = NULL,
152  unsigned int options = 0,
153  OpalConnection::StringOptions * stringOptions = NULL
154  );
155 
174  virtual void OnReleased(
175  OpalConnection & connection
176  );
177 
180  virtual PStringList GetAvailableStringOptions() const;
182 
187  virtual void SetEndpointTypeInfo(
188  H225_EndpointType & info
189  ) const;
190 
193  virtual void SetVendorIdentifierInfo(
194  H225_VendorIdentifier & info
195  ) const;
196 
199  virtual void SetH221NonStandardInfo(
200  H225_H221NonStandard & info
201  ) const;
202 
205  virtual bool SetGatewaySupportedProtocol(
206  H225_ArrayOf_SupportedProtocols & protocols
207  ) const;
208 
212  virtual bool OnSetGatewayPrefixes(
213  PStringList & prefixes
214  ) const;
216 
217 
240  bool UseGatekeeper(
241  const PString & address = PString::Empty(),
242  const PString & identifier = PString::Empty(),
243  const PString & localAddress = PString::Empty()
244  );
245 
256  bool SetGatekeeper(
257  const PString & address,
258  const PString & localAddress = PString::Empty()
259  );
260 
275  bool SetGatekeeperZone(
276  const PString & address,
277  const PString & identifier,
278  const PString & localAddress = PString::Empty()
279  );
280 
290  bool LocateGatekeeper(
291  const PString & identifier,
292  const PString & localAddress = PString::Empty()
293  );
294 
303  bool DiscoverGatekeeper(
304  const PString & localAddress = PString::Empty()
305  );
306 
315  H323Transport * transport
316  );
317 
321  const PString & alias = PString::Empty()
322  ) const;
323 
324  typedef PList<H323Gatekeeper> GatekeeperList;
325 
328  const GatekeeperList & GetGatekeepers() const { return m_gatekeepers; }
329 
332  PBoolean IsRegisteredWithGatekeeper(bool all = false) const;
333 
339  PBoolean RemoveGatekeeper(
340  int reason = -1
341  );
342 
345  virtual void SetGatekeeperPassword(
346  const PString & password,
347  const PString & username = PString::Empty()
348  );
349 
352  void SetAliasPasswords(
353  const PStringToString & aliasPasswords,
354  const PString & defaultAddress
355  );
356 
359  virtual const PString & GetGatekeeperUsername() const { return m_gatekeeperUsername; }
360 
363  virtual const PString & GetGatekeeperPassword() const { return m_gatekeeperPassword; }
364 
365  enum { MaxGatekeeperAliasLimit = 1000000 };
369  PINDEX limit
370  );
371 
375 
380 
384 
387  void SetGatekeeperRasRedirect(bool redir) { m_gatekeeperRasRedirect = redir; }
388 
392 
395  virtual H235Authenticators CreateAuthenticators();
396 
399  virtual void OnGatekeeperStatus(
400  H323Gatekeeper & gk,
402  );
403  // For backward compatibility
404  virtual void OnGatekeeperStatus(
406  );
408 
413  virtual void NewIncomingConnection(
414  OpalListener & listener,
415  const OpalTransportPtr & transport
416  );
417 
419  OpalTransportPtr transport,
420  bool reused = false
421  );
422 
426  OpalCall & call,
427  const PString & token,
428  void * userData,
429  OpalTransport & transport,
430  const PString & alias,
431  const H323TransportAddress & address,
432  H323SignalPDU * setupPDU,
433  unsigned options = 0,
434  OpalConnection::StringOptions * stringOptions = NULL
435  );
436 
452  virtual PBoolean SetupTransfer(
453  const PString & token,
454  const PString & callIdentity,
455  const PString & remoteParty,
456  void * userData = NULL
457  );
458 
464  void TransferCall(
465  const PString & token,
466  const PString & remoteParty,
467  const PString & callIdentity = PString::Empty()
469  );
470 
478  const PString & primaryCallToken,
479  const PString & secondaryCallToken
480  );
481 
485  PBoolean IntrudeCall(
486  const PString & remoteParty,
487  unsigned capabilityLevel,
488  void * userData = NULL
489  );
490 
497  PBoolean ParsePartyName(
498  const PString & party,
499  PString & alias,
500  H323TransportAddress & address,
501  OpalConnection::StringOptions * stringOptions = NULL
502  );
503 
514  PSafePtr<H323Connection> FindConnectionWithLock(
515  const PString & token,
516  PSafetyMode mode = PSafeReadWrite
517  );
518 
526  virtual PBoolean OnSendSignalSetup(H323Connection & connection,
527  H323SignalPDU & setupPDU);
528 
540  virtual PBoolean OnSendCallProceeding(
541  H323Connection & connection,
542  H323SignalPDU & callProceedingPDU
543  );
544 
556  virtual PBoolean OnSendConnect(
557  H323Connection & connection,
558  H323SignalPDU & connectPDU
559  );
560 
572  virtual PBoolean OnIncomingCall(
573  H323Connection & connection,
574  const H323SignalPDU & setupPDU,
575  H323SignalPDU & alertingPDU
576  );
577 
584  virtual PBoolean OnOutgoingCall(
585  H323Connection & conn,
586  const H323SignalPDU & connectPDU
587  );
588 
593  virtual PBoolean OnCallTransferInitiate(
594  H323Connection & connection,
595  const PString & remoteParty
596  );
597 
602  virtual PBoolean OnCallTransferIdentify(
603  H323Connection & connection
604  );
605 
610  virtual void OnSendARQ(
611  H323Connection & conn,
612  H225_AdmissionRequest & arq
613  );
614 
621  virtual OpalConnection::AnswerCallResponse OnAnswerCall(
622  H323Connection & connection,
623  const PString & callerName,
624  const H323SignalPDU & setupPDU,
625  H323SignalPDU & connectPDU,
626  H323SignalPDU & progressPDU
627  );
628  virtual OpalConnection::AnswerCallResponse OnAnswerCall(
629  OpalConnection & connection,
630  const PString & caller
631  );
632 
643  virtual PBoolean OnAlerting(
644  H323Connection & connection,
645  const H323SignalPDU & alertingPDU,
646  const PString & user
647  );
648 
653  virtual PBoolean OnSendAlerting(
654  H323Connection & connection,
655  H323SignalPDU & alerting,
656  const PString & calleeName,
657  PBoolean withMedia
658  );
659 
663  virtual PBoolean OnSentAlerting(
664  H323Connection & connection
665  );
666 
675  virtual PBoolean OnConnectionForwarded(
676  H323Connection & connection,
677  const PString & forwardParty,
678  const H323SignalPDU & pdu
679  );
680 
689  virtual PBoolean ForwardConnection(
690  H323Connection & connection,
691  const PString & forwardParty,
692  const H323SignalPDU & pdu
693  );
694 
701  virtual void OnConnectionEstablished(
702  H323Connection & connection,
703  const PString & token
704  );
705 
708  virtual PBoolean IsConnectionEstablished(
709  const PString & token
710  );
712 
713 
720  virtual PBoolean OnStartLogicalChannel(
721  H323Connection & connection,
722  H323Channel & channel
723  );
724 
729  virtual void OnClosedLogicalChannel(
730  H323Connection & connection,
731  const H323Channel & channel
732  );
733 
739  virtual void OnGatekeeperNATDetect(
740  const PIPSocket::Address & publicAddr,
741  H323TransportAddress & gkRouteAddress
742  );
744 
754  virtual void OnHTTPServiceControl(
755  unsigned operation,
756  unsigned sessionId,
757  const PString & url
758  );
759 
769  virtual void OnCallCreditServiceControl(
770  const PString & amount,
771  PBoolean mode
772  );
773 
777  virtual void OnServiceControlSession(
778  unsigned type,
779  unsigned sessionid,
780  const H323ServiceControlSession & session,
781  H323Connection * connection
782  );
783 
787  const H225_ServiceControlDescriptor & contents
788  );
790 
798  virtual PBoolean OnCallIndependentSupplementaryService(
799  const H323SignalPDU & setupPDU
800  );
801 
807  virtual PBoolean OnNegotiateConferenceCapabilities(
808  const H323SignalPDU & setupPDU
809  );
811 
816  virtual void SetDefaultLocalPartyName(
817  const PString & name
818  );
819 
827  bool SetAliasNames(
828  const PStringList & names
829  );
830 
837  bool AddAliasNames(
838  const PStringList & names,
839  const PString & altGk = PString::Empty(),
840  bool updateGk = true
841  );
842 
846  bool RemoveAliasNames(
847  const PStringList & names,
848  bool updateGk = true
849  );
850 
857  bool AddAliasName(
858  const PString & name,
859  const PString & altGk = PString::Empty(),
860  bool updateGk = true
861  );
862 
866  bool RemoveAliasName(
867  const PString & name,
868  bool updateGk = true
869  );
870 
875  PStringList GetAliasNames() const;
876 
881  const PStringList & patterns,
882  const PString & altGk = PString::Empty(),
883  bool updateGk = true
884  );
885 
889  const PStringList & patterns,
890  bool updateGk = true
891  );
892 
896  bool AddAliasNamePattern(
897  const PString & pattern,
898  const PString & altGk = PString::Empty(),
899  bool updateGk = true
900  );
901 
905  const PString & pattern,
906  bool updateGk = true
907  );
908 
913  const PStringList & patterns
914  );
915 
918  PStringList GetAliasNamePatterns() const;
919 
920  static int ParseAliasPatternRange(const PString & pattern, PString & start, PString & end);
921 
924  bool HasAlias(
925  const PString & alias
926  ) const;
927 
930  const PString & GetDefaultILSServer() const { return m_manager.GetDefaultILSServer(); }
931 
935  const PString & server
936  ) { m_manager.SetDefaultILSServer(server); }
937 
940  PBoolean IsFastStartDisabled() const
941  { return disableFastStart; }
942 
946  PBoolean mode
947  ) { disableFastStart = mode; }
948 
951  PBoolean IsH245TunnelingDisabled() const
952  { return disableH245Tunneling || GetProductInfo() == AvayaPhone(); }
953 
957  PBoolean mode
958  ) { disableH245Tunneling = mode; }
959 
962  PBoolean IsH245inSetupDisabled() const
963  { return disableH245inSetup; }
964 
968  PBoolean mode
969  ) { disableH245inSetup = mode; }
970 
973  bool IsForcedSymmetricTCS() const
974  { return m_forceSymmetricTCS; }
975 
979  bool mode
980  ) { m_forceSymmetricTCS = mode; }
981 
985  PBoolean IsH245Disabled() const
986  { return m_bH245Disabled || GetProductInfo() == AvayaPhone(); }
987 
991  void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
992 
995  PBoolean CanDisplayAmountString() const
996  { return canDisplayAmountString; }
997 
1001  PBoolean mode
1002  ) { canDisplayAmountString = mode; }
1003 
1006  PBoolean CanEnforceDurationLimit() const
1007  { return canEnforceDurationLimit; }
1008 
1012  PBoolean mode
1013  ) { canEnforceDurationLimit = mode; }
1014 
1015 #if OPAL_H450
1016 
1019 
1023  unsigned level
1024  ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
1025 #endif
1026 
1029  virtual void OnReceivedInitiateReturnError();
1030 
1033  PBoolean CanAutoCallForward() const { return autoCallForward; }
1034 
1040 
1056  e_MCUOnly = 160,
1060  };
1061 
1065 
1069 
1072  PBoolean IsTerminal() const;
1073 
1076  PBoolean IsGateway() const;
1077 
1080  PBoolean IsGatekeeper() const;
1081 
1084  PBoolean IsMCU() const;
1085 
1090 
1095 
1099  unsigned minDelay,
1100  unsigned maxDelay
1101  ) { m_manager.SetAudioJitterDelay(minDelay, maxDelay); }
1102 
1103 #if OPAL_H239
1104 
1107 
1111  bool on
1112  ) { m_defaultH239Control = on; }
1113 #endif
1114 
1115 #if OPAL_H460
1116 
1118  bool H460Disabled() const { return m_disableH460; }
1119 
1122  void DisableH460(bool disable = true) { m_disableH460 = disable; }
1123 
1125 
1130  H323Connection * connection
1131  );
1133  H323Connection * connection
1134  );
1135 
1138  virtual PBoolean OnSendFeatureSet(H460_MessageType pduType, H225_FeatureSet &);
1139 
1142  virtual void OnReceiveFeatureSet(H460_MessageType pduType, const H225_FeatureSet &);
1143 
1148  virtual bool OnLoadFeature(
1149  H460_Feature & feature
1150  );
1151 
1152 #endif // OPAL_H460
1153 
1154 #if OPAL_H460_NAT
1155  H46019Server * GetH46019Server() const { return m_H46019Server; }
1156 #endif
1157 
1160  virtual PBoolean IsLocalAddress(
1161  const PIPSocket::Address & remoteAddress
1162  ) const { return m_manager.IsLocalAddress(remoteAddress); }
1163 
1166  virtual void TranslateTCPAddress(
1167  PIPSocket::Address & localAddr,
1168  const PIPSocket::Address & remoteAddr
1169  );
1170 
1173  const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
1174 
1177  const PTimeInterval & GetFirstSignalPduTimeout() const { return firstSignalPduTimeout; }
1178 
1181  const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
1182 
1186 
1190 
1193  const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
1194 
1197  const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
1198 
1201  const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
1202 
1205  const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
1206 
1209  const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
1210 
1214 
1217  const PTimeInterval & GetNoMediaTimeout() const { return m_manager.GetNoMediaTimeout(); }
1218 
1222  const PTimeInterval & newInterval
1223  ) { m_manager.SetNoMediaTimeout(newInterval); }
1224 
1227  const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
1228 
1232 
1235  const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
1236 
1239  unsigned GetRasRequestRetries() const { return rasRequestRetries; }
1240 
1244  const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
1245 
1249  void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
1250 
1255  const PTimeInterval & GetGatekeeperStartDelay() const { return m_gatekeeperStartDelay; }
1256 
1261  void SetGatekeeperStartDelay(const PTimeInterval & gatekeeperStartDelay) { m_gatekeeperStartDelay = gatekeeperStartDelay; }
1262 
1265  const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
1266 
1269  void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
1270 
1273  bool GetSendGRQ() const { return m_sendGRQ; }
1274 
1277  void SetSendGRQ(bool v) { m_sendGRQ = v; }
1278 
1282 
1286 
1289  const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
1290 
1293  const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
1294 
1297  const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
1298 
1301  const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
1302 
1304  const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
1305  const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
1306  const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
1307  const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
1308  const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
1309  const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
1310 
1311 #if OPAL_H450
1312 
1314  H323CallIdentityDict& GetCallIdentityDictionary() { return m_secondaryConnectionsActive; }
1315 
1319 #endif //OPAL_H450
1320 
1324  virtual PString GetDefaultTransport() const;
1325 
1328  virtual WORD GetDefaultSignalPort() const;
1329 
1331  PString GetCompatibility(
1332  H323Connection::CompatibilityIssues issue
1333  ) const;
1334 
1340  bool SetCompatibility(
1341  H323Connection::CompatibilityIssues issue,
1342  const PString & regex
1343  );
1344 
1352  bool AddCompatibility(
1353  H323Connection::CompatibilityIssues issue,
1354  const PString & regex
1355  );
1356 
1358  bool HasCompatibilityIssue(
1359  H323Connection::CompatibilityIssues issue,
1360  const OpalProductInfo & productInfo
1361  ) const;
1363 
1364  // For backward compatibility
1365  void SetLocalUserName(const PString & name) { return SetDefaultLocalPartyName(name); }
1366  const PString & GetLocalUserName() const { return GetDefaultLocalPartyName(); }
1367 
1368  PTimeInterval InternalGetGatekeeperStartDelay();
1369 
1370  protected:
1371  bool InternalStartGatekeeper(const H323TransportAddress & remoteAddress, const PString & localAddress);
1372  bool InternalRestartGatekeeper(bool adjustingRegistrations = true);
1373  bool InternalCreateGatekeeper(const H323TransportAddress & remoteAddress, const PStringList & aliases);
1374  void InternalSetGatekeeperPassword(H323Gatekeeper& gatekeeper, const OpalTransportAddress& gatekeeperAddress) const;
1375 
1377  OpalCall & call,
1378  const PString & existingToken,
1379  const PString & callIdentity,
1380  unsigned capabilityLevel,
1381  const PString & remoteParty,
1382  void * userData,
1383  unsigned int options = 0,
1384  OpalConnection::StringOptions * stringOptions = NULL
1385  );
1386 
1387  // Configuration variables, commonly changed
1388  typedef map<PString, OpalTransportAddress> AliasToGkMap;
1391  PDECLARE_MUTEX( m_aliasMutex);
1397  PBoolean m_bH245Disabled; /* enabled or disabled h245 */
1400 #if OPAL_H450
1402 #endif
1403 
1405 
1406 #if OPAL_H239
1408 #endif
1409 
1411 
1412  // Some more configuration variables, rarely changed.
1414  PTimeInterval firstSignalPduTimeout;
1415  PTimeInterval endSessionTimeout;
1419  PTimeInterval logicalChannelTimeout;
1420  PTimeInterval requestModeTimeout;
1421  PTimeInterval roundTripDelayTimeout;
1422  PTimeInterval roundTripDelayRate;
1425  PTimeInterval rasRequestTimeout;
1427  PTimeInterval registrationTimeToLive;
1428  PTimeInterval m_gatekeeperStartDelay;
1429 
1434  PDECLARE_MUTEX(m_delayGatekeeperMutex);
1435 
1436  /* Protect against absence of a response to the ctIdentify reqest
1437  (Transferring Endpoint - Call Transfer with a secondary Call) */
1438  PTimeInterval callTransferT1;
1439  /* Protect against failure of completion of the call transfer operation
1440  involving a secondary Call (Transferred-to Endpoint) */
1441  PTimeInterval callTransferT2;
1442  /* Protect against failure of the Transferred Endpoint not responding
1443  within sufficient time to the ctInitiate APDU (Transferring Endpoint) */
1444  PTimeInterval callTransferT3;
1445  /* May optionally operate - protects against absence of a response to the
1446  ctSetup request (Transferred Endpoint) */
1447  PTimeInterval callTransferT4;
1448 
1450  PTimeInterval callIntrusionT1;
1451  PTimeInterval callIntrusionT2;
1452  PTimeInterval callIntrusionT3;
1453  PTimeInterval callIntrusionT4;
1454  PTimeInterval callIntrusionT5;
1455  PTimeInterval callIntrusionT6;
1456 
1457  // Dynamic variables
1458  PSafeDictionary<PString, H323Connection> m_connectionsByCallId;
1459  std::set<OpalTransportPtr> m_reusableTransports;
1460  PDECLARE_MUTEX( m_reusableTransportMutex);
1461 
1463 
1464  typedef PDictionary<PString, H323Gatekeeper> GatekeeperByAlias;
1465 
1474  PDECLARE_MUTEX( m_gatekeeperMutex);
1475  PStringToString m_aliasPasswords;
1477 
1478 #if OPAL_H450
1479  H323CallIdentityDict m_secondaryConnectionsActive;
1480  mutable atomic<unsigned> m_nextH450CallIdentity;
1482 #endif
1483 
1484 #if OPAL_H460
1487 #endif
1488 #if OPAL_H460_NAT
1489  H46019Server * m_H46019Server;
1490 #endif
1491 
1492  typedef map<H323Connection::CompatibilityIssues, PRegularExpression> CompatibilityEndpoints;
1494 
1495  private:
1496  P_REMOVE_VIRTUAL_VOID(OnConnectionCleared(H323Connection &, const PString &));
1497  P_REMOVE_VIRTUAL_VOID(OnRTPStatistics(const H323Connection &, const OpalRTPSession &) const);
1498  P_REMOVE_VIRTUAL(PBoolean, OnConferenceInvite(const H323SignalPDU &), false);
1499  P_REMOVE_VIRTUAL_VOID(OnGatekeeperConfirm());
1500  P_REMOVE_VIRTUAL_VOID(OnGatekeeperReject());
1501  P_REMOVE_VIRTUAL_VOID(OnRegistrationConfirm());
1502  P_REMOVE_VIRTUAL_VOID(OnRegistrationReject());
1503  P_REMOVE_VIRTUAL_VOID(OnGatekeeperNATDetect(PIPSocket::Address, PString &, H323TransportAddress &));
1504 };
1505 
1506 #endif // OPAL_H323
1507 
1508 #endif // OPAL_H323_H323EP_H
1509 
1510 
const PTimeInterval & GetCallTransferT1() const
Definition: h323ep.h:1289
PBoolean ShouldClearCallOnRoundTripFail() const
Definition: h323ep.h:1213
Definition: h4601.h:636
PINDEX m_gatekeeperAliasLimit
Definition: h323ep.h:1471
Definition: h323ep.h:88
void SetGatekeeperAliasLimit(PINDEX limit)
Definition: manager.h:150
PTimeInterval capabilityExchangeTimeout
Definition: h323ep.h:1418
virtual void OnConnectionEstablished(H323Connection &connection, const PString &token)
virtual H460_FeatureSet * CreateFeatureSet(H323Connection *connection)
void InternalSetGatekeeperPassword(H323Gatekeeper &gatekeeper, const OpalTransportAddress &gatekeeperAddress) const
virtual void OnHTTPServiceControl(unsigned operation, unsigned sessionId, const PString &url)
PTimeInterval callIntrusionT6
Definition: h323ep.h:1455
bool RemoveAliasNamePattern(const PString &pattern, bool updateGk=true)
PBoolean CanEnforceDurationLimit() const
Definition: h323ep.h:1006
PTimeInterval registrationTimeToLive
Definition: h323ep.h:1427
bool RemoveAliasName(const PString &name, bool updateGk=true)
H460_FeatureSet * m_features
Definition: h323ep.h:1486
void SetGatekeeperStartDelay(const PTimeInterval &gatekeeperStartDelay)
Definition: h323ep.h:1261
void SetNoMediaTimeout(const PTimeInterval &newInterval)
Definition: manager.h:1925
Definition: h323ep.h:1058
bool m_forceSymmetricTCS
Definition: h323ep.h:1396
const PString & GetDefaultILSServer() const
Definition: h323ep.h:930
bool IsForcedSymmetricTCS() const
Definition: h323ep.h:973
const PTimeInterval & GetSignallingChannelCallTimeout() const
Definition: h323ep.h:1173
PDECLARE_MUTEX(m_aliasMutex)
virtual void SetGatekeeperPassword(const PString &password, const PString &username=PString::Empty())
bool AddAliasNamePatterns(const PStringList &patterns, const PString &altGk=PString::Empty(), bool updateGk=true)
PTimeInterval callIntrusionT4
Definition: h323ep.h:1453
Definition: h323ep.h:1044
unsigned GetRasRequestRetries() const
Definition: h323ep.h:1239
void DisableH460(bool disable=true)
Definition: h323ep.h:1122
PBoolean RemoveGatekeeper(int reason=-1)
virtual PBoolean IsLocalAddress(const PIPSocket::Address &remoteAddress) const
Definition: h323ep.h:1160
H323CallIdentityDict & GetCallIdentityDictionary()
Definition: h323ep.h:1314
const PString & GetDefaultILSServer() const
Definition: manager.h:2005
bool HasCompatibilityIssue(H323Connection::CompatibilityIssues issue, const OpalProductInfo &productInfo) const
Determine if we must compensate for remote endpoint.
Definition: h323pdu.h:66
const PTimeInterval & GetLogicalChannelTimeout() const
Definition: h323ep.h:1197
PSafePtr< H323Connection > FindConnectionWithLock(const PString &token, PSafetyMode mode=PSafeReadWrite)
virtual PBoolean IsConnectionEstablished(const PString &token)
PTime m_nextGatekeeperDiscovery
Definition: h323ep.h:1433
virtual H235Authenticators CreateAuthenticators()
bool GetSendGRQ() const
Definition: h323ep.h:1273
Definition: transports.h:788
bool H460Disabled() const
Definition: h323ep.h:1118
void DisableFastStart(PBoolean mode)
Definition: h323ep.h:945
virtual PBoolean OnOutgoingCall(H323Connection &conn, const H323SignalPDU &connectPDU)
PTimeInterval callTransferT4
Definition: h323ep.h:1447
Definition: h323ep.h:1055
bool LocateGatekeeper(const PString &identifier, const PString &localAddress=PString::Empty())
bool m_sendGRQ
Definition: h323ep.h:1431
void SetCanDisplayAmountString(PBoolean mode)
Definition: h323ep.h:1000
void SetCallIntrusionProtectionLevel(unsigned level)
Definition: h323ep.h:1022
const PTimeInterval & GetCallIntrusionT3() const
Definition: h323ep.h:1306
virtual void TranslateTCPAddress(PIPSocket::Address &localAddr, const PIPSocket::Address &remoteAddr)
Definition: h323ep.h:1057
bool m_oneSignalAddressInRRQ
Definition: h323ep.h:1432
H460_FeatureSet * GetFeatures() const
Definition: h323ep.h:1124
PDictionary< PString, H323Gatekeeper > GatekeeperByAlias
Definition: h323ep.h:1464
const PTimeInterval & GetRoundTripDelayRate() const
Definition: h323ep.h:1209
PBoolean m_bH245Disabled
Definition: h323ep.h:1397
PBoolean CanDisplayAmountString() const
Definition: h323ep.h:995
CompatibilityEndpoints m_compatibility
Definition: h323ep.h:1493
unsigned callIntrusionProtectionLevel
Definition: h323ep.h:1401
const PTimeInterval & GetRequestModeTimeout() const
Definition: h323ep.h:1201
PBoolean ParsePartyName(const PString &party, PString &alias, H323TransportAddress &address, OpalConnection::StringOptions *stringOptions=NULL)
virtual void NewIncomingConnection(OpalListener &listener, const OpalTransportPtr &transport)
atomic< unsigned > m_nextH450CallIdentity
Definition: h323ep.h:1480
virtual H323Connection * CreateConnection(OpalCall &call, const PString &token, void *userData, OpalTransport &transport, const PString &alias, const H323TransportAddress &address, H323SignalPDU *setupPDU, unsigned options=0, OpalConnection::StringOptions *stringOptions=NULL)
H323Connection * InternalMakeCall(OpalCall &call, const PString &existingToken, const PString &callIdentity, unsigned capabilityLevel, const PString &remoteParty, void *userData, unsigned int options=0, OpalConnection::StringOptions *stringOptions=NULL)
bool RemoveAliasNames(const PStringList &names, bool updateGk=true)
RegistrationFailReasons
Definition: gkclient.h:274
void SetSendGRQ(bool v)
Definition: h323ep.h:1277
virtual PBoolean ForwardConnection(H323Connection &connection, const PString &forwardParty, const H323SignalPDU &pdu)
void SetLocalUserName(const PString &name)
Definition: h323ep.h:1365
Definition: h323ep.h:1047
const PTimeInterval & GetCallIntrusionT5() const
Definition: h323ep.h:1308
virtual PBoolean IsLocalAddress(const PIPSocket::Address &remoteAddress) const
const PTimeInterval & GetCallTransferT4() const
Definition: h323ep.h:1301
virtual PBoolean OnSentAlerting(H323Connection &connection)
PTimeInterval callIntrusionT3
Definition: h323ep.h:1452
PList< H323Gatekeeper > GatekeeperList
Definition: h323ep.h:324
virtual PBoolean GarbageCollection()
virtual PBoolean OnAlerting(H323Connection &connection, const H323SignalPDU &alertingPDU, const PString &user)
PBoolean IntrudeCall(const PString &remoteParty, unsigned capabilityLevel, void *userData=NULL)
Definition: transports.h:411
const PTimeInterval & GetMasterSlaveDeterminationTimeout() const
Definition: h323ep.h:1185
bool GetOneSignalAddressInRRQ() const
Definition: h323ep.h:1281
virtual PStringList GetAvailableStringOptions() const
Definition: h323ep.h:1046
const PTimeInterval & GetCallIntrusionT2() const
Definition: h323ep.h:1305
unsigned rasRequestRetries
Definition: h323ep.h:1426
virtual H460_FeatureSet * InternalCreateFeatureSet(H323Connection *connection)
bool SetCompatibility(H323Connection::CompatibilityIssues issue, const PString &regex)
PStringToString m_aliasPasswords
Definition: h323ep.h:1475
void SetAliasPasswords(const PStringToString &aliasPasswords, const PString &defaultAddress)
Definition: h323ep.h:1045
bool m_gatekeeperRasRedirect
Definition: h323ep.h:1473
unsigned GetCallIntrusionProtectionLevel() const
Definition: h323ep.h:1018
PBoolean IsRegisteredWithGatekeeper(bool all=false) const
bool SetAliasNames(const PStringList &names)
virtual PBoolean OnSendAlerting(H323Connection &connection, H323SignalPDU &alerting, const PString &calleeName, PBoolean withMedia)
virtual void OnGatekeeperStatus(H323Gatekeeper &gk, H323Gatekeeper::RegistrationFailReasons status)
const PTimeInterval & GetGatekeeperTimeToLive() const
Definition: h323ep.h:1244
virtual void OnReceivedInitiateReturnError()
virtual void OnSendARQ(H323Connection &conn, H225_AdmissionRequest &arq)
Definition: channels.h:95
PStringList GetAliasNamePatterns() const
Definition: h323ep.h:1056
bool SetGatekeeper(const PString &address, const PString &localAddress=PString::Empty())
PTimeInterval logicalChannelTimeout
Definition: h323ep.h:1419
Definition: connection.h:530
void DisableH245Tunneling(PBoolean mode)
Definition: h323ep.h:956
bool InternalStartGatekeeper(const H323TransportAddress &remoteAddress, const PString &localAddress)
virtual PBoolean OnNegotiateConferenceCapabilities(const H323SignalPDU &setupPDU)
bool InternalCreateGatekeeper(const H323TransportAddress &remoteAddress, const PStringList &aliases)
PTimeInterval roundTripDelayTimeout
Definition: h323ep.h:1421
void SetGatekeeperRasRedirect(bool redir)
Definition: h323ep.h:387
const PTimeInterval & GetCallIntrusionT1() const
Definition: h323ep.h:1304
H323EndPoint(OpalManager &manager)
void SetGatekeeperTimeToLive(const PTimeInterval &ttl)
Definition: h323ep.h:1249
PTimeInterval callTransferT2
Definition: h323ep.h:1441
TerminalTypes GetTerminalType() const
Definition: h323ep.h:1068
void SetGatekeeperSimulatePattern(bool sim)
Definition: h323ep.h:379
unsigned GetMasterSlaveDeterminationRetries() const
Definition: h323ep.h:1189
const PTimeInterval & GetRasRequestTimeout() const
Definition: h323ep.h:1235
const PTimeInterval & GetCapabilityExchangeTimeout() const
Definition: h323ep.h:1193
PTimeInterval signallingChannelCallTimeout
Definition: h323ep.h:1413
PTimeInterval m_gatekeeperStartDelay
Definition: h323ep.h:1428
PTimeInterval callIntrusionT1
Definition: h323ep.h:1450
virtual void OnGatekeeperNATDetect(const PIPSocket::Address &publicAddr, H323TransportAddress &gkRouteAddress)
PTimeInterval rasRequestTimeout
Definition: h323ep.h:1425
PString GetCompatibility(H323Connection::CompatibilityIssues issue) const
Gets the current regular expression for the compatibility issue.
bool SetAliasNamePatterns(const PStringList &patterns)
std::set< OpalTransportPtr > m_reusableTransports
Definition: h323ep.h:1459
PString m_gatekeeperPassword
Definition: h323ep.h:1470
virtual const PString & GetGatekeeperPassword() const
Definition: h323ep.h:363
void SetAudioJitterDelay(unsigned minDelay, unsigned maxDelay)
Definition: h323ep.h:1098
PBoolean canEnforceDurationLimit
Definition: h323ep.h:1399
PTimeInterval gatekeeperRequestTimeout
Definition: h323ep.h:1423
virtual void OnClosedLogicalChannel(H323Connection &connection, const H323Channel &channel)
const PTimeInterval & GetNoMediaTimeout() const
Definition: manager.h:1921
Definition: call.h:62
bool GetDefaultH239Control() const
Definition: h323ep.h:1106
const PTimeInterval & GetFirstSignalPduTimeout() const
Definition: h323ep.h:1177
GatekeeperByAlias m_gatekeeperByAlias
Definition: h323ep.h:1467
void SetCanEnforceDurationLimit(PBoolean mode)
Definition: h323ep.h:1011
virtual bool OnLoadFeature(H460_Feature &feature)
Definition: svcctrl.h:53
PSafeDictionary< PString, H323Connection > m_connectionsByCallId
Definition: h323ep.h:1458
PString m_gatekeeperUsername
Definition: h323ep.h:1469
bool m_defaultH239Control
Definition: h323ep.h:1407
Definition: h323ep.h:1059
virtual PBoolean OnConnectionForwarded(H323Connection &connection, const PString &forwardParty, const H323SignalPDU &pdu)
const PTimeInterval & GetEndSessionTimeout() const
Definition: h323ep.h:1181
virtual bool OnSetGatewayPrefixes(PStringList &prefixes) const
PString gkAccessTokenOID
Definition: h323ep.h:1430
void DisableH245inSetup(PBoolean mode)
Definition: h323ep.h:967
const GatekeeperList & GetGatekeepers() const
Definition: h323ep.h:328
const PString & GetDefaultLocalPartyName() const
Definition: endpoint.h:861
virtual PBoolean OnCallTransferInitiate(H323Connection &connection, const PString &remoteParty)
H323Gatekeeper * GetGatekeeper(const PString &alias=PString::Empty()) const
PTimeInterval callIntrusionT2
Definition: h323ep.h:1451
Definition: rtp_session.h:90
PBoolean canDisplayAmountString
Definition: h323ep.h:1398
Definition: h323con.h:137
Definition: h460.h:53
virtual void SetVendorIdentifierInfo(H225_VendorIdentifier &info) const
virtual void SetDefaultLocalPartyName(const PString &name)
void SetAudioJitterDelay(unsigned minDelay, unsigned maxDelay)
virtual PString GetDefaultTransport() const
bool RemoveAliasNamePatterns(const PStringList &patterns, bool updateGk=true)
PBoolean IsFastStartDisabled() const
Definition: h323ep.h:940
PINDEX GetGatekeeperAliasLimit() const
Definition: h323ep.h:374
PBoolean CanAutoCallForward() const
Definition: h323ep.h:1033
bool UseGatekeeper(const PString &address=PString::Empty(), const PString &identifier=PString::Empty(), const PString &localAddress=PString::Empty())
const PString & GetLocalUserName() const
Definition: h323ep.h:1366
PBoolean IsTerminal() const
const PString & GetGkAccessTokenOID() const
Definition: h323ep.h:1265
void ConsultationTransfer(const PString &primaryCallToken, const PString &secondaryCallToken)
const H323Capabilities & GetCapabilities() const
Definition: h323ep.h:1039
PTimeInterval masterSlaveDeterminationTimeout
Definition: h323ep.h:1416
Definition: h323caps.h:2508
unsigned GetGatekeeperRequestRetries() const
Definition: h323ep.h:1231
PBoolean disableFastStart
Definition: h323ep.h:1393
virtual void OnReleased(OpalConnection &connection)
PTimeInterval callTransferT3
Definition: h323ep.h:1444
PBoolean IsMCU() const
Definition: h323ep.h:1053
unsigned GetMaxAudioJitterDelay() const
Definition: h323ep.h:1094
PTimeInterval requestModeTimeout
Definition: h323ep.h:1420
PTimeInterval firstSignalPduTimeout
Definition: h323ep.h:1414
void SetDefaultILSServer(const PString &server)
Definition: manager.h:2009
void SetTerminalType(TerminalTypes type)
Definition: h323ep.h:1064
OpalManager & m_manager
Definition: endpoint.h:953
PBoolean IsGatekeeper() const
virtual void SetH221NonStandardInfo(H225_H221NonStandard &info) const
void SetGkAccessTokenOID(const PString &token)
Definition: h323ep.h:1269
void ForceSymmetricTCS(bool mode)
Definition: h323ep.h:978
virtual PBoolean OnStartLogicalChannel(H323Connection &connection, H323Channel &channel)
map< H323Connection::CompatibilityIssues, PRegularExpression > CompatibilityEndpoints
Definition: h323ep.h:1492
virtual void SetEndpointTypeInfo(H225_EndpointType &info) const
void InternalNewIncomingConnection(OpalTransportPtr transport, bool reused=false)
virtual H323Gatekeeper * CreateGatekeeper(H323Transport *transport)
PSafePtr< OpalTransport > OpalTransportPtr
Definition: transports.h:50
virtual H323ServiceControlSession * CreateServiceControlSession(const H225_ServiceControlDescriptor &contents)
virtual const PString & GetGatekeeperUsername() const
Definition: h323ep.h:359
const PTimeInterval & GetGatekeeperStartDelay() const
Definition: h323ep.h:1255
H323Capabilities m_capabilities
Definition: h323ep.h:1462
unsigned GetNextH450CallIdentityValue() const
Definition: h323ep.h:1318
virtual WORD GetDefaultSignalPort() const
void SetNoMediaTimeout(const PTimeInterval &newInterval)
Definition: h323ep.h:1221
PTimeInterval callTransferT1
Definition: h323ep.h:1438
const PTimeInterval & GetCallTransferT2() const
Definition: h323ep.h:1293
bool m_disableH460
Next available callIdentity for H450 Transfer operations via consultation.
Definition: h323ep.h:1485
PTimeInterval InternalGetGatekeeperStartDelay()
PStringList GetAliasNames() const
PBoolean IsGateway() const
Definition: h323ep.h:1048
bool GetGatekeeperRasRedirect() const
Definition: h323ep.h:391
Definition: h323ep.h:1052
Definition: h323ep.h:1051
static int ParseAliasPatternRange(const PString &pattern, PString &start, PString &end)
virtual bool SetGatewaySupportedProtocol(H225_ArrayOf_SupportedProtocols &protocols) const
virtual PBoolean OnSendConnect(H323Connection &connection, H323SignalPDU &connectPDU)
bool DiscoverGatekeeper(const PString &localAddress=PString::Empty())
PString m_aliasPwdDefaultAddress
Definition: h323ep.h:1476
Definition: gkclient.h:60
bool AddAliasNamePattern(const PString &pattern, const PString &altGk=PString::Empty(), bool updateGk=true)
Definition: connection.h:415
const PTimeInterval & GetCallTransferT3() const
Definition: h323ep.h:1297
unsigned gatekeeperRequestRetries
Definition: h323ep.h:1424
const PTimeInterval & GetCallIntrusionT6() const
Definition: h323ep.h:1309
PBoolean IsH245TunnelingDisabled() const
Definition: h323ep.h:951
void DisableH245(PBoolean bH245Disabled)
Definition: h323ep.h:991
void SetDefaultH239Control(bool on)
Definition: h323ep.h:1110
void TransferCall(const PString &token, const PString &remoteParty, const PString &callIdentity=PString::Empty())
const OpalProductInfo & GetProductInfo() const
Definition: endpoint.h:851
void SetDefaultILSServer(const PString &server)
Definition: h323ep.h:934
bool m_gatekeeperSimulatePattern
Definition: h323ep.h:1472
PBoolean IsH245Disabled() const
Definition: h323ep.h:985
virtual PBoolean OnSendSignalSetup(H323Connection &connection, H323SignalPDU &setupPDU)
bool AddCompatibility(H323Connection::CompatibilityIssues issue, const PString &regex)
bool AddAliasName(const PString &name, const PString &altGk=PString::Empty(), bool updateGk=true)
virtual PBoolean OnSendCallProceeding(H323Connection &connection, H323SignalPDU &callProceedingPDU)
H323CallIdentityDict m_secondaryConnectionsActive
Definition: h323ep.h:1479
virtual void OnCallCreditServiceControl(const PString &amount, PBoolean mode)
virtual PBoolean OnCallTransferIdentify(H323Connection &connection)
void SetOneSignalAddressInRRQ(bool v)
Definition: h323ep.h:1285
bool HasAlias(const PString &alias) const
Definition: transports.h:151
PBoolean disableH245inSetup
Definition: h323ep.h:1395
Definition: transports.h:326
TerminalTypes
Definition: h323ep.h:1043
virtual void OnServiceControlSession(unsigned type, unsigned sessionid, const H323ServiceControlSession &session, H323Connection *connection)
virtual void ShutDown()
const PTimeInterval & GetNoMediaTimeout() const
Definition: h323ep.h:1217
PTimeInterval roundTripDelayRate
Definition: h323ep.h:1422
unsigned GetMaxAudioJitterDelay() const
Definition: manager.h:1789
virtual PBoolean SetupTransfer(const PString &token, const PString &callIdentity, const PString &remoteParty, void *userData=NULL)
Definition: h323ep.h:82
virtual void OnReceiveFeatureSet(H460_MessageType pduType, const H225_FeatureSet &)
PBoolean disableH245Tunneling
Definition: h323ep.h:1394
AliasToGkMap m_localAliasPatterns
Definition: h323ep.h:1390
virtual OpalConnection::AnswerCallResponse OnAnswerCall(H323Connection &connection, const PString &callerName, const H323SignalPDU &setupPDU, H323SignalPDU &connectPDU, H323SignalPDU &progressPDU)
PTimeInterval endSessionTimeout
Definition: h323ep.h:1415
PBoolean autoCallForward
Definition: h323ep.h:1392
bool AddAliasNames(const PStringList &names, const PString &altGk=PString::Empty(), bool updateGk=true)
const PTimeInterval & GetRoundTripDelayTimeout() const
Definition: h323ep.h:1205
Definition: transaddr.h:62
Definition: rtpep.h:77
const PTimeInterval & GetGatekeeperRequestTimeout() const
Definition: h323ep.h:1227
virtual PSafePtr< OpalConnection > MakeConnection(OpalCall &call, const PString &party, void *userData=NULL, unsigned int options=0, OpalConnection::StringOptions *stringOptions=NULL)
unsigned GetMinAudioJitterDelay() const
Definition: manager.h:1784
unsigned GetMinAudioJitterDelay() const
Definition: h323ep.h:1089
virtual PBoolean OnIncomingCall(H323Connection &connection, const H323SignalPDU &setupPDU, H323SignalPDU &alertingPDU)
map< PString, OpalTransportAddress > AliasToGkMap
Definition: h323ep.h:1388
Definition: h323ep.h:1054
PTimeInterval callIntrusionT5
Definition: h323ep.h:1454
Definition: h4601.h:369
TerminalTypes terminalType
Definition: h323ep.h:1404
OpalTransportAddressArray m_gatekeeperInterfaces
Definition: h323ep.h:1468
bool GetGatekeeperSimulatePattern() const
Definition: h323ep.h:383
Definition: connection.h:358
virtual PBoolean OnCallIndependentSupplementaryService(const H323SignalPDU &setupPDU)
AliasToGkMap m_localAliasNames
Definition: h323ep.h:1389
PBoolean clearCallOnRoundTripFail
Definition: h323ep.h:1410
static const OpalProductInfo & AvayaPhone()
const PTimeInterval & GetCallIntrusionT4() const
Definition: h323ep.h:1307
bool InternalRestartGatekeeper(bool adjustingRegistrations=true)
virtual PBoolean OnSendFeatureSet(H460_MessageType pduType, H225_FeatureSet &)
bool SetGatekeeperZone(const PString &address, const PString &identifier, const PString &localAddress=PString::Empty())
PBoolean IsH245inSetupDisabled() const
Definition: h323ep.h:962
GatekeeperList m_gatekeepers
Definition: h323ep.h:1466
unsigned masterSlaveDeterminationRetries
Definition: h323ep.h:1417