1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
4 /* asn2wrs.py -q -L -p h323 -c ./h323.cnf -s ./packet-h323-template -D . -O ../.. RAS-PROTOCOL-TUNNEL.asn ROBUSTNESS-DATA.asn */
7 * Routines for H.323 packet dissection
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
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"
29 #define PSNAME "H.323"
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
) {
39 gefx
= wmem_new0(pool
, gef_ctx_t
);
40 gefx
->signature
= GEF_CTX_SIGNATURE
;
41 gefx
->parent
= parent
;
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
))
58 gefx
= (gef_ctx_t
*)actx
->private_data
;
60 if (!gef_ctx_check_signature(gefx
))
66 void gef_ctx_update_key(wmem_allocator_t
*pool
, gef_ctx_t
*gefx
) {
67 const char *parent_key
;
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 */
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
;
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
);
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
},
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
);
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
);
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
},
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
);
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);
187 static const value_string h323_BackupCallSignalAddresses_item_vals
[] = {
189 { 1, "alternateTransport" },
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
},
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
,
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
},
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
);
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
},
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
);
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);
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
},
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
);
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
);
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
},
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
);
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
},
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
);
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
},
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
);
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
},
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
);
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
},
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
);
348 static const value_string h323_T_robustnessData_vals
[] = {
352 { 3, "connectData" },
354 { 5, "statusInquiryData" },
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
},
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
,
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
},
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
);
394 static int dissect_RasTunnelledSignallingMessage_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
402 static int dissect_RobustnessData_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
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;
412 /*--- proto_register_h323 ----------------------------------------------*/
413 void proto_register_h323(void) {
416 static hf_register_info hf
[] = {
417 { &hf_h323_RasTunnelledSignallingMessage_PDU
,
418 { "RasTunnelledSignallingMessage", "h323.RasTunnelledSignallingMessage_element",
419 FT_NONE
, BASE_NONE
, NULL
, 0,
421 { &hf_h323_RobustnessData_PDU
,
422 { "RobustnessData", "h323.RobustnessData_element",
423 FT_NONE
, BASE_NONE
, NULL
, 0,
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,
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,
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,
454 { "rrqData", "h323.rrqData_element",
455 FT_NONE
, BASE_NONE
, NULL
, 0,
458 { "rcfData", "h323.rcfData_element",
459 FT_NONE
, BASE_NONE
, NULL
, 0,
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,
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,
493 { &hf_h323_hasSharedRepository
,
494 { "hasSharedRepository", "h323.hasSharedRepository_element",
495 FT_NONE
, BASE_NONE
, NULL
, 0,
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,
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,
521 { &hf_h323_timeToLive
,
522 { "timeToLive", "h323.timeToLive",
523 FT_UINT32
, BASE_DEC
, NULL
, 0,
525 { &hf_h323_includeFastStart
,
526 { "includeFastStart", "h323.includeFastStart_element",
527 FT_NONE
, BASE_NONE
, NULL
, 0,
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
,
542 &ett_h323_Connect_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
));