Ethereal-dev: Re: [Ethereal-dev] VJ compressed PPP packets ??
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Guy Harris <guy@xxxxxxxxxx>
Date: Tue, 27 Feb 2001 10:59:46 -0800 (PST)
> The byte view window is changed to a gtk_notebook and the individual
> hex dump windows are tabbed entries in the notebook. The dissector
> that needs to create a second (third,fourth,..) view will call a function
> add_byte_tab with the tab label, data pointer, and data length.
Hmm.
Are the byte views always associated with a "top-level" tvbuff holding the
data?
If so, you might want to add a "const char *name" field to "struct
tvbuff", and make "tvb_new_real_data()", "tvb_set_real_data()", and
"tvb_new_composite()" take an additional "const char *name" argument, to
set the name of the tvbuff; subset tvbuffs would inherit the name from
the parent tvbuff.
The name would be what shows in the tab for the data in that tvbuff.
> This
> function will return an index number for the new byte view. This permits
> the dissector to create a new hex display window and set the data to
> be displayed in the window.
Well, actually, dissectors can't create windows or do any other UI stuff
- the GUI code would be what did that.
> The dissector is responsible for management
> of the secondary data array. It can NOT be a local variable.
The same would, of course, apply to the data array a dissector attaches
to a new "real" or "composite" tvbuff that it creates.
> A byte view variable is added to the field_info structure so the correct
> hex display window is selected when the protocol display tree item is
> selected.
It could, in the scheme I describe above, be a "tvbuff_t *".
"alloc_field_info()" would set that field for you - the dissector
wouldn't even have to know about it, and neither would most of the
routines in "epan/proto.c" ("alloc_field_info()" already takes a
"tvbuff_t *" argument).
> Dirty details -
>
> 1) The field_info structure changed to add a bv_num. This is an integer
> that is used to select which hex window tab to use.
Or, in the scheme described above, a "tvbuff_t *".
We might want a tvbuff routine to find the "top-level" tvbuff of a given
tvbuff:
if the tvbuff is a real or composite tvbuff, that tvbuff is the
top-level tvbuff;
otherwise, it's a subset tvbuff, and the top-level tvbuff of
that tvbuff is the top-level tvbuff of the tvbuff of which it's
a subset;
so that, in order to determine which hex window to use for a given
field, you find the top-level tvbuff for the tvbuff referred to by the
"field_info" structure, and look for the hex window for that tvbuff.
> 2) Static integer current_bv_num added to epan/proto.c. There are two
> routines set_bv_num and get_bv_num used to access this value.
>
> current_bv_num is reset to zero in the epan_dissect_new routine.
Not needed, as far as I can tell, in the scheme I describe above.
> 3) The proto_tree_add_item modified to set the new_fi->bv_num to the
> current_bv_num value.
Again, not needed.
> 4) The create_byte_view routine modified to create a notebook and
> the first tabbed window. The tabs are not displayed at this point.
Same in my scheme.
> 5) A add_byte_view routine added to gtk/proto_draw.c. This routine
> will create an additional tabbed window in the byte view notebook
> and return the index for this window. In addition the routine
> will store the data pointer and data length in the new tab window
> object. These are used during the packet_hex_print calls.
We might want some scheme here to enumerate all the top-level tvbuffs
currently in existence, or all the top-level tvbuffs used in the
dissection of the current frame; the GUI code would generate a notebook
tab for each of those tvbuffs.
> 6) The packet_hex_print routine is modified to accept a data length
> value. This is used in place of fd->cap_len in the current routine.
Same in my scheme.
> 7) The tree_view_select_row_cb (gtk/main.c) is changed to select the
> correct byte view table before calling the packet_hex_print.
Same in my scheme.
> 8) The packet_unselect_list_cb will destroy the secondary byte views.
> Still working on this...
The notebook tabs would be destroyed; the tvbuffs would be freed by
"epan_dissect_free()", which is called by "unselect_packet()".
You might want to destroy *all* the notebook tabs, so that if there
isn't any packet selected, there aren't any tabs in the notebook, to
indicate that there's no data. (This presumes that a notebook widget
behaves sanely when no tabs exist....)
>
> The "packet window" code, will have to perform steps 7 and 8, still
> working on this...
> ToDo -
>
> 1) How will this affect tethereal? How will we display the extra byte
> view data?
>
> I think it can be modified to display the "tab label" and generate
> the hex dump for each byte view.
Yes, that's what it should do.
> 2) How will this affect printing in ethereal?
"Printing in Ethereal" is similar to "running Tethereal without the '-w'
flag", so it'd work the same way.
- Follow-Ups:
- Re: [Ethereal-dev] VJ compressed PPP packets ??
- From: Guy Harris
- Re: [Ethereal-dev] VJ compressed PPP packets ??
- References:
- RE: [Ethereal-dev] VJ compressed PPP packets ??
- From: Jeff Foster
- RE: [Ethereal-dev] VJ compressed PPP packets ??
- Prev by Date: Re: [Ethereal-dev] Static -vs- Dynamic configuration
- Next by Date: Re: [Ethereal-dev] Dissector for rquota (RPC)
- Previous by thread: RE: [Ethereal-dev] VJ compressed PPP packets ??
- Next by thread: Re: [Ethereal-dev] VJ compressed PPP packets ??
- Index(es):





