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