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