1 /*
2  * h323annexg.cxx
3  *
4  * Implementation of H.323 Annex G using H.501
5  *
6  * Open H323 Library
7  *
8  * Copyright (c) 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  * Contributor(s): ______________________________________.
25  *
26  * $Log$
27  * Revision 1.1  2007/08/06 20:51:06  shorne
28  * First commit of h323plus
29  *
30  * Revision 1.12  2004/07/03 06:51:37  rjongbloed
31  * Added PTRACE_PARAM() macro to fix warnings on parameters used in PTRACE
32  *  macros only.
33  *
34  * Revision 1.11  2003/04/09 03:08:10  robertj
35  * Fixed race condition in shutting down transactor (pure virtual call)
36  *
37  * Revision 1.10  2003/04/01 03:14:40  robertj
38  * Fixed passing thru H.501 RIP packet to transactor to handle.
39  *
40  * Revision 1.9  2003/03/26 00:46:29  robertj
41  * Had another go at making H323Transactor being able to be created
42  *   without having a listener running.
43  *
44  * Revision 1.8  2003/03/21 05:27:34  robertj
45  * Added setting of remote port in UDP transport constructor.
46  * Added call backs for cached responses.
47  *
48  * Revision 1.7  2003/03/20 01:51:11  robertj
49  * More abstraction of H.225 RAS and H.501 protocols transaction handling.
50  *
51  * Revision 1.6  2003/03/18 13:57:53  craigs
52  * More H.501 implementation
53  *
54  * Revision 1.5  2003/03/17 13:19:31  craigs
55  * More H501 implementation
56  *
57  * Revision 1.4  2003/03/14 06:01:16  craigs
58  * More updates
59  *
60  * Revision 1.3  2003/03/01 00:22:10  craigs
61  * New PeerElement implementation
62  *
63  * Revision 1.2  2003/02/25 06:48:19  robertj
64  * More work on PDU transaction abstraction.
65  *
66  * Revision 1.1  2003/02/21 05:27:06  craigs
67  * Initial version
68  *
69  */
70 
71 #include <ptlib.h>
72 
73 #ifdef __GNUC__
74 #pragma implementation "h323annexg.h"
75 #endif
76 
77 #include <ptclib/random.h>
78 
79 #include "h323annexg.h"
80 #include "h323ep.h"
81 #include "h323pdu.h"
82 #include "h501.h"
83 
84 
85 #define new PNEW
86 
87 
88 ///////////////////////////////////////////////////////////////////////////////
89 
H323_AnnexG(H323EndPoint & ep,H323Transport * trans)90 H323_AnnexG::H323_AnnexG(H323EndPoint & ep, H323Transport * trans)
91   : H323Transactor(ep, trans, DefaultUdpPort, DefaultUdpPort)
92 {
93   Construct();
94 }
95 
H323_AnnexG(H323EndPoint & ep,const H323TransportAddress & addr)96 H323_AnnexG::H323_AnnexG(H323EndPoint & ep, const H323TransportAddress & addr)
97   : H323Transactor(ep, addr, DefaultUdpPort, DefaultUdpPort)
98 {
99   Construct();
100 }
101 
Construct()102 void H323_AnnexG::Construct()
103 {
104   lastRequest = NULL;
105   requests.DisallowDeleteObjects();
106 }
107 
~H323_AnnexG()108 H323_AnnexG::~H323_AnnexG()
109 {
110   StopChannel();
111 }
112 
PrintOn(ostream & strm) const113 void H323_AnnexG::PrintOn(ostream & strm) const
114 {
115   strm << "H501@";
116   H323Transactor::PrintOn(strm);
117 }
118 
119 
CreateTransactionPDU() const120 H323TransactionPDU * H323_AnnexG::CreateTransactionPDU() const
121 {
122   return new H501PDU;
123 }
124 
125 
HandleTransaction(const PASN_Object & rawPDU)126 PBoolean H323_AnnexG::HandleTransaction(const PASN_Object & rawPDU)
127 {
128   const H501PDU & pdu = (const H501PDU &)rawPDU;
129 
130   switch (pdu.m_body.GetTag()) {
131     case H501_MessageBody::e_serviceRequest :
132       if (SendCachedResponse(pdu))
133         return FALSE;
134       OnReceiveServiceRequest(pdu, pdu.m_body);
135       break;
136 
137     case H501_MessageBody::e_serviceConfirmation :
138       return OnReceiveServiceConfirmation(pdu, pdu.m_body);
139 
140     case H501_MessageBody::e_serviceRejection :
141       return OnReceiveServiceRejection(pdu, pdu.m_body);
142 
143     case H501_MessageBody::e_serviceRelease :
144       if (SendCachedResponse(pdu))
145         return FALSE;
146       OnReceiveServiceRelease(pdu, pdu.m_body);
147       break;
148 
149     case H501_MessageBody::e_descriptorRequest :
150       if (SendCachedResponse(pdu))
151         return FALSE;
152       OnReceiveDescriptorRequest(pdu, pdu.m_body);
153       break;
154 
155     case H501_MessageBody::e_descriptorConfirmation :
156       return OnReceiveDescriptorConfirmation(pdu, pdu.m_body);
157 
158     case H501_MessageBody::e_descriptorRejection :
159       return OnReceiveDescriptorRejection(pdu, pdu.m_body);
160 
161     case H501_MessageBody::e_descriptorIDRequest :
162       if (SendCachedResponse(pdu))
163         return FALSE;
164       OnReceiveDescriptorIDRequest(pdu, pdu.m_body);
165       break;
166 
167     case H501_MessageBody::e_descriptorIDConfirmation :
168       return OnReceiveDescriptorIDConfirmation(pdu, pdu.m_body);
169 
170     case H501_MessageBody::e_descriptorIDRejection :
171       return OnReceiveDescriptorIDRejection(pdu, pdu.m_body);
172 
173     case H501_MessageBody::e_descriptorUpdate :
174       if (SendCachedResponse(pdu))
175         return FALSE;
176       OnReceiveDescriptorUpdate(pdu, pdu.m_body);
177       break;
178 
179     case H501_MessageBody::e_descriptorUpdateAck :
180       return OnReceiveDescriptorUpdateACK(pdu, pdu.m_body);
181 
182     case H501_MessageBody::e_accessRequest :
183       if (SendCachedResponse(pdu))
184         return FALSE;
185       OnReceiveAccessRequest(pdu, pdu.m_body);
186       break;
187 
188     case H501_MessageBody::e_accessConfirmation :
189       return OnReceiveAccessConfirmation(pdu, pdu.m_body);
190 
191     case H501_MessageBody::e_accessRejection :
192       return OnReceiveAccessRejection(pdu, pdu.m_body);
193 
194     case H501_MessageBody::e_requestInProgress :
195       return OnReceiveRequestInProgress(pdu, pdu.m_body);
196 
197     case H501_MessageBody::e_nonStandardRequest :
198       if (SendCachedResponse(pdu))
199         return FALSE;
200       OnReceiveNonStandardRequest(pdu, pdu.m_body);
201       break;
202 
203     case H501_MessageBody::e_nonStandardConfirmation :
204       return OnReceiveNonStandardConfirmation(pdu, pdu.m_body);
205 
206     case H501_MessageBody::e_nonStandardRejection :
207       return OnReceiveNonStandardRejection(pdu, pdu.m_body);
208 
209     case H501_MessageBody::e_unknownMessageResponse :
210       OnReceiveUnknownMessageResponse(pdu, pdu.m_body);
211       break;
212 
213     case H501_MessageBody::e_usageRequest :
214       if (SendCachedResponse(pdu))
215         return FALSE;
216       OnReceiveUsageRequest(pdu, pdu.m_body);
217       break;
218 
219     case H501_MessageBody::e_usageConfirmation :
220       return OnReceiveUsageConfirmation(pdu, pdu.m_body);
221 
222     case H501_MessageBody::e_usageIndication :
223       if (SendCachedResponse(pdu))
224         return FALSE;
225       OnReceiveUnknownMessageResponse(pdu, pdu.m_body);
226       break;
227 
228     case H501_MessageBody::e_usageIndicationConfirmation :
229       return OnReceiveUsageIndicationConfirmation(pdu, pdu.m_body);
230 
231     case H501_MessageBody::e_usageIndicationRejection :
232       return OnReceiveUsageIndicationRejection(pdu, pdu.m_body);
233 
234     case H501_MessageBody::e_usageRejection :
235       return OnReceiveUsageRejection(pdu, pdu.m_body);
236 
237     case H501_MessageBody::e_validationRequest :
238       if (SendCachedResponse(pdu))
239         return FALSE;
240       OnReceiveValidationRequest(pdu, pdu.m_body);
241       break;
242 
243     case H501_MessageBody::e_validationConfirmation :
244       return OnReceiveValidationConfirmation(pdu, pdu.m_body);
245 
246     case H501_MessageBody::e_validationRejection :
247       return OnReceiveValidationRejection(pdu, pdu.m_body);
248 
249     case H501_MessageBody::e_authenticationRequest :
250       if (SendCachedResponse(pdu))
251         return FALSE;
252       OnReceiveAuthenticationRequest(pdu, pdu.m_body);
253       break;
254 
255     case H501_MessageBody::e_authenticationConfirmation :
256       return OnReceiveAuthenticationConfirmation(pdu, pdu.m_body);
257 
258     case H501_MessageBody::e_authenticationRejection :
259       return OnReceiveAuthenticationRejection(pdu, pdu.m_body);
260 
261     default :
262       OnReceiveUnknown(pdu);
263   }
264 
265   return FALSE;
266 }
267 
268 
OnSendingPDU(PASN_Object &)269 void H323_AnnexG::OnSendingPDU(PASN_Object & /*rawPDU*/)
270 {
271 }
272 
273 
OnReceiveUnknown(const H501PDU &)274 PBoolean H323_AnnexG::OnReceiveUnknown(const H501PDU &)
275 {
276   H501PDU response;
277   response.BuildUnknownMessageResponse(0);
278   return response.Write(*transport);
279 }
280 
OnReceiveServiceRequest(const H501PDU & pdu,const H501_ServiceRequest &)281 PBoolean H323_AnnexG::OnReceiveServiceRequest(const H501PDU & pdu, const H501_ServiceRequest & /*pduBody*/)
282 {
283   PTRACE(3, "AnnexG\tOnReceiveServiceRequest - seq: " << pdu.m_common.m_sequenceNumber);
284   H501PDU response;
285   response.BuildServiceRejection(pdu.m_common.m_sequenceNumber, H501_ServiceRejectionReason::e_serviceUnavailable);
286   return response.Write(*transport);
287 }
288 
OnReceiveServiceConfirmation(const H501PDU & pdu,const H501_ServiceConfirmation &)289 PBoolean H323_AnnexG::OnReceiveServiceConfirmation(const H501PDU & pdu, const H501_ServiceConfirmation & /*pduBody*/)
290 {
291   return CheckForResponse(H501_MessageBody::e_serviceRequest, pdu.m_common.m_sequenceNumber);
292 }
293 
OnReceiveServiceRejection(const H501PDU & pdu,const H501_ServiceRejection & pduBody)294 PBoolean H323_AnnexG::OnReceiveServiceRejection(const H501PDU & pdu, const H501_ServiceRejection & pduBody)
295 {
296   return CheckForResponse(H501_MessageBody::e_serviceRequest, pdu.m_common.m_sequenceNumber, &pduBody.m_reason);
297 }
298 
OnReceiveServiceRelease(const H501PDU &,const H501_ServiceRelease &)299 PBoolean H323_AnnexG::OnReceiveServiceRelease(const H501PDU & /*common*/, const H501_ServiceRelease & /*pdu*/)
300 {
301   return FALSE;
302 }
303 
OnReceiveDescriptorRequest(const H501PDU & PTRACE_PARAM (pdu),const H501_DescriptorRequest &)304 PBoolean H323_AnnexG::OnReceiveDescriptorRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorRequest & /*pdu*/)
305 {
306   PTRACE(3, "AnnexG\tOnReceiveDescriptorRequest - seq: " << pdu.m_common.m_sequenceNumber);
307   return FALSE;
308 }
309 
OnReceiveDescriptorConfirmation(const H501PDU & PTRACE_PARAM (pdu),const H501_DescriptorConfirmation &)310 PBoolean H323_AnnexG::OnReceiveDescriptorConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorConfirmation & /*pdu*/)
311 {
312   PTRACE(3, "AnnexG\tOnReceiveDescriptorConfirmation - seq: " << pdu.m_common.m_sequenceNumber);
313   return FALSE;
314 }
315 
OnReceiveDescriptorRejection(const H501PDU & PTRACE_PARAM (pdu),const H501_DescriptorRejection &)316 PBoolean H323_AnnexG::OnReceiveDescriptorRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorRejection & /*pdu*/)
317 {
318   PTRACE(3, "AnnexG\tOnReceiveDescriptorRejection - seq: " << pdu.m_common.m_sequenceNumber);
319   return FALSE;
320 }
321 
OnReceiveDescriptorIDRequest(const H501PDU & PTRACE_PARAM (pdu),const H501_DescriptorIDRequest &)322 PBoolean H323_AnnexG::OnReceiveDescriptorIDRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorIDRequest & /*pdu*/)
323 {
324   PTRACE(3, "AnnexG\tOnReceiveDescriptorIDRequest - seq: " << pdu.m_common.m_sequenceNumber);
325   return FALSE;
326 }
327 
OnReceiveDescriptorIDConfirmation(const H501PDU & PTRACE_PARAM (pdu),const H501_DescriptorIDConfirmation &)328 PBoolean H323_AnnexG::OnReceiveDescriptorIDConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorIDConfirmation & /*pdu*/)
329 {
330   PTRACE(3, "AnnexG\tOnReceiveDescriptorIDConfirmation - seq: " << pdu.m_common.m_sequenceNumber);
331   return FALSE;
332 }
333 
OnReceiveDescriptorIDRejection(const H501PDU & PTRACE_PARAM (pdu),const H501_DescriptorIDRejection &)334 PBoolean H323_AnnexG::OnReceiveDescriptorIDRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorIDRejection & /*pdu*/)
335 {
336   PTRACE(3, "AnnexG\tOnReceiveDescriptorIDRejection - seq: " << pdu.m_common.m_sequenceNumber);
337   return FALSE;
338 }
339 
OnReceiveDescriptorUpdate(const H501PDU & PTRACE_PARAM (pdu),const H501_DescriptorUpdate &)340 PBoolean H323_AnnexG::OnReceiveDescriptorUpdate(const H501PDU & PTRACE_PARAM(pdu), const H501_DescriptorUpdate & /*pdu*/)
341 {
342   PTRACE(3, "AnnexG\tOnReceiveDescriptorUpdate - seq: " << pdu.m_common.m_sequenceNumber);
343   return FALSE;
344 }
345 
OnReceiveDescriptorUpdateACK(const H501PDU & pdu,const H501_DescriptorUpdateAck &)346 PBoolean H323_AnnexG::OnReceiveDescriptorUpdateACK(const H501PDU & pdu, const H501_DescriptorUpdateAck & /*pdu*/)
347 {
348   PTRACE(3, "AnnexG\tOnReceiveDescriptorUpdateACK - seq: " << pdu.m_common.m_sequenceNumber);
349   return CheckForResponse(H501_MessageBody::e_descriptorUpdate, pdu.m_common.m_sequenceNumber);
350 }
351 
OnReceiveAccessRequest(const H501PDU & PTRACE_PARAM (pdu),const H501_AccessRequest &)352 PBoolean H323_AnnexG::OnReceiveAccessRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_AccessRequest & /*pdu*/)
353 {
354   PTRACE(3, "AnnexG\tOnReceiveAccessRequest - seq: " << pdu.m_common.m_sequenceNumber);
355   return FALSE;
356 }
357 
OnReceiveAccessConfirmation(const H501PDU & pdu,const H501_AccessConfirmation &)358 PBoolean H323_AnnexG::OnReceiveAccessConfirmation(const H501PDU & pdu, const H501_AccessConfirmation & /*pdu*/)
359 {
360   PTRACE(3, "AnnexG\tOnReceiveAccessConfirmation - seq: " << pdu.m_common.m_sequenceNumber);
361   return CheckForResponse(H501_MessageBody::e_accessRequest, pdu.m_common.m_sequenceNumber);
362 }
363 
OnReceiveAccessRejection(const H501PDU & pdu,const H501_AccessRejection & pduBody)364 PBoolean H323_AnnexG::OnReceiveAccessRejection(const H501PDU & pdu, const H501_AccessRejection & pduBody)
365 {
366   PTRACE(3, "AnnexG\tOnReceiveAccessRejection - seq: " << pdu.m_common.m_sequenceNumber);
367   return CheckForResponse(H501_MessageBody::e_accessRequest, pdu.m_common.m_sequenceNumber, &pduBody.m_reason);
368 }
369 
OnReceiveRequestInProgress(const H501PDU & pdu,const H501_RequestInProgress & rip)370 PBoolean H323_AnnexG::OnReceiveRequestInProgress(const H501PDU & pdu, const H501_RequestInProgress & rip)
371 {
372   return HandleRequestInProgress(pdu, rip.m_delay);
373 }
374 
OnReceiveNonStandardRequest(const H501PDU & PTRACE_PARAM (pdu),const H501_NonStandardRequest &)375 PBoolean H323_AnnexG::OnReceiveNonStandardRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_NonStandardRequest & /*pdu*/)
376 {
377   PTRACE(3, "AnnexG\tOnReceiveNonStandardRequest - seq: " << pdu.m_common.m_sequenceNumber);
378   return FALSE;
379 }
380 
OnReceiveNonStandardConfirmation(const H501PDU & PTRACE_PARAM (pdu),const H501_NonStandardConfirmation &)381 PBoolean H323_AnnexG::OnReceiveNonStandardConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_NonStandardConfirmation & /*pdu*/)
382 {
383   PTRACE(3, "AnnexG\tOnReceiveNonStandardConfirmation - seq: " << pdu.m_common.m_sequenceNumber);
384   return FALSE;
385 }
386 
OnReceiveNonStandardRejection(const H501PDU & PTRACE_PARAM (pdu),const H501_NonStandardRejection &)387 PBoolean H323_AnnexG::OnReceiveNonStandardRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_NonStandardRejection & /*pdu*/)
388 {
389   PTRACE(3, "AnnexG\tOnReceiveNonStandardRejection - seq: " << pdu.m_common.m_sequenceNumber);
390   return FALSE;
391 }
392 
OnReceiveUnknownMessageResponse(const H501PDU & PTRACE_PARAM (pdu),const H501_UnknownMessageResponse &)393 PBoolean H323_AnnexG::OnReceiveUnknownMessageResponse(const H501PDU & PTRACE_PARAM(pdu), const H501_UnknownMessageResponse & /*pdu*/)
394 {
395   PTRACE(3, "AnnexG\tOnReceiveUnknownMessageResponse - seq: " << pdu.m_common.m_sequenceNumber);
396   return FALSE;
397 }
398 
OnReceiveUsageRequest(const H501PDU & PTRACE_PARAM (pdu),const H501_UsageRequest &)399 PBoolean H323_AnnexG::OnReceiveUsageRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_UsageRequest & /*pdu*/)
400 {
401   PTRACE(3, "AnnexG\tOnReceiveUsageRequest - seq: " << pdu.m_common.m_sequenceNumber);
402   return FALSE;
403 }
404 
OnReceiveUsageConfirmation(const H501PDU & PTRACE_PARAM (pdu),const H501_UsageConfirmation &)405 PBoolean H323_AnnexG::OnReceiveUsageConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_UsageConfirmation & /*pdu*/)
406 {
407   PTRACE(3, "AnnexG\tOnReceiveUsageConfirmation - seq: " << pdu.m_common.m_sequenceNumber);
408   return FALSE;
409 }
410 
OnReceiveUsageIndicationConfirmation(const H501PDU & PTRACE_PARAM (pdu),const H501_UsageIndicationConfirmation &)411 PBoolean H323_AnnexG::OnReceiveUsageIndicationConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_UsageIndicationConfirmation & /*pdu*/)
412 {
413   PTRACE(3, "AnnexG\tOnReceiveUsageIndicationConfirmation - seq: " << pdu.m_common.m_sequenceNumber);
414   return FALSE;
415 }
416 
OnReceiveUsageIndicationRejection(const H501PDU & PTRACE_PARAM (pdu),const H501_UsageIndicationRejection &)417 PBoolean H323_AnnexG::OnReceiveUsageIndicationRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_UsageIndicationRejection & /*pdu*/)
418 {
419   PTRACE(3, "AnnexG\tOnReceiveUsageIndicationRejection - seq: " << pdu.m_common.m_sequenceNumber);
420   return FALSE;
421 }
422 
OnReceiveUsageRejection(const H501PDU & PTRACE_PARAM (pdu),const H501_UsageRejection &)423 PBoolean H323_AnnexG::OnReceiveUsageRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_UsageRejection & /*pdu*/)
424 {
425   PTRACE(3, "AnnexG\tOnReceiveUsageRejection - seq: " << pdu.m_common.m_sequenceNumber);
426   return FALSE;
427 }
428 
OnReceiveValidationRequest(const H501PDU & PTRACE_PARAM (pdu),const H501_ValidationRequest &)429 PBoolean H323_AnnexG::OnReceiveValidationRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_ValidationRequest & /*pdu*/)
430 {
431   PTRACE(3, "AnnexG\tOnReceiveValidationRequest - seq: " << pdu.m_common.m_sequenceNumber);
432   return FALSE;
433 }
434 
OnReceiveValidationConfirmation(const H501PDU & PTRACE_PARAM (pdu),const H501_ValidationConfirmation &)435 PBoolean H323_AnnexG::OnReceiveValidationConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_ValidationConfirmation & /*pdu*/)
436 {
437   PTRACE(3, "AnnexG\tOnReceiveValidationConfirmation - seq: " << pdu.m_common.m_sequenceNumber);
438   return FALSE;
439 }
440 
OnReceiveValidationRejection(const H501PDU & PTRACE_PARAM (pdu),const H501_ValidationRejection &)441 PBoolean H323_AnnexG::OnReceiveValidationRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_ValidationRejection & /*pdu*/)
442 {
443   PTRACE(3, "AnnexG\tOnReceiveValidationRejection - seq: " << pdu.m_common.m_sequenceNumber);
444   return FALSE;
445 }
446 
OnReceiveAuthenticationRequest(const H501PDU & PTRACE_PARAM (pdu),const H501_AuthenticationRequest &)447 PBoolean H323_AnnexG::OnReceiveAuthenticationRequest(const H501PDU & PTRACE_PARAM(pdu), const H501_AuthenticationRequest & /*pdu*/)
448 {
449   PTRACE(3, "AnnexG\tOnReceiveAuthenticationRequest - seq: " << pdu.m_common.m_sequenceNumber);
450   return FALSE;
451 }
452 
OnReceiveAuthenticationConfirmation(const H501PDU & PTRACE_PARAM (pdu),const H501_AuthenticationConfirmation &)453 PBoolean H323_AnnexG::OnReceiveAuthenticationConfirmation(const H501PDU & PTRACE_PARAM(pdu), const H501_AuthenticationConfirmation & /*pdu*/)
454 {
455   PTRACE(3, "AnnexG\tOnReceiveAuthenticationConfirmation - seq: " << pdu.m_common.m_sequenceNumber);
456   return FALSE;
457 }
458 
OnReceiveAuthenticationRejection(const H501PDU & PTRACE_PARAM (pdu),const H501_AuthenticationRejection &)459 PBoolean H323_AnnexG::OnReceiveAuthenticationRejection(const H501PDU & PTRACE_PARAM(pdu), const H501_AuthenticationRejection & /*pdu*/)
460 {
461   PTRACE(3, "AnnexG\tOnReceiveAuthenticationRejection - seq: " << pdu.m_common.m_sequenceNumber);
462   return FALSE;
463 }
464 
465 
466 /////////////////////////////////////////////////////////////////////////////
467