Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-h248_annex_e.c
blob519168828819f870c5663aef94713370301f2532
1 /*
2 * packet-h248_annex_e.c
3 * H.248 Annex E
5 * (c) 2006, Luis E. Garcia Ontanon <luis@ontanon.org>
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * SPDX-License-Identifier: GPL-2.0-or-later
14 #include "config.h"
17 /*****/
18 #include <epan/packet.h>
19 #include <epan/tfs.h>
20 /*****/
22 #include "packet-h248.h"
24 void proto_register_h248_annex_e(void);
26 #define PNAME "H.248 Annex E"
27 #define PSNAME "H248E"
28 #define PFNAME "h248e"
31 static int proto_h248_annex_E;
33 static bool h248_e_implicit;
34 static bool implicit;
36 /* H.248.1 E.1 Generic Package */
37 static int hf_h248_pkg_generic;
38 static int hf_h248_pkg_generic_cause_evt;
39 static int hf_h248_pkg_generic_cause_gencause;
40 static int hf_h248_pkg_generic_cause_failurecause;
41 static int hf_h248_pkg_generic_sc_evt;
42 static int hf_h248_pkg_generic_sc_sig_id;
43 static int hf_h248_pkg_generic_sc_meth;
44 static int hf_h248_pkg_generic_sc_slid;
45 static int hf_h248_pkg_generic_sc_rid;
47 static int ett_h248_pkg_generic_cause_evt;
48 static int ett_h248_pkg_generic;
49 static int ett_h248_pkg_generic_sc_evt;
51 static const value_string h248_pkg_generic_props_vals[] = {
52 { 0,"Generic Package - Annex E (g)" },
53 { 0, NULL }
56 static const value_string h248_pkg_generic_cause_vals[] _U_ = {
57 {1, "General Cause (gencause)"},
58 {2, "Failure Cause (failurecause)"},
59 { 0, NULL }
62 static const value_string h248_pkg_generic_cause_gencause_vals[] = {
63 { 1, "Normal Release (NR)"},
64 { 2, "Unavailable Resources (UR)"},
65 { 3, "Failure, Temporary (FT)"},
66 { 4, "Failure, Permanent (FP)"},
67 { 5, "Interworking Error (IW)"},
68 { 6, "Unsupported (UN)"},
69 { 0, NULL }
72 static h248_pkg_param_t h248_pkg_generic_cause_evt_params[] = {
73 { 0x0001, &hf_h248_pkg_generic_cause_gencause, h248_param_ber_integer, &h248_e_implicit },
74 { 0x0002, &hf_h248_pkg_generic_cause_failurecause, h248_param_ber_octetstring, &h248_e_implicit },
75 { 0, NULL, NULL, NULL}
78 #if 0
79 static const value_string h248_pkg_generic_sc_meth_vals[] _U_ = {
80 {0x0001,"Signal Identity (SigID)"},
81 {0x0002,"Termination Method (Meth)"},
82 {0x0003,"Signal List ID (SLID)"},
83 {0x0004,"Request ID (RID)"},
84 {0,NULL}
86 #endif
88 static const value_string h248_pkg_generic_sc_vals[] = {
89 {0x0001,"TO - Signal timed out or otherwise completed on its own"},
90 {0x0002,"EV - Interrupted by event"},
91 {0x0003,"SD - Halted by new Signals Descriptor"},
92 {0x0004,"NC - Not completed, other cause"},
93 {0x0005,"PI - First to penultimate iteration"},
94 {0,NULL}
97 static h248_pkg_param_t h248_pkg_generic_sc_evt_params[] = {
98 { 0x0001, &hf_h248_pkg_generic_sc_sig_id, h248_param_PkgdName, &h248_e_implicit },
99 { 0x0002, &hf_h248_pkg_generic_sc_meth, h248_param_ber_integer, &h248_e_implicit },
100 { 0x0003, &hf_h248_pkg_generic_sc_slid, h248_param_ber_integer, &h248_e_implicit },
101 { 0x0004, &hf_h248_pkg_generic_sc_rid, h248_param_ber_integer, &h248_e_implicit },
102 { 0, NULL, NULL, NULL}
105 static h248_pkg_evt_t h248_pkg_generic_cause_evts[] = {
106 { 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},
107 { 0x0002, &hf_h248_pkg_generic_sc_evt, &ett_h248_pkg_generic_sc_evt, h248_pkg_generic_sc_evt_params, h248_pkg_generic_sc_vals},
108 { 0, NULL, NULL, NULL, NULL}
111 static h248_package_t h248_pkg_generic = {
112 0x0001,
113 &hf_h248_pkg_generic,
114 &ett_h248_pkg_generic,
115 h248_pkg_generic_props_vals,
116 NULL,
117 h248_pkg_generic_cause_vals,
118 NULL,
119 NULL,
120 NULL,
121 h248_pkg_generic_cause_evts,
122 NULL
126 /* H.248.1 E.2 Base Root Package */
127 #if 0 /* XXX: All of the following hf_... vars have no hf[] entry; package commented out */
128 static int hf_h248_pkg_root;
129 static int hf_h248_pkg_root_maxnrofctx;
130 static int hf_h248_pkg_root_maxtermsperctx;
131 static int hf_h248_pkg_root_normalmgexectime;
132 static int hf_h248_pkg_root_normalmgcexecutiontime;
133 static int hf_h248_pkg_root_mg_provisionalresponsetimervalue;
134 static int hf_h248_pkg_root_mgc_provisionalresponsetimervalue;
135 static int hf_h248_pkg_root_mgc_orginalpendinglimit;
136 static int hf_h248_pkg_root_mg_orginalpendinglimit;
138 static int ett_h248_pkg_root_params;
140 static const value_string h248_pkg_root_props_vals[] = {
141 { 0x0000, "Base Root Package - Annex E (root)" },
142 { 0x0001, "Maximum Number of Contexts" },
143 { 0x0002, "Maximum Terminations Per Context" },
144 { 0x0003, "Normal MG Execution Time" },
145 { 0x0004, "Normal MGC Execution Time" },
146 { 0x0005, "MG Provisional Response Timer Value" },
147 { 0x0006, "MGC Provisional Response Timer Value" },
148 { 0x0007, "MGC Originated Pending Limit" },
149 { 0x0008, "MG Originated Pending Limit" },
150 { 0, NULL }
153 static h248_pkg_param_t h248_pkg_root_properties[] = {
154 { 0x0001, &hf_h248_pkg_root_maxnrofctx, h248_param_ber_integer, &h248_e_implicit },
155 { 0x0002, &hf_h248_pkg_root_maxtermsperctx, h248_param_ber_integer, &h248_e_implicit },
156 { 0x0003, &hf_h248_pkg_root_normalmgexectime, h248_param_ber_integer, &h248_e_implicit },
157 { 0x0004, &hf_h248_pkg_root_normalmgcexecutiontime, h248_param_ber_integer, &h248_e_implicit },
158 { 0x0005, &hf_h248_pkg_root_mg_provisionalresponsetimervalue, h248_param_ber_integer, &implicit },
159 { 0x0006, &hf_h248_pkg_root_mgc_provisionalresponsetimervalue, h248_param_ber_integer, &implicit },
160 { 0x0007, &hf_h248_pkg_root_mgc_orginalpendinglimit, h248_param_ber_integer, &implicit },
161 { 0x0008, &hf_h248_pkg_root_mg_orginalpendinglimit, h248_param_ber_integer, &implicit },
162 { 0, NULL, NULL, NULL}
165 static h248_package_t h248_pkg_root = {
166 0x0002,
167 &hf_h248_pkg_root,
168 &ett_h248_pkg_root_params,
169 h248_pkg_root_props_vals,
170 NULL,
171 NULL,
172 NULL,
173 h248_pkg_root_properties,
174 NULL,
175 NULL,
176 NULL
178 #endif
180 /* H.248.1 E.3 Tone Generator Package */
181 static int hf_h248_pkg_tonegen;
182 static int hf_h248_pkg_tonegen_sig_pt;
183 static int hf_h248_pkg_tonegen_sig_pt_tl;
184 static int hf_h248_pkg_tonegen_sig_pt_ind;
185 static int hf_h248_pkg_tonegen_sig_pg_btd;
187 static int ett_h248_pkg_tonegen_params;
188 static int ett_h248_pkg_tonegen_sig_pt;
190 static const value_string h248_pkg_tonegen_props_vals[] = {
191 { 0x0000, "Tone Generator - Annex E (tonegen)" },
192 { 0, NULL }
195 static const value_string h248_pkg_tonegen_sigs_vals[] = {
196 { 0x0001, "Play Tone (pt)" },
197 { 0, NULL }
200 static const value_string h248_pkg_tonegen_pt_param_vals[] = {
201 { 0x0001, "Tone ID List (tl)" },
202 { 0x0002, "Inter-signal duration (ind)" },
203 { 0x0003, "Tone Direction (td)" },
204 { 0, NULL }
207 static const value_string h248_pkg_tonegen_pt_btd_param_vals[] = {
208 { 0x0001, "External (EXT)" },
209 { 0x0002, "Internal (INT)" },
210 { 0x0003, "Both (BOTH)" },
211 { 0, NULL }
214 static h248_pkg_param_t h248_pkg_tonegen_sig_params[] = {
215 { 0x0001, &hf_h248_pkg_tonegen_sig_pt_tl, h248_param_ber_integer, &h248_e_implicit },
216 { 0x0002, &hf_h248_pkg_tonegen_sig_pt_ind, h248_param_ber_integer, &h248_e_implicit },
217 { 0x0003, &hf_h248_pkg_tonegen_sig_pg_btd, h248_param_ber_integer, &implicit },
218 { 0, NULL, NULL, NULL}
221 static const h248_pkg_sig_t h248_pkg_tonegen_signals[] = {
222 { 0x0001, &hf_h248_pkg_tonegen_sig_pt, &ett_h248_pkg_tonegen_sig_pt, h248_pkg_tonegen_sig_params, h248_pkg_tonegen_pt_param_vals },
223 { 0, NULL, NULL, NULL, NULL }
226 static h248_package_t h248_pkg_tonegen = {
227 0x0003,
228 &hf_h248_pkg_tonegen,
229 &ett_h248_pkg_tonegen_params,
230 h248_pkg_tonegen_props_vals,
231 h248_pkg_tonegen_sigs_vals,
232 NULL,NULL,NULL,
233 h248_pkg_tonegen_signals,
234 NULL,
235 NULL
239 /* H.248.1 E.4 Tone Detector Package */
240 static int hf_h248_pkg_tonedet;
241 static int hf_h248_pkg_tonedet_evt_std;
242 static int hf_h248_pkg_tonedet_evt_etd;
243 static int hf_h248_pkg_tonedet_evt_ltd;
245 static int hf_h248_pkg_tonedet_evt_tl_param;
246 static int hf_h248_pkg_tonedet_evt_dur_param;
247 static int hf_h248_pkg_tonedet_evt_tid_param;
249 static int ett_h248_pkg_tonedet;
250 static int ett_h248_pkg_tonedet_evt_std;
251 static int ett_h248_pkg_tonedet_evt_etd;
252 static int ett_h248_pkg_tonedet_evt_ltd;
254 static const value_string h248_pkg_tonedet_props_vals[] = {
255 { 0x0000, "Tone Detection Package - Annex E (tonedet)" },
256 { 0, NULL }
259 static const value_string h248_pkg_tonedet_events_vals[] = {
260 { 0x0001, "Start Tone Detected (std)" },
261 { 0x0002, "End Tone Detected (etd)" },
262 { 0x0003, "Long Tone Detected (ltd)" },
263 { 0, NULL }
266 static const value_string h248_pkg_tonedet_evt_param_vals[] = {
267 { 0x0001, "Tone ID List (tl)" },
268 { 0x0002, "Duration (dur)" },
269 { 0x0003, "Tone ID (tid)" },
270 { 0, NULL }
273 static const value_string h248_pkg_tonedet_tl_params_vals[] = {
274 { 0x0000, "Wildcard (*)" },
275 { 0, NULL }
278 static const h248_pkg_param_t h248_pkg_tonedet_event_params[] = {
279 { 0x0001, &hf_h248_pkg_tonedet_evt_tl_param, h248_param_uint_item, &implicit },
280 { 0x0002, &hf_h248_pkg_tonedet_evt_dur_param, h248_param_ber_integer, &implicit },
281 { 0x0003, &hf_h248_pkg_tonedet_evt_tid_param, h248_param_ber_integer, &implicit },
282 { 0, NULL, NULL, NULL }
285 static const h248_pkg_evt_t h248_pkg_tonedet_events[] = {
286 { 0x0001, &hf_h248_pkg_tonedet_evt_std, &ett_h248_pkg_tonedet_evt_std, h248_pkg_tonedet_event_params, h248_pkg_tonedet_evt_param_vals },
287 { 0x0002, &hf_h248_pkg_tonedet_evt_etd, &ett_h248_pkg_tonedet_evt_etd, h248_pkg_tonedet_event_params, h248_pkg_tonedet_evt_param_vals },
288 { 0x0003, &hf_h248_pkg_tonedet_evt_ltd, &ett_h248_pkg_tonedet_evt_ltd, h248_pkg_tonedet_event_params, h248_pkg_tonedet_evt_param_vals },
289 { 0, NULL, NULL, NULL, NULL }
292 static h248_package_t h248_pkg_tonedet = {
293 0x0004,
294 &hf_h248_pkg_tonedet,
295 &ett_h248_pkg_tonedet,
296 h248_pkg_tonedet_props_vals,
297 NULL,
298 h248_pkg_tonedet_events_vals,
299 NULL,
300 NULL,
301 NULL,
302 h248_pkg_tonedet_events,
303 NULL
307 /* E.5 Basic DTMF Generator Package */
308 static int hf_h248_pkg_dg;
309 static int hf_h248_pkg_dg_sig_pt;
310 static int hf_h248_pkg_dg_sig_d0;
311 static int hf_h248_pkg_dg_sig_d1;
312 static int hf_h248_pkg_dg_sig_d2;
313 static int hf_h248_pkg_dg_sig_d3;
314 static int hf_h248_pkg_dg_sig_d4;
315 static int hf_h248_pkg_dg_sig_d5;
316 static int hf_h248_pkg_dg_sig_d6;
317 static int hf_h248_pkg_dg_sig_d7;
318 static int hf_h248_pkg_dg_sig_d8;
319 static int hf_h248_pkg_dg_sig_d9;
320 static int hf_h248_pkg_dg_sig_da;
321 static int hf_h248_pkg_dg_sig_db;
322 static int hf_h248_pkg_dg_sig_dc;
323 static int hf_h248_pkg_dg_sig_dd;
324 static int hf_h248_pkg_dg_sig_ds;
325 static int hf_h248_pkg_dg_sig_do;
326 static int hf_h248_pkg_dg_sig_params;
328 static int ett_h248_pkg_dg;
329 static int ett_h248_pkg_dg_sig_pt;
330 static int ett_h248_pkg_dg_sig_d0;
331 static int ett_h248_pkg_dg_sig_d1;
332 static int ett_h248_pkg_dg_sig_d2;
333 static int ett_h248_pkg_dg_sig_d3;
334 static int ett_h248_pkg_dg_sig_d4;
335 static int ett_h248_pkg_dg_sig_d5;
336 static int ett_h248_pkg_dg_sig_d6;
337 static int ett_h248_pkg_dg_sig_d7;
338 static int ett_h248_pkg_dg_sig_d8;
339 static int ett_h248_pkg_dg_sig_d9;
340 static int ett_h248_pkg_dg_sig_da;
341 static int ett_h248_pkg_dg_sig_db;
342 static int ett_h248_pkg_dg_sig_dc;
343 static int ett_h248_pkg_dg_sig_dd;
344 static int ett_h248_pkg_dg_sig_ds;
345 static int ett_h248_pkg_dg_sig_do;
347 static const value_string h248_pkg_dg_props_vals[] = {
348 { 0x0000, "Basic DTMF Generator Package - Annex E (dg)" },
349 { 0, NULL }
352 static const value_string h248_pkg_dg_signals_vals[] = {
353 /* from tonegeg */
354 { 0x0001, "Tone ID List (tl)" },
355 { 0x0002, "End Tone Detected (etd)" },
356 { 0x0003, "Long Tone Detected (ltd)" },
358 /* from dd */
359 { 0x0010, "0 (d0)"},
360 { 0x0011, "1 (d1)"},
361 { 0x0012, "2 (d2)"},
362 { 0x0013, "3 (d3)"},
363 { 0x0014, "4 (d4)"},
364 { 0x0015, "5 (d5)"},
365 { 0x0016, "6 (d6)"},
366 { 0x0017, "7 (d7)"},
367 { 0x0018, "8 (d8)"},
368 { 0x0019, "9 (d9)"},
369 { 0x001a, "A (dA)"},
370 { 0x001b, "B (dB)"},
371 { 0x001c, "C (dC)"},
372 { 0x001d, "D (dD)"},
373 { 0x0020, "* (ds)"},
374 { 0x0021, "# (do)"},
375 {0,NULL}
378 #if 0
379 static const value_string h248_pkg_dg_sig_params_vals[] = {
380 { 0x0001, "Tone Direction (btd)" },
381 { 0, NULL }
383 #endif
385 static const value_string h248_pkg_dg_sig_btd_vals[] = {
386 { 0x0001, "External (EXT)" },
387 { 0x0002, "Internal (INT)" },
388 { 0x0003, "Both (BOTH)" },
389 { 0, NULL }
392 static const h248_pkg_param_t h248_pkg_dg_signal_params[] = {
393 { 0x0001, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
394 { 0x0010, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
395 { 0x0011, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
396 { 0x0012, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
397 { 0x0013, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
398 { 0x0014, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
399 { 0x0015, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
400 { 0x0016, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
401 { 0x0017, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
402 { 0x0018, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
403 { 0x0019, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
404 { 0x001a, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
405 { 0x001b, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
406 { 0x001c, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
407 { 0x001d, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
408 { 0x0020, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
409 { 0x0021, &hf_h248_pkg_dg_sig_params, h248_param_ber_integer, &implicit },
410 { 0, NULL, NULL, NULL }
413 /* Signals definitions */
414 static h248_pkg_sig_t h248_pkg_dg_signals[] = {
415 { 0X0001, &hf_h248_pkg_dg_sig_pt, &ett_h248_pkg_dg_sig_pt, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
416 { 0x0010, &hf_h248_pkg_dg_sig_d0, &ett_h248_pkg_dg_sig_d0, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
417 { 0x0011, &hf_h248_pkg_dg_sig_d1, &ett_h248_pkg_dg_sig_d1, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
418 { 0x0012, &hf_h248_pkg_dg_sig_d2, &ett_h248_pkg_dg_sig_d2, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
419 { 0x0013, &hf_h248_pkg_dg_sig_d3, &ett_h248_pkg_dg_sig_d3, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
420 { 0x0014, &hf_h248_pkg_dg_sig_d4, &ett_h248_pkg_dg_sig_d4, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
421 { 0x0015, &hf_h248_pkg_dg_sig_d5, &ett_h248_pkg_dg_sig_d5, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
422 { 0x0016, &hf_h248_pkg_dg_sig_d6, &ett_h248_pkg_dg_sig_d6, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
423 { 0x0017, &hf_h248_pkg_dg_sig_d7, &ett_h248_pkg_dg_sig_d7, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
424 { 0x0018, &hf_h248_pkg_dg_sig_d8, &ett_h248_pkg_dg_sig_d8, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
425 { 0x0019, &hf_h248_pkg_dg_sig_d9, &ett_h248_pkg_dg_sig_d9, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
426 { 0x001a, &hf_h248_pkg_dg_sig_da, &ett_h248_pkg_dg_sig_da, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
427 { 0x001b, &hf_h248_pkg_dg_sig_db, &ett_h248_pkg_dg_sig_db, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
428 { 0x001c, &hf_h248_pkg_dg_sig_dc, &ett_h248_pkg_dg_sig_dc, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
429 { 0x001d, &hf_h248_pkg_dg_sig_dd, &ett_h248_pkg_dg_sig_dd, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
430 { 0x0020, &hf_h248_pkg_dg_sig_ds, &ett_h248_pkg_dg_sig_ds, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
431 { 0x0021, &hf_h248_pkg_dg_sig_do, &ett_h248_pkg_dg_sig_do, h248_pkg_dg_signal_params,h248_pkg_dg_signals_vals },
432 { 0, NULL, NULL, NULL, NULL}
435 /* Packet definitions */
436 static h248_package_t h248_pkg_dg = {
437 0x0005,
438 &hf_h248_pkg_dg,
439 &ett_h248_pkg_dg,
440 h248_pkg_dg_props_vals,
441 h248_pkg_dg_signals_vals,
442 NULL, NULL, NULL,
443 h248_pkg_dg_signals, /* signals */
444 NULL, NULL
447 /* H248.1 E.6 DTMF Detection Package (dd) */
449 #if 0 /* XXX: The following 5 hf_... vars have no hf[] entry: package commented out */
450 static int hf_h248_pkg_dd;
451 static int hf_h248_pkg_dd_evt_std;
452 static int hf_h248_pkg_dd_evt_etd;
453 static int hf_h248_pkg_dd_evt_ltd;
454 static int hf_h248_pkg_dd_evt_ce;
455 #endif
456 #if 0
457 static int hf_h248_pkg_dd_evt_d0;
458 static int hf_h248_pkg_dd_evt_d1;
459 static int hf_h248_pkg_dd_evt_d2;
460 static int hf_h248_pkg_dd_evt_d3;
461 static int hf_h248_pkg_dd_evt_d4;
462 static int hf_h248_pkg_dd_evt_d5;
463 static int hf_h248_pkg_dd_evt_d6;
464 static int hf_h248_pkg_dd_evt_d7;
465 static int hf_h248_pkg_dd_evt_d8;
466 static int hf_h248_pkg_dd_evt_d9;
467 static int hf_h248_pkg_dd_evt_da;
468 static int hf_h248_pkg_dd_evt_db;
469 static int hf_h248_pkg_dd_evt_dc;
470 static int hf_h248_pkg_dd_evt_dd;
471 static int hf_h248_pkg_dd_evt_ds;
472 static int hf_h248_pkg_dd_evt_do;
473 static int hf_h248_pkg_dd_evt_ce_ds;
474 static int hf_h248_pkg_dd_evt_ce_meth;
475 static int hf_h248_pkg_dd_evt_tl_param;
476 static int hf_h248_pkg_dd_evt_dur_param;
477 static int hf_h248_pkg_dd_evt_tid_param;
478 #endif
480 #if 0
481 static int ett_h248_pkg_dd;
482 static int ett_h248_pkg_dd_evt_ce;
483 static int ett_h248_pkg_dd_evt_std;
484 static int ett_h248_pkg_dd_evt_etd;
485 static int ett_h248_pkg_dd_evt_ltd;
487 static const value_string h248_pkg_dd_props_vals[] = {
488 { 0x0000, "DTMF Detection Package - Annex E (dd)" },
489 { 0, NULL }
492 static const value_string h248_pkg_dd_event_vals[] = {
493 /* from tonedet */
494 { 0x0000, "Wildcard (*)" },
495 { 0x0001, "Start Tone Detected (std)" },
496 { 0x0002, "End Tone Detected (etd)" },
497 { 0x0003, "Long Tone Detected (ltd)" },
498 { 0x0004, "Digit Completion Map (ce)" },
500 /* from dd */
501 { 0x0010, "0 (d0)"},
502 { 0x0011, "1 (d1)"},
503 { 0x0012, "2 (d2)"},
504 { 0x0013, "3 (d3)"},
505 { 0x0014, "4 (d4)"},
506 { 0x0015, "5 (d5)"},
507 { 0x0016, "6 (d6)"},
508 { 0x0017, "7 (d7)"},
509 { 0x0018, "8 (d8)"},
510 { 0x0019, "9 (d9)"},
511 { 0x001a, "A (dA)"},
512 { 0x001b, "B (dB)"},
513 { 0x001c, "C (dC)"},
514 { 0x001d, "D (dD)"},
515 { 0x0020, "* (ds)"},
516 { 0x0021, "# (do)"},
517 {0,NULL}
520 static const value_string h248_pkg_dd_event_params_vals[] = {
521 { 0x0001, "Unambiguous Match (UM)" },
522 { 0x0002, "Partial Match (PM)" },
523 { 0x0003, "Full Match (FM)" },
524 { 0, NULL }
527 static const value_string h248_pkg_dd_ce_vals[] = {
528 { 0x0001, "Digit String (ds)" },
529 { 0x0003, "Termination Method (meth)" },
530 { 0, NULL }
533 static h248_pkg_param_t h248_pkg_dd_ds_events[] = {
534 { 0x0001, &hf_h248_pkg_dd_evt_ce_ds, h248_param_ber_octetstring, &implicit },
535 { 0x0003, &hf_h248_pkg_dd_evt_ce_meth, h248_param_ber_integer, &implicit },
536 { 0, NULL, NULL, NULL }
539 static const h248_pkg_param_t h248_pkg_dd_event_params[] = {
540 { 0x0001, &hf_h248_pkg_dd_evt_tl_param, h248_param_ber_integer, &implicit },
541 { 0x0002, &hf_h248_pkg_dd_evt_dur_param, h248_param_ber_integer, &implicit },
542 { 0x0003, &hf_h248_pkg_dd_evt_tid_param, h248_param_ber_integer, &implicit },
543 { 0, NULL, NULL, NULL }
547 static h248_pkg_evt_t h248_pkg_dd_events[] = {
548 { 0x0001, &hf_h248_pkg_dd_evt_std, &ett_h248_pkg_dd_evt_std, h248_pkg_dd_event_params, h248_pkg_dd_event_vals },
549 { 0x0002, &hf_h248_pkg_dd_evt_etd, &ett_h248_pkg_dd_evt_etd, h248_pkg_dd_event_params, h248_pkg_dd_event_vals },
550 { 0x0003, &hf_h248_pkg_dd_evt_ltd, &ett_h248_pkg_dd_evt_ltd, h248_pkg_dd_event_params, h248_pkg_dd_event_vals },
551 { 0x0004, &hf_h248_pkg_dd_evt_ce, &ett_h248_pkg_dd_evt_ce, h248_pkg_dd_ds_events, h248_pkg_dd_ce_vals},
552 { 0, NULL, NULL, NULL, NULL }
555 static h248_package_t h248_pkg_dd = {
556 0x0006,
557 &hf_h248_pkg_dd,
558 &ett_h248_pkg_dd,
559 h248_pkg_dd_props_vals,
560 NULL,
561 h248_pkg_dd_event_vals,
562 NULL,
563 NULL, NULL,
564 h248_pkg_dd_events,
565 NULL
567 #endif
569 /* H.248.1.E.7 Call Progress Tones Generator package */
570 static int hf_h248_pkg_cg;
571 static int hf_h248_pkg_cg_sig_pt;
572 static int hf_h248_pkg_cg_sig_pt_tl;
573 static int hf_h248_pkg_cg_sig_pt_ind;
574 static int hf_h248_pkg_cg_sig_pt_btd;
575 static int hf_h248_pkg_cg_sig_dt;
576 static int hf_h248_pkg_cg_sig_rt;
577 static int hf_h248_pkg_cg_sig_bt;
578 static int hf_h248_pkg_cg_sig_ct;
579 static int hf_h248_pkg_cg_sig_sit;
580 static int hf_h248_pkg_cg_sig_wt;
581 static int hf_h248_pkg_cg_sig_prt;
582 static int hf_h248_pkg_cg_sig_cw;
583 static int hf_h248_pkg_cg_sig_cr;
585 static int ett_h248_pkg_cg_params;
586 static int ett_h248_pkg_cg_sig_pt;
587 static int ett_h248_pkg_cg_sig_dt;
588 static int ett_h248_pkg_cg_sig_rt;
589 static int ett_h248_pkg_cg_sig_bt;
590 static int ett_h248_pkg_cg_sig_ct;
591 static int ett_h248_pkg_cg_sig_sit;
592 static int ett_h248_pkg_cg_sig_wt;
593 static int ett_h248_pkg_cg_sig_prt;
594 static int ett_h248_pkg_cg_sig_cw;
595 static int ett_h248_pkg_cg_sig_cr;
597 static const value_string h248_pkg_cg_props_vals[] = {
598 { 0x0000, "Call Progress Tones Generator - Annex E (cg)" },
599 { 0, NULL }
602 static const value_string h248_pkg_cg_sig_cd_evt_vals[] = {
603 { 0x0001, "Play Tone (pt)" },
604 { 0x0030, "Dial Tone"},
605 { 0x0031, "Ring Tone" },
606 { 0x0032, "Busy Tone" },
607 { 0x0033, "Congestion Tone" },
608 { 0x0034, "Special Information Tone" },
609 { 0x0035, "(Recording) Warning Tone" },
610 { 0x0036, "Payphone Recognition Tone" },
611 { 0x0037, "Call Waiting Tone" },
612 { 0x0038, "Caller Waiting Tone" },
613 { 0, NULL }
616 static const value_string h248_pkg_cg_sig_pt_param_vals[] = {
617 { 0x0001, "Tone ID List (tl)"},
618 { 0x0002, "Inter-signal duration (ind)" },
619 { 0x0003, "Tone Direction (td)" },
620 { 0, NULL }
623 static const value_string h248_pkg_cg_pt_btd_param_vals[] = {
624 { 0x0001, "External (EXT)" },
625 { 0x0002, "Internal (INT)" },
626 { 0x0003, "Both (BOTH)" },
627 { 0, NULL }
630 static const h248_pkg_param_t h248_pkg_cg_sig_pt_params[] = {
631 { 0x0001, &hf_h248_pkg_cg_sig_pt_tl, h248_param_ber_integer, &implicit },
632 { 0x0002, &hf_h248_pkg_cg_sig_pt_ind, h248_param_ber_integer, &implicit },
633 { 0x0003, &hf_h248_pkg_cg_sig_pt_btd, h248_param_ber_integer, &implicit },
634 { 0, NULL, NULL, NULL}
637 static const h248_pkg_sig_t h248_pkg_cg_signals_cd_events[] = {
638 { 0x0001, &hf_h248_pkg_cg_sig_pt, &ett_h248_pkg_cg_sig_pt, h248_pkg_cg_sig_pt_params, h248_pkg_cg_sig_pt_param_vals },
639 { 0x0030, &hf_h248_pkg_cg_sig_dt, &ett_h248_pkg_cg_sig_dt, h248_pkg_cg_sig_pt_params, h248_pkg_cg_sig_pt_param_vals },
640 { 0x0031, &hf_h248_pkg_cg_sig_rt, &ett_h248_pkg_cg_sig_rt, h248_pkg_cg_sig_pt_params, h248_pkg_cg_sig_pt_param_vals },
641 { 0x0032, &hf_h248_pkg_cg_sig_bt, &ett_h248_pkg_cg_sig_bt, h248_pkg_cg_sig_pt_params, h248_pkg_cg_sig_pt_param_vals },
642 { 0x0033, &hf_h248_pkg_cg_sig_ct, &ett_h248_pkg_cg_sig_ct, h248_pkg_cg_sig_pt_params, h248_pkg_cg_sig_pt_param_vals },
643 { 0x0034, &hf_h248_pkg_cg_sig_sit, &ett_h248_pkg_cg_sig_sit, h248_pkg_cg_sig_pt_params, h248_pkg_cg_sig_pt_param_vals },
644 { 0x0035, &hf_h248_pkg_cg_sig_wt, &ett_h248_pkg_cg_sig_wt, h248_pkg_cg_sig_pt_params, h248_pkg_cg_sig_pt_param_vals },
645 { 0x0036, &hf_h248_pkg_cg_sig_prt, &ett_h248_pkg_cg_sig_prt, h248_pkg_cg_sig_pt_params, h248_pkg_cg_sig_pt_param_vals },
646 { 0x0037, &hf_h248_pkg_cg_sig_cw, &ett_h248_pkg_cg_sig_cw, h248_pkg_cg_sig_pt_params, h248_pkg_cg_sig_pt_param_vals },
647 { 0x0038, &hf_h248_pkg_cg_sig_cr, &ett_h248_pkg_cg_sig_cr, h248_pkg_cg_sig_pt_params, h248_pkg_cg_sig_pt_param_vals },
648 { 0, NULL, NULL, NULL, NULL }
651 static h248_package_t h248_pkg_cg = {
652 0x0007,
653 &hf_h248_pkg_cg,
654 &ett_h248_pkg_cg_params,
655 h248_pkg_cg_props_vals,
656 h248_pkg_cg_sig_cd_evt_vals,
657 NULL,NULL, /* value_stings: event, stats */
658 NULL, /* dissectors: prop */
659 h248_pkg_cg_signals_cd_events,
660 NULL, /* dissectors: events */
661 NULL /* dissectors: stats */
664 /* H.248.1 E.8 - Call Tones Detection Package */
665 static int hf_h248_pkg_cd;
667 static int ett_h248_pkg_cd;
669 static const value_string h248_pkg_cd_params_vals[] = {
670 { 0x0000, "Call Progress Tones Detection Package (cd)" },
671 { 0, NULL }
674 static h248_package_t h248_pkg_cd = {
675 0x0008,
676 &hf_h248_pkg_cd,
677 &ett_h248_pkg_cd,
678 h248_pkg_cd_params_vals,
679 NULL,
680 h248_pkg_cg_sig_cd_evt_vals,
681 NULL,
682 NULL,NULL,
683 (const h248_pkg_evt_t *)(const void*)h248_pkg_cg_signals_cd_events,
684 NULL
687 /* H.248.1 E.9 Analog Line Supervision Package */
688 static int hf_h248_pkg_al;
689 static int hf_h248_pkg_al_sig_cadence;
690 static int hf_h248_pkg_al_sig_cadence_on_off;
691 /* static int hf_h248_pkg_al_sig_freq; */
692 static int hf_h248_pkg_al_evt_onhook;
693 static int hf_h248_pkg_al_evt_offhook;
694 static int hf_h248_pkg_al_evt_flashhook;
695 static int hf_h248_pkg_al_evt_onhook_par_strict;
696 static int hf_h248_pkg_al_evt_offhook_par_strict;
697 static int hf_h248_pkg_al_evt_onhook_par_init;
698 static int hf_h248_pkg_al_evt_offhook_par_init;
699 static int hf_h248_pkg_al_evt_flashhook_par_mindur;
701 static int ett_h248_pkg_al;
702 static int ett_h248_pkg_al_sig_cadence;
703 static int ett_h248_pkg_al_sig_freq;
704 static int ett_h248_pkg_al_evt_onhook;
705 static int ett_h248_pkg_al_evt_offhook;
706 static int ett_h248_pkg_al_evt_flashhook;
708 static const value_string h248_pkg_al_props_vals[] = {
709 { 0x0000, "Analog Line Supervision Package - Annex E (al)" },
710 { 0, NULL }
713 static const value_string h248_pkg_al_sig_params_vals[] = {
714 { 1, "One" },
715 { 2, "Two" },
716 { 0x0006, "Cadence" },
717 { 0x0007, "Frequency (Hz)" },
718 { 0, NULL }
721 static const value_string h248_pkg_al_evt_onhook_params_vals[] = {
722 { 0x0001, "strict"},
723 { 0x0002, "init"},
724 { 0, NULL}
727 static const value_string h248_pkg_al_evt_flashhook_params_vals[] = {
728 { 0x0001, "mindur"},
729 { 0, NULL}
732 /* Packet definitions */
733 static const value_string h248_pkg_al_sig_evts_vals[] = {
734 /* Signals */
735 { 0x0002, "ri (Ring)" },
736 /* Events */
737 { 0x0004, "on (On-hook)" },
738 { 0x0005, "off (Off-hook)" },
739 { 0x0006, "fl (Flashhook)" },
740 {0, NULL},
743 /* Events definitions */
744 static const value_string h248_pkg_al_evt_onhook_strict_vals[] = {
745 { 0, "exact"},
746 { 1, "state"},
747 { 2, "failWrong"},
748 { 0, NULL }
751 static const true_false_string h248_pkg_al_evt_onhook_par_init_vals = {
752 "already on-hook",
753 "actual state transition to on-hook"
756 static const true_false_string h248_pkg_al_evt_offhook_par_init_vals = {
757 "already off-hook",
758 "actual state transition to off-hook"
762 static h248_pkg_param_t h248_pkg_al_sig_cadence[] = {
763 { 0x0006, &hf_h248_pkg_al_sig_cadence_on_off, h248_param_ber_octetstring, &h248_e_implicit },
764 { 0, NULL, NULL, NULL }
767 static h248_pkg_param_t h248_pkg_al_evt_onhook_params[] = {
768 { 0x0001, &hf_h248_pkg_al_evt_onhook_par_strict, h248_param_ber_integer, &h248_e_implicit },
769 { 0x0002, &hf_h248_pkg_al_evt_onhook_par_init, h248_param_ber_boolean, &h248_e_implicit },
770 { 0, NULL, NULL, NULL}
773 static h248_pkg_param_t h248_pkg_al_evt_offhook_params[] = {
774 { 0x0001, &hf_h248_pkg_al_evt_offhook_par_strict, h248_param_ber_integer, &h248_e_implicit },
775 { 0x0002, &hf_h248_pkg_al_evt_offhook_par_init, h248_param_ber_boolean, &h248_e_implicit },
776 { 0, NULL, NULL, NULL}
779 static h248_pkg_param_t h248_pkg_al_evt_flashhook_params[] = {
780 { 0x0001, &hf_h248_pkg_al_evt_flashhook_par_mindur, h248_param_ber_integer, &h248_e_implicit },
781 { 0, NULL, NULL, NULL}
784 static h248_pkg_sig_t h248_pkg_al_sig[] = {
785 { 0x0002, &hf_h248_pkg_al_sig_cadence, &ett_h248_pkg_al_sig_cadence, h248_pkg_al_sig_cadence, h248_pkg_al_sig_params_vals},
786 { 0, NULL, NULL, NULL, NULL }
789 static h248_pkg_evt_t h248_pkg_al_evts[] = {
790 { 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},
791 { 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 },
792 { 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 },
794 { 0, NULL, NULL, NULL, NULL}
797 static h248_package_t h248_pkg_al = {
798 0x0009,
799 &hf_h248_pkg_al,
800 &ett_h248_pkg_al,
801 h248_pkg_al_props_vals,
802 h248_pkg_al_sig_evts_vals,
803 h248_pkg_al_sig_evts_vals,
804 NULL,
805 NULL, /* Properties */
806 h248_pkg_al_sig, /* signals */
807 h248_pkg_al_evts, /* events */
808 NULL /* statistics */
812 /* H.248.1 E.10 - Basic Continuity Package */
813 static int hf_h248_pkg_ct;
814 static int ett_h248_pkg_ct;
816 static const value_string h248_pkg_ct_props_vals[] = {
817 { 0x0000, "Basic Continuity Package (ct)" },
818 { 0, NULL }
821 static const value_string h248_pkg_ct_evt_sig_vals[] = {
822 { 0x0003, "Continuity Test (ct)" },
823 { 0x0004, "Respond (rsp)" },
824 { 0x0005, "Completion (cmp)" },
825 { 0, NULL }
828 static h248_package_t h248_pkg_ct = {
829 0x000a,
830 &hf_h248_pkg_ct,
831 &ett_h248_pkg_ct,
832 h248_pkg_ct_props_vals,
833 h248_pkg_ct_evt_sig_vals,
834 h248_pkg_ct_evt_sig_vals,
835 NULL,
836 NULL, NULL, NULL, NULL
839 /* H.248.1 E.11 Network Package */
840 static int hf_h248_pkg_nt;
841 static int ett_h248_pkg_nt;
843 static const value_string h248_pkg_nt_props_evt_stats_vals[] = {
844 { 0x0000, "Network Package (nt)" },
845 { 0x0001, "Duration (dur)" },
846 { 0x0002, "Octets Sent (os)" },
847 { 0x0003, "Octets Received (or)" },
848 { 0x0005, "Network Failure (netfail)" },
849 { 0x0006, "Quality Alert (qualert)" },
850 { 0x0007, "Maximum Jitter Buffer (jit)" },
851 { 0, NULL }
854 static h248_package_t h248_pkg_nt = {
855 0x000b,
856 &hf_h248_pkg_nt,
857 &ett_h248_pkg_nt,
858 h248_pkg_nt_props_evt_stats_vals,
859 h248_pkg_nt_props_evt_stats_vals,
860 NULL,
861 h248_pkg_nt_props_evt_stats_vals,
862 NULL, NULL, NULL, NULL
865 /* H.248.1 E.12 RTP package */
866 static int hf_h248_pkg_rtp;
867 static int hf_h248_pkg_rtp_stat_ps;
869 static int ett_h248_pkg_rtp;
871 #if 0
872 static const value_string h248_pkg_rtp_stat_vals[] _U_ = {
873 { 0x0004, "ps"},
874 { 0, NULL}
876 #endif
878 static const value_string h248_pkg_rtp_props_vals[] = {
879 { 0x0000, "RTP Package - Annex E (rtp)" },
880 { 0x0001, "pltrans (Payload Transition)" },
881 { 0x0004, "ps (Packets Sent)" },
882 { 0x0005, "pr (Packets Received)" },
883 { 0x0006, "pl (Packet Loss)" },
884 { 0x0007, "jit (Jitter)" },
885 { 0x0008, "delay (Delay)" },
886 {0, NULL},
889 static h248_pkg_stat_t h248_pkg_rtp_stat[] = {
890 { 0x0004, &hf_h248_pkg_rtp_stat_ps, &ett_h248_pkg_rtp, NULL,NULL},
893 /* Packet definitions */
894 static h248_package_t h248_pkg_rtp = {
895 0x000c,
896 &hf_h248_pkg_rtp,
897 &ett_h248_pkg_rtp,
898 h248_pkg_rtp_props_vals,
899 NULL,
900 NULL,
901 NULL,
902 NULL, /* Properties */
903 NULL, /* signals */
904 NULL, /* events */
905 h248_pkg_rtp_stat /* statistics */
908 /* H.248.1 E.13 TDM Circuit Package */
909 static int hf_h248_pkg_tdmc;
910 static int hf_h248_pkg_tdmc_ec;
911 static int hf_h248_pkg_tdmc_gain;
913 static int ett_h248_pkg_tdmc;
915 static const value_string h248_pkg_tdmc_props_vals[] = {
916 { 0x0000, "TDM Circuit Package - Annex E (tdmc)" },
917 { 0x0008, "Echo Cancellation (ec)"},
918 { 0x000a, "Gain Control (gain)"},
919 { 0, NULL}
923 static h248_pkg_param_t h248_pkg_tdmc_props[] = {
924 { 0x0008, &hf_h248_pkg_tdmc_ec, h248_param_ber_boolean, &h248_e_implicit },
925 { 0x000a, &hf_h248_pkg_tdmc_gain, h248_param_ber_integer, &h248_e_implicit },
926 { 0, NULL, NULL, NULL}
929 static h248_package_t h248_pkg_tdmc = {
930 0x000d,
931 &hf_h248_pkg_tdmc,
932 &ett_h248_pkg_tdmc,
933 h248_pkg_tdmc_props_vals,
934 NULL,
935 NULL,
936 NULL,
937 h248_pkg_tdmc_props, /* Properties */
938 NULL, /* signals */
939 NULL, /* events */
940 NULL /* statistics */
945 void proto_register_h248_annex_e(void) {
946 static hf_register_info hf[] = {
947 /* H.248.1 E.1 Generic Package */
948 { &hf_h248_pkg_generic, { "Generic Package", "h248.generic", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
949 { &hf_h248_pkg_generic_cause_evt, { "Cause Event", "h248.generic.cause", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
950 { &hf_h248_pkg_generic_cause_gencause, { "Generic Cause", "h248.generic.cause.gencause", FT_UINT32, BASE_HEX, VALS(h248_pkg_generic_cause_gencause_vals), 0, NULL, HFILL }},
951 { &hf_h248_pkg_generic_cause_failurecause, { "Generic Cause", "h248.generic.cause.failurecause", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
952 { &hf_h248_pkg_generic_sc_evt, {"Signal Completion2","h248.generic.sc",FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
953 { &hf_h248_pkg_generic_sc_sig_id, { "Signal Identity", "h248.generic.sc.sig_id", FT_BYTES, BASE_NONE, NULL , 0, NULL, HFILL }},
954 { &hf_h248_pkg_generic_sc_meth, { "Termination Method", "h248.generic.sc.meth", FT_UINT32, BASE_DEC, VALS(h248_pkg_generic_sc_vals) , 0, NULL, HFILL }},
955 { &hf_h248_pkg_generic_sc_slid, { "Signal List ID", "h248.generic.sc.slid", FT_UINT32, BASE_DEC, NULL , 0, NULL, HFILL }},
956 { &hf_h248_pkg_generic_sc_rid, { "Request ID", "h248.generic.sc.rid", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
958 /* H.248.1.E 3 Tone Generator (tonegeg) */
959 { &hf_h248_pkg_tonegen, { "Tone Generator (tonegen)", "h248.tonegen", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
960 { &hf_h248_pkg_tonegen_sig_pt, { "Play Tone (pt)", "h248.tonegen.pg", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
961 { &hf_h248_pkg_tonegen_sig_pt_tl, { "Tone List ID (tl)", "h248.tonegen.pt.tl", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
962 { &hf_h248_pkg_tonegen_sig_pt_ind, { "Inter-signal Duration (ind)", "h248.tonegem.pt.ind", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
963 { &hf_h248_pkg_tonegen_sig_pg_btd, { "Tone Direction (btd)", "h248.tonegen.pt.btd", FT_UINT32, BASE_HEX, VALS(h248_pkg_tonegen_pt_btd_param_vals), 0, NULL, HFILL }},
965 /* H.248.1 E.4 Tone Detection (tonedet) */
966 { &hf_h248_pkg_tonedet, { "Tone Detection Package", "h248.tonedet", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
967 { &hf_h248_pkg_tonedet_evt_std, { "Start Tone", "h248.tonedet.std", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
968 { &hf_h248_pkg_tonedet_evt_etd, { "End Tone", "h248.tonedet.etd", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
969 { &hf_h248_pkg_tonedet_evt_ltd, { "Long Tone", "h248.tonedet.ltd", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
970 { &hf_h248_pkg_tonedet_evt_tl_param, {"Tone Detail", "h248.tonedet.evt.tl", FT_UINT16, BASE_DEC, VALS(h248_pkg_tonedet_tl_params_vals), 0, NULL, HFILL }},
971 { &hf_h248_pkg_tonedet_evt_dur_param, {"Duration (ms)", "h248.tonedet.evt.dur", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
972 { &hf_h248_pkg_tonedet_evt_tid_param, {"Tone ID", "h248.tonedet.evt.tid", FT_UINT16, BASE_DEC, VALS(h248_pkg_tonedet_tl_params_vals), 0, NULL, HFILL }},
975 /* H.248.1 E.5 Basic DTMF Generator Package */
976 { &hf_h248_pkg_dg, { "Basic DTMF Generator Package (dg)", "h248.dg", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
977 { &hf_h248_pkg_dg_sig_pt, { "Play Tone", "h248.dg.pt", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
978 { &hf_h248_pkg_dg_sig_d0, { "Digit 0", "h248.dg.d0", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
979 { &hf_h248_pkg_dg_sig_d1, { "Digit 1", "h248.dg.d1", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
980 { &hf_h248_pkg_dg_sig_d2, { "Digit 2", "h248.dg.d2", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
981 { &hf_h248_pkg_dg_sig_d3, { "Digit 3", "h248.dg.d3", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
982 { &hf_h248_pkg_dg_sig_d4, { "Digit 4", "h248.dg.d4", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
983 { &hf_h248_pkg_dg_sig_d5, { "Digit 5", "h248.dg.d5", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
984 { &hf_h248_pkg_dg_sig_d6, { "Digit 6", "h248.dg.d6", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
985 { &hf_h248_pkg_dg_sig_d7, { "Digit 7", "h248.dg.d7", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
986 { &hf_h248_pkg_dg_sig_d8, { "Digit 8", "h248.dg.d8", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
987 { &hf_h248_pkg_dg_sig_d9, { "Digit 9", "h248.dg.d9", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
988 { &hf_h248_pkg_dg_sig_da, { "Digit A", "h248.dg.da", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
989 { &hf_h248_pkg_dg_sig_db, { "Digit B", "h248.dg.db", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
990 { &hf_h248_pkg_dg_sig_dc, { "Digit C", "h248.dg.dc", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
991 { &hf_h248_pkg_dg_sig_dd, { "Digit D", "h248.dg.dd", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
992 { &hf_h248_pkg_dg_sig_ds, { "Digit *", "h248.dg.ds", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
993 { &hf_h248_pkg_dg_sig_do, { "Digit #", "h248.dg.do", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
994 { &hf_h248_pkg_dg_sig_params, { "Event Parameters", "h248.dg.signal.direction", FT_UINT16, BASE_DEC, VALS(h248_pkg_dg_sig_btd_vals), 0, NULL, HFILL }},
996 /* H.248.1 E.6 DTMF Detection Package */
997 #if 0
998 { &hf_h248_pkg_dd_evt_ce_ds, { "Digit(s) Detected", "h248.dd.ce.ds", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
999 { &hf_h248_pkg_dd_evt_ce_meth, { "Method Used", "h248.dd.ce.meth", FT_UINT16, BASE_DEC, VALS(h248_pkg_dd_event_params_vals), 0, NULL, HFILL }},
1000 { &hf_h248_pkg_dd_evt_tl_param, {"Tone Detail", "h248.dd.evt.tl", FT_UINT16, BASE_DEC, VALS(h248_pkg_dd_event_vals), 0, NULL, HFILL }},
1001 { &hf_h248_pkg_dd_evt_dur_param, {"Duration (ms)", "h248.dd.evt.dur", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1002 { &hf_h248_pkg_dd_evt_tid_param, {"Tone ID", "h248.dd.evt.tid", FT_UINT16, BASE_DEC, VALS(h248_pkg_dd_event_vals), 0, NULL, HFILL }},
1003 #endif
1005 /* H.248.1.E.7 Call Progress Tones Generator package */
1006 { &hf_h248_pkg_cg, { "Call Progress Tones Generator", "h248.cg", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1007 { &hf_h248_pkg_cg_sig_pt, { "Play Tone (pt)", "h248.cg.pt", FT_UINT16, BASE_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1008 { &hf_h248_pkg_cg_sig_pt_tl, {"Tone List", "h248.cg.pt.tl", FT_UINT16, BASE_DEC_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1009 { &hf_h248_pkg_cg_sig_pt_ind, { "Inter-Signal Duration (ind)", "h248.cg.pt.ind", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1010 { &hf_h248_pkg_cg_sig_pt_btd, { "Tone Direction (btd)", "h248.cg.pt.btd", FT_UINT8, BASE_DEC, VALS(h248_pkg_cg_pt_btd_param_vals), 0, NULL, HFILL }},
1012 { &hf_h248_pkg_cg_sig_dt, { "Dial Tone (dt)", "h248.cg.dt", FT_UINT16, BASE_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1013 { &hf_h248_pkg_cg_sig_rt, { "Ring Tone (rt)", "h248.cg.rt",FT_UINT16, BASE_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1014 { &hf_h248_pkg_cg_sig_bt, { "Buzy Tone (bt)", "h248.cg.bt", FT_UINT16, BASE_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1015 { &hf_h248_pkg_cg_sig_ct, { "Congestion Tone (ct)", "h248.cg.ct", FT_UINT16, BASE_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1016 { &hf_h248_pkg_cg_sig_sit, { "Special Information Tone (sit)", "h248.cg.sit", FT_UINT16, BASE_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1017 { &hf_h248_pkg_cg_sig_wt, { "(Recording) Warning Tone (wt)", "h248.cg.wt", FT_UINT16, BASE_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1018 { &hf_h248_pkg_cg_sig_prt, { "Payphone Recognition Tone (prt)", "h248.cg.prt", FT_UINT16, BASE_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1019 { &hf_h248_pkg_cg_sig_cw, { "Call Waiting Tone (wt)", "h248.cg.cw", FT_UINT16, BASE_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1020 { &hf_h248_pkg_cg_sig_cr, { "Caller Waiting Tone (rt)", "h248.cg.cr", FT_UINT16, BASE_HEX, VALS(h248_pkg_cg_sig_cd_evt_vals), 0, NULL, HFILL }},
1022 /* H.248.1 E.8 Call Progress Tones Detection Package */
1023 { &hf_h248_pkg_cd, { "Call Progress Tones Detection Package", "h248.cd", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1025 /* H.248.1 E.9 Analog Line Supervision Package */
1026 { &hf_h248_pkg_al, { "Analog Line Supervision Package", "h248.al", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1027 { &hf_h248_pkg_al_sig_cadence, { "Cadence", "h248.al.sig.cadence", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1028 { &hf_h248_pkg_al_sig_cadence_on_off, { "On/Off Cadence", "h248.al.sig.cadence_on_off", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1029 #if 0
1030 { &hf_h248_pkg_al_sig_freq, { "Ring Frequency", "h248.al.sig.freq", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1031 #endif
1032 { &hf_h248_pkg_al_evt_onhook, { "onhook", "h248.al.onhook", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1033 { &hf_h248_pkg_al_evt_offhook, { "offhook", "h248.al.offhook", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1034 { &hf_h248_pkg_al_evt_flashhook, { "flashhook", "h248.al.flashhook", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1035 { &hf_h248_pkg_al_evt_onhook_par_strict, { "strict", "h248.al.ev.onhook.strict", FT_UINT8, BASE_DEC, VALS(h248_pkg_al_evt_onhook_strict_vals), 0, NULL, HFILL }},
1036 { &hf_h248_pkg_al_evt_onhook_par_init, { "init", "h248.al.ev.onhook.init", FT_BOOLEAN, BASE_NONE, TFS(&h248_pkg_al_evt_onhook_par_init_vals), 0x0, NULL, HFILL }},
1037 { &hf_h248_pkg_al_evt_offhook_par_strict, { "strict", "h248.al.ev.offhook.strict", FT_UINT8, BASE_DEC, VALS(h248_pkg_al_evt_onhook_strict_vals), 0, NULL, HFILL }},
1038 { &hf_h248_pkg_al_evt_offhook_par_init, { "init", "h248.al.ev.onhook.init", FT_BOOLEAN, BASE_NONE, TFS(&h248_pkg_al_evt_offhook_par_init_vals), 0x0, NULL, HFILL }},
1039 { &hf_h248_pkg_al_evt_flashhook_par_mindur, { "Minimum duration in ms", "h248.al.ev.flashhook.mindur", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
1041 /* H.248.1 E.10 - Basic Continuity Package */
1042 { &hf_h248_pkg_ct, { "Basic Continuity package", "h248.ct", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1044 /* H.248.1 E.11 Network Package */
1045 { &hf_h248_pkg_nt, { "Network package", "h248.nt", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1047 /* H.248.1 E.12 RTP package */
1048 { &hf_h248_pkg_rtp, { "RTP package", "h248.rtp", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1049 { &hf_h248_pkg_rtp_stat_ps, { "Packets Sent", "h248.rtp.stat.ps", FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL }},
1051 /* H.248.1 E.13 TDM Circuit Package */
1052 { &hf_h248_pkg_tdmc, { "TDM Circuit Package", "h248.tdmc", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
1053 { &hf_h248_pkg_tdmc_ec, { "Echo Cancellation", "h248.tdmc.ec", FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x0, NULL, HFILL }},
1054 { &hf_h248_pkg_tdmc_gain, { "Gain", "h248.tdmc.gain", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
1057 static int *ett[] = {
1058 /* generic 0x0001 */
1059 &ett_h248_pkg_generic_cause_evt,
1060 &ett_h248_pkg_generic,
1061 &ett_h248_pkg_generic_sc_evt,
1063 #if 0
1064 &ett_h248_pkg_root_params,
1065 #endif
1067 &ett_h248_pkg_tonegen_params,
1069 /* tonegen 0x0003 */
1070 &ett_h248_pkg_tonedet,
1071 &ett_h248_pkg_tonedet_evt_std,
1072 &ett_h248_pkg_tonedet_evt_etd,
1073 &ett_h248_pkg_tonedet_evt_ltd,
1075 /* dg 0x0005 */
1076 &ett_h248_pkg_dg,
1077 &ett_h248_pkg_dg_sig_pt,
1078 &ett_h248_pkg_dg_sig_d0,
1079 &ett_h248_pkg_dg_sig_d1,
1080 &ett_h248_pkg_dg_sig_d2,
1081 &ett_h248_pkg_dg_sig_d3,
1082 &ett_h248_pkg_dg_sig_d4,
1083 &ett_h248_pkg_dg_sig_d5,
1084 &ett_h248_pkg_dg_sig_d6,
1085 &ett_h248_pkg_dg_sig_d7,
1086 &ett_h248_pkg_dg_sig_d8,
1087 &ett_h248_pkg_dg_sig_d9,
1088 &ett_h248_pkg_dg_sig_da,
1089 &ett_h248_pkg_dg_sig_db,
1090 &ett_h248_pkg_dg_sig_dc,
1091 &ett_h248_pkg_dg_sig_dd,
1092 &ett_h248_pkg_dg_sig_ds,
1093 &ett_h248_pkg_dg_sig_do,
1095 /* dd 0x0006 */
1096 #if 0
1097 &ett_h248_pkg_dd,
1098 &ett_h248_pkg_dd_evt_std,
1099 &ett_h248_pkg_dd_evt_ltd,
1100 &ett_h248_pkg_dd_evt_etd,
1101 &ett_h248_pkg_dd_evt_ce,
1102 #endif
1104 /* 0x0007 Package cg */
1105 &ett_h248_pkg_cg_params,
1106 &ett_h248_pkg_cg_sig_pt,
1107 &ett_h248_pkg_tonegen_sig_pt,
1108 &ett_h248_pkg_cg_sig_dt,
1109 &ett_h248_pkg_cg_sig_rt,
1110 &ett_h248_pkg_cg_sig_bt,
1111 &ett_h248_pkg_cg_sig_ct,
1112 &ett_h248_pkg_cg_sig_sit,
1113 &ett_h248_pkg_cg_sig_wt,
1114 &ett_h248_pkg_cg_sig_prt,
1115 &ett_h248_pkg_cg_sig_cw,
1116 &ett_h248_pkg_cg_sig_cr,
1118 /* cd 0x0008 */
1119 &ett_h248_pkg_cd,
1121 /* al 0x0009 */
1122 &ett_h248_pkg_al,
1123 &ett_h248_pkg_al_sig_cadence,
1124 &ett_h248_pkg_al_sig_freq,
1125 &ett_h248_pkg_al_evt_flashhook,
1126 &ett_h248_pkg_al_evt_offhook,
1127 &ett_h248_pkg_al_evt_onhook,
1129 /* ct 0x000a */
1130 &ett_h248_pkg_ct,
1132 /* nt 0x000b */
1133 &ett_h248_pkg_nt,
1135 /* rtp 0x000c */
1136 &ett_h248_pkg_rtp,
1138 /* tdmc 0x000d */
1139 &ett_h248_pkg_tdmc
1142 proto_h248_annex_E = proto_register_protocol(PNAME, PSNAME, PFNAME);
1144 proto_register_field_array(proto_h248_annex_E, hf, array_length(hf));
1146 proto_register_subtree_array(ett, array_length(ett));
1148 /* MERGE_PKG_LOW is use to allow other custom version of these
1149 *H248 package to take presidence if already loaded */
1150 h248_register_package(&h248_pkg_generic,MERGE_PKG_LOW); /* 0x0001 */
1151 /* h248_register_package(&h248_pkg_root,MERGE_PKG_LOW); */ /* 0x0002 */
1152 h248_register_package(&h248_pkg_tonegen,MERGE_PKG_LOW); /* 0x0003 */
1153 h248_register_package(&h248_pkg_tonedet,MERGE_PKG_LOW); /* 0x0004 */
1154 h248_register_package(&h248_pkg_dg,MERGE_PKG_LOW); /* 0X0005 */
1155 /* h248_register_package(&h248_pkg_dd,MERGE_PKG_LOW); */ /* 0x0006 */
1156 h248_register_package(&h248_pkg_cg,MERGE_PKG_LOW); /* 0x0007 */
1157 h248_register_package(&h248_pkg_cd, MERGE_PKG_LOW); /* 0x0008 */
1158 h248_register_package(&h248_pkg_al,MERGE_PKG_LOW); /* 0x0009 */
1159 h248_register_package(&h248_pkg_ct, MERGE_PKG_LOW); /* 0x000a */
1160 h248_register_package(&h248_pkg_nt, MERGE_PKG_LOW); /* 0x000b */
1161 h248_register_package(&h248_pkg_rtp,MERGE_PKG_LOW); /* 0x000c */
1162 h248_register_package(&h248_pkg_tdmc,MERGE_PKG_LOW); /* 0x000d */
1166 * Editor modelines - https://www.wireshark.org/tools/modelines.html
1168 * Local variables:
1169 * c-basic-offset: 8
1170 * tab-width: 8
1171 * indent-tabs-mode: t
1172 * End:
1174 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
1175 * :indentSize=8:tabSize=8:noTabs=false: