Wireshark-dev: Re: [Wireshark-dev] Getting data extracted by my dissector into another

From: Chris Maynard <Chris.Maynard@xxxxxxxxx>
Date: Wed, 6 Jul 2011 19:30:24 +0000 (UTC)
Colin Helliwell <colin.helliwell@...> writes:

> I’ve developed a number of dissectors which dissect payload from those below
and decode their own protocol. Now I want to pass my payload ‘ownward’ to
another (the JSON dissector). I’d appreciate any tips on how to
initialise/register my protocol such that the JSON dissector sees it and/or how
to pass the payload on to it. A summary of the calls used would probably do –
enough to get me going in the right direction.

You may want to make use of find_dissector() and call_dissector().  ie.,
something like:

static dissector_handle_t json_handle;

static void
dissect_yourproto(...)
{
    tvbuff_t *next_tvb;

    ...

    /* All done processing your stuff, so hand off dissection to json,
     * (assuming you know the payload is for the json dissector) */
    next_tvb = tvb_new_subset(tvb, offset, length, length);
    /* ... or next_tvb = tvb_new_subset_remaining( ... ); */
    call_dissector(json_handle, next_tvb, pinfo, some_tree);
}

void
proto_reg_handoff_yourproto(void)
{
    json_handle = find_dissector("json");
}