X-Git-Url: http://git.samba.org/?a=blobdiff_plain;f=file.h;h=2403e247077734d4ee9c8b371ba9a75b5b20fc76;hb=42ae72134d86dad1f56e39b04603d90223ecd702;hp=c2d319e465c0bb71a0ddeecf1eab14ccf0c96d5d;hpb=d4e0b348cf6794a4337d917b339c4ac62abb5786;p=metze%2Fwireshark%2Fwip.git diff --git a/file.h b/file.h index c2d319e465..2403e24707 100644 --- a/file.h +++ b/file.h @@ -1,8 +1,6 @@ /* file.h * Definitions for file structures and routines * - * $Id$ - * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs @@ -19,74 +17,121 @@ * * 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. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __FILE_H__ #define __FILE_H__ -#include "packet-range.h" #include "wiretap/wtap.h" -#include -#include "print.h" #include #include -#include "cfile.h" +#include +#include +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ /** Return values from functions that only can succeed or fail. */ typedef enum { - CF_OK, /**< operation succeeded */ - CF_ERROR /**< operation got an error (function may provide err with details) */ + CF_OK, /**< operation succeeded */ + CF_ERROR /**< operation got an error (function may provide err with details) */ } cf_status_t; /** Return values from functions that read capture files. */ typedef enum { - CF_READ_OK, /**< operation succeeded */ - CF_READ_ERROR, /**< operation got an error (function may provide err with details) */ - CF_READ_ABORTED /**< operation aborted by user */ + CF_READ_OK, /**< operation succeeded */ + CF_READ_ERROR, /**< operation got an error (function may provide err with details) */ + CF_READ_ABORTED /**< operation aborted by user */ } cf_read_status_t; +/** Return values from functions that write out packets. */ +typedef enum { + CF_WRITE_OK, /**< operation succeeded */ + CF_WRITE_ERROR, /**< operation got an error (function may provide err with details) */ + CF_WRITE_ABORTED /**< operation aborted by user */ +} cf_write_status_t; + /** Return values from functions that print sets of packets. */ typedef enum { - CF_PRINT_OK, /**< print operation succeeded */ - CF_PRINT_OPEN_ERROR, /**< print operation failed while opening printer */ - CF_PRINT_WRITE_ERROR /**< print operation failed while writing to the printer */ + CF_PRINT_OK, /**< print operation succeeded */ + CF_PRINT_OPEN_ERROR, /**< print operation failed while opening printer */ + CF_PRINT_WRITE_ERROR /**< print operation failed while writing to the printer */ } cf_print_status_t; typedef enum { + cf_cb_file_opened, cf_cb_file_closing, cf_cb_file_closed, cf_cb_file_read_started, cf_cb_file_read_finished, + cf_cb_file_reload_started, + cf_cb_file_reload_finished, + cf_cb_file_rescan_started, + cf_cb_file_rescan_finished, + cf_cb_file_retap_started, + cf_cb_file_retap_finished, + cf_cb_file_fast_save_finished, cf_cb_packet_selected, cf_cb_packet_unselected, cf_cb_field_unselected, cf_cb_file_save_started, cf_cb_file_save_finished, - cf_cb_file_save_reload_finished, - cf_cb_file_save_failed + cf_cb_file_save_failed, + cf_cb_file_save_stopped, + cf_cb_file_export_specified_packets_started, + cf_cb_file_export_specified_packets_finished, + cf_cb_file_export_specified_packets_failed, + cf_cb_file_export_specified_packets_stopped } cf_cbs; typedef void (*cf_callback_t) (gint event, gpointer data, gpointer user_data); +typedef struct { + const char *string; + size_t string_len; + capture_file *cf; + gboolean frame_matched; + field_info *finfo; +} match_data; + +/** + * Add a capture file event callback. + * + * @param func The function to be called for each event. + * The function will be passed three parameters: The event type (event), + * event-dependent data (data), and user-supplied data (user_data). + * Event-dependent data may be a capture_file pointer, character pointer, + * or NULL. + * @param user_data User-supplied data to pass to the callback. May be NULL. + */ + extern void cf_callback_add(cf_callback_t func, gpointer user_data); +/** + * Remove a capture file event callback. + * + * @param func The function to be removed. + * @param user_data User-supplied data. Must be the same value supplied to cf_callback_add. + */ + extern void -cf_callback_remove(cf_callback_t func); +cf_callback_remove(cf_callback_t func, gpointer user_data); /** * Open a capture file. * * @param cf the capture file to be opened * @param fname the filename to be opened + * @param type WTAP_TYPE_AUTO for automatic or index to direct open routine * @param is_tempfile is this a temporary file? * @param err error code * @return one of cf_status_t */ -cf_status_t cf_open(capture_file *cf, const char *fname, gboolean is_tempfile, int *err); +cf_status_t cf_open(capture_file *cf, const char *fname, unsigned int type, gboolean is_tempfile, int *err); /** * Close a capture file. @@ -106,54 +151,42 @@ void cf_reload(capture_file *cf); * Read all packets of a capture file into the internal structures. * * @param cf the capture file to be read - * @param from_save reread asked from cf_save + * @param from_save reread asked from cf_save_records * @return one of cf_read_status_t */ cf_read_status_t cf_read(capture_file *cf, gboolean from_save); /** - * Read the pseudo-header and raw data for a packet. It will pop + * Read the metadata and raw data for a record. It will pop * up an alert box if there's an error. * - * @param cf the capture file from which to read the packet - * @param fdata the frame_data structure for the packet in question - * @param pseudo_header pointer to a wtap_pseudo_header union into - * which to read the packet's pseudo-header - * @param pd a guin8 array into which to read the packet's raw data + * @param cf the capture file from which to read the record + * @param fdata the frame_data structure for the record in question + * @param phdr pointer to a wtap_pkthdr structure to contain the + * record's metadata + * @param buf a Buffer into which to read the record's raw data * @return TRUE if the read succeeded, FALSE if there was an error */ -gboolean cf_read_frame_r(capture_file *cf, frame_data *fdata, - union wtap_pseudo_header *pseudo_header, guint8 *pd); +gboolean cf_read_record_r(capture_file *cf, const frame_data *fdata, + struct wtap_pkthdr *phdr, Buffer *buf); /** - * Read the pseudo-header and raw data for a packet into a - * capture_file structure's pseudo_header and pd members. + * Read the metadata and raw data for a record into a + * capture_file structure's phdr and buf members. * It will pop up an alert box if there's an error. * - * @param cf the capture file from which to read the packet - * @param fdata the frame_data structure for the packet in question + * @param cf the capture file from which to read the record + * @param fdata the frame_data structure for the record in question * @return TRUE if the read succeeded, FALSE if there was an error */ -gboolean cf_read_frame(capture_file *cf, frame_data *fdata); - -/** - * Start reading from the end of a capture file. - * This is used in "Update list of packets in Real-Time". - * - * @param cf the capture file to be read from - * @param fname the filename to be read from - * @param is_tempfile is this a temporary file? - * @param err the error code, if an error had occured - * @return one of cf_status_t - */ -cf_status_t cf_start_tail(capture_file *cf, const char *fname, gboolean is_tempfile, int *err); +gboolean cf_read_record(capture_file *cf, frame_data *fdata); /** * Read packets from the "end" of a capture file. * * @param cf the capture file to be read from * @param to_read the number of packets to read - * @param err the error code, if an error had occured + * @param err the error code, if an error had occurred * @return one of cf_read_status_t */ cf_read_status_t cf_continue_tail(capture_file *cf, volatile int to_read, int *err); @@ -169,14 +202,31 @@ void cf_fake_continue_tail(capture_file *cf); * Finish reading from "end" of a capture file. * * @param cf the capture file to be read from - * @param err the error code, if an error had occured + * @param err the error code, if an error had occurred * @return one of cf_read_status_t */ cf_read_status_t cf_finish_tail(capture_file *cf, int *err); /** - * Determine whether this capture file (or a range of it) can be saved - * (except by copying the raw file data). + * Determine whether this capture file (or a range of it) can be written + * in any format using Wiretap rather than by copying the raw data. + * + * @param cf the capture file to check + * @return TRUE if it can be written, FALSE if it can't + */ +gboolean cf_can_write_with_wiretap(capture_file *cf); + +/** + * Determine whether this capture file can be saved with a "save" operation; + * if there's nothing unsaved, it can't. + * + * @param cf the capture file to check + * @return TRUE if it can be saved, FALSE if it can't + */ +gboolean cf_can_save(capture_file *cf); + +/** + * Determine whether this capture file can be saved with a "save as" operation. * * @param cf the capture file to check * @return TRUE if it can be saved, FALSE if it can't @@ -184,24 +234,63 @@ cf_read_status_t cf_finish_tail(capture_file *cf, int *err); gboolean cf_can_save_as(capture_file *cf); /** - * Save a capture file (or a range of it). + * Determine whether this capture file has unsaved data. + * + * @param cf the capture file to check + * @return TRUE if it has unsaved data, FALSE if it doesn't + */ +gboolean cf_has_unsaved_data(capture_file *cf); + +/** + * Save all packets in a capture file to a new file, and, if that succeeds, + * make that file the current capture file. If there's already a file with + * that name, do a "safe save", writing to a temporary file in the same + * directory and, if the write succeeds, renaming the new file on top of the + * old file, so that if the write fails, the old file is still intact. * * @param cf the capture file to save to * @param fname the filename to save to - * @param range the range of packets to save * @param save_format the format of the file to save (libpcap, ...) * @param compressed whether to gzip compress the file - * @return one of cf_status_t + * @param discard_comments TRUE if we should discard comments if the save + * succeeds (because we saved in a format that doesn't support + * comments) + * @param dont_reopen TRUE if it shouldn't reopen and make that file the + * current capture file + * @return one of cf_write_status_t + */ +cf_write_status_t cf_save_records(capture_file * cf, const char *fname, + guint save_format, gboolean compressed, + gboolean discard_comments, + gboolean dont_reopen); + +/** + * Export some or all packets from a capture file to a new file. If there's + * already a file with that name, do a "safe save", writing to a temporary + * file in the same directory and, if the write succeeds, renaming the new + * file on top of the old file, so that if the write fails, the old file is + * still intact. + * + * @param cf the capture file to write to + * @param fname the filename to write to + * @param range the range of packets to write + * @param save_format the format of the file to write (libpcap, ...) + * @param compressed whether to gzip compress the file + * @return one of cf_write_status_t */ -cf_status_t cf_save(capture_file * cf, const char *fname, packet_range_t *range, guint save_format, gboolean compressed); +cf_write_status_t cf_export_specified_packets(capture_file *cf, + const char *fname, + packet_range_t *range, + guint save_format, + gboolean compressed); /** * Get a displayable name of the capture file. * * @param cf the capture file - * @return the displayable name (don't have to be g_free'd) + * @return the displayable name (must be g_free'd) */ -const gchar *cf_get_display_name(capture_file *cf); +gchar *cf_get_display_name(capture_file *cf); /** * Set the source of the capture data for temporary files, e.g. @@ -228,14 +317,6 @@ const gchar *cf_get_tempfile_source(capture_file *cf); */ int cf_get_packet_count(capture_file *cf); -/** - * Set the number of packets in the capture file. - * - * @param cf the capture file - * @param packet_count the number of packets in the capture file - */ -void cf_set_packet_count(capture_file *cf, int packet_count); - /** * Is this capture file a temporary file? * @@ -261,7 +342,7 @@ void cf_set_drops_known(capture_file *cf, gboolean drops_known); * Set the number of packet drops while capturing. * * @param cf the capture file - * @param drops the number of packet drops occured while capturing + * @param drops the number of packet drops occurred while capturing */ void cf_set_drops(capture_file *cf, guint32 drops); @@ -277,7 +358,7 @@ gboolean cf_get_drops_known(capture_file *cf); * Get the number of packet drops while capturing. * * @param cf the capture file - * @return the number of packet drops occured while capturing + * @return the number of packet drops occurred while capturing */ guint32 cf_get_drops(capture_file *cf); @@ -310,14 +391,7 @@ void cf_reftime_packets(capture_file *cf); /** * Return the time it took to load the file */ -gulong cf_get_computed_elapsed(void); - -/** - * The coloring rules have changed, redo coloring - * - * @param cf the capture file - */ -void cf_colorize_packets(capture_file *cf); +gulong cf_get_computed_elapsed(capture_file *cf); /** * "Something" has changed, rescan all packets. @@ -334,13 +408,6 @@ void cf_redissect_packets(capture_file *cf); */ cf_read_status_t cf_retap_packets(capture_file *cf); -/** - * The time format has changed, rescan all packets. - * - * @param cf the capture file - */ -void cf_change_time_formats(capture_file *cf); - /** * Adjust timestamp precision if auto is selected. * @@ -404,6 +471,17 @@ cf_print_status_t cf_write_carrays_packets(capture_file *cf, print_args_t *print gboolean cf_find_packet_protocol_tree(capture_file *cf, const char *string, search_direction dir); +/** + * Find field with a label that contains text string cfile->sfilter. + * + * @param cf the capture file + * @param tree the protocol tree + * @param mdata the first field (mdata->finfo) that matched the string + * @return TRUE if a packet was found, FALSE otherwise + */ +extern gboolean cf_find_string_protocol_tree(capture_file *cf, proto_tree *tree, + match_data *mdata); + /** * Find packet whose summary line contains a specified text string. * @@ -471,18 +549,16 @@ gboolean cf_find_packet_time_reference(capture_file *cf, search_direction dir); /** * GoTo Packet in first row. * - * @param cf the capture file * @return TRUE if the first row exists, FALSE otherwise */ -gboolean cf_goto_top_frame(capture_file *cf); +gboolean cf_goto_top_frame(void); /** * GoTo Packet in last row. * - * @param cf the capture file * @return TRUE if last row exists, FALSE otherwise */ -gboolean cf_goto_bottom_frame(capture_file *cf); +gboolean cf_goto_bottom_frame(void); /** * GoTo Packet with the given row. @@ -574,8 +650,68 @@ cf_status_t cf_merge_files(char **out_filename, int in_file_count, char *const *in_filenames, int file_type, gboolean do_append); -#if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS) -void read_keytab_file(const char *); + +/** + * Get the comment on a capture from the SHB data block + * + * @param cf the capture file + */ +const gchar* cf_read_shb_comment(capture_file *cf); + +/** + * Update(replace) the comment on a capture from the SHB data block + * + * @param cf the capture file + * @param comment the string replacing the old comment + */ +void cf_update_capture_comment(capture_file *cf, gchar *comment); + +char *cf_get_comment(capture_file *cf, const frame_data *fd); + +/** + * Update(replace) the comment on a capture from a frame + * + * @param cf the capture file + * @param fd the frame_data structure for the frame + * @param new_comment the string replacing the old comment + */ +gboolean cf_set_user_packet_comment(capture_file *cf, frame_data *fd, const gchar *new_comment); + +/** + * What types of comments does this file have? + * + * @param cf the capture file + * @return bitset of WTAP_COMMENT_ values + */ +guint32 cf_comment_types(capture_file *cf); + +#ifdef WANT_PACKET_EDITOR +/** + * Give a frame new, edited data. + * + * @param cf the capture file + * @param fd frame_data structure for the frame + * @param phdr the struct wtap_pkthdr for the frame + * @param pd the raw packet data for the frame + */ +void cf_set_frame_edited(capture_file *cf, frame_data *fd, struct wtap_pkthdr *phdr, guint8 *pd); #endif +#ifdef __cplusplus +} +#endif /* __cplusplus */ + #endif /* file.h */ + +/* + * Editor modelines - http://www.wireshark.org/tools/modelines.html + * + * Local variables: + * c-basic-offset: 4 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: + */