From: Frank Singleton [mailto:frank.singleton@xxxxxxxxxxxx]
Sent: Friday, March 30, 2001 3:36 PM
> Anyway, I want to create a new tvbuff from this octet stream,
> so I can leverage my existing get_CDR_xxx(tvbuff * ..)
> routines to pull it to pieces, and process parts of the IOR.
>
> I would appreciate some input on how a subdissector can
> create tvbuff properly, and dispose of it when required, and
> what overhead that creates in ethereal.
If I read this right and you are decoding the data to create a
new data set. You should check the code in packet-wcp.c. In
the wcp_uncompress routine, around line 858, it goes something
like this -
TRY { /* create the new tvbuffer with your data */
tvb = tvb_new_real_data( data, len, len, "DataName");
}
CATCH(BoundsError) {
g_assert_not_reached();
g_free(buf);
return NULL;
}
CATCH(ReportedBoundsError) {
g_free(buf);
return NULL;
}
ENDTRY;
/* Link the new tvbuffer to old tvbuffer, so cleanup works */
tvb_set_child_real_data_tvbuff( src_tvb, tvb);
/* Add new data to the data source list */
pinfo->fd->data_src = g_slist_append( pinfo->fd->data_src, tvb);
This assumes that you do the real data buffer cleanup yourself.
It you want the tvbuffer to handle cleanup of your data buffer, you
should call the tvb_set_free_cb fucntion to add a cleanup callback
routine.
Jeff Foster
jfoste@xxxxxxxxxxxx