kfor...@nhhancocks.net wrote:
> I think I'm missing something pretty basic on dissectors around reusing 
> subsets of a protocol vs. the need to enumerate everything in the hf[] 
> array.
[...]
> and I'd just parse through field-by-field, however this gets incredibly 
> unwieldy as the number of messages and reuse of structures increases. 
> What I want to do:
> 
> proto_tree_add_item(hf_foo_type, ..);
> switch (message)
> {
>  case init:
>    proto_tree_add_item(hf_foo_init_count, ...);
>    foo_add_payload(...);
>    break;
>  case send:
>    proto_tree_add_item(hf_foo_send_index, ...);
>    foo_add_payload(...);
>    break;   }
> 
> When I want to filter messages for a specific payload length, I'd want 
> to be able to search for foo.init.payload.length or 
> foo.send.payload.length -- but I'm not sure how the payload.length gets 
> added to the parent tree.

Well, if you want 2 different filters ("foo.init.payload.length" and 
"foo.send.payload.length") then you'll need 2 hf_ entries.  How you do 
that is up to you; following the above code you could pass the message 
type down to foo_add_payload() and switch on the message type again or 
else pass in the hf_ entry(ies) to be used in add_payload, e.g.:

   case send:
        proto_tree_add_item(hf_foo_send_index, ...);
        foo_add_payload(hf_foo_send_payload_length, ...);

That gets unwieldy too, of course.

In my experience a better approach is to leave the user in control: if 
they want to filter on payload length then they use 
"foo.payload.length".  If they want to only filter on "send" payload 
lengths then they do "foo.type==send && foo.payload.length==<whatever>".
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe

Reply via email to