aboutsummaryrefslogtreecommitdiffstats
path: root/merge.h
blob: 933333c1468bb360f19b9f6030e3f03406c5fb64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/* merge.h
 * Definitions for menu routines with toolkit-independent APIs but
 * toolkit-dependent implementations.
 *
 * $Id: merge.h,v 1.4 2004/06/29 20:59:23 ulfl Exp $
 *
 * Ethereal - Network traffic analyzer
 * By Gerald Combs <gerald@ethereal.com>
 * Copyright 1998 Gerald Combs
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * 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.
 */

#ifndef __MERGE_H__
#define __MERGE_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/**
 * 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;
} merge_in_file_t;

/**
 * Structures to manage our output file.
 */
typedef struct merge_out_file_s {
  int          fd;
  wtap_dumper *pdh;
  int          file_type;
  int          frame_type;
  unsigned int snaplen;
  int          count;
} merge_out_file_t;

/** Verbosity levels. */
typedef enum {
    VERBOSE_NONE,
    VERBOSE_ERRORS,
    VERBOSE_ALL
} verbose_e;

/** Current verbosity level, default is VERBOSE_NONE. */
extern int merge_verbose;

/** Open a number of input files to merge.
 * 
 * @param in_file_count number of entries in in_file_names and in_files
 * @param in_file_names filenames of the input files
 * @param in_files input file array to be filled (>= sizeof(merge_in_file_t) * in_file_count)
 * @param err wiretap error, if failed
 * @return number of opened input files
 */
extern int
merge_open_in_files(int in_file_count, char *in_file_names[], merge_in_file_t *in_files[], int *err);

/** Close the input files again.
 * 
 * @param in_file_count number of entries in in_files
 * @param in_files input file array to be closed
 */
extern void
merge_close_in_files(int in_file_count, merge_in_file_t in_files[]);

/** Open the output file.
 * 
 * @param out_file the prefilled output file array
 * @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
 */
extern gboolean
merge_open_outfile(merge_out_file_t *out_file, int snapshot_len, int *err);

/** Close the output file again.
 * 
 * @param out_file the output file array
 */
extern void
merge_close_outfile(merge_out_file_t *out_file);

/** Try to get the frame type from the input files.
 * 
 * @param in_file_count number of entries in in_files
 * @param in_files input file array
 * @return the frame type
 */
extern int
merge_select_frame_type(int in_file_count, merge_in_file_t in_files[]);

/** Try to get the snapshot length from the input files.
 * 
 * @param in_file_count number of entries in in_files
 * @param in_files input file array
 * @return the snapshot length
 */
extern int
merge_max_snapshot_length(int in_file_count, merge_in_file_t in_files[]);

/** Merge the packets from the input files into the output file sorted chronologically.
 * 
 * @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 TRUE if function succeeded
 */
extern gboolean
merge_files(int in_file_count, merge_in_file_t in_files[], merge_out_file_t *out_file, int *err);

/** Append the packets from the input files into the output file.
 * 
 * @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 TRUE if function succeeded
 */
extern gboolean
merge_append_files(int in_file_count, merge_in_file_t in_files[], merge_out_file_t *out_file, int *err);


/*
 * Convenience function: merge any number of input files into one.
 *
 * @param out_filename the output filename
 * @param in_file_count number of input files
 * @param in_filenames array of input filenames
 * @param do_append TRUE to append, FALSE to merge chronologically
 * @param err wiretap error, if failed
 * @return TRUE if function succeeded
 */
extern gboolean
merge_n_files(int out_fd, int in_file_count, char **in_filenames, gboolean do_append, int *err);


#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __MERGE_H__ */