On Jul 14, 2009, at 10:59 AM, arno wrote:

> The problem is that many parts of the protocol do not always consist  
> of
> the same amount of bytes. Therefore the bytes have to be decoded that
> way (java code):
> int decode(bytestream stream){
>    int b = stream.readByte();
>    int t = b;
>    while(b > 127){
>       b = stream.readByte();
>       t  = (t << 7)) | b;
>    }
>    return t;
> }

Sure looks similar to ASN.1 BER's encoding of integral values....  (If  
it *is* ASN.1-based, look at using asn2wrs.  ASN.1 BER probably isn't  
the only protocol encoding scheme that does variable-length numbers  
that way, however.)

> Do get the right value is not the problem, but to register the header
> field and to make it filterable. When I try to register it with the
> array hf_register_info I have to specify a data type like FT_UINT8.  
> But
> setting up the header fields with the right amount of bytes of tvb  
> when
> dissecting the packet results in a wrong value, because the bytes have
> to be encoded in the way I`ve mentioned it.
> Is there a possibility to register a header field with e.t. FT_UINT32
> and changing the value afterwards?

No.  The field type is common to all instances of the field; it's not  
per-instance.

*However*, it's not as if every field of type FT_UINTn *has* to take  
exactly n/8 bytes; you could, for example, have an FT_UINT32 field and  
put into it a value that's stored in fewer than 4 bytes.  (That's how  
ASN.1 BER-encoded protocols handle this.)

> Or is it possible to filter header fields that are added with  
> proto_tree_add_text

No.

> or add_value?

If by "add_value" you mean, for example, "add_uint" - e.g.,  
proto_tree_add_uint - the answer is "yes".  You don't *have* to use  
proto_tree_add_item to have a filterable field.

> Another way
> could be to get the specified bytes of tvb, to encode it the right way
> and then wright it back to tvb, but i did not found a possibility to  
> do
> that.

There is no such possibility; tvbuffs are, by intent and design, read- 
only.

> I would be very glad to hear any suggestions.

Making the field FT_UINT32 - or FT_UINT64 if it's likely to have  
values > 2^32-1, or FT_INT32 if it's signed, or FT_INT64 if it's  
signed and likely to have values > 2^31-1 or < -2^31 - and using  
proto_tree_add_uint() after fetching the value is probably the best  
idea.

For better or worse, we don't have a FT_INT and FT_UINT (with no "n")  
that can handle arbitrary-size integral values, which, at least in  
theory, could be required by protocols using at least some ASN.1  
encodings, as well as by your encoding.
___________________________________________________________________________
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