aboutsummaryrefslogtreecommitdiffstats
path: root/merge.h
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-10-29 00:36:52 +0000
committerGuy Harris <guy@alum.mit.edu>2004-10-29 00:36:52 +0000
commite09e12621adefe25905804de8ba7e2687c2c72f2 (patch)
treec12d542a15efb8683f2228ca69aff9142672b6a7 /merge.h
parent24f30a8850a1f11ae2470fd5124e827f443fa62b (diff)
The common merge code merely needs to offer the abstraction of routines
that return the next packet from a set of {chronologically sorted, sequential-by-file} packets; it doesn't need to have a loop over all those packets, or any code to write packets. Supply those abstractions, change the code that merges packets to do its own writing, and have the Ethereal version manage a progress bar and have the mergecap version print packet numbers in verbose mode, as the common merge code used to do. svn path=/trunk/; revision=12427
Diffstat (limited to 'merge.h')
-rw-r--r--merge.h89
1 files changed, 29 insertions, 60 deletions
diff --git a/merge.h b/merge.h
index fe7bf296e6..887e1b866c 100644
--- a/merge.h
+++ b/merge.h
@@ -29,27 +29,24 @@
extern "C" {
#endif /* __cplusplus */
+typedef enum {
+ PACKET_PRESENT,
+ PACKET_NOT_PRESENT,
+ AT_EOF,
+ GOT_ERROR
+} in_file_state_e;
+
/**
* Structures to manage our input files.
*/
typedef struct merge_in_file_s {
- const char *filename;
- wtap *wth;
- int err;
- gchar *err_info;
- long data_offset;
- gboolean ok;
+ const char *filename;
+ wtap *wth;
+ long data_offset;
+ in_file_state_e state;
+ long size; /* file size */
} merge_in_file_t;
-/**
- * Structures to manage our output file.
- */
-typedef struct merge_out_file_s {
- wtap_dumper *pdh;
- unsigned int snaplen;
- int count;
-} merge_out_file_t;
-
/** Open a number of input files to merge.
*
* @param in_file_count number of entries in in_file_names and in_files
@@ -73,29 +70,6 @@ merge_open_in_files(int in_file_count, char *const *in_file_names,
extern void
merge_close_in_files(int in_file_count, merge_in_file_t in_files[]);
-/** Open the output file.
- *
- * @param out_file the output file array, which we fill in
- * @param fd the file descriptor to use for the output file
- * @param file_type the file type to write
- * @param frame_type the frame type to write
- * @param snapshot_len the snapshot length of the output file
- * @param err wiretap error, if failed
- * @return TRUE, if the output file could be opened, and FALSE otherwise
- */
-extern gboolean
-merge_open_outfile(merge_out_file_t *out_file, int fd, int file_type,
- int frame_type, int snapshot_len, int *err);
-
-/** Close the output file again.
- *
- * @param out_file the output file array
- * @param err wiretap error, if failed
- * @return TRUE if the close succeeded, FALSE otherwise
- */
-extern gboolean
-merge_close_outfile(merge_out_file_t *out_file, int *err);
-
/** Try to get the frame type from the input files.
*
* @param in_file_count number of entries in in_files
@@ -114,39 +88,34 @@ merge_select_frame_type(int in_file_count, merge_in_file_t in_files[]);
extern int
merge_max_snapshot_length(int in_file_count, merge_in_file_t in_files[]);
-/*
- * Status from the merge-files routines.
- */
-typedef enum {
- MERGE_SUCCESS,
- MERGE_READ_ERROR,
- MERGE_WRITE_ERROR
-} merge_status_e;
-
-/** Merge the packets from the input files into the output file sorted chronologically.
+/** Read the next packet, in chronological order, from the set of files to
+ * be merged.
*
* @param in_file_count number of entries in in_files
* @param in_files input file array
- * @param out_file the output file array
* @param err wiretap error, if failed
- * @return MERGE_SUCCESS on success, MERGE_READ_ERROR on read error,
- * MERGE_WRITE_ERROR on write error
+ * @param err_info wiretap error string, if failed
+ * @return pointer to wtap for file from which that packet came, or NULL on
+ * error or EOF
*/
-extern merge_status_e
-merge_files(int in_file_count, merge_in_file_t in_files[], merge_out_file_t *out_file, int *err);
+extern wtap *
+merge_read_packet(int in_file_count, merge_in_file_t in_files[], int *err,
+ gchar **err_info);
-/** Append the packets from the input files into the output file.
+
+/** Read the next packet, in file sequence order, from the set of files
+ * to be merged.
*
* @param in_file_count number of entries in in_files
* @param in_files input file array
- * @param out_file the output file array
* @param err wiretap error, if failed
- * @return MERGE_SUCCESS on success, MERGE_READ_ERROR on read error,
- * MERGE_WRITE_ERROR on write error
+ * @param err_info wiretap error string, if failed
+ * @return pointer to wtap for file from which that packet came, or NULL on
+ * error or EOF
*/
-extern merge_status_e
-merge_append_files(int in_file_count, merge_in_file_t in_files[],
- merge_out_file_t *out_file, int *err);
+extern wtap *
+merge_append_read_packet(int in_file_count, merge_in_file_t in_files[],
+ int *err, gchar **err_info);
#ifdef __cplusplus
}