aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-tftp.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-tftp.c')
-rw-r--r--epan/dissectors/packet-tftp.c39
1 files changed, 13 insertions, 26 deletions
diff --git a/epan/dissectors/packet-tftp.c b/epan/dissectors/packet-tftp.c
index 2db40e701e..13ca3588a1 100644
--- a/epan/dissectors/packet-tftp.c
+++ b/epan/dissectors/packet-tftp.c
@@ -45,6 +45,7 @@
#include <epan/conversation.h>
#include <epan/expert.h>
#include <epan/prefs.h>
+#include <epan/prefs-int.h>
#include <epan/tap.h>
#include "packet-tftp.h"
@@ -602,6 +603,13 @@ dissect_tftp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
}
+static void
+apply_tftp_prefs(void) {
+ pref_t *tftp_ports = prefs_find_preference(prefs_find_module("tftp"), "udp.port");
+
+ global_tftp_port_range = range_copy(*tftp_ports->varp.range);
+}
+
void
proto_register_tftp(void)
{
@@ -665,27 +673,17 @@ proto_register_tftp(void)
{ &ei_tftp_blocksize_range, { "tftp.blocksize_range", PI_RESPONSE_CODE, PI_WARN, "TFTP blocksize out of range", EXPFILL }},
};
- module_t *tftp_module;
expert_module_t* expert_tftp;
- proto_tftp = proto_register_protocol("Trivial File Transfer Protocol",
- "TFTP", "tftp");
+ proto_tftp = proto_register_protocol("Trivial File Transfer Protocol", "TFTP", "tftp");
proto_register_field_array(proto_tftp, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_tftp = expert_register_protocol(proto_tftp);
expert_register_field_array(expert_tftp, ei, array_length(ei));
- register_dissector("tftp", dissect_tftp, proto_tftp);
+ tftp_handle = register_dissector("tftp", dissect_tftp, proto_tftp);
- /* Set default UDP ports */
- range_convert_str(&global_tftp_port_range, UDP_PORT_TFTP_RANGE, MAX_UDP_PORT);
-
- tftp_module = prefs_register_protocol(proto_tftp, proto_reg_handoff_tftp);
- prefs_register_range_preference(tftp_module, "udp_ports",
- "TFTP port numbers",
- "Port numbers used for TFTP traffic "
- "(default " UDP_PORT_TFTP_RANGE ")",
- &global_tftp_port_range, MAX_UDP_PORT);
+ prefs_register_protocol(proto_tftp, apply_tftp_prefs);
/* Register the tap for the "Export Object" function */
tftp_eo_tap = register_tap("tftp_eo"); /* TFTP Export Object tap */
@@ -694,20 +692,9 @@ proto_register_tftp(void)
void
proto_reg_handoff_tftp(void)
{
- static range_t *tftp_port_range;
- static gboolean tftp_initialized = FALSE;
-
- if (!tftp_initialized) {
- tftp_handle = find_dissector("tftp");
- heur_dissector_add("stun", dissect_embeddedtftp_heur, "TFTP over TURN", "tftp_stun", proto_tftp, HEURISTIC_ENABLE);
- tftp_initialized = TRUE;
- } else {
- dissector_delete_uint_range("udp.port", tftp_port_range, tftp_handle);
- g_free(tftp_port_range);
- }
+ heur_dissector_add("stun", dissect_embeddedtftp_heur, "TFTP over TURN", "tftp_stun", proto_tftp, HEURISTIC_ENABLE);
- tftp_port_range = range_copy(global_tftp_port_range);
- dissector_add_uint_range("udp.port", tftp_port_range, tftp_handle);
+ dissector_add_uint_range_with_preference("udp.port", UDP_PORT_TFTP_RANGE, tftp_handle);
}
/*