Ethereal-dev: [Ethereal-dev] Patches for GIOP Dissection
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: frodo.hobbit@xxxxxxx
Date: Sun, 17 Aug 2003 14:56:38 +0200 (MEST)
I would like to suggest a couple of changes for GIOP-Dissection: The patches below provide support for dissection of 64-Bit Values "long long" and "unsigned long long" in GIOP protocols. I hope, I didn't make a complete mess with diff (Windows-User:-) - If you need complete files, just send me an e-mail. I tested some of the changes with Windows 2000 and "unsigned long long", so both loading the plugins and disssection should work fine. I didn't test little endian support in GIOP nor "long long". If there are platforms which do not support G_HAVE_GINT64 then all my changes need to be encapsulated with #ifdef G_HAVE_GINT64! Is there still such a platform supported? BTW: I've tested the recent modification regarding giop_register_user_module: explicit dissection now works fine for the Windows platform. Though for automatic generation of explicit dissectors from IDL with idl2eth, idl2eth resp. the scripts need to be modified as they do not support explicit dissection. Kind regards, Jens Nissen ~ Frodo Changes in the Directory plugins: Index: plugin_api_list.c =================================================================== RCS file: /cvsroot/ethereal/plugins/plugin_api_list.c,v retrieving revision 1.5 diff -r1.5 plugin_api_list.c 4c4 < * $Id: plugin_api_list.c,v 1.5 2003/08/16 00:38:13 guy Exp $ --- > * $Id: plugin_api_list.c,v 1.4 2003/08/06 18:16:21 guy Exp $ 349c349 < void new_register_dissector(const char *, new_dissector_t, int); --- > void new_register_dissector(const char *, new_dissector_t, int); 352a353,357 > > guint64 tvb_get_letoh64 (tvbuff_t *, gint); > guint64 tvb_get_ntoh64 (tvbuff_t *, gint); > guint64 get_CDR_ulong_long (tvbuff_t *, int *, gboolean, int ); > gint64 get_CDR_long_long (tvbuff_t *, int *, gboolean, int ); Index: Xepan_plugins.c =================================================================== RCS file: /cvsroot/ethereal/plugins/Xepan_plugins.c,v retrieving revision 1.4 diff -r1.4 Xepan_plugins.c 216a217,220 > patable.p_tvb_get_letoh64 = tvb_get_letoh64; > patable.p_tvb_get_ntoh64 = tvb_get_ntoh64; > patable.p_get_CDR_ulong_long = get_CDR_ulong_long; > patable.p_get_CDR_long_long = get_CDR_long_long; Index: Xplugin_api.c =================================================================== RCS file: /cvsroot/ethereal/plugins/Xplugin_api.c,v retrieving revision 1.4 diff -r1.4 Xplugin_api.c 216a217,220 > p_tvb_get_letoh64 = pat->p_tvb_get_letoh64; > p_tvb_get_ntoh64 = pat->p_tvb_get_ntoh64; > p_get_CDR_ulong_long = pat->p_get_CDR_ulong_long; > p_get_CDR_long_long = pat->p_get_CDR_long_long; Index: Xplugin_api.h =================================================================== RCS file: /cvsroot/ethereal/plugins/Xplugin_api.h,v retrieving revision 1.4 diff -r1.4 Xplugin_api.h 216a217,220 > #define tvb_get_letoh64 (*p_tvb_get_letoh64) > #define tvb_get_ntoh64 (*p_tvb_get_ntoh64) > #define get_CDR_ulong_long (*p_get_CDR_ulong_long) > #define get_CDR_long_long (*p_get_CDR_long_long) Index: Xplugin_api_decls.h =================================================================== RCS file: /cvsroot/ethereal/plugins/Xplugin_api_decls.h,v retrieving revision 1.4 diff -r1.4 Xplugin_api_decls.h 216a217,220 > addr_tvb_get_letoh64 p_tvb_get_letoh64; > addr_tvb_get_ntoh64 p_tvb_get_ntoh64; > addr_get_CDR_ulong_long p_get_CDR_ulong_long; > addr_get_CDR_long_long p_get_CDR_long_long; Index: Xplugin_table.h =================================================================== RCS file: /cvsroot/ethereal/plugins/Xplugin_table.h,v retrieving revision 1.4 diff -r1.4 Xplugin_table.h 216a217,220 > typedef guint64 (*addr_tvb_get_letoh64) (tvbuff_t *, gint); > typedef guint64 (*addr_tvb_get_ntoh64) (tvbuff_t *, gint); > typedef guint64 (*addr_get_CDR_ulong_long) (tvbuff_t *, int *, gboolean, int); > typedef gint64 (*addr_get_CDR_long_long) (tvbuff_t *, int *, gboolean, int); And another set of changes in the root directory: Index: packet-giop.c =================================================================== RCS file: /cvsroot/ethereal/packet-giop.c,v retrieving revision 1.72 diff -r1.72 packet-giop.c 2570a2571,2578 > /* Copy a 8 octet sequence from the tvbuff > * which represents an unsigned long long value, and convert > * it to an unsigned long long value, taking into account byte order. > * offset is first incremented so that it falls on a proper alignment > * boundary for unsigned long long values. > * offset is then incremented by 8, to indicate the 8 octets which > * have been processed. > */ 2571a2580,2617 > guint64 get_CDR_ulong_long(tvbuff_t *tvb, int *offset, gboolean stream_is_big_endian, int boundary) { > > guint64 val; > > /* unsigned long values must be aligned on a 8 byte boundary */ > while( ( (*offset + boundary) % 8) != 0) > ++(*offset); > > val = (stream_is_big_endian) ? tvb_get_ntoh64 (tvb, *offset) : > tvb_get_letoh64 (tvb, *offset); > > *offset += 8; > return val; > } > > /* Copy a 8 octet sequence from the tvbuff > * which represents a long long value, and convert > * it to a long long value, taking into account byte order. > * offset is first incremented so that it falls on a proper alignment > * boundary for long long values. > * offset is then incremented by 8, to indicate the 8 octets which > * have been processed. > */ > > gint64 get_CDR_long_long(tvbuff_t *tvb, int *offset, gboolean stream_is_big_endian, int boundary) { > > gint64 val; > > /* unsigned long values must be aligned on a 8 byte boundary */ > while( ( (*offset + boundary) % 8) != 0) > ++(*offset); > > val = (stream_is_big_endian) ? tvb_get_ntoh64 (tvb, *offset) : > tvb_get_letoh64 (tvb, *offset); > > *offset += 8; > return val; > } Index: packet-giop.h =================================================================== RCS file: /cvsroot/ethereal/packet-giop.h,v retrieving revision 1.10 diff -r1.10 packet-giop.h 336d335 < #ifdef G_HAVE_GINT64 339d337 < #endif 438d435 < #ifdef G_HAVE_GINT64 441d437 < #endif And finally a set of changes in the epan directory: Index: pint.h =================================================================== RCS file: /cvsroot/ethereal/epan/pint.h,v retrieving revision 1.8 diff -r1.8 pint.h 49a50,58 > #define pntoh64(p) ((guint64)*((const guint8 *)(p)+0)<<56| \ > (guint64)*((const guint8 *)(p)+1)<<48| \ > (guint64)*((const guint8 *)(p)+2)<<40| \ > (guint64)*((const guint8 *)(p)+3)<<32| \ > (guint64)*((const guint8 *)(p)+4)<<24| \ > (guint64)*((const guint8 *)(p)+5)<<16| \ > (guint64)*((const guint8 *)(p)+6)<<8| \ > (guint64)*((const guint8 *)(p)+7)<<0) > 63a73,81 > > #define pletoh64(p) ((guint64)*((const guint8 *)(p)+7)<<56| \ > (guint64)*((const guint8 *)(p)+6)<<48| \ > (guint64)*((const guint8 *)(p)+5)<<40| \ > (guint64)*((const guint8 *)(p)+4)<<32| \ > (guint64)*((const guint8 *)(p)+3)<<24| \ > (guint64)*((const guint8 *)(p)+2)<<16| \ > (guint64)*((const guint8 *)(p)+1)<<8| \ > (guint64)*((const guint8 *)(p)+0)<<0) Index: tvbuff.c =================================================================== RCS file: /cvsroot/ethereal/epan/tvbuff.c,v retrieving revision 1.48 diff -r1.48 tvbuff.c 1095a1096,1104 > guint64 > tvb_get_ntoh64(tvbuff_t *tvb, gint offset) > { > guint8* ptr; > > ptr = ensure_contiguous(tvb, offset, sizeof(guint64)); > return pntoh64(ptr); > } > 1323a1333,1341 > } > > guint64 > tvb_get_letoh64(tvbuff_t *tvb, gint offset) > { > guint8* ptr; > > ptr = ensure_contiguous(tvb, offset, sizeof(guint64)); > return pletoh64(ptr); Index: tvbuff.h =================================================================== RCS file: /cvsroot/ethereal/epan/tvbuff.h,v retrieving revision 1.33 diff -r1.33 tvbuff.h 236a237 > extern guint64 tvb_get_ntoh64(tvbuff_t*, gint offset); 242a244 > extern guint64 tvb_get_letoh64(tvbuff_t*, gint offset); -- COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test -------------------------------------------------- 1. GMX TopMail - Platz 1 und Testsieger! 2. GMX ProMail - Platz 2 und Preis-Qualit�tssieger! 3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post
- Follow-Ups:
- Re: [Ethereal-dev] Patches for GIOP Dissection
- From: Frank Singleton
- Re: [Ethereal-dev] Patches for GIOP Dissection
- References:
- Re: [Ethereal-dev] ISUP patch
- From: Guy Harris
- Re: [Ethereal-dev] ISUP patch
- Prev by Date: Re: [Ethereal-dev] RT-Net plugin bug fix
- Next by Date: [Ethereal-dev] Calling FreeBSD, NetBSD and OpenBSD users of Ethereal ...
- Previous by thread: Re: [Ethereal-dev] ISUP patch
- Next by thread: Re: [Ethereal-dev] Patches for GIOP Dissection
- Index(es):