Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-h323.c
blob2a1538e49d1cc80e22fed93e270135f50a9969fa
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-h323.c */
4 /* asn2wrs.py -q -L -p h323 -c ./h323.cnf -s ./packet-h323-template -D . -O ../.. RAS-PROTOCOL-TUNNEL.asn ROBUSTNESS-DATA.asn */
6 /* packet-h323.c
7 * Routines for H.323 packet dissection
8 * 2007 Tomas Kukosa
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * SPDX-License-Identifier: GPL-2.0-or-later
17 #include "config.h"
19 #include <epan/packet.h>
20 #include <epan/oids.h>
21 #include <epan/asn1.h>
22 #include <wsutil/array.h>
24 #include "packet-per.h"
25 #include "packet-h225.h"
26 #include "packet-h323.h"
28 #define PNAME "H.323"
29 #define PSNAME "H.323"
30 #define PFNAME "h323"
32 void proto_register_h323(void);
33 void proto_reg_handoff_h323(void);
35 /* Generic Extensible Framework */
36 gef_ctx_t* gef_ctx_alloc(wmem_allocator_t *pool, gef_ctx_t *parent, const char *type) {
37 gef_ctx_t *gefx;
39 gefx = wmem_new0(pool, gef_ctx_t);
40 gefx->signature = GEF_CTX_SIGNATURE;
41 gefx->parent = parent;
42 gefx->type = type;
43 return gefx;
46 bool gef_ctx_check_signature(gef_ctx_t *gefx) {
47 return gefx && (gefx->signature == GEF_CTX_SIGNATURE);
50 gef_ctx_t* gef_ctx_get(void *ptr) {
51 gef_ctx_t *gefx = (gef_ctx_t*)ptr;
52 asn1_ctx_t *actx = (asn1_ctx_t*)ptr;
54 if (!asn1_ctx_check_signature(actx))
55 actx = NULL;
57 if (actx)
58 gefx = (gef_ctx_t *)actx->private_data;
60 if (!gef_ctx_check_signature(gefx))
61 gefx = NULL;
63 return gefx;
66 void gef_ctx_update_key(wmem_allocator_t *pool, gef_ctx_t *gefx) {
67 const char *parent_key;
69 if (!gefx) return;
70 parent_key = (gefx->parent) ? gefx->parent->key : NULL;
71 gefx->key = wmem_strdup_printf(pool,
72 "%s%s" /* parent prefix */
73 "%s%s%s" /* type, id */
74 "%s%s" /* subid */,
75 (parent_key) ? parent_key : "", (parent_key) ? "/" : "",
76 (gefx->type) ? gefx->type : "", (gefx->type && (gefx->id || gefx->subid)) ? "/" : "", (gefx->id) ? gefx->id : "",
77 (gefx->subid) ? "-" : "", (gefx->subid) ? gefx->subid : ""
81 /* Initialize the protocol and registered fields */
82 static int proto_h323;
83 static int hf_h323_RasTunnelledSignallingMessage_PDU; /* RasTunnelledSignallingMessage */
84 static int hf_h323_RobustnessData_PDU; /* RobustnessData */
85 static int hf_h323_tunnelledProtocolID; /* TunnelledProtocol */
86 static int hf_h323_messageContent; /* T_messageContent */
87 static int hf_h323_messageContent_item; /* OCTET_STRING */
88 static int hf_h323_tunnellingRequired; /* NULL */
89 static int hf_h323_nonStandardData; /* NonStandardParameter */
90 static int hf_h323_versionID; /* INTEGER_1_256 */
91 static int hf_h323_robustnessData; /* T_robustnessData */
92 static int hf_h323_rrqData; /* Rrq_RD */
93 static int hf_h323_rcfData; /* Rcf_RD */
94 static int hf_h323_setupData; /* Setup_RD */
95 static int hf_h323_connectData; /* Connect_RD */
96 static int hf_h323_statusData; /* Status_RD */
97 static int hf_h323_statusInquiryData; /* StatusInquiry_RD */
98 static int hf_h323_BackupCallSignalAddresses_item; /* BackupCallSignalAddresses_item */
99 static int hf_h323_tcp; /* TransportAddress */
100 static int hf_h323_alternateTransport; /* AlternateTransportAddresses */
101 static int hf_h323_backupCallSignalAddresses; /* BackupCallSignalAddresses */
102 static int hf_h323_hasSharedRepository; /* NULL */
103 static int hf_h323_irrFrequency; /* INTEGER_1_65535 */
104 static int hf_h323_endpointGuid; /* GloballyUniqueIdentifier */
105 static int hf_h323_h245Address; /* TransportAddress */
106 static int hf_h323_fastStart; /* T_fastStart */
107 static int hf_h323_fastStart_item; /* OCTET_STRING */
108 static int hf_h323_resetH245; /* NULL */
109 static int hf_h323_timeToLive; /* TimeToLive */
110 static int hf_h323_includeFastStart; /* NULL */
112 /* Initialize the subtree pointers */
113 static int ett_h323_RasTunnelledSignallingMessage;
114 static int ett_h323_T_messageContent;
115 static int ett_h323_RobustnessData;
116 static int ett_h323_T_robustnessData;
117 static int ett_h323_BackupCallSignalAddresses;
118 static int ett_h323_BackupCallSignalAddresses_item;
119 static int ett_h323_Rrq_RD;
120 static int ett_h323_Rcf_RD;
121 static int ett_h323_Setup_RD;
122 static int ett_h323_Connect_RD;
123 static int ett_h323_Status_RD;
124 static int ett_h323_T_fastStart;
125 static int ett_h323_StatusInquiry_RD;
129 static int
130 dissect_h323_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
131 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
132 NO_BOUND, NO_BOUND, false, NULL);
134 return offset;
138 static const per_sequence_t T_messageContent_sequence_of[1] = {
139 { &hf_h323_messageContent_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h323_OCTET_STRING },
142 static int
143 dissect_h323_T_messageContent(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
144 offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
145 ett_h323_T_messageContent, T_messageContent_sequence_of);
147 return offset;
152 static int
153 dissect_h323_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
154 offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
156 return offset;
160 static const per_sequence_t RasTunnelledSignallingMessage_sequence[] = {
161 { &hf_h323_tunnelledProtocolID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_TunnelledProtocol },
162 { &hf_h323_messageContent , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_T_messageContent },
163 { &hf_h323_tunnellingRequired, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
164 { &hf_h323_nonStandardData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_NonStandardParameter },
165 { NULL, 0, 0, NULL }
168 static int
169 dissect_h323_RasTunnelledSignallingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
170 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
171 ett_h323_RasTunnelledSignallingMessage, RasTunnelledSignallingMessage_sequence);
173 return offset;
178 static int
179 dissect_h323_INTEGER_1_256(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
180 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
181 1U, 256U, NULL, false);
183 return offset;
187 static const value_string h323_BackupCallSignalAddresses_item_vals[] = {
188 { 0, "tcp" },
189 { 1, "alternateTransport" },
190 { 0, NULL }
193 static const per_choice_t BackupCallSignalAddresses_item_choice[] = {
194 { 0, &hf_h323_tcp , ASN1_EXTENSION_ROOT , dissect_h225_TransportAddress },
195 { 1, &hf_h323_alternateTransport, ASN1_EXTENSION_ROOT , dissect_h225_AlternateTransportAddresses },
196 { 0, NULL, 0, NULL }
199 static int
200 dissect_h323_BackupCallSignalAddresses_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
201 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
202 ett_h323_BackupCallSignalAddresses_item, BackupCallSignalAddresses_item_choice,
203 NULL);
205 return offset;
209 static const per_sequence_t BackupCallSignalAddresses_sequence_of[1] = {
210 { &hf_h323_BackupCallSignalAddresses_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses_item },
213 static int
214 dissect_h323_BackupCallSignalAddresses(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
215 offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
216 ett_h323_BackupCallSignalAddresses, BackupCallSignalAddresses_sequence_of);
218 return offset;
222 static const per_sequence_t Rrq_RD_sequence[] = {
223 { &hf_h323_backupCallSignalAddresses, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses },
224 { &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
225 { NULL, 0, 0, NULL }
228 static int
229 dissect_h323_Rrq_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
230 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
231 ett_h323_Rrq_RD, Rrq_RD_sequence);
233 return offset;
238 static int
239 dissect_h323_INTEGER_1_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
240 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
241 1U, 65535U, NULL, false);
243 return offset;
247 static const per_sequence_t Rcf_RD_sequence[] = {
248 { &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
249 { &hf_h323_irrFrequency , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h323_INTEGER_1_65535 },
250 { NULL, 0, 0, NULL }
253 static int
254 dissect_h323_Rcf_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
255 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
256 ett_h323_Rcf_RD, Rcf_RD_sequence);
258 return offset;
263 static int
264 dissect_h323_GloballyUniqueIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
265 offset = dissect_h225_GloballyUniqueID(tvb, offset, actx, tree, hf_index);
267 return offset;
271 static const per_sequence_t Setup_RD_sequence[] = {
272 { &hf_h323_backupCallSignalAddresses, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses },
273 { &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
274 { &hf_h323_endpointGuid , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_GloballyUniqueIdentifier },
275 { NULL, 0, 0, NULL }
278 static int
279 dissect_h323_Setup_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
280 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
281 ett_h323_Setup_RD, Setup_RD_sequence);
283 return offset;
287 static const per_sequence_t Connect_RD_sequence[] = {
288 { &hf_h323_backupCallSignalAddresses, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses },
289 { &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
290 { &hf_h323_endpointGuid , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_GloballyUniqueIdentifier },
291 { NULL, 0, 0, NULL }
294 static int
295 dissect_h323_Connect_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
296 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
297 ett_h323_Connect_RD, Connect_RD_sequence);
299 return offset;
303 static const per_sequence_t T_fastStart_sequence_of[1] = {
304 { &hf_h323_fastStart_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h323_OCTET_STRING },
307 static int
308 dissect_h323_T_fastStart(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
309 offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
310 ett_h323_T_fastStart, T_fastStart_sequence_of);
312 return offset;
316 static const per_sequence_t Status_RD_sequence[] = {
317 { &hf_h323_h245Address , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_TransportAddress },
318 { &hf_h323_fastStart , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_T_fastStart },
319 { &hf_h323_resetH245 , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h323_NULL },
320 { NULL, 0, 0, NULL }
323 static int
324 dissect_h323_Status_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
325 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
326 ett_h323_Status_RD, Status_RD_sequence);
328 return offset;
332 static const per_sequence_t StatusInquiry_RD_sequence[] = {
333 { &hf_h323_h245Address , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_TransportAddress },
334 { &hf_h323_timeToLive , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_TimeToLive },
335 { &hf_h323_includeFastStart, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
336 { NULL, 0, 0, NULL }
339 static int
340 dissect_h323_StatusInquiry_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
341 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
342 ett_h323_StatusInquiry_RD, StatusInquiry_RD_sequence);
344 return offset;
348 static const value_string h323_T_robustnessData_vals[] = {
349 { 0, "rrqData" },
350 { 1, "rcfData" },
351 { 2, "setupData" },
352 { 3, "connectData" },
353 { 4, "statusData" },
354 { 5, "statusInquiryData" },
355 { 0, NULL }
358 static const per_choice_t T_robustnessData_choice[] = {
359 { 0, &hf_h323_rrqData , ASN1_EXTENSION_ROOT , dissect_h323_Rrq_RD },
360 { 1, &hf_h323_rcfData , ASN1_EXTENSION_ROOT , dissect_h323_Rcf_RD },
361 { 2, &hf_h323_setupData , ASN1_EXTENSION_ROOT , dissect_h323_Setup_RD },
362 { 3, &hf_h323_connectData , ASN1_EXTENSION_ROOT , dissect_h323_Connect_RD },
363 { 4, &hf_h323_statusData , ASN1_EXTENSION_ROOT , dissect_h323_Status_RD },
364 { 5, &hf_h323_statusInquiryData, ASN1_EXTENSION_ROOT , dissect_h323_StatusInquiry_RD },
365 { 0, NULL, 0, NULL }
368 static int
369 dissect_h323_T_robustnessData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
370 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
371 ett_h323_T_robustnessData, T_robustnessData_choice,
372 NULL);
374 return offset;
378 static const per_sequence_t RobustnessData_sequence[] = {
379 { &hf_h323_versionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_INTEGER_1_256 },
380 { &hf_h323_robustnessData , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_T_robustnessData },
381 { NULL, 0, 0, NULL }
384 static int
385 dissect_h323_RobustnessData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
386 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
387 ett_h323_RobustnessData, RobustnessData_sequence);
389 return offset;
392 /*--- PDUs ---*/
394 static int dissect_RasTunnelledSignallingMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
395 int offset = 0;
396 asn1_ctx_t asn1_ctx;
397 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
398 offset = dissect_h323_RasTunnelledSignallingMessage(tvb, offset, &asn1_ctx, tree, hf_h323_RasTunnelledSignallingMessage_PDU);
399 offset += 7; offset >>= 3;
400 return offset;
402 static int dissect_RobustnessData_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
403 int offset = 0;
404 asn1_ctx_t asn1_ctx;
405 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
406 offset = dissect_h323_RobustnessData(tvb, offset, &asn1_ctx, tree, hf_h323_RobustnessData_PDU);
407 offset += 7; offset >>= 3;
408 return offset;
412 /*--- proto_register_h323 ----------------------------------------------*/
413 void proto_register_h323(void) {
415 /* List of fields */
416 static hf_register_info hf[] = {
417 { &hf_h323_RasTunnelledSignallingMessage_PDU,
418 { "RasTunnelledSignallingMessage", "h323.RasTunnelledSignallingMessage_element",
419 FT_NONE, BASE_NONE, NULL, 0,
420 NULL, HFILL }},
421 { &hf_h323_RobustnessData_PDU,
422 { "RobustnessData", "h323.RobustnessData_element",
423 FT_NONE, BASE_NONE, NULL, 0,
424 NULL, HFILL }},
425 { &hf_h323_tunnelledProtocolID,
426 { "tunnelledProtocolID", "h323.tunnelledProtocolID_element",
427 FT_NONE, BASE_NONE, NULL, 0,
428 "TunnelledProtocol", HFILL }},
429 { &hf_h323_messageContent,
430 { "messageContent", "h323.messageContent",
431 FT_UINT32, BASE_DEC, NULL, 0,
432 NULL, HFILL }},
433 { &hf_h323_messageContent_item,
434 { "messageContent item", "h323.messageContent_item",
435 FT_BYTES, BASE_NONE, NULL, 0,
436 "OCTET_STRING", HFILL }},
437 { &hf_h323_tunnellingRequired,
438 { "tunnellingRequired", "h323.tunnellingRequired_element",
439 FT_NONE, BASE_NONE, NULL, 0,
440 NULL, HFILL }},
441 { &hf_h323_nonStandardData,
442 { "nonStandardData", "h323.nonStandardData_element",
443 FT_NONE, BASE_NONE, NULL, 0,
444 "NonStandardParameter", HFILL }},
445 { &hf_h323_versionID,
446 { "versionID", "h323.versionID",
447 FT_UINT32, BASE_DEC, NULL, 0,
448 "INTEGER_1_256", HFILL }},
449 { &hf_h323_robustnessData,
450 { "robustnessData", "h323.robustnessData",
451 FT_UINT32, BASE_DEC, VALS(h323_T_robustnessData_vals), 0,
452 NULL, HFILL }},
453 { &hf_h323_rrqData,
454 { "rrqData", "h323.rrqData_element",
455 FT_NONE, BASE_NONE, NULL, 0,
456 "Rrq_RD", HFILL }},
457 { &hf_h323_rcfData,
458 { "rcfData", "h323.rcfData_element",
459 FT_NONE, BASE_NONE, NULL, 0,
460 "Rcf_RD", HFILL }},
461 { &hf_h323_setupData,
462 { "setupData", "h323.setupData_element",
463 FT_NONE, BASE_NONE, NULL, 0,
464 "Setup_RD", HFILL }},
465 { &hf_h323_connectData,
466 { "connectData", "h323.connectData_element",
467 FT_NONE, BASE_NONE, NULL, 0,
468 "Connect_RD", HFILL }},
469 { &hf_h323_statusData,
470 { "statusData", "h323.statusData_element",
471 FT_NONE, BASE_NONE, NULL, 0,
472 "Status_RD", HFILL }},
473 { &hf_h323_statusInquiryData,
474 { "statusInquiryData", "h323.statusInquiryData_element",
475 FT_NONE, BASE_NONE, NULL, 0,
476 "StatusInquiry_RD", HFILL }},
477 { &hf_h323_BackupCallSignalAddresses_item,
478 { "BackupCallSignalAddresses item", "h323.BackupCallSignalAddresses_item",
479 FT_UINT32, BASE_DEC, VALS(h323_BackupCallSignalAddresses_item_vals), 0,
480 NULL, HFILL }},
481 { &hf_h323_tcp,
482 { "tcp", "h323.tcp",
483 FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
484 "TransportAddress", HFILL }},
485 { &hf_h323_alternateTransport,
486 { "alternateTransport", "h323.alternateTransport_element",
487 FT_NONE, BASE_NONE, NULL, 0,
488 "AlternateTransportAddresses", HFILL }},
489 { &hf_h323_backupCallSignalAddresses,
490 { "backupCallSignalAddresses", "h323.backupCallSignalAddresses",
491 FT_UINT32, BASE_DEC, NULL, 0,
492 NULL, HFILL }},
493 { &hf_h323_hasSharedRepository,
494 { "hasSharedRepository", "h323.hasSharedRepository_element",
495 FT_NONE, BASE_NONE, NULL, 0,
496 NULL, HFILL }},
497 { &hf_h323_irrFrequency,
498 { "irrFrequency", "h323.irrFrequency",
499 FT_UINT32, BASE_DEC, NULL, 0,
500 "INTEGER_1_65535", HFILL }},
501 { &hf_h323_endpointGuid,
502 { "endpointGuid", "h323.endpointGuid",
503 FT_GUID, BASE_NONE, NULL, 0,
504 "GloballyUniqueIdentifier", HFILL }},
505 { &hf_h323_h245Address,
506 { "h245Address", "h323.h245Address",
507 FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
508 "TransportAddress", HFILL }},
509 { &hf_h323_fastStart,
510 { "fastStart", "h323.fastStart",
511 FT_UINT32, BASE_DEC, NULL, 0,
512 NULL, HFILL }},
513 { &hf_h323_fastStart_item,
514 { "fastStart item", "h323.fastStart_item",
515 FT_BYTES, BASE_NONE, NULL, 0,
516 "OCTET_STRING", HFILL }},
517 { &hf_h323_resetH245,
518 { "resetH245", "h323.resetH245_element",
519 FT_NONE, BASE_NONE, NULL, 0,
520 NULL, HFILL }},
521 { &hf_h323_timeToLive,
522 { "timeToLive", "h323.timeToLive",
523 FT_UINT32, BASE_DEC, NULL, 0,
524 NULL, HFILL }},
525 { &hf_h323_includeFastStart,
526 { "includeFastStart", "h323.includeFastStart_element",
527 FT_NONE, BASE_NONE, NULL, 0,
528 NULL, HFILL }},
531 /* List of subtrees */
532 static int *ett[] = {
533 &ett_h323_RasTunnelledSignallingMessage,
534 &ett_h323_T_messageContent,
535 &ett_h323_RobustnessData,
536 &ett_h323_T_robustnessData,
537 &ett_h323_BackupCallSignalAddresses,
538 &ett_h323_BackupCallSignalAddresses_item,
539 &ett_h323_Rrq_RD,
540 &ett_h323_Rcf_RD,
541 &ett_h323_Setup_RD,
542 &ett_h323_Connect_RD,
543 &ett_h323_Status_RD,
544 &ett_h323_T_fastStart,
545 &ett_h323_StatusInquiry_RD,
548 /* Register protocol */
549 proto_h323 = proto_register_protocol(PNAME, PSNAME, PFNAME);
551 /* Register fields and subtrees */
552 proto_register_field_array(proto_h323, hf, array_length(hf));
553 proto_register_subtree_array(ett, array_length(ett));
558 /*--- proto_reg_handoff_h323 -------------------------------------------*/
559 void proto_reg_handoff_h323(void)
561 dissector_handle_t q931_handle;
563 q931_handle = find_dissector("q931");
565 /* H.323, Annex M1, Tunnelling of signalling protocols (QSIG) in H.323 */
566 dissector_add_string("h225.tp", "1.3.12.9", q931_handle);
568 /* H.323, Annex M4, Tunnelling of narrow-band signalling syntax (NSS) for H.323 */
569 dissector_add_string("h225.gef.content", "GenericData/1000/1",
570 create_dissector_handle(dissect_RasTunnelledSignallingMessage_PDU, proto_h323));
572 /* H.323, Annex R, Robustness methods for H.323 entities */
573 dissector_add_string("h225.gef.content", "GenericData/1/1",
574 create_dissector_handle(dissect_RobustnessData_PDU, proto_h323));