Coverage Report

Created: 2026-06-30 07:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-ua3g.c
Line
Count
Source
1
/* packet-ua3g.c
2
 * Routines for UA3G (Universal Alcatel) packet dissection.
3
 * Copyright 2012, Alcatel-Lucent Enterprise <lars.ruoff@alcatel-lucent.com>
4
 * Copyright 2017, Alcatel-Lucent Enterprise <nicolas.bertin@al-enterprise.com>
5
 *
6
 * Wireshark - Network traffic analyzer
7
 * By Gerald Combs <gerald@wireshark.org>
8
 * Copyright 1998 Gerald Combs
9
 *
10
 * SPDX-License-Identifier: GPL-2.0-or-later
11
 */
12
13
#include "config.h"
14
15
#include <epan/packet.h>
16
#include <epan/prefs.h>
17
#include <epan/tfs.h>
18
#include <epan/unit_strings.h>
19
20
#include <wsutil/array.h>
21
#include "packet-rtp.h"
22
#include "packet-rtcp.h"
23
24
#include "packet-uaudp.h"
25
26
void proto_register_ua3g(void);
27
void proto_reg_handoff_ua3g(void);
28
/*-----------------------------------------------------------------------------
29
    Globals
30
    ---------------------------------------------------------------------------*/
31
32
#if 0
33
static dissector_table_t ua3g_opcode_dissector_table;
34
#endif
35
36
static int  proto_ua3g;
37
static int ett_ua3g;
38
static int ett_ua3g_body;
39
static int ett_ua3g_param;
40
static int ett_ua3g_param_sub;
41
static int ett_ua3g_option;
42
static int ett_ua3g_beep_beep_destination;
43
static int ett_ua3g_note;
44
45
static bool setup_conversations_enabled = true;
46
47
static int  hf_ua3g_length;
48
static int  hf_ua3g_opcode_sys;
49
static int  hf_ua3g_opcode_term;
50
static int  hf_ua3g_opcode_production_test;
51
static int  hf_ua3g_opcode_subservice_reset;
52
static int  hf_ua3g_opcode_are_you_there;
53
static int  hf_ua3g_opcode_set_speaker_vol;
54
static int  hf_ua3g_opcode_trace_on;
55
static int  hf_ua3g_ip;
56
static int  hf_ua3g_ip_cs;
57
static int  hf_ua3g_command_led;
58
static int  hf_ua3g_command_lcd_line;
59
static int  hf_ua3g_main_voice_mode;
60
static int  hf_ua3g_command_set_clck;
61
static int  hf_ua3g_external_ringing_command;
62
static int  hf_ua3g_lcd_cursor;
63
static int  hf_ua3g_command_beep;
64
static int  hf_ua3g_command_sidetone;
65
static int  hf_ua3g_command_mute;
66
static int  hf_ua3g_command_feedback;
67
static int  hf_ua3g_command_audio_config;
68
static int  hf_ua3g_command_key_release;
69
static int  hf_ua3g_command_amplified_handset;
70
static int  hf_ua3g_command_loudspeaker;
71
static int  hf_ua3g_command_announce;
72
static int  hf_ua3g_command_ring;
73
static int  hf_ua3g_command_ua_dwl_protocol;
74
static int  hf_ua3g_command_unsolicited_msg;
75
static int  hf_ua3g_ip_device_routing_stop_rtp_parameter;
76
static int  hf_ua3g_ip_device_routing_stop_rtp_parameter_length;
77
static int  hf_ua3g_ip_device_routing_stop_rtp_parameter_value_num;
78
static int  hf_ua3g_ip_device_routing_stop_rtp_parameter_value_bytes;
79
/* Generated from convert_proto_tree_add_text.pl */
80
static int hf_ua3g_ip_device_routing_start_tone_direction;
81
static int hf_ua3g_ip_device_routing_start_tone_num_entries;
82
static int hf_ua3g_ip_device_routing_def_tones_num_entries;
83
static int hf_ua3g_cs_ip_device_routing_cmd00_characteristic_number;
84
static int hf_ua3g_subdevice_msg_subdev_type;
85
static int hf_ua3g_unsolicited_msg_next_byte_of_bad_segment;
86
static int hf_ua3g_ip_device_routing_start_tone_identification;
87
static int hf_ua3g_ip_device_routing_def_tones_level_2;
88
static int hf_ua3g_r_w_peripheral_content;
89
static int hf_ua3g_subdevice_metastate_subchannel_address;
90
static int hf_ua3g_subdevice_parameter_bytes;
91
static int hf_ua3g_subdevice_msg_parameter_bytes;
92
static int hf_ua3g_set_clck_timer_pos_call_timer_column_number;
93
static int hf_ua3g_unsolicited_msg_segment_failure_s;
94
static int hf_ua3g_ip_device_routing_reset_parameter;
95
static int hf_ua3g_ip_device_routing_get_param_req_parameter;
96
static int hf_ua3g_set_lcd_contrast_driver_number;
97
static int hf_ua3g_dwl_special_char_character_number;
98
static int hf_ua3g_cs_ip_device_routing_cmd00_vta_type;
99
static int hf_ua3g_ua_dwl_protocol_cause;
100
static int hf_ua3g_audio_padded_path_emission_padded_level;
101
static int hf_ua3g_set_clck_timer_pos_clock_column_number;
102
static int hf_ua3g_segment_msg_num_remaining;
103
static int hf_ua3g_ip_device_routing_digit_value;
104
static int hf_ua3g_super_msg_data;
105
static int hf_ua3g_unsolicited_msg_hardware_version;
106
static int hf_ua3g_voice_channel_announce;
107
static int hf_ua3g_ring_silent;
108
static int hf_ua3g_audio_config_handsfree_return;
109
static int hf_ua3g_dwl_dtmf_clck_format_inter_digit_pause_time;
110
static int hf_ua3g_ip_device_routing_set_param_req_parameter_length;
111
static int hf_ua3g_unsolicited_msg_opcode_bad_segment;
112
static int hf_ua3g_unsolicited_msg_firmware_version_loader;
113
static int hf_ua3g_debug_in_line;
114
static int hf_ua3g_voice_channel_b_microphones;
115
static int hf_ua3g_beep_beep_number;
116
static int hf_ua3g_main_voice_mode_tune;
117
static int hf_ua3g_super_msg_length;
118
static int hf_ua3g_ip_device_routing_redirect_parameter;
119
static int hf_ua3g_unsolicited_msg_next_byte_of_bad_command;
120
static int hf_ua3g_unsolicited_msg_self_test_result;
121
static int hf_ua3g_beep_on_off;
122
static int hf_ua3g_ua_dwl_protocol_binary_length;
123
static int hf_ua3g_ring_speaker_level;
124
static int hf_ua3g_voice_channel_channel_mode;
125
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_length;
126
static int hf_ua3g_ip_device_routing_start_rtp_parameter;
127
static int hf_ua3g_subdevice_metastate_new_metastate;
128
static int hf_ua3g_unsolicited_msg_other_information_2;
129
static int hf_ua3g_set_lcd_contrast_contrast_value;
130
static int hf_ua3g_unsolicited_msg_vta_type;
131
static int hf_ua3g_ua_dwl_protocol_packet_number;
132
static int hf_ua3g_unsolicited_msg_segment_failure_l;
133
static int hf_ua3g_voice_channel_b_ear_piece;
134
static int hf_ua3g_subdevice_msg_subdev_address;
135
static int hf_ua3g_ring_progressive;
136
static int hf_ua3g_ua_dwl_protocol_item_version;
137
static int hf_ua3g_ip_device_routing_reset_parameter_length;
138
static int hf_ua3g_dwl_dtmf_clck_format_minimum_on_time;
139
static int hf_ua3g_ring_melody;
140
static int hf_ua3g_ua_dwl_protocol_item_identifier;
141
static int hf_ua3g_main_voice_mode_speaker_volume;
142
static int hf_ua3g_ip_device_routing_listen_rtp_parameter_length;
143
static int hf_ua3g_ringing_cadence_length;
144
static int hf_ua3g_software_reset;
145
static int hf_ua3g_feedback_level;
146
static int hf_ua3g_ip_phone_warmstart;
147
static int hf_ua3g_subdevice_opcode;
148
static int hf_ua3g_unsolicited_msg_device_event;
149
static int hf_ua3g_segment_message_data;
150
static int hf_ua3g_main_voice_mode_sending_level;
151
static int hf_ua3g_subdevice_msg_subdevice_opcode;
152
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter;
153
static int hf_ua3g_audio_padded_path_reception_padded_level;
154
static int hf_ua3g_ua_dwl_protocol_force_mode;
155
static int hf_ua3g_lcd_line_cmd_starting_column;
156
static int hf_ua3g_subdevice_address;
157
static int hf_ua3g_ip_device_routing_pause_restart_rtp_parameter;
158
static int hf_ua3g_audio_config_ignored;
159
static int hf_ua3g_lcd_line_cmd_lcd_options;
160
static int hf_ua3g_main_voice_mode_cadence;
161
static int hf_ua3g_segment_msg_length;
162
static int hf_ua3g_ua_dwl_protocol_acknowledge;
163
static int hf_ua3g_command_led_number;
164
static int hf_ua3g_set_clck_timer_pos_call_timer_line_number;
165
static int hf_ua3g_unsolicited_msg_segment_failure_t;
166
static int hf_ua3g_ip_device_routing_start_tone_duration;
167
static int hf_ua3g_unsolicited_msg_other_information_1;
168
static int hf_ua3g_unsolicited_msg_firmware_datas_patch_version;
169
static int hf_ua3g_ring_beep_number;
170
static int hf_ua3g_feedback_duration;
171
static int hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_length;
172
static int hf_ua3g_audio_config_law;
173
static int hf_ua3g_ua_dwl_protocol_checksum;
174
static int hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_value;
175
static int hf_ua3g_audio_config_handsfree_handsfree;
176
static int hf_ua3g_ringing_cadence_cadence;
177
static int hf_ua3g_lcd_cursor_line_number;
178
static int hf_ua3g_ip_device_routing_def_tones_level_1;
179
static int hf_ua3g_unsolicited_msg_opcode_of_bad_command;
180
static int hf_ua3g_ua_dwl_protocol_download_ack_status;
181
static int hf_ua3g_voice_channel_main_voice;
182
static int hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_length;
183
static int hf_ua3g_icon_cmd_segment;
184
static int hf_ua3g_cs_ip_device_routing_cmd01_incident_0;
185
static int hf_ua3g_beep_destination;
186
static int hf_ua3g_ip_device_routing_def_tones_frequency_1;
187
static int hf_ua3g_unsolicited_msg_datas_version;
188
static int hf_ua3g_dwl_dtmf_clck_format_dtmf_country_adaptation;
189
static int hf_ua3g_ringing_cadence_on_off;
190
static int hf_ua3g_audio_config_volume_level;
191
static int hf_ua3g_voice_channel_b_general;
192
static int hf_ua3g_beep_terminator;
193
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter;
194
static int hf_ua3g_unsolicited_msg_firmware_version_bootloader;
195
static int hf_ua3g_ip_device_routing_set_param_req_parameter;
196
static int hf_ua3g_ip_device_routing_start_rtp_direction;
197
static int hf_ua3g_set_clck_timer_pos_clock_line_number;
198
static int hf_ua3g_voice_channel_b_loud_speaker;
199
static int hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter;
200
static int hf_ua3g_on_off_level_level_on_loudspeaker;
201
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_length;
202
static int hf_ua3g_main_voice_mode_microphone_volume;
203
static int hf_ua3g_sidetone_level;
204
static int hf_ua3g_beep_number_of_notes;
205
static int hf_ua3g_unsolicited_msg_segment_failure_num;
206
static int hf_ua3g_dwl_special_char_byte;
207
static int hf_ua3g_ring_cadence;
208
static int hf_ua3g_unsolicited_msg_device_type;
209
static int hf_ua3g_voice_channel_codec;
210
static int hf_ua3g_ip_device_routing_redirect_parameter_length;
211
static int hf_ua3g_ip_device_routing_listen_rtp_parameter;
212
static int hf_ua3g_beep_cadence;
213
static int hf_ua3g_voice_channel_voice_channel;
214
static int hf_ua3g_unsolicited_msg_other_information;
215
static int hf_ua3g_ip_device_routing_def_tones_frequency_2;
216
static int hf_ua3g_digit_dialed_digit_value;
217
static int hf_ua3g_unsolicited_msg_subdevice_address;
218
static int hf_ua3g_ua_dwl_protocol_packet_download_end_ack_ok_status;
219
static int hf_ua3g_r_w_peripheral_address;
220
static int hf_ua3g_icon_cmd_icon_number;
221
static int hf_ua3g_dwl_dtmf_clck_format_clock_time_format;
222
static int hf_ua3g_ip_device_routing_start_rtp_parameter_length;
223
static int hf_ua3g_i_m_here_id_code;
224
static int hf_ua3g_ua_dwl_protocol_item_version_nc;
225
static int hf_ua3g_unsolicited_msg_firmware_version;
226
static int hf_ua3g_segment_msg_segment;
227
static int hf_ua3g_ip_device_routing_reset_parameter_noe_update;
228
static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_bootloader;
229
static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_data;
230
static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_customization;
231
static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_localization;
232
static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_code;
233
static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_sip;
234
static int hf_ua3g_ip_device_routing_reset_parameter_value;
235
static int hf_ua3g_ip_device_routing_reset_parameter_bad_sec_mode;
236
static int hf_ua3g_ip_device_routing_reset_parameter_cust_name;
237
static int hf_ua3g_ip_device_routing_reset_parameter_l10n_name;
238
static int hf_ua3g_ip_device_routing_reset_parameter_appl_mode;
239
static int hf_ua3g_ip_device_routing_reset_parameter_sip_name;
240
static int hf_ua3g_ip_device_routing_reset_parameter_reset_mac;
241
static int hf_ua3g_ip_device_routing_start_rtp_parameter_ip;
242
static int hf_ua3g_ip_device_routing_start_rtp_parameter_compressor;
243
static int hf_ua3g_ip_device_routing_start_rtp_parameter_value;
244
static int hf_ua3g_ip_device_routing_start_rtp_parameter_enabler;
245
static int hf_ua3g_ip_device_routing_start_rtp_parameter_send_qos;
246
static int hf_ua3g_ip_device_routing_start_rtp_parameter_dtmf_sending;
247
static int hf_ua3g_ip_device_routing_start_rtp_parameter_rfc2198;
248
static int hf_ua3g_ip_device_routing_start_rtp_parameter_srtp_encryption;
249
static int hf_ua3g_ip_device_routing_start_rtp_parameter_uint;
250
static int hf_ua3g_ip_device_routing_redirect_parameter_ip;
251
static int hf_ua3g_ip_device_routing_redirect_parameter_uint;
252
static int hf_ua3g_ip_device_routing_redirect_parameter_value;
253
static int hf_ua3g_ip_device_routing_listen_rtp_parameter_ip;
254
static int hf_ua3g_ip_device_routing_listen_rtp_parameter_port;
255
static int hf_ua3g_ip_device_routing_listen_rtp_parameter_value;
256
static int hf_ua3g_ip_device_routing_set_param_req_parameter_compressor;
257
static int hf_ua3g_ip_device_routing_set_param_req_parameter_err_string;
258
static int hf_ua3g_ip_device_routing_set_param_req_parameter_tftp_backup_ip;
259
static int hf_ua3g_ip_device_routing_set_param_req_parameter_set_pc_port_status;
260
static int hf_ua3g_ip_device_routing_set_param_req_parameter_record_rtp_auth;
261
static int hf_ua3g_ip_device_routing_set_param_req_parameter_security_flag_filter;
262
static int hf_ua3g_ip_device_routing_set_param_req_parameter_stable_mode;
263
static int hf_ua3g_ip_device_routing_set_param_req_parameter_skin_id;
264
static int hf_ua3g_ip_device_routing_set_param_req_parameter_language_id;
265
static int hf_ua3g_ip_device_routing_set_param_req_parameter_usb_boost;
266
static int hf_ua3g_ip_device_routing_set_param_req_parameter_als_device;
267
static int hf_ua3g_ip_device_routing_set_param_req_parameter_busy_light;
268
static int hf_ua3g_ip_device_routing_set_param_req_parameter_audio_env;
269
static int hf_ua3g_ip_device_routing_set_param_req_parameter_uint;
270
static int hf_ua3g_ip_device_routing_set_param_req_parameter_value;
271
static int hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_uint;
272
static int hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_remote_ip;
273
static int hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_uint;
274
static int hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_value;
275
static int hf_ua3g_ip_device_routing_freeseating_parameter;
276
static int hf_ua3g_ip_device_routing_freeseating_parameter_length;
277
static int hf_ua3g_ip_device_routing_freeseating_parameter_mac;
278
static int hf_ua3g_ip_device_routing_freeseating_parameter_ip;
279
static int hf_ua3g_ip_device_routing_freeseating_parameter_ipv6;
280
static int hf_ua3g_ip_device_routing_freeseating_parameter_do_reset;
281
static int hf_ua3g_ip_device_routing_freeseating_parameter_uint;
282
static int hf_ua3g_ip_device_routing_freeseating_parameter_value;
283
static int hf_ua3g_ip_device_routing_appl_parameter;
284
static int hf_ua3g_ip_device_routing_appl_parameter_length;
285
static int hf_ua3g_ip_device_routing_appl_parameter_id;
286
static int hf_ua3g_ip_device_routing_appl_parameter_enable;
287
static int hf_ua3g_ip_device_routing_appl_parameter_url;
288
static int hf_ua3g_ip_device_routing_appl_parameter_uint;
289
static int hf_ua3g_ip_device_routing_appl_parameter_value;
290
static int hf_ua3g_main_voice_mode_handset_level;
291
static int hf_ua3g_main_voice_mode_headset_level;
292
static int hf_ua3g_main_voice_mode_handsfree_level;
293
static int hf_ua3g_audio_config_dpi_chan_ua_tx1;
294
static int hf_ua3g_audio_config_dpi_chan_ua_tx2;
295
static int hf_ua3g_audio_config_dpi_chan_gci_tx1;
296
static int hf_ua3g_audio_config_dpi_chan_gci_tx2;
297
static int hf_ua3g_audio_config_dpi_chan_cod_tx;
298
static int hf_ua3g_audio_config_audio_circuit_dth;
299
static int hf_ua3g_audio_config_audio_circuit_dtr;
300
static int hf_ua3g_audio_config_audio_circuit_dtf;
301
static int hf_ua3g_audio_config_audio_circuit_str;
302
static int hf_ua3g_audio_config_audio_circuit_ahp1;
303
static int hf_ua3g_audio_config_audio_circuit_ahp2;
304
static int hf_ua3g_audio_config_audio_circuit_ath;
305
static int hf_ua3g_audio_config_audio_circuit_atr;
306
static int hf_ua3g_audio_config_audio_circuit_atf;
307
static int hf_ua3g_audio_config_audio_circuit_alm;
308
static int hf_ua3g_audio_config_loudspeaker_aco_param_group_listen;
309
static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_attenuation;
310
static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_stay_in_send;
311
static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mtx;
312
static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mrc;
313
static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_trans_threshold;
314
static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_trans_threshold;
315
static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_recv_threshold;
316
static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_recv_threshold;
317
static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_med_recv_threshold;
318
static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_high_recv_threshold;
319
static int hf_ua3g_ua_dwl_protocol_files_inc_boot_binary;
320
static int hf_ua3g_ua_dwl_protocol_files_inc_loader_binary;
321
static int hf_ua3g_ua_dwl_protocol_files_inc_appli_binary;
322
static int hf_ua3g_ua_dwl_protocol_files_inc_data_binary;
323
static int hf_ua3g_ua_dwl_protocol_model_selection_a;
324
static int hf_ua3g_ua_dwl_protocol_model_selection_b;
325
static int hf_ua3g_ua_dwl_protocol_model_selection_c;
326
static int hf_ua3g_ua_dwl_protocol_model_selection_country_ver;
327
static int hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe1;
328
static int hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe2;
329
static int hf_ua3g_ua_dwl_protocol_memory_sizes_flash;
330
static int hf_ua3g_ua_dwl_protocol_memory_sizes_ext_ram;
331
static int hf_ua3g_unsolicited_msg_char_num_vta_subtype;
332
static int hf_ua3g_unsolicited_msg_char_num_generation;
333
static int hf_ua3g_unsolicited_msg_char_num_design;
334
static int hf_ua3g_unsolicited_msg_hardware_config_vta_type;
335
static int hf_ua3g_unsolicited_msg_hardware_config_design;
336
static int hf_ua3g_unsolicited_msg_hardware_config_subtype;
337
static int hf_ua3g_unsolicited_msg_hardware_config_hard_config_chip;
338
static int hf_ua3g_unsolicited_msg_hardware_config_hard_config_flash;
339
static int hf_ua3g_unsolicited_msg_hardware_config_config_ram;
340
static int hf_ua3g_unsolicited_msg_hardware_config;
341
static int hf_ua3g_unsolicited_msg_hardware_config_export_full;
342
static int hf_ua3g_unsolicited_msg_hardware_config_ethernet_hardware;
343
static int hf_ua3g_unsolicited_msg_hardware_config_extended_edition;
344
static int hf_ua3g_unsolicited_msg_hardware_config_wideband;
345
static int hf_ua3g_unsolicited_msg_hardware_config_3g_set;
346
static int hf_ua3g_unsolicited_msg_hardware_config_8082_set;
347
static int hf_ua3g_unsolicited_msg_hardware_config_super_wideband;
348
static int hf_ua3g_unsolicited_msg_hook_status;
349
static int hf_ua3g_unsolicited_msg_additional_vta_type;
350
static int hf_ua3g_unsolicited_msg_capability_info_bluetooth_supported;
351
static int hf_ua3g_unsolicited_msg_capability_info_vpn_encryption_status;
352
static int hf_ua3g_unsolicited_msg_capability_info_vpn;
353
static int hf_ua3g_unsolicited_msg_capability_info_ipsec;
354
static int hf_ua3g_unsolicited_msg_capability_info_dtls;
355
static int hf_ua3g_unsolicited_msg_capability_info_wlan_status;
356
static int hf_ua3g_unsolicited_msg_capability_info_reserved;
357
static int hf_ua3g_special_key_shift;
358
static int hf_ua3g_special_key_ctrl;
359
static int hf_ua3g_special_key_alt;
360
static int hf_ua3g_special_key_cmd;
361
static int hf_ua3g_special_key_shift_prime;
362
static int hf_ua3g_special_key_ctrl_prime;
363
static int hf_ua3g_special_key_alt_prime;
364
static int hf_ua3g_special_key_cmd_prime;
365
static int hf_ua3g_lcd_line_cmd_lcd_options_call_timer;
366
static int hf_ua3g_lcd_line_cmd_lcd_options_blink;
367
static int hf_ua3g_lcd_line_cmd_lcd_options_call_timer_control;
368
static int hf_ua3g_lcd_line_cmd_lcd_options_call_timer_display;
369
static int hf_ua3g_lcd_line_cmd_lcd_options_time_of_day_display;
370
static int hf_ua3g_lcd_line_cmd_lcd_options_suspend_display_refresh;
371
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_firmware_version;
372
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_tscip_version;
373
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_ip;
374
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_uint;
375
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_bytes;
376
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_mac_address;
377
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_uint;
378
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_value;
379
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_speed;
380
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_duplex;
381
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_speed;
382
static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_duplex;
383
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_type_of_equip;
384
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_firmware_version;
385
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_ip;
386
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_string;
387
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_codec;
388
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_vad;
389
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_ece;
390
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_voice_mode;
391
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_delay_distribution;
392
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_bfi;
393
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution;
394
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021Q_used;
395
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021P_priority;
396
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_vlan_id;
397
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_diffserv;
398
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution_200ms;
399
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_rtp_lost;
400
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_uint;
401
static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_jitter_depth_distribution;
402
static int hf_ua3g_special_key_param_dtmf;
403
static int hf_ua3g_special_key_hookswitch_status;
404
static int hf_ua3g_subdevice_state;
405
static int hf_ua3g_cs_ip_device_routing_param_identifier;
406
static int hf_ua3g_key_number;
407
static int hf_ua3g_ua_dwl_protocol_binary_info;
408
static int hf_ua3g_lcd_line_cmd_unused;
409
static int hf_ua3g_lcd_line_cmd_ascii_char;
410
static int hf_ua3g_call_timer;
411
static int hf_ua3g_current_time;
412
static int hf_ua3g_beep_beep_destination_handset;
413
static int hf_ua3g_beep_beep_destination_headset;
414
static int hf_ua3g_beep_beep_destination_loudspeaker;
415
static int hf_ua3g_beep_beep_destination_announce_loudspeaker;
416
static int hf_ua3g_beep_beep_destination_handsfree;
417
static int hf_ua3g_beep_beep_destination;
418
static int hf_ua3g_beep_freq_sample;
419
static int hf_ua3g_beep_level;
420
static int hf_ua3g_beep_duration;
421
static int hf_ua3g_device_configuration;
422
423
424
/* Definition of opcodes */
425
/* System To Terminal */
426
18
#define SC_NOP                     0x00
427
9
#define SC_PRODUCTION_TEST         0x01    /* IP Phone */
428
1
#define SC_SUBDEVICE_ESCAPE        0x02    /* IP Phone */
429
5
#define SC_SOFT_RESET              0x03
430
1
#define SC_IP_PHONE_WARMSTART      0x04    /* IP Phone */
431
18
#define SC_HE_ROUTING              0x05    /* IP Phone - NOT EXPECTED */
432
0
#define SC_SUBDEVICE_RESET         0x06
433
20
#define SC_LOOPBACK_ON             0x07    /* IP Phone & UA NOE */
434
20
#define SC_LOOPBACK_OFF            0x08    /* IP Phone & UA NOE */
435
20
#define SC_VIDEO_ROUTING           0x09    /* IP Phone - NOT EXPECTED */
436
7
#define SC_SUPER_MSG               0x0B
437
2
#define SC_SEGMENT_MSG             0x0C
438
27
#define SC_REMOTE_UA_ROUTING       0x0D    /* IP Phone - NOT EXPECTED */
439
29
#define SC_VERY_REMOTE_UA_ROUTING  0x0E    /* IP Phone - NOT EXPECTED */
440
30
#define SC_OSI_ROUTING             0x0F    /* IP Phone - NOT EXPECTED */
441
31
#define SC_ABC_A_ROUTING           0x11    /* IP Phone - NOT EXPECTED */
442
32
#define SC_IBS_ROUTING             0x12    /* IP Phone - NOT EXPECTED */
443
197
#define SC_IP_DEVICE_ROUTING       0x13
444
33
#define SC_M_REFLEX_HUB_ROUTING    0x14    /* IP Phone - NOT EXPECTED */
445
#if 0
446
#define SC_NOE_CS_ROUTING          0x15    /* Decoded by packet-noe.c */
447
#define SC_NOE_PS_ROUTING          0x16    /* Decoded by packet-noe.c */
448
#endif
449
7
#define SC_SUPER_MSG_2             0x17
450
1
#define SC_DEBUG_IN_LINE           0x18
451
1
#define SC_LED_COMMAND             0x21    /* IP Phone */
452
35
#define SC_START_BUZZER            0x22    /* VTA */
453
35
#define SC_STOP_BUZZER             0x23    /* VTA */
454
36
#define SC_ENABLE_DTMF             0x24    /* Only IP NOE */
455
37
#define SC_DISABLE_DTMF            0x25    /* Only IP NOE */
456
38
#define SC_CLEAR_LCD_DISP          0x26    /* IP Phone */
457
7
#define SC_LCD_LINE_1_CMD          0x27    /* IP Phone */
458
8
#define SC_LCD_LINE_2_CMD          0x28    /* IP Phone */
459
1
#define SC_MAIN_VOICE_MODE         0x29
460
38
#define SC_VERSION_INQUIRY         0x2A
461
1
#define SC_ARE_YOU_THERE           0x2B    /* IP Phone & UA NOE */
462
1
#define SC_SUBDEVICE_METASTATE     0x2C
463
39
#define SC_VTA_STATUS_INQUIRY      0x2D    /* IP Phone */
464
39
#define SC_SUBDEVICE_STATE         0x2E
465
5
#define SC_DWL_DTMF_CLCK_FORMAT    0x30    /* IP Phone */
466
6
#define SC_SET_CLCK                0x31    /* IP Phone */
467
0
#define SC_VOICE_CHANNEL           0x32    /* IP Phone & UA NOE */
468
1
#define SC_EXTERNAL_RINGING        0x33
469
1
#define SC_LCD_CURSOR              0x35    /* IP Phone */
470
5
#define SC_DWL_SPECIAL_CHAR        0x36    /* IP Phone */
471
1
#define SC_SET_CLCK_TIMER_POS      0x38    /* IP Phone */
472
1
#define SC_SET_LCD_CONTRAST        0x39    /* IP Phone */
473
40
#define SC_AUDIO_IDLE              0x3A
474
0
#define SC_SET_SPEAKER_VOL         0x3B    /* IP Phone */
475
14
#define SC_BEEP                    0x3C
476
1
#define SC_SIDETONE                0x3D
477
7
#define SC_RINGING_CADENCE         0x3E
478
0
#define SC_MUTE                    0x3F
479
2
#define SC_FEEDBACK                0x40
480
1
#define SC_KEY_RELEASE             0x41    /* IP Phone */
481
1
#define SC_TRACE_ON                0x42    /* IP Phone - NOT EXPECTED */
482
43
#define SC_TRACE_OFF               0x43    /* IP Phone - NOT EXPECTED */
483
2
#define SC_READ_PERIPHERAL         0x44    /* IP Phone - NOT EXPECTED */
484
3
#define SC_WRITE_PERIPHERAL        0x45    /* IP Phone - NOT EXPECTED */
485
43
#define SC_ALL_ICONS_OFF           0x46    /* IP Phone */
486
1
#define SC_ICON_CMD                0x47    /* IP Phone */
487
1
#define SC_AMPLIFIED_HANDSET       0x48    /* IP Phone */
488
34
#define SC_AUDIO_CONFIG            0x49
489
1
#define SC_AUDIO_PADDED_PATH       0x4A    /* IP Phone */
490
44
#define SC_RELEASE_RADIO_LINK      0x4B    /* IP Phone - NOT EXPECTED */
491
45
#define SC_DECT_HANDOVER           0x4C    /* IP Phone - NOT EXPECTED */
492
0
#define SC_LOUDSPEAKER             0x4D
493
1
#define SC_ANNOUNCE                0x4E
494
0
#define SC_RING                    0x4F
495
1
#define SC_UA_DWL_PROTOCOL         0x50    /* Only UA NOE */
496
497
/* Terminal To System */
498
6
#define CS_NOP_ACK              0x00
499
8
#define CS_HANDSET_OFFHOOK      0x01    /* IP Phone */
500
8
#define CS_HANDSET_ONHOOK       0x02    /* IP Phone */
501
0
#define CS_DIGIT_DIALED         0x03    /* IP Phone */
502
0
#define CS_SUBDEVICE_MSG        0x04
503
8
#define CS_HE_ROUTING           0x05    /* IP Phone - NOT EXPECTED */
504
8
#define CS_LOOPBACK_ON          0x06    /* IP Phone & UA NOE */
505
8
#define CS_LOOPBACK_OFF         0x07    /* IP Phone & UA NOE */
506
8
#define CS_VIDEO_ROUTING        0x09    /* IP Phone - NOT EXPECTED */
507
8
#define CS_WARMSTART_ACK        0x0A    /* IP Phone */
508
4
#define CS_SUPER_MSG            0x0B    /* IP Phone - NOT EXPECTED */
509
1
#define CS_SEGMENT_MSG          0x0C
510
8
#define CS_REMOTE_UA_ROUTING    0x0D    /* IP Phone - NOT EXPECTED */
511
8
#define CS_VERY_REMOTE_UA_R     0x0E    /* IP Phone - NOT EXPECTED */
512
9
#define CS_OSI_ROUTING          0x0F    /* IP Phone - NOT EXPECTED */
513
9
#define CS_ABC_A_ROUTING        0x11    /* IP Phone - NOT EXPECTED */
514
9
#define CS_IBS_ROUTING          0x12    /* IP Phone - NOT EXPECTED */
515
42
#define CS_IP_DEVICE_ROUTING    0x13
516
#if 0
517
#define CS_NOE_CS_ROUTING       0x15    /* Decoded by packet-noe.c */
518
#define CS_NOE_PS_ROUTING       0x16    /* Decoded by packet-noe.c */
519
#endif
520
8
#define CS_SUPER_MSG_2          0x17
521
1
#define CS_DEBUG_IN_LINE        0x18
522
0
#define CS_NON_DIGIT_KEY_PUSHED 0x20    /* IP Phone */
523
3
#define CS_VERSION_RESPONSE     0x21
524
0
#define CS_I_M_HERE             0x22
525
2
#define CS_RSP_STATUS_INQUIRY   0x23    /* IP Phone */
526
0
#define CS_SUBDEVICE_STATE      0x24
527
1
#define CS_DIGIT_KEY_RELEASED   0x26    /* IP Phone */
528
9
#define CS_TRACE_ON_ACK         0x27    /* IP Phone */
529
9
#define CS_TRACE_OFF_ACK        0x28    /* IP Phone */
530
3
#define CS_SPECIAL_KEY_STATUS   0x29    /* IP Phone */
531
2
#define CS_KEY_RELEASED         0x2A    /* IP Phone */
532
1
#define CS_PERIPHERAL_CONTENT   0x2B    /* IP Phone */
533
2
#define CS_TM_KEY_PUSHED        0x2D    /* IP Phone */
534
2
#define CS_UA_DWL_PROTOCOL      0x50    /* Only UA NOE */
535
3
#define CS_UNSOLICITED_MSG      0x9F
536
537
/* System To Terminal Opcodes */
538
static const value_string opcodes_vals_sys[] =
539
{
540
    {SC_NOP                    , "NOP"},
541
    {SC_PRODUCTION_TEST        , "Production Test"},                     /* IP Phone */
542
    {SC_SUBDEVICE_ESCAPE       , "Subdevice Escape To Subdevice"},       /* IP Phone */
543
    {SC_SOFT_RESET             , "Software Reset"},
544
    {SC_IP_PHONE_WARMSTART     , "IP-Phone Warmstart"},                  /* IP Phone */
545
    {SC_HE_ROUTING             , "HE Routing Code"},                     /* IP Phone - NOT EXPECTED */
546
    {SC_SUBDEVICE_RESET        , "Subdevice Reset"},
547
    {SC_LOOPBACK_ON            , "Loopback On"},
548
    {SC_LOOPBACK_OFF           , "Loopback Off"},
549
    {SC_VIDEO_ROUTING          , "Video Routing Code"},                  /* IP Phone - NOT EXPECTED */
550
    {SC_SUPER_MSG              , "Super Message"},
551
    {SC_SEGMENT_MSG            , "Segment Message"},
552
    {SC_REMOTE_UA_ROUTING      , "Remote UA Routing Code"},              /* IP Phone - NOT EXPECTED */
553
    {SC_VERY_REMOTE_UA_ROUTING , "Very Remote UA Routing Code"},         /* IP Phone - NOT EXPECTED */
554
    {SC_OSI_ROUTING            , "OSI Routing Code"},                    /* IP Phone - NOT EXPECTED */
555
    {SC_ABC_A_ROUTING          , "ABC-A Routing Code"},                  /* IP Phone - NOT EXPECTED */
556
    {SC_IBS_ROUTING            , "IBS Routing Code"},                    /* IP Phone - NOT EXPECTED */
557
    {SC_IP_DEVICE_ROUTING      , "IP Device Routing"},
558
    {SC_M_REFLEX_HUB_ROUTING   , "Multi-Reflex Hub Routing Code"},       /* IP Phone - NOT EXPECTED */
559
    {SC_SUPER_MSG_2            , "Super Message 2"},
560
    {SC_DEBUG_IN_LINE          , "Debug In Line"},
561
    {SC_LED_COMMAND            , "Led Command"},                         /* IP Phone */
562
    {SC_START_BUZZER           , "Start Buzzer"},                        /* VTA */
563
    {SC_STOP_BUZZER            , "Stop Buzzer"},                         /* VTA */
564
    {SC_ENABLE_DTMF            , "Enable DTMF"},
565
    {SC_DISABLE_DTMF           , "Disable DTMF"},
566
    {SC_CLEAR_LCD_DISP         , "Clear LCD Display"},                   /* IP Phone */
567
    {SC_LCD_LINE_1_CMD         , "LCD Line 1 Commands"},                 /* IP Phone */
568
    {SC_LCD_LINE_2_CMD         , "LCD Line 2 Commands"},                 /* IP Phone */
569
    {SC_MAIN_VOICE_MODE        , "Main Voice Mode"},
570
    {SC_VERSION_INQUIRY        , "Version Inquiry"},
571
    {SC_ARE_YOU_THERE          , "Are You There?"},
572
    {SC_SUBDEVICE_METASTATE    , "Subdevice Metastate"},
573
    {SC_VTA_STATUS_INQUIRY     , "VTA Status Inquiry"},                  /* IP Phone */
574
    {SC_SUBDEVICE_STATE        , "Subdevice State?"},
575
    {SC_DWL_DTMF_CLCK_FORMAT   , "Download DTMF & Clock Format"},        /* IP Phone */
576
    {SC_SET_CLCK               , "Set Clock"},                           /* IP Phone */
577
    {SC_VOICE_CHANNEL          , "Voice Channel"},                       /* IP Phone & UA NOE */
578
    {SC_EXTERNAL_RINGING       , "External Ringing"},
579
    {SC_LCD_CURSOR             , "LCD Cursor"},                          /* IP Phone */
580
    {SC_DWL_SPECIAL_CHAR       , "Download Special Character"},          /* IP Phone */
581
    {SC_SET_CLCK_TIMER_POS     , "Set Clock/Timer Position"},            /* IP Phone */
582
    {SC_SET_LCD_CONTRAST       , "Set LCD Contrast"},                    /* IP Phone */
583
    {SC_AUDIO_IDLE             , "Audio Idle"},
584
    {SC_SET_SPEAKER_VOL        , "Set Speaker Volume"},                  /* IP Phone */
585
    {SC_BEEP                   , "Beep"},
586
    {SC_SIDETONE               , "Sidetone"},
587
    {SC_RINGING_CADENCE        , "Set Programmable Ringing Cadence"},
588
    {SC_MUTE                   , "Mute"},
589
    {SC_FEEDBACK               , "Feedback"},
590
    {SC_KEY_RELEASE            , "Key Release"},                         /* IP Phone */
591
    {SC_TRACE_ON               , "Trace On"},                            /* IP Phone - NOT EXPECTED */
592
    {SC_TRACE_OFF              , "Trace Off"},                           /* IP Phone - NOT EXPECTED */
593
    {SC_READ_PERIPHERAL        , "Read Peripheral"},                     /* IP Phone - NOT EXPECTED */
594
    {SC_WRITE_PERIPHERAL       , "Write Peripheral"},                    /* IP Phone - NOT EXPECTED */
595
    {SC_ALL_ICONS_OFF          , "All Icons Off"},                       /* IP Phone */
596
    {SC_ICON_CMD               , "Icon Command"},                        /* IP Phone */
597
    {SC_AMPLIFIED_HANDSET      , "Amplified Handset (Boost)"},           /* IP Phone */
598
    {SC_AUDIO_CONFIG           , "Audio Config"},
599
    {SC_AUDIO_PADDED_PATH      , "Audio Padded Path"},                   /* IP Phone */
600
    {SC_RELEASE_RADIO_LINK     , "Release Radio Link"},                  /* IP Phone - NOT EXPECTED */
601
    {SC_DECT_HANDOVER          , "DECT External Handover Routing Code"}, /* IP Phone - NOT EXPECTED */
602
    {SC_LOUDSPEAKER            , "Loudspeaker"},
603
    {SC_ANNOUNCE               , "Announce"},
604
    {SC_RING                   , "Ring"},
605
    {SC_UA_DWL_PROTOCOL        , "UA Download Protocol"},
606
    {0, NULL}
607
};
608
static value_string_ext opcodes_vals_sys_ext = VALUE_STRING_EXT_INIT(opcodes_vals_sys);
609
610
/* Terminal To System Opcodes */
611
static const value_string opcodes_vals_term[] =
612
{
613
    {CS_NOP_ACK              , "NOP Acknowledge"},
614
    {CS_HANDSET_OFFHOOK      , "Handset Offhook"},                      /* IP Phone */
615
    {CS_HANDSET_ONHOOK       , "Handset Onhook"},                       /* IP Phone */
616
    {CS_DIGIT_DIALED         , "Digital Dialed"},                       /* IP Phone */
617
    {CS_SUBDEVICE_MSG        , "Subdevice Message"},
618
    {CS_HE_ROUTING           , "HE Routing Response Code"},             /* IP Phone - NOT EXPECTED */
619
    {CS_LOOPBACK_ON          , "Loopback On Acknowledge"},              /* Same as CS To Terminal */
620
    {CS_LOOPBACK_OFF         , "Loopback Off Acknowledge"},             /* Same as CS To Terminal */
621
    {CS_VIDEO_ROUTING        , "Video Routing Response Code"},          /* IP Phone - NOT EXPECTED */
622
    {CS_WARMSTART_ACK        , "Warmstart Acknowledge"},                /* IP Phone */
623
    {CS_SUPER_MSG            , "Super Message"},                        /* IP Phone - NOT EXPECTED */
624
    {CS_SEGMENT_MSG          , "Segment Message"},                      /* Same as CS To Terminal */
625
    {CS_REMOTE_UA_ROUTING    , "Remote UA Routing Response Code"},      /* IP Phone - NOT EXPECTED */
626
    {CS_VERY_REMOTE_UA_R     , "Very Remote UA Routing Response Code"}, /* IP Phone - NOT EXPECTED */
627
    {CS_OSI_ROUTING          , "OSI Response Code"},                    /* IP Phone - NOT EXPECTED */
628
    {CS_ABC_A_ROUTING        , "ABC-A Routing Response Code"},          /* IP Phone - NOT EXPECTED */
629
    {CS_IBS_ROUTING          , "IBS Routing Response Code"},            /* IP Phone - NOT EXPECTED */
630
    {CS_IP_DEVICE_ROUTING    , "IP Device Routing"},
631
    {CS_SUPER_MSG_2          , "Super Message 2"},                      /* Same as CS To Terminal */
632
    {CS_DEBUG_IN_LINE        , "Debug Message"},
633
    {CS_NON_DIGIT_KEY_PUSHED , "Non-Digit Key Pushed"},                 /* IP Phone */
634
    {CS_VERSION_RESPONSE     , "Version Information"},
635
    {CS_I_M_HERE             , "I'm Here Response"},
636
    {CS_RSP_STATUS_INQUIRY   , "Response To Status Inquiry"},           /* IP Phone */
637
    {CS_SUBDEVICE_STATE      , "Subdevice State Response"},
638
    {CS_DIGIT_KEY_RELEASED   , "Digit Key Released"},                   /* IP Phone */
639
    {CS_TRACE_ON_ACK         , "Trace On Acknowledge"},                 /* IP Phone - NOT EXPECTED */
640
    {CS_TRACE_OFF_ACK        , "Trace Off Acknowledge"},                /* IP Phone - NOT EXPECTED */
641
    {CS_SPECIAL_KEY_STATUS   , "Special Key Status"},                   /* IP Phone */
642
    {CS_KEY_RELEASED         , "Key Released"},                         /* IP Phone */
643
    {CS_PERIPHERAL_CONTENT   , "Peripheral Content"},                   /* IP Phone - NOT EXPECTED */
644
    {CS_TM_KEY_PUSHED        , "TM Key Pushed"},                        /* IP Phone - NOT EXPECTED */
645
    {CS_UA_DWL_PROTOCOL      , "Download Protocol"},
646
    {CS_UNSOLICITED_MSG      , "Unsolicited Message"},
647
    {0, NULL}
648
};
649
static value_string_ext opcodes_vals_term_ext = VALUE_STRING_EXT_INIT(opcodes_vals_term);
650
651
static const value_string str_digit[] = {
652
    { 0, "0"},
653
    { 1, "1"},
654
    { 2, "2"},
655
    { 3, "3"},
656
    { 4, "4"},
657
    { 5, "5"},
658
    { 6, "6"},
659
    { 7, "7"},
660
    { 8, "8"},
661
    { 9, "9"},
662
    {10, "*"},
663
    {11, "#"},
664
    {12, "A"},
665
    {13, "B"},
666
    {14, "C"},
667
    {15, "D"},
668
    {16, "Flash"},
669
    {0, NULL}
670
};
671
static value_string_ext str_digit_ext = VALUE_STRING_EXT_INIT(str_digit);
672
673
7
#define STR_ON_OFF(arg) ((arg) ? "On" : "Off")
674
#define STR_YES_NO(arg) ((arg) ? "Yes" : "No")
675
676
static const value_string str_yes_no[] = {
677
    { 0x0, "No" },
678
    { 0x1, "Yes"},
679
    { 0  , NULL }
680
};
681
682
static const value_string str_on_off[] = {
683
    { 0x0, "Off"},
684
    { 0x1, "On" },
685
    { 0  , NULL }
686
};
687
688
static const value_string str_device_type[] = {
689
    {0x00, "Voice Terminal Adaptor"},
690
    {0, NULL}
691
};
692
693
694
/*-----------------------------------------------------------------------------
695
    VERSION NUMBER COMPUTER - This function computes a version number (S.SZ.AB) from a 16 bits number
696
    ---------------------------------------------------------------------------*/
697
static void
698
version_number_computer( char *result, uint32_t hexa_version )
699
0
{
700
0
    int   release, vers, fix;
701
702
0
    release = (int)(hexa_version / 10000);
703
0
    vers    = (int)((hexa_version % 10000) / 100);
704
0
    fix     = (hexa_version % 10000) % 100;
705
0
    snprintf( result, ITEM_LABEL_LENGTH, "%d.%02d.%02d", release, vers, fix);
706
0
}
707
708
static void
709
version_3bytes_computer(char *result, uint32_t hexa_version)
710
0
{
711
0
    int release, vers, fix;
712
713
0
    release = (hexa_version >> 16);
714
0
    vers    = ((hexa_version >> 8) & 0xff);
715
0
    fix     = (hexa_version & 0xff);
716
0
    snprintf(result, ITEM_LABEL_LENGTH, "%d.%02d.%02d", release, vers, fix);
717
0
}
718
719
720
/*-----------------------------------------------------------------------------
721
    Function for UA3G message with opcode and one parameter
722
723
    PRODUCTION TEST    - 01h (MESSAGE FROM THE SYSTEM)
724
    SUBDEVICE RESET    - 06h (MESSAGE FROM THE SYSTEM)
725
    ARE YOU THERE      - 2Bh - IPhone & UA NOE (MESSAGE FROM THE SYSTEM)
726
    SET SPEAKER VOLUME - 3Bh (MESSAGE FROM THE SYSTEM)
727
    TRACE ON           - 42h (MESSAGE FROM THE SYSTEM)
728
    ---------------------------------------------------------------------------*/
729
static void
730
decode_with_one_parameter(proto_tree *tree, tvbuff_t *tvb,
731
              packet_info *pinfo _U_, unsigned offset, unsigned length,
732
              int hf_opcode)
733
11
{
734
11
    if (length == 0)
735
0
        return;
736
737
11
    proto_tree_add_item(tree, hf_opcode, tvb, offset, 1, ENC_NA);
738
11
}
739
740
741
/*-----------------------------------------------------------------------------
742
    SUBDEVICE ESCAPE TO SUBDEVICE - 02h (MESSAGE FROM THE SYSTEM)
743
    ---------------------------------------------------------------------------*/
744
static void
745
decode_subdevice_escape(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
746
            unsigned offset, unsigned length)
747
1
{
748
1
    proto_tree_add_item(tree, hf_ua3g_subdevice_address, tvb, offset, 1, ENC_BIG_ENDIAN);
749
1
    proto_tree_add_item(tree, hf_ua3g_subdevice_opcode, tvb, offset+1, 1, ENC_BIG_ENDIAN);
750
1
    if (length > 2) {
751
1
        proto_tree_add_item(tree, hf_ua3g_subdevice_parameter_bytes, tvb, offset+2, length-2, ENC_NA);
752
1
    }
753
1
}
754
755
756
/*-----------------------------------------------------------------------------
757
    SOFTWARE RESET - 03h (MESSAGE FROM THE SYSTEM)
758
    ---------------------------------------------------------------------------*/
759
static const value_string software_reset_verswitch_vals[] = {
760
    {0x00, "Reset Without Version Switch"},
761
    {0x01, "Reset With Version Switch"},
762
    {0, NULL}
763
};
764
765
static void
766
decode_software_reset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
767
                      unsigned offset, unsigned length)
768
5
{
769
5
    if (length == 0)
770
0
        return;
771
772
5
    proto_tree_add_item(tree, hf_ua3g_software_reset, tvb, offset, 1, ENC_BIG_ENDIAN);
773
5
}
774
775
776
/*-----------------------------------------------------------------------------
777
    IP-PHONE WARMSTART - 04h (MESSAGE FROM THE SYSTEM)
778
    ---------------------------------------------------------------------------*/
779
static const value_string str_command_ip_phone_warmstart[] = {
780
    {0x00, "Run In UA2G Emulation Mode"},
781
    {0x01, "Run In Full UA3G Mode"},
782
    {0, NULL}
783
};
784
785
static void
786
decode_ip_phone_warmstart(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
787
              unsigned offset, unsigned length)
788
1
{
789
1
    if (length == 0)
790
0
        return;
791
792
1
    proto_tree_add_item(tree, hf_ua3g_ip_phone_warmstart, tvb, offset, 1, ENC_BIG_ENDIAN);
793
1
}
794
795
796
/*-----------------------------------------------------------------------------
797
    SUPER MESSAGE - 0Bh (MESSAGE FROM THE SYSTEM)
798
    SUPER MESSAGE 2 - 17h (MESSAGE FROM THE SYSTEM)
799
    ---------------------------------------------------------------------------*/
800
static void
801
decode_super_msg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
802
         unsigned offset, unsigned length, uint8_t opcode)
803
15
{
804
15
    proto_tree *ua3g_body_tree = tree;
805
15
    int         j = 0, parameter_length;
806
807
15
    if (!ua3g_body_tree)
808
0
        return;
809
810
329
    while (length > 0) {
811
314
        if (opcode == 0x17) {
812
40
            parameter_length = tvb_get_ntohs(tvb, offset);
813
40
            proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_super_msg_length, tvb, offset, 2,
814
40
                parameter_length, "Length %d: %d", j++, parameter_length);
815
40
            offset += 2;
816
40
            length -= 2;
817
274
        } else {
818
274
            parameter_length = tvb_get_uint8(tvb, offset);
819
274
            proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_super_msg_length, tvb, offset, 1,
820
274
                parameter_length, "Length %d: %d", j++, parameter_length);
821
274
            offset++;
822
274
            length--;
823
274
        }
824
825
314
        if (parameter_length > 0) {
826
68
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_super_msg_data, tvb, offset, parameter_length, ENC_NA);
827
68
            offset += parameter_length;
828
68
            length -= parameter_length;
829
68
        }
830
314
    }
831
15
}
832
833
834
/*-----------------------------------------------------------------------------
835
    SEGMENT MESSAGE - 0Ch (MESSAGE FROM THE TERMINAL AND FROM THE SYSTEM)
836
    ---------------------------------------------------------------------------*/
837
static const true_false_string tfs_segment_msg_segment = { "First Segment", "Subsequent Segment" };
838
839
static void
840
decode_segment_msg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
841
           unsigned offset, unsigned length)
842
3
{
843
3
    uint8_t     val;
844
845
3
    if (!tree)
846
0
        return;
847
848
3
    val = tvb_get_uint8(tvb, offset);
849
3
    proto_tree_add_item(tree, hf_ua3g_segment_msg_segment, tvb, offset, 1, ENC_NA);
850
3
    proto_tree_add_item(tree, hf_ua3g_segment_msg_num_remaining, tvb, offset, 1, ENC_BIG_ENDIAN);
851
3
    offset++;
852
3
    length--;
853
854
3
    if (val & 0x80) {
855
1
        proto_tree_add_item(tree, hf_ua3g_segment_msg_length, tvb, offset, 2, ENC_BIG_ENDIAN);
856
1
        offset += 2;
857
1
        length -= 2;
858
1
    }
859
860
3
    if (length > 0) {
861
2
        proto_tree_add_item(tree, hf_ua3g_segment_message_data, tvb, offset, length, ENC_NA);
862
2
    }
863
3
}
864
865
866
/*-----------------------------------------------------------------------------
867
    IP DEVICE ROUTING - 13h (MESSAGE FROM THE SYSTEM)
868
    ---------------------------------------------------------------------------*/
869
static const value_string str_command_ip_device_routing[] = {
870
    {0x00, "Reset"},
871
    {0x01, "Start RTP"},
872
    {0x02, "Stop RTP"},
873
    {0x03, "Redirect"},
874
    {0x04, "Tone Definition"},
875
    {0x05, "Start Tone"},
876
    {0x06, "Stop Tone"},
877
    {0x07, "Start Listen RTP"},
878
    {0x08, "Stop Listen RTP"},
879
    {0x09, "Get Parameters Value"},
880
    {0x0A, "Set Parameters Value"},
881
    {0x0B, "Send Digit"},
882
    {0x0C, "Pause RTP"},
883
    {0x0D, "Restart RTP"},
884
    {0x0E, "Start Record RTP"},
885
    {0x0F, "Stop Record RTP"},
886
    {0x10, "Set SIP Parameters"},
887
    {0x11, "Free Seating"},
888
    {0x14, "Application Parameters"},
889
    {0, NULL}
890
};
891
892
static const value_string ip_device_routing_cmd_reset_vals[] = {
893
    {0x00, "Update Mode"},
894
    {0x01, "Bad Sec Mode"},
895
    {0x02, "Customization Name"},
896
    {0x03, "Localization Name"},
897
    {0, NULL}
898
};
899
900
static const value_string reset_param_bad_sec_mode[] = {
901
    {0x01, "Binary is full, CS is secured, but terminal running in clear mode"},
902
    {0, NULL}
903
};
904
905
static const value_string start_rtp_str_direction[] = {
906
    {0x00, "Terminal Input"},
907
    {0x01, "Terminal Output"},
908
    {0x02, "Terminal Input/Output (Both Directions)"},
909
    {0, NULL}
910
};
911
912
static const value_string ip_device_routing_cmd_start_rtp_vals[] = {
913
    {0x00, "Local UDP Port"},
914
    {0x01, "Remote IP Address"},
915
    {0x02, "Remote UDP Port"},
916
    {0x03, "Type Of Service"},
917
    {0x04, "Compressor"},
918
    {0x05, "Payload Concatenation (ms)"},
919
    {0x06, "Echo Cancellation Enabler"},
920
    {0x07, "Silence Suppression Enabler"},
921
    {0x08, "802.1 Q User Priority"},
922
    {0x09, "Reserved"},
923
    {0x0a, "Post Filtering Enabler"},
924
    {0x0b, "High Pass Filtering Enabler"},
925
    {0x0c, "Remote SSRC"},
926
    {0x0d, "Must Send QOS Tickets"},
927
    {0x0e, "Local Identifier"},
928
    {0x0f, "Distant Identifier"},
929
    {0x10, "Destination For RTCP Sender Reports - Port Number"},
930
    {0x11, "Destination For RTCP Sender Reports - IP Address"},
931
    {0x12, "Destination For RTCP Receiver Reports - Port Number"},
932
    {0x13, "Destination For RTCP Receiver Reports - IP Address"},
933
    {0x14, "Channel Number"},
934
    {0x15, "DTMF Sending"},
935
    {0x16, "Payload Type Of Redundancy"},
936
    {0x17, "Payload Type Of DTMF Events"},
937
    {0x18, "Enable / Disable RFC 2198"},
938
    {0x31, "SRTP Encryption Enable For This Communication"},
939
    {0x32, "Master Key For SRTP Session"},
940
    {0x33, "Master Salt Key For SRTP Session"},
941
    {0x34, "Master key for output stream of SRTP session"},
942
    {0x35, "Master salt key for output stream of SRTP session"},
943
    {0x36, "Integrity checking enabled for this communication"},
944
    {0x37, "MKI value for SRTP packets in input stream"},
945
    {0x38, "MKI value for SRTP packets in output stream"},
946
    {0x39, "Integrity method of Thales component"},
947
    {0x50, "MD5 Authentication"},
948
    {0, NULL}
949
};
950
static value_string_ext ip_device_routing_cmd_start_rtp_vals_ext = VALUE_STRING_EXT_INIT(ip_device_routing_cmd_start_rtp_vals);
951
952
static const val64_string str_compressor_vals[] = {
953
    {0x00, "G.711 A-law"},
954
    {0x01, "G.711 mu-law"},
955
    {0x0F, "G.723.1 5.3kbps"},
956
    {0x10, "G.723.1 6.3kbps"},
957
    {0x11, "G.729A 8kbps"},
958
    {0x1B, "G.722 64kbps"},
959
    {0x1C, "G.722 56kbps"},
960
    {0x1D, "G.722 48kbps"},
961
    {0x1E, "Opus"},
962
    {0, NULL}
963
};
964
965
static const value_string ip_device_routing_cmd_stop_rtp_vals[] = {
966
    {0x0E, "Local Identifier"},
967
    {0x0F, "Distant Identifier"},
968
    {0x14, "Canal Identifier"},
969
    {0, NULL}
970
};
971
972
static const value_string ip_device_routing_cmd_redirect_vals[] = {
973
    {0x00, "Remote MainCPU Server IP Address"},
974
    {0x01, "Remote MainCPU Server Port"},
975
    {0, NULL}
976
};
977
978
static const value_string ip_device_routing_cmd_listen_rtp_vals[] = {
979
    {0x00, "Remote IP Address    "},
980
    {0x01, "Remote UDP Port In   "},
981
    {0x02, "Remote UDP Port Out  "},
982
    {0x03, "Remote IP Address Out"},
983
    {0x04, "Canal Number"},
984
    {0, NULL}
985
};
986
987
static const value_string ip_device_routing_cmd_set_param_req_vals[] = {
988
    {0x00   , "QOS IP TOS"},
989
    {0x01   , "QOS 8021 VLID"},
990
    {0x02   , "QOS 8021 PRI"},
991
    {0x03   , "SNMP MIB2 SysContact"},
992
    {0x04   , "SNMP MIB2 SysName"},
993
    {0x05   , "SNMP MIB2 SysLocation"},
994
    {0x06   , "Default Compressor"},
995
    {0x07   , "Error String Net Down"},
996
    {0x08   , "Error String Cable PB"},
997
    {0x09   , "Error String Try Connect"},
998
    {0x0A   , "Error String Connected"},
999
    {0x0B   , "Error String Reset"},
1000
    {0x0C   , "Error String Duplicate IP Address"},
1001
    {0x0D   , "SNMP MIB Community"},
1002
    {0x0E   , "TFTP Backup Sec Mode"},
1003
    {0x0F   , "TFTP Backup IP Address"},
1004
    {0x10   , "Set MMI Password"},
1005
    {0x11   , "Set PC Port Status"},
1006
    {0x12   , "Record RTP Authorization"},
1007
    {0x13   , "Security Flags"},
1008
    {0x14   , "ARP Spoofing"},
1009
    {0x15   , "Session Param"},
1010
    {0x16   , "Stable Mode"},
1011
    {0x17   , "DTMF Level"},
1012
    {0x18   , "Keep Talking"},
1013
    {0x19   , "BT Radio"},
1014
    {0x1A   , "Transparent Reboot"},
1015
    {0x1B   , "Set Skin Identifier"},
1016
    {0x1C   , "Set Language Identifier"},
1017
    {0x1D   , "Set Dialpad Rotation"},
1018
    {0x1E   , "Set USB Boost Charging"},
1019
    {0x1F   , "Set SSH Password"},
1020
    {0x20   , "DHCP Survivability"},
1021
    {0x21   , "USB Devices"},
1022
    {0x22   , "ALS Device"},
1023
    {0x23   , "Busy Light"},
1024
    {0x24   , "Audio Environment"},
1025
    {0x25   , "EEE Configuration"},
1026
    {0x26   , "LLDP Configuration"},
1027
    {0x30   , "MD5 Authentication"},
1028
    {0, NULL}
1029
};
1030
static value_string_ext ip_device_routing_cmd_set_param_req_vals_ext = VALUE_STRING_EXT_INIT(ip_device_routing_cmd_set_param_req_vals);
1031
1032
static const value_string set_param_req_stable_mode[] = {
1033
    {0x00   , "Full-Duplex Preference"},
1034
    {0x01   , "Echo Robustness Preference"},
1035
    {0, NULL}
1036
};
1037
1038
static const value_string set_param_req_skin_id[] = {
1039
    {0x00   , "Managed By Terminal"},
1040
    {0x01   , "Classical or Arcturus"},
1041
    {0x02   , "Rainbow"},
1042
    {0x03   , "Crystal or Green"},
1043
    {0x04   , "Luxury"},
1044
    {0x05   , "Arcturus or Classical or Century"},
1045
    {0, NULL}
1046
};
1047
1048
static const value_string set_param_req_usb_boost[] = {
1049
    {0x00   , "Disable"},
1050
    {0x01   , "Enable"},
1051
    {0x02   , "Auto-Negotiation"},
1052
    {0, NULL}
1053
};
1054
1055
static const value_string set_param_req_local_device[] = {
1056
    {0x00   , "Managed By Terminal"},
1057
    {0x01   , "Enable"},
1058
    {0x02   , "Disable"},
1059
    {0, NULL}
1060
};
1061
1062
static const value_string set_param_req_audio_env[] = {
1063
    {0x00   , "Managed By Terminal"},
1064
    {0x01   , "Standard"},
1065
    {0x02   , "Open Space"},
1066
    {0x03   , "Meeting Room"},
1067
    {0x04   , "Noisy"},
1068
    {0, NULL}
1069
};
1070
1071
static const value_string ip_device_routing_cmd_pause_restart_vals[] = {
1072
    {0x14, "Canal Identifier"},
1073
    {0, NULL}
1074
};
1075
1076
static const value_string ip_device_routing_cmd_record_rtp_vals[] = {
1077
    {0x00   , "Recorder Index"},
1078
    {0x01   , "Remote IP Address"},
1079
    {0x02   , "Remote UDP Port In"},
1080
    {0x03   , "Remote UDP Port Out"},
1081
    {0x04   , "Remote IP Address Out"},
1082
    {0x05   , "Local UDP Port In"},
1083
    {0x06   , "Local UDP Port Out"},
1084
    {0x07   , "Type Of Service"},
1085
    {0x08   , "Master Key For SRTP Session"},
1086
    {0x09   , "Master Salt Key For SRTP Session"},
1087
    {0x10   , "Integrity checking enabled for this communication"},
1088
    {0x11   , "Integrity method of Thales component"},
1089
    {0x30   , "MD5 Authentication"},
1090
    {0, NULL}
1091
};
1092
1093
static const value_string ip_device_routing_cmd_freeseating_vals[] = {
1094
    {0x00   , "Pseudo MAC Address"},
1095
    {0x01   , "Maincpu1"},
1096
    {0x02   , "Maincpu2"},
1097
    {0x03   , "Restart application"},
1098
    {0, NULL}
1099
};
1100
1101
static const value_string ip_device_routing_cmd_appl_vals[] = {
1102
    {0x00   , "Identifier"},
1103
    {0x01   , "Enable"},
1104
    {0x02   , "URL"},
1105
    {0, NULL}
1106
};
1107
1108
static const value_string ip_device_routing_tone_direction_vals[] = {
1109
    {0x00, "On The Phone"},
1110
    {0x01, "To The Network"},
1111
    {0x02, "On The Phone and To The Network"},
1112
    {0, NULL}
1113
};
1114
1115
static const value_string ip_device_routing_cmd_get_param_req_vals[] = {
1116
    {0x00   , "Firmware Version"},
1117
    {0x01   , "Firmware Version"},
1118
    {0x02   , "DHCP IP Address"},
1119
    {0x03   , "Local IP Address"},
1120
    {0x04   , "Subnetwork Mask"},
1121
    {0x05   , "Router IP Address"},
1122
    {0x06   , "TFTP IP Address"},
1123
    {0x07   , "MainCPU IP Address"},
1124
    {0x08   , "Default Codec"},
1125
    {0x09   , "Ethernet Drivers Config"},
1126
    {0x0A   , "MAC Address"},
1127
    {0x0B   , "Pseudo MAC Address"},
1128
    {0, NULL}
1129
};
1130
1131
static const value_string str_set_pc_port_status[] = {
1132
    {0x00, "No PC Port Security"},
1133
    {0x01, "Block PC Port"},
1134
    {0x02, "Filter VLAN"},
1135
    {0, NULL}
1136
};
1137
1138
static const value_string str_enable_feature[] = {
1139
    {0x00, "Disable Feature"},
1140
    {0x01, "Enable Feature"},
1141
    {0   , NULL}
1142
};
1143
1144
static const value_string str_ethernet_speed_vals[] = {
1145
    {0   , "No Link"},
1146
    {1   , "10 Mbps"},
1147
    {2   , "100 Mbps"},
1148
    {3   , "1000 Mbps"},
1149
    {10  , "10 Mbps"},
1150
    {100 , "100 Mbps"},
1151
    {0   , NULL}
1152
};
1153
1154
static const value_string str_wlan_status[] = {
1155
    {0, "Not Connected"},
1156
    {1, "Connected"},
1157
    {0, NULL}
1158
};
1159
1160
static void
1161
decode_ip_device_routing(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
1162
             unsigned offset, unsigned length)
1163
197
{
1164
197
    uint8_t        command;
1165
197
    proto_tree    *ua3g_body_tree = tree, *ua3g_param_tree, *ua3g_param_subtree;
1166
197
    proto_item    *ua3g_param_item;
1167
197
    int parameter_length, parameter_id;
1168
1169
197
    command = tvb_get_uint8(tvb, offset);
1170
1171
    /* add text to the frame "INFO" column */
1172
197
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_ip_device_routing, "Unknown"));
1173
1174
197
    if (!ua3g_body_tree)
1175
0
        return;
1176
1177
197
    proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip, tvb, offset, 1, ENC_BIG_ENDIAN);
1178
197
    offset++;
1179
197
    length--;
1180
1181
197
    switch (command) {
1182
5
    case 0x00: /* RESET */
1183
5
        {
1184
5
            if (length > 0) {
1185
5
                parameter_id     = tvb_get_uint8(tvb, offset);
1186
5
                parameter_length = tvb_get_uint8(tvb, offset + 1);
1187
1188
5
                ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter, tvb, offset,
1189
5
                    parameter_length + 2, parameter_id, "%s",
1190
5
                    val_to_str_const(parameter_id, ip_device_routing_cmd_reset_vals, "Unknown"));
1191
5
                ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1192
1193
5
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1194
5
                offset++;
1195
5
                length--;
1196
1197
5
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1198
5
                offset++;
1199
5
                length--;
1200
1201
5
                if (parameter_length > 0) {
1202
3
                    uint8_t param;
1203
3
                    switch (parameter_id) {
1204
1
                    case 0x00: /* Update Mode */
1205
1206
1
                        param = tvb_get_uint8(tvb, offset);
1207
1
                        if ((param & 0x80) == 0x00) {
1208
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_noe_update, tvb, offset, 1, ENC_BIG_ENDIAN);
1209
0
                            ua3g_param_subtree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param_sub);
1210
1211
0
                            proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_bootloader, tvb, offset, 1, ENC_NA);
1212
0
                            proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_data, tvb, offset, 1, ENC_NA);
1213
0
                            proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_customization, tvb, offset, 1, ENC_NA);
1214
0
                            proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_localization, tvb, offset, 1, ENC_NA);
1215
0
                            proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_code, tvb, offset, 1, ENC_NA);
1216
0
                            proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_sip, tvb, offset, 1, ENC_NA);
1217
1218
1
                        } else {
1219
1
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_value, tvb, offset, parameter_length, ENC_NA);
1220
1
                        }
1221
1222
1
                        break;
1223
1
                    case 0x01: /* Bad_Sec_Mode */
1224
1
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_bad_sec_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
1225
1
                        break;
1226
0
                    case 0x02: /* Cust_Name */
1227
0
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_cust_name, tvb, offset, parameter_length, ENC_ASCII);
1228
0
                        break;
1229
0
                    case 0x03: /* L10N_Name */
1230
0
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_l10n_name, tvb, offset, parameter_length, ENC_ASCII);
1231
0
                        break;
1232
0
                    case 0x04: /* Appl_Mode */
1233
0
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_appl_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
1234
0
                        break;
1235
0
                    case 0x05: /* SIP_Name */
1236
0
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_sip_name, tvb, offset, parameter_length, ENC_ASCII);
1237
0
                        break;
1238
0
                    case 0x06: /* Appl_Mode */
1239
0
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_reset_mac, tvb, offset, 1, ENC_BIG_ENDIAN);
1240
0
                        break;
1241
1
                    default:
1242
1
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_value, tvb, offset, parameter_length, ENC_NA);
1243
1
                        break;
1244
3
                    }
1245
1246
                    /*offset += parameter_length;
1247
                    length -= parameter_length;*/
1248
3
                }
1249
5
            }
1250
4
            break;
1251
5
        }
1252
39
    case 0x01: /* START RTP */
1253
39
        {
1254
39
            address remote_rtp_addr = ADDRESS_INIT_NONE;
1255
39
            uint32_t remote_rtp_port = 0;
1256
1257
39
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_device_routing_start_rtp_direction, tvb, offset, 1, ENC_BIG_ENDIAN);
1258
39
            offset++;
1259
39
            length--;
1260
1261
1.02k
            while (length > 0) {
1262
1.01k
                parameter_id     = tvb_get_uint8(tvb, offset);
1263
1.01k
                parameter_length = tvb_get_uint8(tvb, offset + 1);
1264
1265
1.01k
                ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_start_rtp_parameter, tvb, offset,
1266
1.01k
                        parameter_length + 2, parameter_id, "%s",
1267
1.01k
                        val_to_str_ext_const(parameter_id, &ip_device_routing_cmd_start_rtp_vals_ext, "Unknown"));
1268
1269
1.01k
                ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1270
1.01k
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1271
1.01k
                offset++;
1272
1.01k
                length--;
1273
1274
1.01k
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1275
1.01k
                offset++;
1276
1.01k
                length--;
1277
1278
1.01k
                if (parameter_length > 0) {
1279
423
                    switch (parameter_id) {
1280
86
                    case 0x01: /* Remote IP Address */
1281
102
                    case 0x11: /* Destination For RTCP Sender Reports - IP Address */
1282
126
                    case 0x13: /* Destination For RTCP Receiver Reports - IP Address */
1283
126
                        if (parameter_id == 0x01)
1284
86
                           set_address_tvb(&remote_rtp_addr, AT_IPv4, 4, tvb, offset);
1285
126
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
1286
126
                        break;
1287
12
                    case 0x04: /* Compressor */
1288
12
                        if (parameter_length <= 8) {
1289
10
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_compressor, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1290
10
                        } else {
1291
2
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1292
2
                        }
1293
12
                        break;
1294
4
                    case 0x06: /* Echo Cancellation Enabler */
1295
10
                    case 0x07: /* Silence Suppression Enabler */
1296
16
                    case 0x0A: /* Post Filtering Enabler */
1297
22
                    case 0x0B: /* High Pass Filtering Enabler */
1298
22
                        if (parameter_length <= 8) {
1299
9
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_enabler, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1300
13
                        } else {
1301
13
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1302
13
                        }
1303
22
                        break;
1304
0
                    case 0x0D: /* Must Send QOS Tickets */
1305
0
                        if (parameter_length <= 8) {
1306
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_send_qos, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1307
0
                        } else {
1308
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1309
0
                        }
1310
0
                        break;
1311
3
                    case 0x0E: /* Local Identifier */
1312
18
                    case 0x0F: /* Distant Identifier */
1313
18
                        break;
1314
1
                    case 0x15: /* DTMF Sending */
1315
1
                        if (parameter_length <= 8) {
1316
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_dtmf_sending, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1317
1
                        } else {
1318
1
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1319
1
                        }
1320
1
                        break;
1321
20
                    case 0x18: /* Enable / Disable RFC 2198 */
1322
20
                        if (parameter_length <= 8) {
1323
1
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_rfc2198, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1324
19
                        } else {
1325
19
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1326
19
                        }
1327
20
                        break;
1328
4
                    case 0x31: /* SRTP Encryption Enable For This Communication */
1329
4
                        if (parameter_length <= 8) {
1330
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_srtp_encryption, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1331
4
                        } else {
1332
4
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1333
4
                        }
1334
4
                        break;
1335
36
                    case 0x00: /* Local UDP Port */
1336
56
                    case 0x02: /* Remote UDP Port */
1337
95
                    case 0x03: /* Type Of Service */
1338
95
                    case 0x05: /* Payload Concatenation */
1339
97
                    case 0x08: /* 802.1 Q User Priority */
1340
98
                    case 0x09: /* Reserved */
1341
103
                    case 0x0C: /* Remote SSRC */
1342
118
                    case 0x10: /* Destination For RTCP Sender Reports - Port Number */
1343
118
                    case 0x12: /* Destination For RTCP Receiver Reports - Port Number */
1344
118
                    case 0x14: /* Channel Number */
1345
118
                    case 0x16: /* Payload Type For Redundancy */
1346
118
                    case 0x17: /* Payload Type For DTMF Events */
1347
118
                    case 0x32: /* Master Key For SRTP Session */
1348
120
                    case 0x33: /* Master Salt Key For SRTP Session */
1349
120
                    case 0x34: /* Master key for output stream of SRTP session */
1350
120
                    case 0x35: /* Master salt key for output stream of SRTP session */
1351
120
                    case 0x36: /* Integrity checking enabled for this communication */
1352
120
                    case 0x37: /* MKI value for SRTP packets in input stream */
1353
121
                    case 0x38: /* MKI value for SRTP packets in output stream */
1354
122
                    case 0x39: /* Integrity method of Thales component */
1355
123
                    case 0x50: /* MD5 Authentication */
1356
220
                    default:
1357
220
                        if (parameter_id == 0x02)
1358
20
                            remote_rtp_port = tvb_get_ntohs(tvb, offset);
1359
220
                        if (parameter_length <= 8) {
1360
81
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1361
139
                        } else {
1362
139
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1363
139
                        }
1364
220
                        break;
1365
423
                    }
1366
1367
392
                    offset += parameter_length;
1368
392
                    length -= parameter_length;
1369
392
                }
1370
1.01k
            }
1371
1372
8
            if (setup_conversations_enabled)
1373
0
            {
1374
0
                if ((remote_rtp_addr.data != NULL) && (remote_rtp_port != 0))
1375
0
                {
1376
0
                    rtp_add_address(pinfo, PT_UDP, &remote_rtp_addr, remote_rtp_port, 0, "UA3G", pinfo->num, 0, NULL);
1377
0
                    rtcp_add_address(pinfo, &remote_rtp_addr, remote_rtp_port+1, 0, "UA3G", pinfo->num);
1378
0
                }
1379
0
            }
1380
8
            break;
1381
39
        }
1382
15
    case 0x02: /* STOP_RTP */
1383
511
        while (length > 0) {
1384
496
            parameter_id     = tvb_get_uint8(tvb, offset);
1385
496
            parameter_length = tvb_get_uint8(tvb, offset + 1);
1386
1387
496
            ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter, tvb, offset,
1388
496
                parameter_length + 2, parameter_id, "%s",
1389
496
                val_to_str_const(parameter_id, ip_device_routing_cmd_stop_rtp_vals, "Unknown"));
1390
496
            ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1391
1392
496
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1393
496
            offset++;
1394
496
            length--;
1395
1396
496
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1397
496
            offset++;
1398
496
            length--;
1399
1400
496
            if (parameter_length > 0) {
1401
140
                if (parameter_length <= 8) {
1402
82
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter_value_num, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1403
82
                } else {
1404
58
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter_value_bytes, tvb, offset, parameter_length, ENC_NA);
1405
58
                }
1406
1407
140
                offset += parameter_length;
1408
140
                length -= parameter_length;
1409
140
            }
1410
496
        }
1411
15
        break;
1412
17
    case 0x03: /* REDIRECT */
1413
211
        while (length > 0) {
1414
208
            parameter_id = tvb_get_uint8(tvb, offset);
1415
208
            parameter_length = tvb_get_uint8(tvb, offset + 1);
1416
1417
208
            ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_redirect_parameter,
1418
208
                    tvb, offset, parameter_length + 2, parameter_id,
1419
208
                    "%s", val_to_str_const(parameter_id, ip_device_routing_cmd_redirect_vals, "Unknown"));
1420
208
            ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1421
1422
208
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_redirect_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1423
208
            offset++;
1424
208
            length--;
1425
1426
208
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_redirect_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1427
208
            offset++;
1428
208
            length--;
1429
1430
1431
208
            if (parameter_length > 0) {
1432
87
                switch (parameter_id) {
1433
13
                case 0x00: /* Remote MainCPU Server IP Address */
1434
28
                case 0x02: /* Remote Redundant MainCPU Server IP Address */
1435
28
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_redirect_parameter_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
1436
28
                    break;
1437
0
                case 0x01: /* Remote MainCPU Server Port */
1438
59
                default:
1439
59
                    if (parameter_length <= 8) {
1440
21
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_redirect_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1441
38
                    } else {
1442
38
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_redirect_parameter_value, tvb, offset, parameter_length, ENC_NA);
1443
38
                    }
1444
59
                    break;
1445
87
                }
1446
1447
73
                offset += parameter_length;
1448
73
                length -= parameter_length;
1449
73
            }
1450
208
        }
1451
3
        break;
1452
3
    case 0x04: /* DEF_TONES */
1453
2
        {
1454
2
            int         i, tone_nb_entries;
1455
2
            uint16_t    frequency_1, frequency_2;
1456
2
            signed char level_1, level_2;
1457
1458
2
            tone_nb_entries = tvb_get_uint8(tvb, offset);
1459
1460
2
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_device_routing_def_tones_num_entries, tvb, offset, 1, ENC_BIG_ENDIAN);
1461
2
            offset++;
1462
2
            length--;
1463
1464
5
            while (length > 0 && tone_nb_entries) {
1465
133
                for (i = 1; i <= tone_nb_entries; i++) {
1466
130
                    frequency_1 = tvb_get_ntohs(tvb, offset);
1467
130
                    level_1 = (signed char)(tvb_get_uint8(tvb, offset + 2)) / 2;
1468
130
                    frequency_2 = tvb_get_ntohs(tvb, offset + 3);
1469
130
                    level_2 = (signed char)(tvb_get_uint8(tvb, offset + 5)) / 2;
1470
1471
130
                    ua3g_param_tree = proto_tree_add_subtree_format(ua3g_body_tree, tvb, offset, 6,
1472
130
                        ett_ua3g_param, NULL, "Tone Pair %d: %d Hz at %d dB / %d Hz at %d dB",
1473
130
                        i, frequency_1, level_1, frequency_2, level_2);
1474
1475
130
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_def_tones_frequency_1, tvb, offset, 2, ENC_BIG_ENDIAN);
1476
130
                    offset += 2;
1477
130
                    length -= 2;
1478
1479
130
                    proto_tree_add_int(ua3g_param_tree, hf_ua3g_ip_device_routing_def_tones_level_1, tvb, offset, 1, level_1);
1480
130
                    offset++;
1481
130
                    length--;
1482
1483
130
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_def_tones_frequency_2, tvb, offset, 2, ENC_BIG_ENDIAN);
1484
130
                    offset += 2;
1485
130
                    length -= 2;
1486
1487
130
                    proto_tree_add_int(ua3g_param_tree, hf_ua3g_ip_device_routing_def_tones_level_2, tvb, offset, 1, level_2);
1488
130
                    offset++;
1489
130
                    length--;
1490
130
                }
1491
3
            }
1492
2
            break;
1493
17
        }
1494
0
    case 0x05: /* START TONE */
1495
0
        {
1496
0
            uint32_t tone_nb_entries;
1497
1498
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_device_routing_start_tone_direction, tvb, offset, 1, ENC_BIG_ENDIAN);
1499
0
            proto_tree_add_item_ret_uint(ua3g_body_tree, hf_ua3g_ip_device_routing_start_tone_num_entries, tvb, offset, 1, ENC_BIG_ENDIAN, &tone_nb_entries);
1500
0
            offset++;
1501
0
            length--;
1502
1503
0
            for (unsigned ii = 0; ii < tone_nb_entries; ii++) {
1504
0
                uint8_t tone_id = tvb_get_uint8(tvb, offset);
1505
0
                int tone_duration = tvb_get_ntohs(tvb, offset + 1);
1506
1507
0
                ua3g_param_tree = proto_tree_add_subtree_format(ua3g_body_tree, tvb, offset, 3,
1508
0
                    ett_ua3g_param, NULL, "Tone Pair %d: Id: %d, Duration: %d ms",
1509
0
                    ii+1, tone_id, tone_duration);
1510
1511
0
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_tone_identification, tvb, offset, 1, ENC_BIG_ENDIAN);
1512
0
                offset++;
1513
0
                length--;
1514
1515
0
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_tone_duration, tvb, offset, 2, ENC_BIG_ENDIAN);
1516
0
                offset += 2;
1517
0
                length -= 2;
1518
0
            }
1519
0
            break;
1520
17
        }
1521
2
    case 0x07: /* START LISTEN RTP */
1522
9
    case 0x08: /* STOP LISTEN RTP */
1523
71
        while (length > 0) {
1524
71
            parameter_id     = tvb_get_uint8(tvb, offset);
1525
71
            parameter_length = tvb_get_uint8(tvb, offset + 1);
1526
1527
71
            ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter, tvb, offset,
1528
71
                parameter_length + 2, parameter_id, "%s",
1529
71
                val_to_str_const(parameter_id, ip_device_routing_cmd_listen_rtp_vals, "Unknown"));
1530
71
            ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1531
1532
71
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1533
71
            offset++;
1534
71
            length--;
1535
1536
71
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1537
71
            offset++;
1538
71
            length--;
1539
1540
71
            if (parameter_length > 0) {
1541
21
                switch (parameter_id) {
1542
5
                case 0x00: /* Remote IP Address - Not for start listening rtp */
1543
5
                case 0x03: /* Remote IP Address Out - Not for start listening rtp */
1544
5
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter_ip, tvb, offset, 1, ENC_BIG_ENDIAN);
1545
5
                    break;
1546
0
                case 0x01: /* Remote UDP Port In - Not for start listening rtp */
1547
0
                case 0x02: /* Remote UDP Port Out - Not for start listening rtp */
1548
0
                case 0x04: /* Canal Number */
1549
16
                default:
1550
16
                    if (parameter_length <= 8) {
1551
1
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter_port, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1552
15
                    } else {
1553
15
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1554
15
                    }
1555
16
                    break;
1556
21
                }
1557
1558
12
                offset += parameter_length;
1559
12
                length -= parameter_length;
1560
12
            }
1561
71
        }
1562
0
        break;
1563
5
    case 0x09: /* GET_PARAM_REQ */
1564
1.05k
        while (length > 0) {
1565
1.05k
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_device_routing_get_param_req_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1566
1.05k
            offset++;
1567
1.05k
            length--;
1568
1.05k
        }
1569
5
        break;
1570
1571
41
    case 0x0A: /* SET_PARAM_REQ */
1572
41
        {
1573
906
            while (length > 0) {
1574
890
                parameter_id     = tvb_get_uint8(tvb, offset);
1575
890
                parameter_length = tvb_get_uint8(tvb, offset + 1);
1576
1577
890
                ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_set_param_req_parameter, tvb, offset,
1578
890
                    parameter_length + 2, parameter_id, "%s",
1579
890
                    val_to_str_ext_const(parameter_id, &ip_device_routing_cmd_set_param_req_vals_ext, "Unknown"));
1580
890
                ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1581
1582
890
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1583
890
                offset++;
1584
890
                length--;
1585
1586
890
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1587
890
                offset++;
1588
890
                length--;
1589
1590
890
                if (parameter_length > 0) {
1591
464
                    switch (parameter_id) {
1592
0
                    case 0x06: /* Compressor */
1593
0
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_compressor, tvb, offset, 1, ENC_BIG_ENDIAN);
1594
0
                        break;
1595
28
                    case 0x07: /* ERR STRING NET DOWN */
1596
71
                    case 0x08: /* ERR STRING CABLE PB */
1597
72
                    case 0x09: /* ERR STRING TRY CONNECT */
1598
77
                    case 0x0A: /* ERR STRING CONNECTED */
1599
93
                    case 0x0B: /* ERR STRING RESET */
1600
107
                    case 0x0C: /* ERR STRING DUPLICATE IP ADDRESS */
1601
107
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_err_string, tvb, offset, parameter_length, ENC_ASCII);
1602
107
                        break;
1603
2
                    case 0x0F: /* TFTP BACKUP IP ADDR */
1604
2
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_tftp_backup_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
1605
2
                        break;
1606
48
                    case 0x11: /* Set PC Port status */
1607
48
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_set_pc_port_status, tvb, offset, 1, ENC_BIG_ENDIAN);
1608
48
                        break;
1609
8
                    case 0x12: /* Record RTP Authorization */
1610
8
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_record_rtp_auth, tvb, offset, 1, ENC_BIG_ENDIAN);
1611
8
                        break;
1612
22
                    case 0x13: /* Security Flags */
1613
22
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_security_flag_filter, tvb, offset, 1, ENC_NA);
1614
22
                        break;
1615
1
                    case 0x16: /* Stable Mode */
1616
1
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_stable_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
1617
1
                        break;
1618
4
                    case 0x1B: /* Set Skin Identifier */
1619
4
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_skin_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1620
4
                        break;
1621
3
                    case 0x1C: /* Set Language Identifier */
1622
3
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_language_id, tvb, offset, 2, ENC_ASCII);
1623
3
                        break;
1624
8
                    case 0x1E: /* USB Boost */
1625
8
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_usb_boost, tvb, offset, 1, ENC_BIG_ENDIAN);
1626
8
                        break;
1627
0
                    case 0x22: /* ALS Device */
1628
0
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_als_device, tvb, offset, 1, ENC_BIG_ENDIAN);
1629
0
                        break;
1630
4
                    case 0x23: /* Busy Light */
1631
4
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_busy_light, tvb, offset, 1, ENC_BIG_ENDIAN);
1632
4
                        break;
1633
13
                    case 0x24: /* Audio Environment */
1634
13
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_audio_env, tvb, offset, 1, ENC_BIG_ENDIAN);
1635
13
                        break;
1636
58
                    case 0x00: /* QOS IP TOS */
1637
68
                    case 0x01: /* QOS 8021 VLID */
1638
71
                    case 0x02: /* QOS 8021 PRI */
1639
96
                    case 0x03: /* SNMP MIB2 SYSCONTACT */
1640
112
                    case 0x04: /* SNMP MIB2 SYSNAME */
1641
118
                    case 0x05: /* SNMP MIB2 SYSLOCATION */
1642
118
                    case 0x0D: /* SNMP MIB COMMUNITY */
1643
119
                    case 0x0E: /* TFTP BACKUP SEC MODE */
1644
132
                    case 0x10: /* SET MMI PASSWORD */
1645
132
                    case 0x14: /* ARP Spoofing */
1646
132
                    case 0x15: /* Session Param */
1647
132
                    case 0x17: /* DTMF Level */
1648
132
                    case 0x18: /* Keep Talking */
1649
132
                    case 0x19: /* BT Radio */
1650
133
                    case 0x1A: /* Transparent Reboot */
1651
133
                    case 0x1D: /* Dialpad Rotation */
1652
133
                    case 0x1F: /* Set SSH Password */
1653
136
                    case 0x20: /* DHCP Survivability */
1654
136
                    case 0x21: /* USB Devices */
1655
137
                    case 0x25: /* EEE Configuration */
1656
148
                    case 0x26: /* LLDP Configuration */
1657
149
                    case 0x30: /* MD5 Authentication */
1658
244
                    default:
1659
244
                        if ((parameter_length > 0) && (parameter_length <= 8)) {
1660
95
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1661
149
                        } else if (parameter_length > 8) {
1662
149
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_value, tvb, offset, parameter_length, ENC_NA);
1663
149
                        }
1664
244
                        break;
1665
464
                    }
1666
1667
439
                    offset += parameter_length;
1668
439
                    length -= parameter_length;
1669
439
                }
1670
890
            }
1671
16
            break;
1672
41
        }
1673
16
    case 0x0B: /* SEND_DIGIT */
1674
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_device_routing_digit_value, tvb, offset, 1, ENC_BIG_ENDIAN);
1675
0
        break;
1676
1677
1
    case 0x0C: /* PAUSE_RTP */
1678
7
    case 0x0D: /* RESTART_RTP */
1679
162
        while (length > 0) {
1680
155
            parameter_id     = tvb_get_uint8(tvb, offset);
1681
155
            parameter_length = tvb_get_uint8(tvb, offset + 1);
1682
1683
155
            ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_pause_restart_rtp_parameter, tvb, offset,
1684
155
                parameter_length + 2, parameter_id, "%s",
1685
155
                val_to_str_const(parameter_id, ip_device_routing_cmd_pause_restart_vals, "Unknown"));
1686
155
            ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1687
1688
155
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_pause_restart_rtp_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1689
155
            offset++;
1690
155
            length--;
1691
1692
155
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1693
155
            offset++;
1694
155
            length--;
1695
1696
155
            if (parameter_length > 0) {
1697
37
                if (parameter_length <= 8) {
1698
19
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1699
19
                } else {
1700
18
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1701
18
                }
1702
1703
37
                offset += parameter_length;
1704
37
                length -= parameter_length;
1705
37
            }
1706
155
        }
1707
7
        break;
1708
17
    case 0x0E: /* START_RECORD_RTP */
1709
17
    case 0x0F: /* STOP RECORD RTP */
1710
17
    {
1711
17
        address remote_rtp_addr = ADDRESS_INIT_NONE;
1712
17
        uint32_t remote_rtp_port_in = 0;
1713
17
        uint32_t remote_rtp_port_out = 0;
1714
1715
556
        while (length > 0) {
1716
1717
554
            parameter_id     = tvb_get_uint8(tvb, offset);
1718
554
            parameter_length = tvb_get_uint8(tvb, offset + 1);
1719
1720
554
            ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter, tvb, offset,
1721
554
                parameter_length + 2, parameter_id, "%s",
1722
554
                val_to_str_const(parameter_id, ip_device_routing_cmd_record_rtp_vals, "Unknown"));
1723
554
            ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1724
1725
554
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1726
554
            offset++;
1727
554
            length--;
1728
1729
554
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1730
554
            offset++;
1731
554
            length--;
1732
1733
554
            if (parameter_length > 0) {
1734
201
                switch (parameter_id) {
1735
65
                case 0x01: /* Remote IP Address */
1736
65
                case 0x04: /* Remote IP Address Out */
1737
65
                    if (parameter_id == 0x01)
1738
65
                        set_address_tvb(&remote_rtp_addr, AT_IPv4, 4, tvb, offset);
1739
65
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_remote_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
1740
65
                    break;
1741
28
                case 0x00: /* Recorder Index */
1742
54
                case 0x02: /* Remote UDP Port In */
1743
56
                case 0x03: /* Remote UDP Port Out */
1744
59
                case 0x05: /* Local UDP Port In */
1745
74
                case 0x06: /* Local UDP Port Out */
1746
75
                case 0x07: /* Type Of Service */
1747
76
                case 0x08: /* Master Key For SRTP Session */
1748
76
                case 0x09: /* Master Salt Key For SRTP Session */
1749
76
                case 0x10: /* Integrity checking enabled for this communication */
1750
76
                case 0x11: /* Integrity method of Thales component */
1751
76
                case 0x30: /* MD5 Authentication */
1752
136
                default:
1753
136
                    if (parameter_length <= 8) {
1754
60
                        if (parameter_id == 0x02)
1755
24
                            remote_rtp_port_in = tvb_get_ntohs(tvb, offset);
1756
60
                        if (parameter_id == 0x03)
1757
1
                            remote_rtp_port_out = tvb_get_ntohs(tvb, offset);
1758
60
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1759
76
                    } else {
1760
76
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1761
76
                    }
1762
136
                    break;
1763
201
                }
1764
1765
186
                offset += parameter_length;
1766
186
                length -= parameter_length;
1767
186
            }
1768
554
        }
1769
1770
2
        if (setup_conversations_enabled)
1771
0
        {
1772
0
            if (remote_rtp_addr.data != NULL)
1773
0
            {
1774
0
                if (remote_rtp_port_in != 0)
1775
0
                {
1776
0
                    rtp_add_address(pinfo, PT_UDP, &remote_rtp_addr, remote_rtp_port_in, 0, "UA3G", pinfo->num, 0, NULL);
1777
0
                    rtcp_add_address(pinfo, &remote_rtp_addr, remote_rtp_port_in+1, 0, "UA3G", pinfo->num);
1778
0
                }
1779
0
                if (remote_rtp_port_out != 0)
1780
0
                {
1781
0
                    rtp_add_address(pinfo, PT_UDP, &remote_rtp_addr, remote_rtp_port_out, 0, "UA3G", pinfo->num, 0, NULL);
1782
0
                    rtcp_add_address(pinfo, &remote_rtp_addr, remote_rtp_port_out+1, 0, "UA3G", pinfo->num);
1783
0
                }
1784
0
            }
1785
0
        }
1786
1787
2
        break;
1788
17
    }
1789
0
    case 0x10: /* Set SIP Parameters */
1790
0
        break;
1791
21
    case 0x11: /* Free Seating */
1792
353
        while (length > 0) {
1793
351
            parameter_id     = tvb_get_uint8(tvb, offset);
1794
351
            parameter_length = tvb_get_uint8(tvb, offset + 1);
1795
1796
351
            ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_freeseating_parameter, tvb, offset,
1797
351
                parameter_length + 2, parameter_id, "%s",
1798
351
                val_to_str_const(parameter_id, ip_device_routing_cmd_freeseating_vals, "Unknown"));
1799
351
            ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1800
1801
351
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1802
351
            offset++;
1803
351
            length--;
1804
1805
351
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1806
351
            offset++;
1807
351
            length--;
1808
1809
351
            if (parameter_length > 0) {
1810
210
                switch (parameter_id) {
1811
24
                case 0x00: /* Pseudo Mac Address */
1812
24
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_mac, tvb, offset, 6, ENC_NA);
1813
24
                    break;
1814
28
                case 0x01: /* Maincpu1 */
1815
66
                case 0x02: /* Maincpu2 */
1816
66
                {
1817
66
                    int hf = -1;
1818
1819
66
                    if (parameter_length == FT_IPv4_LEN)
1820
0
                        hf = hf_ua3g_ip_device_routing_freeseating_parameter_ip;
1821
66
                    else
1822
66
                    if (parameter_length == FT_IPv6_LEN)
1823
0
                        hf = hf_ua3g_ip_device_routing_freeseating_parameter_ipv6;
1824
1825
66
                    if (hf != -1)
1826
0
                        proto_tree_add_item(ua3g_param_tree, hf, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1827
66
                    else
1828
66
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_value, tvb, offset, parameter_length, ENC_NA);
1829
66
                    break;
1830
28
                }
1831
26
                case 0x03: /* Restart application */
1832
26
                {
1833
26
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_do_reset, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1834
26
                    break;
1835
28
                }
1836
94
                default:
1837
94
                    if (parameter_length <= 8) {
1838
18
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1839
76
                    } else {
1840
76
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_value, tvb, offset, parameter_length, ENC_NA);
1841
76
                    }
1842
94
                    break;
1843
210
                }
1844
191
                offset += parameter_length;
1845
191
                length -= parameter_length;
1846
191
            }
1847
351
        }
1848
2
        break;
1849
18
    case 0x14: /* Set Appl Param */
1850
329
        while (length > 0) {
1851
327
            parameter_id     = tvb_get_uint8(tvb, offset);
1852
327
            parameter_length = tvb_get_uint8(tvb, offset + 1);
1853
1854
327
            ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_appl_parameter, tvb, offset,
1855
327
                parameter_length + 2, parameter_id, "%s", val_to_str_const(parameter_id, ip_device_routing_cmd_appl_vals, "Unknown"));
1856
327
            ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1857
1858
327
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1859
327
            offset++;
1860
327
            length--;
1861
1862
327
            proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1863
327
            offset++;
1864
327
            length--;
1865
1866
327
            if (parameter_length > 0) {
1867
153
                switch (parameter_id) {
1868
25
                case 0x00: /* Identifier */
1869
25
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_id, tvb, offset, parameter_length, ENC_ASCII);
1870
25
                    break;
1871
4
                case 0x01: /* Enable */
1872
4
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_enable, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1873
4
                    break;
1874
38
                case 0x02: /* URL */
1875
38
                {
1876
38
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_url, tvb, offset, parameter_length, ENC_ASCII);
1877
38
                    break;
1878
0
                }
1879
86
                default:
1880
86
                    if (parameter_length <= 8) {
1881
14
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1882
72
                    } else {
1883
72
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_value, tvb, offset, parameter_length, ENC_NA);
1884
72
                    }
1885
86
                    break;
1886
153
                }
1887
137
                offset += parameter_length;
1888
137
                length -= parameter_length;
1889
137
            }
1890
327
        }
1891
2
        break;
1892
2
    case 0x06: /* STOP TONE */
1893
1
    default:
1894
1
        {
1895
1
            break;
1896
0
        }
1897
197
    }
1898
197
}
1899
1900
1901
/*-----------------------------------------------------------------------------
1902
    DEBUG IN LINE - 18h (MESSAGE FROM THE TERMINAL AND FROM THE SYSTEM)
1903
    ---------------------------------------------------------------------------*/
1904
static void
1905
decode_debug_in_line(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
1906
             unsigned offset, unsigned length)
1907
2
{
1908
2
    proto_tree_add_item(tree, hf_ua3g_debug_in_line, tvb, offset, length, ENC_ASCII);
1909
2
}
1910
1911
1912
/*-----------------------------------------------------------------------------
1913
    LED COMMAND - 21h (MESSAGE FROM THE SYSTEM)
1914
    ---------------------------------------------------------------------------*/
1915
static const value_string str_command_led[] = {
1916
    {0x00, "Led Off"},
1917
    {0x01, "Led On"},
1918
    {0x02, "Red Led Fast Flash"},
1919
    {0x03, "Red Led Slow Flash"},
1920
    {0x04, "Green Led On"},
1921
    {0x05, "Green Led Fast Flash"},
1922
    {0x06, "Green Led Slow Flash"},
1923
    {0x07, "All Led Off"},
1924
    {0, NULL}
1925
};
1926
1927
static void
1928
decode_led_command(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
1929
           unsigned offset)
1930
1
{
1931
1
    int         command;
1932
1933
1
    command = tvb_get_uint8(tvb, offset);
1934
1935
    /* add text to the frame "INFO" column */
1936
1
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_led, "Unknown"));
1937
1938
1
    if (!tree)
1939
0
        return;
1940
1941
1
    proto_tree_add_item(tree, hf_ua3g_command_led, tvb, offset, 1, ENC_BIG_ENDIAN);
1942
1943
1
    if ((command >= 0) && (command < 7)) {
1944
1
        proto_tree_add_item(tree, hf_ua3g_command_led_number, tvb, offset+1, 1, ENC_BIG_ENDIAN);
1945
1
    }
1946
1
}
1947
1948
1949
/*-----------------------------------------------------------------------------
1950
    LCD LINE 1 COMMANDS - 27h (MESSAGE FROM THE SYSTEM)
1951
    LCD LINE 2 COMMANDS - 28h (MESSAGE FROM THE SYSTEM)
1952
    ---------------------------------------------------------------------------*/
1953
static const value_string str_command_lcd_line[] = {
1954
    {0, "Clear Line & Write From Column"},
1955
    {1, "Write From Column"},
1956
    {2, "Append To Current Line"},
1957
    {0, NULL}
1958
};
1959
1960
static const value_string str_call_timer_ctrl[] = {
1961
    {0x00, "Call Timer Status Not Changed"},
1962
    {0x01, "Stop Call Timer"},
1963
    {0x02, "Start Call Timer From Current Value"},
1964
    {0x03, "Initialize And Call Timer"},
1965
    {0, NULL}
1966
};
1967
1968
static void
1969
decode_lcd_line_cmd(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
1970
            unsigned offset, unsigned length)
1971
8
{
1972
8
    uint8_t        command, column_n;
1973
8
    const char*  command_str;
1974
8
    proto_tree    *ua3g_body_tree = tree, *ua3g_param_tree, *ua3g_option_tree;
1975
8
    proto_item    *ua3g_option_item;
1976
8
    wmem_strbuf_t *strbuf;
1977
1978
8
    command     = tvb_get_uint8(tvb, offset) & 0x03;
1979
8
    column_n    = tvb_get_uint8(tvb, offset + 1);
1980
8
    command_str = val_to_str_const(command, str_command_lcd_line, "Unknown");
1981
1982
    /* add text to the frame "INFO" column */
1983
8
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s %d", command_str, column_n);
1984
1985
8
    if (!ua3g_body_tree)
1986
0
        return;
1987
1988
8
    strbuf  = wmem_strbuf_create(pinfo->pool);
1989
1990
8
    wmem_strbuf_append_printf(strbuf, "\"%s\"", tvb_format_text(pinfo->pool, tvb, offset + 2, length - 2));
1991
1992
8
    ua3g_param_tree = proto_tree_add_subtree_format(ua3g_body_tree, tvb, offset,
1993
8
        length, ett_ua3g_param, NULL, "%s %d: %s",
1994
8
        command_str, column_n, wmem_strbuf_get_str(strbuf));
1995
1996
8
    proto_tree_add_item(ua3g_body_tree, hf_ua3g_command_lcd_line, tvb, offset, 1, ENC_BIG_ENDIAN);
1997
8
    ua3g_option_item = proto_tree_add_item(ua3g_param_tree, hf_ua3g_lcd_line_cmd_lcd_options, tvb, offset, 1, ENC_BIG_ENDIAN);
1998
8
    ua3g_option_tree = proto_item_add_subtree(ua3g_option_item, ett_ua3g_option);
1999
2000
8
    proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_call_timer, tvb, offset, 1, ENC_BIG_ENDIAN);
2001
8
    proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_blink, tvb, offset, 1, ENC_NA);
2002
8
    proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_call_timer_control, tvb, offset, 1, ENC_NA);
2003
8
    proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_call_timer_display, tvb, offset, 1, ENC_NA);
2004
8
    proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_time_of_day_display, tvb, offset, 1, ENC_NA);
2005
8
    proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_suspend_display_refresh, tvb, offset, 1, ENC_NA);
2006
2007
8
    offset++;
2008
8
    length--;
2009
2010
8
    if (command != 3)
2011
5
        proto_tree_add_item(ua3g_param_tree, hf_ua3g_lcd_line_cmd_starting_column, tvb, offset, 1, ENC_BIG_ENDIAN);
2012
3
    else
2013
3
        proto_tree_add_item(ua3g_param_tree, hf_ua3g_lcd_line_cmd_unused, tvb, offset, 1, ENC_NA);
2014
2015
8
    offset++;
2016
8
    length--;
2017
8
    proto_tree_add_string(ua3g_param_tree, hf_ua3g_lcd_line_cmd_ascii_char, tvb, offset, length, wmem_strbuf_get_str(strbuf));
2018
8
}
2019
2020
2021
/*-----------------------------------------------------------------------------
2022
    MAIN VOICE MODE - 29h (MESSAGE FROM THE SYSTEM)
2023
    ---------------------------------------------------------------------------*/
2024
static const value_string str_main_voice_mode[] = {
2025
    {0x00, "Idle"},
2026
    {0x01, "Handset"},
2027
    {0x02, "Group Listening"},
2028
    {0x03, "On Hook Dial"},
2029
    {0x04, "Handsfree"},
2030
    {0x05, "Announce Loudspeaker"},
2031
    {0x06, "Ringing"},
2032
    {0x10, "Idle"},
2033
    {0x11, "Handset"},
2034
    {0x12, "Headset"},
2035
    {0x13, "Handsfree"},
2036
    {0, NULL}
2037
};
2038
2039
static const value_string str_cadence[] = {
2040
    {0x00, "Standard Ringing"},
2041
    {0x01, "Double Burst"},
2042
    {0x02, "Triple Burst"},
2043
    {0x03, "Continuous Ringing"},
2044
    {0x04, "Priority Attendant Ringing"},
2045
    {0x05, "Regular Attendant Ringing"},
2046
    {0x06, "Programmable Cadence"},
2047
    {0x07, "Programmable Cadence"},
2048
    {0, NULL}
2049
};
2050
2051
static void
2052
decode_main_voice_mode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2053
               unsigned offset, unsigned length)
2054
1
{
2055
1
    uint8_t     mode;
2056
1
    proto_tree *ua3g_body_tree = tree;
2057
2058
1
    mode  = tvb_get_uint8(tvb, offset);
2059
2060
    /* add text to the frame "INFO" column */
2061
1
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(mode, str_main_voice_mode, "Unknown"));
2062
2063
1
    if (!ua3g_body_tree)
2064
0
        return;
2065
2066
1
    proto_tree_add_item(ua3g_body_tree, hf_ua3g_main_voice_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
2067
1
    offset++;
2068
1
    length--;
2069
2070
1
    switch (mode) {
2071
0
    case 0x06: /* Ringing */
2072
0
        {
2073
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_main_voice_mode_tune, tvb, offset, 1, ENC_BIG_ENDIAN);
2074
0
            offset++;
2075
0
            length--;
2076
2077
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_main_voice_mode_cadence, tvb, offset, 1, ENC_BIG_ENDIAN);
2078
0
            offset++;
2079
0
            length--;
2080
0
        }
2081
        /* FALLTHROUGH */
2082
0
    case 0x02: /* Group Listening */
2083
0
    case 0x03: /* On Hook Dial */
2084
0
    case 0x04: /* Handsfree */
2085
0
    case 0x05: /* Announce Loudspeaker */
2086
0
        {
2087
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_main_voice_mode_speaker_volume, tvb, offset, 1, ENC_BIG_ENDIAN);
2088
0
            offset++;
2089
0
            length--;
2090
2091
0
            if (length > 0) {
2092
0
                proto_tree_add_item(ua3g_body_tree, hf_ua3g_main_voice_mode_microphone_volume, tvb, offset, 1, ENC_BIG_ENDIAN);
2093
0
            }
2094
0
            break;
2095
0
        }
2096
0
    case 0x11: /* Handset */
2097
0
        {
2098
0
            signed char level;
2099
2100
0
            level = (signed char)(tvb_get_uint8(tvb, offset)) / 2;
2101
0
            proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_handset_level, tvb, offset, 1, level);
2102
2103
0
            level = (signed char)(tvb_get_uint8(tvb, offset+1)) / 2;
2104
0
            proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_sending_level, tvb, offset+1, 1, level);
2105
0
            break;
2106
0
        }
2107
0
    case 0x12: /* Headset */
2108
0
        {
2109
0
            signed char level;
2110
2111
0
            level = (signed char)(tvb_get_uint8(tvb, offset)) / 2;
2112
0
            proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_headset_level, tvb, offset, 1, level);
2113
2114
0
            level = (signed char)(tvb_get_uint8(tvb, offset+1)) / 2;
2115
0
            proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_sending_level, tvb, offset+1, 1, level);
2116
0
            break;
2117
0
        }
2118
0
    case 0x13: /* Handsfree */
2119
0
        {
2120
0
            signed char level;
2121
2122
0
            level = (signed char)(tvb_get_uint8(tvb, offset)) / 2;
2123
0
            proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_handsfree_level, tvb, offset, 1, level);
2124
2125
0
            level = (signed char)(tvb_get_uint8(tvb, offset+1)) / 2;
2126
0
            proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_sending_level, tvb, offset+1, 1, level);
2127
0
            break;
2128
0
        }
2129
0
    case 0x00: /* Idle */
2130
0
    case 0x01: /* Handset */
2131
0
    case 0x10: /* Idle */
2132
1
    default:
2133
1
        {
2134
1
            break;
2135
0
        }
2136
1
    }
2137
1
}
2138
2139
2140
/*-----------------------------------------------------------------------------
2141
    SUBDEVICE METASTATE - 2Ch (MESSAGE FROM THE SYSTEM)
2142
    ---------------------------------------------------------------------------*/
2143
static const value_string str_new_metastate[] = {
2144
    {0x00, "Disable"},
2145
    {0x01, "Active"},
2146
    {0x02, "Wake Up"},
2147
    {0, NULL}
2148
};
2149
2150
static void
2151
decode_subdevice_metastate(proto_tree *tree, tvbuff_t *tvb,
2152
               packet_info *pinfo _U_, unsigned offset)
2153
1
{
2154
1
    proto_tree_add_item(tree, hf_ua3g_subdevice_metastate_subchannel_address, tvb, offset, 1, ENC_BIG_ENDIAN);
2155
1
    proto_tree_add_item(tree, hf_ua3g_subdevice_metastate_new_metastate, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2156
1
}
2157
2158
2159
/*-----------------------------------------------------------------------------
2160
    Download DTMF & CLOCK FORMAT - 30h (MESSAGE FROM THE SYSTEM)
2161
    ---------------------------------------------------------------------------*/
2162
static const value_string str_clock_format[] = {
2163
    {0, "Europe"},
2164
    {1, "US"},
2165
    {0, NULL}
2166
};
2167
2168
static void
2169
decode_dwl_dtmf_clck_format(proto_tree *tree, tvbuff_t *tvb,
2170
                packet_info *pinfo _U_, unsigned offset, unsigned length)
2171
5
{
2172
5
    proto_tree_add_item(tree, hf_ua3g_dwl_dtmf_clck_format_minimum_on_time, tvb, offset, 1, ENC_BIG_ENDIAN);
2173
5
    proto_tree_add_item(tree, hf_ua3g_dwl_dtmf_clck_format_inter_digit_pause_time, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2174
5
    proto_tree_add_item(tree, hf_ua3g_dwl_dtmf_clck_format_clock_time_format, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2175
2176
5
    if (length > 2)
2177
4
        proto_tree_add_item(tree, hf_ua3g_dwl_dtmf_clck_format_dtmf_country_adaptation, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2178
5
}
2179
2180
2181
/*-----------------------------------------------------------------------------
2182
    SET CLOCK - 31h (MESSAGE FROM THE SYSTEM)
2183
    ---------------------------------------------------------------------------*/
2184
static const value_string str_command_set_clck[] = {
2185
    {0x00, "Set Current Time/Call Timer"},
2186
    {0x01, "Set Current Time"},
2187
    {0x02, "Set Call Timer"},
2188
    {0, NULL}
2189
};
2190
2191
static void
2192
decode_set_clck(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2193
        unsigned offset, unsigned length)
2194
6
{
2195
6
    uint8_t     command;
2196
6
    int         hour, minute, second, call_timer;
2197
2198
6
    command  = tvb_get_uint8(tvb, offset);
2199
2200
    /* add text to the frame "INFO" column */
2201
6
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_set_clck, "Unknown"));
2202
2203
6
    proto_tree_add_item(tree, hf_ua3g_command_set_clck, tvb, offset, 1, ENC_BIG_ENDIAN);
2204
6
    offset++;
2205
6
    length--;
2206
6
    call_timer = 0;
2207
2208
6
    switch (command) {
2209
3
    case 0x02: /* Timer Form */
2210
3
        {
2211
3
            call_timer = 1;
2212
3
        }
2213
        /* FALLTHROUGH */
2214
5
    case 0x00: /* Set Current Time/Call Timer */
2215
5
    case 0x01: /* Set Current Time */
2216
5
        {
2217
98
            while (length > 0) {
2218
93
                hour   = tvb_get_uint8(tvb, offset);
2219
93
                minute = tvb_get_uint8(tvb, offset + 1);
2220
93
                second = tvb_get_uint8(tvb, offset + 2);
2221
2222
93
                proto_tree_add_uint_format_value(tree, (call_timer == 1) ? hf_ua3g_call_timer : hf_ua3g_current_time, tvb, offset, 3,
2223
93
                    tvb_get_ntoh24(tvb, offset), "%d:%d:%d", hour, minute, second);
2224
93
                offset += 3;
2225
93
                length -= 3;
2226
2227
93
                call_timer = 1;
2228
93
            }
2229
5
        }
2230
6
    default:
2231
6
        {
2232
6
            break;
2233
5
        }
2234
6
    }
2235
2236
6
}
2237
2238
2239
/*-----------------------------------------------------------------------------
2240
    VOICE CHANNEL - 32h - (MESSAGE FROM THE SYSTEM)
2241
    ---------------------------------------------------------------------------*/
2242
static const value_string str_voice_channel[] = {
2243
    {0x00, "No"},
2244
    {0x01, "B1"},
2245
    {0x02, "B2"},
2246
    {0x03, "B3"},
2247
    {0, NULL}
2248
};
2249
2250
static const true_false_string tfs_voice_channel_channel_mode = { "Write 00 to Voice Channel", "Normal Voice Channel Mode" };
2251
static const true_false_string tfs_voice_channel_codec = { "Write Quiet To Codec", "Normal Codec Operation" };
2252
static const true_false_string tfs_voice_channel_voice_channel = { "Use B3 As Voice Channel", "Use B1 As Voice Channel" };
2253
2254
static void
2255
decode_voice_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
2256
             unsigned offset, unsigned length)
2257
0
{
2258
0
    if (length == 1) {
2259
0
        proto_tree_add_item(tree, hf_ua3g_voice_channel_channel_mode, tvb, offset, 1, ENC_NA);
2260
0
        proto_tree_add_item(tree, hf_ua3g_voice_channel_codec, tvb, offset, 1, ENC_NA);
2261
0
        proto_tree_add_item(tree, hf_ua3g_voice_channel_voice_channel, tvb, offset, 1, ENC_NA);
2262
0
    } else if (length == 2) {
2263
0
        proto_tree_add_item(tree, hf_ua3g_voice_channel_main_voice, tvb, offset, 1, ENC_BIG_ENDIAN);
2264
0
        proto_tree_add_item(tree, hf_ua3g_voice_channel_announce, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2265
0
    } else if (length == 4) {
2266
0
        proto_tree_add_item(tree, hf_ua3g_voice_channel_b_general, tvb, offset, 1, ENC_BIG_ENDIAN);
2267
0
        proto_tree_add_item(tree, hf_ua3g_voice_channel_b_loud_speaker, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2268
0
        proto_tree_add_item(tree, hf_ua3g_voice_channel_b_ear_piece, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2269
0
        proto_tree_add_item(tree, hf_ua3g_voice_channel_b_microphones, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2270
0
    }
2271
0
}
2272
2273
2274
/*-----------------------------------------------------------------------------
2275
    EXTERNAL RINGING - 33h (MESSAGE FROM THE SYSTEM)
2276
    ---------------------------------------------------------------------------*/
2277
static const value_string str_ext_ring_cmd[] = {
2278
    {0x00, "Turn Off"},
2279
    {0x01, "Turn On"},
2280
    {0x02, "Follow The Normal Ringing"},
2281
    {0, NULL}
2282
};
2283
2284
static void
2285
decode_external_ringing(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2286
            unsigned offset)
2287
1
{
2288
1
    uint8_t     command;
2289
2290
1
    command = tvb_get_uint8(tvb, offset);
2291
2292
    /* add text to the frame "INFO" column */
2293
1
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_ext_ring_cmd, "Unknown"));
2294
2295
1
    proto_tree_add_item(tree, hf_ua3g_external_ringing_command, tvb, offset, 1, ENC_BIG_ENDIAN);
2296
1
}
2297
2298
2299
/*-----------------------------------------------------------------------------
2300
    LCD CURSOR - 35h - (MESSAGE FROM THE SYSTEM)
2301
    ---------------------------------------------------------------------------*/
2302
static void
2303
decode_lcd_cursor(proto_tree *tree _U_, tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
2304
1
{
2305
1
    const char* str_on_off_val = STR_ON_OFF(tvb_get_uint8(tvb, offset + 1) & 0x02);
2306
2307
    /* add text to the frame "INFO" column */
2308
1
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", str_on_off_val);
2309
2310
1
    proto_tree_add_item(tree, hf_ua3g_lcd_cursor_line_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2311
1
    proto_tree_add_item(tree, hf_ua3g_lcd_cursor, tvb, offset+1, 1, ENC_NA);
2312
1
}
2313
2314
2315
/*-----------------------------------------------------------------------------
2316
    DOWNLOAD SPECIAL CHARACTER - 36h - (MESSAGE FROM THE SYSTEM)
2317
    ---------------------------------------------------------------------------*/
2318
static void
2319
decode_dwl_special_char(proto_tree *tree, tvbuff_t *tvb,
2320
            packet_info *pinfo _U_, unsigned offset, unsigned length)
2321
5
{
2322
5
    int            i;
2323
2324
47
    while (length > 0) {
2325
42
        proto_tree_add_item(tree, hf_ua3g_dwl_special_char_character_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2326
42
        offset++;
2327
42
        length--;
2328
359
        for (i = 1; i <= 8; i++) {
2329
317
            proto_tree_add_item(tree, hf_ua3g_dwl_special_char_byte, tvb, offset, 1, ENC_BIG_ENDIAN);
2330
317
            offset++;
2331
317
            length--;
2332
317
        }
2333
42
    }
2334
5
}
2335
2336
2337
/*-----------------------------------------------------------------------------
2338
    SET CLOCK/TIMER POSITION - 38h - (MESSAGE FROM THE SYSTEM)
2339
    ---------------------------------------------------------------------------*/
2340
static void
2341
decode_set_clck_timer_pos(proto_tree *tree, tvbuff_t *tvb,
2342
              packet_info *pinfo _U_, unsigned offset)
2343
1
{
2344
1
    if (!tree)
2345
0
        return;
2346
2347
1
    proto_tree_add_item(tree, hf_ua3g_set_clck_timer_pos_clock_line_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2348
1
    proto_tree_add_item(tree, hf_ua3g_set_clck_timer_pos_clock_column_number, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2349
1
    proto_tree_add_item(tree, hf_ua3g_set_clck_timer_pos_call_timer_line_number, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2350
1
    proto_tree_add_item(tree, hf_ua3g_set_clck_timer_pos_call_timer_column_number, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2351
1
}
2352
2353
2354
/*-----------------------------------------------------------------------------
2355
    SET LCD CONTRAST - 39h - (MESSAGE FROM THE SYSTEM)
2356
    ---------------------------------------------------------------------------*/
2357
static const value_string str_driver_number[] = {
2358
    {0x00, "Display"},
2359
    {0x01, "Icon"},
2360
    {0, NULL}
2361
};
2362
2363
static void
2364
decode_set_lcd_contrast(proto_tree *tree, tvbuff_t *tvb,
2365
            packet_info *pinfo _U_, unsigned offset)
2366
1
{
2367
1
    proto_tree_add_item(tree, hf_ua3g_set_lcd_contrast_driver_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2368
1
    proto_tree_add_item(tree, hf_ua3g_set_lcd_contrast_contrast_value, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2369
1
}
2370
2371
2372
/*-----------------------------------------------------------------------------
2373
    BEEP - 3Ch (MESSAGE FROM THE SYSTEM)
2374
    ---------------------------------------------------------------------------*/
2375
static const value_string str_command_beep[] = {
2376
    {0x01, "Beep Once"},
2377
    {0x02, "Beep Start"},
2378
    {0x03, "Stop Beep"},
2379
    {0x04, "Start Beep"},
2380
    {0x05, "Define Beep"},
2381
    {0, NULL}
2382
};
2383
2384
static const value_string str_beep_start_destination[] = {
2385
    {0x01, "Ear-Piece"},
2386
    {0x02, "Loudspeaker"},
2387
    {0x03, "Ear-Piece and Loudspeaker"},
2388
    {0, NULL}
2389
};
2390
2391
static const value_string str_beep_freq_sample_nb[] = {
2392
    {0x00, "Frequency"},
2393
    {0xFF, "Audio Sample Number"},
2394
    {0, NULL}
2395
};
2396
static const value_string str_beep_duration[] = {
2397
    {0x00, "Duration "},
2398
    {0xFF, "Duration (Ignored)"},
2399
    {0, NULL}
2400
};
2401
static const value_string str_beep_terminator[] = {
2402
    {0xFD, "Stop"},
2403
    {0xFE, "Loop"},
2404
    {0xFF, "Infinite"},
2405
    {0, NULL}
2406
};
2407
2408
static void
2409
decode_beep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2410
        unsigned offset, unsigned length)
2411
14
{
2412
14
    if (length > 0) { /* All cases except classical beep */
2413
14
        uint8_t     command;
2414
14
        proto_tree *ua3g_body_tree = tree;
2415
2416
14
        command = tvb_get_uint8(tvb, offset);
2417
2418
        /* add text to the frame "INFO" column */
2419
14
        col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_beep, "Unknown"));
2420
2421
14
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_command_beep, tvb, offset, 1, ENC_BIG_ENDIAN);
2422
14
        offset++;
2423
14
        length--;
2424
2425
14
        switch (command) {
2426
1
        case 0x01: /* Beep Once */
2427
6
        case 0x02: /* Beep Start */
2428
6
            {
2429
6
                int i =  0;
2430
2431
6
                proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_destination, tvb, offset, 1, ENC_BIG_ENDIAN);
2432
6
                offset++;
2433
6
                length--;
2434
2435
1.37k
                while (length > 0) {
2436
1.36k
                    uint8_t val;
2437
2438
1.36k
                    i++;
2439
1.36k
                    val = (tvb_get_uint8(tvb, offset) & 0x7F) * 10;
2440
1.36k
                    proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_on_off, tvb, offset, 1, ENC_NA);
2441
1.36k
                    proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_beep_cadence, tvb, offset, 1, val,
2442
1.36k
                        "Cadence T%d: %d ms", i, val);
2443
1.36k
                    offset++;
2444
1.36k
                    length--;
2445
1.36k
                }
2446
6
                break;
2447
1
            }
2448
0
        case 0x04: /* Start Beep */
2449
0
            {
2450
0
                static int * const destinations[] = {
2451
0
                    &hf_ua3g_beep_beep_destination_handset,
2452
0
                    &hf_ua3g_beep_beep_destination_headset,
2453
0
                    &hf_ua3g_beep_beep_destination_loudspeaker,
2454
0
                    &hf_ua3g_beep_beep_destination_announce_loudspeaker,
2455
0
                    &hf_ua3g_beep_beep_destination_handsfree,
2456
0
                    NULL
2457
0
                };
2458
2459
0
                proto_tree_add_bitmask(ua3g_body_tree, tvb, offset, hf_ua3g_beep_beep_destination,
2460
0
                        ett_ua3g_beep_beep_destination, destinations, ENC_NA);
2461
0
                offset++;
2462
2463
0
                proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_beep_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2464
0
                break;
2465
1
            }
2466
7
        case 0x05:
2467
7
            {
2468
7
                int i, nb_of_notes, beep_number;
2469
7
                proto_tree* note_tree;
2470
2471
7
                beep_number = tvb_get_uint8(tvb, offset);
2472
7
                proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_beep_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2473
7
                offset++;
2474
7
                length--;
2475
2476
7
                if (beep_number <= 0x44)
2477
4
                    beep_number = 0x00;
2478
3
                else
2479
3
                    beep_number = 0xFF;
2480
2481
7
                nb_of_notes = tvb_get_uint8(tvb, offset);
2482
7
                proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_number_of_notes, tvb, offset, 1, ENC_BIG_ENDIAN);
2483
7
                offset++;
2484
7
                length--;
2485
2486
202
                while (length > 0) {
2487
278
                    for (i = 1; i <= nb_of_notes; i++) {
2488
83
                        note_tree = proto_tree_add_subtree_format(ua3g_body_tree, tvb, offset, 3,
2489
83
                                        ett_ua3g_note, NULL, "Note %d", i);
2490
83
                        proto_tree_add_uint_format(note_tree, hf_ua3g_beep_freq_sample, tvb, offset, 1, tvb_get_uint8(tvb, offset),
2491
83
                            "%s: %d", val_to_str_const(beep_number, str_beep_freq_sample_nb, "Unknown"),
2492
83
                            tvb_get_uint8(tvb, offset));
2493
83
                        offset++;
2494
83
                        length--;
2495
83
                        proto_tree_add_item(note_tree, hf_ua3g_beep_level, tvb, offset, 1, ENC_NA);
2496
83
                        offset++;
2497
83
                        length--;
2498
83
                        proto_tree_add_uint_format(note_tree, hf_ua3g_beep_duration, tvb, offset, 1, tvb_get_uint8(tvb, offset),
2499
83
                            "%s: %x", val_to_str_const(beep_number, str_beep_duration, "Unknown"),
2500
83
                            tvb_get_uint8(tvb, offset));
2501
83
                        offset++;
2502
83
                        length--;
2503
83
                    }
2504
195
                    proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_terminator, tvb, offset, 1, ENC_BIG_ENDIAN);
2505
195
                    offset++;
2506
195
                    length--;
2507
195
                }
2508
7
                break;
2509
1
            }
2510
0
        case 0x03: /* Stop Beep */
2511
1
        default:
2512
1
            {
2513
1
                break;
2514
0
            }
2515
14
        }
2516
14
    } else { /* Classical Beep */
2517
        /* add text to the frame "INFO" column */
2518
0
        col_append_str(pinfo->cinfo, COL_INFO, ": Classical Beep");
2519
0
    }
2520
14
}
2521
2522
2523
/*-----------------------------------------------------------------------------
2524
    SIDETONE ON / OFF - 3Dh (MESSAGE FROM THE SYSTEM)
2525
    ---------------------------------------------------------------------------*/
2526
static void
2527
decode_sidetone(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
2528
1
{
2529
1
    uint8_t     command;
2530
1
    const char* command_str;
2531
2532
1
    command = tvb_get_uint8(tvb, offset);
2533
1
    command_str = STR_ON_OFF(command);
2534
2535
    /* add text to the frame "INFO" column */
2536
1
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", command_str);
2537
2538
1
    proto_tree_add_item(tree, hf_ua3g_command_sidetone, tvb, offset, 1, ENC_NA);
2539
2540
1
    if (command == 0x01) {
2541
0
        proto_tree_add_int(tree, hf_ua3g_sidetone_level, tvb, offset+1, 1,
2542
0
            (signed char)(tvb_get_uint8(tvb, offset+1) / 2));
2543
0
    }
2544
1
}
2545
2546
2547
/*-----------------------------------------------------------------------------
2548
    SET PROGRAMMABLE RINGING CADENCE - 3Eh (MESSAGE FROM THE SYSTEM)
2549
    ---------------------------------------------------------------------------*/
2550
static void
2551
decode_ringing_cadence(proto_tree *tree, tvbuff_t *tvb,
2552
               packet_info *pinfo _U_, unsigned offset, unsigned length)
2553
7
{
2554
7
    int         i = 0;
2555
7
    uint16_t    cadence_length;
2556
2557
7
    if (!tree)
2558
0
        return;
2559
2560
7
    proto_tree_add_item(tree, hf_ua3g_ringing_cadence_cadence, tvb, offset, 1, ENC_BIG_ENDIAN);
2561
7
    offset++;
2562
7
    length--;
2563
2564
310
    while (length > 0) {
2565
303
        i++;
2566
303
        proto_tree_add_item(tree, hf_ua3g_ringing_cadence_on_off, tvb, offset, 1, ENC_NA);
2567
303
        cadence_length = ((tvb_get_uint8(tvb, offset) & 0x7F) * 10);
2568
303
        proto_tree_add_uint_format(tree, hf_ua3g_ringing_cadence_length, tvb, offset, 1, cadence_length,
2569
303
            "Length %d : %d ms", i, cadence_length);
2570
303
        offset++;
2571
303
        length--;
2572
303
    }
2573
7
}
2574
2575
2576
/*-----------------------------------------------------------------------------
2577
    MUTE ON / OFF - 3Fh (MESSAGE FROM THE SYSTEM)
2578
    ---------------------------------------------------------------------------*/
2579
static const value_string str_mute[] = {
2580
    {0x00, "Microphone Disable"},
2581
    {0x01, "Microphone Enable"},
2582
    {0, NULL}
2583
};
2584
2585
static void
2586
decode_mute(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
2587
0
{
2588
0
    uint8_t     command;
2589
2590
0
    command = tvb_get_uint8(tvb, offset);
2591
2592
    /* add text to the frame "INFO" column */
2593
0
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_mute, "Unknown"));
2594
2595
0
    proto_tree_add_item(tree, hf_ua3g_command_mute, tvb, offset, 1, ENC_NA);
2596
0
}
2597
2598
2599
/*-----------------------------------------------------------------------------
2600
    FEEDBACK ON / OFF - 40h (MESSAGE FROM THE SYSTEM)
2601
    ---------------------------------------------------------------------------*/
2602
static void
2603
decode_feedback(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2604
        unsigned offset, unsigned length)
2605
2
{
2606
2
    uint8_t     command;
2607
2
    const char* command_str;
2608
2609
2
    command = tvb_get_uint8(tvb, offset);
2610
2
    command_str = STR_ON_OFF(command);
2611
2612
    /* add text to the frame "INFO" column */
2613
2
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", command_str);
2614
2615
2
    if (!tree)
2616
0
        return;
2617
2618
2
    proto_tree_add_item(tree, hf_ua3g_command_feedback, tvb, offset, 1, ENC_NA);
2619
2
    offset++;
2620
2
    length--;
2621
2622
2
    if (command == 0x01) {
2623
1
        proto_tree_add_int(tree, hf_ua3g_feedback_level, tvb, offset, 1,
2624
1
            (signed char)(tvb_get_uint8(tvb, offset) / 2));
2625
1
        offset++;
2626
1
        length--;
2627
2628
1
        if (length > 0) {
2629
1
            proto_tree_add_uint_format_value(tree, hf_ua3g_feedback_duration, tvb, offset, 1,
2630
1
                tvb_get_uint8(tvb, offset) * 10, "%d ms", tvb_get_uint8(tvb, offset) * 10);
2631
1
        }
2632
1
    }
2633
2
}
2634
2635
2636
/*-----------------------------------------------------------------------------
2637
    READ PERIPHERAL - 44h (MESSAGE FROM THE SYSTEM)
2638
    WRITE PERIPHERAL - 45h (MESSAGE FROM THE SYSTEM)
2639
    PERIPHERAL CONTENT - 2Bh (MESSAGE FROM THE TERMINAL)
2640
    ---------------------------------------------------------------------------*/
2641
static void
2642
decode_r_w_peripheral(proto_tree *tree, tvbuff_t *tvb,
2643
              packet_info *pinfo _U_, unsigned offset, unsigned length)
2644
4
{
2645
4
    proto_tree_add_item(tree, hf_ua3g_r_w_peripheral_address, tvb, offset, 2, ENC_BIG_ENDIAN);
2646
2647
4
    if (length > 2) {
2648
4
        proto_tree_add_item(tree, hf_ua3g_r_w_peripheral_content, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2649
4
    }
2650
4
}
2651
2652
2653
/*-----------------------------------------------------------------------------
2654
    ICON COMMAND - 47h (MESSAGE FROM THE SYSTEM)
2655
    ---------------------------------------------------------------------------*/
2656
static const value_string str_icon_cmd_state[] = {
2657
    {0x00, "Off"},
2658
    {0x01, "Slow Flash"},
2659
    {0x02, "Not Used"},
2660
    {0x03, "Steady On"},
2661
    {0, NULL}
2662
};
2663
2664
static void
2665
decode_icon_cmd(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, unsigned offset)
2666
1
{
2667
1
    uint8_t byte0, byte1, bytex;
2668
1
    int i;
2669
2670
1
    if (!tree)
2671
0
        return;
2672
2673
1
    proto_tree_add_item(tree, hf_ua3g_icon_cmd_icon_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2674
2675
1
    byte0 = tvb_get_uint8(tvb, offset+1);
2676
1
    byte1 = tvb_get_uint8(tvb, offset+2);
2677
2678
9
    for (i = 0; i < 8; i++) {
2679
8
        bytex =
2680
8
            ((byte0 >> i) & 0x01) * 2 +
2681
8
            ((byte1 >> i) & 0x01);
2682
8
        proto_tree_add_uint_format(tree, hf_ua3g_icon_cmd_segment, tvb, offset+1, 2, bytex,
2683
8
                            "Segment %d: %s (%d)", i, val_to_str_const(bytex, str_icon_cmd_state, "Unknown"), bytex);
2684
8
    }
2685
1
}
2686
2687
2688
/*-----------------------------------------------------------------------------
2689
    AUDIO CONFIGURATION - 49h (MESSAGE FROM THE SYSTEM)
2690
    ---------------------------------------------------------------------------*/
2691
static const value_string str_command_audio_config[] = {
2692
    {0x00, "Audio Coding"},
2693
    {0x01, "DPI Channel Allocations"},
2694
    {0x02, "Loudspeaker Volume Adjust"},
2695
    {0x03, "Audio Circuit Configuration"},
2696
    {0x04, "Handsfree Parameters"},
2697
    {0x05, "Loudspeaker Acoustic Parameters"},
2698
    {0x06, "Device Configuration"},
2699
    {0, NULL}
2700
};
2701
2702
static const value_string str_audio_coding_law[] = {
2703
    {0x00, "A Law"},
2704
    {0x01, "m Law"},
2705
    {0, NULL}
2706
};
2707
2708
static const value_string str_device_configuration[] = {
2709
    { 0, "Handset Device             "},
2710
    { 1, "Headset Device             "},
2711
    { 2, "Loudspeaker Device         "},
2712
    { 3, "Announce Loudspeaker Device"},
2713
    { 4, "Handsfree Device           "},
2714
    { 0, NULL }
2715
};
2716
2717
static const true_false_string tfs_audio_config_handsfree_return = { "Return Loss Active", "Return Loss Normal" };
2718
static const true_false_string tfs_audio_config_handsfree_handsfree = { "More Full Duplex", "Handsfree Normal" };
2719
2720
static void
2721
decode_audio_config(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2722
            unsigned offset, unsigned length)
2723
34
{
2724
34
    uint8_t     command;
2725
34
    proto_tree *ua3g_body_tree = tree;
2726
2727
34
    command = tvb_get_uint8(tvb, offset);
2728
2729
    /* add text to the frame "INFO" column */
2730
34
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_audio_config, "Unknown"));
2731
2732
34
    if (!ua3g_body_tree)
2733
0
        return;
2734
2735
34
    proto_tree_add_item(ua3g_body_tree, hf_ua3g_command_audio_config, tvb, offset, 1, ENC_BIG_ENDIAN);
2736
34
    offset++;
2737
34
    length--;
2738
2739
34
    switch (command) {
2740
2
    case 0x00: /* Audio Coding */
2741
2
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_ignored, tvb, offset, 1, ENC_BIG_ENDIAN);
2742
2
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_law, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2743
2
        break;
2744
1
    case 0x01: /* DPI Channel Allocations */
2745
2746
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_dpi_chan_ua_tx1, tvb, offset, 1, ENC_BIG_ENDIAN);
2747
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_dpi_chan_ua_tx2, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2748
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_dpi_chan_gci_tx1, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2749
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_dpi_chan_gci_tx2, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2750
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_dpi_chan_cod_tx, tvb, offset+4, 1, ENC_BIG_ENDIAN);
2751
1
        break;
2752
0
    case 0x02: /* Loudspeaker Volume Adjust */
2753
0
        {
2754
0
            int i;
2755
0
            for (i = 1; i < 8; i++) {
2756
0
                proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_audio_config_volume_level, tvb, offset,
2757
0
                    1, tvb_get_uint8(tvb, offset), "Volume Level %d: %d",
2758
0
                    i, tvb_get_uint8(tvb, offset));
2759
0
                offset++;
2760
0
                length--;
2761
0
            }
2762
0
            break;
2763
0
        }
2764
0
    case 0x03: /* Audio Circuit Configuration */
2765
2766
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_dth, tvb, offset, 1, ENC_BIG_ENDIAN);
2767
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_dtr, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2768
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_dtf, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2769
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_str, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2770
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_ahp1, tvb, offset+4, 1, ENC_BIG_ENDIAN);
2771
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_ahp2, tvb, offset+5, 1, ENC_BIG_ENDIAN);
2772
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_ath, tvb, offset+6, 1, ENC_BIG_ENDIAN);
2773
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_atr, tvb, offset+7, 1, ENC_BIG_ENDIAN);
2774
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_atf, tvb, offset+8, 1, ENC_BIG_ENDIAN);
2775
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_alm, tvb, offset+9, 1, ENC_BIG_ENDIAN);
2776
0
        break;
2777
0
    case 0x04: /* Handsfree Parameters */
2778
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_handsfree_return, tvb, offset, 1, ENC_NA);
2779
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_handsfree_handsfree, tvb, offset, 1, ENC_NA);
2780
0
        break;
2781
1
    case 0x05: /* Loudspeaker Acoustic Parameters */
2782
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_group_listen, tvb, offset, 1, ENC_BIG_ENDIAN);
2783
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_attenuation, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2784
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_stay_in_send, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2785
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mtx, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2786
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mrc, tvb, offset+4, 1, ENC_BIG_ENDIAN);
2787
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_trans_threshold, tvb, offset+5, 1, ENC_BIG_ENDIAN);
2788
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_trans_threshold, tvb, offset+6, 1, ENC_BIG_ENDIAN);
2789
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_recv_threshold, tvb, offset+7, 1, ENC_BIG_ENDIAN);
2790
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_recv_threshold, tvb, offset+8, 1, ENC_BIG_ENDIAN);
2791
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_med_recv_threshold, tvb, offset+9, 1, ENC_BIG_ENDIAN);
2792
1
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_high_recv_threshold, tvb, offset+10, 1, ENC_BIG_ENDIAN);
2793
1
        break;
2794
29
    case 0x06: /* Device Configuration */
2795
29
        {
2796
29
            static const char *str_device_values[] = {
2797
29
                " Internal",
2798
29
                " Rj9 Plug",
2799
29
                " Jack Plug",
2800
29
                " Bluetooth Link",
2801
29
                " USB Link"
2802
29
            };
2803
29
            wmem_strbuf_t *strbuf;
2804
29
            uint8_t device_values;
2805
29
            int j;
2806
29
            int device_index = 0;
2807
2808
29
            strbuf = wmem_strbuf_create(pinfo->pool);
2809
2810
5.57k
            while (length > 0) {
2811
2812
5.54k
                device_values = tvb_get_uint8(tvb, offset);
2813
2814
5.54k
                wmem_strbuf_truncate(strbuf, 0);
2815
2816
5.54k
                if (device_values != 0) {
2817
26.3k
                    for (j = 0; j < 5; j++) {
2818
21.9k
                        if (device_values & (0x01 << j)) {
2819
13.0k
                            wmem_strbuf_append(strbuf, str_device_values[j]);
2820
13.0k
                        }
2821
21.9k
                    }
2822
4.39k
                } else {
2823
1.14k
                    wmem_strbuf_append(strbuf, " None");
2824
1.14k
                }
2825
2826
5.54k
                proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_device_configuration, tvb, offset, 1,
2827
5.54k
                                    device_values, "%s:%s",
2828
5.54k
                                    val_to_str_const(device_index, str_device_configuration, "Unknown"),
2829
5.54k
                                    wmem_strbuf_get_str(strbuf));
2830
5.54k
                offset++;
2831
5.54k
                length--;
2832
5.54k
                device_index++;
2833
5.54k
            }
2834
29
            break;
2835
0
        }
2836
1
    default:
2837
1
        {
2838
1
            break;
2839
0
        }
2840
34
    }
2841
34
}
2842
2843
2844
/*-----------------------------------------------------------------------------
2845
    AUDIO PADDED PATH - 4Ah (MESSAGE FROM THE SYSTEM)
2846
    ---------------------------------------------------------------------------*/
2847
static void
2848
decode_audio_padded_path(proto_tree *tree, tvbuff_t *tvb,
2849
             packet_info *pinfo _U_, unsigned offset)
2850
1
{
2851
1
    proto_tree_add_item(tree, hf_ua3g_audio_padded_path_emission_padded_level, tvb, offset, 1, ENC_BIG_ENDIAN);
2852
1
    proto_tree_add_item(tree, hf_ua3g_audio_padded_path_reception_padded_level, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2853
1
}
2854
2855
2856
/*-----------------------------------------------------------------------------
2857
    KEY RELEASE ON / OFF - 41h (MESSAGE FROM THE SYSTEM)
2858
    AMPLIFIED HANDSET (BOOST) - 48h (MESSAGE FROM THE SYSTEM)
2859
    LOUDSPEAKER ON / OFF - 4Dh (MESSAGE FROM THE SYSTEM)
2860
    ANNOUNCE ON / OFF - 4Eh (MESSAGE FROM THE SYSTEM)
2861
    ---------------------------------------------------------------------------*/
2862
static void
2863
decode_on_off_level(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2864
            unsigned offset, unsigned length, int hf_opcode)
2865
3
{
2866
3
    uint8_t     command;
2867
3
    const char* command_str;
2868
2869
3
    command = tvb_get_uint8(tvb, offset);
2870
3
    command_str = STR_ON_OFF(command);
2871
2872
    /* add text to the frame "INFO" column */
2873
3
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", command_str);
2874
2875
3
    proto_tree_add_item(tree, hf_opcode, tvb, offset, 1, ENC_NA);
2876
2877
3
    if (length > 1) {
2878
2
        if (command == 0x01) {
2879
0
            proto_tree_add_item(tree, hf_ua3g_on_off_level_level_on_loudspeaker, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2880
0
        }
2881
2
    }
2882
3
}
2883
2884
2885
/*-----------------------------------------------------------------------------
2886
    RING ON / OFF - 4Fh (MESSAGE FROM THE SYSTEM)
2887
    ---------------------------------------------------------------------------*/
2888
static void
2889
decode_ring(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
2890
0
{
2891
0
    uint8_t     command;
2892
0
    const char* command_str;
2893
2894
0
    command = tvb_get_uint8(tvb, offset);
2895
0
    command_str = STR_ON_OFF(command);
2896
2897
    /* add text to the frame "INFO" column */
2898
0
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", command_str);
2899
2900
0
    if (!tree)
2901
0
        return;
2902
2903
0
    proto_tree_add_item(tree, hf_ua3g_command_ring, tvb, offset, 1, ENC_NA);
2904
2905
0
    if (command == 0x01) {
2906
0
        proto_tree_add_item(tree, hf_ua3g_ring_melody, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2907
0
        proto_tree_add_item(tree, hf_ua3g_ring_cadence, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2908
0
        proto_tree_add_item(tree, hf_ua3g_ring_speaker_level, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2909
0
        proto_tree_add_item(tree, hf_ua3g_ring_beep_number, tvb, offset+4, 1, ENC_BIG_ENDIAN);
2910
0
        proto_tree_add_item(tree, hf_ua3g_ring_silent, tvb, offset+5, 1, ENC_NA);
2911
0
        proto_tree_add_item(tree, hf_ua3g_ring_progressive, tvb, offset+5, 1, ENC_BIG_ENDIAN);
2912
0
    }
2913
0
}
2914
2915
2916
/*-----------------------------------------------------------------------------
2917
    UA DOWNLOAD PROTOCOL - 50h - Only for UA NOE (MESSAGE FROM THE TERMINAL AND FROM THE SYSTEM)
2918
    ---------------------------------------------------------------------------*/
2919
static const value_string str_command_ua_dwl_protocol[] = {
2920
    {0x00, "Downloading Suggest"},
2921
    {0x01, "Downloading Request"},
2922
    {0x02, "Downloading Acknowledge"},
2923
    {0x03, "Downloading Data"},
2924
    {0x04, "Downloading End"},
2925
    {0x05, "Downloading End Acknowledge"},
2926
    {0x06, "Downloading ISO Checksum"},
2927
    {0x07, "Downloading ISO Checksum Acknowledge"},
2928
    {0, NULL}
2929
};
2930
2931
static const value_string str_download_req_force_mode[] = {
2932
    {0x00, "System Accept All Refusals"},
2933
    {0x01, "Force Software Lock"},
2934
    {0, NULL}
2935
};
2936
#if 0
2937
static const value_string str_download_req_item_id[] = {
2938
    {0x00, "Patches File"},
2939
    {0x01, "Application Binary"},
2940
    {0x02, "Datas Binary"},
2941
    {0, NULL}
2942
};
2943
#endif
2944
static const value_string str_download_req_mode_selection_country[] = {
2945
    {0x00, "No Check"},
2946
    {0x01, "For All Countries Except Chinese"},
2947
    {0x02, "For Chinese"},
2948
    {0, NULL}
2949
};
2950
2951
static const value_string str_download_ack_status[] = {
2952
    {0x00, "Ok (Binary Item Downloading In \"Normal\" Progress)"},
2953
    {0x01, "Hardware Failure: Flash Failure"},
2954
    {0x02, "Not Enough Place To Store The Downloaded Binary"},
2955
    {0x03, "Wrong Seq Number On Latest Received Download_Data Message"},
2956
    {0x04, "Wrong Packet Number On Latest Received Download_Data Message"},
2957
    {0x05, "Download Refusal Terminal (Validation Purpose)"},
2958
    {0x06, "Download Refusal Terminal (Development Purpose)"},
2959
    {0x10, "Download Refusal: Hardware Cause (Unknown Flash Device, Incompatible Hardware)"},
2960
    {0x11, "Download Refusal: No Loader Available Into The Terminal"},
2961
    {0x12, "Download Refusal: Software Lock"},
2962
    {0x13, "Download Refusal: Wrong Parameter Into Download Request"},
2963
    {0x20, "Wrong Packet Number On Latest Received Downloading_Data Message"},
2964
    {0x21, "Compress Header Invalid"},
2965
    {0x22, "Decompress Error"},
2966
    {0x23, "Binary Header Invalid"},
2967
    {0x24, "Binary Check Error: Flash Write Error Or Binary Is Invalid"},
2968
    {0x25, "Error Already Signaled - No More Data Accepted"},
2969
    {0x26, "No Downloading In Progress"},
2970
    {0x27, "Too Many Bytes Received (More Than Size Given Into The Download_Req Message)"},
2971
    {0xFF, "Undefined Error"},
2972
    {0, NULL}
2973
};
2974
static value_string_ext str_download_ack_status_ext = VALUE_STRING_EXT_INIT(str_download_ack_status);
2975
2976
static const value_string str_download_end_ack_ok[] = {
2977
    {0x00, "Ok"},
2978
    {0x01, "Hardware Failure: Flash Problems"},
2979
    {0x02, "Not Enough Place To Store The Downloaded Binary"},
2980
    {0, NULL}
2981
};
2982
2983
static const value_string str_iso_checksum_ack_status[] = {
2984
    {0x00, "The Checksum Matches"},
2985
    {0x25, "Error Detected And Already Signaled"},
2986
    {0x30, "Checksum Error (All Bytes Received)"},
2987
    {0x31, "Checksum Error (Bytes Missing)"},
2988
    {0, NULL}
2989
};
2990
2991
static const value_string str_mem_size[] = {
2992
    {0x00, "No Check"},
2993
    {0x01, "128 Kbytes"},
2994
    {0x02, "256 Kbytes"},
2995
    {0x03, "512 Kbytes"},
2996
    {0x04, "1 Mbytes"},
2997
    {0x05, "2 Mbytes"},
2998
    {0x06, "4 Mbytes"},
2999
    {0x07, "8 Mbytes"},
3000
    {0, NULL}
3001
};
3002
3003
static const true_false_string tfs_bin_info = { "LZO Compressed Binary", "Uncompressed Binary" };
3004
3005
static void
3006
decode_ua_dwl_protocol(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
3007
               unsigned offset, unsigned length)
3008
3
{
3009
3
    uint8_t     command;
3010
3
    proto_tree    *ua3g_body_tree = tree, *ua3g_param_tree;
3011
3012
3
    command = tvb_get_uint8(tvb, offset);
3013
3014
    /* add text to the frame "INFO" column */
3015
3
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_ua_dwl_protocol, "Unknown"));
3016
3017
3
    proto_tree_add_item(ua3g_body_tree, hf_ua3g_command_ua_dwl_protocol, tvb, offset, 1, ENC_BIG_ENDIAN);
3018
3
    offset++;
3019
3
    length--;
3020
3021
3
    switch (command) {
3022
0
    case 0x00:  /* Downloading Suggest (MESSAGE FROM THE TERMINAL) */
3023
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_item_identifier, tvb, offset, 1, ENC_BIG_ENDIAN);
3024
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_item_version_nc, tvb, offset+1, 2, ENC_BIG_ENDIAN);
3025
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_cause, tvb, offset+3, 1, ENC_BIG_ENDIAN);
3026
0
        break;
3027
1
    case 0x01:  /* Downloading Request (MESSAGE FROM THE SYSTEM) */
3028
1
        {
3029
1
            if (length > 7) { /* Not R1 */
3030
1
                proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_force_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
3031
1
                offset++;
3032
1
                length--;
3033
1
            }
3034
3035
1
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_item_identifier, tvb, offset, 1, ENC_BIG_ENDIAN);
3036
1
            offset++;
3037
1
            length--;
3038
3039
1
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_item_version, tvb, offset, 2, ENC_BIG_ENDIAN);
3040
1
            offset += 2;
3041
1
            length -= 2;
3042
3043
1
            if (length > 2) { /* Not R1 */
3044
1
                ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Files Included");
3045
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_files_inc_boot_binary,
3046
1
                        tvb, offset, 1, ENC_NA);
3047
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_files_inc_loader_binary,
3048
1
                        tvb, offset, 1, ENC_NA);
3049
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_files_inc_appli_binary,
3050
1
                        tvb, offset, 1, ENC_NA);
3051
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_files_inc_data_binary,
3052
1
                        tvb, offset, 1, ENC_NA);
3053
1
                offset++;
3054
1
                length--;
3055
3056
1
                ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Model Selection");
3057
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_model_selection_a,
3058
1
                        tvb, offset, 1, ENC_NA);
3059
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_model_selection_b,
3060
1
                        tvb, offset, 1, ENC_NA);
3061
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_model_selection_c,
3062
1
                        tvb, offset, 1, ENC_NA);
3063
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_model_selection_country_ver,
3064
1
                        tvb, offset, 1, ENC_BIG_ENDIAN);
3065
1
                offset++;
3066
1
                length--;
3067
1
                ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Hardware Selection");
3068
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe1,
3069
1
                        tvb, offset, 1, ENC_NA);
3070
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe2,
3071
1
                        tvb, offset, 1, ENC_NA);
3072
1
                offset++;
3073
1
                length--;
3074
3075
1
                ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Memory Sizes Required");
3076
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_memory_sizes_flash,
3077
1
                        tvb, offset, 1, ENC_BIG_ENDIAN);
3078
1
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_memory_sizes_ext_ram,
3079
1
                        tvb, offset, 1, ENC_BIG_ENDIAN);
3080
1
                offset++;
3081
1
                length--;
3082
1
            } else { /* R1 */
3083
0
                proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_binary_info, tvb, offset, 1, ENC_NA);
3084
0
                offset++;
3085
0
                length--;
3086
0
            }
3087
3088
1
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_binary_length, tvb, offset, 3, ENC_BIG_ENDIAN);
3089
1
            break;
3090
0
        }
3091
0
    case 0x02:  /* Downloading Acknowledge (MESSAGE FROM THE TERMINAL) */
3092
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_packet_number, tvb, offset, 2, ENC_BIG_ENDIAN);
3093
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_download_ack_status, tvb, offset+2, 1, ENC_BIG_ENDIAN);
3094
0
        break;
3095
0
    case 0x03:  /* Downloading Data (MESSAGE FROM THE SYSTEM) */
3096
0
        {
3097
0
            int i = 1;
3098
3099
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_packet_number, tvb, offset, 2, ENC_BIG_ENDIAN);
3100
0
            offset += 2;
3101
0
            length -= 2;
3102
3103
0
            while (length > 0) {
3104
0
                proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_packet_number, tvb, offset, 1,
3105
0
                    tvb_get_uint8(tvb, offset), "Packet Number %3d: %d", i, tvb_get_uint8(tvb, offset));
3106
0
                offset++;
3107
0
                length--;
3108
0
                i++;
3109
0
            }
3110
0
            break;
3111
0
        }
3112
0
    case 0x05:  /* Downloading End Acknowledge (MESSAGE FROM THE TERMINAL) */
3113
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_packet_download_end_ack_ok_status, tvb, offset, 1, ENC_BIG_ENDIAN);
3114
0
        break;
3115
0
    case 0x06:  /* Downloading Iso Checksum (MESSAGE FROM THE SYSTEM) */
3116
0
        proto_tree_add_checksum(ua3g_body_tree, tvb, offset, hf_ua3g_ua_dwl_protocol_checksum, -1, NULL, pinfo, 0, ENC_BIG_ENDIAN, PROTO_CHECKSUM_NO_FLAGS);
3117
0
        break;
3118
0
    case 0x07:  /* Downloading ISO Checksum Acknowledge (MESSAGE FROM THE TERMINAL) */
3119
0
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_acknowledge, tvb, offset, 1, ENC_BIG_ENDIAN);
3120
0
        break;
3121
0
    case 0x04:  /* Downloading End (MESSAGE FROM THE SYSTEM) */
3122
2
    default:
3123
2
        break;
3124
3
    }
3125
3
}
3126
3127
3128
/*-----------------------------------------------------------------------------
3129
    DIGIT DIALED - 03h (MESSAGE FROM THE SYSTEM)
3130
    ---------------------------------------------------------------------------*/
3131
static void
3132
decode_digit_dialed(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, unsigned offset)
3133
0
{
3134
0
    proto_tree_add_item(tree, hf_ua3g_digit_dialed_digit_value, tvb, offset, 1, ENC_BIG_ENDIAN);
3135
0
}
3136
3137
3138
/*-----------------------------------------------------------------------------
3139
    SUBDEVICE_MSG - 04h (MESSAGE FROM THE TERMINAL)
3140
    ---------------------------------------------------------------------------*/
3141
static void
3142
decode_subdevice_msg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
3143
             unsigned offset, unsigned length)
3144
0
{
3145
0
    if (!tree)
3146
0
        return;
3147
3148
0
    proto_tree_add_item(tree, hf_ua3g_subdevice_msg_subdev_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3149
0
    proto_tree_add_item(tree, hf_ua3g_subdevice_msg_subdev_address, tvb, offset, 1, ENC_BIG_ENDIAN);
3150
3151
0
    proto_tree_add_item(tree, hf_ua3g_subdevice_msg_subdevice_opcode, tvb, offset+1, 1, ENC_BIG_ENDIAN);
3152
3153
0
    if (length > 2) {
3154
0
        proto_tree_add_item(tree, hf_ua3g_subdevice_msg_parameter_bytes, tvb, offset+2, length-2, ENC_NA);
3155
0
    }
3156
0
}
3157
3158
3159
/*-----------------------------------------------------------------------------
3160
    IP DEVICE ROUTING - 13h (MESSAGE FROM THE TERMINAL)
3161
    ---------------------------------------------------------------------------*/
3162
static const value_string str_command_cs_ip_device_routing[] = {
3163
    {0x00, "Init"},
3164
    {0x01, "Incident"},
3165
    {0x02, "Get Parameters Value Response"},
3166
    {0x03, "QOS Ticket RSP"},
3167
    {0, NULL}
3168
};
3169
3170
static const value_string str_vta_type[] = {
3171
    {0x03, "4035"},
3172
    {0x04, "4020"},
3173
    {0x05, "4010"},
3174
    {0x20, "4018"},
3175
    {0x21, "4028/8008/8008G/8028/8028S/8058S"},
3176
    {0x22, "4038/8038"},
3177
    {0x23, "4068/8068/8082/8068S"},
3178
    {0x24, "mipt"},
3179
    {0x25, "4008"},
3180
    {0x32, "8058S"},
3181
    {0x34, "8078S"},
3182
    {0x35, "8088"},
3183
    {0, NULL}
3184
};
3185
3186
static const value_string str_additional_vta_type[] = {
3187
    {0x00, "Not Applicable"},
3188
    {0x30, "8018"},
3189
    {0x31, "8028S"},
3190
    {0x32, "8058S"},
3191
    {0x33, "4068S"},
3192
    {0x34, "8078S"},
3193
    {0x35, "8088"},
3194
    {0x36, "8008/8008G"},
3195
    {0, NULL}
3196
};
3197
3198
static const value_string str_cs_ip_device_routing_0F_compressor[] = {
3199
    {0x00, "G.711 A-law"},
3200
    {0x01, "G.711 mu-law"},
3201
    {0x02, "G.723.1 5.3kbps"},
3202
    {0x03, "G.723.1 6.3kbps"},
3203
    {0x04, "G.729A 8kbps"},
3204
    {0x05, "G.722 64kbps"},
3205
    {0x06, "G.722 56kbps"},
3206
    {0x07, "G.722 48kbps"},
3207
    {0x08, "Opus"},
3208
    {0, NULL}
3209
};
3210
3211
static const value_string cs_ip_device_routing_03_parameter_id_vals[] = {
3212
    {0x01, "Date Of End Of Communication"},
3213
    {0x02, "Node Number"},
3214
    {0x03, "Ticket Protocol Version"},
3215
    {0x06, "Equipment Type"},
3216
    {0x08, "Local IP Address"},
3217
    {0x09, "Distant IP Address"},
3218
    {0x0A, "Local ID"},
3219
    {0x0B, "Distant ID"},
3220
    {0x0C, "Call Duration (second)"},
3221
    {0x0D, "Local SSRC"},
3222
    {0x0E, "Distant SSRC"},
3223
    {0x0F, "Codec"},
3224
    {0x10, "VAD"},
3225
    {0x11, "ECE"},
3226
    {0x12, "Voice Mode"},
3227
    {0x13, "Transmitted Framing (ms)"},
3228
    {0x14, "Received Framing (ms)"},
3229
    {0x15, "Framing Changes"},
3230
    {0x16, "Number Of RTP Packets Received"},
3231
    {0x17, "Number Of RTP Packets Sent"},
3232
    {0x18, "Number Of RTP Packets Lost"},
3233
    {0x19, "Total Silence Detected (second)"},
3234
    {0x1A, "Number Of SID Received"},
3235
    {0x1B, "Delay Distribution"},
3236
    {0x1C, "Maximum Delay (ms)"},
3237
    {0x1D, "Number Of DTMF Received"},
3238
    {0x1E, "Consecutive BFI"},
3239
    {0x1F, "BFI Distribution"},
3240
    {0x20, "Jitter Depth Distribution"},
3241
    {0x21, "Number Of ICMP Host Unreachable"},
3242
    {0x26, "Firmware Version"},
3243
    {0x29, "DSP Framing (ms)"},
3244
    {0x2A, "Transmitter SID"},
3245
    {0x2D, "Minimum Delay (ms)"},
3246
    {0x2E, "802.1 Q Used"},
3247
    {0x2F, "802.1p Priority"},
3248
    {0x30, "VLAN Id"},
3249
    {0x31, "DiffServ"},
3250
    {0x37, "Encryption"},
3251
    {0x3D, "200 ms BFI Distribution"},
3252
    {0x3E, "Consecutive RTP Lost"},
3253
    {0, NULL}
3254
};
3255
static value_string_ext cs_ip_device_routing_03_parameter_id_vals_ext = VALUE_STRING_EXT_INIT(cs_ip_device_routing_03_parameter_id_vals);
3256
3257
static const value_string cs_ip_device_routing_cmd03_type_of_equip_vals[] = {
3258
    {0x0101, "IP-Phone V2"},
3259
    {0x0102, "NOE-IP"},
3260
    {0x0200, "4980 Softphone (PCMM2)"},
3261
    {0x0201, "WebSoftphoneIP"},
3262
    {0x0300, "INTIP"},
3263
    {0x0301, "GD/GA"},
3264
    {0x0302, "4645"},
3265
    {0x0303, "INTIP3"},
3266
    {0x0304, "GD3/GA3"},
3267
    {0x0305, "OXE MS"},
3268
    {0x0306, "INTIP3-RTPproxy"},
3269
    {0x0307, "GD3/GA3-RTPproxy"},
3270
    {0x0308, "MS-RTPproxy"},
3271
    {0x0400, "OXO"},
3272
    {0, NULL}
3273
};
3274
3275
static const value_string cs_ip_device_routing_cmd03_voice_mode_vals[] = {
3276
    {0x50, "Idle"},
3277
    {0x51, "Handset"},
3278
    {0x52, "Group Listening"},
3279
    {0x53, "On Hook Dial"},
3280
    {0x54, "Handsfree"},
3281
    {0x55, "Headset"},
3282
    {0, NULL}
3283
};
3284
3285
static const value_string cs_ip_device_routing_delay_distribution_range_vals[] = {
3286
    {0, "0-40     "},
3287
    {1, "40-80    "},
3288
    {2, "80-150   "},
3289
    {3, "150-250  "},
3290
    {4, "250 and +"},
3291
    {0, NULL}
3292
};
3293
3294
static const value_string cs_ip_device_routing_0_9_range_vals[] = {
3295
    {0, "0      "},
3296
    {1, "1      "},
3297
    {2, "2      "},
3298
    {3, "3      "},
3299
    {4, "4      "},
3300
    {5, "5      "},
3301
    {6, "5      "},
3302
    {7, "7      "},
3303
    {8, "8      "},
3304
    {9, "9 and +"},
3305
    {0, NULL}
3306
};
3307
3308
static const value_string cs_ip_device_routing_bfi_distribution_range_vals[] = {
3309
    {0, "0      "},
3310
    {1, "0-1    "},
3311
    {2, "1-2    "},
3312
    {3, "2-3    "},
3313
    {4, "3 and +"},
3314
    {0, NULL}
3315
};
3316
3317
static const value_string cs_ip_device_routing_200ms_bfi_distribution_range_vals[] = {
3318
    {0, "< 10% "},
3319
    {1, "< 20% "},
3320
    {2, "< 40% "},
3321
    {3, "< 60% "},
3322
    {4, ">= 60%"},
3323
    {0, NULL}
3324
};
3325
3326
static const value_string cs_ip_device_routing_consecutive_rtp_lost_range_vals[] = {
3327
    {0, "1      "},
3328
    {1, "2      "},
3329
    {2, "3      "},
3330
    {3, "4      "},
3331
    {4, "5 and +"},
3332
    {0, NULL}
3333
};
3334
3335
static void
3336
decode_cs_ip_device_routing(proto_tree *tree _U_, tvbuff_t *tvb,
3337
                packet_info *pinfo, unsigned offset, unsigned length)
3338
42
{
3339
42
    uint8_t command;
3340
42
    proto_tree *ua3g_body_tree = tree, *ua3g_param_tree;
3341
42
    proto_item *ua3g_param_item;
3342
42
    int i, parameter_id, parameter_length;
3343
3344
42
    command = tvb_get_uint8(tvb, offset);
3345
3346
    /* add text to the frame "INFO" column */
3347
42
    col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_cs_ip_device_routing, "Unknown"));
3348
3349
42
    if (!ua3g_body_tree)
3350
0
        return;
3351
3352
42
    proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_cs, tvb, offset, 1, ENC_BIG_ENDIAN);
3353
42
    offset++;
3354
42
    length--;
3355
3356
42
    switch (command) {
3357
0
        case 0x00:
3358
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_cmd00_vta_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3359
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_cmd00_characteristic_number, tvb, offset+1, 1, ENC_BIG_ENDIAN);
3360
0
            break;
3361
3
        case 0x01:
3362
3
            {
3363
3
                int j = 0;
3364
3
                if (length == 1) {
3365
0
                    proto_tree_add_item(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_cmd01_incident_0, tvb, offset, 1, ENC_BIG_ENDIAN);
3366
3
                } else {
3367
463
                    while (length >0) {
3368
460
                        j++;
3369
460
                        proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_param_identifier, tvb, offset, 1,
3370
460
                            tvb_get_uint8(tvb, offset), "Parameter %d Identifier: %d",
3371
460
                            j, tvb_get_uint8(tvb, offset));
3372
460
                        offset++;
3373
460
                        length--;
3374
460
                    }
3375
3
                }
3376
3
                break;
3377
0
            }
3378
31
        case 0x02:
3379
378
            while (length > 0) {
3380
366
                parameter_id = tvb_get_uint8(tvb, offset);
3381
366
                parameter_length = tvb_get_uint8(tvb, offset + 1);
3382
3383
366
                ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter, tvb, offset,
3384
366
                    parameter_length + 2, parameter_id,
3385
366
                    "%s", val_to_str_const(parameter_id, ip_device_routing_cmd_get_param_req_vals, "Unknown"));
3386
366
                ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
3387
3388
366
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
3389
366
                offset++;
3390
366
                length--;
3391
3392
366
                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
3393
366
                offset++;
3394
366
                length--;
3395
3396
366
                if (parameter_length > 0) {
3397
216
                    switch (parameter_id) {
3398
44
                    case 0x00: /* Firmware Version */
3399
44
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_firmware_version, tvb, offset, 2, ENC_BIG_ENDIAN);
3400
44
                        break;
3401
16
                    case 0x01: /* Firmware Version (same as above, different format) */
3402
16
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_tscip_version, tvb, offset, 3, ENC_BIG_ENDIAN);
3403
16
                        break;
3404
6
                    case 0x02: /* DHCP IP Address */
3405
21
                    case 0x03: /* Local IP Address */
3406
22
                    case 0x04: /* Subnetwork Mask */
3407
62
                    case 0x05: /* Router IP Address */
3408
63
                    case 0x06: /* TFTP IP Address */
3409
75
                    case 0x07: /* Main CPU Address */
3410
75
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
3411
75
                        break;
3412
4
                    case 0x08: /* Default Codec */
3413
4
                        {
3414
4
                            if (parameter_length <= 8) {
3415
3
                                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
3416
3
                            } else {
3417
1
                                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_bytes, tvb, offset, parameter_length, ENC_NA);
3418
1
                            }
3419
4
                            break;
3420
63
                        }
3421
1
                    case 0x09: /* Ethernet Drivers Config */
3422
1
                        {
3423
1
                            if (parameter_length == 2) {
3424
0
                                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_speed, tvb, offset, 1, ENC_BIG_ENDIAN);
3425
0
                                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_duplex, tvb, offset+1, 1, ENC_ASCII);
3426
1
                            } else if (parameter_length == 4) {
3427
0
                                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_speed, tvb, offset, 1, ENC_BIG_ENDIAN);
3428
0
                                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_duplex, tvb, offset+1, 1, ENC_ASCII);
3429
0
                                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_speed, tvb, offset+2, 1, ENC_BIG_ENDIAN);
3430
0
                                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_duplex, tvb, offset+3, 1, ENC_ASCII);
3431
1
                            } else {
3432
1
                                proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_value, tvb, offset, parameter_length, ENC_NA);
3433
1
                            }
3434
1
                            break;
3435
63
                        }
3436
4
                    case 0x0A: /* MAC Address */
3437
11
                    case 0x0B: /* Pseudo MAC Address */
3438
11
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_mac_address, tvb, offset, 6, ENC_NA);
3439
11
                        break;
3440
65
                    default:
3441
65
                        if (parameter_length <= 8) {
3442
7
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
3443
58
                        } else {
3444
58
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_value, tvb, offset, parameter_length, ENC_NA);
3445
58
                        }
3446
65
                        break;
3447
216
                    }
3448
3449
197
                    offset += parameter_length;
3450
197
                    length -= parameter_length;
3451
197
                }
3452
366
            }
3453
12
            break;
3454
12
        case 0x03:
3455
7
            {
3456
48
                while (length > 0) {
3457
47
                    parameter_id     = tvb_get_uint8(tvb, offset);
3458
47
                    parameter_length = tvb_get_ntohs(tvb, offset + 1);
3459
3460
47
                    ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter, tvb, offset,
3461
47
                        parameter_length+3, parameter_id, "%s",
3462
47
                        val_to_str_const(parameter_id, cs_ip_device_routing_03_parameter_id_vals, "Unknown"));
3463
47
                    ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
3464
3465
47
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
3466
47
                    offset++;
3467
47
                    length--;
3468
3469
47
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_length, tvb, offset, 2, ENC_BIG_ENDIAN);
3470
47
                    offset += 2;
3471
47
                    length -= 2;
3472
3473
47
                    if (parameter_length > 0) {
3474
14
                        switch (parameter_id) {
3475
0
                        case 0x06: /* Type Of Equipment */
3476
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_type_of_equip, tvb, offset, 2, ENC_BIG_ENDIAN);
3477
0
                            break;
3478
0
                        case 0x08: /* Local IP Address */
3479
0
                        case 0x09: /* Distant IP Address */
3480
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
3481
0
                            break;
3482
0
                        case 0x0A: /* Local ID */
3483
1
                        case 0x0B: /* Remote ID */
3484
1
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_string, tvb, offset, parameter_length, ENC_ASCII);
3485
1
                            break;
3486
0
                        case 0x0F: /* Codec */
3487
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_codec, tvb, offset, 1, ENC_BIG_ENDIAN);
3488
0
                            break;
3489
0
                        case 0x10: /* VAD */
3490
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_vad, tvb, offset, 1, ENC_NA);
3491
0
                            break;
3492
0
                        case 0x11: /* ECE */
3493
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_ece, tvb, offset, 1, ENC_NA);
3494
0
                            break;
3495
0
                        case 0x12: /* Voice Mode */
3496
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_voice_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
3497
0
                            break;
3498
0
                        case 0x1B: /* Delay Distribution */
3499
0
                            for (i = 0; i < parameter_length/2; i++) {
3500
0
                                unsigned   off = (offset + (i*2));
3501
0
                                uint16_t val = tvb_get_ntohs(tvb, off);
3502
0
                                proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_delay_distribution, tvb, off,
3503
0
                                    2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_delay_distribution_range_vals, "Unknown"), val);
3504
0
                            }
3505
0
                            break;
3506
0
                        case 0x1E: /* Consecutive BFI */
3507
0
                            for (i = 0; i < parameter_length/2; i++) {
3508
0
                                unsigned   off = (offset + (i*2));
3509
0
                                uint16_t val = tvb_get_ntohs(tvb, off);
3510
0
                                proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_bfi, tvb, off,
3511
0
                                    2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_0_9_range_vals, "Unknown"), val);
3512
0
                            }
3513
0
                            break;
3514
0
                        case 0x1F: /* BFI Distribution */
3515
0
                            for (i = 0; i < parameter_length/2; i++) {
3516
0
                                unsigned   off = (offset + (i*2));
3517
0
                                uint16_t val = tvb_get_ntohs(tvb, off);
3518
0
                                proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution, tvb, off,
3519
0
                                    2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_bfi_distribution_range_vals, "Unknown"), val);
3520
0
                            }
3521
0
                            break;
3522
0
                        case 0x20: /* Jitter Depth Distribution */
3523
0
                            for (i = 0; i < parameter_length/4; i++) {
3524
0
                                unsigned   off = (offset + (i*4));
3525
0
                                uint32_t val = tvb_get_ntohs(tvb, off);
3526
0
                                proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_jitter_depth_distribution, tvb, off,
3527
0
                                    2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_0_9_range_vals, "Unknown"), val);
3528
0
                            }
3529
0
                            break;
3530
0
                        case 0x26: /* Firmware Version */
3531
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_firmware_version, tvb, offset, 2, ENC_BIG_ENDIAN);
3532
0
                            break;
3533
1
                        case 0x2E: /* 802.1 Q Used */
3534
1
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021Q_used, tvb, offset, 1, ENC_NA);
3535
1
                            break;
3536
0
                        case 0x2F: /* 802.1p Priority */
3537
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021P_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
3538
0
                            break;
3539
0
                        case 0x30: /* VLAN Id */
3540
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3541
0
                            break;
3542
0
                        case 0x31: /* DiffServ */
3543
0
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_diffserv, tvb, offset, 1, ENC_BIG_ENDIAN);
3544
0
                            break;
3545
0
                        case 0x3D: /* 200 ms BFI Distribution */
3546
0
                            for (i = 0; i < parameter_length/2; i++) {
3547
0
                                unsigned   off = (offset + (i*2));
3548
0
                                uint16_t val = tvb_get_ntohs(tvb, off);
3549
0
                                proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution_200ms, tvb, off,
3550
0
                                    2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_200ms_bfi_distribution_range_vals, "Unknown"), val);
3551
0
                            }
3552
0
                            break;
3553
2
                        case 0x3E: /* Consecutive RTP Lost */
3554
20
                            for (i = 0; i < parameter_length/2; i++) {
3555
18
                                unsigned   off = (offset + (i*2));
3556
18
                                uint16_t val = tvb_get_ntohs(tvb, off);
3557
18
                                proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_rtp_lost, tvb, off,
3558
18
                                    2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_consecutive_rtp_lost_range_vals, "Unknown"), val);
3559
18
                            }
3560
2
                            break;
3561
0
                        case 0x01: /* Date Of End Of Communication */
3562
0
                        case 0x02: /* Node Number */
3563
0
                        case 0x03: /* Ticket Protocol Version */
3564
0
                        case 0x0C: /* Call Duration (second) */
3565
0
                        case 0x0D: /* Local SSRC */
3566
0
                        case 0x0E: /* Distant SSRC */
3567
0
                        case 0x13: /* Transmitted Framing (ms) */
3568
0
                        case 0x14: /* Received Framing (ms) */
3569
0
                        case 0x15: /* Framing Changes */
3570
0
                        case 0x16: /* Number Of RTP Packets Received */
3571
0
                        case 0x17: /* Number Of RTP Packets Sent */
3572
0
                        case 0x18: /* Number Of RTP Packets Lost */
3573
0
                        case 0x19: /* Total Silence Detected (second) */
3574
0
                        case 0x1A: /* Number Of SID Received */
3575
0
                        case 0x1C: /* Maximum Delay (ms) */
3576
0
                        case 0x1D: /* Number Of DTMF Received */
3577
0
                        case 0x21: /* Number Of ICMP Host Unreachable */
3578
0
                        case 0x29: /* DSP Framing (ms) */
3579
0
                        case 0x2A: /* Transmitter SID */
3580
0
                        case 0x2D: /* Minimum Delay (ms) */
3581
0
                        case 0x37: /* Encryption */
3582
10
                        default:
3583
10
                            proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
3584
10
                            break;
3585
14
                        }
3586
3587
8
                        offset += parameter_length;
3588
8
                        length -= parameter_length;
3589
8
                    }
3590
47
                }
3591
1
                break;
3592
7
            }
3593
1
        default:
3594
1
            break;
3595
42
    }
3596
42
}
3597
3598
3599
/*-----------------------------------------------------------------------------
3600
    UNSOLICITED MESSAGE - 9Fh/1Fh (MESSAGE FROM THE TERMINAL)
3601
    VERSION RESPONSE - 21h (MESSAGE FROM THE TERMINAL)
3602
    ---------------------------------------------------------------------------*/
3603
static const value_string str_command_unsolicited_msg[] = {
3604
    {0x00, "Hardware Reset Acknowledge"},
3605
    {0x01, "Software Reset Acknowledge"},
3606
    {0x02, "Illegal Command Received"},
3607
    {0x05, "Subdevice Down"},
3608
    {0x06, "Segment Failure"},
3609
    {0x07, "UA Device Event"},
3610
    {0, NULL}
3611
};
3612
static const value_string str_unsolicited_msg_other_info_1[] = {
3613
    {0x00, "Link Is TDM"},
3614
    {0x01, "Link Is IP"},
3615
    {0, NULL}
3616
};
3617
static const value_string str_unsolicited_msg_other_info_2[] = {
3618
    {0x00, "Download Allowed"},
3619
    {0x01, "Download Refused"},
3620
    {0, NULL}
3621
};
3622
static const true_false_string tfs_export_full = {
3623
    "Full (Thales)",
3624
    "Export (No Thales)"
3625
};
3626
static const true_false_string tfs_fast_gigabit = {
3627
    "Gigabit",
3628
    "Fast"
3629
};
3630
static const true_false_string tfs_2g_3g = {
3631
    "3G/80x8",
3632
    "2G/40x8"
3633
};
3634
static const value_string str_unsolicited_msg_hard_config_chip[] = {
3635
    {0x01, "Ivanoe 1"},
3636
    {0x02, "Ivanoe 2"},
3637
    {0x03, "Reserved"},
3638
    {0, NULL}
3639
};
3640
static const value_string str_unsolicited_msg_hard_config_flash[] = {
3641
    {0x00, "No Flash"},
3642
    {0x01, "128 Kbytes"},
3643
    {0x02, "256 Kbytes"},
3644
    {0x03, "512 Kbytes"},
3645
    {0x04, "1 Mbytes"},
3646
    {0x05, "2 Mbytes"},
3647
    {0x06, "4 Mbytes"},
3648
    {0x07, "8 Mbytes"},
3649
    {0, NULL}
3650
};
3651
static const value_string str_unsolicited_msg_hard_config_ram[] = {
3652
    {0x00, "No External RAM"},
3653
    {0x01, "128 Kbytes"},
3654
    {0x02, "256 Kbytes"},
3655
    {0x03, "512 Kbytes"},
3656
    {0x04, "1 Mbytes"},
3657
    {0x05, "2 Mbytes"},
3658
    {0x06, "4 Mbytes"},
3659
    {0x07, "8 Mbytes"},
3660
    {0, NULL}
3661
};
3662
3663
/* TODO: these values are clearly wrong - needs to fit into 2 bits */
3664
static const value_string str_unsolicited_msg_subtype[] = {
3665
    {0x03, "2x40"},
3666
    {0x04, "1x20"},
3667
    {0x05, "1x20"},
3668
    {0, NULL}
3669
};
3670
static const value_string str_unsolicited_msg_generation[] = {
3671
    {0x02, "3"},
3672
    {0, NULL}
3673
};
3674
static const value_string str_unsolicited_msg_design[] = {
3675
    {0x00, "Alpha"},
3676
    {0, NULL}
3677
};
3678
static const value_string str_unsolicited_msg_hard_vta_type[] = {
3679
    {0x03, "MR2 (4035)"},
3680
    {0x05, "VLE (4010)"},
3681
    {0x07, "LE (4020)"},
3682
    {0, NULL}
3683
};
3684
static const value_string str_unsolicited_msg_hard_design[] = {
3685
    {0x06, "Alpha"},
3686
    {0, NULL}
3687
};
3688
3689
/* TODO: these values are clearly wrong - needs to fit into 2 bits */
3690
static const value_string str_unsolicited_msg_hard_subtype[] = {
3691
    {0x06, "2x40"},
3692
    {0x07, "1x20"},
3693
    {0x08, "1x20"},
3694
    {0, NULL}
3695
};
3696
3697
static void
3698
decode_unsolicited_msg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
3699
               unsigned offset, unsigned length, uint8_t opcode)
3700
3
{
3701
3
    uint8_t     command;
3702
3
    proto_tree *ua3g_body_tree = tree, *ua3g_param_tree;
3703
3704
3
    command = tvb_get_uint8(tvb, offset);
3705
3706
3
    if (opcode != 0x21) {
3707
        /* add text to the frame "INFO" column */
3708
3
        col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_unsolicited_msg, "Unknown"));
3709
3710
3
        proto_tree_add_item(ua3g_body_tree, hf_ua3g_command_unsolicited_msg, tvb, offset, 1, ENC_BIG_ENDIAN);
3711
3
        offset++;
3712
3
        length--;
3713
3
    } else {
3714
0
        command = 0xFF; /* Opcode = 0x21 */
3715
0
    }
3716
3717
3
    switch (command)
3718
3
    {
3719
0
    case 0x00: /* Hardware Reset Acknowledge */
3720
0
    case 0x01: /* Software Reset Acknowledge */
3721
2
    case 0xFF: /* Opcode = 0x21 : Version Response */
3722
2
        {
3723
2
            int link, vta_type;
3724
3725
2
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_device_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3726
2
            offset++;
3727
2
            length--;
3728
3729
2
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_firmware_version, tvb, offset, 2, ENC_BIG_ENDIAN);
3730
2
            offset += 2;
3731
2
            length -= 2;
3732
3733
2
            if (opcode != 0x21) {
3734
2
                proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_self_test_result, tvb, offset, 1, ENC_BIG_ENDIAN);
3735
2
                offset++;
3736
2
                length--;
3737
2
            }
3738
3739
2
            vta_type = tvb_get_uint8(tvb, offset);
3740
3741
2
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_vta_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3742
2
            offset++;
3743
2
            length--;
3744
3745
2
            switch (vta_type)
3746
2
            {
3747
0
            case 0x03:
3748
0
            case 0x04:
3749
0
            case 0x05:
3750
0
                {
3751
0
                    ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Characteristic Number");
3752
0
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_char_num_vta_subtype,
3753
0
                            tvb, offset, 1, ENC_BIG_ENDIAN);
3754
0
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_char_num_generation,
3755
0
                            tvb, offset, 1, ENC_BIG_ENDIAN);
3756
0
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_char_num_design,
3757
0
                            tvb, offset, 1, ENC_BIG_ENDIAN);
3758
0
                    offset++;
3759
0
                    length--;
3760
0
                    proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_other_information, tvb, offset, 1, ENC_BIG_ENDIAN);
3761
0
                    offset++;
3762
0
                    length--;
3763
3764
0
                    ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Hardware Configuration");
3765
0
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_vta_type,
3766
0
                            tvb, offset, 1, ENC_BIG_ENDIAN);
3767
0
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_design,
3768
0
                            tvb, offset, 1, ENC_BIG_ENDIAN);
3769
0
                    proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_subtype,
3770
0
                            tvb, offset, 1, ENC_BIG_ENDIAN);
3771
0
                    offset++;
3772
0
                    length--;
3773
3774
0
                    if (opcode != 0x21) {
3775
0
                        proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_hook_status, tvb, offset, 1, ENC_NA);
3776
0
                        offset++;
3777
0
                        length--;
3778
0
                    }
3779
0
                    break;
3780
0
                }
3781
2
            default:
3782
2
                {
3783
2
                    link = tvb_get_uint8(tvb, offset);
3784
2
                    proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_other_information_1, tvb, offset, 1, ENC_BIG_ENDIAN);
3785
2
                    offset++;
3786
2
                    length--;
3787
3788
2
                    if (link == 0x00) {
3789
0
                        proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_hardware_version, tvb, offset, 1, ENC_BIG_ENDIAN);
3790
0
                        offset++;
3791
0
                        length--;
3792
3793
0
                        ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Hardware Configuration");
3794
0
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_hard_config_chip,
3795
0
                                tvb, offset, 1, ENC_BIG_ENDIAN);
3796
0
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_hard_config_flash,
3797
0
                                tvb, offset, 1, ENC_BIG_ENDIAN);
3798
0
                        proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_config_ram,
3799
0
                                tvb, offset, 1, ENC_BIG_ENDIAN);
3800
0
                        offset++;
3801
0
                        length--;
3802
2
                    } else {
3803
2
                        static int * const hardware_config[] = {
3804
2
                            &hf_ua3g_unsolicited_msg_hardware_config_export_full,
3805
2
                            &hf_ua3g_unsolicited_msg_hardware_config_ethernet_hardware,
3806
2
                            &hf_ua3g_unsolicited_msg_hardware_config_extended_edition,
3807
2
                            &hf_ua3g_unsolicited_msg_hardware_config_wideband,
3808
2
                            &hf_ua3g_unsolicited_msg_hardware_config_3g_set,
3809
2
                            &hf_ua3g_unsolicited_msg_hardware_config_8082_set,
3810
2
                            &hf_ua3g_unsolicited_msg_hardware_config_super_wideband,
3811
2
                            NULL
3812
2
                        };
3813
3814
2
                        proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_other_information_2, tvb, offset, 1, ENC_BIG_ENDIAN);
3815
2
                        offset++;
3816
2
                        length--;
3817
3818
2
                        proto_tree_add_bitmask(ua3g_body_tree, tvb, offset, hf_ua3g_unsolicited_msg_hardware_config, ett_ua3g_param, hardware_config, ENC_NA);
3819
2
                        offset++;
3820
2
                        length--;
3821
2
                    }
3822
3823
2
                    if (opcode != 0x21) {
3824
2
                        proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_hook_status,
3825
2
                                tvb, offset, 1, ENC_NA);
3826
2
                        offset++;
3827
2
                        length--;
3828
3829
2
                        if (length > 0) {
3830
2
                            if (link == 0x00) {
3831
0
                                proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_firmware_datas_patch_version,
3832
0
                                                    tvb, offset, 2, ENC_BIG_ENDIAN);
3833
0
                                if (length > 2) {
3834
0
                                    proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_firmware_version_loader, tvb,
3835
0
                                                         offset+2, 2, ENC_BIG_ENDIAN);
3836
0
                                }
3837
2
                            } else {
3838
2
                                proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_datas_version, tvb, offset, 2, ENC_BIG_ENDIAN);
3839
2
                                offset += 2;
3840
2
                                length -= 2;
3841
3842
2
                                proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_firmware_version_bootloader, tvb, offset, 2, ENC_BIG_ENDIAN);
3843
2
                                offset += 2;
3844
2
                                length -= 2;
3845
3846
2
                                if (length >= 1) {
3847
2
                                    proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_additional_vta_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3848
2
                                    offset++;
3849
2
                                    length--;
3850
2
                                }
3851
3852
2
                                if (length >= 1) {
3853
2
                                    proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_capability_info_bluetooth_supported, tvb, offset, 1, ENC_BIG_ENDIAN);
3854
2
                                    offset++;
3855
2
                                    length--;
3856
2
                                }
3857
3858
2
                                if (length >= 1) {
3859
2
                                    static int * const capability_info[] = {
3860
2
                                        &hf_ua3g_unsolicited_msg_capability_info_vpn,
3861
2
                                        &hf_ua3g_unsolicited_msg_capability_info_ipsec,
3862
2
                                        &hf_ua3g_unsolicited_msg_capability_info_dtls,
3863
2
                                        NULL
3864
2
                                    };
3865
2
                                    proto_tree_add_bitmask(ua3g_body_tree, tvb, offset, hf_ua3g_unsolicited_msg_capability_info_vpn_encryption_status, ett_ua3g_param, capability_info, ENC_NA);
3866
2
                                    offset++;
3867
2
                                    length--;
3868
2
                                }
3869
3870
2
                                if (length >= 1) {
3871
2
                                    proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_capability_info_wlan_status, tvb, offset, 1, ENC_BIG_ENDIAN);
3872
2
                                    offset++;
3873
2
                                    length--;
3874
2
                                }
3875
3876
21
                                while(length > 0) {
3877
19
                                    proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_capability_info_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
3878
19
                                    offset++;
3879
19
                                    length--;
3880
19
                                }
3881
2
                            }
3882
2
                        }
3883
2
                    }
3884
2
                    break;
3885
0
                }
3886
2
            }
3887
0
            break;
3888
2
        }
3889
0
    case 0x02: /* Illegal Command Received */
3890
0
        {
3891
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_opcode_of_bad_command, tvb, offset, 1, ENC_BIG_ENDIAN);
3892
3893
0
            if (length > 1) {
3894
0
                proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_next_byte_of_bad_command, tvb, offset+1, length-1, ENC_NA);
3895
0
            }
3896
0
            break;
3897
2
        }
3898
0
    case 0x05: /* Subdevice Down */
3899
0
        {
3900
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_subdevice_address, tvb, offset, 1, ENC_BIG_ENDIAN);
3901
0
            break;
3902
2
        }
3903
0
    case 0x06: /* Segment Failure */
3904
0
        {
3905
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_segment_failure_t, tvb, offset, 1, ENC_NA);
3906
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_segment_failure_num, tvb, offset, 1, ENC_NA);
3907
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_segment_failure_s, tvb, offset, 1, ENC_NA);
3908
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_segment_failure_l, tvb, offset, 1, ENC_NA);
3909
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_opcode_bad_segment, tvb, offset+1, 1, ENC_BIG_ENDIAN);
3910
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_next_byte_of_bad_segment, tvb, offset+2, 1, ENC_BIG_ENDIAN);
3911
0
            break;
3912
2
        }
3913
0
    case 0x07: /* UA Device Event */
3914
0
        {
3915
0
            proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_device_event, tvb, offset, 1, ENC_BIG_ENDIAN);
3916
0
            break;
3917
2
        }
3918
1
    default:
3919
1
        {
3920
1
            break;
3921
2
        }
3922
3
    }
3923
3
}
3924
3925
3926
/*-----------------------------------------------------------------------------
3927
    NON-DIGIT KEY PUSHED - 20h (MESSAGE FROM THE TERMINAL)
3928
    DIGIT KEY RELEASED - 26h (MESSAGE FROM THE TERMINAL)
3929
    KEY RELEASED - 2Ah (MESSAGE FROM THE TERMINAL)
3930
    TM KEY PUSHED - 2Dh (MESSAGE FROM THE TERMINAL)
3931
    ---------------------------------------------------------------------------*/
3932
static void
3933
decode_key_number(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
3934
          unsigned offset, unsigned length)
3935
2
{
3936
#if 0
3937
    proto_tree *ua3g_body_tree;
3938
    static const value_string str_first_parameter[] = {
3939
        {0x01, "Production Test Command"},
3940
        {0x06, "Reserved For Compatibility"},
3941
        {0x3B, "Volume"},
3942
        {0x42, "Subdevice Address"},
3943
        {0, NULL}
3944
    };
3945
#endif
3946
3947
2
    if (!tree)
3948
0
        return;
3949
3950
2
    if (length > 0) {
3951
2
        proto_tree_add_uint_format_value(tree, hf_ua3g_key_number, tvb, offset, 1,
3952
2
            tvb_get_uint8(tvb, offset), "Row %d, Column %d",
3953
2
            (tvb_get_uint8(tvb, offset) & 0xF0), (tvb_get_uint8(tvb, offset) & 0x0F));
3954
2
    }
3955
2
}
3956
3957
3958
/*-----------------------------------------------------------------------------
3959
    I'M HERE - 22h - Only for UA NOE (MESSAGE FROM THE TERMINAL)
3960
    ---------------------------------------------------------------------------*/
3961
static void
3962
decode_i_m_here(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, unsigned offset)
3963
0
{
3964
0
    proto_tree_add_item(tree, hf_ua3g_i_m_here_id_code, tvb, offset, 1, ENC_BIG_ENDIAN);
3965
0
}
3966
3967
3968
/*-----------------------------------------------------------------------------
3969
    RESPONSE STATUS INQUIRY - 23h (MESSAGE FROM THE TERMINAL)
3970
    SPECIAL KEY STATUS - 29h (MESSAGE FROM THE TERMINAL)
3971
    ---------------------------------------------------------------------------*/
3972
static const true_false_string tfs_special_key_parameters = { "Not Received Default In Effect", "Downloaded Values In Effect" };
3973
static const true_false_string tfs_hookswitch_status = {"On Hook", "Off Hook"};
3974
static const true_false_string tfs_released_pressed = { "Released", "Pressed" };
3975
3976
static void
3977
decode_special_key(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
3978
           unsigned offset, uint8_t opcode)
3979
3
{
3980
3
    static int * const special_keys[] = {
3981
3
        &hf_ua3g_special_key_shift,
3982
3
        &hf_ua3g_special_key_ctrl,
3983
3
        &hf_ua3g_special_key_alt,
3984
3
        &hf_ua3g_special_key_cmd,
3985
3
        &hf_ua3g_special_key_shift_prime,
3986
3
        &hf_ua3g_special_key_ctrl_prime,
3987
3
        &hf_ua3g_special_key_alt_prime,
3988
3
        &hf_ua3g_special_key_cmd_prime,
3989
3
        NULL
3990
3
    };
3991
3992
3
    if (opcode == 0x23) {
3993
2
        proto_tree_add_item(tree, hf_ua3g_special_key_param_dtmf, tvb, offset, 1, ENC_NA);
3994
2
        proto_tree_add_item(tree, hf_ua3g_special_key_hookswitch_status, tvb, offset, 1, ENC_NA);
3995
2
        offset++;
3996
2
    }
3997
3998
3
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, special_keys, ENC_NA);
3999
3
}
4000
4001
4002
/*-----------------------------------------------------------------------------
4003
    SUBDEVICE STATE ENQUIRY - 24h (MESSAGE FROM THE TERMINAL)
4004
    ---------------------------------------------------------------------------*/
4005
static void
4006
decode_subdevice_state(proto_tree *tree, tvbuff_t *tvb,
4007
               packet_info *pinfo _U_, unsigned offset)
4008
0
{
4009
0
    uint8_t     info;
4010
0
    int         i;
4011
4012
0
    for (i = 0; i <= 7; i++) {
4013
0
        info = tvb_get_uint8(tvb, offset);
4014
0
        proto_tree_add_uint_format(tree, hf_ua3g_subdevice_state, tvb, offset, 1,
4015
0
            info & 0x0F, "Subdevice %d State: %d",
4016
0
            i, info & 0x0F);
4017
0
        i++;
4018
0
        proto_tree_add_uint_format(tree, hf_ua3g_subdevice_state, tvb, offset, 1,
4019
0
            (info & 0xF0) >> 4, "Subdevice %d State: %d",
4020
0
            i, (info & 0xF0) >> 4);
4021
0
        offset++;
4022
0
    }
4023
0
}
4024
4025
4026
/*-----------------------------------------------------------------------------
4027
    UA3G DISSECTOR
4028
    ---------------------------------------------------------------------------*/
4029
static int
4030
dissect_ua3g(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
4031
465
{
4032
465
    int               offset         = 0;
4033
465
    proto_item       *ua3g_item;
4034
465
    proto_tree       *ua3g_tree, *ua3g_body_tree;
4035
465
    int               length;
4036
465
    uint8_t           opcode;
4037
465
    const char*      opcode_str;
4038
465
    e_ua_direction   *message_direction;
4039
4040
    /* Reject the packet if data is NULL */
4041
465
    if (data == NULL)
4042
0
        return 0;
4043
465
    message_direction = (e_ua_direction *)data;
4044
4045
465
    ua3g_item = proto_tree_add_item(tree, proto_ua3g, tvb, 0, -1, ENC_NA);
4046
465
    ua3g_tree = proto_item_add_subtree(ua3g_item, ett_ua3g);
4047
4048
    /* Length of the UA Message */
4049
465
    length = tvb_get_letohs(tvb, offset);
4050
4051
    /* add text to the frame "INFO" column */
4052
465
    col_append_str(pinfo->cinfo, COL_INFO, " - UA3G Message:");
4053
4054
465
    proto_tree_add_uint(ua3g_tree, hf_ua3g_length, tvb, offset, 2, length);
4055
465
    offset += 2;
4056
4057
    /* Opcode of the UA Message */
4058
465
    opcode = tvb_get_uint8(tvb, offset);
4059
465
    if (opcode != 0x9f)
4060
456
        opcode = (opcode & 0x7f);
4061
4062
    /* Useful for a research in wireshark */
4063
465
    if (*message_direction == SYS_TO_TERM) {
4064
382
        proto_tree_add_uint(ua3g_tree, hf_ua3g_opcode_sys, tvb, offset, 1, opcode);
4065
382
        opcode_str = val_to_str_ext_const(opcode, &opcodes_vals_sys_ext, "Unknown");
4066
382
    } else {
4067
83
        proto_tree_add_uint(ua3g_tree, hf_ua3g_opcode_term, tvb, offset, 1, opcode);
4068
83
        opcode_str = val_to_str_ext_const(opcode, &opcodes_vals_term_ext, "Unknown");
4069
83
    }
4070
4071
465
    offset++;
4072
465
    length--;
4073
4074
    /* add text to the frame "INFO" column */
4075
465
    col_append_fstr(pinfo->cinfo, COL_INFO, " %s", opcode_str);
4076
4077
465
    proto_item_append_text(ua3g_item, ", %s", opcode_str);
4078
4079
465
    ua3g_body_tree = proto_tree_add_subtree(ua3g_tree, tvb, offset, length, ett_ua3g_body, NULL, "UA3G Body");
4080
4081
465
    if (*message_direction == SYS_TO_TERM) {
4082
370
        switch (opcode) {
4083
9
        case SC_PRODUCTION_TEST: /* 0x01 */
4084
9
            {
4085
9
                decode_with_one_parameter(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_opcode_production_test);
4086
9
                break;
4087
0
            }
4088
0
        case SC_SUBDEVICE_RESET: /* 0x06 */
4089
0
            {
4090
0
                decode_with_one_parameter(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_opcode_subservice_reset);
4091
0
                break;
4092
0
            }
4093
1
        case SC_ARE_YOU_THERE:   /* 0x2B */
4094
1
            {
4095
1
                decode_with_one_parameter(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_opcode_are_you_there);
4096
1
                break;
4097
0
            }
4098
0
        case SC_SET_SPEAKER_VOL: /* 0x3B */
4099
0
            {
4100
0
                decode_with_one_parameter(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_opcode_set_speaker_vol);
4101
0
                break;
4102
0
            }
4103
1
        case SC_TRACE_ON:        /* 0x42 */
4104
1
            {
4105
1
                decode_with_one_parameter(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_opcode_trace_on);
4106
1
                break;
4107
0
            }
4108
1
        case SC_SUBDEVICE_ESCAPE: /* 0x02 */
4109
1
            {
4110
1
                decode_subdevice_escape(ua3g_body_tree, tvb, pinfo, offset, length);
4111
1
                break;
4112
0
            }
4113
5
        case SC_SOFT_RESET: /* 0x03 */
4114
5
            {
4115
5
                decode_software_reset(ua3g_body_tree, tvb, pinfo, offset, length);
4116
5
                break;
4117
0
            }
4118
1
        case SC_IP_PHONE_WARMSTART: /* 0x04 */
4119
1
            {
4120
1
                decode_ip_phone_warmstart(ua3g_body_tree, tvb, pinfo, offset, length);
4121
1
                break;
4122
0
            }
4123
7
        case SC_SUPER_MSG:   /* 0x0B */
4124
7
        case SC_SUPER_MSG_2: /* 0x17 */
4125
7
            {
4126
7
                decode_super_msg(ua3g_body_tree, tvb, pinfo, offset, length, opcode);
4127
7
                break;
4128
7
            }
4129
2
        case SC_SEGMENT_MSG: /* 0x0C */
4130
2
            {
4131
2
                decode_segment_msg(ua3g_body_tree, tvb, pinfo, offset, length);
4132
2
                break;
4133
7
            }
4134
197
        case SC_IP_DEVICE_ROUTING: /* 0x13 */
4135
197
            {
4136
197
            decode_ip_device_routing(ua3g_body_tree, tvb, pinfo, offset, length);
4137
197
            break;
4138
7
            }
4139
1
        case SC_DEBUG_IN_LINE: /* 0x18 */
4140
1
            {
4141
1
                decode_debug_in_line(ua3g_body_tree, tvb, pinfo, offset, length);
4142
1
                break;
4143
7
            }
4144
1
        case SC_LED_COMMAND: /* 0x21 */
4145
1
            {
4146
1
                decode_led_command(ua3g_body_tree, tvb, pinfo, offset);
4147
1
                break;
4148
7
            }
4149
7
        case SC_LCD_LINE_1_CMD: /* 0x27 */
4150
8
        case SC_LCD_LINE_2_CMD: /* 0x28 */
4151
8
            {
4152
8
                decode_lcd_line_cmd(ua3g_body_tree, tvb, pinfo, offset, length);
4153
8
                break;
4154
7
            }
4155
1
        case SC_MAIN_VOICE_MODE: /* 0x29 */
4156
1
            {
4157
1
                decode_main_voice_mode(ua3g_body_tree, tvb, pinfo, offset, length);
4158
1
                break;
4159
7
            }
4160
1
        case SC_SUBDEVICE_METASTATE: /* 0x2C */
4161
1
            {
4162
1
                decode_subdevice_metastate(ua3g_body_tree, tvb, pinfo, offset);
4163
1
                break;
4164
7
            }
4165
5
        case SC_DWL_DTMF_CLCK_FORMAT: /* 0x30 */
4166
5
            {
4167
5
                decode_dwl_dtmf_clck_format(ua3g_body_tree, tvb, pinfo, offset, length);
4168
5
                break;
4169
7
            }
4170
6
        case SC_SET_CLCK: /* 0x31 */
4171
6
            {
4172
6
                decode_set_clck(ua3g_body_tree, tvb, pinfo, offset, length);
4173
6
                break;
4174
7
            }
4175
0
        case SC_VOICE_CHANNEL: /* 0x32 */
4176
0
            {
4177
0
                decode_voice_channel(ua3g_body_tree, tvb, pinfo, offset, length);
4178
0
                break;
4179
7
            }
4180
1
        case SC_EXTERNAL_RINGING: /* 0x33 */
4181
1
            {
4182
1
                decode_external_ringing(ua3g_body_tree, tvb, pinfo, offset);
4183
1
                break;
4184
7
            }
4185
1
        case SC_LCD_CURSOR: /* 0x35 */
4186
1
            {
4187
1
                decode_lcd_cursor(ua3g_body_tree, tvb, pinfo, offset);
4188
1
                break;
4189
7
            }
4190
5
        case SC_DWL_SPECIAL_CHAR: /* 0x36 */
4191
5
            {
4192
5
                decode_dwl_special_char(ua3g_body_tree, tvb, pinfo, offset, length);
4193
5
                break;
4194
7
            }
4195
1
        case SC_SET_CLCK_TIMER_POS: /* 0x38 */
4196
1
            {
4197
1
                decode_set_clck_timer_pos(ua3g_body_tree, tvb, pinfo, offset);
4198
1
                break;
4199
7
            }
4200
1
        case SC_SET_LCD_CONTRAST: /* 0x39 */
4201
1
            {
4202
1
                decode_set_lcd_contrast(ua3g_body_tree, tvb, pinfo, offset);
4203
1
                break;
4204
7
            }
4205
14
        case SC_BEEP: /* 0x3C */
4206
14
            {
4207
14
                decode_beep(ua3g_body_tree, tvb, pinfo, offset, length);
4208
14
                break;
4209
7
            }
4210
1
        case SC_SIDETONE: /* 0x3D */
4211
1
            {
4212
1
                decode_sidetone(ua3g_body_tree, tvb, pinfo, offset);
4213
1
                break;
4214
7
            }
4215
7
        case SC_RINGING_CADENCE: /* 0x3E */
4216
7
            {
4217
7
                decode_ringing_cadence(ua3g_body_tree, tvb, pinfo, offset, length);
4218
7
                break;
4219
7
            }
4220
0
        case SC_MUTE: /* 0x3F */
4221
0
            {
4222
0
                decode_mute(ua3g_body_tree, tvb, pinfo, offset);
4223
0
                break;
4224
7
            }
4225
2
        case SC_FEEDBACK: /* 0x40 */
4226
2
            {
4227
2
                decode_feedback(ua3g_body_tree, tvb, pinfo, offset, length);
4228
2
                break;
4229
7
            }
4230
2
        case SC_READ_PERIPHERAL:  /* 0x44 */
4231
3
        case SC_WRITE_PERIPHERAL: /* 0x45 */
4232
3
            {
4233
3
            decode_r_w_peripheral(ua3g_body_tree, tvb, pinfo, offset, length);
4234
3
                break;
4235
2
            }
4236
1
        case SC_ICON_CMD: /* 0x47 */
4237
1
            {
4238
1
                decode_icon_cmd(ua3g_body_tree, tvb, pinfo, offset);
4239
1
                break;
4240
2
            }
4241
34
        case SC_AUDIO_CONFIG: /* 0x49 */
4242
34
            {
4243
34
                decode_audio_config(ua3g_body_tree, tvb, pinfo, offset, length);
4244
34
                break;
4245
2
            }
4246
1
        case SC_AUDIO_PADDED_PATH: /* 0x4A */
4247
1
            {
4248
1
                decode_audio_padded_path(ua3g_body_tree, tvb, pinfo, offset);
4249
1
                break;
4250
2
            }
4251
1
        case SC_KEY_RELEASE:       /* 0x41 */
4252
1
            {
4253
1
                decode_on_off_level(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_command_key_release);
4254
1
                break;
4255
2
            }
4256
1
        case SC_AMPLIFIED_HANDSET: /* 0x48 */
4257
1
            {
4258
1
                decode_on_off_level(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_command_amplified_handset);
4259
1
                break;
4260
2
            }
4261
0
        case SC_LOUDSPEAKER:       /* 0x4D */
4262
0
            {
4263
0
                decode_on_off_level(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_command_loudspeaker);
4264
0
                break;
4265
2
            }
4266
1
        case SC_ANNOUNCE:          /* 0x4E */
4267
1
            {
4268
1
                decode_on_off_level(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_command_announce);
4269
1
                break;
4270
2
            }
4271
0
        case SC_RING: /* 0x4F */
4272
0
            {
4273
0
                decode_ring(ua3g_body_tree, tvb, pinfo, offset);
4274
0
                break;
4275
2
            }
4276
1
        case SC_UA_DWL_PROTOCOL: /* 0x50 */
4277
1
            {
4278
1
                decode_ua_dwl_protocol(ua3g_body_tree, tvb, pinfo, offset, length);
4279
1
                break;
4280
2
            }
4281
        /* Case for UA3G message with only opcode (No body) */
4282
18
        case SC_NOP:                    /* 0x00 */
4283
18
        case SC_HE_ROUTING:             /* 0x05 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4284
20
        case SC_LOOPBACK_ON:            /* 0x07 */
4285
20
        case SC_LOOPBACK_OFF:           /* 0x08 */
4286
20
        case SC_VIDEO_ROUTING:          /* 0x09 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4287
27
        case SC_REMOTE_UA_ROUTING:      /* 0x0D NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4288
29
        case SC_VERY_REMOTE_UA_ROUTING: /* 0x0E NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4289
30
        case SC_OSI_ROUTING:            /* 0x0F NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4290
31
        case SC_ABC_A_ROUTING:          /* 0x11 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4291
32
        case SC_IBS_ROUTING:            /* 0x12 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4292
33
        case SC_M_REFLEX_HUB_ROUTING:   /* 0x14 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4293
35
        case SC_START_BUZZER:           /* 0x22 */
4294
35
        case SC_STOP_BUZZER:            /* 0x23 */
4295
36
        case SC_ENABLE_DTMF:            /* 0x24 */
4296
37
        case SC_DISABLE_DTMF:           /* 0x25 */
4297
38
        case SC_CLEAR_LCD_DISP:         /* 0x26 */
4298
38
        case SC_VERSION_INQUIRY:        /* 0x2A */
4299
39
        case SC_VTA_STATUS_INQUIRY:     /* 0x2D */
4300
39
        case SC_SUBDEVICE_STATE:        /* 0x2E */
4301
40
        case SC_AUDIO_IDLE:             /* 0x3A */
4302
43
        case SC_TRACE_OFF:              /* 0x43 */
4303
43
        case SC_ALL_ICONS_OFF:          /* 0x46 */
4304
44
        case SC_RELEASE_RADIO_LINK:     /* 0x4B */
4305
45
        case SC_DECT_HANDOVER:          /* 0x4C NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4306
47
        default:
4307
47
            {
4308
47
                break;
4309
45
            }
4310
370
        }
4311
370
    }
4312
200
    if (*message_direction == TERM_TO_SYS) {
4313
75
        switch (opcode) {
4314
0
        case CS_DIGIT_DIALED: /* 0x03 */
4315
0
            {
4316
0
                decode_digit_dialed(ua3g_body_tree, tvb, pinfo, offset);
4317
0
                break;
4318
0
            }
4319
0
        case CS_SUBDEVICE_MSG: /* 0x04 */
4320
0
            {
4321
0
                decode_subdevice_msg(ua3g_body_tree, tvb, pinfo, offset, length);
4322
0
                break;
4323
0
            }
4324
4
        case CS_SUPER_MSG:   /* 0x0B */
4325
8
        case CS_SUPER_MSG_2: /* 0x17 */
4326
8
            {
4327
8
                decode_super_msg(ua3g_body_tree, tvb, pinfo, offset, length, opcode);
4328
8
                break;
4329
4
            }
4330
1
        case CS_SEGMENT_MSG: /* 0x0C */
4331
1
            {
4332
1
            decode_segment_msg(ua3g_body_tree, tvb, pinfo, offset, length);
4333
1
            break;
4334
4
            }
4335
42
        case CS_IP_DEVICE_ROUTING: /* 0x13 */
4336
42
            {
4337
42
                decode_cs_ip_device_routing(ua3g_body_tree, tvb, pinfo, offset, length);
4338
42
                break;
4339
4
            }
4340
1
        case CS_DEBUG_IN_LINE: /* 0x18 */
4341
1
            {
4342
1
                decode_debug_in_line(ua3g_body_tree, tvb, pinfo, offset, length);
4343
1
                break;
4344
4
            }
4345
0
        case CS_NON_DIGIT_KEY_PUSHED: /* 0x20 Key translation not sure */
4346
1
        case CS_DIGIT_KEY_RELEASED:   /* 0x26 Key translation not sure */
4347
2
        case CS_KEY_RELEASED:         /* 0x2A */
4348
2
        case CS_TM_KEY_PUSHED:        /* 0x2D Key translation not sure */
4349
2
            {
4350
2
                decode_key_number(ua3g_body_tree, tvb, pinfo, offset, length);
4351
2
                break;
4352
2
            }
4353
3
        case CS_UNSOLICITED_MSG: /* 0x9F (0x1F) */
4354
3
        case CS_VERSION_RESPONSE: /* 0x21 */
4355
3
            {
4356
3
                decode_unsolicited_msg(ua3g_body_tree, tvb, pinfo, offset, length, opcode);
4357
3
                break;
4358
3
            }
4359
0
        case CS_I_M_HERE: /* 0x22 */
4360
0
            {
4361
0
                decode_i_m_here(ua3g_body_tree, tvb, pinfo, offset);
4362
0
                break;
4363
3
            }
4364
2
        case CS_RSP_STATUS_INQUIRY: /* 0x23 */
4365
3
        case CS_SPECIAL_KEY_STATUS: /* 0x29 */
4366
3
            {
4367
3
                decode_special_key(ua3g_body_tree, tvb, pinfo, offset, opcode);
4368
3
                break;
4369
2
            }
4370
0
        case CS_SUBDEVICE_STATE: /* 0x24 */
4371
0
            {
4372
0
                decode_subdevice_state(ua3g_body_tree, tvb, pinfo, offset);
4373
0
                break;
4374
2
            }
4375
1
        case CS_PERIPHERAL_CONTENT: /* 0x2B */
4376
1
            {
4377
1
                decode_r_w_peripheral(ua3g_body_tree, tvb, pinfo, offset, length);
4378
1
                break;
4379
2
            }
4380
2
        case CS_UA_DWL_PROTOCOL: /* 0x50 */
4381
2
            {
4382
2
                decode_ua_dwl_protocol(ua3g_body_tree, tvb, pinfo, offset, length);
4383
2
                break;
4384
2
            }
4385
        /* Case for UA3G message with only opcode (No body) */
4386
6
        case CS_NOP_ACK:           /* 0x00 */
4387
8
        case CS_HANDSET_OFFHOOK:   /* 0x01 */
4388
8
        case CS_HANDSET_ONHOOK:    /* 0x02 */
4389
8
        case CS_HE_ROUTING:        /* 0x05 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4390
8
        case CS_LOOPBACK_ON:       /* 0x06 */
4391
8
        case CS_LOOPBACK_OFF:      /* 0x07 */
4392
8
        case CS_VIDEO_ROUTING:     /* 0x09 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4393
8
        case CS_WARMSTART_ACK:     /* 0x0A */
4394
8
        case CS_REMOTE_UA_ROUTING: /* 0x0D NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4395
8
        case CS_VERY_REMOTE_UA_R:  /* 0x0E NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4396
9
        case CS_OSI_ROUTING:       /* 0x0F NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4397
9
        case CS_ABC_A_ROUTING:     /* 0x11 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4398
9
        case CS_IBS_ROUTING:       /* 0x12 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4399
9
        case CS_TRACE_ON_ACK:      /* 0x27 */
4400
9
        case CS_TRACE_OFF_ACK:     /* 0x28 */
4401
12
        default:
4402
12
            {
4403
12
                break;
4404
9
            }
4405
75
        }
4406
75
    }
4407
4408
149
    return tvb_captured_length(tvb);
4409
200
}
4410
4411
4412
/*-----------------------------------------------------------------------------
4413
    DISSECTORS REGISTRATION FUNCTIONS
4414
    ---------------------------------------------------------------------------*/
4415
void
4416
proto_register_ua3g(void)
4417
14
{
4418
14
    static hf_register_info hf[] =
4419
14
    {
4420
14
        { &hf_ua3g_length,
4421
14
            { "Length", "ua3g.length",
4422
14
            FT_UINT16, BASE_DEC, NULL, 0x00,
4423
14
            NULL, HFILL }
4424
14
        },
4425
14
        { &hf_ua3g_opcode_sys,
4426
14
            { "Opcode", "ua3g.opcode",
4427
14
            FT_UINT8, BASE_HEX|BASE_EXT_STRING, &opcodes_vals_sys_ext, 0x00,
4428
14
            NULL, HFILL }
4429
14
        },
4430
14
        { &hf_ua3g_opcode_term,
4431
14
            { "Opcode", "ua3g.opcode",
4432
14
            FT_UINT8, BASE_HEX|BASE_EXT_STRING, &opcodes_vals_term_ext, 0x00,
4433
14
            NULL, HFILL }
4434
14
        },
4435
14
        { &hf_ua3g_opcode_production_test,
4436
14
            { "Production Test Command", "ua3g.production_test",
4437
14
            FT_UINT8, BASE_DEC, NULL, 0x00,
4438
14
            NULL, HFILL }
4439
14
        },
4440
14
        { &hf_ua3g_opcode_subservice_reset,
4441
14
            { "Reserved For Compatibility", "ua3g.subservice_reset",
4442
14
            FT_UINT8, BASE_DEC, NULL, 0x00,
4443
14
            NULL, HFILL }
4444
14
        },
4445
14
        { &hf_ua3g_opcode_are_you_there,
4446
14
            { "Temporization", "ua3g.are_you_there",
4447
14
            FT_UINT8, BASE_DEC, NULL, 0x00,
4448
14
            NULL, HFILL }
4449
14
        },
4450
14
        { &hf_ua3g_opcode_set_speaker_vol,
4451
14
            { "Volume", "ua3g.set_speaker_vol",
4452
14
            FT_UINT8, BASE_DEC, NULL, 0x00,
4453
14
            NULL, HFILL }
4454
14
        },
4455
14
        { &hf_ua3g_opcode_trace_on,
4456
14
            { "Subdevice Address", "ua3g.trace_on",
4457
14
            FT_UINT8, BASE_DEC, NULL, 0x00,
4458
14
            NULL, HFILL }
4459
14
        },
4460
14
        { &hf_ua3g_ip,
4461
14
            { "IP Device Routing", "ua3g.ip",
4462
14
            FT_UINT8, BASE_HEX, VALS(str_command_ip_device_routing), 0x00,
4463
14
            NULL, HFILL }
4464
14
        },
4465
14
        { &hf_ua3g_ip_cs,
4466
14
            { "IP Device Routing", "ua3g.ip.cs",
4467
14
            FT_UINT8, BASE_HEX, VALS(str_command_cs_ip_device_routing), 0x00,
4468
14
            NULL, HFILL }
4469
14
        },
4470
14
        { &hf_ua3g_command_led,
4471
14
            { "Led Command", "ua3g.command.led",
4472
14
            FT_UINT8, BASE_HEX, VALS(str_command_led), 0x00,
4473
14
            NULL, HFILL }
4474
14
        },
4475
14
        { &hf_ua3g_command_lcd_line,
4476
14
            { "LCD Line Command", "ua3g.command.lcd_line",
4477
14
            FT_UINT8, BASE_HEX, VALS(str_command_lcd_line), 0x00,
4478
14
            NULL, HFILL }
4479
14
        },
4480
14
        { &hf_ua3g_main_voice_mode,
4481
14
            { "Voice Mode", "ua3g.command.main_voice_mode",
4482
14
            FT_UINT8, BASE_HEX, VALS(str_main_voice_mode), 0x00,
4483
14
            NULL, HFILL }
4484
14
        },
4485
14
        { &hf_ua3g_command_set_clck,
4486
14
            { "Set Clock", "ua3g.command.set_clck",
4487
14
            FT_UINT8, BASE_HEX, VALS(str_command_set_clck), 0x00,
4488
14
            NULL, HFILL }
4489
14
        },
4490
14
        { &hf_ua3g_external_ringing_command,
4491
14
            { "External Ringing Command", "ua3g.command.external_ringing",
4492
14
            FT_UINT8, BASE_HEX, VALS(str_ext_ring_cmd), 0x00,
4493
14
            NULL, HFILL }
4494
14
        },
4495
14
        { &hf_ua3g_lcd_cursor,
4496
14
            { "Cursor", "ua3g.lcd_cursor",
4497
14
            FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x02,
4498
14
            NULL, HFILL }
4499
14
        },
4500
14
        { &hf_ua3g_command_beep,
4501
14
            { "Beep", "ua3g.command.beep",
4502
14
            FT_UINT8, BASE_HEX, VALS(str_command_beep), 0x00,
4503
14
            NULL, HFILL }
4504
14
        },
4505
14
        { &hf_ua3g_command_sidetone,
4506
14
            { "Sidetone", "ua3g.command.sidetone",
4507
14
            FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4508
14
            NULL, HFILL }
4509
14
        },
4510
14
        { &hf_ua3g_command_mute,
4511
14
            { "Microphone", "ua3g.command.mute",
4512
14
            FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
4513
14
            NULL, HFILL }
4514
14
        },
4515
14
        { &hf_ua3g_command_feedback,
4516
14
            { "Feedback", "ua3g.command.feedback",
4517
14
            FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4518
14
            NULL, HFILL }
4519
14
        },
4520
14
        { &hf_ua3g_command_audio_config,
4521
14
            { "Audio Config", "ua3g.command.audio_config",
4522
14
            FT_UINT8, BASE_HEX, VALS(str_command_audio_config), 0x00,
4523
14
            NULL, HFILL }
4524
14
        },
4525
14
        { &hf_ua3g_command_key_release,
4526
14
            { "Key Release", "ua3g.command.key_release",
4527
14
            FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4528
14
            NULL, HFILL }
4529
14
        },
4530
14
        { &hf_ua3g_command_amplified_handset,
4531
14
            { "Amplified Handset (Boost)", "ua3g.command.amplified_handset",
4532
14
            FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4533
14
            NULL, HFILL }
4534
14
        },
4535
14
        { &hf_ua3g_command_loudspeaker,
4536
14
            { "Loudspeaker", "ua3g.command.loudspeaker",
4537
14
            FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4538
14
            NULL, HFILL }
4539
14
        },
4540
14
        { &hf_ua3g_command_announce,
4541
14
            { "Announce", "ua3g.command.announce",
4542
14
            FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4543
14
            NULL, HFILL }
4544
14
        },
4545
14
        { &hf_ua3g_command_ring,
4546
14
            { "Ring", "ua3g.command.ring",
4547
14
            FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4548
14
            NULL, HFILL }
4549
14
        },
4550
14
        { &hf_ua3g_command_ua_dwl_protocol,
4551
14
            { "UA Download Protocol", "ua3g.command.ua_dwl_protocol",
4552
14
            FT_UINT8, BASE_HEX, VALS(str_command_ua_dwl_protocol), 0x00,
4553
14
            NULL, HFILL }
4554
14
        },
4555
14
        { &hf_ua3g_command_unsolicited_msg,
4556
14
            { "Unsolicited Message", "ua3g.command.unsolicited_msg",
4557
14
            FT_UINT8, BASE_HEX, VALS(str_command_unsolicited_msg), 0x00,
4558
14
            NULL, HFILL }
4559
14
        },
4560
14
        { &hf_ua3g_ip_device_routing_stop_rtp_parameter,
4561
14
            { "Parameter", "ua3g.ip.stop_rtp.parameter",
4562
14
            FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_stop_rtp_vals), 0x00,
4563
14
            NULL, HFILL }
4564
14
        },
4565
14
        { &hf_ua3g_ip_device_routing_stop_rtp_parameter_length,
4566
14
            { "Length", "ua3g.ip.stop_rtp.parameter.length",
4567
14
            FT_UINT8, BASE_DEC, NULL, 0x00,
4568
14
            NULL, HFILL }
4569
14
        },
4570
14
        { &hf_ua3g_ip_device_routing_stop_rtp_parameter_value_num,
4571
14
            { "Value", "ua3g.ip.stop_rtp.parameter.value.num",
4572
14
            FT_UINT64, BASE_HEX, NULL, 0x00,
4573
14
            NULL, HFILL }
4574
14
        },
4575
14
        { &hf_ua3g_ip_device_routing_stop_rtp_parameter_value_bytes,
4576
14
            { "Value", "ua3g.ip.stop_rtp.parameter.value.bytes",
4577
14
            FT_BYTES, BASE_NONE, NULL, 0x00,
4578
14
            NULL, HFILL }
4579
14
        },
4580
        /* Generated from convert_proto_tree_add_text.pl */
4581
14
        { &hf_ua3g_subdevice_address, { "Subdevice Address", "ua3g.subdevice.address", FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL }},
4582
14
        { &hf_ua3g_subdevice_opcode, { "Subdevice Opcode", "ua3g.subdevice.opcode", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
4583
14
        { &hf_ua3g_subdevice_parameter_bytes, { "Parameter Bytes", "ua3g.subdevice.parameter_bytes", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4584
14
        { &hf_ua3g_software_reset, { "Software Reset", "ua3g.software_reset", FT_UINT8, BASE_DEC, VALS(software_reset_verswitch_vals), 0x0, NULL, HFILL }},
4585
14
        { &hf_ua3g_ip_phone_warmstart, { "IP Phone Warmstart", "ua3g.ip_phone_warmstart", FT_UINT8, BASE_DEC, VALS(str_command_ip_phone_warmstart), 0x0, NULL, HFILL }},
4586
14
        { &hf_ua3g_super_msg_length, { "Length", "ua3g.super_msg.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4587
14
        { &hf_ua3g_super_msg_data, { "Data", "ua3g.super_msg.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4588
14
        { &hf_ua3g_segment_msg_num_remaining, { "Number Of Remaining Segments", "ua3g.segment_msg.num_remaining", FT_UINT8, BASE_DEC, NULL, 0x7F, NULL, HFILL }},
4589
14
        { &hf_ua3g_segment_msg_length, { "Length", "ua3g.segment_msg.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4590
14
        { &hf_ua3g_segment_message_data, { "Segment Message Data", "ua3g.segment_message.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4591
14
        { &hf_ua3g_ip_device_routing_reset_parameter, { "Parameter", "ua3g.ip.reset.parameter", FT_UINT8, BASE_DEC, VALS(ip_device_routing_cmd_reset_vals), 0x0, NULL, HFILL }},
4592
14
        { &hf_ua3g_ip_device_routing_reset_parameter_length, { "Length", "ua3g.ip.reset.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4593
14
        { &hf_ua3g_ip_device_routing_start_rtp_direction, { "Direction", "ua3g.ip.start_rtp.direction", FT_UINT8, BASE_DEC, VALS(start_rtp_str_direction), 0x0, NULL, HFILL }},
4594
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter, { "Parameter", "ua3g.ip.start_rtp.parameter", FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ip_device_routing_cmd_start_rtp_vals_ext, 0x0, NULL, HFILL }},
4595
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter_length, { "Length", "ua3g.ip.start_rtp.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4596
14
        { &hf_ua3g_ip_device_routing_redirect_parameter, { "Parameter", "ua3g.ip.redirect.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_redirect_vals), 0x0, NULL, HFILL }},
4597
14
        { &hf_ua3g_ip_device_routing_redirect_parameter_length, { "Length", "ua3g.ip.redirect.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4598
14
        { &hf_ua3g_ip_device_routing_def_tones_num_entries, { "Number Of Entries", "ua3g.ip.def_tones.num_entries", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4599
14
        { &hf_ua3g_ip_device_routing_def_tones_frequency_1, { "Frequency 1 (Hz)", "ua3g.ip.def_tones.frequency_1", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4600
14
        { &hf_ua3g_ip_device_routing_def_tones_level_1, { "Level 1 (dB)", "ua3g.ip.def_tones.level_1", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4601
14
        { &hf_ua3g_ip_device_routing_def_tones_frequency_2, { "Frequency 2 (Hz)", "ua3g.ip.def_tones.frequency_2", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4602
14
        { &hf_ua3g_ip_device_routing_def_tones_level_2, { "Level 2 (dB)", "ua3g.ip.def_tones.level_2", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4603
14
        { &hf_ua3g_ip_device_routing_start_tone_direction, { "Direction", "ua3g.ip.start_tone.direction", FT_UINT8, BASE_DEC, VALS(ip_device_routing_tone_direction_vals), 0xC0, NULL, HFILL }},
4604
14
        { &hf_ua3g_ip_device_routing_start_tone_num_entries, { "Number of entries", "ua3g.ip.start_tone.num_entries", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL }},
4605
14
        { &hf_ua3g_ip_device_routing_start_tone_identification, { "Identification", "ua3g.ip.start_tone.identification", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4606
14
        { &hf_ua3g_ip_device_routing_start_tone_duration, { "Duration (ms)", "ua3g.ip.start_tone.duration", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4607
14
        { &hf_ua3g_ip_device_routing_listen_rtp_parameter, { "Parameter", "ua3g.ip.listen_rtp.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_listen_rtp_vals), 0x0, NULL, HFILL }},
4608
14
        { &hf_ua3g_ip_device_routing_listen_rtp_parameter_length, { "Length", "ua3g.ip.listen_rtp.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4609
14
        { &hf_ua3g_ip_device_routing_get_param_req_parameter, { "Parameter", "ua3g.ip.get_param_req.parameter", FT_UINT8, BASE_DEC, VALS(ip_device_routing_cmd_get_param_req_vals), 0x0, NULL, HFILL }},
4610
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter, { "Parameter", "ua3g.ip.set_param_req.parameter", FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ip_device_routing_cmd_set_param_req_vals_ext, 0x0, NULL, HFILL }},
4611
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_length, { "Length", "ua3g.ip.set_param_req.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4612
14
        { &hf_ua3g_ip_device_routing_digit_value, { "Digit Value", "ua3g.ip.digit_value", FT_UINT8, BASE_DEC|BASE_EXT_STRING, &str_digit_ext, 0x0, NULL, HFILL }},
4613
14
        { &hf_ua3g_ip_device_routing_pause_restart_rtp_parameter, { "Parameter", "ua3g.ip.pause_restart_rtp.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_pause_restart_vals), 0x0, NULL, HFILL }},
4614
14
        { &hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_length, { "Length", "ua3g.ip.pause_restart_rtp.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4615
14
        { &hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_value, { "Value", "ua3g.ip.pause_restart_rtp.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4616
14
        { &hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter, { "Parameter", "ua3g.ip.start_stop_record_rtp.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_record_rtp_vals), 0x0, NULL, HFILL }},
4617
14
        { &hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_length, { "Length", "ua3g.ip.start_stop_record_rtp.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4618
14
        { &hf_ua3g_debug_in_line, { "Text String With Debug", "ua3g.debug_in_line", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4619
14
        { &hf_ua3g_command_led_number, { "Led Number", "ua3g.command.led.number", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4620
14
        { &hf_ua3g_lcd_line_cmd_lcd_options, { "LCD Options", "ua3g.command.lcd_line.lcd_options", FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL }},
4621
14
        { &hf_ua3g_lcd_line_cmd_starting_column, { "Starting Column", "ua3g.command.lcd_line.starting_column", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4622
14
        { &hf_ua3g_main_voice_mode_tune, { "Tune", "ua3g.main_voice_mode.tune", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4623
14
        { &hf_ua3g_main_voice_mode_cadence, { "Cadence", "ua3g.main_voice_mode.cadence", FT_UINT8, BASE_DEC, VALS(str_cadence), 0x0, NULL, HFILL }},
4624
14
        { &hf_ua3g_main_voice_mode_speaker_volume, { "Speaker Volume", "ua3g.main_voice_mode.speaker_volume", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4625
14
        { &hf_ua3g_main_voice_mode_microphone_volume, { "Microphone Volume", "ua3g.main_voice_mode.microphone_volume", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4626
14
        { &hf_ua3g_main_voice_mode_sending_level, { "Sending Level (dB)", "ua3g.main_voice_mode.sending_level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4627
14
        { &hf_ua3g_main_voice_mode_handset_level, { "Receiving Level (dB)", "ua3g.main_voice_mode.handset_level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4628
14
        { &hf_ua3g_main_voice_mode_headset_level, { "Receiving Level (dB)", "ua3g.main_voice_mode.headset_level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4629
14
        { &hf_ua3g_main_voice_mode_handsfree_level, { "Sending Level (dB)", "ua3g.main_voice_mode.handsfree_level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4630
14
        { &hf_ua3g_subdevice_metastate_subchannel_address, { "Subchannel Address", "ua3g.subdevice_metastate.subchannel_address", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4631
14
        { &hf_ua3g_subdevice_metastate_new_metastate, { "New Metastate", "ua3g.subdevice_metastate.new_metastate", FT_UINT8, BASE_DEC, VALS(str_new_metastate), 0x0, NULL, HFILL }},
4632
14
        { &hf_ua3g_dwl_dtmf_clck_format_minimum_on_time, { "Minimum 'ON' Time (ms)", "ua3g.dwl_dtmf_clck_format.minimum_on_time", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4633
14
        { &hf_ua3g_dwl_dtmf_clck_format_inter_digit_pause_time, { "Inter-Digit Pause Time (ms)", "ua3g.dwl_dtmf_clck_format.inter_digit_pause_time", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4634
14
        { &hf_ua3g_dwl_dtmf_clck_format_clock_time_format, { "Clock Time Format", "ua3g.dwl_dtmf_clck_format.clock_time_format", FT_UINT8, BASE_DEC, VALS(str_clock_format), 0x0, NULL, HFILL }},
4635
14
        { &hf_ua3g_dwl_dtmf_clck_format_dtmf_country_adaptation, { "DTMF Country Adaptation", "ua3g.dwl_dtmf_clck_format.dtmf_country_adaptation", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4636
14
        { &hf_ua3g_voice_channel_channel_mode, { "Channel Mode", "ua3g.voice_channel.channel_mode", FT_BOOLEAN, 8, TFS(&tfs_voice_channel_channel_mode), 0x01, NULL, HFILL }},
4637
14
        { &hf_ua3g_voice_channel_codec, { "Codec", "ua3g.voice_channel.codec", FT_BOOLEAN, 8, TFS(&tfs_voice_channel_codec), 0x02, NULL, HFILL }},
4638
14
        { &hf_ua3g_voice_channel_voice_channel, { "Voice Channel", "ua3g.voice_channel.voice_channel", FT_BOOLEAN, 8, TFS(&tfs_voice_channel_voice_channel), 0x04, NULL, HFILL }},
4639
14
        { &hf_ua3g_voice_channel_main_voice, { "Main Voice", "ua3g.voice_channel.main_voice", FT_UINT8, BASE_DEC, VALS(str_voice_channel), 0x0, NULL, HFILL }},
4640
14
        { &hf_ua3g_voice_channel_announce, { "Announce", "ua3g.voice_channel.announce", FT_UINT8, BASE_DEC, VALS(str_voice_channel), 0x0, NULL, HFILL }},
4641
14
        { &hf_ua3g_voice_channel_b_general, { "B General", "ua3g.voice_channel.b_general", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4642
14
        { &hf_ua3g_voice_channel_b_loud_speaker, { "B Loud Speaker", "ua3g.voice_channel.b_loud_speaker", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4643
14
        { &hf_ua3g_voice_channel_b_ear_piece, { "B Ear Piece", "ua3g.voice_channel.b_ear_piece", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4644
14
        { &hf_ua3g_voice_channel_b_microphones, { "B Microphones", "ua3g.voice_channel.b_microphones", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4645
14
        { &hf_ua3g_lcd_cursor_line_number, { "Line Number", "ua3g.lcd_cursor.line_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4646
14
        { &hf_ua3g_dwl_special_char_character_number, { "Character Number", "ua3g.dwl_special_char.character_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4647
14
        { &hf_ua3g_dwl_special_char_byte, { "Byte", "ua3g.dwl_special_char.byte", FT_UINT8, BASE_DEC, NULL, 0xFF, NULL, HFILL }},
4648
14
        { &hf_ua3g_set_clck_timer_pos_clock_line_number, { "Clock Line Number", "ua3g.set_clck_timer_pos.clock_line_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4649
14
        { &hf_ua3g_set_clck_timer_pos_clock_column_number, { "Clock Column Number", "ua3g.set_clck_timer_pos.clock_column_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4650
14
        { &hf_ua3g_set_clck_timer_pos_call_timer_line_number, { "Call Timer Line Number", "ua3g.set_clck_timer_pos.call_timer_line_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4651
14
        { &hf_ua3g_set_clck_timer_pos_call_timer_column_number, { "Call Timer Column Number", "ua3g.set_clck_timer_pos.call_timer_column_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4652
14
        { &hf_ua3g_set_lcd_contrast_driver_number, { "Driver Number", "ua3g.set_lcd_contrast.driver_number", FT_UINT8, BASE_DEC, VALS(str_driver_number), 0x0, NULL, HFILL }},
4653
14
        { &hf_ua3g_set_lcd_contrast_contrast_value, { "Contrast Value", "ua3g.set_lcd_contrast.contrast_value", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4654
14
        { &hf_ua3g_beep_destination, { "Destination", "ua3g.command.beep.destination", FT_UINT8, BASE_DEC, VALS(str_beep_start_destination), 0x0, NULL, HFILL }},
4655
14
        { &hf_ua3g_beep_on_off, { "On / Off", "ua3g.command.beep.on_off", FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x80, NULL, HFILL }},
4656
14
        { &hf_ua3g_beep_cadence, { "Cadence", "ua3g.command.beep.cadence", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4657
14
        { &hf_ua3g_beep_beep_number, { "Beep Number", "ua3g.command.beep.beep_number", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4658
14
        { &hf_ua3g_beep_number_of_notes, { "Number Of Notes", "ua3g.command.beep.number_of_notes", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4659
14
        { &hf_ua3g_beep_terminator, { "Terminator", "ua3g.command.beep.terminator", FT_UINT8, BASE_DEC, VALS(str_beep_terminator), 0x0, NULL, HFILL }},
4660
14
        { &hf_ua3g_sidetone_level, { "Level", "ua3g.command.sidetone.level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4661
14
        { &hf_ua3g_ringing_cadence_cadence, { "Cadence", "ua3g.ringing_cadence.cadence", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4662
14
        { &hf_ua3g_ringing_cadence_on_off, { "On / Off", "ua3g.ringing_cadence.on_off", FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x80, NULL, HFILL }},
4663
14
        { &hf_ua3g_ringing_cadence_length, { "Length (ms)", "ua3g.ringing_cadence.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4664
14
        { &hf_ua3g_feedback_level, { "Level (dB)", "ua3g.command.feedback.level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4665
14
        { &hf_ua3g_feedback_duration, { "Duration", "ua3g.command.feedback.duration", FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0, NULL, HFILL }},
4666
14
        { &hf_ua3g_r_w_peripheral_address, { "Address", "ua3g.r_w_peripheral.address", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4667
14
        { &hf_ua3g_r_w_peripheral_content, { "Content", "ua3g.r_w_peripheral.content", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4668
14
        { &hf_ua3g_icon_cmd_icon_number, { "Icon Number", "ua3g.icon_cmd.icon_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4669
14
        { &hf_ua3g_icon_cmd_segment, { "Segment", "ua3g.icon_cmd.segment", FT_UINT16, BASE_DEC, VALS(str_icon_cmd_state), 0x0, NULL, HFILL }},
4670
14
        { &hf_ua3g_audio_config_ignored, { "Ignored", "ua3g.command.audio_config.ignored", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4671
14
        { &hf_ua3g_audio_config_law, { "Law", "ua3g.command.audio_config.law", FT_UINT8, BASE_DEC, VALS(str_audio_coding_law), 0x0, NULL, HFILL }},
4672
14
        { &hf_ua3g_audio_config_volume_level, { "Volume Level", "ua3g.command.audio_config.volume_level", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4673
14
        { &hf_ua3g_audio_config_handsfree_return, { "Return", "ua3g.command.audio_config.handsfree_return", FT_BOOLEAN, 8, TFS(&tfs_audio_config_handsfree_return), 0x01, NULL, HFILL }},
4674
14
        { &hf_ua3g_audio_config_handsfree_handsfree, { "Handsfree", "ua3g.command.audio_config.handsfree", FT_BOOLEAN, 8, TFS(&tfs_audio_config_handsfree_handsfree), 0x02, NULL, HFILL }},
4675
14
        { &hf_ua3g_audio_padded_path_emission_padded_level, { "Emission Padded Level", "ua3g.audio_padded_path.emission_padded_level", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4676
14
        { &hf_ua3g_audio_padded_path_reception_padded_level, { "Reception Padded Level", "ua3g.audio_padded_path.reception_padded_level", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4677
14
        { &hf_ua3g_on_off_level_level_on_loudspeaker, { "Level on Loudspeaker (dB)", "ua3g.on_off_level.level_on_loudspeaker", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4678
14
        { &hf_ua3g_ring_melody, { "Melody", "ua3g.command.ring.melody", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4679
14
        { &hf_ua3g_ring_cadence, { "Cadence", "ua3g.command.ring.cadence", FT_UINT8, BASE_DEC, VALS(str_cadence), 0x0, NULL, HFILL }},
4680
14
        { &hf_ua3g_ring_speaker_level, { "Speaker level (dB)", "ua3g.command.ring.speaker_level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4681
14
        { &hf_ua3g_ring_beep_number, { "Beep number", "ua3g.command.ring.beep_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4682
14
        { &hf_ua3g_ring_silent, { "Silent", "ua3g.command.ring.silent", FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x80, NULL, HFILL }},
4683
14
        { &hf_ua3g_ring_progressive, { "Progressive", "ua3g.command.ring.progressive", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL }},
4684
14
        { &hf_ua3g_ua_dwl_protocol_item_identifier, { "Item Identifier", "ua3g.ua_dwl_protocol.item_identifier", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4685
14
        { &hf_ua3g_ua_dwl_protocol_cause, { "Cause", "ua3g.ua_dwl_protocol.cause", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4686
14
        { &hf_ua3g_ua_dwl_protocol_force_mode, { "Force Mode", "ua3g.ua_dwl_protocol.force_mode", FT_UINT8, BASE_DEC, VALS(str_download_req_force_mode), 0x0, NULL, HFILL }},
4687
14
        { &hf_ua3g_ua_dwl_protocol_item_version, { "Item Version", "ua3g.ua_dwl_protocol.item_version", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4688
14
        { &hf_ua3g_ua_dwl_protocol_item_version_nc, { "Item Version", "ua3g.ua_dwl_protocol.item_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4689
14
        { &hf_ua3g_ua_dwl_protocol_binary_length, { "Binary Length", "ua3g.ua_dwl_protocol.binary_length", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4690
14
        { &hf_ua3g_ua_dwl_protocol_packet_number, { "Packet Number", "ua3g.ua_dwl_protocol.packet_number", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4691
14
        { &hf_ua3g_ua_dwl_protocol_download_ack_status, { "Status", "ua3g.ua_dwl_protocol.download_ack_status", FT_UINT8, BASE_DEC|BASE_EXT_STRING, &str_download_ack_status_ext, 0x0, NULL, HFILL }},
4692
14
        { &hf_ua3g_ua_dwl_protocol_packet_download_end_ack_ok_status, { "Status", "ua3g.ua_dwl_protocol_packet.download_end_ack_ok_status", FT_UINT8, BASE_DEC, VALS(str_download_end_ack_ok), 0x0, NULL, HFILL }},
4693
14
        { &hf_ua3g_ua_dwl_protocol_checksum, { "Checksum", "ua3g.ua_dwl_protocol.checksum", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4694
14
        { &hf_ua3g_ua_dwl_protocol_acknowledge, { "Acknowledge", "ua3g.ua_dwl_protocol.acknowledge", FT_UINT8, BASE_DEC, VALS(str_iso_checksum_ack_status), 0x0, NULL, HFILL }},
4695
14
        { &hf_ua3g_digit_dialed_digit_value, { "Digit Value", "ua3g.digit_dialed.digit_value", FT_UINT8, BASE_DEC|BASE_EXT_STRING, &str_digit_ext, 0x0, NULL, HFILL }},
4696
14
        { &hf_ua3g_subdevice_msg_subdev_type, { "Subdev Type", "ua3g.subdevice_msg.subdev_type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4697
14
        { &hf_ua3g_subdevice_msg_subdev_address, { "Subdev Address", "ua3g.subdevice_msg.subdev_address", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4698
14
        { &hf_ua3g_subdevice_msg_subdevice_opcode, { "Subdevice Opcode", "ua3g.subdevice_msg.subdevice_opcode", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4699
14
        { &hf_ua3g_subdevice_msg_parameter_bytes, { "Parameter Bytes", "ua3g.subdevice_msg.parameter_bytes", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4700
14
        { &hf_ua3g_cs_ip_device_routing_cmd00_vta_type, { "VTA Type", "ua3g.ip.cs.cmd00.vta_type", FT_UINT8, BASE_HEX, VALS(str_vta_type), 0x0, NULL, HFILL }},
4701
14
        { &hf_ua3g_cs_ip_device_routing_cmd00_characteristic_number, { "Characteristic Number", "ua3g.ip.cs.cmd00.characteristic_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4702
14
        { &hf_ua3g_cs_ip_device_routing_cmd01_incident_0, { "Incident 0", "ua3g.ip.cs.cmd01.incident_0", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4703
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter, { "Parameter", "ua3g.ip.cs.cmd02.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_get_param_req_vals), 0x0, NULL, HFILL }},
4704
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_length, { "Length", "ua3g.ip.cs.cmd02.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4705
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter, { "Parameter", "ua3g.ip.cs.cmd03.parameter", FT_UINT8, BASE_HEX|BASE_EXT_STRING, &cs_ip_device_routing_03_parameter_id_vals_ext, 0x0, NULL, HFILL }},
4706
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_length, { "Length", "ua3g.ip.cs.cmd03.parameter.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4707
14
        { &hf_ua3g_unsolicited_msg_device_type, { "Device Type", "ua3g.unsolicited_msg.device_type", FT_UINT8, BASE_DEC, VALS(str_device_type), 0x0, NULL, HFILL }},
4708
14
        { &hf_ua3g_unsolicited_msg_self_test_result, { "Self-Test Result", "ua3g.unsolicited_msg.self_test_result", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4709
14
        { &hf_ua3g_unsolicited_msg_vta_type, { "VTA Type", "ua3g.unsolicited_msg.vta_type", FT_UINT8, BASE_HEX, VALS(str_vta_type), 0x0, NULL, HFILL }},
4710
14
        { &hf_ua3g_unsolicited_msg_other_information, { "Other Information", "ua3g.unsolicited_msg.other_information", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_other_info_2), 0x0, NULL, HFILL }},
4711
14
        { &hf_ua3g_unsolicited_msg_other_information_1, { "Other Information 1", "ua3g.unsolicited_msg.other_information_1", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_other_info_1), 0x0, NULL, HFILL }},
4712
14
        { &hf_ua3g_unsolicited_msg_hardware_version, { "Hardware Version", "ua3g.unsolicited_msg.hardware_version", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4713
14
        { &hf_ua3g_unsolicited_msg_other_information_2, { "Other Information 2", "ua3g.unsolicited_msg.other_information_2", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_other_info_2), 0x0, NULL, HFILL }},
4714
14
        { &hf_ua3g_unsolicited_msg_firmware_datas_patch_version, { "Firmware Datas Patch Version", "ua3g.unsolicited_msg.firmware_datas_patch_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4715
14
        { &hf_ua3g_unsolicited_msg_firmware_version_loader, { "Firmware Version (Loader)", "ua3g.unsolicited_msg.firmware_version_loader", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4716
14
        { &hf_ua3g_unsolicited_msg_firmware_version, { "Firmware Version", "ua3g.unsolicited_msg.firmware_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4717
14
        { &hf_ua3g_unsolicited_msg_datas_version, { "Datas Version", "ua3g.unsolicited_msg.datas_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4718
14
        { &hf_ua3g_unsolicited_msg_firmware_version_bootloader, { "Firmware Version (Bootloader)", "ua3g.unsolicited_msg.firmware_version_bootloader", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4719
14
        { &hf_ua3g_unsolicited_msg_opcode_of_bad_command, { "Opcode Of Bad Command", "ua3g.unsolicited_msg.opcode_of_bad_command", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4720
14
        { &hf_ua3g_unsolicited_msg_next_byte_of_bad_command, { "Next Byte Of Bad Command", "ua3g.unsolicited_msg.next_byte_of_bad_command", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4721
14
        { &hf_ua3g_unsolicited_msg_subdevice_address, { "Subdevice Address", "ua3g.unsolicited_msg.subdevice_address", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4722
14
        { &hf_ua3g_unsolicited_msg_segment_failure_t, { "T", "ua3g.unsolicited_msg.segment_failure.t", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4723
14
        { &hf_ua3g_unsolicited_msg_segment_failure_num, { "Num", "ua3g.unsolicited_msg.segment_failurenum", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4724
14
        { &hf_ua3g_unsolicited_msg_segment_failure_s, { "/S", "ua3g.unsolicited_msg.segment_failure.s", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4725
14
        { &hf_ua3g_unsolicited_msg_segment_failure_l, { "L", "ua3g.unsolicited_msg.segment_failure.l", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4726
14
        { &hf_ua3g_unsolicited_msg_opcode_bad_segment, { "Opcode Bad Segment", "ua3g.unsolicited_msg.opcode_bad_segment", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4727
14
        { &hf_ua3g_unsolicited_msg_next_byte_of_bad_segment, { "Next Byte Of Bad Segment", "ua3g.unsolicited_msg.next_byte_of_bad_segment", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4728
14
        { &hf_ua3g_unsolicited_msg_device_event, { "Device Event", "ua3g.unsolicited_msg.device_event", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4729
14
        { &hf_ua3g_i_m_here_id_code, { "Id Code", "ua3g.i_m_here.id_code", FT_UINT8, BASE_DEC, VALS(str_device_type), 0x0, NULL, HFILL }},
4730
14
        { &hf_ua3g_segment_msg_segment, { "F/S", "ua3g.segment_msg.segment", FT_BOOLEAN, 8, TFS(&tfs_segment_msg_segment), 0x80, NULL, HFILL }},
4731
14
        { &hf_ua3g_ip_device_routing_reset_parameter_noe_update, { "NOE Update Mode", "ua3g.ip.reset.parameter.noe_update", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4732
14
        { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_bootloader, { "Bootloader", "ua3g.ip.reset.parameter.noe_update.bootloader", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
4733
14
        { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_data, { "Data", "ua3g.ip.reset.parameter.noe_update.data", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
4734
14
        { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_customization, { "Customization", "ua3g.ip.reset.parameter.noe_update.customization", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
4735
14
        { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_localization, { "Localization", "ua3g.ip.reset.parameter.noe_update.localization", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL }},
4736
14
        { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_code, { "Code", "ua3g.ip.reset.parameter.noe_update.code", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, NULL, HFILL }},
4737
14
        { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_sip, { "SIP", "ua3g.ip.reset.parameter.noe_update.sip", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20, NULL, HFILL }},
4738
14
        { &hf_ua3g_ip_device_routing_reset_parameter_bad_sec_mode, { "Bad Sec Mode", "ua3g.ip.reset.parameter.bad_sec_mode", FT_UINT8, BASE_DEC, VALS(reset_param_bad_sec_mode), 0x0, NULL, HFILL }},
4739
14
        { &hf_ua3g_ip_device_routing_reset_parameter_value, { "Value", "ua3g.ip.reset.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4740
14
        { &hf_ua3g_ip_device_routing_reset_parameter_cust_name, { "Cust_Name", "ua3g.ip.reset.parameter.cust_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4741
14
        { &hf_ua3g_ip_device_routing_reset_parameter_l10n_name, { "L10N_Name", "ua3g.ip.reset.parameter.l10n_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4742
14
        { &hf_ua3g_ip_device_routing_reset_parameter_appl_mode, { "Appl_Mode", "ua3g.ip.reset.parameter.appl_mode", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4743
14
        { &hf_ua3g_ip_device_routing_reset_parameter_sip_name, { "SIP_Name", "ua3g.ip.reset.parameter.sip_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4744
14
        { &hf_ua3g_ip_device_routing_reset_parameter_reset_mac, { "Reset Mac", "ua3g.ip.reset.parameter.reset_mac", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4745
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter_value, { "Value", "ua3g.ip.start_rtp.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4746
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter_ip, { "IP", "ua3g.ip.start_rtp.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4747
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter_compressor, { "Compressor", "ua3g.ip.start_rtp.parameter.compressor", FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(str_compressor_vals), 0x0, NULL, HFILL }},
4748
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter_enabler, { "Enabler", "ua3g.ip.start_rtp.parameter.enabler", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4749
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter_send_qos, { "Must Send QOS Tickets", "ua3g.ip.start_rtp.parameter.send_qos", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4750
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter_uint, { "Value", "ua3g.ip.start_rtp.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4751
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter_dtmf_sending, { "Send DTMF", "ua3g.ip.start_rtp.parameter.dtmf_sending", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4752
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter_rfc2198, { "Enable RFC 2198", "ua3g.ip.start_rtp.parameter.rfc2198", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4753
14
        { &hf_ua3g_ip_device_routing_start_rtp_parameter_srtp_encryption, { "Enable SRTP Encryption", "ua3g.ip.start_rtp.parameter.srtp_encryption", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4754
14
        { &hf_ua3g_ip_device_routing_redirect_parameter_value, { "Value", "ua3g.ip.redirect.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4755
14
        { &hf_ua3g_ip_device_routing_redirect_parameter_ip, { "IP", "ua3g.ip.redirect.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4756
14
        { &hf_ua3g_ip_device_routing_redirect_parameter_uint, { "Value", "ua3g.ip.redirect.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4757
14
        { &hf_ua3g_ip_device_routing_listen_rtp_parameter_value, { "Value", "ua3g.ip.listen_rtp.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4758
14
        { &hf_ua3g_ip_device_routing_listen_rtp_parameter_ip, { "IP", "ua3g.ip.listen_rtp.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4759
14
        { &hf_ua3g_ip_device_routing_listen_rtp_parameter_port, { "Port", "ua3g.ip.listen_rtp.parameter.port", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4760
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_value, { "Value", "ua3g.ip.set_param_req.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4761
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_tftp_backup_ip, { "TFTP Backup IP", "ua3g.ip.set_param_req.parameter.tftp_backup_ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4762
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_uint, { "Value", "ua3g.ip.set_param_req.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4763
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_err_string, { "Value", "ua3g.ip.set_param_req.parameter.err_string", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4764
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_compressor, { "Compressor", "ua3g.ip.set_param_req.parameter.compressor", FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(str_compressor_vals), 0x0, NULL, HFILL }},
4765
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_set_pc_port_status, { "Set PC Port status", "ua3g.ip.set_param_req.parameter.set_pc_port_status", FT_UINT8, BASE_DEC, VALS(str_set_pc_port_status), 0x0, NULL, HFILL }},
4766
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_record_rtp_auth, { "Record RTP Authorization", "ua3g.ip.set_param_req.parameter.record_rtp_auth", FT_UINT8, BASE_DEC, VALS(str_enable_feature), 0x0, NULL, HFILL }},
4767
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_security_flag_filter, { "Filtering", "ua3g.ip.set_param_req.parameter.security_flag.filter", FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x01, NULL, HFILL }},
4768
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_stable_mode, { "Stable Mode", "ua3g.ip.set_param_req.parameter.stable_mode", FT_UINT8, BASE_DEC, VALS(set_param_req_stable_mode), 0x0, NULL, HFILL }},
4769
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_skin_id, { "Skin Identifier", "ua3g.ip.set_param_req.parameter.skin_id", FT_UINT8, BASE_DEC, VALS(set_param_req_skin_id), 0x0, NULL, HFILL }},
4770
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_language_id, { "Language Identifier", "ua3g.ip.set_param_req.parameter.language_id", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4771
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_usb_boost, { "USB Boost", "ua3g.ip.set_param_req.parameter.usb_boost", FT_UINT8, BASE_DEC, VALS(set_param_req_usb_boost), 0x0, NULL, HFILL }},
4772
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_als_device, { "ALS Device", "ua3g.ip.set_param_req.parameter.als_device", FT_UINT8, BASE_DEC, VALS(set_param_req_local_device), 0x0, NULL, HFILL }},
4773
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_busy_light, { "Busy Light", "ua3g.ip.set_param_req.parameter.busy_light", FT_UINT8, BASE_DEC, VALS(set_param_req_local_device), 0x0, NULL, HFILL }},
4774
14
        { &hf_ua3g_ip_device_routing_set_param_req_parameter_audio_env, { "Audio Env.", "ua3g.ip.set_param_req.parameter.audio_env", FT_UINT8, BASE_DEC, VALS(set_param_req_audio_env), 0x0, NULL, HFILL }},
4775
14
        { &hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_uint, { "Value", "ua3g.ip.pause_restart_rtp.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4776
14
        { &hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_value, { "Value", "ua3g.ip.start_stop_record_rtp.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4777
14
        { &hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_remote_ip, { "Remote IP", "ua3g.ip.start_stop_record_rtp.parameter.remote_ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4778
14
        { &hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_uint, { "Value", "ua3g.ip.start_stop_record_rtp.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4779
14
        { &hf_ua3g_ip_device_routing_freeseating_parameter, { "Parameter", "ua3g.ip.freeseating.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_freeseating_vals), 0x0, NULL, HFILL }},
4780
14
        { &hf_ua3g_ip_device_routing_freeseating_parameter_length, { "Length", "ua3g.ip.freeseating.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4781
14
        { &hf_ua3g_ip_device_routing_freeseating_parameter_value, { "Value", "ua3g.ip.freeseating.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4782
14
        { &hf_ua3g_ip_device_routing_freeseating_parameter_uint, { "Value", "ua3g.ip.freeseating.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4783
14
        { &hf_ua3g_ip_device_routing_freeseating_parameter_mac, { "Value", "ua3g.ip.freeseating.parameter.mac", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4784
14
        { &hf_ua3g_ip_device_routing_freeseating_parameter_ip, { "Value", "ua3g.ip.freeseating.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4785
14
        { &hf_ua3g_ip_device_routing_freeseating_parameter_ipv6, { "Value", "ua3g.ip.freeseating.parameter.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4786
14
        { &hf_ua3g_ip_device_routing_freeseating_parameter_do_reset, { "Value", "ua3g.ip.freeseating.parameter.do_reset", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4787
14
        { &hf_ua3g_ip_device_routing_appl_parameter, { "Parameter", "ua3g.ip.appl.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_appl_vals), 0x0, NULL, HFILL }},
4788
14
        { &hf_ua3g_ip_device_routing_appl_parameter_length, { "Length", "ua3g.ip.appl.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4789
14
        { &hf_ua3g_ip_device_routing_appl_parameter_value, { "Value", "ua3g.ip.appl.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4790
14
        { &hf_ua3g_ip_device_routing_appl_parameter_uint, { "Value", "ua3g.ip.appl.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4791
14
        { &hf_ua3g_ip_device_routing_appl_parameter_id, { "Value", "ua3g.ip.appl.parameter.id", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4792
14
        { &hf_ua3g_ip_device_routing_appl_parameter_enable, { "Value", "ua3g.ip.appl.parameter.enable", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4793
14
        { &hf_ua3g_ip_device_routing_appl_parameter_url, { "Value", "ua3g.ip.appl.parameter.url", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4794
14
        { &hf_ua3g_audio_config_dpi_chan_ua_tx1, { "UA Channel UA-TX1", "ua3g.command.audio_config.dpi_chan.ua_tx1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4795
14
        { &hf_ua3g_audio_config_dpi_chan_ua_tx2, { "UA Channel UA-TX2", "ua3g.command.audio_config.dpi_chan.ua_tx2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4796
14
        { &hf_ua3g_audio_config_dpi_chan_gci_tx1, { "GCI Channel GCI-TX1", "ua3g.command.audio_config.dpi_chan.gci_tx1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4797
14
        { &hf_ua3g_audio_config_dpi_chan_gci_tx2, { "GCI Channel GCI-TX2", "ua3g.command.audio_config.dpi_chan.gci_tx2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4798
14
        { &hf_ua3g_audio_config_dpi_chan_cod_tx, { "Codec Channel COD-TX", "ua3g.command.audio_config.dpi_chan.cod_tx", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4799
14
        { &hf_ua3g_audio_config_audio_circuit_dth, { "Anti-Distortion Coeff 1(DTH)", "ua3g.command.audio_config.audio_circuit.dth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4800
14
        { &hf_ua3g_audio_config_audio_circuit_dtr, { "Anti-Distortion Coeff 2(DTR)", "ua3g.command.audio_config.audio_circuit.dtr", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4801
14
        { &hf_ua3g_audio_config_audio_circuit_dtf, { "Anti-Distortion Coeff 3(DTF)", "ua3g.command.audio_config.audio_circuit.dtf", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4802
14
        { &hf_ua3g_audio_config_audio_circuit_str, { "Sidetone Attenuation (STR)", "ua3g.command.audio_config.audio_circuit.str", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4803
14
        { &hf_ua3g_audio_config_audio_circuit_ahp1, { "Anti-Larsen Coeff 1 (AHP1)", "ua3g.command.audio_config.audio_circuit.ahp1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4804
14
        { &hf_ua3g_audio_config_audio_circuit_ahp2, { "Anti-Larsen Coeff 2 (AHP2)", "ua3g.command.audio_config.audio_circuit.ahp2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4805
14
        { &hf_ua3g_audio_config_audio_circuit_ath, { "Anti-Larsen Coeff 3 (ATH)", "ua3g.command.audio_config.audio_circuit.ath", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4806
14
        { &hf_ua3g_audio_config_audio_circuit_atr, { "Anti-Larsen Coeff 4 (ATR)", "ua3g.command.audio_config.audio_circuit.atr", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4807
14
        { &hf_ua3g_audio_config_audio_circuit_atf, { "Anti-Larsen Coeff 5 (ATF)", "ua3g.command.audio_config.audio_circuit.atf", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4808
14
        { &hf_ua3g_audio_config_audio_circuit_alm, { "Anti-Larsen Coeff 6 (ALM)", "ua3g.command.audio_config.audio_circuit.alm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4809
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_group_listen, { "Group Listening Attenuation Constant", "ua3g.command.audio_config.loudspeaker_aco_param.group_listen", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4810
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_attenuation, { "Handsfree Attenuation Constant", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_attenuation", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4811
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_stay_in_send, { "Handsfree Number Of ms To Stay In Send State Before Going To Another State", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_stay_in_send", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4812
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mtx, { "Handsfree Number Of Positions To Shift Right MTx", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_shift_right_mtx", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4813
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mrc, { "Handsfree Number Of Positions To Shift Right MRc", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_shift_right_mrc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4814
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_trans_threshold, { "Handsfree Idle Transmission Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_idle_trans_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4815
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_trans_threshold, { "Handsfree Low Transmission Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_low_trans_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4816
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_recv_threshold, { "Handsfree Idle Reception Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_idle_recv_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4817
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_recv_threshold, { "Handsfree Low Reception Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_low_recv_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4818
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_med_recv_threshold, { "Handsfree Medium Reception Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_med_recv_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4819
14
        { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_high_recv_threshold, { "Handsfree High Reception Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_high_recv_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4820
14
        { &hf_ua3g_ua_dwl_protocol_files_inc_boot_binary, { "Boot Binary Included", "ua3g.ua_dwl_protocol.files_inc.boot_binary", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01, NULL, HFILL }},
4821
14
        { &hf_ua3g_ua_dwl_protocol_files_inc_loader_binary, { "Loader Binary Included", "ua3g.ua_dwl_protocol.files_inc.loader_binary", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02, NULL, HFILL }},
4822
14
        { &hf_ua3g_ua_dwl_protocol_files_inc_appli_binary, { "Appli Binary Included", "ua3g.ua_dwl_protocol.files_inc.appli_binary", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04, NULL, HFILL }},
4823
14
        { &hf_ua3g_ua_dwl_protocol_files_inc_data_binary, { "Datas Binary Included", "ua3g.ua_dwl_protocol.files_inc.data_binary", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08, NULL, HFILL }},
4824
14
        { &hf_ua3g_ua_dwl_protocol_model_selection_a, { "For A Model", "ua3g.ua_dwl_protocol.model_selection.a", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01, NULL, HFILL }},
4825
14
        { &hf_ua3g_ua_dwl_protocol_model_selection_b, { "For B Model", "ua3g.ua_dwl_protocol.model_selection.b", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02, NULL, HFILL }},
4826
14
        { &hf_ua3g_ua_dwl_protocol_model_selection_c, { "For C Model", "ua3g.ua_dwl_protocol.model_selection.c", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04, NULL, HFILL }},
4827
14
        { &hf_ua3g_ua_dwl_protocol_model_selection_country_ver, { "Country Version", "ua3g.ua_dwl_protocol.model_selection.country_ver", FT_UINT8, BASE_DEC, VALS(str_download_req_mode_selection_country), 0xE0, NULL, HFILL }},
4828
14
        { &hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe1, { "For Ivanoe 1", "ua3g.ua_dwl_protocol.hardware_selection.ivanoe1", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01, NULL, HFILL }},
4829
14
        { &hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe2, { "For Ivanoe 2", "ua3g.ua_dwl_protocol.hardware_selection.ivanoe2", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02, NULL, HFILL }},
4830
14
        { &hf_ua3g_ua_dwl_protocol_memory_sizes_flash, { "Flash Min Size", "ua3g.ua_dwl_protocol.memory_sizes.flash", FT_UINT8, BASE_DEC, VALS(str_mem_size), 0x07, NULL, HFILL }},
4831
14
        { &hf_ua3g_ua_dwl_protocol_memory_sizes_ext_ram, { "External Ram Min Size", "ua3g.ua_dwl_protocol.memory_sizes.ext_ram", FT_UINT8, BASE_DEC, VALS(str_mem_size), 0x38, NULL, HFILL }},
4832
14
        { &hf_ua3g_unsolicited_msg_char_num_vta_subtype, { "VTA SubType", "ua3g.unsolicited_msg.char_num.vta_subtype", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_subtype), 0xC0, NULL, HFILL }},
4833
14
        { &hf_ua3g_unsolicited_msg_char_num_generation, { "Generation", "ua3g.unsolicited_msg.char_num.generation", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_generation), 0x38, NULL, HFILL }},
4834
14
        { &hf_ua3g_unsolicited_msg_char_num_design, { "Design", "ua3g.unsolicited_msg.char_num.design", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_design), 0x07, NULL, HFILL }},
4835
14
        { &hf_ua3g_unsolicited_msg_hardware_config_vta_type, { "VTA Type", "ua3g.unsolicited_msg.hardware_config.vta_type", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_vta_type), 0xE0, NULL, HFILL }},
4836
14
        { &hf_ua3g_unsolicited_msg_hardware_config_design, { "Design", "ua3g.unsolicited_msg.hardware_config.design", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_design), 0x1C, NULL, HFILL }},
4837
14
        { &hf_ua3g_unsolicited_msg_hardware_config_subtype, { "VTA SubType", "ua3g.unsolicited_msg.hardware_config.subtype", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_subtype), 0x03, NULL, HFILL }},
4838
14
        { &hf_ua3g_unsolicited_msg_hardware_config_hard_config_chip, { "Chip Id", "ua3g.unsolicited_msg.hardware_config.hard_config_chip", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_config_chip), 0x03, NULL, HFILL }},
4839
14
        { &hf_ua3g_unsolicited_msg_hardware_config_hard_config_flash, { "Flash Size", "ua3g.unsolicited_msg.hardware_config.hard_config_flash", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_config_flash), 0x1C, NULL, HFILL }},
4840
14
        { &hf_ua3g_unsolicited_msg_hardware_config_config_ram, { "External RAM Size", "ua3g.unsolicited_msg.hardware_config.config_ram", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_config_ram), 0xE0, NULL, HFILL }},
4841
14
        { &hf_ua3g_unsolicited_msg_hardware_config, { "Hardware Configuration", "ua3g.unsolicited_msg.hardware_config", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4842
14
        { &hf_ua3g_unsolicited_msg_hardware_config_export_full, { "Binary Type", "ua3g.unsolicited_msg.hardware_config.export_full", FT_BOOLEAN, 8, TFS(&tfs_export_full), 0x01, NULL, HFILL }},
4843
14
        { &hf_ua3g_unsolicited_msg_hardware_config_ethernet_hardware, { "Ethernet Hardware", "ua3g.unsolicited_msg.hardware_config.ethernet_hardware", FT_BOOLEAN, 8, TFS(&tfs_fast_gigabit), 0x02, NULL, HFILL }},
4844
14
        { &hf_ua3g_unsolicited_msg_hardware_config_extended_edition, { "Extended Hardware", "ua3g.unsolicited_msg.hardware_config.extended_edition", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04, NULL, HFILL }},
4845
14
        { &hf_ua3g_unsolicited_msg_hardware_config_wideband, { "Wideband Support", "ua3g.unsolicited_msg.hardware_config.wideband", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08, NULL, HFILL }},
4846
14
        { &hf_ua3g_unsolicited_msg_hardware_config_3g_set, { "Hardware Generation", "ua3g.unsolicited_msg.hardware_config.3g_set", FT_BOOLEAN, 8, TFS(&tfs_2g_3g), 0x10, NULL, HFILL }},
4847
14
        { &hf_ua3g_unsolicited_msg_hardware_config_8082_set, { "8082 Hardware", "ua3g.unsolicited_msg.hardware_config.8082_set", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20, NULL, HFILL }},
4848
14
        { &hf_ua3g_unsolicited_msg_hardware_config_super_wideband, { "Super Wideband Support", "ua3g.unsolicited_msg.hardware_config.super_wideband", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40, NULL, HFILL }},
4849
14
        { &hf_ua3g_unsolicited_msg_hook_status, { "Hook Status", "ua3g.unsolicited_msg.hook_status", FT_UINT8, BASE_DEC, VALS(str_on_off), 0x0, NULL, HFILL }},
4850
14
        { &hf_ua3g_unsolicited_msg_additional_vta_type, { "Additional VTA Type", "ua3g.unsolicited_msg.additional_vta_type", FT_UINT8, BASE_HEX, VALS(str_additional_vta_type), 0x0, NULL, HFILL }},
4851
14
        { &hf_ua3g_unsolicited_msg_capability_info_bluetooth_supported, { "Bluetooth Supported", "ua3g.unsolicited_msg.capability_info.bluetooth_supported", FT_UINT8, BASE_DEC, VALS(str_yes_no), 0x0, NULL, HFILL }},
4852
14
        { &hf_ua3g_unsolicited_msg_capability_info_vpn_encryption_status, { "VPN and Encryption Status", "ua3g.unsolicited_msg.capability_info.vpn_encryption_status", FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }},
4853
14
        { &hf_ua3g_unsolicited_msg_capability_info_vpn, { "VPN", "ua3g.unsolicited_msg.capability_info.vpn", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01, NULL, HFILL }},
4854
14
        { &hf_ua3g_unsolicited_msg_capability_info_ipsec, { "IPSec", "ua3g.unsolicited_msg.capability_info.ipsec", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02, NULL, HFILL }},
4855
14
        { &hf_ua3g_unsolicited_msg_capability_info_dtls, { "DTLS", "ua3g.unsolicited_msg.capability_info.dtls", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x4, NULL, HFILL }},
4856
14
        { &hf_ua3g_unsolicited_msg_capability_info_wlan_status, { "WLAN Status", "ua3g.unsolicited_msg.capability_info.wlan_status", FT_UINT8, BASE_DEC, VALS(str_wlan_status), 0x0, NULL, HFILL }},
4857
14
        { &hf_ua3g_unsolicited_msg_capability_info_reserved, { "Reserved", "ua3g.unsolicited_msg.capability_info.reserved", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4858
14
        { &hf_ua3g_special_key_shift, { "Shift", "ua3g.special_key.shift", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x01, NULL, HFILL }},
4859
14
        { &hf_ua3g_special_key_ctrl, { "Ctrl", "ua3g.special_key.ctrl", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x02, NULL, HFILL }},
4860
14
        { &hf_ua3g_special_key_alt, { "Alt", "ua3g.special_key.alt", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x04, NULL, HFILL }},
4861
14
        { &hf_ua3g_special_key_cmd, { "Cmd", "ua3g.special_key.cmd", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x08, NULL, HFILL }},
4862
14
        { &hf_ua3g_special_key_shift_prime, { "Shift'", "ua3g.special_key.shift_prime", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x10, NULL, HFILL }},
4863
14
        { &hf_ua3g_special_key_ctrl_prime, { "Ctrl'", "ua3g.special_key.ctrl_prime", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x20, NULL, HFILL }},
4864
14
        { &hf_ua3g_special_key_alt_prime, { "Alt'", "ua3g.special_key.alt_prime", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x40, NULL, HFILL }},
4865
14
        { &hf_ua3g_special_key_cmd_prime, { "Cmd'", "ua3g.special_key.cmd_prime", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x80, NULL, HFILL }},
4866
14
        { &hf_ua3g_lcd_line_cmd_lcd_options_call_timer, { "Call Timer", "ua3g.lcd_line_cmd.lcd_options.call_timer", FT_UINT8, BASE_DEC, VALS(str_call_timer_ctrl), 0x03, NULL, HFILL }},
4867
14
        { &hf_ua3g_lcd_line_cmd_lcd_options_blink, { "Blink", "ua3g.lcd_line_cmd.lcd_options.blink", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
4868
14
        { &hf_ua3g_lcd_line_cmd_lcd_options_call_timer_control, { "Call Timer Control", "ua3g.lcd_line_cmd.lcd_options.call_timer_control", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, NULL, HFILL }},
4869
14
        { &hf_ua3g_lcd_line_cmd_lcd_options_call_timer_display, { "Call Timer Display", "ua3g.lcd_line_cmd.lcd_options.call_timer_display", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20, NULL, HFILL }},
4870
14
        { &hf_ua3g_lcd_line_cmd_lcd_options_time_of_day_display, { "Time Of Day Display", "ua3g.lcd_line_cmd.lcd_options.time_of_day_display", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x40, NULL, HFILL }},
4871
14
        { &hf_ua3g_lcd_line_cmd_lcd_options_suspend_display_refresh, { "Suspend Display Refresh", "ua3g.lcd_line_cmd.lcd_options.suspend_display_refresh", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80, NULL, HFILL }},
4872
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_value, { "Value", "ua3g.ip.cs.cmd02.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4873
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_ip, { "IP", "ua3g.ip.cs.cmd02.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4874
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_mac_address, { "MAC Address", "ua3g.ip.cs.cmd02.parameter.mac_address", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4875
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_uint, { "Value", "ua3g.ip.cs.cmd02.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4876
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_bytes, { "Default Codec", "ua3g.ip.cs.cmd02.parameter.default_codec.bytes", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4877
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_uint, { "Default Codec", "ua3g.ip.cs.cmd02.parameter.default_codec.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4878
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_firmware_version, { "Firmware Version", "ua3g.ip.cs.cmd02.parameter.firmware_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4879
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_tscip_version, { "Firmware Version", "ua3g.ip.cs.cmd02.parameter.tscip_version", FT_UINT24, BASE_CUSTOM, CF_FUNC(version_3bytes_computer), 0x0, NULL, HFILL }},
4880
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_speed, { "Port Lan Speed", "ua3g.ip.cs.cmd02.parameter.eth_driver_config.port_lan_speed", FT_UINT8, BASE_DEC, VALS(str_ethernet_speed_vals), 0x0, NULL, HFILL }},
4881
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_duplex, { "Port Lan Duplex", "ua3g.ip.cs.cmd02.parameter.eth_driver_config.port_lan_duplex", FT_CHAR, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4882
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_speed, { "Port PC Speed", "ua3g.ip.cs.cmd02.parameter.eth_driver_config.port_pc_speed", FT_UINT8, BASE_DEC, VALS(str_ethernet_speed_vals), 0x0, NULL, HFILL }},
4883
14
        { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_duplex, { "Port PC Duplex", "ua3g.ip.cs.cmd02.parameter.eth_driver_config.port_pc_duplex", FT_CHAR, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4884
4885
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_ip, { "IP", "ua3g.ip.cs.cmd03.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4886
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_string, { "IP", "ua3g.ip.cs.cmd03.parameter.string", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4887
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_type_of_equip, { "Type Of Equipment", "ua3g.ip.cs.cmd03.parameter.type_of_equip", FT_UINT16, BASE_HEX, VALS(cs_ip_device_routing_cmd03_type_of_equip_vals), 0x0, NULL, HFILL }},
4888
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_firmware_version, { "Firmware Version", "ua3g.ip.cs.cmd03.parameter.firmware_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4889
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_codec, { "Codec", "ua3g.ip.cs.cmd03.parameter.codec", FT_UINT8, BASE_HEX, VALS(str_cs_ip_device_routing_0F_compressor), 0x0, NULL, HFILL }},
4890
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_vad, { "VAD", "ua3g.ip.cs.cmd03.parameter.vad", FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x0, NULL, HFILL }},
4891
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_ece, { "ECE", "ua3g.ip.cs.cmd03.parameter.ece", FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x0, NULL, HFILL }},
4892
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_voice_mode, { "Voice Mode", "ua3g.ip.cs.cmd03.parameter.voice_mode", FT_UINT8, BASE_HEX, VALS(cs_ip_device_routing_cmd03_voice_mode_vals), 0x0, NULL, HFILL }},
4893
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_delay_distribution, { "Delay Distribution", "ua3g.ip.cs.cmd03.parameter.delay_distribution", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4894
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_bfi, { "Consecutive BFI", "ua3g.ip.cs.cmd03.parameter.consecutive_bfi", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4895
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution, { "BFI Distribution", "ua3g.ip.cs.cmd03.parameter.bfi_distribution", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4896
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021Q_used, { "802.1 Q Used", "ua3g.ip.cs.cmd03.parameter.8021Q_used", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4897
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021P_priority, { "802.1p Priority", "ua3g.ip.cs.cmd03.parameter.8021P_priority", FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL }},
4898
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_vlan_id, { "VLAN Id", "ua3g.ip.cs.cmd03.parameter.vlan_id", FT_UINT16, BASE_DEC, NULL, 0x0FFF, NULL, HFILL }},
4899
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_diffserv, { "DiffServ", "ua3g.ip.cs.cmd03.parameter.diffserv", FT_UINT8, BASE_DEC, NULL, 0xFC, NULL, HFILL }},
4900
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution_200ms, { "200 ms BFI Distribution", "ua3g.ip.cs.cmd03.parameter.bfi_distribution_200ms", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4901
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_uint, { "Value", "ua3g.ip.cs.cmd03.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4902
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_rtp_lost, { "Consecutive RTP Lost", "ua3g.ip.cs.cmd03.parameter.consecutive_rtp_lost", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4903
14
        { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_jitter_depth_distribution, { "Jitter Depth Distribution", "ua3g.ip.cs.cmd03.parameter.jitter_depth_distribution", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4904
14
        { &hf_ua3g_subdevice_state, { "Subdevice State", "ua3g.subdevice_state", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4905
14
        { &hf_ua3g_special_key_param_dtmf, { "Parameters Received for DTMF", "ua3g.special_key.param_dtmf", FT_BOOLEAN, 8, TFS(&tfs_special_key_parameters), 0x02, NULL, HFILL }},
4906
14
        { &hf_ua3g_special_key_hookswitch_status, { "Hookswitch Status", "ua3g.special_key.hookswitch_status", FT_BOOLEAN, 8, TFS(&tfs_hookswitch_status), 0x01, NULL, HFILL }},
4907
14
        { &hf_ua3g_cs_ip_device_routing_param_identifier, { "Parameter Identifier", "ua3g.ip.cs.param_identifier", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4908
14
        { &hf_ua3g_key_number, { "Key Number", "ua3g.key_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4909
14
        { &hf_ua3g_ua_dwl_protocol_binary_info, { "Binary information", "ua3g.ua_dwl_protocol.binary_info", FT_BOOLEAN, 8, TFS(&tfs_bin_info), 0x01, NULL, HFILL }},
4910
14
        { &hf_ua3g_lcd_line_cmd_unused, { "Unused", "ua3g.command.lcd_line.unused", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4911
14
        { &hf_ua3g_lcd_line_cmd_ascii_char, { "ASCII Char", "ua3g.command.lcd_line.ascii_char", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4912
14
        { &hf_ua3g_call_timer, { "Call Timer", "ua3g.command.call_timer", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4913
14
        { &hf_ua3g_current_time, { "Current Timer", "ua3g.command.current_time", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4914
14
        { &hf_ua3g_beep_beep_destination, { "Destination", "ua3g.command.beep.destination", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4915
14
        { &hf_ua3g_beep_beep_destination_handset, { "Handset", "ua3g.command.beep.destination.handset", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
4916
14
        { &hf_ua3g_beep_beep_destination_headset, { "Headset", "ua3g.command.beep.destination.headset", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
4917
14
        { &hf_ua3g_beep_beep_destination_loudspeaker, { "Loudspeaker", "ua3g.command.beep.destination.loudspeaker", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
4918
14
        { &hf_ua3g_beep_beep_destination_announce_loudspeaker, { "Announce Loudspeaker", "ua3g.command.beep.destination.announce_loudspeaker", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
4919
14
        { &hf_ua3g_beep_beep_destination_handsfree, { "Handsfree", "ua3g.command.beep.destination.handsfree", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
4920
14
        { &hf_ua3g_beep_freq_sample, { "Freq sample", "ua3g.command.beep.note.freq_sample", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4921
14
        { &hf_ua3g_beep_level, { "Level", "ua3g.command.beep.note.level", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4922
14
        { &hf_ua3g_beep_duration, { "Duration", "ua3g.command.beep.note.duration", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4923
14
        { &hf_ua3g_device_configuration, { "Device Configuration", "ua3g.device_configuration", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4924
14
    };
4925
4926
14
    static int *ett[] =
4927
14
    {
4928
14
        &ett_ua3g,
4929
14
        &ett_ua3g_body,
4930
14
        &ett_ua3g_param,
4931
14
        &ett_ua3g_param_sub,
4932
14
        &ett_ua3g_option,
4933
14
        &ett_ua3g_beep_beep_destination,
4934
14
        &ett_ua3g_note,
4935
14
    };
4936
4937
14
    module_t *ua3g_module;
4938
4939
    /* UA3G dissector registration */
4940
14
    proto_ua3g = proto_register_protocol("UA3G Message", "UA3G", "ua3g");
4941
4942
    /* Register preferences */
4943
14
    ua3g_module = prefs_register_protocol(proto_ua3g, NULL);
4944
4945
14
    prefs_register_bool_preference(ua3g_module, "setup_conversations",
4946
14
        "Setup RTP/RTCP conversations on Start/Record RTP",
4947
14
        "Setup RTP/RTCP conversations when parsing Start/Record RTP messages",
4948
14
        &setup_conversations_enabled);
4949
4950
14
    proto_register_field_array(proto_ua3g, hf, array_length(hf));
4951
4952
14
    register_dissector("ua3g", dissect_ua3g, proto_ua3g);
4953
4954
    /* Common subtree array registration */
4955
14
    proto_register_subtree_array(ett, array_length(ett));
4956
14
}
4957
4958
void proto_reg_handoff_ua3g(void)
4959
14
{
4960
#if 0 /* Future */
4961
    dissector_handle_t handle_ua3g = find_dissector("ua3g");
4962
4963
    /* hooking of UA3G on UA */
4964
4965
    dissector_add_uint("ua.opcode", 0x15, handle_ua3g);
4966
#endif
4967
14
}
4968
4969
/*
4970
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
4971
 *
4972
 * Local variables:
4973
 * c-basic-offset: 4
4974
 * tab-width: 8
4975
 * indent-tabs-mode: nil
4976
 * End:
4977
 *
4978
 * vi: set shiftwidth=4 tabstop=8 expandtab:
4979
 * :indentSize=4:tabSize=8:noTabs=true:
4980
 */