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