Fix for bug 5422:
[obnox/wireshark/wip.git] / epan / dissectors / packet-h248_annex_e.c
1 /*
2  *  packet-h248-annex_e.c
3  *  H.248 Annex E
4  *
5  *  (c) 2006, Luis E. Garcia Ontanon <luis@ontanon.org>
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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
26  */
27
28 #ifdef HAVE_CONFIG_H
29 # include "config.h"
30 #endif
31
32 #include "packet-h248.h"
33 #define PNAME  "H.248 Annex E"
34 #define PSNAME "H248E"
35 #define PFNAME "h248e"
36 /*
37 #include <epan/dissectors/packet-alcap.h>
38 */
39 static int proto_h248_annex_E = -1;
40
41 static gboolean implicit = TRUE;
42
43 /* H.248.1 E.1  Generic Package */
44 static int hf_h248_pkg_generic = -1;
45 static int hf_h248_pkg_generic_cause_evt = -1;
46 static int hf_h248_pkg_generic_cause_gencause = -1;
47 static int hf_h248_pkg_generic_cause_failurecause = -1;
48 static int hf_h248_pkg_generic_sc_evt = -1;
49 static int hf_h248_pkg_generic_sc_sig_id = -1;
50 static int hf_h248_pkg_generic_sc_meth = -1;
51 static int hf_h248_pkg_generic_sc_slid = -1;
52 static int hf_h248_pkg_generic_sc_rid = -1;
53
54 static gint ett_h248_pkg_generic_cause_evt = -1;
55 static gint ett_h248_pkg_generic = -1;
56 static int ett_h248_pkg_generic_sc_evt = -1;
57
58 static const value_string h248_pkg_generic_cause_vals[] _U_ = {
59         {1, "gencause"},
60         {2, "failurecause"},
61         { 0, NULL }
62 };
63
64 static const value_string h248_pkg_generic_evt_vals[] = {
65         {1, "Cause"},
66         {2, "Signal Completion"},
67         { 0, NULL }
68 };
69
70 static const value_string h248_pkg_generic_cause_gencause_vals[] = {
71         { 1, "NR (Normal Release)"},
72         { 2, "UR (Unavailable Resources)"},
73         { 3, "FT (Failure, Temporary)"},
74         { 4, "FP (Failure, Permanent)"},
75         { 5, "IW (Interworking Error)"},
76         { 6, "UN (Unsupported)"},
77         { 0, NULL }
78 };
79
80 static h248_pkg_param_t h248_pkg_generic_cause_evt_params[] = {
81         { 0x0001, &hf_h248_pkg_generic_cause_gencause, h248_param_ber_integer, &implicit },
82         { 0x0002, &hf_h248_pkg_generic_cause_failurecause, h248_param_ber_octetstring, &implicit },
83         { 0, NULL, NULL, NULL}
84 };
85
86 static const value_string h248_pkg_generic_sc_meth_vals[] _U_ = {
87         {0x0001,"SigID"},
88         {0x0002,"Meth"},
89         {0x0003,"SLID"},
90         {0x0004,"RID"},
91         {0,NULL}
92 };
93
94 static const value_string h248_pkg_generic_sc_vals[] = {
95         {0x0001,"TO - Signal timed out or otherwise completed on its own"},
96         {0x0002,"EV - Interrupted by event"},
97         {0x0003,"SD - Halted by new Signals Descriptor"},
98         {0x0004,"NC - Not completed, other cause"},
99         {0x0005,"PI - First to penultimate iteration"},
100         {0,NULL}
101 };
102
103 static h248_pkg_param_t h248_pkg_generic_sc_evt_params[] = {
104         { 0x0001, &hf_h248_pkg_generic_sc_sig_id, h248_param_PkgdName, NULL },
105         { 0x0002, &hf_h248_pkg_generic_sc_meth, h248_param_ber_integer, NULL },
106         { 0x0003, &hf_h248_pkg_generic_sc_slid, h248_param_ber_integer, NULL },
107         { 0x0004, &hf_h248_pkg_generic_sc_rid, h248_param_ber_integer, NULL },
108         { 0, NULL, NULL, NULL}
109 };
110
111 static h248_pkg_evt_t h248_pkg_generic_cause_evts[] = {
112         { 0x0001, &hf_h248_pkg_generic_cause_evt, &ett_h248_pkg_generic_cause_evt, h248_pkg_generic_cause_evt_params, h248_pkg_generic_cause_gencause_vals},
113         { 0x0002, &hf_h248_pkg_generic_sc_evt, &ett_h248_pkg_generic_sc_evt, h248_pkg_generic_sc_evt_params, h248_pkg_generic_sc_vals},
114         { 0, NULL, NULL, NULL, NULL}
115 };
116
117 static h248_package_t h248_pkg_generic = {
118         0x0001,
119         &hf_h248_pkg_generic,
120         &ett_h248_pkg_generic,
121         NULL,
122         NULL,
123         h248_pkg_generic_evt_vals,
124         NULL,
125         NULL,
126         NULL,
127         h248_pkg_generic_cause_evts,
128         NULL
129 };
130
131
132 /* H.248.1 E.2  Base Root Package
133 static int hf_h248_pkg_root = -1;
134 static int hf_h248_pkg_root_params = -1;
135 static int hf_h248_pkg_root_maxnrofctx = -1;
136 static int hf_h248_pkg_root_maxtermsperctx = -1;
137 static int hf_h248_pkg_root_normalmgexectime = -1;
138 static int hf_h248_pkg_root_normalmgcexecutiontime = -1;
139 static int hf_h248_pkg_root_provisionalresponsetimervalue = -1;
140
141 static gint ett_h248_pkg_root = -1;
142
143 static h248_pkg_param_t h248_pkg_root_properties[] = {
144         { 0x0001, &hf_h248_pkg_root_maxnrofctx, h248_param_ber_integer, &implicit },
145         { 0x0002, &hf_h248_pkg_root_maxtermsperctx, h248_param_ber_integer, &implicit },
146         { 0x0003, &hf_h248_pkg_root_normalmgexectime, h248_param_ber_integer, &implicit },
147         { 0x0004, &hf_h248_pkg_root_normalmgcexecutiontime, h248_param_ber_integer, &implicit },
148         { 0x0005, &hf_h248_pkg_root_provisionalresponsetimervalue, h248_param_ber_integer, &implicit },
149         { 0, NULL, NULL, NULL}
150 };
151
152 static h248_package_t h248_pkg_root = {
153         0x0002,
154         &hf_h248_pkg_root,
155         &hf_h248_pkg_root_params,
156         &ett_h248_pkg_root,
157         NULL,
158         NULL,
159         NULL,
160         NULL,
161         h248_pkg_root_properties,
162         NULL,
163         NULL,
164         NULL,
165         NULL
166 };
167 */
168
169 /* H.248.1 E.3  Tone Generator Package
170 static int hf_h248_pkg_tonegen = -1;
171 static int hf_h248_pkg_tonegen_params = -1;
172 static int hf_h248_pkg_tonegen_sig_pt = -1;
173 static int hf_h248_pkg_tonegen_sig_pt_tl = -1;
174 static int hf_h248_pkg_tonegen_sig_pt_ind = -1;
175
176 static gint ett_h248_pkg_tonegen = -1;
177
178 static h248_pkg_param_t hf_h248_pkg_tonegen_properties[] = {
179         { 0x0001, &hf_h248_pkg_tonegen_sig_pt_tl, h248_param_ber_integer, &implicit },
180         { 0x0002, &hf_h248_pkg_tonegen_sig_pt_ind, h248_param_ber_integer, &implicit },
181         { 0, NULL, NULL, NULL}
182 };
183
184 static h248_package_t h248_pkg_tonegen = {
185         0x0002,
186         &hf_h248_pkg_tonegen,
187         &hf_h248_pkg_tonegen_params,
188         &ett_h248_pkg_tonegen,
189         h248_pkg_root_properties,
190         NULL,
191         NULL,
192         NULL
193 };
194 */
195
196
197 /* H.248.1 E.4  Tone Detector Package 
198 static int hf_h248_pkg_tonedet = -1;
199 static int hf_h248_pkg_tonedet_evt_std = -1;
200 static int hf_h248_pkg_tonedet_evt_etd = -1;
201 static int hf_h248_pkg_tonedet_evt_ltd = -1;
202 */
203
204 /* E.5 Basic DTMF Generator Package */
205 static int hf_h248_pkg_dg = -1;
206 static int hf_h248_pkg_dg_sig_d0 = -1;
207 static int hf_h248_pkg_dg_sig_d1 = -1;
208 static int hf_h248_pkg_dg_sig_d2 = -1;
209 static int hf_h248_pkg_dg_sig_d3 = -1;
210
211 static gint ett_h248_pkg_dg = -1;
212 static gint ett_h248_pkg_dg_sig_d0 = -1;
213 static gint ett_h248_pkg_dg_sig_d1 = -1;
214 static gint ett_h248_pkg_dg_sig_d2 = -1;
215 static gint ett_h248_pkg_dg_sig_d3 = -1;
216
217 static const value_string  h248_pkg_dg_signals_vals[] = {
218         { 0x0010, "d0"},
219         { 0x0011, "d1"},
220         { 0x0012, "d2"},
221         { 0x0013, "d3"},
222         {0,NULL}
223 };
224
225 /* Signals defenitions */
226 static h248_pkg_sig_t h248_pkg_dg_signals[] = {
227         { 0x0010, &hf_h248_pkg_dg_sig_d0, &ett_h248_pkg_dg_sig_d0, NULL, NULL },
228         { 0x0011, &hf_h248_pkg_dg_sig_d1, &ett_h248_pkg_dg_sig_d1, NULL, NULL },
229         { 0x0012, &hf_h248_pkg_dg_sig_d2, &ett_h248_pkg_dg_sig_d2, NULL, NULL },
230         { 0x0013, &hf_h248_pkg_dg_sig_d3, &ett_h248_pkg_dg_sig_d3, NULL, NULL },
231         /* TODO add the rest of the signals */
232
233         { 0, NULL, NULL, NULL, NULL}
234 };
235
236 /* Packet defenitions */
237 static h248_package_t h248_pkg_dg = {
238         0x0005,
239         &hf_h248_pkg_dg,
240         &ett_h248_pkg_dg,
241         NULL,
242         h248_pkg_dg_signals_vals,
243         NULL,
244         NULL,
245         NULL,                                   /* Properties   */
246         h248_pkg_dg_signals,    /* signals              */
247         NULL,                                   /* events               */
248         NULL                                    /* statistics   */
249 };
250
251
252 /* H.248.1 E.9 Analog Line Supervision Package */
253 static int hf_h248_pkg_al = -1;
254 static int hf_h248_pkg_al_evt_onhook = -1;
255 static int hf_h248_pkg_al_evt_offhook = -1;
256 static int hf_h248_pkg_al_evt_flashhook = -1;
257 static int hf_h248_pkg_al_evt_onhook_par_strict = -1;
258 static int hf_h248_pkg_al_evt_offhook_par_strict = -1;
259 static int hf_h248_pkg_al_evt_onhook_par_init = -1;
260 static int hf_h248_pkg_al_evt_offhook_par_init = -1;
261 static int hf_h248_pkg_al_evt_flashhook_par_mindur = -1;
262
263 static gint ett_h248_pkg_al = -1;
264 static gint ett_h248_pkg_al_evt_onhook = -1;
265 static gint ett_h248_pkg_al_evt_offhook = -1;
266 static gint ett_h248_pkg_al_evt_flashhook = -1;
267
268
269 static const value_string  h248_pkg_al_evt_onhook_params_vals[] = {
270         { 0x0001, "strict"},
271         { 0x0002, "init"},
272         { 0, NULL}
273 };
274
275 static const value_string  h248_pkg_al_evt_flashhook_params_vals[] = {
276         { 0x0001, "mindur"},
277         { 0, NULL}
278 };
279
280 static const value_string  h248_pkg_al_evts_vals[] = {
281         { 0x0004, "onhook"},
282         { 0x0005, "offhook"},
283         { 0x0006, "flashhook"},
284         { 0, NULL}
285 };
286
287
288
289 /* Events defenitions */
290 static const value_string h248_pkg_al_evt_onhook_strict_vals[] = {
291         { 0, "exact"},
292         { 1, "state"},
293         { 2, "failWrong"},
294         { 0, NULL }
295 };
296
297 static const true_false_string h248_pkg_al_evt_onhook_par_init_vals = {
298         "already on-hook",
299         "actual state transition to on-hook"
300 };
301
302 static const true_false_string h248_pkg_al_evt_offhook_par_init_vals = {
303         "already off-hook",
304         "actual state transition to off-hook"
305 };
306
307 static h248_pkg_param_t  h248_pkg_al_evt_onhook_params[] = {
308         { 0x0001, &hf_h248_pkg_al_evt_onhook_par_strict, h248_param_ber_integer, &implicit },
309         { 0x0002, &hf_h248_pkg_al_evt_onhook_par_init, h248_param_ber_boolean, &implicit },
310         { 0, NULL, NULL, NULL}
311 };
312
313 static h248_pkg_param_t  h248_pkg_al_evt_offhook_params[] = {
314         { 0x0001, &hf_h248_pkg_al_evt_offhook_par_strict, h248_param_ber_integer, &implicit },
315         { 0x0002, &hf_h248_pkg_al_evt_offhook_par_init, h248_param_ber_boolean, &implicit },
316         { 0, NULL, NULL, NULL}
317 };
318
319 static h248_pkg_param_t  h248_pkg_al_evt_flashhook_params[] = {
320         { 0x0001, &hf_h248_pkg_al_evt_flashhook_par_mindur, h248_param_ber_integer, &implicit },
321         { 0, NULL, NULL, NULL}
322 };
323
324 static h248_pkg_evt_t h248_pkg_al_evts[] = {
325         { 0x0004, &hf_h248_pkg_al_evt_onhook, &ett_h248_pkg_al_evt_onhook, h248_pkg_al_evt_onhook_params, h248_pkg_al_evt_onhook_params_vals},
326         { 0x0005, &hf_h248_pkg_al_evt_offhook, &ett_h248_pkg_al_evt_offhook, h248_pkg_al_evt_offhook_params, h248_pkg_al_evt_onhook_params_vals },
327         { 0x0006, &hf_h248_pkg_al_evt_flashhook, &ett_h248_pkg_al_evt_flashhook, h248_pkg_al_evt_flashhook_params, h248_pkg_al_evt_flashhook_params_vals },
328         
329         { 0, NULL, NULL, NULL, NULL}
330 };
331
332 /* Packet defenitions */
333 static const value_string h248_pkg_al_parameters[] _U_ = {
334         /* Signals */
335         {   0x0002, "ri (Ring)" },
336         /* Events */
337         {   0x0004, "on (On-hook)" },
338         {   0x0005, "off (Off-hook)" },
339         {   0x0006, "fl (Flashhook)" },
340
341         {0,     NULL},
342 };
343
344 static h248_package_t h248_pkg_al = {
345         0x0009,
346         &hf_h248_pkg_al,
347         &ett_h248_pkg_al,
348         NULL,
349         NULL,
350         h248_pkg_al_evts_vals,
351         NULL,
352         NULL,                                           /* Properties */
353         NULL,                                           /* signals */
354         h248_pkg_al_evts,                       /* events */
355         NULL                                            /* statistics */
356 };
357
358 /* H.248.1 E.12 RTP package */
359 static int hf_h248_pkg_rtp = -1;
360 static int hf_h248_pkg_rtp_stat_ps = -1;
361
362 static int ett_h248_pkg_rtp = -1;
363
364 static const value_string h248_pkg_rtp_stat_vals[] _U_ = {
365         { 0x0004, "ps"},
366         { 0, NULL}
367 };
368
369 static const value_string h248_pkg_rtp_parameters[] = {
370         {   0x0001, "pltrans (Payload Transition)" },
371         {   0x0004, "ps (Packets Sent)" },
372         {   0x0005, "pr (Packets Received)" },
373         {   0x0006, "pl (Packet Loss)" },
374         {   0x0007, "jit (Jitter)" },
375         {   0x0008, "delay (Delay)" },
376         {0,     NULL},
377 };
378
379 static h248_pkg_stat_t h248_pkg_rtp_stat[] = {
380         { 0x0004, &hf_h248_pkg_rtp_stat_ps, &ett_h248_pkg_rtp, NULL,NULL},
381 };
382
383 /* Packet defenitions */
384 static h248_package_t h248_pkg_rtp = {
385         0x000c,
386         &hf_h248_pkg_rtp,
387         &ett_h248_pkg_rtp,
388         h248_pkg_rtp_parameters,
389         NULL,
390         NULL,
391         NULL,
392         NULL,                                           /* Properties */
393         NULL,                                           /* signals */
394         NULL,                                           /* events */
395         h248_pkg_rtp_stat                       /* statistics */
396 };
397
398 /* H.248.1 E.13 TDM Circuit Package */
399 static int hf_h248_pkg_tdmc = -1;
400 static int hf_h248_pkg_tdmc_ec = -1;
401 static int hf_h248_pkg_tdmc_gain = -1;
402
403 static gint ett_h248_pkg_tdmc = -1;
404
405 static const true_false_string h248_tdmc_ec_vals = {
406         "On",
407         "Off"
408 };
409 static const value_string h248_pkg_tdmc_props_vals[] = {
410         { 0x0008, "ec"},
411         { 0x000a, "gain"},
412         { 0, NULL}
413 };
414
415
416 static h248_pkg_param_t h248_pkg_tdmc_props[] = {
417         { 0x0008, &hf_h248_pkg_tdmc_ec, h248_param_ber_boolean, &implicit },
418         { 0x000a, &hf_h248_pkg_tdmc_gain, h248_param_ber_integer, &implicit },
419         { 0, NULL, NULL, NULL}
420 };
421
422 static h248_package_t h248_pkg_tdmc = {
423         0x000d,
424         &hf_h248_pkg_tdmc,
425         &ett_h248_pkg_tdmc,
426         h248_pkg_tdmc_props_vals,
427         NULL,
428         NULL,
429         NULL,
430         h248_pkg_tdmc_props,            /* Properties */
431         NULL,                                           /* signals */
432         NULL,                                           /* events */
433         NULL                                            /* statistics */
434 };
435
436
437
438 void proto_register_h248_annex_e(void) {
439         static hf_register_info hf[] = {
440                 /* H.248.1 E.1  Generic Package */
441                 { &hf_h248_pkg_generic, { "Generic Package", "h248.pkg.generic", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
442                 { &hf_h248_pkg_generic_cause_evt, { "Cause Event", "h248.pkg.generic.cause", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
443                 { &hf_h248_pkg_generic_cause_gencause, { "Generic Cause", "h248.pkg.generic.cause.gencause", FT_UINT32, BASE_HEX, VALS(h248_pkg_generic_cause_gencause_vals), 0, NULL, HFILL }}, 
444                 { &hf_h248_pkg_generic_cause_failurecause, { "Generic Cause", "h248.pkg.generic.cause.failurecause", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
445                 {&hf_h248_pkg_generic_sc_evt, {"Signal Completion","h248.pkg.generic.sc",FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
446                 { &hf_h248_pkg_generic_sc_sig_id, { "Signal Identity", "h248.pkg.generic.sc.sig_id", FT_BYTES, BASE_NONE, NULL , 0, NULL, HFILL }}, 
447                 { &hf_h248_pkg_generic_sc_meth, { "Termination Method", "h248.pkg.generic.sc.meth", FT_UINT32, BASE_DEC, VALS(h248_pkg_generic_sc_vals) , 0, NULL, HFILL }}, 
448                 { &hf_h248_pkg_generic_sc_slid, { "Signal List ID", "h248.pkg.generic.sc.slid", FT_UINT32, BASE_DEC, NULL , 0, NULL, HFILL }}, 
449                 { &hf_h248_pkg_generic_sc_rid, { "Request ID", "h248.pkg.generic.sc.rid", FT_UINT32, BASE_DEC,  NULL, 0, NULL, HFILL }}, 
450                 /* H.248.1 E.9 Analog Line Supervision Package */
451                 { &hf_h248_pkg_al, { "Analog Line Supervision Package", "h248.pkg.al", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
452                 { &hf_h248_pkg_al_evt_onhook, { "onhook", "h248.pkg.al.onhook", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
453                 { &hf_h248_pkg_al_evt_offhook, { "offhook", "h248.pkg.al.offhook", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
454                 { &hf_h248_pkg_al_evt_flashhook, { "flashhook", "h248.pkg.al.flashhook", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
455                 { &hf_h248_pkg_al_evt_onhook_par_strict, { "strict", "h248.pkg.al.ev.onhook.strict", FT_UINT8, BASE_DEC, VALS(h248_pkg_al_evt_onhook_strict_vals), 0, NULL, HFILL }},
456                 { &hf_h248_pkg_al_evt_onhook_par_init, { "init", "h248.pkg.al.ev.onhook.init", FT_BOOLEAN, BASE_NONE, TFS(&h248_pkg_al_evt_onhook_par_init_vals), 0x0, NULL, HFILL }},
457                 { &hf_h248_pkg_al_evt_offhook_par_strict, { "strict", "h248.pkg.al.ev.offhook.strict", FT_UINT8, BASE_DEC, VALS(h248_pkg_al_evt_onhook_strict_vals), 0, NULL, HFILL }},
458                 { &hf_h248_pkg_al_evt_offhook_par_init, { "init", "h248.pkg.al.ev.onhook.init", FT_BOOLEAN, BASE_NONE, TFS(&h248_pkg_al_evt_offhook_par_init_vals), 0x0, NULL, HFILL }},
459                 { &hf_h248_pkg_al_evt_flashhook_par_mindur, { "Minimum duration in ms", "h248.pkg.al.ev.flashhook.mindur", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
460                 /* H.248.1 E.12 RTP package */
461                 { &hf_h248_pkg_rtp, { "RTP package", "h248.pkg.rtp", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
462                 { &hf_h248_pkg_rtp_stat_ps, { "Packets Sent", "h248.pkg.rtp.stat.ps", FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL }},
463                 /* H.248.1 E.13 TDM Circuit Package */
464                 { &hf_h248_pkg_tdmc, { "TDM Circuit Package", "h248.pkg.tdmc", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
465                 { &hf_h248_pkg_tdmc_ec, { "Echo Cancellation", "h248.pkg.tdmc.ec", FT_BOOLEAN, BASE_NONE, TFS(&h248_tdmc_ec_vals), 0x0, NULL, HFILL }},
466                 { &hf_h248_pkg_tdmc_gain, { "Gain", "h248.pkg.tdmc.gain", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
467         };
468         
469         static gint *ett[] = {
470                 &ett_h248_pkg_generic_cause_evt,
471                 &ett_h248_pkg_generic,
472
473                 &ett_h248_pkg_dg,
474                 &ett_h248_pkg_dg_sig_d0,
475                 &ett_h248_pkg_dg_sig_d1,
476                 &ett_h248_pkg_dg_sig_d2,
477                 &ett_h248_pkg_dg_sig_d3,
478
479                 &ett_h248_pkg_al,
480                 &ett_h248_pkg_al_evt_onhook,
481                 
482                 &ett_h248_pkg_rtp,
483         };
484
485         proto_h248_annex_E = proto_register_protocol(PNAME, PSNAME, PFNAME);
486
487         proto_register_field_array(proto_h248_annex_E, hf, array_length(hf));
488
489         proto_register_subtree_array(ett, array_length(ett));
490         
491         h248_register_package(&h248_pkg_generic);
492         h248_register_package(&h248_pkg_dg);
493         h248_register_package(&h248_pkg_al);
494         h248_register_package(&h248_pkg_rtp);
495         h248_register_package(&h248_pkg_tdmc);
496 }
497
498