OPAL  Version 3.18.8
gkserver.h
Go to the documentation of this file.
1 /*
2  * gkserver.h
3  *
4  * H225 Registration Admission and Security 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  * This code was based on original code from OpenGate of Egoboo Ltd. thanks
25  * to Ashley Unitt for his efforts.
26  *
27  * Contributor(s): ______________________________________.
28  */
29 
30 #ifndef OPAL_H323_GKSERVER_H
31 #define OPAL_H323_GKSERVER_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 <ptlib/safecoll.h>
42 #include <opal/guid.h>
43 #include <h323/h225ras.h>
44 #include <h323/transaddr.h>
45 #include <h323/h235auth.h>
46 #include <h323/h323pdu.h>
47 #include <h323/h323trans.h>
48 
49 
50 class PASN_Sequence;
51 class PASN_Choice;
52 
53 class H225_AliasAddress;
54 class H225_EndpointIdentifier;
55 class H225_GatekeeperIdentifier;
56 class H225_ArrayOf_TransportAddress;
57 class H225_GatekeeperIdentifier;
58 class H225_EndpointIdentifier;
59 class H225_InfoRequestResponse_perCallInfo_subtype;
60 class H225_RasUsageInformation;
61 
65 class H323RasPDU;
66 
67 #if OPAL_H501
68 class H323PeerElement;
69 #endif
70 
72 {
74  public:
80  H323GatekeeperListener & rasChannel,
81  const H323RasPDU & pdu
82  );
84 
85  virtual H323TransactionPDU * CreateRIP(
86  unsigned sequenceNumber,
87  unsigned delay
88  ) const;
89 
90  virtual PBoolean WritePDU(
91  H323TransactionPDU & pdu
92  );
93  virtual bool CheckCryptoTokens();
95  bool GetRegisteredEndPoint();
96 
97  virtual PString GetGatekeeperIdentifier() const = 0;
98  virtual unsigned GetGatekeeperRejectTag() const = 0;
99  virtual PString GetEndpointIdentifier() const = 0;
100  virtual unsigned GetRegisteredEndPointRejectTag() const = 0;
101 
103 
104  PSafePtr<H323RegisteredEndPoint> m_endpoint;
105 
106  protected:
108 };
109 
110 
112 {
114  public:
116  H323GatekeeperListener & listener,
117  const H323RasPDU & pdu
118  );
119 
120 #if PTRACING
121  virtual const char * GetName() const;
122 #endif
123  virtual PString GetGatekeeperIdentifier() const;
124  virtual unsigned GetGatekeeperRejectTag() const;
125  virtual PString GetEndpointIdentifier() const;
126  virtual unsigned GetRegisteredEndPointRejectTag() const;
127  virtual void PrepareConfirm();
129  virtual unsigned GetSecurityRejectTag() const;
130  virtual void SetRejectReason(
131  unsigned reasonCode
132  );
133 
134  H225_GatekeeperRequest & grq;
135  H225_GatekeeperConfirm & gcf;
136  H225_GatekeeperReject & grj;
137 
138  protected:
139  virtual Response OnHandlePDU();
140 };
141 
142 
144 {
146  public:
148  H323GatekeeperListener & listener,
149  const H323RasPDU & pdu
150  );
151 
152 #if PTRACING
153  virtual const char * GetName() const;
154 #endif
155  virtual PString GetGatekeeperIdentifier() const;
156  virtual unsigned GetGatekeeperRejectTag() const;
157  virtual PString GetEndpointIdentifier() const;
158  virtual unsigned GetRegisteredEndPointRejectTag() const;
160  virtual unsigned GetSecurityRejectTag() const;
161  virtual void SetRejectReason(
162  unsigned reasonCode
163  );
164 
165  H225_RegistrationRequest & rrq;
166  H225_RegistrationConfirm & rcf;
167  H225_RegistrationReject & rrj;
168 
169  protected:
170  virtual Response OnHandlePDU();
171 };
172 
173 
175 {
177  public:
179  H323GatekeeperListener & listener,
180  const H323RasPDU & pdu
181  );
182 
183 #if PTRACING
184  virtual const char * GetName() const;
185 #endif
186  virtual PString GetGatekeeperIdentifier() const;
187  virtual unsigned GetGatekeeperRejectTag() const;
188  virtual PString GetEndpointIdentifier() const;
189  virtual unsigned GetRegisteredEndPointRejectTag() const;
191  virtual unsigned GetSecurityRejectTag() const;
192  virtual void SetRejectReason(
193  unsigned reasonCode
194  );
195 
196  H225_UnregistrationRequest & urq;
197  H225_UnregistrationConfirm & ucf;
198  H225_UnregistrationReject & urj;
199 
200  protected:
201  virtual Response OnHandlePDU();
202 };
203 
204 
206 {
208  public:
210  H323GatekeeperListener & listener,
211  const H323RasPDU & pdu
212  );
213 
214 #if PTRACING
215  virtual const char * GetName() const;
216 #endif
217  virtual PString GetGatekeeperIdentifier() const;
218  virtual unsigned GetGatekeeperRejectTag() const;
219  virtual PString GetEndpointIdentifier() const;
220  virtual unsigned GetRegisteredEndPointRejectTag() const;
222  virtual unsigned GetSecurityRejectTag() const;
223  virtual void SetRejectReason(
224  unsigned reasonCode
225  );
226 
227  H225_AdmissionRequest & arq;
228  H225_AdmissionConfirm & acf;
229  H225_AdmissionReject & arj;
230 
232 
233  protected:
234  virtual Response OnHandlePDU();
235 };
236 
237 
239 {
241  public:
243  H323GatekeeperListener & listener,
244  const H323RasPDU & pdu
245  );
246 
247 #if PTRACING
248  virtual const char * GetName() const;
249 #endif
250  virtual PString GetGatekeeperIdentifier() const;
251  virtual unsigned GetGatekeeperRejectTag() const;
252  virtual PString GetEndpointIdentifier() const;
253  virtual unsigned GetRegisteredEndPointRejectTag() const;
255  virtual unsigned GetSecurityRejectTag() const;
256  virtual void SetRejectReason(
257  unsigned reasonCode
258  );
259 
260  H225_DisengageRequest & drq;
261  H225_DisengageConfirm & dcf;
262  H225_DisengageReject & drj;
263 
264  protected:
265  virtual Response OnHandlePDU();
266 };
267 
268 
270 {
272  public:
274  H323GatekeeperListener & listener,
275  const H323RasPDU & pdu
276  );
277 
278 #if PTRACING
279  virtual const char * GetName() const;
280 #endif
281  virtual PString GetGatekeeperIdentifier() const;
282  virtual unsigned GetGatekeeperRejectTag() const;
283  virtual PString GetEndpointIdentifier() const;
284  virtual unsigned GetRegisteredEndPointRejectTag() const;
286  virtual unsigned GetSecurityRejectTag() const;
287  virtual void SetRejectReason(
288  unsigned reasonCode
289  );
290 
291  H225_BandwidthRequest & brq;
292  H225_BandwidthConfirm & bcf;
293  H225_BandwidthReject & brj;
294 
295  protected:
296  virtual Response OnHandlePDU();
297 };
298 
299 
301 {
303  public:
305  H323GatekeeperListener & listener,
306  const H323RasPDU & pdu
307  );
308 
309 #if PTRACING
310  virtual const char * GetName() const;
311 #endif
312  virtual PString GetGatekeeperIdentifier() const;
313  virtual unsigned GetGatekeeperRejectTag() const;
314  virtual PString GetEndpointIdentifier() const;
315  virtual unsigned GetRegisteredEndPointRejectTag() const;
317  virtual unsigned GetSecurityRejectTag() const;
318  virtual void SetRejectReason(
319  unsigned reasonCode
320  );
321 
322  H225_LocationRequest & lrq;
323  H225_LocationConfirm & lcf;
324  H225_LocationReject & lrj;
325 
326  protected:
327  virtual Response OnHandlePDU();
328 };
329 
330 
332 {
334  public:
336  H323GatekeeperListener & listener,
337  const H323RasPDU & pdu
338  );
339 
340 #if PTRACING
341  virtual const char * GetName() const;
342 #endif
343  virtual PString GetGatekeeperIdentifier() const;
344  virtual unsigned GetGatekeeperRejectTag() const;
345  virtual PString GetEndpointIdentifier() const;
346  virtual unsigned GetRegisteredEndPointRejectTag() const;
348  virtual unsigned GetSecurityRejectTag() const;
349  virtual void SetRejectReason(
350  unsigned reasonCode
351  );
352 
353  H225_InfoRequestResponse & irr;
354  H225_InfoRequestAck & iack;
355  H225_InfoRequestNak & inak;
356 
357  protected:
358  virtual Response OnHandlePDU();
359 };
360 
361 
364 class H323GatekeeperCall : public PSafeObject
365 {
366  PCLASSINFO(H323GatekeeperCall, PSafeObject);
367  public:
370  enum Direction {
374  };
375 
379  H323GatekeeperServer & server,
380  const OpalGloballyUniqueID & callIdentifier,
381  Direction direction
382  );
383 
388 
393  Comparison Compare(
394  const PObject & obj
395  ) const;
396 
399  void PrintOn(
400  ostream & strm
401  ) const;
403 
412  H323GatekeeperARQ & request
413  );
414 
418  virtual PBoolean Disengage(
419  int reason = -1
420  );
421 
426  H323GatekeeperDRQ & request
427  );
428 
434  H323GatekeeperBRQ & request
435  );
436 
441  H323GatekeeperIRR & request,
442  H225_InfoRequestResponse_perCallInfo_subtype & call
443  );
444 
447  virtual void OnAlerting();
448 
451  virtual void OnConnected();
452 
463  virtual PBoolean OnHeartbeat();
464 
471  virtual PString GetCallCreditAmount() const;
472 
479  virtual PBoolean GetCallCreditMode() const;
480 
488  virtual unsigned GetDurationLimit() const;
489 
494  virtual PBoolean SendCallCreditServiceControl();
495 
499  H225_ArrayOf_ServiceControlSession & serviceControl
500  ) const;
501 
506  virtual PBoolean SendServiceControlSession(
507  const H323ServiceControlSession & session
508  );
509 
515  virtual PBoolean TranslateAliasAddress(
516  const H225_AliasAddress & alias,
517  H225_ArrayOf_AliasAddress & aliases,
518  H323TransportAddress & address,
519  PBoolean & isGkRouted
520  );
521 
523 
527  H323RegisteredEndPoint & GetEndPoint() const { return *PAssertNULL(m_endpoint); }
528  bool IsAnsweringCall() const { return m_direction == AnsweringCall; }
529  unsigned GetCallReference() const { return m_callReference; }
532  const PString & GetSourceNumber() const { return m_srcNumber; }
533  const PStringArray & GetSourceAliases() const { return m_srcAliases; }
534  const H323TransportAddress & GetSourceHost() const { return m_srcHost; }
535  PString GetSourceAddress() const;
536  const PString & GetDestinationNumber() const { return m_dstNumber; }
537  const PStringArray & GetDestinationAliases() const { return m_dstAliases; }
539  PString GetDestinationAddress() const;
540  unsigned GetBandwidthUsed() const { return m_bandwidthUsed; }
541  bool SetBandwidthUsed(unsigned bandwidth);
542  const PTime & GetLastInfoResponseTime() const { return m_lastInfoResponse; }
543  const PTime & GetCallStartTime() const { return m_callStartTime; }
544  const PTime & GetAlertingTime() const { return m_alertingTime; }
545  const PTime & GetConnectedTime() const { return m_connectedTime; }
546  const PTime & GetCallEndTime() const { return m_callEndTime; }
549 
550  protected:
551  void SetUsageInfo(const H225_RasUsageInformation & usage);
552 
556 
558  unsigned m_callReference;
561  PString m_srcNumber;
562  PStringArray m_srcAliases;
564  PString m_dstNumber;
565  PStringArray m_dstAliases;
567  unsigned m_bandwidthUsed;
570 
577 };
578 
579 
585 class H323RegisteredEndPoint : public PSafeObject
586 {
587  PCLASSINFO(H323RegisteredEndPoint, PSafeObject);
588  public:
594  H323GatekeeperServer & server,
595  const PString & id
596  );
598 
603  Comparison Compare(
604  const PObject & obj
605  ) const;
606 
609  void PrintOn(
610  ostream & strm
611  ) const;
613 
620  virtual void AddCall(
621  H323GatekeeperCall * call
622  );
623 
628  virtual PBoolean RemoveCall(
629  H323GatekeeperCall * call
630  );
631 
634  PINDEX GetCallCount() const { return m_activeCalls.GetSize(); }
635 
639  PINDEX idx
640  ) { return m_activeCalls[idx]; }
642 
652  H323GatekeeperRRQ & request
653  );
654 
665  H323GatekeeperRRQ & request
666  );
667 
677  H323GatekeeperRRQ & request
678  );
679 
684  H323GatekeeperURQ & request
685  );
686 
690  virtual PBoolean Unregister(
691  int reason = -1
692  );
693 
699  H323GatekeeperIRR & request
700  );
701 
712  virtual PBoolean OnTimeToLive();
713 
725  virtual PString GetCallCreditAmount() const;
726 
734  virtual PBoolean GetCallCreditMode() const;
735 
740  virtual PBoolean SendServiceControlSession(
741  const H323ServiceControlSession & session
742  );
743 
747  virtual PBoolean AddServiceControlSession(
748  const H323ServiceControlSession & session,
749  H225_ArrayOf_ServiceControlSession & serviceControl
750  );
752 
757  virtual PBoolean SetPassword(
758  const PString & password,
759  const PString & username = PString::Empty()
760  );
761 
764  const PString & GetIdentifier() const { return m_identifier; }
765 
769 
773 
778 
782  PINDEX GetRASAddressCount() const { return m_rasAddresses.GetSize(); }
783 
788  PINDEX idx
789  ) const { return m_rasAddresses[idx]; }
790 
795 
799  PINDEX GetSignalAddressCount() const { return m_signalAddresses.GetSize(); }
800 
805  PINDEX idx
806  ) const { return m_signalAddresses[idx]; }
807 
810  const PStringArray & GetAliases() const { return m_aliases; }
811 
815  const PString & alias
816  ) { return m_aliases.GetStringsIndex(alias) != P_MAX_INDEX; }
817 
820  PINDEX GetAliasCount() const { return m_aliases.GetSize(); }
821 
824  PString GetAlias(
825  PINDEX idx
826  ) const { if (idx < m_aliases.GetSize()) return m_aliases[idx]; return PString::Empty(); }
827 
833  void RemoveAlias(
834  const PString & alias
835  );
836 
839  virtual const H235Authenticators & GetAuthenticators() const { return m_authenticators; }
840 
843  PINDEX GetPrefixCount() const { return m_voicePrefixes.GetSize(); }
844 
847  PString GetPrefix(
848  PINDEX idx
849  ) const { return m_voicePrefixes[idx]; }
850 
853  PCaselessString GetApplicationInfo() const { return m_productInfo.AsString(); }
854 
857  const OpalProductInfo & GetProductInfo() const { return m_productInfo; }
858 
861  unsigned GetProtocolVersion() const { return m_protocolVersion; }
862 
865  bool IsBehindNAT() const { return m_isBehindNAT; }
866 
870 
874 
877  bool CanReceiveRIP() const;
878 
881  bool GetH225Version() const { return m_h225Version; }
882 
885  const PTime & GetCreationTime() const { return m_creationTime; }
887 
897  virtual PBoolean OnSendDescriptorForEndpoint(
898  H225_ArrayOf_AliasAddress & aliases,
899  H225_EndpointType & terminalType,
900  H225_ArrayOf_AliasAddress & transportAddresses
901  );
903 
904 
905  protected:
908 
909  PString m_identifier;
913  PStringArray m_aliases;
914  PStringArray m_voicePrefixes;
920  unsigned m_h225Version;
921  unsigned m_timeToLive;
922  H235Authenticators m_authenticators;
923 
927 
928  PSortedList<H323GatekeeperCall> m_activeCalls;
929  POrdinalDictionary<PString> m_serviceControlSessions;
930 };
931 
932 
939 {
940  PCLASSINFO(H323GatekeeperListener, H225_RAS);
941  public:
947  H323EndPoint & endpoint,
948  H323GatekeeperServer & server,
949  const PString & gatekeeperIdentifier,
950  H323Transport * transport = NULL
951  );
952 
957 
962  void PrintOn(
963  ostream & strm
964  ) const;
966 
971  virtual PBoolean UnregistrationRequest(
972  const H323RegisteredEndPoint & ep,
973  unsigned reason
974  );
975 
978  virtual PBoolean DisengageRequest(
979  const H323GatekeeperCall & call,
980  unsigned reason
981  );
982 
985  virtual PBoolean InfoRequest(
987  H323GatekeeperCall * call = NULL
988  );
989 
992  virtual PBoolean ServiceControlIndication(
994  const H323ServiceControlSession & session,
995  H323GatekeeperCall * call = NULL
996  );
998 
1006  H323GatekeeperGRQ & request
1007  );
1008 
1014  H323GatekeeperRRQ & request
1015  );
1016 
1022  H323GatekeeperURQ & request
1023  );
1024 
1030  H323GatekeeperARQ & request
1031  );
1032 
1038  H323GatekeeperDRQ & request
1039  );
1040 
1046  H323GatekeeperBRQ & request
1047  );
1048 
1054  H323GatekeeperLRQ & request
1055  );
1056 
1062  H323GatekeeperIRR & request
1063  );
1065 
1068  virtual PBoolean OnReceiveGatekeeperRequest(const H323RasPDU &, const H225_GatekeeperRequest &);
1069  virtual PBoolean OnReceiveRegistrationRequest(const H323RasPDU &, const H225_RegistrationRequest &);
1070  virtual PBoolean OnReceiveUnregistrationRequest(const H323RasPDU &, const H225_UnregistrationRequest &);
1071  virtual PBoolean OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm &);
1072  virtual PBoolean OnReceiveUnregistrationReject(const H225_UnregistrationReject &);
1073  virtual PBoolean OnReceiveAdmissionRequest(const H323RasPDU &, const H225_AdmissionRequest &);
1074  virtual PBoolean OnReceiveBandwidthRequest(const H323RasPDU &, const H225_BandwidthRequest &);
1075  virtual PBoolean OnReceiveBandwidthConfirm(const H225_BandwidthConfirm &);
1076  virtual PBoolean OnReceiveBandwidthReject(const H225_BandwidthReject &);
1077  virtual PBoolean OnReceiveDisengageRequest(const H323RasPDU &, const H225_DisengageRequest &);
1078  virtual PBoolean OnReceiveDisengageConfirm(const H225_DisengageConfirm &);
1079  virtual PBoolean OnReceiveDisengageReject(const H225_DisengageReject &);
1080  virtual PBoolean OnReceiveLocationRequest(const H323RasPDU &, const H225_LocationRequest &);
1081  virtual PBoolean OnReceiveInfoRequestResponse(const H323RasPDU &, const H225_InfoRequestResponse &);
1082  virtual PBoolean OnReceiveResourcesAvailableConfirm(const H225_ResourcesAvailableConfirm &);
1083 #if OPAL_H460
1084  virtual PBoolean OnSendFeatureSet(H460_MessageType pduType, H225_FeatureSet & features) const;
1085  virtual void OnReceiveFeatureSet(H460_MessageType pduType, const H225_FeatureSet & features) const;
1086 #endif
1087 
1088 
1093 
1094 
1095  protected:
1097 };
1098 
1099 
1111 {
1113  public:
1119  H323EndPoint & endpoint
1120  );
1121 
1126 
1128 
1139  virtual H323Transactor * CreateListener(
1140  H323Transport * transport
1141  );
1142 
1144 
1151  H323GatekeeperGRQ & request
1152  );
1153 
1162  H323GatekeeperRRQ & request
1163  );
1164 
1171  H323GatekeeperURQ & request
1172  );
1173 
1179  H323GatekeeperIRR & request
1180  );
1181 
1192  virtual void AddEndPoint(
1194  );
1195 
1198  virtual PBoolean RemoveEndPoint(
1200  );
1201 
1211  H323GatekeeperRequest & request
1212  );
1213 
1222  virtual PString CreateEndPointIdentifier();
1223 
1226  virtual PSafePtr<H323RegisteredEndPoint> FindEndPointByIdentifier(
1227  const PString & identifier,
1228  PSafetyMode mode = PSafeReference
1229  );
1230 
1233  virtual PSafePtr<H323RegisteredEndPoint> FindEndPointBySignalAddresses(
1234  const H225_ArrayOf_TransportAddress & addresses,
1235  PSafetyMode mode = PSafeReference
1236  );
1237 
1240  virtual PSafePtr<H323RegisteredEndPoint> FindEndPointBySignalAddress(
1241  const H323TransportAddress & address,
1242  PSafetyMode mode = PSafeReference
1243  );
1244 
1247  virtual PSafePtr<H323RegisteredEndPoint> FindEndPointByAliasAddress(
1248  const H225_AliasAddress & alias,
1249  PSafetyMode mode = PSafeReadWrite
1250  );
1251 
1254  virtual PSafePtr<H323RegisteredEndPoint> FindEndPointByAliasString(
1255  const PString & alias,
1256  PSafetyMode mode = PSafeReference
1257  );
1258 
1261  virtual PSafePtr<H323RegisteredEndPoint> FindEndPointByPartialAlias(
1262  const PString & alias,
1263  PSafetyMode mode = PSafeReference
1264  );
1265 
1268  virtual PSafePtr<H323RegisteredEndPoint> FindEndPointByPrefixString(
1269  const PString & prefix,
1270  PSafetyMode mode = PSafeReference
1271  );
1272 
1275  PSafePtr<H323RegisteredEndPoint> GetFirstEndPoint(
1276  PSafetyMode mode = PSafeReference
1277  ) { return PSafePtr<H323RegisteredEndPoint>(m_byIdentifier, mode); }
1279 
1280  PSafePtr<H323RegisteredEndPoint> FindDestinationEndPoint(
1281  const OpalGloballyUniqueID & id,
1283  );
1284 
1293  H323GatekeeperARQ & request
1294  );
1295 
1301  H323GatekeeperDRQ & request
1302  );
1303 
1309  H323GatekeeperBRQ & request
1310  );
1311 
1320  virtual H323GatekeeperCall * CreateCall(
1321  const OpalGloballyUniqueID & callIdentifier,
1323  );
1324 
1327  virtual void AddCall(H323GatekeeperCall *)
1328  { }
1329 
1332  virtual void RemoveCall(
1333  H323GatekeeperCall * call
1334  );
1335 
1338  virtual PSafePtr<H323GatekeeperCall> FindCall(
1339  const PString & description,
1340  PSafetyMode mode = PSafeReference
1341  );
1342 
1345  virtual PSafePtr<H323GatekeeperCall> FindCall(
1346  const OpalGloballyUniqueID & callIdentifier,
1347  PBoolean answeringCall,
1348  PSafetyMode mode = PSafeReference
1349  );
1350 
1353  virtual PSafePtr<H323GatekeeperCall> FindCall(
1354  const OpalGloballyUniqueID & callIdentifier,
1356  PSafetyMode mode = PSafeReference
1357  );
1358 
1361  PSafePtr<H323GatekeeperCall> GetFirstCall(
1362  PSafetyMode mode = PSafeReference
1363  ) { return PSafePtr<H323GatekeeperCall>(m_activeCalls, mode); }
1365 
1376  H323GatekeeperLRQ & request
1377  );
1378 
1390  virtual PBoolean TranslateAliasAddress(
1391  const H225_AliasAddress & alias,
1392  H225_ArrayOf_AliasAddress & aliases,
1393  H323TransportAddress & address,
1394  PBoolean & isGkRouted,
1395  H323GatekeeperCall * call
1396  );
1397 
1417  virtual PBoolean TranslateAliasAddressToSignalAddress(
1418  const H225_AliasAddress & alias,
1419  H323TransportAddress & address
1420  );
1422 
1434  virtual PBoolean CheckSignalAddressPolicy(
1435  const H323RegisteredEndPoint & ep,
1436  const H225_AdmissionRequest & arq,
1437  const H323TransportAddress & address
1438  );
1439 
1452  virtual PBoolean CheckAliasAddressPolicy(
1453  const H323RegisteredEndPoint & ep,
1454  const H225_AdmissionRequest & arq,
1455  const H225_AliasAddress & alias
1456  );
1457 
1470  virtual PBoolean CheckAliasStringPolicy(
1471  const H323RegisteredEndPoint & ep,
1472  const H225_AdmissionRequest & arq,
1473  const PString & alias
1474  );
1475 
1481  virtual unsigned AllocateBandwidth(
1482  unsigned newBandwidth,
1483  unsigned oldBandwidth = 0
1484  );
1486 
1498  virtual PBoolean GetAdmissionRequestAuthentication(
1499  H323GatekeeperARQ & info,
1500  H235Authenticators & authenticators
1501  );
1502 
1508  virtual PBoolean GetUsersPassword(
1509  const PString & alias,
1510  PString & password,
1511  H323RegisteredEndPoint & registeredEndpoint
1512  ) const;
1513  virtual PBoolean GetUsersPassword(
1514  const PString & alias,
1515  PString & password
1516  ) const;
1517  virtual void SetUsersPassword(
1518  const PString & alias,
1519  const PString & password
1520  );
1521  virtual void ClearPasswords() { m_passwords.RemoveAll(); }
1523 
1524 #if OPAL_H501
1525 
1530 
1534  void SetPeerElement(
1535  H323PeerElement * newPeerElement
1536  );
1537 
1543  void CreatePeerElement(
1544  const H323TransportAddress & h501Interface
1545  );
1546 
1552  bool OpenPeerElement(
1553  const H323TransportAddress & remotePeer,
1554  bool append = false,
1555  bool keepTrying = true
1556  );
1558 #endif
1559 
1564  const PString & GetGatekeeperIdentifier() const { return m_gatekeeperIdentifier; }
1565 
1572  const PString & id,
1573  bool adjustListeners = true
1574  );
1575 
1578  unsigned GetAvailableBandwidth() const { return m_totalBandwidth; }
1579 
1582  void SetAvailableBandwidth(unsigned bps100) { m_totalBandwidth = bps100; }
1583 
1586  unsigned GetUsedBandwidth() const { return m_usedBandwidth; }
1587 
1590  unsigned GetDefaultBandwidth() const { return m_defaultBandwidth; }
1591  void SetDefaultBandwidth(unsigned bw) { m_defaultBandwidth = bw; }
1592 
1595  unsigned GetMaximumBandwidth() const { return m_maximumBandwidth; }
1596  void SetMaximumBandwidth(unsigned bw) { m_maximumBandwidth = bw; }
1597 
1600  unsigned GetTimeToLive() const { return m_defaultTimeToLive; }
1601 
1604  void SetTimeToLive(unsigned seconds) { m_defaultTimeToLive = seconds; }
1605 
1608  unsigned GetInfoResponseRate() const { return m_defaultInfoResponseRate; }
1609 
1612  void SetInfoResponseRate(unsigned seconds) { m_defaultInfoResponseRate = seconds; }
1613 
1617 
1619  unsigned GetMinAliasToAllocate() const { return m_minAliasToAllocate; }
1621 
1623  unsigned GetMaxAliasToAllocate() const { return m_maxAliasToAllocate; }
1625 
1629 
1633 
1637 
1641 
1645 
1649 
1653 
1657 
1660  bool IsGatekeeperRouted() const { return m_isGatekeeperRouted; }
1662 
1665  bool IsRequiredH235() const { return m_requireH235; }
1666  void SetRequiredH235(bool req) { m_requireH235 = req; }
1667 
1670  unsigned GetActiveRegistrations() const { return m_byIdentifier.GetSize(); }
1671 
1674  unsigned GetPeakRegistrations() const { return m_peakRegistrations; }
1675 
1678  unsigned GetTotalRegistrations() const { return m_totalRegistrations; }
1679 
1683 
1686  unsigned GetActiveCalls() const { return m_activeCalls.GetSize(); }
1687 
1690  unsigned GetPeakCalls() const { return m_peakCalls; }
1691 
1694  unsigned GetTotalCalls() const { return m_totalCalls; }
1695 
1698  unsigned GetRejectedCalls() const { return m_rejectedCalls; }
1700 
1701  // Remove an alias from the server database.
1702  void RemoveAlias(
1704  const PString & alias
1705  );
1706 
1707  // called when an endpoint needs to send a descriptor to the H.501 peer element
1709  H323RegisteredEndPoint & /*ep*/,
1710  H225_ArrayOf_AliasAddress & /*aliases*/,
1711  H225_EndpointType & /*terminalType*/,
1712  H225_ArrayOf_AliasAddress & /*transportAddresses*/
1713  )
1714  { return true; }
1715 
1716  virtual PBoolean AllowDuplicateAlias(const H225_ArrayOf_AliasAddress & /*aliases*/)
1717  { return m_canHaveDuplicateAlias; }
1718 
1719  virtual PString AllocateAlias(H225_RegistrationRequest & rrq);
1720 
1721 #if OPAL_H460
1722  virtual PBoolean OnSendFeatureSet(H460_MessageType pduType, H225_FeatureSet & features) const;
1723  virtual void OnReceiveFeatureSet(H460_MessageType pduType, const H225_FeatureSet & features) const;
1724 #endif
1725 
1726  protected:
1727 
1728  PDECLARE_NOTIFIER(PThread, H323GatekeeperServer, MonitorMain);
1729 
1730  // Configuration & policy variables
1739  unsigned m_minAliasToAllocate; // Zero is no allocation RRJ
1752 
1753  PStringToString m_passwords;
1754 
1755  // Dynamic variables
1758  PThread * m_monitorThread;
1759  PSyncPoint m_monitorExit;
1760 
1761  PLIST(ListenerList, H323GatekeeperListener);
1762  ListenerList m_listeners;
1763 
1764 #if OPAL_H501
1766 #endif
1767 
1768  PSafeDictionary<H225_AliasAddress, H323RegisteredEndPoint> m_discoveredEndpoints;
1769 
1770  PSafeDictionary<PString, H323RegisteredEndPoint> m_byIdentifier;
1771 
1772  class StringMap : public PString {
1773  PCLASSINFO(StringMap, PString);
1774  public:
1775  StringMap(const PString & from, const PString & id)
1776  : PString(from), identifier(id) { }
1777  PString identifier;
1778  };
1779  PSortedStringList m_byAddress;
1780  PSortedStringList m_byAlias;
1781  PSortedStringList m_byVoicePrefix;
1782 
1783  PSafeSortedList<H323GatekeeperCall> m_activeCalls;
1784 
1787  atomic<unsigned> m_rejectedRegistrations;
1788  PINDEX m_peakCalls;
1790  atomic<unsigned> m_rejectedCalls;
1791 
1792  friend class H323GatekeeperRRQ;
1793  friend class H323GatekeeperARQ;
1794 
1796 };
1797 
1798 
1799 #endif // OPAL_H323
1800 
1801 #endif // OPAL_H323_GKSERVER_H
1802 
1803 
1805 
bool IsRequiredH235() const
Definition: gkserver.h:1665
bool m_requireH235
Definition: gkserver.h:1750
unsigned GetTimeToLive() const
Definition: gkserver.h:1600
Definition: gkserver.h:143
H225_DisengageConfirm & dcf
Definition: gkserver.h:261
Definition: gkserver.h:300
PSortedStringList m_byVoicePrefix
Definition: gkserver.h:1781
virtual PBoolean GetUsersPassword(const PString &alias, PString &password, H323RegisteredEndPoint &registeredEndpoint) const
Definition: peclient.h:244
unsigned m_h225Version
Definition: gkserver.h:920
void SetMinAliasToAllocate(unsigned v)
Definition: gkserver.h:1620
virtual H323GatekeeperRequest::Response OnInfoResponse(H323GatekeeperIRR &request)
unsigned GetUsedBandwidth() const
Definition: gkserver.h:1586
Definition: gkserver.h:174
unsigned m_defaultTimeToLive
Definition: gkserver.h:1736
bool m_canDisplayAmountString
Definition: gkserver.h:918
virtual PBoolean OnSendFeatureSet(H460_MessageType pduType, H225_FeatureSet &features) const
virtual unsigned GetRegisteredEndPointRejectTag() const
virtual H235Authenticator::ValidationResult ValidatePDU() const
const PTime & GetCallStartTime() const
Definition: gkserver.h:543
PINDEX GetCallCount() const
Definition: gkserver.h:634
H323GatekeeperLRQ(H323GatekeeperListener &listener, const H323RasPDU &pdu)
Definition: h225ras.h:93
virtual PBoolean RemoveEndPoint(H323RegisteredEndPoint *ep)
void SetDisengageOnHearbeatFail(bool v)
Definition: gkserver.h:1656
H323TransportAddress GetRASAddress(PINDEX idx) const
Definition: gkserver.h:787
bool m_disengageOnHearbeatFail
Definition: gkserver.h:1751
Definition: gkserver.h:373
virtual unsigned GetSecurityRejectTag() const
bool m_drqReceived
Definition: gkserver.h:571
unsigned m_minAliasToAllocate
Definition: gkserver.h:1739
PString GetName(const OpalMediaType &mediaType)
virtual unsigned GetGatekeeperRejectTag() const
virtual void SetRejectReason(unsigned reasonCode)
virtual unsigned GetGatekeeperRejectTag() const
virtual PBoolean SendServiceControlSession(const H323ServiceControlSession &session)
OpalGloballyUniqueID m_conferenceIdentifier
Definition: gkserver.h:560
H323PeerElement * m_peerElement
Definition: gkserver.h:1765
virtual PBoolean OnSendDescriptorForEndpoint(H225_ArrayOf_AliasAddress &aliases, H225_EndpointType &terminalType, H225_ArrayOf_AliasAddress &transportAddresses)
bool m_canHaveDuplicateAlias
Definition: gkserver.h:1742
PINDEX GetAliasCount() const
Definition: gkserver.h:820
void PrintOn(ostream &strm) const
void RemoveAlias(H323RegisteredEndPoint &ep, const PString &alias)
Definition: gkserver.h:1772
virtual PBoolean GetAdmissionRequestAuthentication(H323GatekeeperARQ &info, H235Authenticators &authenticators)
unsigned GetInfoResponseRate() const
Definition: gkserver.h:1608
unsigned GetProtocolVersion() const
Definition: gkserver.h:861
bool m_canOnlyAnswerRegisteredEP
Definition: gkserver.h:1745
void SetAliasCanBeHostName(bool v)
Definition: gkserver.h:1652
virtual unsigned GetGatekeeperRejectTag() const
virtual H323GatekeeperRequest::Response OnLocation(H323GatekeeperLRQ &request)
virtual H323GatekeeperRequest::Response OnInfoResponse(H323GatekeeperIRR &request, H225_InfoRequestResponse_perCallInfo_subtype &call)
virtual H323GatekeeperRequest::Response OnRegistration(H323GatekeeperRRQ &request)
virtual H323GatekeeperRequest::Response OnBandwidth(H323GatekeeperBRQ &request)
virtual H323GatekeeperRequest::Response OnAdmission(H323GatekeeperARQ &request)
H323GatekeeperListener(H323EndPoint &endpoint, H323GatekeeperServer &server, const PString &gatekeeperIdentifier, H323Transport *transport=NULL)
PStringArray m_aliases
Definition: gkserver.h:913
virtual unsigned GetRegisteredEndPointRejectTag() const
PINDEX m_peakCalls
Definition: gkserver.h:1788
virtual Response OnHandlePDU()
atomic< unsigned > m_rejectedRegistrations
Definition: gkserver.h:1787
H323TransportAddress m_dstHost
Definition: gkserver.h:566
virtual H323GatekeeperRequest::Response OnDiscovery(H323GatekeeperGRQ &request)
virtual Response OnHandlePDU()
virtual H235Authenticator::ValidationResult ValidatePDU() const
PTime m_callStartTime
Definition: gkserver.h:572
virtual PString GetGatekeeperIdentifier() const
virtual unsigned GetSecurityRejectTag() const
virtual unsigned GetSecurityRejectTag() const
PString m_dstNumber
Definition: gkserver.h:564
virtual H323GatekeeperCall * CreateCall(const OpalGloballyUniqueID &callIdentifier, H323GatekeeperCall::Direction direction)
virtual H323GatekeeperRequest::Response OnAdmission(H323GatekeeperARQ &request)
bool m_answerCallPreGrantedARQ
Definition: gkserver.h:1746
H323RegisteredEndPoint * m_endpoint
Definition: gkserver.h:554
virtual PBoolean SetPassword(const PString &password, const PString &username=PString::Empty())
void CreatePeerElement(const H323TransportAddress &h501Interface)
unsigned GetPeakRegistrations() const
Definition: gkserver.h:1674
const PStringArray & GetSourceAliases() const
Definition: gkserver.h:533
H323TransportAddress m_srcHost
Definition: gkserver.h:563
virtual void OnConnected()
H323TransportAddressArray m_rasAddresses
Definition: gkserver.h:911
virtual PString AllocateAlias(H225_RegistrationRequest &rrq)
virtual PBoolean OnReceiveBandwidthReject(const H225_BandwidthReject &)
bool m_isGatekeeperRouted
Definition: gkserver.h:1748
Direction
Definition: gkserver.h:370
H225_InfoRequestResponse & irr
Definition: gkserver.h:353
virtual PBoolean OnReceiveDisengageConfirm(const H225_DisengageConfirm &)
Definition: transports.h:788
virtual PBoolean Disengage(int reason=-1)
virtual PBoolean WritePDU(H323TransactionPDU &pdu)
bool m_makeCallPreGrantedARQ
Definition: gkserver.h:1747
Definition: gkserver.h:331
virtual PBoolean AddServiceControlSession(const H323ServiceControlSession &session, H225_ArrayOf_ServiceControlSession &serviceControl)
virtual void PrepareConfirm()
H323GatekeeperGRQ(H323GatekeeperListener &listener, const H323RasPDU &pdu)
bool GetMakeCallPreGrantedARQ() const
Gatekeeper pre-grants all outgoing calls from endpoint.
Definition: gkserver.h:1647
virtual void SetRejectReason(unsigned reasonCode)
unsigned m_defaultBandwidth
Definition: gkserver.h:1734
void SetOverwriteOnSameSignalAddress(bool v)
Definition: gkserver.h:1616
H225_UnregistrationRequest & urq
Definition: gkserver.h:196
const PTime & GetConnectedTime() const
Definition: gkserver.h:545
const OpalGloballyUniqueID & GetDescriptorID() const
Definition: gkserver.h:768
H323GatekeeperServer & m_gatekeeper
Definition: gkserver.h:906
Comparison Compare(const PObject &obj) const
Definition: h323trans.h:309
unsigned m_infoResponseRate
Definition: gkserver.h:568
virtual PBoolean CheckAliasStringPolicy(const H323RegisteredEndPoint &ep, const H225_AdmissionRequest &arq, const PString &alias)
Definition: h323trans.h:95
virtual PString GetGatekeeperIdentifier() const =0
virtual unsigned GetSecurityRejectTag() const
H225_GatekeeperConfirm & gcf
Definition: gkserver.h:135
bool CanEnforceDurationLimit() const
Definition: gkserver.h:873
virtual unsigned GetRegisteredEndPointRejectTag() const
void PrintOn(ostream &strm) const
PSafeDictionary< PString, H323RegisteredEndPoint > m_byIdentifier
Definition: gkserver.h:1770
const H323TransportAddressArray & GetSignalAddresses() const
Definition: gkserver.h:794
OpalGloballyUniqueID m_descriptorID
Definition: gkserver.h:910
const OpalProductInfo & GetProductInfo() const
Definition: gkserver.h:857
H225_LocationRequest & lrq
Definition: gkserver.h:322
H323GatekeeperIRR(H323GatekeeperListener &listener, const H323RasPDU &pdu)
virtual H323GatekeeperRequest::Response OnDisengage(H323GatekeeperDRQ &request)
Definition: h225ras.h:101
Definition: gkserver.h:371
unsigned m_callReference
Definition: gkserver.h:558
PStringToString m_passwords
Definition: gkserver.h:1753
virtual PString CreateEndPointIdentifier()
const H323TransportAddress & GetSourceHost() const
Definition: gkserver.h:534
Definition: gkserver.h:71
PThread * m_monitorThread
Definition: gkserver.h:1758
virtual unsigned GetSecurityRejectTag() const
PString GetDestinationAddress() const
virtual Response OnHandlePDU()
PINDEX GetRASAddressCount() const
Definition: gkserver.h:782
PSafePtr< H323RegisteredEndPoint > GetFirstEndPoint(PSafetyMode mode=PSafeReference)
Definition: gkserver.h:1275
PTime m_creationTime
Definition: gkserver.h:924
virtual Response OnHandlePDU()
bool IsBehindNAT() const
Definition: gkserver.h:865
H323GatekeeperListener * m_rasChannel
Definition: gkserver.h:555
bool CheckGatekeeperIdentifier()
const PTime & GetCreationTime() const
Definition: gkserver.h:885
H225_BandwidthReject & brj
Definition: gkserver.h:293
bool GetCanHaveDuplicateAlias() const
Different endpoint can register with gatekeeper the same alias name as another endpoint.
Definition: gkserver.h:1627
unsigned GetMaximumBandwidth() const
Definition: gkserver.h:1595
virtual PString GetEndpointIdentifier() const
H323GatekeeperListener * m_rasChannel
Definition: gkserver.h:907
unsigned GetMinAliasToAllocate() const
Minimum value for aliases gatekeeper will allocate when endpoint does not provide one...
Definition: gkserver.h:1619
virtual PBoolean OnReceiveBandwidthRequest(const H323RasPDU &, const H225_BandwidthRequest &)
const OpalGloballyUniqueID & GetCallIdentifier() const
Definition: gkserver.h:530
virtual bool CheckCryptoTokens()
virtual const H235Authenticators & GetAuthenticators() const
Definition: gkserver.h:839
virtual void SetUsersPassword(const PString &alias, const PString &password)
PString identifier
Definition: gkserver.h:1777
Definition: transaddr.h:91
bool GetH225Version() const
Definition: gkserver.h:881
WORD GetDefaultUdpPort()
Definition: gkserver.h:1127
virtual PSafePtr< H323RegisteredEndPoint > FindEndPointByAliasString(const PString &alias, PSafetyMode mode=PSafeReference)
H323GatekeeperBRQ(H323GatekeeperListener &listener, const H323RasPDU &pdu)
virtual PSafePtr< H323RegisteredEndPoint > FindEndPointByPartialAlias(const PString &alias, PSafetyMode mode=PSafeReference)
const PString & GetDestinationNumber() const
Definition: gkserver.h:536
unsigned GetTotalRegistrations() const
Definition: gkserver.h:1678
virtual void OnAlerting()
virtual PBoolean OnSendDescriptorForEndpoint(H323RegisteredEndPoint &, H225_ArrayOf_AliasAddress &, H225_EndpointType &, H225_ArrayOf_AliasAddress &)
Definition: gkserver.h:1708
H323RegisteredEndPoint(H323GatekeeperServer &server, const PString &id)
virtual PSafePtr< H323RegisteredEndPoint > FindEndPointBySignalAddress(const H323TransportAddress &address, PSafetyMode mode=PSafeReference)
virtual PBoolean SendServiceControlSession(const H323ServiceControlSession &session)
PString alternateSecurityID
Definition: gkserver.h:231
const PString & GetIdentifier() const
Definition: gkserver.h:764
virtual PString GetGatekeeperIdentifier() const
virtual unsigned AllocateBandwidth(unsigned newBandwidth, unsigned oldBandwidth=0)
virtual PString GetGatekeeperIdentifier() const
virtual void SetRejectReason(unsigned reasonCode)
virtual H323GatekeeperRequest::Response OnDiscovery(H323GatekeeperGRQ &request)
unsigned GetActiveRegistrations() const
Definition: gkserver.h:1670
virtual PString GetEndpointIdentifier() const =0
PCaselessString GetApplicationInfo() const
Definition: gkserver.h:853
void SetCanHaveDuplicateAlias(bool v)
Definition: gkserver.h:1628
H225_AdmissionReject & arj
Definition: gkserver.h:229
virtual PBoolean RemoveCall(H323GatekeeperCall *call)
virtual PBoolean TranslateAliasAddress(const H225_AliasAddress &alias, H225_ArrayOf_AliasAddress &aliases, H323TransportAddress &address, PBoolean &isGkRouted, H323GatekeeperCall *call)
H225_UnregistrationReject & urj
Definition: gkserver.h:198
virtual H235Authenticator::ValidationResult ValidatePDU() const
virtual unsigned GetRegisteredEndPointRejectTag() const =0
virtual PBoolean OnReceiveUnregistrationReject(const H225_UnregistrationReject &)
virtual H323GatekeeperRequest::Response OnBandwidth(H323GatekeeperBRQ &request)
PTime m_alertingTime
Definition: gkserver.h:573
virtual PBoolean TranslateAliasAddressToSignalAddress(const H225_AliasAddress &alias, H323TransportAddress &address)
virtual PString GetEndpointIdentifier() const
H323GatekeeperServer & m_gatekeeper
Definition: gkserver.h:553
virtual PBoolean CheckSignalAddressPolicy(const H323RegisteredEndPoint &ep, const H225_AdmissionRequest &arq, const H323TransportAddress &address)
virtual H323TransactionPDU * CreateRIP(unsigned sequenceNumber, unsigned delay) const
virtual PBoolean OnReceiveGatekeeperRequest(const H323RasPDU &, const H225_GatekeeperRequest &)
PSafePtr< H323GatekeeperCall > GetFirstCall(PSafetyMode mode=PSafeReference)
Definition: gkserver.h:1361
H225_GatekeeperRequest & grq
Definition: gkserver.h:134
POrdinalDictionary< PString > m_serviceControlSessions
Definition: gkserver.h:929
const PString & GetGatekeeperIdentifier() const
Definition: gkserver.h:1564
bool GetDisengageOnHearbeatFail() const
Hang up call if heartbeat (IRR) fails.
Definition: gkserver.h:1655
H323GatekeeperARQ(H323GatekeeperListener &listener, const H323RasPDU &pdu)
Definition: gkserver.h:1110
virtual PBoolean OnReceiveBandwidthConfirm(const H225_BandwidthConfirm &)
PTime m_connectedTime
Definition: gkserver.h:574
Definition: gkserver.h:938
virtual PString GetEndpointIdentifier() const
bool m_canHaveDuplicatePrefix
Definition: gkserver.h:1743
virtual PBoolean OnReceiveInfoRequestResponse(const H323RasPDU &, const H225_InfoRequestResponse &)
Direction m_direction
Definition: gkserver.h:557
virtual H235Authenticator::ValidationResult ValidatePDU() const
unsigned m_usedBandwidth
Definition: gkserver.h:1733
virtual PString GetGatekeeperIdentifier() const
bool CanReceiveRIP() const
virtual PBoolean OnSendFeatureSet(H460_MessageType pduType, H225_FeatureSet &features) const
virtual PString GetCallCreditAmount() const
H323GatekeeperRRQ(H323GatekeeperListener &listener, const H323RasPDU &pdu)
const PStringArray & GetDestinationAliases() const
Definition: gkserver.h:537
virtual PBoolean CheckAliasAddressPolicy(const H323RegisteredEndPoint &ep, const H225_AdmissionRequest &arq, const H225_AliasAddress &alias)
virtual PString GetGatekeeperIdentifier() const
virtual void AddEndPoint(H323RegisteredEndPoint *ep)
unsigned m_protocolVersion
Definition: gkserver.h:916
bool GetCanHaveDuplicatePrefix() const
Gateways may register duplicate prefix E.164 numbers.
Definition: gkserver.h:1631
PString GetSourceAddress() const
virtual H323GatekeeperRequest::Response OnFullRegistration(H323GatekeeperRRQ &request)
Definition: svcctrl.h:53
virtual H323Transactor * CreateListener(H323Transport *transport)
virtual unsigned GetRegisteredEndPointRejectTag() const
H323GatekeeperServer(H323EndPoint &endpoint)
virtual Response OnHandlePDU()
virtual Response OnHandlePDU()
PCaselessString AsString() const
virtual unsigned GetSecurityRejectTag() const
H323GatekeeperURQ(H323GatekeeperListener &listener, const H323RasPDU &pdu)
H225_DisengageRequest & drq
Definition: gkserver.h:260
virtual PString GetCallCreditAmount() const
virtual void SetRejectReason(unsigned reasonCode)
PLIST(ListenerList, H323GatekeeperListener)
Definition: gkserver.h:585
virtual H323GatekeeperRequest::Response OnUnregistration(H323GatekeeperURQ &request)
PString m_gatekeeperIdentifier
Definition: gkserver.h:1731
H323Connection::CallEndReason GetCallEndReason() const
Definition: gkserver.h:547
H225_RegistrationRequest & rrq
Definition: gkserver.h:165
PStringArray m_srcAliases
Definition: gkserver.h:562
Definition: h323pdu.h:397
PSortedList< H323GatekeeperCall > m_activeCalls
Definition: gkserver.h:928
void SetPeerElement(H323PeerElement *newPeerElement)
virtual PBoolean Unregister(int reason=-1)
virtual PString GetGatekeeperIdentifier() const
H323GatekeeperDRQ(H323GatekeeperListener &listener, const H323RasPDU &pdu)
virtual unsigned GetRegisteredEndPointRejectTag() const
bool GetCanOnlyAnswerRegisteredEP() const
Gatekeeper will only allow endpoint to answer another endpoint registered localy. ...
Definition: gkserver.h:1639
H323GatekeeperServer & m_gatekeeper
Definition: gkserver.h:1096
bool m_canEnforceDurationLimit
Definition: gkserver.h:919
PSyncPoint m_monitorExit
Definition: gkserver.h:1759
virtual unsigned GetGatekeeperRejectTag() const
PINDEX GetSignalAddressCount() const
Definition: gkserver.h:799
unsigned GetDefaultBandwidth() const
Definition: gkserver.h:1590
Definition: h460.h:53
unsigned m_defaultInfoResponseRate
Definition: gkserver.h:1737
H225_BandwidthConfirm & bcf
Definition: gkserver.h:292
virtual void AddCall(H323GatekeeperCall *)
Definition: gkserver.h:1327
virtual PString GetEndpointIdentifier() const
virtual unsigned GetSecurityRejectTag() const
time_t m_identifierBase
Definition: gkserver.h:1756
PSafeSortedList< H323GatekeeperCall > m_activeCalls
Definition: gkserver.h:1783
H323GatekeeperListener & GetRasChannel() const
Definition: gkserver.h:102
virtual PBoolean OnReceiveDisengageReject(const H225_DisengageReject &)
PStringArray m_voicePrefixes
Definition: gkserver.h:914
virtual H323GatekeeperRequest::Response OnDisengage(H323GatekeeperDRQ &request)
H225_LocationReject & lrj
Definition: gkserver.h:324
virtual H235Authenticator::ValidationResult ValidatePDU() const
PSafeDictionary< H225_AliasAddress, H323RegisteredEndPoint > m_discoveredEndpoints
Definition: gkserver.h:1768
unsigned GetActiveCalls() const
Definition: gkserver.h:1686
virtual H235Authenticator::ValidationResult ValidatePDU() const
H323GatekeeperServer & GetGatekeeper() const
Definition: gkserver.h:526
H225_LocationConfirm & lcf
Definition: gkserver.h:323
H225_RegistrationReject & rrj
Definition: gkserver.h:167
PSortedStringList m_byAlias
Definition: gkserver.h:1780
unsigned m_maximumBandwidth
Definition: gkserver.h:1735
void SetCanHaveDuplicatePrefix(bool v)
Definition: gkserver.h:1632
virtual PBoolean OnReceiveLocationRequest(const H323RasPDU &, const H225_LocationRequest &)
H225_GatekeeperReject & grj
Definition: gkserver.h:136
PTime m_lastInfoResponse
Definition: gkserver.h:569
virtual Response OnHandlePDU()
H323TransportAddressArray m_signalAddresses
Definition: gkserver.h:912
bool m_isBehindNAT
Definition: gkserver.h:917
virtual H323GatekeeperRequest::Response OnUnregistration(H323GatekeeperURQ &request)
H323GatekeeperCall(H323GatekeeperServer &server, const OpalGloballyUniqueID &callIdentifier, Direction direction)
virtual PString GetEndpointIdentifier() const
virtual PSafePtr< H323RegisteredEndPoint > FindEndPointByIdentifier(const PString &identifier, PSafetyMode mode=PSafeReference)
H225_AdmissionConfirm & acf
Definition: gkserver.h:228
void SetAnswerCallPreGrantedARQ(bool v)
Definition: gkserver.h:1644
virtual unsigned GetGatekeeperRejectTag() const
H323TransportAddress GetSignalAddress(PINDEX idx) const
Definition: gkserver.h:804
atomic< unsigned > m_rejectedCalls
Definition: gkserver.h:1790
const H323TransportAddressArray & GetRASAddresses() const
Definition: gkserver.h:777
const PTime & GetCallEndTime() const
Definition: gkserver.h:546
virtual unsigned GetGatekeeperRejectTag() const
virtual PBoolean OnHeartbeat()
Definition: h323trans.h:47
H323Connection::CallEndReason m_callEndReason
Definition: gkserver.h:576
unsigned m_maxAliasToAllocate
Definition: gkserver.h:1740
PSortedStringList m_byAddress
Definition: gkserver.h:1779
ValidationResult
Definition: h235auth.h:82
PSafePtr< H323RegisteredEndPoint > m_endpoint
Definition: gkserver.h:104
H323GatekeeperListener & m_rasChannel
Definition: gkserver.h:107
Definition: h323trans.h:387
virtual H323GatekeeperRequest::Response OnSecureRegistration(H323GatekeeperRRQ &request)
virtual PBoolean TranslateAliasAddress(const H225_AliasAddress &alias, H225_ArrayOf_AliasAddress &aliases, H323TransportAddress &address, PBoolean &isGkRouted)
PINDEX m_totalRegistrations
Definition: gkserver.h:1786
void SetCanOnlyCallRegisteredEP(bool v)
Definition: gkserver.h:1636
bool m_overwriteOnSameSignalAddress
Definition: gkserver.h:1738
Definition: connection.h:462
virtual H323GatekeeperRequest::Response OnRegistration(H323GatekeeperRRQ &request)
void SetAvailableBandwidth(unsigned bps100)
Definition: gkserver.h:1582
void SetMaxAliasToAllocate(unsigned v)
Definition: gkserver.h:1624
virtual H235Authenticator::ValidationResult ValidatePDU() const
virtual PString GetGatekeeperIdentifier() const
virtual PBoolean InfoRequest(H323RegisteredEndPoint &ep, H323GatekeeperCall *call=NULL)
H225_RegistrationConfirm & rcf
Definition: gkserver.h:166
Comparison Compare(const PObject &obj) const
unsigned GetBandwidthUsed() const
Definition: gkserver.h:540
const PTime & GetLastInfoResponseTime() const
Definition: gkserver.h:542
unsigned GetAvailableBandwidth() const
Definition: gkserver.h:1578
unsigned m_nextIdentifier
Definition: gkserver.h:1757
virtual PString GetEndpointIdentifier() const
void SetCanOnlyAnswerRegisteredEP(bool v)
Definition: gkserver.h:1640
virtual H323GatekeeperRequest::Response OnLocation(H323GatekeeperLRQ &request)
virtual H323GatekeeperRequest::Response OnBandwidth(H323GatekeeperBRQ &request)
PTime m_lastInfoResponse
Definition: gkserver.h:926
virtual H323GatekeeperRequest::Response OnRegistration(H323GatekeeperRRQ &request)
bool GetOverwriteOnSameSignalAddress() const
Allow new registration to gatekeeper on a specific signal address to override previous registration...
Definition: gkserver.h:1615
virtual PBoolean OnTimeToLive()
virtual H323RegisteredEndPoint * CreateRegisteredEndPoint(H323GatekeeperRequest &request)
virtual PBoolean OnReceiveRegistrationRequest(const H323RasPDU &, const H225_RegistrationRequest &)
bool IsGatekeeperRouted() const
Definition: gkserver.h:1660
void RemoveAlias(const PString &alias)
virtual PBoolean OnReceiveUnregistrationRequest(const H323RasPDU &, const H225_UnregistrationRequest &)
virtual PSafePtr< H323RegisteredEndPoint > FindEndPointByPrefixString(const PString &prefix, PSafetyMode mode=PSafeReference)
void SetRequiredH235(bool req)
Definition: gkserver.h:1666
PString m_srcNumber
Definition: gkserver.h:561
ListenerList m_listeners
Definition: gkserver.h:1762
bool SetBandwidthUsed(unsigned bandwidth)
H235Authenticators m_authenticators
Definition: gkserver.h:922
PString GetPrefix(PINDEX idx) const
Definition: gkserver.h:847
H323GatekeeperRequest(H323GatekeeperListener &rasChannel, const H323RasPDU &pdu)
H323RegisteredEndPoint & GetEndPoint() const
Definition: gkserver.h:527
virtual PBoolean OnReceiveAdmissionRequest(const H323RasPDU &, const H225_AdmissionRequest &)
void SetGatekeeperRouted(bool is)
Definition: gkserver.h:1661
virtual PBoolean GetCallCreditMode() const
PINDEX m_totalCalls
Definition: gkserver.h:1789
PINDEX GetPrefixCount() const
Definition: gkserver.h:843
virtual H323GatekeeperRequest::Response OnAdmission(H323GatekeeperARQ &request)
void SetUsageInfo(const H225_RasUsageInformation &usage)
virtual H235Authenticator::ValidationResult ValidatePDU() const
unsigned GetPeakCalls() const
Definition: gkserver.h:1690
PString m_identifier
Definition: gkserver.h:909
bool GetAliasCanBeHostName() const
Gatekeeper allows endpoint to simply register its host name/IP address.
Definition: gkserver.h:1651
bool AddCallCreditServiceControl(H225_ArrayOf_ServiceControlSession &serviceControl) const
virtual void ClearPasswords()
Definition: gkserver.h:1521
unsigned m_totalBandwidth
Definition: gkserver.h:1732
bool CanDisplayAmountString() const
Definition: gkserver.h:869
virtual PBoolean OnReceiveDisengageRequest(const H323RasPDU &, const H225_DisengageRequest &)
PSafePtr< H323RegisteredEndPoint > FindDestinationEndPoint(const OpalGloballyUniqueID &id, H323GatekeeperCall::Direction direction)
bool m_canOnlyCallRegisteredEP
Definition: gkserver.h:1744
Definition: gkserver.h:364
StringMap(const PString &from, const PString &id)
Definition: gkserver.h:1775
virtual PBoolean OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm &)
bool ContainsAlias(const PString &alias)
Definition: gkserver.h:814
H323GatekeeperCall & GetCall(PINDEX idx)
Definition: gkserver.h:638
virtual PBoolean UnregistrationRequest(const H323RegisteredEndPoint &ep, unsigned reason)
virtual void SetRejectReason(unsigned reasonCode)
H225_UnregistrationConfirm & ucf
Definition: gkserver.h:197
bool IsAnsweringCall() const
Definition: gkserver.h:528
virtual unsigned GetGatekeeperRejectTag() const
unsigned GetTotalCalls() const
Definition: gkserver.h:1694
unsigned m_timeToLive
Definition: gkserver.h:921
bool GetAnswerCallPreGrantedARQ() const
Gatekeeper pre-grants all incoming calls to endpoint.
Definition: gkserver.h:1643
virtual unsigned GetGatekeeperRejectTag() const
virtual PSafePtr< H323RegisteredEndPoint > FindEndPointByAliasAddress(const H225_AliasAddress &alias, PSafetyMode mode=PSafeReadWrite)
PDECLARE_NOTIFIER(PThread, H323GatekeeperServer, MonitorMain)
virtual unsigned GetRegisteredEndPointRejectTag() const
virtual PBoolean SendCallCreditServiceControl()
virtual unsigned GetRegisteredEndPointRejectTag() const
virtual H323GatekeeperRequest::Response OnInfoResponse(H323GatekeeperIRR &request)
unsigned m_bandwidthUsed
Definition: gkserver.h:567
virtual unsigned GetDurationLimit() const
H225_InfoRequestNak & inak
Definition: gkserver.h:355
OpalProductInfo m_productInfo
Definition: gkserver.h:915
PString gatekeeperIdentifier
Definition: h225ras.h:319
#define OpalGloballyUniqueID
Definition: guid.h:38
unsigned m_aliasToAllocate
Definition: gkserver.h:1741
Response
Definition: h323trans.h:326
unsigned GetMaxAliasToAllocate() const
Maximum value for aliases gatekeeper will allocate when endpoint does not provide one...
Definition: gkserver.h:1623
const PString & GetSourceNumber() const
Definition: gkserver.h:532
const PTime & GetAlertingTime() const
Definition: gkserver.h:544
H323PeerElement * GetPeerElement() const
Definition: gkserver.h:1529
bool OpenPeerElement(const H323TransportAddress &remotePeer, bool append=false, bool keepTrying=true)
void SetDefaultBandwidth(unsigned bw)
Definition: gkserver.h:1591
virtual void RemoveCall(H323GatekeeperCall *call)
virtual unsigned GetSecurityRejectTag() const
virtual PBoolean ServiceControlIndication(H323RegisteredEndPoint &ep, const H323ServiceControlSession &session, H323GatekeeperCall *call=NULL)
const H323TransportAddress & GetDestinationHost() const
Definition: gkserver.h:538
virtual unsigned GetRegisteredEndPointRejectTag() const
unsigned GetCallReference() const
Definition: gkserver.h:529
const PStringArray & GetAliases() const
Definition: gkserver.h:810
bool GetCanOnlyCallRegisteredEP() const
Gatekeeper will only allow EP to call another endpoint registered localy.
Definition: gkserver.h:1635
Definition: h323ep.h:82
virtual void OnReceiveFeatureSet(H460_MessageType pduType, const H225_FeatureSet &features) const
void PrintOn(ostream &strm) const
H225_AdmissionRequest & arq
Definition: gkserver.h:227
virtual PSafePtr< H323RegisteredEndPoint > FindEndPointBySignalAddresses(const H225_ArrayOf_TransportAddress &addresses, PSafetyMode mode=PSafeReference)
virtual H323GatekeeperRequest::Response OnDisengage(H323GatekeeperDRQ &request)
void SetTimeToLive(unsigned seconds)
Definition: gkserver.h:1604
void SetMakeCallPreGrantedARQ(bool v)
Definition: gkserver.h:1648
Definition: gkserver.h:372
unsigned GetRejectedCalls() const
Definition: gkserver.h:1698
bool m_aliasCanBeHostName
Definition: gkserver.h:1749
H225_InfoRequestAck & iack
Definition: gkserver.h:354
Definition: transaddr.h:62
OpalGloballyUniqueID m_callIdentifier
Definition: gkserver.h:559
virtual void OnReceiveFeatureSet(H460_MessageType pduType, const H225_FeatureSet &features) const
void SetInfoResponseRate(unsigned seconds)
Definition: gkserver.h:1612
virtual void SetRejectReason(unsigned reasonCode)
virtual H323GatekeeperRequest::Response OnInfoResponse(H323GatekeeperIRR &request)
PStringArray m_dstAliases
Definition: gkserver.h:565
void SetMaximumBandwidth(unsigned bw)
Definition: gkserver.h:1596
PTime m_lastRegistration
Definition: gkserver.h:925
virtual void SetRejectReason(unsigned reasonCode)
H225_DisengageReject & drj
Definition: gkserver.h:262
PINDEX m_peakRegistrations
Definition: gkserver.h:1785
virtual Response OnHandlePDU()
virtual unsigned GetGatekeeperRejectTag() const =0
virtual PBoolean OnReceiveResourcesAvailableConfirm(const H225_ResourcesAvailableConfirm &)
virtual void SetRejectReason(unsigned reasonCode)
virtual PSafePtr< H323GatekeeperCall > FindCall(const PString &description, PSafetyMode mode=PSafeReference)
H323GatekeeperServer & GetGatekeeper() const
Definition: gkserver.h:1091
void SetGatekeeperIdentifier(const PString &id, bool adjustListeners=true)
unsigned GetRejectedRegistrations() const
Definition: gkserver.h:1682
virtual PBoolean DisengageRequest(const H323GatekeeperCall &call, unsigned reason)
Definition: connection.h:358
const OpalGloballyUniqueID & GetConferenceIdentifier() const
Definition: gkserver.h:531
PString GetAlias(PINDEX idx) const
Definition: gkserver.h:824
virtual PBoolean AllowDuplicateAlias(const H225_ArrayOf_AliasAddress &)
Definition: gkserver.h:1716
P_REMOVE_VIRTUAL(H323RegisteredEndPoint *, CreateRegisteredEndPoint(H323GatekeeperRRQ &), 0)
virtual PString GetGatekeeperIdentifier() const
virtual PString GetEndpointIdentifier() const
virtual PBoolean GetCallCreditMode() const
PTime m_callEndTime
Definition: gkserver.h:575
Definition: gkserver.h:269
Definition: gkserver.h:205
H225_BandwidthRequest & brq
Definition: gkserver.h:291
Definition: gkserver.h:111
virtual PString GetEndpointIdentifier() const
virtual void AddCall(H323GatekeeperCall *call)
H323GatekeeperServer & GetGatekeeper() const
Definition: gkserver.h:772
virtual H323GatekeeperRequest::Response OnUnregistration(H323GatekeeperURQ &request)
Definition: gkserver.h:238