+ fprintf(stderr, "mergecap: The available IDB merge modes for the \"-I\" flag are:\n");
+ for (i = 0; i < IDB_MERGE_MODE_MAX; i++) {
+ fprintf(stderr, " %s\n", merge_idb_merge_mode_to_string(i));
+ }
+}
+
+static gboolean
+merge_callback(merge_event event, int num,
+ const merge_in_file_t in_files[], const guint in_file_count,
+ void *data _U_)
+{
+ guint i;
+
+ switch (event) {
+
+ case MERGE_EVENT_INPUT_FILES_OPENED:
+ for (i = 0; i < in_file_count; i++) {
+ fprintf(stderr, "mergecap: %s is type %s.\n", in_files[i].filename,
+ wtap_file_type_subtype_string(wtap_file_type_subtype(in_files[i].wth)));
+ }
+ break;
+
+ case MERGE_EVENT_FRAME_TYPE_SELECTED:
+ /* for this event, num = frame_type */
+ if (num == WTAP_ENCAP_PER_PACKET) {
+ /*
+ * Find out why we had to choose WTAP_ENCAP_PER_PACKET.
+ */
+ int first_frame_type, this_frame_type;
+
+ first_frame_type = wtap_file_encap(in_files[0].wth);
+ for (i = 1; i < in_file_count; i++) {
+ this_frame_type = wtap_file_encap(in_files[i].wth);
+ if (first_frame_type != this_frame_type) {
+ fprintf(stderr, "mergecap: multiple frame encapsulation types detected\n");
+ fprintf(stderr, " defaulting to WTAP_ENCAP_PER_PACKET\n");
+ fprintf(stderr, " %s had type %s (%s)\n",
+ in_files[0].filename,
+ wtap_encap_description(first_frame_type),
+ wtap_encap_name(first_frame_type));
+ fprintf(stderr, " %s had type %s (%s)\n",
+ in_files[i].filename,
+ wtap_encap_description(this_frame_type),
+ wtap_encap_name(this_frame_type));
+ break;
+ }
+ }
+ }
+ fprintf(stderr, "mergecap: selected frame_type %s (%s)\n",
+ wtap_encap_description(num),
+ wtap_encap_name(num));
+ break;
+
+ case MERGE_EVENT_READY_TO_MERGE:
+ fprintf(stderr, "mergecap: ready to merge records\n");
+ break;
+
+ case MERGE_EVENT_RECORD_WAS_READ:
+ /* for this event, num = count */
+ fprintf(stderr, "Record: %d\n", num);
+ break;
+
+ case MERGE_EVENT_DONE:
+ fprintf(stderr, "mergecap: merging complete\n");
+ break;
+ }
+
+ /* false = do not stop merging */
+ return FALSE;