Add an additional "protocol index" argument to "{old_}dissector_add()",
[obnox/wireshark/wip.git] / plugins / plugin_table.h
1 /* plugin_table.h
2  * Table of exported addresses for Ethereal plugins.
3  *
4  * $Id: plugin_table.h,v 1.14 2001/01/09 06:32:07 guy Exp $
5  *
6  * Ethereal - Network traffic analyzer
7  * Copyright 2000 by Gilbert Ramirez <gram@xiexie.org>
8  *
9  * 
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version.
14  * 
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  * 
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23  *
24  */
25
26 #ifdef PLUGINS_NEED_ADDRESS_TABLE
27
28 /* Some OSes (Win32) have DLLs that cannot reference symbols in the parent
29    executable, so the executable needs to provide a collection of pointers
30    to those functions for the DLL plugin to use. */
31
32 /* Typedefs to make our plugin_address_table_t struct look prettier */
33 typedef gint (*addr_check_col)(frame_data*, gint);
34 typedef void (*addr_col_add_fstr)(frame_data*, gint, gchar*, ...);
35 typedef void (*addr_col_append_fstr)(frame_data*, gint, gchar*, ...);
36 typedef void (*addr_col_add_str)(frame_data*, gint, const gchar*);
37 typedef void (*addr_col_append_str)(frame_data*, gint, gchar*);
38
39 typedef void (*addr_dfilter_init)(void);
40 typedef void (*addr_dfilter_cleanup)(void);
41
42 typedef int (*addr_proto_register_protocol)(char*, char*, char*);
43 typedef void (*addr_proto_register_field_array)(int, hf_register_info*, int);
44 typedef void (*addr_proto_register_subtree_array)(int**, int);
45
46 typedef void (*addr_dissector_add)(const char *, guint32, dissector_t, int);
47 typedef void (*addr_old_dissector_add)(const char *, guint32, old_dissector_t,
48     int);
49 typedef void (*addr_dissector_delete)(const char *, guint32, dissector_t);
50
51 typedef void (*addr_heur_dissector_add)(const char *, heur_dissector_t, int);
52
53 typedef void (*addr_register_dissector)(const char *, dissector_t, int);
54 typedef dissector_handle_t (*addr_find_dissector)(const char *);
55 typedef void (*addr_old_call_dissector)(dissector_handle_t, const u_char *,
56     int, frame_data *, proto_tree *);
57 typedef void (*addr_call_dissector)(dissector_handle_t, tvbuff_t *,
58     packet_info *, proto_tree *);
59
60 typedef void (*addr_dissect_data)(tvbuff_t *, int, packet_info *, proto_tree *);
61 typedef void (*addr_old_dissect_data)(const u_char *, int, frame_data *, proto_tree *);
62
63 typedef gboolean (*addr_proto_is_protocol_enabled)(int);
64
65 typedef int (*addr_proto_item_get_len)(proto_item*);
66 typedef void (*addr_proto_item_set_len)(proto_item*, gint);
67 typedef void (*addr_proto_item_set_text)(proto_item*, const char*, ...);
68 typedef proto_tree* (*addr_proto_item_add_subtree)(proto_item*, gint);
69 typedef proto_item* (*addr_proto_tree_add_item)(proto_tree*, int, tvbuff_t*, gint, gint, gboolean);
70 typedef proto_item* (*addr_proto_tree_add_item_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, gboolean);
71 typedef proto_item* (*addr_proto_tree_add_protocol_format)(proto_tree*, int, tvbuff_t*, gint, gint, const char*, ...);
72
73 typedef proto_item* (*addr_proto_tree_add_bytes)(proto_tree*, int, tvbuff_t*, gint, gint, const guint8*);
74 typedef proto_item* (*addr_proto_tree_add_bytes_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, const guint8*);
75 typedef proto_item* (*addr_proto_tree_add_bytes_format)(proto_tree*, int, tvbuff_t*, gint, gint, const guint8*, const char*, ...);
76
77 typedef proto_item* (*addr_proto_tree_add_time)(proto_tree*, int, tvbuff_t*, gint, gint, struct timeval*);
78 typedef proto_item* (*addr_proto_tree_add_time_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, struct timeval*);
79 typedef proto_item* (*addr_proto_tree_add_time_format)(proto_tree*, int, tvbuff_t*, gint, gint, struct timeval*, const char*, ...);
80
81 typedef proto_item* (*addr_proto_tree_add_ipxnet)(proto_tree*, int, tvbuff_t*, gint, gint, guint32);
82 typedef proto_item* (*addr_proto_tree_add_ipxnet_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, guint32);
83 typedef proto_item* (*addr_proto_tree_add_ipxnet_format)(proto_tree*, int, tvbuff_t*, gint, gint, guint32, const char*, ...);
84
85 typedef proto_item* (*addr_proto_tree_add_ipv4)(proto_tree*, int, tvbuff_t*, gint, gint, guint32);
86 typedef proto_item* (*addr_proto_tree_add_ipv4_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, guint32);
87 typedef proto_item* (*addr_proto_tree_add_ipv4_format)(proto_tree*, int, tvbuff_t*, gint, gint, guint32, const char*, ...);
88
89 typedef proto_item* (*addr_proto_tree_add_ipv6)(proto_tree*, int, tvbuff_t*, gint, gint, const guint8*);
90 typedef proto_item* (*addr_proto_tree_add_ipv6_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, const guint8*);
91 typedef proto_item* (*addr_proto_tree_add_ipv6_format)(proto_tree*, int, tvbuff_t*, gint, gint, const guint8*, const char*, ...);
92
93 typedef proto_item* (*addr_proto_tree_add_ether)(proto_tree*, int, tvbuff_t*, gint, gint, const guint8*);
94 typedef proto_item* (*addr_proto_tree_add_ether_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, const guint8*);
95 typedef proto_item* (*addr_proto_tree_add_ether_format)(proto_tree*, int, tvbuff_t*, gint, gint, const guint8*, const char*, ...);
96
97 typedef proto_item* (*addr_proto_tree_add_string)(proto_tree*, int, tvbuff_t*, gint, gint, const char*);
98 typedef proto_item* (*addr_proto_tree_add_string_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, const char*);
99 typedef proto_item* (*addr_proto_tree_add_string_format)(proto_tree*, int, tvbuff_t*, gint, gint, const char*, const char*, ...);
100
101 typedef proto_item* (*addr_proto_tree_add_boolean)(proto_tree*, int, tvbuff_t*, gint, gint, guint32);
102 typedef proto_item* (*addr_proto_tree_add_boolean_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, guint32);
103 typedef proto_item* (*addr_proto_tree_add_boolean_format)(proto_tree*, int, tvbuff_t*, gint, gint, guint32, const char*, ...);
104
105 typedef proto_item* (*addr_proto_tree_add_double)(proto_tree*, int, tvbuff_t*, gint, gint, double);
106 typedef proto_item* (*addr_proto_tree_add_double_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, double);
107 typedef proto_item* (*addr_proto_tree_add_double_format)(proto_tree*, int, tvbuff_t*, gint, gint, double, const char*, ...);
108
109 typedef proto_item* (*addr_proto_tree_add_uint)(proto_tree*, int, tvbuff_t*, gint, gint, guint32);
110 typedef proto_item* (*addr_proto_tree_add_uint_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, guint32);
111 typedef proto_item* (*addr_proto_tree_add_uint_format)(proto_tree*, int, tvbuff_t*, gint, gint, guint32, const char*, ...);
112
113 typedef proto_item* (*addr_proto_tree_add_int)(proto_tree*, int, tvbuff_t*, gint, gint, gint32);
114 typedef proto_item* (*addr_proto_tree_add_int_hidden)(proto_tree*, int, tvbuff_t*, gint, gint, gint32);
115 typedef proto_item* (*addr_proto_tree_add_int_format)(proto_tree*, int, tvbuff_t*, gint, gint, gint32, const char*, ...);
116
117 typedef proto_item* (*addr_proto_tree_add_text)(proto_tree*, tvbuff_t*, gint, gint, const char*, ...);
118 typedef proto_item* (*addr_proto_tree_add_notext)(proto_tree*, tvbuff_t*, gint, gint);
119
120 typedef tvbuff_t* (*addr_tvb_new_subset)(tvbuff_t*, gint, gint, gint);
121
122 typedef guint (*addr_tvb_length)(tvbuff_t*);
123 typedef guint (*addr_tvb_length_remaining)(tvbuff_t*, gint);
124 typedef gboolean (*addr_tvb_bytes_exist)(tvbuff_t*, gint, gint);
125 typedef gboolean (*addr_tvb_offset_exists)(tvbuff_t*, gint);
126 typedef guint (*addr_tvb_reported_length)(tvbuff_t*);
127
128 typedef guint8 (*addr_tvb_get_guint8)(tvbuff_t*, gint);
129
130 typedef guint16 (*addr_tvb_get_ntohs)(tvbuff_t*, gint);
131 typedef guint32 (*addr_tvb_get_ntoh24)(tvbuff_t*, gint);
132 typedef guint32 (*addr_tvb_get_ntohl)(tvbuff_t*, gint);
133 #ifdef G_HAVE_GINT64
134 typedef guint64 (*addr_tvb_get_ntohll)(tvbuff_t*, gint);
135 #endif
136
137 typedef guint16 (*addr_tvb_get_letohs)(tvbuff_t*, gint);
138 typedef guint32 (*addr_tvb_get_letoh24)(tvbuff_t*, gint);
139 typedef guint32 (*addr_tvb_get_letohl)(tvbuff_t*, gint);
140 #ifdef G_HAVE_GINT64
141 typedef guint64 (*addr_tvb_get_letohll)(tvbuff_t*, gint);
142 #endif
143
144 typedef guint8* (*addr_tvb_memcpy)(tvbuff_t*, guint8* target, gint, gint);
145 typedef guint8* (*addr_tvb_memdup)(tvbuff_t*, gint, gint);
146
147 typedef guint8* (*addr_tvb_get_ptr)(tvbuff_t*, gint, gint);
148
149 typedef gint (*addr_tvb_find_guint8)(tvbuff_t*, gint, guint, guint8);
150 typedef gint (*addr_tvb_pbrk_guint8)(tvbuff_t *, gint, guint, guint8 *);
151
152 typedef gint (*addr_tvb_strnlen)(tvbuff_t*, gint, guint);
153
154 typedef guint8 * (*addr_tvb_format_text)(tvbuff_t*, gint, gint);
155
156 typedef gint (*addr_tvb_get_nstringz)(tvbuff_t*, gint, guint, guint8*);
157 typedef gint (*addr_tvb_get_nstringz0)(tvbuff_t*, gint, guint, guint8*);
158
159 typedef gint (*addr_tvb_find_line_end)(tvbuff_t*, gint, int, gint *);
160 typedef gint (*addr_tvb_find_line_end_unquoted)(tvbuff_t*, gint, int, gint *);
161
162 typedef gint (*addr_tvb_strneql)(tvbuff_t*, gint, const guint8 *, gint);
163 typedef gint (*addr_tvb_strncaseeql)(tvbuff_t*, gint, const guint8 *, gint);
164
165 typedef gchar *(*addr_tvb_bytes_to_str)(tvbuff_t*, gint, gint len);
166
167 typedef struct pref_module *(*addr_prefs_register_protocol)(int,
168     void (*)(void));
169 typedef void (*addr_prefs_register_uint_preference)(struct pref_module *,
170     const char *, const char *, const char *, guint, guint *);
171 typedef void (*addr_prefs_register_bool_preference)(struct pref_module *,
172     const char *, const char *, const char *, gboolean *);
173 typedef void (*addr_prefs_register_enum_preference)(struct pref_module *,
174     const char *, const char *, const char *, gint *, const enum_val_t *,
175     gboolean);
176
177 typedef struct  {
178         addr_check_col                          p_check_col;
179         addr_col_add_fstr                       p_col_add_fstr;
180         addr_col_append_fstr                    p_col_append_fstr;
181         addr_col_add_str                        p_col_add_str;
182         addr_col_append_str                     p_col_append_str;
183
184         addr_dfilter_init                       p_dfilter_init;
185         addr_dfilter_cleanup                    p_dfilter_cleanup;
186
187         packet_info                             *p_pi;
188
189         addr_proto_register_protocol            p_proto_register_protocol;
190         addr_proto_register_field_array         p_proto_register_field_array;
191         addr_proto_register_subtree_array       p_proto_register_subtree_array;
192
193         addr_dissector_add                      p_dissector_add;
194         addr_old_dissector_add                  p_old_dissector_add;
195         addr_dissector_delete                   p_dissector_delete;
196
197         addr_heur_dissector_add                 p_heur_dissector_add;
198
199         addr_register_dissector                 p_register_dissector;
200         addr_find_dissector                     p_find_dissector;
201         addr_old_call_dissector                 p_old_call_dissector;
202         addr_call_dissector                     p_call_dissector;
203
204         addr_dissect_data                       p_dissect_data;
205         addr_old_dissect_data                   p_old_dissect_data;
206
207         addr_proto_is_protocol_enabled          p_proto_is_protocol_enabled;
208
209         addr_proto_item_get_len                 p_proto_item_get_len;
210         addr_proto_item_set_len                 p_proto_item_set_len;
211         addr_proto_item_set_text                p_proto_item_set_text;
212         addr_proto_item_add_subtree             p_proto_item_add_subtree;
213         addr_proto_tree_add_item                p_proto_tree_add_item;
214         addr_proto_tree_add_item_hidden         p_proto_tree_add_item_hidden;
215         addr_proto_tree_add_protocol_format     p_proto_tree_add_protocol_format;
216         addr_proto_tree_add_bytes               p_proto_tree_add_bytes;
217         addr_proto_tree_add_bytes_hidden        p_proto_tree_add_bytes_hidden;
218         addr_proto_tree_add_bytes_format        p_proto_tree_add_bytes_format;
219         addr_proto_tree_add_time                p_proto_tree_add_time;
220         addr_proto_tree_add_time_hidden         p_proto_tree_add_time_hidden;
221         addr_proto_tree_add_time_format         p_proto_tree_add_time_format;
222         addr_proto_tree_add_ipxnet              p_proto_tree_add_ipxnet;
223         addr_proto_tree_add_ipxnet_hidden       p_proto_tree_add_ipxnet_hidden;
224         addr_proto_tree_add_ipxnet_format       p_proto_tree_add_ipxnet_format;
225         addr_proto_tree_add_ipv4                p_proto_tree_add_ipv4;
226         addr_proto_tree_add_ipv4_hidden         p_proto_tree_add_ipv4_hidden;
227         addr_proto_tree_add_ipv4_format         p_proto_tree_add_ipv4_format;
228         addr_proto_tree_add_ipv6                p_proto_tree_add_ipv6;
229         addr_proto_tree_add_ipv6_hidden         p_proto_tree_add_ipv6_hidden;
230         addr_proto_tree_add_ipv6_format         p_proto_tree_add_ipv6_format;
231         addr_proto_tree_add_ether               p_proto_tree_add_ether;
232         addr_proto_tree_add_ether_hidden        p_proto_tree_add_ether_hidden;
233         addr_proto_tree_add_ether_format        p_proto_tree_add_ether_format;
234         addr_proto_tree_add_string              p_proto_tree_add_string;
235         addr_proto_tree_add_string_hidden       p_proto_tree_add_string_hidden;
236         addr_proto_tree_add_string_format       p_proto_tree_add_string_format;
237         addr_proto_tree_add_boolean             p_proto_tree_add_boolean;
238         addr_proto_tree_add_boolean_hidden      p_proto_tree_add_boolean_hidden;
239         addr_proto_tree_add_boolean_format      p_proto_tree_add_boolean_format;
240         addr_proto_tree_add_double              p_proto_tree_add_double;
241         addr_proto_tree_add_double_hidden       p_proto_tree_add_double_hidden;
242         addr_proto_tree_add_double_format       p_proto_tree_add_double_format;
243         addr_proto_tree_add_uint                p_proto_tree_add_uint;
244         addr_proto_tree_add_uint_hidden         p_proto_tree_add_uint_hidden;
245         addr_proto_tree_add_uint_format         p_proto_tree_add_uint_format;
246         addr_proto_tree_add_int                 p_proto_tree_add_int;
247         addr_proto_tree_add_int_hidden          p_proto_tree_add_int_hidden;
248         addr_proto_tree_add_int_format          p_proto_tree_add_int_format;
249         addr_proto_tree_add_text                p_proto_tree_add_text;
250         addr_proto_tree_add_notext              p_proto_tree_add_notext;
251
252         addr_tvb_new_subset                     p_tvb_new_subset;
253
254         addr_tvb_length                         p_tvb_length;
255         addr_tvb_length_remaining               p_tvb_length_remaining;
256         addr_tvb_bytes_exist                    p_tvb_bytes_exist;
257         addr_tvb_offset_exists                  p_tvb_offset_exists;
258         addr_tvb_reported_length                p_tvb_reported_length;
259
260         addr_tvb_get_guint8                     p_tvb_get_guint8;
261
262         addr_tvb_get_ntohs                      p_tvb_get_ntohs;
263         addr_tvb_get_ntoh24                     p_tvb_get_ntoh24;
264         addr_tvb_get_ntohl                      p_tvb_get_ntohl;
265 #ifdef G_HAVE_GINT64
266         addr_tvb_get_ntohll                     p_tvb_get_ntohll;
267 #endif
268
269         addr_tvb_get_letohs                     p_tvb_get_letohs;
270         addr_tvb_get_letoh24                    p_tvb_get_letoh24;
271         addr_tvb_get_letohl                     p_tvb_get_letohl;
272 #ifdef G_HAVE_GINT64
273         addr_tvb_get_letohll                    p_tvb_get_letohll;
274 #endif
275
276         addr_tvb_memcpy                         p_tvb_memcpy;
277         addr_tvb_memdup                         p_tvb_memdup;
278
279         addr_tvb_get_ptr                        p_tvb_get_ptr;
280
281         addr_tvb_find_guint8                    p_tvb_find_guint8;
282         addr_tvb_pbrk_guint8                    p_tvb_pbrk_guint8;
283
284         addr_tvb_strnlen                        p_tvb_strnlen;
285
286         addr_tvb_format_text                    p_tvb_format_text;
287
288         addr_tvb_get_nstringz                   p_tvb_get_nstringz;
289         addr_tvb_get_nstringz0                  p_tvb_get_nstringz0;
290
291         addr_tvb_find_line_end                  p_tvb_find_line_end;
292         addr_tvb_find_line_end_unquoted p_tvb_find_line_end_unquoted;
293
294         addr_tvb_strneql                        p_tvb_strneql;
295         addr_tvb_strncaseeql                    p_tvb_strncaseeql;
296
297         addr_tvb_bytes_to_str                   p_tvb_bytes_to_str;
298
299         addr_prefs_register_protocol            p_prefs_register_protocol;
300         addr_prefs_register_uint_preference     p_prefs_register_uint_preference;
301         addr_prefs_register_bool_preference     p_prefs_register_bool_preference;
302         addr_prefs_register_enum_preference     p_prefs_register_enum_preference;
303 } plugin_address_table_t;
304
305 #else /* ! PLUGINS_NEED_ACCESS_TABLE */
306
307 typedef void    plugin_address_table_t;
308
309 #endif