huge cleanup of capture file API (functions in file.c/file.h).
[obnox/wireshark/wip.git] / file.h
1 /* file.h
2  * Definitions for file structures and routines
3  *
4  * $Id$
5  *
6  * Ethereal - Network traffic analyzer
7  * By Gerald Combs <gerald@ethereal.com>
8  * Copyright 1998 Gerald Combs
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 #ifndef __FILE_H__
26 #define __FILE_H__
27
28 #include "packet-range.h"
29 #include "wiretap/wtap.h"
30 #include <epan/dfilter/dfilter.h>
31 #include "print.h"
32 #include <errno.h>
33 #include <epan/epan.h>
34
35 #include "cfile.h"
36
37 /** Return values from various cf_xxx functions. */
38 typedef enum {
39         CF_OK,                  /**< operation succeeded */
40         CF_ERROR,                   /**< operation got an error (function may provide err with details) */
41         CF_ABORTED,                 /**< operation aborted by user */
42         CF_PRINT_OPEN_ERROR,    /**< print operation failed while opening printer */
43         CF_PRINT_WRITE_ERROR    /**< print operation failed while writing to the printer */
44 } cf_status_t;
45
46 /**
47  * Open a capture file.
48  *
49  * @param cf the capture file to be opened
50  * @param fname the filename to be opened
51  * @param is_tempfile is this a temporary file?
52  * @return one of cf_status_t
53  */
54 cf_status_t cf_open(capture_file *cf, char *fname, gboolean is_tempfile, int *err);
55
56 /**
57  * Close a capture file.
58  *
59  * @param cf the capture file to be closed
60  */
61 void cf_close(capture_file *cf);
62
63 /**
64  * Reload a capture file.
65  *
66  * @param cf the capture file to be reloaded
67  */
68 void cf_reload(capture_file *cf);
69
70 /**
71  * Read all packets of a capture file into the internal structures.
72  * 
73  * @param cf the capture file to be read
74  * @return one of cf_status_t
75  */
76 cf_status_t cf_read(capture_file *cf);
77
78 /**
79  * Start reading from the end of a capture file.
80  * This is used in "Update list of packets in Real-Time".
81  * 
82  * @param cf the capture file to be read from
83  * @param fname the filename to be read from
84  * @param is_tempfile is this a temporary file?
85  * @param err the error code, if an error had occured
86  * @return one of cf_status_t
87  */
88 cf_status_t cf_start_tail(capture_file *cf, char *fname, gboolean is_tempfile, int *err);
89
90 /**
91  * Read packets from the "end" of a capture file.
92  * 
93  * @param cf the capture file to be read from
94  * @param to_read the number of packets to read
95  * @param err the error code, if an error had occured
96  * @return one of cf_status_t
97  */
98 cf_status_t cf_continue_tail(capture_file *cf, int to_read, int *err);
99
100 /**
101  * Finish reading from "end" of a capture file.
102  * 
103  * @param cf the capture file to be read from
104  * @param err the error code, if an error had occured
105  * @return one of cf_status_t
106  */
107 cf_status_t cf_finish_tail(capture_file *cf, int *err);
108
109 /**
110  * Save a capture file (or a range of it).
111  * 
112  * @param cf the capture file to save to
113  * @param fname the filename to save to
114  * @param range the range of packets to save
115  * @param save_format the format of the file to save (libpcap, ...)
116  * @return one of cf_status_t
117  */
118 cf_status_t cf_save(capture_file * cf, char *fname, packet_range_t *range, guint save_format);
119
120 /**
121  * Get a displayable name of the capture file.
122  * 
123  * @param cf the capture file
124  * @return the displayable name (don't have to be g_free'd)
125  */
126 const gchar *cf_get_display_name(capture_file *cf);
127
128 /**
129  * Get the number of packets in the capture file.
130  * 
131  * @param cf the capture file
132  * @return the number of packets in the capture file
133  */
134 int cf_packet_count(capture_file *cf);
135
136 /**
137  * Is this capture file a temporary file?
138  * 
139  * @param cf the capture file
140  * @return TRUE if it's a temporary file, FALSE otherwise
141  */
142 gboolean cf_is_tempfile(capture_file *cf);
143
144 /**
145  * Get the interface name to capture from.
146  * 
147  * @param cf the capture file
148  * @return the interface name (don't have to be g_free'd)
149  */
150 gchar *cf_get_iface(capture_file *cf);
151
152 /**
153  * Get the capture filter of this capture file.
154  * 
155  * @param cf the capture file
156  * @return the capture filter (don't have to be g_free'd)
157  */
158 gchar *cf_get_cfilter(capture_file *cf);
159
160 /**
161  * Set flag, if the number of packet drops while capturing are known or not.
162  * 
163  * @param cf the capture file
164  * @param drops_known TRUE if the number of packet drops are known, FALSE otherwise
165  */
166 void cf_set_drops_known(capture_file *cf, gboolean drops_known);
167
168 /**
169  * Set the number of packet drops while capturing.
170  * 
171  * @param cf the capture file
172  * @param drops the number of packet drops occured while capturing
173  */
174 void cf_set_drops(capture_file *cf, guint32 drops);
175
176 /**
177  * Set the read filter.
178  * @todo this shouldn't be required, remove it somehow
179  * 
180  * @param cf the capture file
181  * @param rfcode the readfilter
182  */
183 void cf_set_rfcode(capture_file *cf, dfilter_t *rfcode);
184
185 /**
186  * "Display Filter" packets in the capture file.
187  * 
188  * @param cf the capture file
189  * @param dfilter the display filter
190  * @param force TRUE if do in any case, FALSE only if dfilter changed
191  * @return one of cf_status_t
192  */
193 cf_status_t cf_filter_packets(capture_file *cf, gchar *dfilter, gboolean force);
194
195 /**
196  * At least one "Refence Time" flag has changed, rescan all packets.
197  * 
198  * @param cf the capture file
199  */
200 void cf_reftime_packets(capture_file *cf);
201
202 /**
203  * At least one "Refence Time" flag has changed, rescan all packets.
204  * 
205  * @param cf the capture file
206  */
207 void cf_colorize_packets(capture_file *cf);
208
209 /**
210  * "Something" has changed, rescan all packets.
211  * 
212  * @param cf the capture file
213  */
214 void cf_redissect_packets(capture_file *cf);
215
216 /**
217  * A tap listener want's to rescan all packets.
218  * 
219  * @param cf the capture file
220  * @return one of cf_status_t
221  */
222 cf_status_t cf_retap_packets(capture_file *cf);
223
224 /**
225  * The time format has changed, rescan all packets.
226  * 
227  * @param cf the capture file
228  */
229 void cf_change_time_formats(capture_file *cf);
230
231 /**
232  * Print the capture file.
233  * 
234  * @param cf the capture file
235  * @param print_args the arguments what and how to print
236  * @return one of cf_status_t
237  */
238 cf_status_t cf_print_packets(capture_file *cf, print_args_t *print_args);
239
240 /**
241  * Print (export) the capture file into PDML format.
242  * 
243  * @param cf the capture file
244  * @param print_args the arguments what and how to export
245  * @return one of cf_status_t
246  */
247 cf_status_t cf_write_pdml_packets(capture_file *cf, print_args_t *print_args);
248
249 /**
250  * Print (export) the capture file into PSML format.
251  * 
252  * @param cf the capture file
253  * @param print_args the arguments what and how to export
254  * @return one of cf_status_t
255  */
256 cf_status_t cf_write_psml_packets(capture_file *cf, print_args_t *print_args);
257
258 /**
259  * Find Packet in protocol tree.
260  * 
261  * @param cf the capture file
262  * @param string the string to find
263  * @return TRUE if a packet was found, FALSE otherwise
264  */
265 gboolean cf_find_packet_protocol_tree(capture_file *cf, const char *string);
266
267 /**
268  * Find Packet in summary line.
269  * 
270  * @param cf the capture file
271  * @param string the string to find
272  * @return TRUE if a packet was found, FALSE otherwise
273  */
274 gboolean cf_find_packet_summary_line(capture_file *cf, const char *string);
275
276 /**
277  * Find Packet in packet data.
278  * 
279  * @param cf the capture file
280  * @param string the string to find
281  * @param string_size the size of the string to find
282  * @return TRUE if a packet was found, FALSE otherwise
283  */
284 gboolean cf_find_packet_data(capture_file *cf, const guint8 *string,
285                           size_t string_size);
286
287 /**
288  * Find Packet by display filter.
289  * 
290  * @param cf the capture file
291  * @param sfcode the display filter to find a packet for
292  * @return TRUE if a packet was found, FALSE otherwise
293  */
294 gboolean cf_find_packet_dfilter(capture_file *cf, dfilter_t *sfcode);
295
296 /**
297  * GoTo Packet in first row.
298  * 
299  * @param cf the capture file
300  * @return TRUE if the first row exists, FALSE otherwise
301  */
302 gboolean cf_goto_top_frame(capture_file *cf);
303
304 /**
305  * GoTo Packet in last row.
306  * 
307  * @param cf the capture file
308  * @return TRUE if last row exists, FALSE otherwise
309  */
310 gboolean cf_goto_bottom_frame(capture_file *cf);
311
312 /**
313  * GoTo Packet with the given row.
314  * 
315  * @param cf the capture file
316  * @param row the row to go to
317  * @return TRUE if this row exists, FALSE otherwise
318  */
319 gboolean cf_goto_frame(capture_file *cf, guint row);
320
321 /**
322  * Go to frame specified by currently selected protocol tree field.
323  * (Go To Corresponding Packet)
324  * @todo this is ugly and should be improved!
325  *
326  * @param cf the capture file
327  * @return TRUE if this packet exists, FALSE otherwise
328  */
329 gboolean cf_goto_framenum(capture_file *cf);
330
331 /**
332  * Select the packet in the given row.
333  *
334  * @param cf the capture file
335  * @param row the row to select
336  */
337 void cf_select_packet(capture_file *cf, int row);
338
339 /**
340  * Unselect all packets, if any.
341  *
342  * @param cf the capture file
343  * @param row the row to select
344  */
345 void cf_unselect_packet(capture_file *cf);
346
347 /**
348  * Unselect all protocol tree fields, if any.
349  *
350  * @param cf the capture file
351  * @param row the row to select
352  */
353 void cf_unselect_field(capture_file *cf);
354
355 /**
356  * Mark a particular frame in a particular capture.
357  *
358  * @param cf the capture file
359  * @param frame the frame to be marked
360  */
361 void cf_mark_frame(capture_file *cf, frame_data *frame);
362
363 /**
364  * Unmark a particular frame in a particular capture.
365  *
366  * @param cf the capture file
367  * @param frame the frame to be unmarked
368  */
369 void cf_unmark_frame(capture_file *cf, frame_data *frame);
370
371 /**
372  * Convert error number and info to a complete message.
373  *
374  * @param err the error number
375  * @param err_info the additional info about this error (e.g. filename)
376  * @return statically allocated error message
377  */
378 char *cf_read_error_message(int err, gchar *err_info);
379
380 /**
381  * Merge two (or more) capture files into one.
382  * @todo is this the right place for this function? It doesn't have to do a lot with capture_file.
383  *
384  * @param out_filename output filename
385  * @param out_fd output file descriptor
386  * @param in_file_count the number of input files to merge
387  * @param in_filnames array of input filenames
388  * @param file_type the output filetype
389  * @param do_append FALSE to merge chronologically, TRUE simply append
390  * @return TRUE if merging suceeded, FALSE otherwise
391  */
392 gboolean
393 cf_merge_files(const char *out_filename, int out_fd, int in_file_count,
394                char *const *in_filenames, int file_type, gboolean do_append);
395
396
397 #endif /* file.h */