aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2002-05-05 00:16:38 +0000
committerGuy Harris <guy@alum.mit.edu>2002-05-05 00:16:38 +0000
commiteb70c97a9bd9f362a3e2f888dd082c5b9b4b9516 (patch)
treee3b201865b9c3108cf90f7953b3c85c4dad0066e /plugins
parent82e11eb8eef35974a5c07658009561390720bfad (diff)
Make a "tcp_dissect_pdus()" with the standard loop for a TCP segment,
extracting PDUs from it and possibly doing reassembly. Make the COPS, DNS, DSI, Gryphon, and SCCP dissectors use it. Add "set_actual_length()", "tcp_dissect_pdus()", "decode_boolean_bitfield()", "decode_numeric_bitfield()", and "decode_enumerated_bitfield()" to the list of routines available to dissectors on platforms where routines in the main program aren't available to dynamically-loaded code. Declare routines in "to_str.h" as "extern"; as I remember, that's necessary to allow the "decode_XXX_bitfield()" routines declared therein to be made available to plugins as per the above. Note that new exported routines should be added to the end of the table if that's the only change being made to the table. Create a new "plugin_api_decls.h" header file, used to declare both the "p_" variables and the "p_" structure members in the routine-exporting mechanism; this reduces the number of places you have to change to change the list of exported routines. svn path=/trunk/; revision=5394
Diffstat (limited to 'plugins')
-rw-r--r--plugins/Makefile.am3
-rw-r--r--plugins/gryphon/packet-gryphon.c143
-rw-r--r--plugins/plugin_api.c14
-rw-r--r--plugins/plugin_api.h18
-rw-r--r--plugins/plugin_api_decls.h212
-rw-r--r--plugins/plugin_api_defs.h171
-rw-r--r--plugins/plugin_table.h182
7 files changed, 286 insertions, 457 deletions
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index f4c28806a0..83338ea000 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -1,7 +1,7 @@
# Makefile.am
# Automake file for Ethereal
#
-# $Id: Makefile.am,v 1.8 2001/10/31 10:40:54 guy Exp $
+# $Id: Makefile.am,v 1.9 2002/05/05 00:16:36 guy Exp $
#
# Ethereal - Network traffic analyzer
# By Gerald Combs <gerald@zing.org>
@@ -29,6 +29,7 @@ plugindir = @PLUGIN_DIR@
EXTRA_DIST = \
plugin_api.c \
plugin_api.h \
+ plugin_api_decls.h \
plugin_api_defs.h \
plugin_table.h \
Makefile.nmake
diff --git a/plugins/gryphon/packet-gryphon.c b/plugins/gryphon/packet-gryphon.c
index d7e607d476..fddad1487e 100644
--- a/plugins/gryphon/packet-gryphon.c
+++ b/plugins/gryphon/packet-gryphon.c
@@ -3,7 +3,7 @@
* By Steve Limkemann <stevelim@dgtech.com>
* Copyright 1998 Steve Limkemann
*
- * $Id: packet-gryphon.c,v 1.32 2002/05/01 06:56:16 guy Exp $
+ * $Id: packet-gryphon.c,v 1.33 2002/05/05 00:16:38 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -46,7 +46,7 @@
#endif
#include <epan/packet.h>
#include "packet-gryphon.h"
-#include "packet-frame.h"
+#include "packet-tcp.h"
#include "prefs.h"
#include "plugins/plugin_api_defs.h"
@@ -154,115 +154,42 @@ static char *frame_type[] = {
"Text string"
};
-static void
-dissect_gryphon(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+/*
+ * Length of the frame header.
+ */
+#define FRAME_HEADER_LEN 8
+
+static guint
+get_gryphon_pdu_len(tvbuff_t *tvb, int offset)
{
- volatile int offset = 0;
- int length_remaining;
guint16 plen;
int padded_len;
- int length;
- tvbuff_t *next_tvb;
-
- offset = 0;
- while (tvb_reported_length_remaining(tvb, offset) != 0) {
- length_remaining = tvb_length_remaining(tvb, offset);
-
- /*
- * Can we do reassembly?
- */
- if (gryphon_desegment && pinfo->can_desegment) {
- /*
- * Yes - is the Gryphon header split across segment boundaries?
- */
- if (length_remaining < 8) {
- /*
- * Yes. Tell the TCP dissector where the data for
- * this message starts in the data it handed us,
- * and how many more bytes we need, and return.
- */
- pinfo->desegment_offset = offset;
- pinfo->desegment_len = 8 - length_remaining;
- return;
- }
- }
-
- /*
- * Get the length of the Gryphon packet, and then
- * get the length as padded to a 4-byte boundary.
- */
- plen = tvb_get_ntohs(tvb, offset + 4);
- padded_len = plen + 3 - (plen + 3) % 4;
- /*
- * Can we do reassembly?
- */
- if (gryphon_desegment && pinfo->can_desegment) {
- /*
- * Yes - is the Gryphon packet split across segment boundaries?
- */
- if (length_remaining < padded_len + 8) {
- /*
- * Yes. Tell the TCP dissector where the data for
- * this message starts in the data it handed us,
- * and how many more bytes we need, and return.
- */
- pinfo->desegment_offset = offset;
- pinfo->desegment_len = (padded_len + 8) - length_remaining;
- return;
- }
- }
-
- /*
- * Construct a tvbuff containing the amount of the payload
- * we have available. Make its reported length the
- * amount of data in the Gryphon packet.
- *
- * XXX - if reassembly isn't enabled. the subdissector
- * will throw a BoundsError exception, rather than a
- * ReportedBoundsError exception. We really want
- * a tvbuff where the length is "length", the reported
- * length is "plen + 8", and the "if the snapshot length
- * were infinite" length is the minimum of the
- * reported length of the tvbuff handed to us and "plen+8",
- * with a new type of exception thrown if the offset is
- * within the reported length but beyond that third length,
- * with that exception getting the "Unreassembled Packet"
- * error.
- */
- length = length_remaining;
- if (length > plen + 8)
- length = plen + 8;
- next_tvb = tvb_new_subset(tvb, offset, length, plen + 8);
+ /*
+ * Get the length of the Gryphon packet, and then get the length as
+ * padded to a 4-byte boundary.
+ */
+ plen = tvb_get_ntohs(tvb, offset + 4);
+ padded_len = plen + 3 - (plen + 3) % 4;
+
+ /*
+ * That length doesn't include the fixed-length part of the header;
+ * add that in.
+ */
+ return padded_len + FRAME_HEADER_LEN;
+}
- /*
- * Dissect the Gryphon packet.
- *
- * Catch the ReportedBoundsError exception; if this
- * particular message happens to get a ReportedBoundsError
- * exception, that doesn't mean that we should stop
- * dissecting Gryphon messages within this frame or
- * chunk of reassembled data.
- *
- * If it gets a BoundsError, we can stop, as there's nothing
- * more to see, so we just re-throw it.
- */
- TRY {
- dissect_gryphon_message(next_tvb, pinfo, tree, FALSE);
- }
- CATCH(BoundsError) {
- RETHROW;
- }
- CATCH(ReportedBoundsError) {
- show_reported_bounds_error(tvb, pinfo, tree);
- }
- ENDTRY;
+static void
+dissect_gryphon_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+ dissect_gryphon_message(tvb, pinfo, tree, FALSE);
+}
- /*
- * Skip the Gryphon header and the payload.
- */
- offset += padded_len + 8;
- }
+static void
+dissect_gryphon(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+ tcp_dissect_pdus(tvb, pinfo, tree, gryphon_desegment, FRAME_HEADER_LEN,
+ get_gryphon_pdu_len, dissect_gryphon_pdu);
}
static const value_string src_dest[] = {
@@ -313,6 +240,12 @@ dissect_gryphon_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
frmtyp = flags & ~RESPONSE_FLAGS;
if (!is_msgresp_add) {
+ /*
+ * This tvbuff includes padding to make its length a multiple
+ * of 4 bytes; set it to the actual length.
+ */
+ set_actual_length(tvb, msglen + FRAME_HEADER_LEN);
+
if (check_col(pinfo->cinfo, COL_INFO)) {
/*
* Indicate what kind of message this is.
diff --git a/plugins/plugin_api.c b/plugins/plugin_api.c
index a76207d05c..2c6f1b8a65 100644
--- a/plugins/plugin_api.c
+++ b/plugins/plugin_api.c
@@ -1,7 +1,7 @@
/* plugin_api.c
* Routines for Ethereal plugins.
*
- * $Id: plugin_api.c,v 1.37 2002/02/22 08:56:48 guy Exp $
+ * $Id: plugin_api.c,v 1.38 2002/05/05 00:16:36 guy Exp $
*
* Ethereal - Network traffic analyzer
* Copyright 2000 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -140,8 +140,6 @@ plugin_address_table_init(plugin_address_table_t *pat)
p_prefs_register_enum_preference = pat->p_prefs_register_enum_preference;
p_prefs_register_string_preference = pat->p_prefs_register_string_preference;
- /* GIOP Begin */
-
p_register_giop_user = pat->p_register_giop_user;
p_is_big_endian = pat->p_is_big_endian;
p_get_CDR_encap_info = pat->p_get_CDR_encap_info;
@@ -166,12 +164,12 @@ plugin_address_table_init(plugin_address_table_t *pat)
p_get_CDR_wchar = pat->p_get_CDR_wchar;
p_get_CDR_wstring = pat->p_get_CDR_wstring;
- /* GIOP End */
-
- /* TPKT Begin */
-
p_is_tpkt = pat->p_is_tpkt;
p_dissect_tpkt_encap = pat->p_dissect_tpkt_encap;
- /* TPKT End */
+ p_set_actual_length = pat->p_set_actual_length;
+ p_tcp_dissect_pdus = pat->p_tcp_dissect_pdus;
+ p_decode_boolean_bitfield = pat->p_decode_boolean_bitfield;
+ p_decode_numeric_bitfield = pat->p_decode_numeric_bitfield;
+ p_decode_enumerated_bitfield = pat->p_decode_enumerated_bitfield;
}
diff --git a/plugins/plugin_api.h b/plugins/plugin_api.h
index b23e42438f..f76ae2ec71 100644
--- a/plugins/plugin_api.h
+++ b/plugins/plugin_api.h
@@ -1,7 +1,7 @@
/* plugin_api.h
* Routines for Ethereal plugins.
*
- * $Id: plugin_api.h,v 1.38 2002/02/22 08:56:48 guy Exp $
+ * $Id: plugin_api.h,v 1.39 2002/05/05 00:16:36 guy Exp $
*
* Ethereal - Network traffic analyzer
* Copyright 2000 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -168,8 +168,6 @@
#define prefs_register_enum_preference (*p_prefs_register_enum_preference)
#define prefs_register_string_preference (*p_prefs_register_string_preference)
-/* GIOP entries Begin */
-
#define register_giop_user (*p_register_giop_user)
#define is_big_endian (*p_is_big_endian)
#define get_CDR_encap_info (*p_get_CDR_encap_info)
@@ -194,14 +192,17 @@
#define get_CDR_wchar (*p_get_CDR_wchar)
#define get_CDR_wstring (*p_get_CDR_wstring)
-/* GIOP entries End */
-
-/* TPKT entries Begin */
-
#define is_tpkt (*p_is_tpkt)
#define dissect_tpkt_encap (*p_dissect_tpkt_encap)
-/* TPKT entries End */
+#define set_actual_length (*p_set_actual_length)
+
+#define tcp_dissect_pdus (*p_tcp_dissect_pdus)
+
+#define decode_boolean_bitfield (*p_decode_boolean_bitfield)
+#define decode_numeric_bitfield (*p_decode_numeric_bitfield)
+#define decode_enumerated_bitfield (*p_decode_enumerated_bitfield)
+
#endif
#include <epan/packet.h>
@@ -209,6 +210,7 @@
#include "prefs.h"
#include "packet-giop.h"
#include "packet-tpkt.h"
+#include "packet-tcp.h"
#include "plugin_table.h"
diff --git a/plugins/plugin_api_decls.h b/plugins/plugin_api_decls.h
new file mode 100644
index 0000000000..b25456d7e0
--- /dev/null
+++ b/plugins/plugin_api_decls.h
@@ -0,0 +1,212 @@
+/* plugin_api_decls.h
+ * Declarations of a list of "p_" names; included in various places
+ * to declare them as variables or as function members.
+ *
+ * $Id: plugin_api_decls.h,v 1.1 2002/05/05 00:16:36 guy Exp $
+ *
+ * Ethereal - Network traffic analyzer
+ * Copyright 2000 by Gilbert Ramirez <gram@alumni.rice.edu>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * If you're adding a new routine, please add it to the *end* of this
+ * table, so that the ABI remains backwards-compatible if the only change
+ * is that new functions are added; don't bother trying to keep related
+ * routines together. (This list is included in "plugin_table.h" to
+ * declare the members of the function address table, so the order *does*
+ * matter.)
+ *
+ * If a routine is removed or a calling sequence changed, the ABI isn't
+ * going to be backwards-compatible no matter what you do; if that's
+ * done, you may re-shuffle the routines to put related routines
+ * together if you want.
+ */
+
+addr_check_col p_check_col;
+addr_col_clear p_col_clear;
+addr_col_add_fstr p_col_add_fstr;
+addr_col_append_fstr p_col_append_fstr;
+addr_col_prepend_fstr p_col_prepend_fstr;
+addr_col_add_str p_col_add_str;
+addr_col_append_str p_col_append_str;
+addr_col_set_str p_col_set_str;
+
+addr_register_init_routine p_register_init_routine;
+addr_register_postseq_cleanup_routine p_register_postseq_cleanup_routine;
+
+addr_match_strval p_match_strval;
+addr_val_to_str p_val_to_str;
+
+addr_conversation_new p_conversation_new;
+addr_find_conversation p_find_conversation;
+addr_conversation_set_dissector p_conversation_set_dissector;
+
+addr_proto_register_protocol p_proto_register_protocol;
+addr_proto_register_field_array p_proto_register_field_array;
+addr_proto_register_subtree_array p_proto_register_subtree_array;
+
+addr_dissector_add p_dissector_add;
+addr_dissector_delete p_dissector_delete;
+addr_dissector_add_handle p_dissector_add_handle;
+
+addr_heur_dissector_add p_heur_dissector_add;
+
+addr_register_dissector p_register_dissector;
+addr_find_dissector p_find_dissector;
+addr_create_dissector_handle p_create_dissector_handle;
+addr_call_dissector p_call_dissector;
+
+addr_proto_is_protocol_enabled p_proto_is_protocol_enabled;
+
+addr_proto_item_get_len p_proto_item_get_len;
+addr_proto_item_set_len p_proto_item_set_len;
+addr_proto_item_set_text p_proto_item_set_text;
+addr_proto_item_append_text p_proto_item_append_text;
+addr_proto_item_add_subtree p_proto_item_add_subtree;
+addr_proto_tree_add_item p_proto_tree_add_item;
+addr_proto_tree_add_item_hidden p_proto_tree_add_item_hidden;
+addr_proto_tree_add_protocol_format p_proto_tree_add_protocol_format;
+
+addr_proto_tree_add_bytes p_proto_tree_add_bytes;
+addr_proto_tree_add_bytes_hidden p_proto_tree_add_bytes_hidden;
+addr_proto_tree_add_bytes_format p_proto_tree_add_bytes_format;
+
+addr_proto_tree_add_time p_proto_tree_add_time;
+addr_proto_tree_add_time_hidden p_proto_tree_add_time_hidden;
+addr_proto_tree_add_time_format p_proto_tree_add_time_format;
+
+addr_proto_tree_add_ipxnet p_proto_tree_add_ipxnet;
+addr_proto_tree_add_ipxnet_hidden p_proto_tree_add_ipxnet_hidden;
+addr_proto_tree_add_ipxnet_format p_proto_tree_add_ipxnet_format;
+
+addr_proto_tree_add_ipv4 p_proto_tree_add_ipv4;
+addr_proto_tree_add_ipv4_hidden p_proto_tree_add_ipv4_hidden;
+addr_proto_tree_add_ipv4_format p_proto_tree_add_ipv4_format;
+
+addr_proto_tree_add_ipv6 p_proto_tree_add_ipv6;
+addr_proto_tree_add_ipv6_hidden p_proto_tree_add_ipv6_hidden;
+addr_proto_tree_add_ipv6_format p_proto_tree_add_ipv6_format;
+
+addr_proto_tree_add_ether p_proto_tree_add_ether;
+addr_proto_tree_add_ether_hidden p_proto_tree_add_ether_hidden;
+addr_proto_tree_add_ether_format p_proto_tree_add_ether_format;
+
+addr_proto_tree_add_string p_proto_tree_add_string;
+addr_proto_tree_add_string_hidden p_proto_tree_add_string_hidden;
+addr_proto_tree_add_string_format p_proto_tree_add_string_format;
+
+addr_proto_tree_add_boolean p_proto_tree_add_boolean;
+addr_proto_tree_add_boolean_hidden p_proto_tree_add_boolean_hidden;
+addr_proto_tree_add_boolean_format p_proto_tree_add_boolean_format;
+
+addr_proto_tree_add_double p_proto_tree_add_double;
+addr_proto_tree_add_double_hidden p_proto_tree_add_double_hidden;
+addr_proto_tree_add_double_format p_proto_tree_add_double_format;
+
+addr_proto_tree_add_uint p_proto_tree_add_uint;
+addr_proto_tree_add_uint_hidden p_proto_tree_add_uint_hidden;
+addr_proto_tree_add_uint_format p_proto_tree_add_uint_format;
+
+addr_proto_tree_add_int p_proto_tree_add_int;
+addr_proto_tree_add_int_hidden p_proto_tree_add_int_hidden;
+addr_proto_tree_add_int_format p_proto_tree_add_int_format;
+
+addr_proto_tree_add_text p_proto_tree_add_text;
+
+addr_tvb_new_subset p_tvb_new_subset;
+
+addr_tvb_set_free_cb p_tvb_set_free_cb;
+addr_tvb_set_child_real_data_tvbuff p_tvb_set_child_real_data_tvbuff;
+addr_tvb_new_real_data p_tvb_new_real_data;
+
+addr_tvb_length p_tvb_length;
+addr_tvb_length_remaining p_tvb_length_remaining;
+addr_tvb_bytes_exist p_tvb_bytes_exist;
+addr_tvb_offset_exists p_tvb_offset_exists;
+addr_tvb_reported_length p_tvb_reported_length;
+addr_tvb_reported_length_remaining p_tvb_reported_length_remaining;
+
+addr_tvb_get_guint8 p_tvb_get_guint8;
+
+addr_tvb_get_ntohs p_tvb_get_ntohs;
+addr_tvb_get_ntoh24 p_tvb_get_ntoh24;
+addr_tvb_get_ntohl p_tvb_get_ntohl;
+
+addr_tvb_get_letohs p_tvb_get_letohs;
+addr_tvb_get_letoh24 p_tvb_get_letoh24;
+addr_tvb_get_letohl p_tvb_get_letohl;
+
+addr_tvb_memcpy p_tvb_memcpy;
+addr_tvb_memdup p_tvb_memdup;
+
+addr_tvb_get_ptr p_tvb_get_ptr;
+
+addr_tvb_find_guint8 p_tvb_find_guint8;
+addr_tvb_pbrk_guint8 p_tvb_pbrk_guint8;
+
+addr_tvb_strnlen p_tvb_strnlen;
+
+addr_tvb_format_text p_tvb_format_text;
+
+addr_tvb_get_nstringz p_tvb_get_nstringz;
+addr_tvb_get_nstringz0 p_tvb_get_nstringz0;
+
+addr_tvb_find_line_end p_tvb_find_line_end;
+addr_tvb_find_line_end_unquoted p_tvb_find_line_end_unquoted;
+
+addr_tvb_strneql p_tvb_strneql;
+addr_tvb_strncaseeql p_tvb_strncaseeql;
+
+addr_tvb_bytes_to_str p_tvb_bytes_to_str;
+
+addr_prefs_register_protocol p_prefs_register_protocol;
+addr_prefs_register_uint_preference p_prefs_register_uint_preference;
+addr_prefs_register_bool_preference p_prefs_register_bool_preference;
+addr_prefs_register_enum_preference p_prefs_register_enum_preference;
+addr_prefs_register_string_preference p_prefs_register_string_preference;
+
+addr_register_giop_user p_register_giop_user;
+addr_is_big_endian p_is_big_endian;
+addr_get_CDR_encap_info p_get_CDR_encap_info;
+addr_get_CDR_any p_get_CDR_any;
+addr_get_CDR_boolean p_get_CDR_boolean;
+addr_get_CDR_char p_get_CDR_char;
+addr_get_CDR_double p_get_CDR_double;
+addr_get_CDR_enum p_get_CDR_enum;
+addr_get_CDR_fixed p_get_CDR_fixed;
+addr_get_CDR_float p_get_CDR_float;
+addr_get_CDR_interface p_get_CDR_interface;
+addr_get_CDR_long p_get_CDR_long;
+addr_get_CDR_object p_get_CDR_object;
+addr_get_CDR_octet p_get_CDR_octet;
+addr_get_CDR_octet_seq p_get_CDR_octet_seq;
+addr_get_CDR_short p_get_CDR_short;
+addr_get_CDR_string p_get_CDR_string;
+addr_get_CDR_typeCode p_get_CDR_typeCode;
+addr_get_CDR_ulong p_get_CDR_ulong;
+addr_get_CDR_ushort p_get_CDR_ushort;
+addr_get_CDR_wchar p_get_CDR_wchar;
+addr_get_CDR_wstring p_get_CDR_wstring;
+
+addr_is_tpkt p_is_tpkt;
+addr_dissect_tpkt_encap p_dissect_tpkt_encap;
+
+addr_set_actual_length p_set_actual_length;
+addr_tcp_dissect_pdus p_tcp_dissect_pdus;
+addr_decode_boolean_bitfield p_decode_boolean_bitfield;
+addr_decode_numeric_bitfield p_decode_numeric_bitfield;
+addr_decode_enumerated_bitfield p_decode_enumerated_bitfield;
diff --git a/plugins/plugin_api_defs.h b/plugins/plugin_api_defs.h
index 93fe80f598..24153f6c11 100644
--- a/plugins/plugin_api_defs.h
+++ b/plugins/plugin_api_defs.h
@@ -1,7 +1,7 @@
/* plugin_api_defs.h
* Define the variables that hold pointers to plugin API functions
*
- * $Id: plugin_api_defs.h,v 1.13 2002/02/22 08:56:48 guy Exp $
+ * $Id: plugin_api_defs.h,v 1.14 2002/05/05 00:16:36 guy Exp $
*
* Ethereal - Network traffic analyzer
* Copyright 2000 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -26,174 +26,7 @@
#ifdef PLUGINS_NEED_ADDRESS_TABLE
-addr_check_col p_check_col;
-addr_col_clear p_col_clear;
-addr_col_add_fstr p_col_add_fstr;
-addr_col_append_fstr p_col_append_fstr;
-addr_col_prepend_fstr p_col_prepend_fstr;
-addr_col_add_str p_col_add_str;
-addr_col_append_str p_col_append_str;
-addr_col_set_str p_col_set_str;
-
-addr_register_init_routine p_register_init_routine;
-addr_register_postseq_cleanup_routine p_register_postseq_cleanup_routine;
-
-addr_match_strval p_match_strval;
-addr_val_to_str p_val_to_str;
-
-addr_conversation_new p_conversation_new;
-addr_find_conversation p_find_conversation;
-addr_conversation_set_dissector p_conversation_set_dissector;
-
-addr_proto_register_protocol p_proto_register_protocol;
-addr_proto_register_field_array p_proto_register_field_array;
-addr_proto_register_subtree_array p_proto_register_subtree_array;
-
-addr_dissector_add p_dissector_add;
-addr_dissector_delete p_dissector_delete;
-addr_dissector_add_handle p_dissector_add_handle;
-
-addr_heur_dissector_add p_heur_dissector_add;
-
-addr_register_dissector p_register_dissector;
-addr_find_dissector p_find_dissector;
-addr_create_dissector_handle p_create_dissector_handle;
-addr_call_dissector p_call_dissector;
-
-addr_proto_is_protocol_enabled p_proto_is_protocol_enabled;
-
-addr_proto_item_get_len p_proto_item_get_len;
-addr_proto_item_set_len p_proto_item_set_len;
-addr_proto_item_set_text p_proto_item_set_text;
-addr_proto_item_append_text p_proto_item_append_text;
-addr_proto_item_add_subtree p_proto_item_add_subtree;
-addr_proto_tree_add_item p_proto_tree_add_item;
-addr_proto_tree_add_item_hidden p_proto_tree_add_item_hidden;
-addr_proto_tree_add_protocol_format p_proto_tree_add_protocol_format;
-
-addr_proto_tree_add_bytes p_proto_tree_add_bytes;
-addr_proto_tree_add_bytes_hidden p_proto_tree_add_bytes_hidden;
-addr_proto_tree_add_bytes_format p_proto_tree_add_bytes_format;
-
-addr_proto_tree_add_time p_proto_tree_add_time;
-addr_proto_tree_add_time_hidden p_proto_tree_add_time_hidden;
-addr_proto_tree_add_time_format p_proto_tree_add_time_format;
-
-addr_proto_tree_add_ipxnet p_proto_tree_add_ipxnet;
-addr_proto_tree_add_ipxnet_hidden p_proto_tree_add_ipxnet_hidden;
-addr_proto_tree_add_ipxnet_format p_proto_tree_add_ipxnet_format;
-
-addr_proto_tree_add_ipv4 p_proto_tree_add_ipv4;
-addr_proto_tree_add_ipv4_hidden p_proto_tree_add_ipv4_hidden;
-addr_proto_tree_add_ipv4_format p_proto_tree_add_ipv4_format;
-
-addr_proto_tree_add_ipv6 p_proto_tree_add_ipv6;
-addr_proto_tree_add_ipv6_hidden p_proto_tree_add_ipv6_hidden;
-addr_proto_tree_add_ipv6_format p_proto_tree_add_ipv6_format;
-
-addr_proto_tree_add_ether p_proto_tree_add_ether;
-addr_proto_tree_add_ether_hidden p_proto_tree_add_ether_hidden;
-addr_proto_tree_add_ether_format p_proto_tree_add_ether_format;
-
-addr_proto_tree_add_string p_proto_tree_add_string;
-addr_proto_tree_add_string_hidden p_proto_tree_add_string_hidden;
-addr_proto_tree_add_string_format p_proto_tree_add_string_format;
-
-addr_proto_tree_add_boolean p_proto_tree_add_boolean;
-addr_proto_tree_add_boolean_hidden p_proto_tree_add_boolean_hidden;
-addr_proto_tree_add_boolean_format p_proto_tree_add_boolean_format;
-
-addr_proto_tree_add_double p_proto_tree_add_double;
-addr_proto_tree_add_double_hidden p_proto_tree_add_double_hidden;
-addr_proto_tree_add_double_format p_proto_tree_add_double_format;
-
-addr_proto_tree_add_uint p_proto_tree_add_uint;
-addr_proto_tree_add_uint_hidden p_proto_tree_add_uint_hidden;
-addr_proto_tree_add_uint_format p_proto_tree_add_uint_format;
-
-addr_proto_tree_add_int p_proto_tree_add_int;
-addr_proto_tree_add_int_hidden p_proto_tree_add_int_hidden;
-addr_proto_tree_add_int_format p_proto_tree_add_int_format;
-
-addr_proto_tree_add_text p_proto_tree_add_text;
-
-addr_tvb_new_subset p_tvb_new_subset;
-
-addr_tvb_set_free_cb p_tvb_set_free_cb;
-addr_tvb_set_child_real_data_tvbuff p_tvb_set_child_real_data_tvbuff;
-addr_tvb_new_real_data p_tvb_new_real_data;
-
-addr_tvb_length p_tvb_length;
-addr_tvb_length_remaining p_tvb_length_remaining;
-addr_tvb_bytes_exist p_tvb_bytes_exist;
-addr_tvb_offset_exists p_tvb_offset_exists;
-addr_tvb_reported_length p_tvb_reported_length;
-addr_tvb_reported_length_remaining p_tvb_reported_length_remaining;
-
-addr_tvb_get_guint8 p_tvb_get_guint8;
-
-addr_tvb_get_ntohs p_tvb_get_ntohs;
-addr_tvb_get_ntoh24 p_tvb_get_ntoh24;
-addr_tvb_get_ntohl p_tvb_get_ntohl;
-
-addr_tvb_get_letohs p_tvb_get_letohs;
-addr_tvb_get_letoh24 p_tvb_get_letoh24;
-addr_tvb_get_letohl p_tvb_get_letohl;
-
-addr_tvb_memcpy p_tvb_memcpy;
-addr_tvb_memdup p_tvb_memdup;
-
-addr_tvb_get_ptr p_tvb_get_ptr;
-
-addr_tvb_find_guint8 p_tvb_find_guint8;
-addr_tvb_pbrk_guint8 p_tvb_pbrk_guint8;
-
-addr_tvb_strnlen p_tvb_strnlen;
-
-addr_tvb_format_text p_tvb_format_text;
-
-addr_tvb_get_nstringz p_tvb_get_nstringz;
-addr_tvb_get_nstringz0 p_tvb_get_nstringz0;
-
-addr_tvb_find_line_end p_tvb_find_line_end;
-addr_tvb_find_line_end_unquoted p_tvb_find_line_end_unquoted;
-
-addr_tvb_strneql p_tvb_strneql;
-addr_tvb_strncaseeql p_tvb_strncaseeql;
-
-addr_tvb_bytes_to_str p_tvb_bytes_to_str;
-
-addr_prefs_register_protocol p_prefs_register_protocol;
-addr_prefs_register_uint_preference p_prefs_register_uint_preference;
-addr_prefs_register_bool_preference p_prefs_register_bool_preference;
-addr_prefs_register_enum_preference p_prefs_register_enum_preference;
-addr_prefs_register_string_preference p_prefs_register_string_preference;
-
-addr_register_giop_user p_register_giop_user;
-addr_is_big_endian p_is_big_endian;
-addr_get_CDR_encap_info p_get_CDR_encap_info;
-addr_get_CDR_any p_get_CDR_any;
-addr_get_CDR_boolean p_get_CDR_boolean;
-addr_get_CDR_char p_get_CDR_char;
-addr_get_CDR_double p_get_CDR_double;
-addr_get_CDR_enum p_get_CDR_enum;
-addr_get_CDR_fixed p_get_CDR_fixed;
-addr_get_CDR_float p_get_CDR_float;
-addr_get_CDR_interface p_get_CDR_interface;
-addr_get_CDR_long p_get_CDR_long;
-addr_get_CDR_object p_get_CDR_object;
-addr_get_CDR_octet p_get_CDR_octet;
-addr_get_CDR_octet_seq p_get_CDR_octet_seq;
-addr_get_CDR_short p_get_CDR_short;
-addr_get_CDR_string p_get_CDR_string;
-addr_get_CDR_typeCode p_get_CDR_typeCode;
-addr_get_CDR_ulong p_get_CDR_ulong;
-addr_get_CDR_ushort p_get_CDR_ushort;
-addr_get_CDR_wchar p_get_CDR_wchar;
-addr_get_CDR_wstring p_get_CDR_wstring;
-
-addr_is_tpkt p_is_tpkt;
-addr_dissect_tpkt_encap p_dissect_tpkt_encap;
+#include "plugin_api_decls.h"
#endif /* PLUGINS_NEED_ADDRESS_TABLE */
diff --git a/plugins/plugin_table.h b/plugins/plugin_table.h
index 89cd06a865..4b401a4b40 100644
--- a/plugins/plugin_table.h
+++ b/plugins/plugin_table.h
@@ -1,7 +1,7 @@
/* plugin_table.h
* Table of exported addresses for Ethereal plugins.
*
- * $Id: plugin_table.h,v 1.44 2002/04/04 05:16:15 guy Exp $
+ * $Id: plugin_table.h,v 1.45 2002/05/05 00:16:36 guy Exp $
*
* Ethereal - Network traffic analyzer
* Copyright 2000 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -223,173 +223,23 @@ typedef int (*addr_is_tpkt)(tvbuff_t *);
typedef void (*addr_dissect_tpkt_encap)(tvbuff_t *, packet_info *,
proto_tree *, gboolean, dissector_handle_t);
+typedef void (*addr_set_actual_length)(tvbuff_t *, guint);
+
+typedef void (*addr_tcp_dissect_pdus)(tvbuff_t *, packet_info *, proto_tree *,
+ gboolean, int, guint (*)(tvbuff_t *, int),
+ void (*)(tvbuff_t *, packet_info *, proto_tree *));
+
+typedef const char *(*addr_decode_boolean_bitfield)(guint32, guint32, int,
+ const char *, const char *);
+typedef const char *(*addr_decode_numeric_bitfield)(guint32, guint32, int,
+ const char *);
+typedef const char *(*addr_decode_enumerated_bitfield)(guint32, guint32, int,
+ const value_string *, const char *);
+
typedef struct {
- addr_check_col p_check_col;
- addr_col_clear p_col_clear;
- addr_col_add_fstr p_col_add_fstr;
- addr_col_append_fstr p_col_append_fstr;
- addr_col_prepend_fstr p_col_prepend_fstr;
- addr_col_add_str p_col_add_str;
- addr_col_append_str p_col_append_str;
- addr_col_set_str p_col_set_str;
-
- addr_register_init_routine p_register_init_routine;
- addr_register_postseq_cleanup_routine p_register_postseq_cleanup_routine;
-
- addr_match_strval p_match_strval;
- addr_val_to_str p_val_to_str;
-
- addr_conversation_new p_conversation_new;
- addr_find_conversation p_find_conversation;
- addr_conversation_set_dissector p_conversation_set_dissector;
-
- addr_proto_register_protocol p_proto_register_protocol;
- addr_proto_register_field_array p_proto_register_field_array;
- addr_proto_register_subtree_array p_proto_register_subtree_array;
-
- addr_dissector_add p_dissector_add;
- addr_dissector_delete p_dissector_delete;
- addr_dissector_add_handle p_dissector_add_handle;
-
- addr_heur_dissector_add p_heur_dissector_add;
-
- addr_register_dissector p_register_dissector;
- addr_find_dissector p_find_dissector;
- addr_create_dissector_handle p_create_dissector_handle;
- addr_call_dissector p_call_dissector;
-
- addr_proto_is_protocol_enabled p_proto_is_protocol_enabled;
-
- addr_proto_item_get_len p_proto_item_get_len;
- addr_proto_item_set_len p_proto_item_set_len;
- addr_proto_item_set_text p_proto_item_set_text;
- addr_proto_item_append_text p_proto_item_append_text;
- addr_proto_item_add_subtree p_proto_item_add_subtree;
- addr_proto_tree_add_item p_proto_tree_add_item;
- addr_proto_tree_add_item_hidden p_proto_tree_add_item_hidden;
- addr_proto_tree_add_protocol_format p_proto_tree_add_protocol_format;
- addr_proto_tree_add_bytes p_proto_tree_add_bytes;
- addr_proto_tree_add_bytes_hidden p_proto_tree_add_bytes_hidden;
- addr_proto_tree_add_bytes_format p_proto_tree_add_bytes_format;
- addr_proto_tree_add_time p_proto_tree_add_time;
- addr_proto_tree_add_time_hidden p_proto_tree_add_time_hidden;
- addr_proto_tree_add_time_format p_proto_tree_add_time_format;
- addr_proto_tree_add_ipxnet p_proto_tree_add_ipxnet;
- addr_proto_tree_add_ipxnet_hidden p_proto_tree_add_ipxnet_hidden;
- addr_proto_tree_add_ipxnet_format p_proto_tree_add_ipxnet_format;
- addr_proto_tree_add_ipv4 p_proto_tree_add_ipv4;
- addr_proto_tree_add_ipv4_hidden p_proto_tree_add_ipv4_hidden;
- addr_proto_tree_add_ipv4_format p_proto_tree_add_ipv4_format;
- addr_proto_tree_add_ipv6 p_proto_tree_add_ipv6;
- addr_proto_tree_add_ipv6_hidden p_proto_tree_add_ipv6_hidden;
- addr_proto_tree_add_ipv6_format p_proto_tree_add_ipv6_format;
- addr_proto_tree_add_ether p_proto_tree_add_ether;
- addr_proto_tree_add_ether_hidden p_proto_tree_add_ether_hidden;
- addr_proto_tree_add_ether_format p_proto_tree_add_ether_format;
- addr_proto_tree_add_string p_proto_tree_add_string;
- addr_proto_tree_add_string_hidden p_proto_tree_add_string_hidden;
- addr_proto_tree_add_string_format p_proto_tree_add_string_format;
- addr_proto_tree_add_boolean p_proto_tree_add_boolean;
- addr_proto_tree_add_boolean_hidden p_proto_tree_add_boolean_hidden;
- addr_proto_tree_add_boolean_format p_proto_tree_add_boolean_format;
- addr_proto_tree_add_double p_proto_tree_add_double;
- addr_proto_tree_add_double_hidden p_proto_tree_add_double_hidden;
- addr_proto_tree_add_double_format p_proto_tree_add_double_format;
- addr_proto_tree_add_uint p_proto_tree_add_uint;
- addr_proto_tree_add_uint_hidden p_proto_tree_add_uint_hidden;
- addr_proto_tree_add_uint_format p_proto_tree_add_uint_format;
- addr_proto_tree_add_int p_proto_tree_add_int;
- addr_proto_tree_add_int_hidden p_proto_tree_add_int_hidden;
- addr_proto_tree_add_int_format p_proto_tree_add_int_format;
- addr_proto_tree_add_text p_proto_tree_add_text;
-
- addr_tvb_new_subset p_tvb_new_subset;
-
- addr_tvb_set_free_cb p_tvb_set_free_cb;
- addr_tvb_set_child_real_data_tvbuff p_tvb_set_child_real_data_tvbuff;
- addr_tvb_new_real_data p_tvb_new_real_data;
-
- addr_tvb_length p_tvb_length;
- addr_tvb_length_remaining p_tvb_length_remaining;
- addr_tvb_bytes_exist p_tvb_bytes_exist;
- addr_tvb_offset_exists p_tvb_offset_exists;
- addr_tvb_reported_length p_tvb_reported_length;
- addr_tvb_reported_length_remaining p_tvb_reported_length_remaining;
-
- addr_tvb_get_guint8 p_tvb_get_guint8;
-
- addr_tvb_get_ntohs p_tvb_get_ntohs;
- addr_tvb_get_ntoh24 p_tvb_get_ntoh24;
- addr_tvb_get_ntohl p_tvb_get_ntohl;
-
- addr_tvb_get_letohs p_tvb_get_letohs;
- addr_tvb_get_letoh24 p_tvb_get_letoh24;
- addr_tvb_get_letohl p_tvb_get_letohl;
-
- addr_tvb_memcpy p_tvb_memcpy;
- addr_tvb_memdup p_tvb_memdup;
-
- addr_tvb_get_ptr p_tvb_get_ptr;
-
- addr_tvb_find_guint8 p_tvb_find_guint8;
- addr_tvb_pbrk_guint8 p_tvb_pbrk_guint8;
-
- addr_tvb_strnlen p_tvb_strnlen;
-
- addr_tvb_format_text p_tvb_format_text;
-
- addr_tvb_get_nstringz p_tvb_get_nstringz;
- addr_tvb_get_nstringz0 p_tvb_get_nstringz0;
-
- addr_tvb_find_line_end p_tvb_find_line_end;
- addr_tvb_find_line_end_unquoted p_tvb_find_line_end_unquoted;
-
- addr_tvb_strneql p_tvb_strneql;
- addr_tvb_strncaseeql p_tvb_strncaseeql;
-
- addr_tvb_bytes_to_str p_tvb_bytes_to_str;
-
- addr_prefs_register_protocol p_prefs_register_protocol;
- addr_prefs_register_uint_preference p_prefs_register_uint_preference;
- addr_prefs_register_bool_preference p_prefs_register_bool_preference;
- addr_prefs_register_enum_preference p_prefs_register_enum_preference;
- addr_prefs_register_string_preference p_prefs_register_string_preference;
-
- /* GIOP Begin */
-
- addr_register_giop_user p_register_giop_user;
- addr_is_big_endian p_is_big_endian;
- addr_get_CDR_encap_info p_get_CDR_encap_info;
-
- addr_get_CDR_any p_get_CDR_any;
- addr_get_CDR_boolean p_get_CDR_boolean;
- addr_get_CDR_char p_get_CDR_char;
- addr_get_CDR_double p_get_CDR_double;
- addr_get_CDR_enum p_get_CDR_enum;
- addr_get_CDR_fixed p_get_CDR_fixed;
- addr_get_CDR_float p_get_CDR_float;
- addr_get_CDR_interface p_get_CDR_interface;
- addr_get_CDR_long p_get_CDR_long;
- addr_get_CDR_object p_get_CDR_object;
- addr_get_CDR_octet p_get_CDR_octet;
- addr_get_CDR_octet_seq p_get_CDR_octet_seq;
- addr_get_CDR_short p_get_CDR_short;
- addr_get_CDR_string p_get_CDR_string;
- addr_get_CDR_typeCode p_get_CDR_typeCode;
- addr_get_CDR_ulong p_get_CDR_ulong;
- addr_get_CDR_ushort p_get_CDR_ushort;
- addr_get_CDR_wchar p_get_CDR_wchar;
- addr_get_CDR_wstring p_get_CDR_wstring;
-
- /* GIOP End */
-
- /* TPKT Begin */
-
- addr_is_tpkt p_is_tpkt;
- addr_dissect_tpkt_encap p_dissect_tpkt_encap;
-
- /* GIOP End */
+#include "plugin_api_decls.h"
+
} plugin_address_table_t;
#else /* ! PLUGINS_NEED_ADDRESS_TABLE */