diff options
Diffstat (limited to 'epan/dissectors/packet-amr.c')
-rw-r--r-- | epan/dissectors/packet-amr.c | 43 |
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); } } |