diff options
author | Michael Mann <mmann78@netscape.net> | 2013-11-02 02:12:36 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2013-11-02 02:12:36 +0000 |
commit | 8dc0db8d7249ad228c45266606ace53333746c2f (patch) | |
tree | 78c9a321e5fd5392fc1695f848b9796d7d95b249 /epan/dissectors/packet-json.c | |
parent | ac09e775c9f1fee7075fc6af25b995fa0818db14 (diff) | |
download | wireshark-8dc0db8d7249ad228c45266606ace53333746c2f.tar.gz wireshark-8dc0db8d7249ad228c45266606ace53333746c2f.tar.bz2 wireshark-8dc0db8d7249ad228c45266606ace53333746c2f.zip |
Allow json dissector to receive a string through dissector data and give dissector data priority over pinfo->private_data (to discourage it's use)
svn path=/trunk/; revision=53042
Diffstat (limited to 'epan/dissectors/packet-json.c')
-rw-r--r-- | epan/dissectors/packet-json.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/epan/dissectors/packet-json.c b/epan/dissectors/packet-json.c index 00882d529a..4355e002d6 100644 --- a/epan/dissectors/packet-json.c +++ b/epan/dissectors/packet-json.c @@ -101,8 +101,8 @@ typedef struct { } json_parser_data_t; -static void -dissect_json(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +static int +dissect_json(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data) { proto_tree *json_tree = NULL; proto_item *ti = NULL; @@ -114,16 +114,22 @@ dissect_json(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) int offset; data_name = pinfo->match_string; - if (!(data_name && data_name[0])) { + if (! (data_name && data_name[0])) { /* * No information from "match_string" */ - data_name = (char *)(pinfo->private_data); - if (!(data_name && data_name[0])) { + data_name = (char *)data; + if (! (data_name && data_name[0])) { /* - * No information from "private_data" + * No information from dissector data */ - data_name = NULL; + data_name = (char *)(pinfo->private_data); + if (! (data_name && data_name[0])) { + /* + * No information from "private_data" + */ + data_name = NULL; + } } } @@ -164,6 +170,8 @@ dissect_json(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } else if (data_name) { col_append_sep_fstr(pinfo->cinfo, COL_INFO, " ", "(%s)", data_name); } + + return tvb_length(tvb); } static void before_object(void *tvbparse_data, const void *wanted_data _U_, tvbparse_elem_t *tok) { @@ -578,7 +586,7 @@ proto_register_json(void) { proto_register_fields(proto_json, hfi, array_length(hfi)); proto_register_subtree_array(ett, array_length(ett)); - register_dissector("json", dissect_json, proto_json); + new_register_dissector("json", dissect_json, proto_json); init_json_parser(); } |