Ethereal-dev: Re: [Ethereal-dev] 2 design issues
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Guy Harris <guy@xxxxxxxxxxxx>
Date: Thu, 21 Aug 2003 16:42:15 -0700
On Thursday, August 21, 2003, at 1:23 PM, Matthijs Melchior wrote:
One problem is with the fact that 'proto_tree_add_string_format' has only 1 length parameter. In the world of ASN.1 [or any TLV message], there are 2 lengths involved, one to indicate the length on the pdu that is to be marked in the hex display and one to indicate the length of the value that is to be used in the matching process [currently the ethereal infrastructure does not know about TLV, only about values handed to it by the dissector routines]. I already can see two solutins. - Add a new set of functions, 'proto_tree_add_string_format2' etc, that have an extra length parameter. - Use the fact that the length will always be smaller than 65k, and use the upper 16 bit of the current lenght parameter for this new length parameter. [if that is 0, than it will use the same lenght for both].
Third solution:- Supply to "proto_tree_add_string_format()" as the length the length in the PDU to mark in the hex display, and supply to it as the value to be used in the matching process the string you extracted. "proto_tree_add_item()" uses the length argument to extract a value from the tvbuff to attach to the protocol tree item for use in filtering; most of the other "proto_tree_add_" routines don't.
Note, though, that for many TLV-based protocols, the T and the L are put into the protocol tree along with the V.
The ASN.1 BER-based protocols currently don't put into the protocol tree items for the ASN.1 overhead (type codes, lengths, etc.), but there should perhaps be a preference item to allow the user to request that all the ASN.1 encoding stuff be dissected.
The other problem is more involved, it may touch ground rules of ethereal design. My ASN.1 dissector has the possibility to read a new type tableusing the preferences dialogue. At that point in time, field names arederived from the spec at hand and registered using 'proto_register_field_array',one at a time, however, in malloced memmory that is not freed.This works OK, they become visible in the "Display Filter:Add Expression"dialogue.
...but not in the man page, unfortunately.Of course, if you are building from source with plugins, their fields don't necessarily show up in the man page, either, as the plugins might not have been installed in the directory in which the Ethereal or Tethereal binary built from source will be looking for them. The man page is Rather Large at this point, and it might or might not be useful to enumerate all the fields in it.
However, the parser rejects the expression because nether ofthe operands is a field..... Tracking this down, I have found 'proto-init()'in epan/proto.c which assumes all registration is finished after 'register_all_plugin_handoffs()' is called.... and then builds a tree of all field names.But with my dissector this registraton happens when the user preferences are read..., or later when a user wants to use another ASN.1 description.So..., my fiels did not end up in the big tree of names. How to solve this....? - Call 'proto_init' in the preferences apply routine...
"proto_init()" does a lot more than just build the header-field symbol table, so that's probably not a good idea.
- Copy the whole last part of 'proto_init' to 'proto_register_field_array'...
"Inheritance by cut and paste" has its problems. If you replace "copy" with "move", it'd be better; as long as you create "gpa_name_tree" before any fields are registered, that should work.
- References:
- [Ethereal-dev] 2 design issues
- From: Matthijs Melchior
- [Ethereal-dev] 2 design issues
- Prev by Date: Re: [Ethereal-dev] Problem with TCP reassembly
- Next by Date: [Ethereal-dev] Please rename
- Previous by thread: [Ethereal-dev] 2 design issues
- Next by thread: [Ethereal-dev] Please rename
- Index(es):