Wireshark-dev: [Wireshark-dev] Problem with proto_tree_add_item
From: Gerhard Gappmeier <gerhard.gappmeier@xxxxxxxxxxx>
Date: Thu, 01 Feb 2007 16:33:34 +0100
Hello,

I'm writing a dissector for a complex binary protocol that uses a lot of nested structures, that are serialized on the wire.
All complex types are built on top of some basic simple types.
I'm generating the complex type parsers with a self written code generator
and only write the parsers for the simple types by hand.
E.g. the Boolean DataType is used in many complex types.

static hf_register_info hf[] =
{
    { &hf_opcua_boolean,
    {  "Boolean",                "",                   FT_BOOLEAN, BASE_DEC, NULL,    0x0,     "",    HFILL }
    },
...
}

/* Simple Type Boolean */
void parseBoolean(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
{
    proto_tree_add_item(tree, hf_opcua_boolean, tvb, *pOffset, 1, TRUE); *pOffset+=1;
}

/* Complex Type Reference Description */
void parseReferenceDescription(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
{
  proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, szFieldName);
  proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReferenceDescription);

  parseNodeId(subtree, tvb, pOffset, "ReferenceTypeId");
  parseBoolean(subtree, tvb, pOffset, "IsForward");
  parseUInt32(subtree, tvb, pOffset, "ServerIndex");
  parseExpandedNodeId(subtree, tvb, pOffset, "NodeId");
  parseQualifiedName(subtree, tvb, pOffset, "BrowseName");
  parseLocalizedText(subtree, tvb, pOffset, "DisplayName");
  parseInt32(subtree, tvb, pOffset, "NodeClass");
  parseExpandedNodeId(subtree, tvb, pOffset, "TypeDefinition");
}

The problem is, that I want to output the field name, and not the type of a field.
Is there a way to do that with hf_register_info?
The only solution I see is to use proto_tree_add_text instead and don't use hf_register_info
and format the data myself.
But than there is no relation between the protocol tree and the raw data window anymore.

Any ideas?

regards,
Gerhard.