159873d5111c7cd6a695861351c5a70274e34303
[obnox/wireshark/wip.git] / epan / dissectors / packet-h323.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
3 /* packet-h323.c                                                              */
4 /* ../../tools/asn2wrs.py -p h323 -c h323.cnf -s packet-h323-template RAS-PROTOCOL-TUNNEL.asn ROBUSTNESS-DATA.asn */
5
6 /* Input file: packet-h323-template.c */
7
8 #line 1 "packet-h323-template.c"
9 /* packet-h323.c
10  * Routines for H.323 packet dissection
11  * 2007  Tomas Kukosa
12  *
13  * $Id$
14  *
15  * Wireshark - Network traffic analyzer
16  * By Gerald Combs <gerald@wireshark.org>
17  * Copyright 1998 Gerald Combs
18  *
19  * This program is free software; you can redistribute it and/or
20  * modify it under the terms of the GNU General Public License
21  * as published by the Free Software Foundation; either version 2
22  * of the License, or (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program; if not, write to the Free Software
31  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 # include "config.h"
36 #endif
37
38 #include <glib.h>
39 #include <epan/packet.h>
40 #include <epan/oids.h>
41 #include <epan/asn1.h>
42
43 #include <stdio.h>
44 #include <string.h>
45
46 #include "packet-per.h"
47 #include "packet-h225.h"
48 #include "packet-h323.h"
49
50 #define PNAME  "H.323"
51 #define PSNAME "H.323"
52 #define PFNAME "h323"
53
54
55 /* Generic Extensible Framework */
56 gef_ctx_t* gef_ctx_alloc(gef_ctx_t *parent, const gchar *type) {
57   gef_ctx_t *gefx;
58
59   gefx = ep_alloc0(sizeof(gef_ctx_t));
60   gefx->signature = GEF_CTX_SIGNATURE;
61   gefx->parent = parent;
62   gefx->type = type;
63   return gefx;
64 }
65
66 gboolean gef_ctx_check_signature(gef_ctx_t *gefx) {
67   return gefx && (gefx->signature == GEF_CTX_SIGNATURE);
68 }
69
70 gef_ctx_t* gef_ctx_get(void *ptr) {
71   gef_ctx_t *gefx = (gef_ctx_t*)ptr;
72   asn1_ctx_t *actx = (asn1_ctx_t*)ptr;
73
74   if (!asn1_ctx_check_signature(actx)) 
75     actx = NULL;
76
77   if (actx)
78     gefx = actx->private_data;
79
80   if (!gef_ctx_check_signature(gefx)) 
81     gefx = NULL;
82
83   return gefx;
84 }
85
86 void gef_ctx_update_key(gef_ctx_t *gefx) {
87   const gchar *parent_key;
88
89   if (!gefx) return;
90   parent_key = (gefx->parent) ? gefx->parent->key : NULL;
91   gefx->key = ep_strdup_printf(
92     "%s%s"    /* parent prefix */
93     "%s%s%s"  /* type, id */
94     "%s%s"    /* subid */,
95     (parent_key) ? parent_key : "", (parent_key) ? "/" : "",
96     (gefx->type) ? gefx->type : "", (gefx->type && (gefx->id || gefx->subid)) ? "/" : "", (gefx->id) ? gefx->id : "",
97     (gefx->subid) ? "-" : "", (gefx->subid) ? gefx->subid : ""
98   );
99 }
100
101 /* Initialize the protocol and registered fields */
102 int proto_h323 = -1;
103
104 /*--- Included file: packet-h323-hf.c ---*/
105 #line 1 "packet-h323-hf.c"
106 static int hf_h323_RasTunnelledSignallingMessage_PDU = -1;  /* RasTunnelledSignallingMessage */
107 static int hf_h323_RobustnessData_PDU = -1;       /* RobustnessData */
108 static int hf_h323_tunnelledProtocolID = -1;      /* TunnelledProtocol */
109 static int hf_h323_messageContent = -1;           /* T_messageContent */
110 static int hf_h323_messageContent_item = -1;      /* OCTET_STRING */
111 static int hf_h323_tunnellingRequired = -1;       /* NULL */
112 static int hf_h323_nonStandardData = -1;          /* NonStandardParameter */
113 static int hf_h323_versionID = -1;                /* INTEGER_1_256 */
114 static int hf_h323_robustnessData = -1;           /* T_robustnessData */
115 static int hf_h323_rrqData = -1;                  /* Rrq_RD */
116 static int hf_h323_rcfData = -1;                  /* Rcf_RD */
117 static int hf_h323_setupData = -1;                /* Setup_RD */
118 static int hf_h323_connectData = -1;              /* Connect_RD */
119 static int hf_h323_statusData = -1;               /* Status_RD */
120 static int hf_h323_statusInquiryData = -1;        /* StatusInquiry_RD */
121 static int hf_h323_BackupCallSignalAddresses_item = -1;  /* BackupCallSignalAddresses_item */
122 static int hf_h323_tcp = -1;                      /* TransportAddress */
123 static int hf_h323_alternateTransport = -1;       /* AlternateTransportAddresses */
124 static int hf_h323_backupCallSignalAddresses = -1;  /* BackupCallSignalAddresses */
125 static int hf_h323_hasSharedRepository = -1;      /* NULL */
126 static int hf_h323_irrFrequency = -1;             /* INTEGER_1_65535 */
127 static int hf_h323_endpointGuid = -1;             /* GloballyUniqueIdentifier */
128 static int hf_h323_h245Address = -1;              /* TransportAddress */
129 static int hf_h323_fastStart = -1;                /* T_fastStart */
130 static int hf_h323_fastStart_item = -1;           /* OCTET_STRING */
131 static int hf_h323_resetH245 = -1;                /* NULL */
132 static int hf_h323_timeToLive = -1;               /* TimeToLive */
133 static int hf_h323_includeFastStart = -1;         /* NULL */
134
135 /*--- End of included file: packet-h323-hf.c ---*/
136 #line 96 "packet-h323-template.c"
137
138 /* Initialize the subtree pointers */
139
140 /*--- Included file: packet-h323-ett.c ---*/
141 #line 1 "packet-h323-ett.c"
142 static gint ett_h323_RasTunnelledSignallingMessage = -1;
143 static gint ett_h323_T_messageContent = -1;
144 static gint ett_h323_RobustnessData = -1;
145 static gint ett_h323_T_robustnessData = -1;
146 static gint ett_h323_BackupCallSignalAddresses = -1;
147 static gint ett_h323_BackupCallSignalAddresses_item = -1;
148 static gint ett_h323_Rrq_RD = -1;
149 static gint ett_h323_Rcf_RD = -1;
150 static gint ett_h323_Setup_RD = -1;
151 static gint ett_h323_Connect_RD = -1;
152 static gint ett_h323_Status_RD = -1;
153 static gint ett_h323_T_fastStart = -1;
154 static gint ett_h323_StatusInquiry_RD = -1;
155
156 /*--- End of included file: packet-h323-ett.c ---*/
157 #line 99 "packet-h323-template.c"
158
159
160 /*--- Included file: packet-h323-fn.c ---*/
161 #line 1 "packet-h323-fn.c"
162
163
164 static int
165 dissect_h323_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
166   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
167                                        NO_BOUND, NO_BOUND, FALSE, NULL);
168
169   return offset;
170 }
171
172
173 static const per_sequence_t T_messageContent_sequence_of[1] = {
174   { &hf_h323_messageContent_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h323_OCTET_STRING },
175 };
176
177 static int
178 dissect_h323_T_messageContent(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
179   offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
180                                       ett_h323_T_messageContent, T_messageContent_sequence_of);
181
182   return offset;
183 }
184
185
186
187 static int
188 dissect_h323_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
189   offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
190
191   return offset;
192 }
193
194
195 static const per_sequence_t RasTunnelledSignallingMessage_sequence[] = {
196   { &hf_h323_tunnelledProtocolID, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_TunnelledProtocol },
197   { &hf_h323_messageContent , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h323_T_messageContent },
198   { &hf_h323_tunnellingRequired, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h323_NULL },
199   { &hf_h323_nonStandardData, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_NonStandardParameter },
200   { NULL, 0, 0, NULL }
201 };
202
203 static int
204 dissect_h323_RasTunnelledSignallingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
205   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
206                                    ett_h323_RasTunnelledSignallingMessage, RasTunnelledSignallingMessage_sequence);
207
208   return offset;
209 }
210
211
212
213 static int
214 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_) {
215   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
216                                                             1U, 256U, NULL, FALSE);
217
218   return offset;
219 }
220
221
222 static const value_string h323_BackupCallSignalAddresses_item_vals[] = {
223   {   0, "tcp" },
224   {   1, "alternateTransport" },
225   { 0, NULL }
226 };
227
228 static const per_choice_t BackupCallSignalAddresses_item_choice[] = {
229   {   0, &hf_h323_tcp            , ASN1_EXTENSION_ROOT    , dissect_h225_TransportAddress },
230   {   1, &hf_h323_alternateTransport, ASN1_EXTENSION_ROOT    , dissect_h225_AlternateTransportAddresses },
231   { 0, NULL, 0, NULL }
232 };
233
234 static int
235 dissect_h323_BackupCallSignalAddresses_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
236   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
237                                  ett_h323_BackupCallSignalAddresses_item, BackupCallSignalAddresses_item_choice,
238                                  NULL);
239
240   return offset;
241 }
242
243
244 static const per_sequence_t BackupCallSignalAddresses_sequence_of[1] = {
245   { &hf_h323_BackupCallSignalAddresses_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses_item },
246 };
247
248 static int
249 dissect_h323_BackupCallSignalAddresses(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
250   offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
251                                       ett_h323_BackupCallSignalAddresses, BackupCallSignalAddresses_sequence_of);
252
253   return offset;
254 }
255
256
257 static const per_sequence_t Rrq_RD_sequence[] = {
258   { &hf_h323_backupCallSignalAddresses, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses },
259   { &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h323_NULL },
260   { NULL, 0, 0, NULL }
261 };
262
263 static int
264 dissect_h323_Rrq_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
265   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
266                                    ett_h323_Rrq_RD, Rrq_RD_sequence);
267
268   return offset;
269 }
270
271
272
273 static int
274 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_) {
275   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
276                                                             1U, 65535U, NULL, FALSE);
277
278   return offset;
279 }
280
281
282 static const per_sequence_t Rcf_RD_sequence[] = {
283   { &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h323_NULL },
284   { &hf_h323_irrFrequency   , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h323_INTEGER_1_65535 },
285   { NULL, 0, 0, NULL }
286 };
287
288 static int
289 dissect_h323_Rcf_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
290   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
291                                    ett_h323_Rcf_RD, Rcf_RD_sequence);
292
293   return offset;
294 }
295
296
297
298 static int
299 dissect_h323_GloballyUniqueIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
300   offset = dissect_h225_GloballyUniqueID(tvb, offset, actx, tree, hf_index);
301
302   return offset;
303 }
304
305
306 static const per_sequence_t Setup_RD_sequence[] = {
307   { &hf_h323_backupCallSignalAddresses, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses },
308   { &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h323_NULL },
309   { &hf_h323_endpointGuid   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h323_GloballyUniqueIdentifier },
310   { NULL, 0, 0, NULL }
311 };
312
313 static int
314 dissect_h323_Setup_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
315   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
316                                    ett_h323_Setup_RD, Setup_RD_sequence);
317
318   return offset;
319 }
320
321
322 static const per_sequence_t Connect_RD_sequence[] = {
323   { &hf_h323_backupCallSignalAddresses, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses },
324   { &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h323_NULL },
325   { &hf_h323_endpointGuid   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h323_GloballyUniqueIdentifier },
326   { NULL, 0, 0, NULL }
327 };
328
329 static int
330 dissect_h323_Connect_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
331   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
332                                    ett_h323_Connect_RD, Connect_RD_sequence);
333
334   return offset;
335 }
336
337
338 static const per_sequence_t T_fastStart_sequence_of[1] = {
339   { &hf_h323_fastStart_item , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h323_OCTET_STRING },
340 };
341
342 static int
343 dissect_h323_T_fastStart(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
344   offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
345                                       ett_h323_T_fastStart, T_fastStart_sequence_of);
346
347   return offset;
348 }
349
350
351 static const per_sequence_t Status_RD_sequence[] = {
352   { &hf_h323_h245Address    , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_TransportAddress },
353   { &hf_h323_fastStart      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h323_T_fastStart },
354   { &hf_h323_resetH245      , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h323_NULL },
355   { NULL, 0, 0, NULL }
356 };
357
358 static int
359 dissect_h323_Status_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
360   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
361                                    ett_h323_Status_RD, Status_RD_sequence);
362
363   return offset;
364 }
365
366
367 static const per_sequence_t StatusInquiry_RD_sequence[] = {
368   { &hf_h323_h245Address    , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_TransportAddress },
369   { &hf_h323_timeToLive     , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_TimeToLive },
370   { &hf_h323_includeFastStart, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h323_NULL },
371   { NULL, 0, 0, NULL }
372 };
373
374 static int
375 dissect_h323_StatusInquiry_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
376   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
377                                    ett_h323_StatusInquiry_RD, StatusInquiry_RD_sequence);
378
379   return offset;
380 }
381
382
383 static const value_string h323_T_robustnessData_vals[] = {
384   {   0, "rrqData" },
385   {   1, "rcfData" },
386   {   2, "setupData" },
387   {   3, "connectData" },
388   {   4, "statusData" },
389   {   5, "statusInquiryData" },
390   { 0, NULL }
391 };
392
393 static const per_choice_t T_robustnessData_choice[] = {
394   {   0, &hf_h323_rrqData        , ASN1_EXTENSION_ROOT    , dissect_h323_Rrq_RD },
395   {   1, &hf_h323_rcfData        , ASN1_EXTENSION_ROOT    , dissect_h323_Rcf_RD },
396   {   2, &hf_h323_setupData      , ASN1_EXTENSION_ROOT    , dissect_h323_Setup_RD },
397   {   3, &hf_h323_connectData    , ASN1_EXTENSION_ROOT    , dissect_h323_Connect_RD },
398   {   4, &hf_h323_statusData     , ASN1_EXTENSION_ROOT    , dissect_h323_Status_RD },
399   {   5, &hf_h323_statusInquiryData, ASN1_EXTENSION_ROOT    , dissect_h323_StatusInquiry_RD },
400   { 0, NULL, 0, NULL }
401 };
402
403 static int
404 dissect_h323_T_robustnessData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
405   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
406                                  ett_h323_T_robustnessData, T_robustnessData_choice,
407                                  NULL);
408
409   return offset;
410 }
411
412
413 static const per_sequence_t RobustnessData_sequence[] = {
414   { &hf_h323_versionID      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h323_INTEGER_1_256 },
415   { &hf_h323_robustnessData , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h323_T_robustnessData },
416   { NULL, 0, 0, NULL }
417 };
418
419 static int
420 dissect_h323_RobustnessData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
421   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
422                                    ett_h323_RobustnessData, RobustnessData_sequence);
423
424   return offset;
425 }
426
427 /*--- PDUs ---*/
428
429 static int dissect_RasTunnelledSignallingMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
430   int offset = 0;
431   asn1_ctx_t asn1_ctx;
432   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
433   offset = dissect_h323_RasTunnelledSignallingMessage(tvb, offset, &asn1_ctx, tree, hf_h323_RasTunnelledSignallingMessage_PDU);
434   offset += 7; offset >>= 3;
435   return offset;
436 }
437 static int dissect_RobustnessData_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
438   int offset = 0;
439   asn1_ctx_t asn1_ctx;
440   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
441   offset = dissect_h323_RobustnessData(tvb, offset, &asn1_ctx, tree, hf_h323_RobustnessData_PDU);
442   offset += 7; offset >>= 3;
443   return offset;
444 }
445
446
447 /*--- End of included file: packet-h323-fn.c ---*/
448 #line 101 "packet-h323-template.c"
449
450 /*--- proto_register_h323 ----------------------------------------------*/
451 void proto_register_h323(void) {
452
453   /* List of fields */
454   static hf_register_info hf[] = {
455
456 /*--- Included file: packet-h323-hfarr.c ---*/
457 #line 1 "packet-h323-hfarr.c"
458     { &hf_h323_RasTunnelledSignallingMessage_PDU,
459       { "RasTunnelledSignallingMessage", "h323.RasTunnelledSignallingMessage",
460         FT_NONE, BASE_NONE, NULL, 0,
461         "h323.RasTunnelledSignallingMessage", HFILL }},
462     { &hf_h323_RobustnessData_PDU,
463       { "RobustnessData", "h323.RobustnessData",
464         FT_NONE, BASE_NONE, NULL, 0,
465         "h323.RobustnessData", HFILL }},
466     { &hf_h323_tunnelledProtocolID,
467       { "tunnelledProtocolID", "h323.tunnelledProtocolID",
468         FT_NONE, BASE_NONE, NULL, 0,
469         "h225.TunnelledProtocol", HFILL }},
470     { &hf_h323_messageContent,
471       { "messageContent", "h323.messageContent",
472         FT_UINT32, BASE_DEC, NULL, 0,
473         "h323.T_messageContent", HFILL }},
474     { &hf_h323_messageContent_item,
475       { "messageContent", "h323.messageContent_item",
476         FT_BYTES, BASE_HEX, NULL, 0,
477         "h323.OCTET_STRING", HFILL }},
478     { &hf_h323_tunnellingRequired,
479       { "tunnellingRequired", "h323.tunnellingRequired",
480         FT_NONE, BASE_NONE, NULL, 0,
481         "h323.NULL", HFILL }},
482     { &hf_h323_nonStandardData,
483       { "nonStandardData", "h323.nonStandardData",
484         FT_NONE, BASE_NONE, NULL, 0,
485         "h225.NonStandardParameter", HFILL }},
486     { &hf_h323_versionID,
487       { "versionID", "h323.versionID",
488         FT_UINT32, BASE_DEC, NULL, 0,
489         "h323.INTEGER_1_256", HFILL }},
490     { &hf_h323_robustnessData,
491       { "robustnessData", "h323.robustnessData",
492         FT_UINT32, BASE_DEC, VALS(h323_T_robustnessData_vals), 0,
493         "h323.T_robustnessData", HFILL }},
494     { &hf_h323_rrqData,
495       { "rrqData", "h323.rrqData",
496         FT_NONE, BASE_NONE, NULL, 0,
497         "h323.Rrq_RD", HFILL }},
498     { &hf_h323_rcfData,
499       { "rcfData", "h323.rcfData",
500         FT_NONE, BASE_NONE, NULL, 0,
501         "h323.Rcf_RD", HFILL }},
502     { &hf_h323_setupData,
503       { "setupData", "h323.setupData",
504         FT_NONE, BASE_NONE, NULL, 0,
505         "h323.Setup_RD", HFILL }},
506     { &hf_h323_connectData,
507       { "connectData", "h323.connectData",
508         FT_NONE, BASE_NONE, NULL, 0,
509         "h323.Connect_RD", HFILL }},
510     { &hf_h323_statusData,
511       { "statusData", "h323.statusData",
512         FT_NONE, BASE_NONE, NULL, 0,
513         "h323.Status_RD", HFILL }},
514     { &hf_h323_statusInquiryData,
515       { "statusInquiryData", "h323.statusInquiryData",
516         FT_NONE, BASE_NONE, NULL, 0,
517         "h323.StatusInquiry_RD", HFILL }},
518     { &hf_h323_BackupCallSignalAddresses_item,
519       { "BackupCallSignalAddresses", "h323.BackupCallSignalAddresses_item",
520         FT_UINT32, BASE_DEC, VALS(h323_BackupCallSignalAddresses_item_vals), 0,
521         "h323.BackupCallSignalAddresses_item", HFILL }},
522     { &hf_h323_tcp,
523       { "tcp", "h323.tcp",
524         FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
525         "h225.TransportAddress", HFILL }},
526     { &hf_h323_alternateTransport,
527       { "alternateTransport", "h323.alternateTransport",
528         FT_NONE, BASE_NONE, NULL, 0,
529         "h225.AlternateTransportAddresses", HFILL }},
530     { &hf_h323_backupCallSignalAddresses,
531       { "backupCallSignalAddresses", "h323.backupCallSignalAddresses",
532         FT_UINT32, BASE_DEC, NULL, 0,
533         "h323.BackupCallSignalAddresses", HFILL }},
534     { &hf_h323_hasSharedRepository,
535       { "hasSharedRepository", "h323.hasSharedRepository",
536         FT_NONE, BASE_NONE, NULL, 0,
537         "h323.NULL", HFILL }},
538     { &hf_h323_irrFrequency,
539       { "irrFrequency", "h323.irrFrequency",
540         FT_UINT32, BASE_DEC, NULL, 0,
541         "h323.INTEGER_1_65535", HFILL }},
542     { &hf_h323_endpointGuid,
543       { "endpointGuid", "h323.endpointGuid",
544         FT_GUID, BASE_NONE, NULL, 0,
545         "h323.GloballyUniqueIdentifier", HFILL }},
546     { &hf_h323_h245Address,
547       { "h245Address", "h323.h245Address",
548         FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
549         "h225.TransportAddress", HFILL }},
550     { &hf_h323_fastStart,
551       { "fastStart", "h323.fastStart",
552         FT_UINT32, BASE_DEC, NULL, 0,
553         "h323.T_fastStart", HFILL }},
554     { &hf_h323_fastStart_item,
555       { "fastStart", "h323.fastStart_item",
556         FT_BYTES, BASE_HEX, NULL, 0,
557         "h323.OCTET_STRING", HFILL }},
558     { &hf_h323_resetH245,
559       { "resetH245", "h323.resetH245",
560         FT_NONE, BASE_NONE, NULL, 0,
561         "h323.NULL", HFILL }},
562     { &hf_h323_timeToLive,
563       { "timeToLive", "h323.timeToLive",
564         FT_UINT32, BASE_DEC, NULL, 0,
565         "h225.TimeToLive", HFILL }},
566     { &hf_h323_includeFastStart,
567       { "includeFastStart", "h323.includeFastStart",
568         FT_NONE, BASE_NONE, NULL, 0,
569         "h323.NULL", HFILL }},
570
571 /*--- End of included file: packet-h323-hfarr.c ---*/
572 #line 108 "packet-h323-template.c"
573   };
574
575   /* List of subtrees */
576   static gint *ett[] = {
577
578 /*--- Included file: packet-h323-ettarr.c ---*/
579 #line 1 "packet-h323-ettarr.c"
580     &ett_h323_RasTunnelledSignallingMessage,
581     &ett_h323_T_messageContent,
582     &ett_h323_RobustnessData,
583     &ett_h323_T_robustnessData,
584     &ett_h323_BackupCallSignalAddresses,
585     &ett_h323_BackupCallSignalAddresses_item,
586     &ett_h323_Rrq_RD,
587     &ett_h323_Rcf_RD,
588     &ett_h323_Setup_RD,
589     &ett_h323_Connect_RD,
590     &ett_h323_Status_RD,
591     &ett_h323_T_fastStart,
592     &ett_h323_StatusInquiry_RD,
593
594 /*--- End of included file: packet-h323-ettarr.c ---*/
595 #line 113 "packet-h323-template.c"
596   };
597
598   /* Register protocol */
599   proto_h323 = proto_register_protocol(PNAME, PSNAME, PFNAME);
600
601   /* Register fields and subtrees */
602   proto_register_field_array(proto_h323, hf, array_length(hf));
603   proto_register_subtree_array(ett, array_length(ett));
604
605 }
606
607
608 /*--- proto_reg_handoff_h323 -------------------------------------------*/
609 void proto_reg_handoff_h323(void) 
610 {
611   dissector_handle_t q931_handle; 
612
613   q931_handle = find_dissector("q931");
614
615   /* H.323, Annex M1, Tunnelling of signalling protocols (QSIG) in H.323 */
616   dissector_add_string("h225.tp", "1.3.12.9", q931_handle);
617
618   /* H.323, Annex M4, Tunnelling of narrow-band signalling syntax (NSS) for H.323 */
619   dissector_add_string("h225.gef.content", "GenericData/1000/1", 
620                        new_create_dissector_handle(dissect_RasTunnelledSignallingMessage_PDU, proto_h323));
621
622   /* H.323, Annex R, Robustness methods for H.323 entities */
623   dissector_add_string("h225.gef.content", "GenericData/1/1", 
624                        new_create_dissector_handle(dissect_RobustnessData_PDU, proto_h323));
625 }
626