aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-amr.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-amr.c')
-rw-r--r--epan/dissectors/packet-amr.c43
1 files changed, 27 insertions, 16 deletions
diff --git a/epan/dissectors/packet-amr.c b/epan/dissectors/packet-amr.c
index db48e94e6a..f9955d4382 100644
--- a/epan/dissectors/packet-amr.c
+++ b/epan/dissectors/packet-amr.c
@@ -89,9 +89,10 @@ static expert_field ei_amr_padding_bits_not0 = EI_INIT;
static expert_field ei_amr_padding_bits_correct = EI_INIT;
static expert_field ei_amr_reserved = EI_INIT;
-/* The dynamic payload type which will be dissected as AMR */
-
-static guint temp_dynamic_payload_type = 0;
+/* The dynamic payload types which will be dissected as AMR */
+#define AMR_DEFAULT_DYN_PT_RANGE "0"
+static range_t *global_amr_dynamic_payload_types;
+static range_t *global_amr_wb_dynamic_payload_types;
static gint amr_encoding_type = 0;
static gint pref_amr_mode = AMR_NB;
@@ -797,12 +798,17 @@ proto_register_amr(void)
amr_module = prefs_register_protocol(proto_amr, proto_reg_handoff_amr);
- prefs_register_uint_preference(amr_module, "dynamic.payload.type",
- "AMR dynamic payload type",
- "The dynamic payload type which will be interpreted as AMR"
- "; The value must be greater than 95",
- 10,
- &temp_dynamic_payload_type);
+ prefs_register_range_preference(amr_module, "dynamic.payload.type",
+ "AMR dynamic payload types",
+ "The dynamic payload types which will be interpreted as AMR"
+ "(default " AMR_DEFAULT_DYN_PT_RANGE ")",
+ &global_amr_dynamic_payload_types, 127);
+
+ prefs_register_range_preference(amr_module, "wb.dynamic.payload.type",
+ "AMR-WB dynamic payload types",
+ "The dynamic payload types which will be interpreted as AMR-WB"
+ "(default " AMR_DEFAULT_DYN_PT_RANGE ")",
+ &global_amr_wb_dynamic_payload_types, 127);
prefs_register_enum_preference(amr_module, "encoding.version",
"Type of AMR encoding of the payload",
@@ -828,8 +834,9 @@ proto_register_amr(void)
void
proto_reg_handoff_amr(void)
{
- static guint dynamic_payload_type;
- static gboolean amr_prefs_initialized = FALSE;
+ static range_t *amr_dynamic_payload_types;
+ static range_t *amr_wb_dynamic_payload_types;
+ static gboolean amr_prefs_initialized = FALSE;
if (!amr_prefs_initialized) {
dissector_handle_t amr_name_handle;
@@ -854,14 +861,18 @@ proto_reg_handoff_amr(void)
*/
amr_prefs_initialized = TRUE;
} else {
- if ( dynamic_payload_type > 95 )
- dissector_delete_uint("rtp.pt", dynamic_payload_type, amr_handle);
+ dissector_delete_uint_range("rtp.pt", amr_dynamic_payload_types, amr_handle);
+ dissector_delete_uint_range("rtp.pt", amr_wb_dynamic_payload_types, amr_wb_handle);
}
- dynamic_payload_type = temp_dynamic_payload_type;
+ amr_dynamic_payload_types = range_copy(wmem_epan_scope(), global_amr_dynamic_payload_types);
+ amr_wb_dynamic_payload_types = range_copy(wmem_epan_scope(), global_amr_wb_dynamic_payload_types);
- if ( dynamic_payload_type > 95 ) {
- dissector_add_uint("rtp.pt", dynamic_payload_type, amr_handle);
+ if(!value_is_in_range(amr_dynamic_payload_types, 0)){
+ dissector_add_uint_range("rtp.pt", amr_dynamic_payload_types, amr_handle);
+ }
+ if (!value_is_in_range(amr_wb_dynamic_payload_types, 0)) {
+ dissector_add_uint_range("rtp.pt", amr_wb_dynamic_payload_types, amr_wb_handle);
}
}