Move 3 ASN1 dissectors to 'clean' group; move 1 PIDL dissector to 'dirty' group.
[metze/wireshark/wip.git] / epan / dissectors / packet-h248_q1950.c
1 /*
2  *  packet-h248_q1950.c
3  *  Q.1950 annex A
4  *
5  *  (c) 2006, Anders Broman <anders.broman@ericsson.com>
6  *
7  * $Id$
8  *
9  * Wireshark - Network traffic analyzer
10  * By Gerald Combs <gerald@wireshark.org>
11  * Copyright 1998 Gerald Combs
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26  *
27  * Ref ITU-T Rec. Q.1950 (12/2002)
28  */
29
30 #include "config.h"
31
32 #include "packet-h248.h"
33 #include "packet-isup.h"
34
35 #define PNAME  "H.248 Q.1950 Annex A"
36 #define PSNAME "H248Q1950"
37 #define PFNAME "h248q1950"
38
39 static int proto_q1950 = -1;
40 static gboolean implicit = FALSE;
41
42 /* A.3 Bearer characteristics package */
43 static int hf_h248_pkg_BCP = -1;
44 static int hf_h248_pkg_BCP_BNCChar = -1;
45
46 static gint ett_h248_pkg_BCP = -1;
47
48 static const value_string h248_pkg_BCP_parameters[] _U_ = {
49         {   0x0001, "BNCChar (BNC Characteristics)" },
50         {0,     NULL}
51 };
52
53 static const value_string h248_pkg_BCP_props_vals[] = {
54         {0, "Bearer Characteristics Q.1950 Annex A (bcp)" },
55         {1, "BNC Characteristics (BNCChar)"},
56         {0,NULL}
57 };
58
59 /* Properties */
60 h248_pkg_param_t h248_pkg_BCP_props[] = {
61         { 0x0001, &hf_h248_pkg_BCP_BNCChar, h248_param_ber_integer, &implicit },
62         { 0, NULL, NULL, NULL}
63 };
64
65 /* Packet defenitions */
66 static h248_package_t h248_pkg_BCP = {
67         0x001e,
68         &hf_h248_pkg_BCP,
69         &ett_h248_pkg_BCP,
70         h248_pkg_BCP_props_vals,
71         NULL,
72         NULL,
73         NULL,
74         h248_pkg_BCP_props,                     /* Properties */
75         NULL,                                           /* signals */
76         NULL,                                           /* events */
77         NULL                                            /* statistics */
78 };
79
80 /* A.4 Bearer Network connection cut-through package */
81 static int hf_h248_pkg_BNCCT = -1;
82
83 static int hf_h248_pkg_BNCCT_prop = -1;
84
85 static gint ett_h248_pkg_BNCCT = -1;
86
87 static const value_string h248_pkg_BNCCT_parameters[] _U_ = {
88         {   0x0001, "BNC Cut Through Capability" },
89         { 0, NULL }
90 };
91
92 static const value_string h248_pkg_BNCCT_props_vals[] = {
93         {0,"Bearer Network Connection Cut Q.1950 Annex A" },
94         {1,"BNCCT"},
95         {0,NULL}
96 };
97
98 static const value_string h248_pkg_BNCCT_prop_vals[]  = {
99         {1,"Early"},
100         {2,"Late"},
101         {0,NULL}
102 };
103
104 /* Properties */
105 static const h248_pkg_param_t h248_pkg_BNCCT_props[] = {
106         { 0x0001, &hf_h248_pkg_BNCCT_prop, h248_param_ber_integer, &implicit },
107         { 0, NULL, NULL, NULL}
108 };
109
110 /* Packet defenitions */
111 static h248_package_t h248_pkg_BNCCT = {
112         0x001f,
113         &hf_h248_pkg_BNCCT,
114         &ett_h248_pkg_BNCCT,
115         h248_pkg_BNCCT_props_vals,
116         NULL,
117         NULL,
118         NULL,
119         h248_pkg_BNCCT_props,                   /* Properties */
120         NULL,                                           /* signals */
121         NULL,                                           /* events */
122         NULL                                            /* statistics */
123 };
124
125 /* A.5 Bearer Reuse Idle Package  */
126 static int hf_h248_pkg_RI = -1;
127
128 static int hf_h248_pkg_RII= -1;
129
130 static gint ett_h248_pkg_RI= -1;
131
132 static const value_string h248_pkg_RI_parameters[] = {
133         { 0x0000, "Reuse Idle Q.1950 Annex A" },
134         { 0x0001, "Reuse Idle Indication" },
135         { 0, NULL }
136 };
137
138 static const value_string h248_pkg_RII_vals[]  = {
139         {0,"Not_Reuse_Idle"},
140         {1,"ReUse_Idle"},
141         {0,NULL}
142 };
143
144 /* Properties */
145 h248_pkg_param_t h248_pkg_RI_props[] = {
146         { 0x0001, &hf_h248_pkg_RII, h248_param_ber_integer, &implicit },
147         { 0, NULL, NULL, NULL}
148 };
149
150 /* Packet defenitions */
151 static h248_package_t h248_pkg_RI = {
152         0x0020,
153         &hf_h248_pkg_RI,
154         &ett_h248_pkg_RI,
155         h248_pkg_RI_parameters,
156         NULL,
157         NULL,
158         NULL,
159         h248_pkg_RI_props,                      /* Properties */
160         NULL,                                           /* signals */
161         NULL,                                           /* events */
162         NULL                                            /* statistics */
163 };
164
165
166 /* A.5 Bearer Reuse Idle Package  */
167
168 /* A.6 Generic bearer connection package
169         Package Name: GB
170         Package ID: 0x0021
171  */
172
173 static int hf_h248_pkg_GB= -1;
174 static int hf_h248_pkg_GB_BNCChange= -1;
175 static int hf_h248_pkg_GB_BNCChange_type= -1;
176 static int hf_h248_pkg_GB_EstBNC= -1;
177 static int hf_h248_pkg_GB_ModBNC= -1;
178 static int hf_h248_pkg_GB_RelBNC = -1;
179 static int hf_h248_pkg_GB_RelBNC_Generalcause = -1;
180 static int hf_h248_pkg_GB_RelBNC_Failurecause = -1;
181 static int hf_h248_pkg_GB_RelBNC_Reset = -1;
182
183 static gint ett_h248_pkg_GB= -1;
184 static gint ett_h248_pkg_GB_EstBNC= -1;
185 static gint ett_h248_pkg_GB_ModBNC= -1;
186 static gint ett_h248_pkg_GB_RelBNC= -1;
187 static gint ett_h248_pkg_GB_BNCChange= -1;
188
189 static const value_string h248_pkg_GB_events_vals[] = {
190         { 0x0001, "BNCChange" },
191         { 0, NULL }
192 };
193
194
195 static const value_string h248_pkg_GB_BNCChange_type_vals[] = {
196         {0x01, "Bearer Established"},
197         {0x02,"Bearer Modified"},
198         {0x03,"Bearer Cut through"},
199         {0x04,"Bearer Modification Failure"},
200         {0,NULL}
201 };
202
203 static const value_string h248_pkg_GB_BNCChange_params_vals[] = {
204         {0x01, "Type"},
205         {0,NULL}
206 };
207
208 static const h248_pkg_param_t h248_pkg_GB_BNCChange_pars[] = {
209         { 0x0001, &hf_h248_pkg_GB_BNCChange_type, h248_param_ber_integer, &implicit },
210         { 0, NULL, NULL, NULL}
211 };
212
213 static const h248_pkg_evt_t h248_pkg_GB_events[] = {
214         { 0x0001, &hf_h248_pkg_GB_BNCChange, &ett_h248_pkg_GB_BNCChange, h248_pkg_GB_BNCChange_pars, h248_pkg_GB_BNCChange_params_vals},
215         { 0, NULL, NULL, NULL, NULL}
216 };
217
218 static const value_string h248_pkg_GB_signals_vals[] = {
219         {0x01, "Establish BNC"},
220         {0x02,"Modify BNC"},
221         {0,NULL}
222 };
223
224 static const value_string h248_pkg_GB_RelBNC_vals[] = {
225         {0x01, "Generalcause"},
226         {0x02,"Failurecause"},
227         {0x03,"Reset"},
228         {0,NULL}
229 };
230
231 static const value_string h248_pkg_GB_RelBNC_Generalcause_vals[] = {
232         {0x01, "Normal Release"},
233         {0x02,"Unavailable Resources"},
234         {0x03,"Failure, Temporary"},
235         {0x04,"Failure, Permanent"},
236         {0x05,"Interworking Error"},
237         {0x06,"Unsupported"},
238         {0,NULL}
239 };
240
241 static const h248_pkg_param_t h248_pkg_GB_RelBNC_pars[] = {
242         { 0x0001, &hf_h248_pkg_GB_RelBNC_Generalcause, h248_param_ber_integer, &implicit },
243         { 0x0002, &hf_h248_pkg_GB_RelBNC_Failurecause, h248_param_ber_octetstring, &implicit },
244         { 0x0003, &hf_h248_pkg_GB_RelBNC_Reset, h248_param_ber_boolean, &implicit },
245         { 0, NULL, NULL, NULL}
246 };
247
248
249 static const h248_pkg_sig_t h248_pkg_GB_signals[] = {
250         { 0x0001,&hf_h248_pkg_GB_EstBNC,&ett_h248_pkg_GB_EstBNC, NULL, NULL},
251         { 0x0002,&hf_h248_pkg_GB_ModBNC,&ett_h248_pkg_GB_ModBNC, NULL, NULL},
252         { 0x0003,&hf_h248_pkg_GB_RelBNC,&ett_h248_pkg_GB_RelBNC, h248_pkg_GB_RelBNC_pars, h248_pkg_GB_RelBNC_vals},
253         { 0, NULL, NULL, NULL, NULL}
254 };
255
256 static const value_string h248_pkg_GB_props_vals[] = {
257         { 0x0000, "Generic Bearer Connection Q.1950 Annex A (gb)" },
258         { 0, NULL }
259 };
260
261 static h248_package_t h248_pkg_GB = {
262         0x0021,
263         &hf_h248_pkg_GB,
264         &ett_h248_pkg_GB,
265         h248_pkg_GB_props_vals,
266         h248_pkg_GB_signals_vals,
267         h248_pkg_GB_events_vals,
268         NULL,
269         NULL,                                           /* Properties */
270         h248_pkg_GB_signals,                    /* signals */
271         h248_pkg_GB_events,                     /* events */
272         NULL                                            /* statistics */
273 };
274
275
276 /* A.7 Bearer control tunnelling package */
277 static dissector_handle_t bctp_dissector = NULL;
278
279 static int hf_h248_pkg_bt = -1;
280 static int hf_h248_pkg_bt_tind = -1;
281 static int hf_h248_pkg_bt_tunopt = -1;
282 static int hf_h248_pkg_bt_bit = -1;
283
284 static gint ett_h248_pkg_bt = -1;
285 static gint ett_h248_pkg_bt_tind = -1;
286 static gint ett_h248_pkg_bt_bit= -1;
287
288 static void dissect_bt_tunneled_proto(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* i _U_, void* d _U_) {
289         tvbuff_t* bctp_tvb = NULL;
290         gint8 class;
291         gboolean pc;
292         gint32 tag;
293         asn1_ctx_t asn1_ctx;
294
295         asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
296
297         get_ber_identifier(tvb, 0, &class, &pc, &tag);
298
299         /* XXX: is this enough to guess it? */
300         if (tag==BER_UNI_TAG_OCTETSTRING) {
301                 dissect_ber_octet_string(FALSE, &asn1_ctx, tree, tvb, 0, hfid, &bctp_tvb);
302
303                 if (bctp_tvb) {
304                         call_dissector(bctp_dissector,bctp_tvb,pinfo,tree);
305                 }
306         } else {
307                 proto_tree_add_item(tree,hfid,tvb,0,-1,ENC_NA);
308         }
309
310 }
311
312
313 /* Properties */
314 static const value_string h248_pkg_bt_props_vals[] = {
315         { 0, "Bearer Control Tunnelling Q.1950 Annex A" },
316         { 1, "Tunnelling Options"},
317         { 0, NULL}
318 };
319
320 static const  value_string h248_pkg_bt_tunopt_vals[]  = {
321         { 1, "1 (In the same message as the command response to the command which generated the bearer control tunnel)"},
322         { 2, "2 (Tunnel message at any time)"},
323         { 3, "NO"},
324         { 0, NULL}
325 };
326
327 static const h248_pkg_param_t h248_pkg_bt_props[] = {
328         { 0x0001, &hf_h248_pkg_bt_tunopt, h248_param_ber_integer, &implicit },
329         { 0, NULL, NULL, NULL}
330 };
331
332 /* Events */
333 static const value_string h248_pkg_bt_evt_vals[] = {
334         {1,"Tunnel indication"},
335         {0,NULL}
336 };
337
338 static const value_string h248_pkg_bt_tind_vals[] = {
339         {1,"Tunnel Indication"},
340         {0,NULL}
341 };
342
343 static const h248_pkg_param_t h248_pkg_bt_bit_params[] = {
344         { 0x0001, &hf_h248_pkg_bt_bit, dissect_bt_tunneled_proto, &implicit },
345         { 0, NULL, NULL, NULL}
346 };
347
348 static const value_string h248_pkg_bt_sigs_vals[] = {
349         {1,"Bearer Information Tunnel"},
350         {0,NULL}
351 };
352
353 static const h248_pkg_evt_t h248_pkg_bt_events[] = {
354         { 0x0001, &hf_h248_pkg_bt_tind, &ett_h248_pkg_bt_tind, h248_pkg_bt_bit_params, h248_pkg_bt_tind_vals},
355         { 0, NULL, NULL, NULL, NULL}
356 };
357
358 static const h248_pkg_sig_t h248_pkg_bt_signals[] = {
359         { 0x0001,&hf_h248_pkg_bt_bit,&ett_h248_pkg_bt_bit, h248_pkg_bt_bit_params, h248_pkg_bt_tind_vals},
360         { 0, NULL, NULL, NULL, NULL}
361 };
362
363 /* Packet defenitions */
364 static h248_package_t h248_pkg_bct = {
365         0x0022,
366         &hf_h248_pkg_bt,
367         &ett_h248_pkg_bt,
368         h248_pkg_bt_props_vals,
369         h248_pkg_bt_sigs_vals,
370         h248_pkg_bt_evt_vals,
371         NULL,
372         h248_pkg_bt_props,                      /* Properties */
373         h248_pkg_bt_signals,            /* signals */
374         h248_pkg_bt_events,                     /* events */
375         NULL                                            /* statistics */
376 };
377
378 /* A.8 Basic call progress tones generator with directionality */
379 static int hf_h248_pkg_bcg = -1;
380 static int hf_h248_pkg_bcg_sig_bdt_par_btd = -1;
381 static int hf_h248_pkg_bcg_sig_bdt = -1;
382 static int hf_h248_pkg_bcg_sig_brt = -1;
383 static int hf_h248_pkg_bcg_sig_bbt = -1;
384 static int hf_h248_pkg_bcg_sig_bct = -1;
385 static int hf_h248_pkg_bcg_sig_bsit = -1;
386 static int hf_h248_pkg_bcg_sig_bwt = -1;
387 static int hf_h248_pkg_bcg_sig_bpt = -1;
388 static int hf_h248_pkg_bcg_sig_bcw = -1;
389 static int hf_h248_pkg_bcg_sig_bcr = -1;
390 static int hf_h248_pkg_bcg_sig_bpy = -1;
391
392 static gint ett_h248_pkg_bcg = -1;
393 static gint ett_h248_pkg_bcg_sig_bdt = -1;
394
395 static const value_string h248_pkg_bcg_sig_bdt_par_btd_vals[] = {
396         {   0x0001, "ext (External)" },
397         {   0x0002, "int (Internal)" },
398         {   0x0003, "both (Both)" },
399         {0,     NULL},
400 };
401
402 static h248_pkg_param_t  h248_pkg_h248_pkg_bcg_sig_bdt_params[] = {
403         { 0x0001, &hf_h248_pkg_bcg_sig_bdt_par_btd, h248_param_ber_integer, &implicit },
404         { 0, NULL, NULL, NULL}
405 };
406
407 static const value_string h248_pkg_bcg_signals_vals[] = {
408         { 0x0041, "Dial Tone (bdt)" },
409         { 0x0042, "Ringing Tone (brt)" },
410         { 0x0043, "Busy Tone (bbt)" },
411         { 0x0044, "Congestion Tone (bct)" },
412         { 0x0045, "Warning Tone (bwt)" },
413         { 0x0046, "Payphone Recognition Tone (bpt)" },
414         { 0x0047, "Call Waiting Tone (bcw)" },
415         { 0x0048, "Caller Waiting Tone (bcr)" },
416         { 0x0049, "Pay Tone (bpy)" },
417         { 0, NULL }
418 };
419         
420 static h248_pkg_sig_t h248_pkg_bcg_signals[] = {
421         /* All the tones have the same parameters */
422         { 0x0040, &hf_h248_pkg_bcg_sig_bdt, &ett_h248_pkg_bcg_sig_bdt, h248_pkg_h248_pkg_bcg_sig_bdt_params, NULL },
423         { 0x0041, &hf_h248_pkg_bcg_sig_brt, &ett_h248_pkg_bcg_sig_bdt, h248_pkg_h248_pkg_bcg_sig_bdt_params, NULL },
424         { 0x0042, &hf_h248_pkg_bcg_sig_bbt, &ett_h248_pkg_bcg_sig_bdt, h248_pkg_h248_pkg_bcg_sig_bdt_params, NULL },
425         { 0x0043, &hf_h248_pkg_bcg_sig_bct, &ett_h248_pkg_bcg_sig_bdt, h248_pkg_h248_pkg_bcg_sig_bdt_params, NULL },
426         { 0x0044, &hf_h248_pkg_bcg_sig_bsit, &ett_h248_pkg_bcg_sig_bdt, h248_pkg_h248_pkg_bcg_sig_bdt_params, NULL },
427         { 0x0045, &hf_h248_pkg_bcg_sig_bwt, &ett_h248_pkg_bcg_sig_bdt, h248_pkg_h248_pkg_bcg_sig_bdt_params, NULL},
428         { 0x0046, &hf_h248_pkg_bcg_sig_bpt, &ett_h248_pkg_bcg_sig_bdt, h248_pkg_h248_pkg_bcg_sig_bdt_params, NULL },
429         { 0x0047, &hf_h248_pkg_bcg_sig_bcw, &ett_h248_pkg_bcg_sig_bdt, h248_pkg_h248_pkg_bcg_sig_bdt_params, NULL },
430         { 0x0048, &hf_h248_pkg_bcg_sig_bcr, &ett_h248_pkg_bcg_sig_bdt, h248_pkg_h248_pkg_bcg_sig_bdt_params, NULL },
431         { 0x0049, &hf_h248_pkg_bcg_sig_bpy, &ett_h248_pkg_bcg_sig_bdt, h248_pkg_h248_pkg_bcg_sig_bdt_params, NULL },
432         { 0, NULL, NULL, NULL,NULL}
433 };
434
435 static const value_string h248_pkg_bcg_props_vals[] = {
436         { 0, "Basic Call Progress Tones Q.1950 Annex A" },
437         { 0, NULL }
438 };
439
440 /* Packet defenitions */
441 static h248_package_t h248_pkg_bcg = {
442         0x0023,
443         &hf_h248_pkg_bcg,
444         &ett_h248_pkg_bcg,
445         h248_pkg_bcg_props_vals,
446         h248_pkg_bcg_signals_vals,
447         NULL,
448         NULL,
449         NULL,                                           /* Properties */
450         h248_pkg_bcg_signals,                   /* signals */
451         NULL,                                           /* events */
452         NULL                                            /* statistics */
453 };
454
455
456 void proto_reg_handoff_q1950(void) {
457         bctp_dissector = find_dissector("bctp");
458
459 }
460
461 /* Register dissector */
462 void proto_register_q1950(void) {
463         static hf_register_info hf[] = {
464                 /* A.3 Bearer characteristics package */
465                 { &hf_h248_pkg_BCP,
466                         { "BCP (Bearer characteristics package)", "h248.pkg.BCP",
467                         FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
468                 },
469                 { &hf_h248_pkg_BCP_BNCChar,
470                         { "BNCChar (BNC Characteristics)", "h248.pkg.bcp.bncchar",
471                         FT_UINT32, BASE_HEX|BASE_EXT_STRING, &bearer_network_connection_characteristics_vals_ext, 0, "BNC Characteristics", HFILL }
472                 },
473
474                 /* A.4 Bearer Network connection cut-through package */
475                 { &hf_h248_pkg_BNCCT,
476                         { "BNCCT (Bearer network connection cut-through package)", "h248.pkg.BNCCT",
477                         FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
478                 },
479                 { &hf_h248_pkg_BNCCT_prop,
480                         { "Bearer network connection cut-through capability", "h248.pkg.bcp.bncct",
481                         FT_UINT32, BASE_HEX, VALS(h248_pkg_BNCCT_prop_vals), 0, "This property allows the MGC to ask the MG when the cut through of a bearer will occur, early or late.", HFILL }
482                 },
483
484                 { &hf_h248_pkg_GB,
485                         { "GB (Generic bearer connection)", "h248.pkg.GB",
486                         FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
487                 },
488                 { &hf_h248_pkg_GB_BNCChange,
489                         { "BNCChange", "h248.pkg.GB.BNCChang",
490                         FT_BYTES, BASE_NONE, NULL, 0, "This event occurs whenever a change to a Bearer Network connection occurs", HFILL }
491                 },
492                 { &hf_h248_pkg_GB_BNCChange_type,
493                         { "Type", "h248.pkg.GB.BNCChang.Type",
494                         FT_UINT32, BASE_HEX, VALS(h248_pkg_GB_BNCChange_type_vals), 0, NULL, HFILL }
495                 },
496                 { &hf_h248_pkg_GB_EstBNC,
497                         { "Type", "h248.pkg.GB.BNCChang.EstBNC",
498                         FT_BYTES, BASE_NONE, NULL, 0, "This signal triggers the bearer control function to send bearer establishment signalling", HFILL }
499                 },
500                 { &hf_h248_pkg_GB_ModBNC,
501                         { "Type", "h248.pkg.GB.BNCChang.Type",
502                         FT_BYTES, BASE_NONE, NULL, 0, "This signal triggers the bearer control function to send bearer modification", HFILL }
503                 },
504                 { &hf_h248_pkg_GB_RelBNC,
505                         { "RelBNC", "h248.pkg.GB.BNCChang.RelBNC",
506                         FT_BYTES, BASE_NONE, NULL, 0, "This signal triggers the bearer control function to send bearer release", HFILL }
507                 },
508                 { &hf_h248_pkg_GB_RelBNC_Generalcause,
509                         { "Generalcause", "h248.pkg.GB.BNCChang.RelBNC.Generalcause",
510                         FT_UINT32, BASE_HEX, VALS(h248_pkg_GB_RelBNC_Generalcause_vals), 0, "This indicates the general reason for the Release", HFILL }
511                 },
512                 { &hf_h248_pkg_GB_RelBNC_Failurecause,
513                         { "Failurecause", "h248.pkg.GB.BNCChang.RelBNC.Failurecause",
514                         FT_BYTES, BASE_NONE, NULL, 0, "The Release Cause is the value generated by the Released equipment", HFILL }
515                 },
516                 { &hf_h248_pkg_GB_RelBNC_Reset,
517                         { "RelBNC", "h248.pkg.GB.BNCChang.RelBNC",
518                         FT_BOOLEAN, BASE_NONE, NULL, 0x0, "This signal triggers the bearer control function to send bearer release", HFILL }
519                 },
520
521                 /* A.5 Bearer Network connection cut-through package */
522                 { &hf_h248_pkg_RI,
523                         { "RI (Reuse idle package)", "h248.pkg.RI",
524                         FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
525                 },
526                 { &hf_h248_pkg_RII,
527                         { "Reuse Idle Indication", "h248.pkg.bcp.rii",
528                         FT_UINT32, BASE_HEX, VALS(h248_pkg_RII_vals), 0, "This property indicates that the provided bearer network connection relates to an Idle Bearer.", HFILL }
529                 },
530
531                 /* A.7 Bearer control tunnelling package */
532                 { &hf_h248_pkg_bt,
533                         { "BT (Bearer control Tunneling)", "h248.pkg.BT",
534                         FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
535                 },
536                 { &hf_h248_pkg_bt_tunopt,
537                         { "Tunnelling Options", "h248.pkg.BT.TunOpt",
538                                 FT_UINT32, BASE_DEC, VALS(h248_pkg_bt_tunopt_vals), 0, NULL, HFILL }
539                 },
540                 { &hf_h248_pkg_bt_tind,
541                         { "tind (Tunnel INDication)", "h248.pkg.BT.TIND",
542                                 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
543                 },
544                 { &hf_h248_pkg_bt_bit,
545                         { "Bearer Information Transport", "h248.pkg.BT.BIT",
546                                 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
547                 },
548
549
550                 /* A.8 Basic call progress tones generator with directionality */
551                 { &hf_h248_pkg_bcg,
552                         { "bcg (Basic call progress tones generator with directionality)", "h248.pkg.bcg",
553                         FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
554                 },
555                 { &hf_h248_pkg_bcg_sig_bdt_par_btd,
556                         { "btd (Tone Direction)", "h248.pkg.bcp.btd",
557                         FT_UINT32, BASE_HEX, VALS(h248_pkg_bcg_sig_bdt_par_btd_vals), 0, NULL, HFILL }
558                 },
559                 { &hf_h248_pkg_bcg_sig_bdt,
560                         { "bdt (Dial Tone)", "h248.pkg.bcg.bdt",
561                         FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
562                 },
563                 { &hf_h248_pkg_bcg_sig_brt,
564                         { "brt (Ringing tone)", "h248.pkg.bcg.brt",
565                         FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
566                 },
567                 { &hf_h248_pkg_bcg_sig_bbt,
568                         { "bbt (Busy tone)", "h248.pkg.bcg.bbt",
569                         FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
570                 },
571                 { &hf_h248_pkg_bcg_sig_bct,
572                         { "bct (Congestion tone)", "h248.pkg.bcg.bct",
573                         FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
574                 },
575                 { &hf_h248_pkg_bcg_sig_bsit,
576                         { "bsit (Special information tone)", "h248.pkg.bcg.bsit",
577                         FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
578                 },
579                 { &hf_h248_pkg_bcg_sig_bwt,
580                         { "bwt (Warning tone)", "h248.pkg.bcg.bwt",
581                         FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
582                 },
583                 { &hf_h248_pkg_bcg_sig_bpt,
584                         { "bpt (Payphone recognition tone)", "h248.pkg.bcg.bpt",
585                         FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
586                 },
587                 { &hf_h248_pkg_bcg_sig_bcw,
588                         { "bcw (Call waiting tone)", "h248.pkg.bcg.bcw",
589                         FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
590                 },
591                 { &hf_h248_pkg_bcg_sig_bcr,
592                         { "bcr (Call ringing tone)", "h248.pkg.bcg.bcr",
593                         FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
594                 },
595                 { &hf_h248_pkg_bcg_sig_bpy,
596                         { "bpy (Pay tone)", "h248.pkg.bcg.bpy",
597                         FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
598                 },
599         };
600
601         static gint *ett[] = {
602                 &ett_h248_pkg_BCP,
603                 &ett_h248_pkg_bt,
604                 &ett_h248_pkg_bt_tind,
605                 &ett_h248_pkg_bt_bit,
606                 &ett_h248_pkg_bcg,
607                 &ett_h248_pkg_bcg_sig_bdt,
608                 &ett_h248_pkg_BNCCT,
609                 &ett_h248_pkg_RI,
610                 &ett_h248_pkg_GB,
611                 &ett_h248_pkg_GB_EstBNC,
612                 &ett_h248_pkg_GB_ModBNC,
613                 &ett_h248_pkg_GB_RelBNC,
614                 &ett_h248_pkg_GB_BNCChange
615         };
616
617         proto_q1950 = proto_register_protocol(PNAME, PSNAME, PFNAME);
618
619         proto_register_field_array(proto_q1950, hf, array_length(hf));
620
621         proto_register_subtree_array(ett, array_length(ett));
622
623         /* Register the packages */
624         h248_register_package(&h248_pkg_BCP,REPLACE_PKG);
625         h248_register_package(&h248_pkg_BNCCT,REPLACE_PKG);
626         h248_register_package(&h248_pkg_RI,REPLACE_PKG);
627         h248_register_package(&h248_pkg_GB,REPLACE_PKG);
628         h248_register_package(&h248_pkg_bcg,REPLACE_PKG);
629         h248_register_package(&h248_pkg_bct,REPLACE_PKG);
630
631 }