Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-h283.c
blob594035356301e86dbb557659e75ed2c54bdae6fa
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-h283.c */
4 /* asn2wrs.py -q -L -p h283 -c ./h283.cnf -s ./packet-h283-template -D . -O ../.. LCT-PROTOCOL.asn */
6 /* packet-h283.c
7 * Routines for H.283 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"
26 #define PNAME "H.283 Logical Channel Transport"
27 #define PSNAME "LCT"
28 #define PFNAME "lct"
30 void proto_register_h283(void);
31 void proto_reg_handoff_h283(void);
33 /* Initialize the protocol and registered fields */
34 static int proto_h283;
35 static int hf_h283_LCTPDU_PDU; /* LCTPDU */
36 static int hf_h283_t35CountryCode; /* INTEGER_0_255 */
37 static int hf_h283_t35Extension; /* INTEGER_0_255 */
38 static int hf_h283_manufacturerCode; /* INTEGER_0_65535 */
39 static int hf_h283_object; /* OBJECT_IDENTIFIER */
40 static int hf_h283_h221NonStandard; /* H221NonStandard */
41 static int hf_h283_nonStandardIdentifier; /* NonStandardIdentifier */
42 static int hf_h283_data; /* OCTET_STRING */
43 static int hf_h283_srcAddr; /* MTAddress */
44 static int hf_h283_dstAddr; /* MTAddress */
45 static int hf_h283_timestamp; /* INTEGER_0_4294967295 */
46 static int hf_h283_seqNumber; /* INTEGER_0_65535 */
47 static int hf_h283_pduType; /* T_pduType */
48 static int hf_h283_ack; /* NULL */
49 static int hf_h283_rdcData; /* RDCData */
50 static int hf_h283_nonStandardParameters; /* SEQUENCE_OF_NonStandardParameter */
51 static int hf_h283_nonStandardParameters_item; /* NonStandardParameter */
52 static int hf_h283_mAddress; /* INTEGER_0_65535 */
53 static int hf_h283_tAddress; /* INTEGER_0_65535 */
54 static int hf_h283_reliable; /* BOOLEAN */
55 static int hf_h283_dataType; /* T_dataType */
56 static int hf_h283_lctMessage; /* LCTMessage */
57 static int hf_h283_rdcPDU; /* T_rdcPDU */
58 static int hf_h283_lctRequest; /* LCTRequest */
59 static int hf_h283_lctResponse; /* LCTResponse */
60 static int hf_h283_lctIndication; /* LCTIndication */
61 static int hf_h283_nonStandardMessage; /* NonStandardMessage */
62 static int hf_h283_announceReq; /* NULL */
63 static int hf_h283_deviceListReq; /* NULL */
64 static int hf_h283_announceResp; /* NULL */
65 static int hf_h283_deviceListResp; /* T_deviceListResp */
66 static int hf_h283_deviceChange; /* NULL */
68 /* Initialize the subtree pointers */
69 static int ett_h283;
70 static int ett_h283_H221NonStandard;
71 static int ett_h283_NonStandardIdentifier;
72 static int ett_h283_NonStandardParameter;
73 static int ett_h283_LCTPDU;
74 static int ett_h283_T_pduType;
75 static int ett_h283_SEQUENCE_OF_NonStandardParameter;
76 static int ett_h283_MTAddress;
77 static int ett_h283_RDCData;
78 static int ett_h283_T_dataType;
79 static int ett_h283_LCTMessage;
80 static int ett_h283_LCTRequest;
81 static int ett_h283_LCTResponse;
82 static int ett_h283_LCTIndication;
83 static int ett_h283_NonStandardMessage;
85 /* Subdissectors */
86 static dissector_handle_t rdc_pdu_handle;
87 static dissector_handle_t rdc_device_list_handle;
88 static dissector_handle_t data_handle;
89 static dissector_handle_t h283_udp_handle;
92 static bool info_is_set;
96 static int
97 dissect_h283_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
98 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
99 0U, 255U, NULL, false);
101 return offset;
106 static int
107 dissect_h283_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
108 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
109 0U, 65535U, NULL, false);
111 return offset;
115 static const per_sequence_t H221NonStandard_sequence[] = {
116 { &hf_h283_t35CountryCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h283_INTEGER_0_255 },
117 { &hf_h283_t35Extension , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h283_INTEGER_0_255 },
118 { &hf_h283_manufacturerCode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h283_INTEGER_0_65535 },
119 { NULL, 0, 0, NULL }
122 static int
123 dissect_h283_H221NonStandard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
124 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
125 ett_h283_H221NonStandard, H221NonStandard_sequence);
127 return offset;
132 static int
133 dissect_h283_OBJECT_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
134 offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
136 return offset;
140 static const value_string h283_NonStandardIdentifier_vals[] = {
141 { 0, "object" },
142 { 1, "h221NonStandard" },
143 { 0, NULL }
146 static const per_choice_t NonStandardIdentifier_choice[] = {
147 { 0, &hf_h283_object , ASN1_EXTENSION_ROOT , dissect_h283_OBJECT_IDENTIFIER },
148 { 1, &hf_h283_h221NonStandard, ASN1_EXTENSION_ROOT , dissect_h283_H221NonStandard },
149 { 0, NULL, 0, NULL }
152 static int
153 dissect_h283_NonStandardIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
154 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
155 ett_h283_NonStandardIdentifier, NonStandardIdentifier_choice,
156 NULL);
158 return offset;
163 static int
164 dissect_h283_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
165 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
166 NO_BOUND, NO_BOUND, false, NULL);
168 return offset;
172 static const per_sequence_t NonStandardParameter_sequence[] = {
173 { &hf_h283_nonStandardIdentifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h283_NonStandardIdentifier },
174 { &hf_h283_data , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h283_OCTET_STRING },
175 { NULL, 0, 0, NULL }
178 static int
179 dissect_h283_NonStandardParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
180 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
181 ett_h283_NonStandardParameter, NonStandardParameter_sequence);
183 return offset;
187 static const per_sequence_t MTAddress_sequence[] = {
188 { &hf_h283_mAddress , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h283_INTEGER_0_65535 },
189 { &hf_h283_tAddress , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h283_INTEGER_0_65535 },
190 { NULL, 0, 0, NULL }
193 static int
194 dissect_h283_MTAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
195 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
196 ett_h283_MTAddress, MTAddress_sequence);
198 return offset;
203 static int
204 dissect_h283_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
205 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
206 0U, 4294967295U, NULL, false);
208 return offset;
213 static int
214 dissect_h283_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
215 offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
217 return offset;
222 static int
223 dissect_h283_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
224 offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
226 return offset;
230 static const value_string h283_LCTRequest_vals[] = {
231 { 0, "announceReq" },
232 { 1, "deviceListReq" },
233 { 0, NULL }
236 static const per_choice_t LCTRequest_choice[] = {
237 { 0, &hf_h283_announceReq , ASN1_EXTENSION_ROOT , dissect_h283_NULL },
238 { 1, &hf_h283_deviceListReq , ASN1_EXTENSION_ROOT , dissect_h283_NULL },
239 { 0, NULL, 0, NULL }
242 static int
243 dissect_h283_LCTRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
244 int32_t msg_type = -1;
245 const char *p = NULL;
246 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
247 ett_h283_LCTRequest, LCTRequest_choice,
248 &msg_type);
250 p = try_val_to_str(msg_type, VALS(h283_LCTRequest_vals));
251 if (!info_is_set && p ) {
252 col_add_fstr(actx->pinfo->cinfo, COL_INFO, "LCTRequest/%s", p);
253 info_is_set = true;
255 return offset;
260 static int
261 dissect_h283_T_deviceListResp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
262 tvbuff_t *next_tvb = NULL;
264 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
265 NO_BOUND, NO_BOUND, false, &next_tvb);
267 if (next_tvb && tvb_reported_length(next_tvb)) {
268 call_dissector((rdc_device_list_handle)?rdc_device_list_handle:data_handle, next_tvb, actx->pinfo, tree);
271 return offset;
275 static const value_string h283_LCTResponse_vals[] = {
276 { 0, "announceResp" },
277 { 1, "deviceListResp" },
278 { 0, NULL }
281 static const per_choice_t LCTResponse_choice[] = {
282 { 0, &hf_h283_announceResp , ASN1_EXTENSION_ROOT , dissect_h283_NULL },
283 { 1, &hf_h283_deviceListResp , ASN1_EXTENSION_ROOT , dissect_h283_T_deviceListResp },
284 { 0, NULL, 0, NULL }
287 static int
288 dissect_h283_LCTResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
289 int32_t msg_type = -1;
290 const char *p = NULL;
291 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
292 ett_h283_LCTResponse, LCTResponse_choice,
293 &msg_type);
295 p = try_val_to_str(msg_type, VALS(h283_LCTResponse_vals));
296 if (!info_is_set && p ) {
297 col_add_fstr(actx->pinfo->cinfo, COL_INFO, "LCTResponse/%s", p);
298 info_is_set = true;
300 return offset;
304 static const value_string h283_LCTIndication_vals[] = {
305 { 0, "deviceChange" },
306 { 0, NULL }
309 static const per_choice_t LCTIndication_choice[] = {
310 { 0, &hf_h283_deviceChange , ASN1_EXTENSION_ROOT , dissect_h283_NULL },
311 { 0, NULL, 0, NULL }
314 static int
315 dissect_h283_LCTIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
316 int32_t msg_type = -1;
317 const char *p = NULL;
318 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
319 ett_h283_LCTIndication, LCTIndication_choice,
320 &msg_type);
322 p = try_val_to_str(msg_type, VALS(h283_LCTIndication_vals));
323 if (!info_is_set && p ) {
324 col_add_fstr(actx->pinfo->cinfo, COL_INFO, "LCTIndication/%s", p);
325 info_is_set = true;
327 return offset;
331 static const per_sequence_t SEQUENCE_OF_NonStandardParameter_sequence_of[1] = {
332 { &hf_h283_nonStandardParameters_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h283_NonStandardParameter },
335 static int
336 dissect_h283_SEQUENCE_OF_NonStandardParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
337 offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
338 ett_h283_SEQUENCE_OF_NonStandardParameter, SEQUENCE_OF_NonStandardParameter_sequence_of);
340 return offset;
344 static const per_sequence_t NonStandardMessage_sequence[] = {
345 { &hf_h283_nonStandardParameters, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h283_SEQUENCE_OF_NonStandardParameter },
346 { NULL, 0, 0, NULL }
349 static int
350 dissect_h283_NonStandardMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
351 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
352 ett_h283_NonStandardMessage, NonStandardMessage_sequence);
354 return offset;
358 static const value_string h283_LCTMessage_vals[] = {
359 { 0, "lctRequest" },
360 { 1, "lctResponse" },
361 { 2, "lctIndication" },
362 { 3, "nonStandardMessage" },
363 { 0, NULL }
366 static const per_choice_t LCTMessage_choice[] = {
367 { 0, &hf_h283_lctRequest , ASN1_EXTENSION_ROOT , dissect_h283_LCTRequest },
368 { 1, &hf_h283_lctResponse , ASN1_EXTENSION_ROOT , dissect_h283_LCTResponse },
369 { 2, &hf_h283_lctIndication , ASN1_EXTENSION_ROOT , dissect_h283_LCTIndication },
370 { 3, &hf_h283_nonStandardMessage, ASN1_EXTENSION_ROOT , dissect_h283_NonStandardMessage },
371 { 0, NULL, 0, NULL }
374 static int
375 dissect_h283_LCTMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
376 int32_t msg_type = -1;
377 const char *p = NULL;
378 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
379 ett_h283_LCTMessage, LCTMessage_choice,
380 &msg_type);
382 p = try_val_to_str(msg_type, VALS(h283_LCTMessage_vals));
383 if (!info_is_set && p ) {
384 col_add_fstr(actx->pinfo->cinfo, COL_INFO, "LCTMessage/%s", p);
385 info_is_set = true;
387 return offset;
392 static int
393 dissect_h283_T_rdcPDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
394 tvbuff_t *next_tvb = NULL;
396 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
397 NO_BOUND, NO_BOUND, false, &next_tvb);
399 if (next_tvb && tvb_reported_length(next_tvb)) {
400 call_dissector((rdc_pdu_handle)?rdc_pdu_handle:data_handle, next_tvb, actx->pinfo, proto_tree_get_root(tree));
402 info_is_set = true;
404 return offset;
408 static const value_string h283_T_dataType_vals[] = {
409 { 0, "lctMessage" },
410 { 1, "rdcPDU" },
411 { 0, NULL }
414 static const per_choice_t T_dataType_choice[] = {
415 { 0, &hf_h283_lctMessage , ASN1_NO_EXTENSIONS , dissect_h283_LCTMessage },
416 { 1, &hf_h283_rdcPDU , ASN1_NO_EXTENSIONS , dissect_h283_T_rdcPDU },
417 { 0, NULL, 0, NULL }
420 static int
421 dissect_h283_T_dataType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
422 int32_t data_type = -1;
423 const char *p = NULL;
424 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
425 ett_h283_T_dataType, T_dataType_choice,
426 &data_type);
428 p = try_val_to_str(data_type, VALS(h283_T_dataType_vals));
429 if (!info_is_set && p ) {
430 col_add_fstr(actx->pinfo->cinfo, COL_INFO, "RDCData/%s", p);
431 info_is_set = true;
433 return offset;
437 static const per_sequence_t RDCData_sequence[] = {
438 { &hf_h283_reliable , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h283_BOOLEAN },
439 { &hf_h283_dataType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h283_T_dataType },
440 { NULL, 0, 0, NULL }
443 static int
444 dissect_h283_RDCData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
445 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
446 ett_h283_RDCData, RDCData_sequence);
448 return offset;
452 static const value_string h283_T_pduType_vals[] = {
453 { 0, "ack" },
454 { 1, "rdcData" },
455 { 0, NULL }
458 static const per_choice_t T_pduType_choice[] = {
459 { 0, &hf_h283_ack , ASN1_NO_EXTENSIONS , dissect_h283_NULL },
460 { 1, &hf_h283_rdcData , ASN1_NO_EXTENSIONS , dissect_h283_RDCData },
461 { 0, NULL, 0, NULL }
464 static int
465 dissect_h283_T_pduType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
466 int32_t pdu_type = -1;
467 const char *p = NULL;
468 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
469 ett_h283_T_pduType, T_pduType_choice,
470 &pdu_type);
472 p = try_val_to_str(pdu_type, VALS(h283_T_pduType_vals));
473 if (!info_is_set && p ) {
474 col_set_str(actx->pinfo->cinfo, COL_INFO, p);
475 info_is_set = true;
477 return offset;
481 static const per_sequence_t LCTPDU_sequence[] = {
482 { &hf_h283_srcAddr , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h283_MTAddress },
483 { &hf_h283_dstAddr , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h283_MTAddress },
484 { &hf_h283_timestamp , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h283_INTEGER_0_4294967295 },
485 { &hf_h283_seqNumber , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h283_INTEGER_0_65535 },
486 { &hf_h283_pduType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h283_T_pduType },
487 { &hf_h283_nonStandardParameters, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h283_SEQUENCE_OF_NonStandardParameter },
488 { NULL, 0, 0, NULL }
491 static int
492 dissect_h283_LCTPDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
493 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
494 ett_h283_LCTPDU, LCTPDU_sequence);
496 return offset;
499 /*--- PDUs ---*/
501 static int dissect_LCTPDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
502 int offset = 0;
503 asn1_ctx_t asn1_ctx;
504 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
505 offset = dissect_h283_LCTPDU(tvb, offset, &asn1_ctx, tree, hf_h283_LCTPDU_PDU);
506 offset += 7; offset >>= 3;
507 return offset;
511 static int
512 dissect_h283_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
514 proto_item *ti = NULL;
515 proto_tree *h283_tree = NULL;
517 col_set_str(pinfo->cinfo, COL_PROTOCOL, PSNAME);
519 info_is_set = false;
521 ti = proto_tree_add_item(tree, proto_h283, tvb, 0, -1, ENC_NA);
522 h283_tree = proto_item_add_subtree(ti, ett_h283);
524 return dissect_LCTPDU_PDU(tvb, pinfo, h283_tree, NULL);
527 /*--- proto_register_h283 ----------------------------------------------*/
528 void proto_register_h283(void) {
530 /* List of fields */
531 static hf_register_info hf[] = {
532 { &hf_h283_LCTPDU_PDU,
533 { "LCTPDU", "h283.LCTPDU_element",
534 FT_NONE, BASE_NONE, NULL, 0,
535 NULL, HFILL }},
536 { &hf_h283_t35CountryCode,
537 { "t35CountryCode", "h283.t35CountryCode",
538 FT_UINT32, BASE_DEC, NULL, 0,
539 "INTEGER_0_255", HFILL }},
540 { &hf_h283_t35Extension,
541 { "t35Extension", "h283.t35Extension",
542 FT_UINT32, BASE_DEC, NULL, 0,
543 "INTEGER_0_255", HFILL }},
544 { &hf_h283_manufacturerCode,
545 { "manufacturerCode", "h283.manufacturerCode",
546 FT_UINT32, BASE_DEC, NULL, 0,
547 "INTEGER_0_65535", HFILL }},
548 { &hf_h283_object,
549 { "object", "h283.object",
550 FT_OID, BASE_NONE, NULL, 0,
551 "OBJECT_IDENTIFIER", HFILL }},
552 { &hf_h283_h221NonStandard,
553 { "h221NonStandard", "h283.h221NonStandard_element",
554 FT_NONE, BASE_NONE, NULL, 0,
555 NULL, HFILL }},
556 { &hf_h283_nonStandardIdentifier,
557 { "nonStandardIdentifier", "h283.nonStandardIdentifier",
558 FT_UINT32, BASE_DEC, VALS(h283_NonStandardIdentifier_vals), 0,
559 NULL, HFILL }},
560 { &hf_h283_data,
561 { "data", "h283.data",
562 FT_BYTES, BASE_NONE, NULL, 0,
563 "OCTET_STRING", HFILL }},
564 { &hf_h283_srcAddr,
565 { "srcAddr", "h283.srcAddr_element",
566 FT_NONE, BASE_NONE, NULL, 0,
567 "MTAddress", HFILL }},
568 { &hf_h283_dstAddr,
569 { "dstAddr", "h283.dstAddr_element",
570 FT_NONE, BASE_NONE, NULL, 0,
571 "MTAddress", HFILL }},
572 { &hf_h283_timestamp,
573 { "timestamp", "h283.timestamp",
574 FT_UINT32, BASE_DEC, NULL, 0,
575 "INTEGER_0_4294967295", HFILL }},
576 { &hf_h283_seqNumber,
577 { "seqNumber", "h283.seqNumber",
578 FT_UINT32, BASE_DEC, NULL, 0,
579 "INTEGER_0_65535", HFILL }},
580 { &hf_h283_pduType,
581 { "pduType", "h283.pduType",
582 FT_UINT32, BASE_DEC, VALS(h283_T_pduType_vals), 0,
583 NULL, HFILL }},
584 { &hf_h283_ack,
585 { "ack", "h283.ack_element",
586 FT_NONE, BASE_NONE, NULL, 0,
587 NULL, HFILL }},
588 { &hf_h283_rdcData,
589 { "rdcData", "h283.rdcData_element",
590 FT_NONE, BASE_NONE, NULL, 0,
591 NULL, HFILL }},
592 { &hf_h283_nonStandardParameters,
593 { "nonStandardParameters", "h283.nonStandardParameters",
594 FT_UINT32, BASE_DEC, NULL, 0,
595 "SEQUENCE_OF_NonStandardParameter", HFILL }},
596 { &hf_h283_nonStandardParameters_item,
597 { "NonStandardParameter", "h283.NonStandardParameter_element",
598 FT_NONE, BASE_NONE, NULL, 0,
599 NULL, HFILL }},
600 { &hf_h283_mAddress,
601 { "mAddress", "h283.mAddress",
602 FT_UINT32, BASE_DEC, NULL, 0,
603 "INTEGER_0_65535", HFILL }},
604 { &hf_h283_tAddress,
605 { "tAddress", "h283.tAddress",
606 FT_UINT32, BASE_DEC, NULL, 0,
607 "INTEGER_0_65535", HFILL }},
608 { &hf_h283_reliable,
609 { "reliable", "h283.reliable",
610 FT_BOOLEAN, BASE_NONE, NULL, 0,
611 "BOOLEAN", HFILL }},
612 { &hf_h283_dataType,
613 { "dataType", "h283.dataType",
614 FT_UINT32, BASE_DEC, VALS(h283_T_dataType_vals), 0,
615 NULL, HFILL }},
616 { &hf_h283_lctMessage,
617 { "lctMessage", "h283.lctMessage",
618 FT_UINT32, BASE_DEC, VALS(h283_LCTMessage_vals), 0,
619 NULL, HFILL }},
620 { &hf_h283_rdcPDU,
621 { "rdcPDU", "h283.rdcPDU",
622 FT_UINT32, BASE_DEC, NULL, 0,
623 NULL, HFILL }},
624 { &hf_h283_lctRequest,
625 { "lctRequest", "h283.lctRequest",
626 FT_UINT32, BASE_DEC, VALS(h283_LCTRequest_vals), 0,
627 NULL, HFILL }},
628 { &hf_h283_lctResponse,
629 { "lctResponse", "h283.lctResponse",
630 FT_UINT32, BASE_DEC, VALS(h283_LCTResponse_vals), 0,
631 NULL, HFILL }},
632 { &hf_h283_lctIndication,
633 { "lctIndication", "h283.lctIndication",
634 FT_UINT32, BASE_DEC, VALS(h283_LCTIndication_vals), 0,
635 NULL, HFILL }},
636 { &hf_h283_nonStandardMessage,
637 { "nonStandardMessage", "h283.nonStandardMessage_element",
638 FT_NONE, BASE_NONE, NULL, 0,
639 NULL, HFILL }},
640 { &hf_h283_announceReq,
641 { "announceReq", "h283.announceReq_element",
642 FT_NONE, BASE_NONE, NULL, 0,
643 NULL, HFILL }},
644 { &hf_h283_deviceListReq,
645 { "deviceListReq", "h283.deviceListReq_element",
646 FT_NONE, BASE_NONE, NULL, 0,
647 NULL, HFILL }},
648 { &hf_h283_announceResp,
649 { "announceResp", "h283.announceResp_element",
650 FT_NONE, BASE_NONE, NULL, 0,
651 NULL, HFILL }},
652 { &hf_h283_deviceListResp,
653 { "deviceListResp", "h283.deviceListResp",
654 FT_UINT32, BASE_DEC, NULL, 0,
655 NULL, HFILL }},
656 { &hf_h283_deviceChange,
657 { "deviceChange", "h283.deviceChange_element",
658 FT_NONE, BASE_NONE, NULL, 0,
659 NULL, HFILL }},
662 /* List of subtrees */
663 static int *ett[] = {
664 &ett_h283,
665 &ett_h283_H221NonStandard,
666 &ett_h283_NonStandardIdentifier,
667 &ett_h283_NonStandardParameter,
668 &ett_h283_LCTPDU,
669 &ett_h283_T_pduType,
670 &ett_h283_SEQUENCE_OF_NonStandardParameter,
671 &ett_h283_MTAddress,
672 &ett_h283_RDCData,
673 &ett_h283_T_dataType,
674 &ett_h283_LCTMessage,
675 &ett_h283_LCTRequest,
676 &ett_h283_LCTResponse,
677 &ett_h283_LCTIndication,
678 &ett_h283_NonStandardMessage,
681 /* Register protocol */
682 proto_h283 = proto_register_protocol(PNAME, PSNAME, PFNAME);
684 /* Register fields and subtrees */
685 proto_register_field_array(proto_h283, hf, array_length(hf));
686 proto_register_subtree_array(ett, array_length(ett));
688 h283_udp_handle = register_dissector(PFNAME, dissect_h283_udp, proto_h283);
692 /*--- proto_reg_handoff_h283 -------------------------------------------*/
693 void proto_reg_handoff_h283(void)
695 dissector_add_for_decode_as_with_preference("udp.port", h283_udp_handle);
697 rdc_pdu_handle = find_dissector_add_dependency("rdc", proto_h283);
698 rdc_device_list_handle = find_dissector_add_dependency("rdc.device_list", proto_h283);
699 data_handle = find_dissector("data");