From d0b97c7d7f4ef5fd35c566a79f20afff08aabcd6 Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 7 Aug 2000 03:21:25 +0000 Subject: Allow either old-style (pre-tvbuff) or new-style (tvbuffified) dissectors to be registered as dissectors for particular ports, registered as heuristic dissectors, and registered as dissectors for conversations, and have routines to be used both by old-style and new-style dissectors to call registered dissectors. Have the code that calls those dissectors translate the arguments as necessary. (For conversation dissectors, replace "find_conversation_dissector()", which just returns a pointer to the dissector, with "old_try_conversation_dissector()" and "try_conversation_dissector()", which actually call the dissector, so that there's a single place at which we can do that translation. Also make "dissector_lookup()" static and, instead of calling it and, if it returns a non-null pointer, calling that dissector, just use "old_dissector_try_port()" or "dissector_try_port()", for the same reason.) This allows some dissectors that took old-style arguments and immediately translated them to new-style arguments to just take new-style arguments; make them do so. It also allows some new-style dissectors not to have to translate arguments before calling routines to look up and call dissectors; make them not do so. Get rid of checks for too-short frames in new-style dissectors - the tvbuff code does those checks for you. Give the routines to register old-style dissectors, and to call dissectors from old-style dissectors, names beginning with "old_", with the routines for new-style dissectors not having the "old_". Update the dissectors that use those routines appropriately. Rename "dissect_data()" to "old_dissect_data()", and "dissect_data_tvb()" to "dissect_data()". git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@2218 f5534014-38df-0310-8fa8-9805f1628bb7 --- packet-ipx.c | 67 ++++++++++++------------------------------------------------ 1 file changed, 13 insertions(+), 54 deletions(-) (limited to 'packet-ipx.c') diff --git a/packet-ipx.c b/packet-ipx.c index c45c8ab013..f28ce4aeb8 100644 --- a/packet-ipx.c +++ b/packet-ipx.c @@ -2,7 +2,7 @@ * Routines for NetWare's IPX * Gilbert Ramirez * - * $Id: packet-ipx.c,v 1.62 2000/06/15 03:48:40 gram Exp $ + * $Id: packet-ipx.c,v 1.63 2000/08/07 03:20:42 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -102,16 +102,16 @@ static int hf_msg_conn = -1; static int hf_msg_sigchar = -1; static void -dissect_spx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree); +dissect_spx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); static void -dissect_ipxrip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree); +dissect_ipxrip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); static void -dissect_ipxsap(const u_char *pd, int offset, frame_data *fd, proto_tree *tree); +dissect_ipxsap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); static void -dissect_ipxmsg(const u_char *pd, int offset, frame_data *fd, proto_tree *tree); +dissect_ipxmsg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); #define UDP_PORT_IPX 213 /* RFC 1234 */ @@ -270,17 +270,9 @@ capture_ipx(const u_char *pd, int offset, packet_counts *ld) ld->ipx++; } -#if 0 void dissect_ipx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { -#else -void -dissect_ipx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) -{ - packet_info *pinfo = π - tvbuff_t *tvb = tvb_create_from_top(offset); -#endif tvbuff_t *next_tvb; const guint8 *this_pd; int this_offset, len; @@ -368,8 +360,8 @@ dissect_ipx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) tvb_compat(next_tvb, &next_pd, &next_offset); - if (dissector_try_port(ipx_type_dissector_table, ipx_type, next_pd, - next_offset, pinfo->fd, tree)) + if (dissector_try_port(ipx_type_dissector_table, ipx_type, next_tvb, + pinfo, tree)) return; switch (ipx_type) { @@ -387,13 +379,13 @@ dissect_ipx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) break; } - if (dissector_try_port(ipx_socket_dissector_table, ipx_dsocket, next_pd, - next_offset, pinfo->fd, tree)) + if (dissector_try_port(ipx_socket_dissector_table, ipx_dsocket, + next_tvb, pinfo, tree)) return; - if (dissector_try_port(ipx_socket_dissector_table, ipx_ssocket, next_pd, - next_offset, pinfo->fd, tree)) + if (dissector_try_port(ipx_socket_dissector_table, ipx_ssocket, + next_tvb, pinfo, tree)) return; - dissect_data_tvb(next_tvb, pinfo, tree); + dissect_data(next_tvb, pinfo, tree); } @@ -438,17 +430,9 @@ spx_datastream(guint8 type) #define SPX_HEADER_LEN 12 -#if 0 static void dissect_spx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { -#else -static void -dissect_spx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) -{ - packet_info *pinfo = π - tvbuff_t *tvb = tvb_create_from_top(offset); -#endif proto_tree *spx_tree; proto_item *ti; tvbuff_t *next_tvb; @@ -485,24 +469,16 @@ dissect_spx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) proto_tree_add_item(spx_tree, hf_spx_all_nr, tvb, 10, 2, FALSE); next_tvb = tvb_new_subset(tvb, SPX_HEADER_LEN, -1, -1); - dissect_data_tvb(next_tvb, pinfo, tree); + dissect_data(next_tvb, pinfo, tree); } } /* ================================================================= */ /* IPX Message */ /* ================================================================= */ -#if 0 static void dissect_ipxmsg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { -#else -static void -dissect_ipxmsg(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) -{ - packet_info *pinfo = π - tvbuff_t *tvb = tvb_create_from_top(offset); -#endif proto_tree *msg_tree; proto_item *ti; guint8 conn_number, sig_char; @@ -534,17 +510,9 @@ dissect_ipxmsg(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) /* ================================================================= */ /* IPX RIP */ /* ================================================================= */ -#if 0 static void dissect_ipxrip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { -#else -static void -dissect_ipxrip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) -{ - packet_info *pinfo = π - tvbuff_t *tvb = tvb_create_from_top(offset); -#endif proto_tree *rip_tree; proto_item *ti; guint16 operation; @@ -688,18 +656,9 @@ server_type(guint16 type) } } -#if 0 static void dissect_ipxsap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { -#else -static void -dissect_ipxsap(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) -{ - packet_info *pinfo = π - tvbuff_t *tvb = tvb_create_from_top(offset); -#endif - proto_tree *sap_tree, *s_tree; proto_item *ti; int cursor; -- cgit v1.2.3