aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap/file_access.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2013-04-01 20:36:42 +0000
committerGuy Harris <guy@alum.mit.edu>2013-04-01 20:36:42 +0000
commit82a602d697b03314a11b3fd914dc7173fe18b293 (patch)
tree85adc187849d0ebcbcc2997db1edfab1ab15fd2f /wiretap/file_access.c
parent2deedfb1e1288e79341bf05704f0662c251897e7 (diff)
Define a collection of bits for different types of capture file comments.
For each capture file type, have a bitset of comment types supported by that capture file type. Add a Wiretap routine that, for a given file type, returns the bitset of comment types it supports. Have wtap_get_savable_file_types() take a bitset of comment types that need to be supported by the file types it returns. Replace cf_has_comments() with a routine that returns a bitset of capture file comment types in the capture file. Use those routines in the capture file dialogs; don't wire in the notion that pcap-NG supports all comment types and no other file formats support any comment types. (That's currently true, but we don't want to wire that in as being forever true.) svn path=/trunk/; revision=48689
Diffstat (limited to 'wiretap/file_access.c')
-rw-r--r--wiretap/file_access.c259
1 files changed, 170 insertions, 89 deletions
diff --git a/wiretap/file_access.c b/wiretap/file_access.c
index b8ad61b61a..3e1e8b8e4a 100644
--- a/wiretap/file_access.c
+++ b/wiretap/file_access.c
@@ -499,265 +499,330 @@ wtap_fdreopen(wtap *wth, const char *filename, int *err)
Entries must be sorted by WTAP_FILE_xxx values in ascending order */
static const struct file_type_info dump_open_table_base[] = {
/* WTAP_FILE_UNKNOWN (only used internally for initialization) */
- { NULL, NULL, NULL, NULL, FALSE, FALSE,
+ { NULL, NULL, NULL, NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_PCAP */
/* Gianluca Varenni suggests that we add "deprecated" to the description. */
- { "Wireshark/tcpdump/... - libpcap", "libpcap", "pcap", "cap;dmp", FALSE, FALSE,
+ { "Wireshark/tcpdump/... - libpcap", "libpcap", "pcap", "cap;dmp",
+ FALSE, FALSE, 0,
libpcap_dump_can_write_encap, libpcap_dump_open },
/* WTAP_FILE_PCAPNG */
- { "Wireshark - pcapng", "pcapng", "pcapng", "ntar", FALSE, TRUE,
+ { "Wireshark - pcapng", "pcapng", "pcapng", "ntar",
+ FALSE, TRUE, WTAP_COMMENT_PER_SECTION|WTAP_COMMENT_PER_INTERFACE|WTAP_COMMENT_PER_PACKET,
pcapng_dump_can_write_encap, pcapng_dump_open },
/* WTAP_FILE_PCAP_NSEC */
- { "Wireshark - nanosecond libpcap", "nseclibpcap", "pcap", "cap;dmp", FALSE, FALSE,
+ { "Wireshark - nanosecond libpcap", "nseclibpcap", "pcap", "cap;dmp",
+ FALSE, FALSE, 0,
libpcap_dump_can_write_encap, libpcap_dump_open },
/* WTAP_FILE_PCAP_AIX */
- { "AIX tcpdump - libpcap", "aixlibpcap", "pcap", "cap;dmp", FALSE, FALSE,
+ { "AIX tcpdump - libpcap", "aixlibpcap", "pcap", "cap;dmp",
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_PCAP_SS991029 */
- { "Modified tcpdump - libpcap", "modlibpcap", "pcap", "cap;dmp", FALSE, FALSE,
+ { "Modified tcpdump - libpcap", "modlibpcap", "pcap", "cap;dmp",
+ FALSE, FALSE, 0,
libpcap_dump_can_write_encap, libpcap_dump_open },
/* WTAP_FILE_PCAP_NOKIA */
- { "Nokia tcpdump - libpcap ", "nokialibpcap", "pcap", "cap;dmp", FALSE, FALSE,
+ { "Nokia tcpdump - libpcap ", "nokialibpcap", "pcap", "cap;dmp",
+ FALSE, FALSE, 0,
libpcap_dump_can_write_encap, libpcap_dump_open },
/* WTAP_FILE_PCAP_SS990417 */
- { "RedHat 6.1 tcpdump - libpcap", "rh6_1libpcap", "pcap", "cap;dmp", FALSE, FALSE,
+ { "RedHat 6.1 tcpdump - libpcap", "rh6_1libpcap", "pcap", "cap;dmp",
+ FALSE, FALSE, 0,
libpcap_dump_can_write_encap, libpcap_dump_open },
/* WTAP_FILE_PCAP_SS990915 */
- { "SuSE 6.3 tcpdump - libpcap", "suse6_3libpcap", "pcap", "cap;dmp", FALSE, FALSE,
+ { "SuSE 6.3 tcpdump - libpcap", "suse6_3libpcap", "pcap", "cap;dmp",
+ FALSE, FALSE, 0,
libpcap_dump_can_write_encap, libpcap_dump_open },
/* WTAP_FILE_5VIEWS */
- { "InfoVista 5View capture", "5views", "5vw", NULL, TRUE, FALSE,
+ { "InfoVista 5View capture", "5views", "5vw", NULL,
+ TRUE, FALSE, 0,
_5views_dump_can_write_encap, _5views_dump_open },
/* WTAP_FILE_IPTRACE_1_0 */
- { "AIX iptrace 1.0", "iptrace_1", NULL, NULL, FALSE, FALSE,
+ { "AIX iptrace 1.0", "iptrace_1", NULL, NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_IPTRACE_2_0 */
- { "AIX iptrace 2.0", "iptrace_2", NULL, NULL, FALSE, FALSE,
+ { "AIX iptrace 2.0", "iptrace_2", NULL, NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_BER */
- { "ASN.1 Basic Encoding Rules", "ber", NULL, NULL, FALSE, FALSE,
- NULL, NULL },
+ { "ASN.1 Basic Encoding Rules", "ber", NULL, NULL,
+ FALSE, FALSE, 0,
+ NULL, NULL },
/* WTAP_FILE_HCIDUMP */
- { "Bluetooth HCI dump", "hcidump", NULL, NULL, FALSE, FALSE,
+ { "Bluetooth HCI dump", "hcidump", NULL, NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_CATAPULT_DCT2000 */
- { "Catapult DCT2000 trace (.out format)", "dct2000", "out", NULL, FALSE, FALSE,
+ { "Catapult DCT2000 trace (.out format)", "dct2000", "out", NULL,
+ FALSE, FALSE, 0,
catapult_dct2000_dump_can_write_encap, catapult_dct2000_dump_open },
/* WTAP_FILE_NETXRAY_OLD */
- { "Cinco Networks NetXRay 1.x", "netxray1", "cap", NULL, TRUE, FALSE,
+ { "Cinco Networks NetXRay 1.x", "netxray1", "cap", NULL,
+ TRUE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_NETXRAY_1_0 */
- { "Cinco Networks NetXRay 2.0 or later", "netxray2", "cap", NULL, TRUE, FALSE,
+ { "Cinco Networks NetXRay 2.0 or later", "netxray2", "cap", NULL,
+ TRUE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_COSINE */
- { "CoSine IPSX L2 capture", "cosine", "txt", NULL, FALSE, FALSE,
+ { "CoSine IPSX L2 capture", "cosine", "txt", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_CSIDS */
- { "CSIDS IPLog", "csids", NULL, NULL, FALSE, FALSE,
+ { "CSIDS IPLog", "csids", NULL, NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_DBS_ETHERWATCH */
- { "DBS Etherwatch (VMS)", "etherwatch", "txt", NULL, FALSE, FALSE,
+ { "DBS Etherwatch (VMS)", "etherwatch", "txt", NULL,
+ FALSE, FALSE, 0,
NULL, NULL},
/* WTAP_FILE_ERF */
- { "Endace ERF capture", "erf", "erf", NULL, FALSE, FALSE,
+ { "Endace ERF capture", "erf", "erf", NULL,
+ FALSE, FALSE, 0,
erf_dump_can_write_encap, erf_dump_open },
/* WTAP_FILE_EYESDN */
- { "EyeSDN USB S0/E1 ISDN trace format", "eyesdn", "trc", NULL, FALSE, FALSE,
+ { "EyeSDN USB S0/E1 ISDN trace format", "eyesdn", "trc", NULL,
+ FALSE, FALSE, 0,
eyesdn_dump_can_write_encap, eyesdn_dump_open },
/* WTAP_FILE_NETTL */
- { "HP-UX nettl trace", "nettl", "trc0", "trc1", FALSE, FALSE,
+ { "HP-UX nettl trace", "nettl", "trc0", "trc1",
+ FALSE, FALSE, 0,
nettl_dump_can_write_encap, nettl_dump_open },
/* WTAP_FILE_ISERIES */
- { "IBM iSeries comm. trace (ASCII)", "iseries_ascii", "txt", NULL, FALSE, FALSE,
+ { "IBM iSeries comm. trace (ASCII)", "iseries_ascii", "txt", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_ISERIES_UNICODE */
- { "IBM iSeries comm. trace (UNICODE)", "iseries_unicode", "txt", NULL, FALSE, FALSE,
+ { "IBM iSeries comm. trace (UNICODE)", "iseries_unicode", "txt", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_I4BTRACE */
- { "I4B ISDN trace", "i4btrace", NULL, NULL, FALSE, FALSE,
+ { "I4B ISDN trace", "i4btrace", NULL, NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_ASCEND */
- { "Lucent/Ascend access server trace", "ascend", "txt", NULL, FALSE, FALSE,
+ { "Lucent/Ascend access server trace", "ascend", "txt", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_NETMON_1_x */
- { "Microsoft NetMon 1.x", "netmon1", "cap", NULL, TRUE, FALSE,
+ { "Microsoft NetMon 1.x", "netmon1", "cap", NULL,
+ TRUE, FALSE, 0,
netmon_dump_can_write_encap_1_x, netmon_dump_open },
/* WTAP_FILE_NETMON_2_x */
- { "Microsoft NetMon 2.x", "netmon2", "cap", NULL, TRUE, FALSE,
+ { "Microsoft NetMon 2.x", "netmon2", "cap", NULL,
+ TRUE, FALSE, 0,
netmon_dump_can_write_encap_2_x, netmon_dump_open },
/* WTAP_FILE_NGSNIFFER_UNCOMPRESSED */
- { "NA Sniffer (DOS)", "ngsniffer", "cap", "enc;trc;fdc;syc", FALSE, FALSE,
+ { "NA Sniffer (DOS)", "ngsniffer", "cap", "enc;trc;fdc;syc",
+ FALSE, FALSE, 0,
ngsniffer_dump_can_write_encap, ngsniffer_dump_open },
/* WTAP_FILE_NGSNIFFER_COMPRESSED */
- { "NA Sniffer (DOS), compressed", "ngsniffer_comp", "caz", NULL, FALSE, FALSE,
+ { "NA Sniffer (DOS), compressed", "ngsniffer_comp", "caz", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_NETXRAY_1_1 */
- { "NA Sniffer (Windows) 1.1", "ngwsniffer_1_1", "cap", NULL, TRUE, FALSE,
+ { "NA Sniffer (Windows) 1.1", "ngwsniffer_1_1", "cap", NULL,
+ TRUE, FALSE, 0,
netxray_dump_can_write_encap_1_1, netxray_dump_open_1_1 },
/* WTAP_FILE_NETXRAY_2_00x */
- { "NA Sniffer (Windows) 2.00x", "ngwsniffer_2_0", "cap", NULL, TRUE, FALSE,
+ { "NA Sniffer (Windows) 2.00x", "ngwsniffer_2_0", "cap", NULL,
+ TRUE, FALSE, 0,
netxray_dump_can_write_encap_2_0, netxray_dump_open_2_0 },
/* WTAP_FILE_NETWORK_INSTRUMENTS */
- { "Network Instruments Observer", "niobserver", "bfr", NULL, FALSE, FALSE,
+ { "Network Instruments Observer", "niobserver", "bfr", NULL,
+ FALSE, FALSE, 0,
network_instruments_dump_can_write_encap, network_instruments_dump_open },
/* WTAP_FILE_LANALYZER */
- { "Novell LANalyzer","lanalyzer", "tr1", NULL, TRUE, FALSE,
+ { "Novell LANalyzer","lanalyzer", "tr1", NULL,
+ TRUE, FALSE, 0,
lanalyzer_dump_can_write_encap, lanalyzer_dump_open },
/* WTAP_FILE_PPPDUMP */
- { "pppd log (pppdump format)", "pppd", NULL, NULL, FALSE, FALSE,
+ { "pppd log (pppdump format)", "pppd", NULL, NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_RADCOM */
- { "RADCOM WAN/LAN analyzer", "radcom", NULL, NULL, FALSE, FALSE,
+ { "RADCOM WAN/LAN analyzer", "radcom", NULL, NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_SNOOP */
- { "Sun snoop", "snoop", "snoop", "cap", FALSE, FALSE,
+ { "Sun snoop", "snoop", "snoop", "cap",
+ FALSE, FALSE, 0,
snoop_dump_can_write_encap, snoop_dump_open },
/* WTAP_FILE_SHOMITI */
- { "Shomiti/Finisar Surveyor", "shomiti", "cap", NULL, FALSE, FALSE,
+ { "Shomiti/Finisar Surveyor", "shomiti", "cap", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_VMS */
- { "TCPIPtrace (VMS)", "tcpiptrace", "txt", NULL, FALSE, FALSE,
+ { "TCPIPtrace (VMS)", "tcpiptrace", "txt", NULL,
+ FALSE, FALSE, 0,
NULL, NULL},
/* WTAP_FILE_K12 */
- { "Tektronix K12xx 32-bit .rf5 format", "rf5", "rf5", NULL, TRUE, FALSE,
- k12_dump_can_write_encap, k12_dump_open },
+ { "Tektronix K12xx 32-bit .rf5 format", "rf5", "rf5", NULL,
+ TRUE, FALSE, 0,
+ k12_dump_can_write_encap, k12_dump_open },
/* WTAP_FILE_TOSHIBA */
- { "Toshiba Compact ISDN Router snoop", "toshiba", "txt", NULL, FALSE, FALSE,
+ { "Toshiba Compact ISDN Router snoop", "toshiba", "txt", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_VISUAL_NETWORKS */
- { "Visual Networks traffic capture", "visual", NULL, NULL, TRUE, FALSE,
+ { "Visual Networks traffic capture", "visual", NULL, NULL,
+ TRUE, FALSE, 0,
visual_dump_can_write_encap, visual_dump_open },
/* WTAP_FILE_PEEKCLASSIC_V56 */
- { "WildPackets classic (V5 and V6)", "peekclassic56", "pkt", "tpc;apc;wpz", FALSE, FALSE,
+ { "WildPackets classic (V5 and V6)", "peekclassic56", "pkt", "tpc;apc;wpz",
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_PEEKCLASSIC_V7 */
- { "WildPackets classic (V7)", "peekclassic7", "pkt", "tpc;apc;wpz", FALSE, FALSE,
+ { "WildPackets classic (V7)", "peekclassic7", "pkt", "tpc;apc;wpz",
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_PEEKTAGGED */
- { "WildPackets tagged", "peektagged", "pkt", "tpc;apc;wpz", FALSE, FALSE,
+ { "WildPackets tagged", "peektagged", "pkt", "tpc;apc;wpz",
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_MPEG */
- { "MPEG", "mpeg", "mpeg", "mpg;mp3", FALSE, FALSE,
+ { "MPEG", "mpeg", "mpeg", "mpg;mp3",
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_K12TEXT */
- { "K12 text file", "k12text", "txt", NULL, FALSE, FALSE,
+ { "K12 text file", "k12text", "txt", NULL,
+ FALSE, FALSE, 0,
k12text_dump_can_write_encap, k12text_dump_open },
/* WTAP_FILE_NETSCREEN */
- { "NetScreen snoop text file", "netscreen", "txt", NULL, FALSE, FALSE,
+ { "NetScreen snoop text file", "netscreen", "txt", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_COMMVIEW */
- { "TamoSoft CommView", "commview", "ncf", NULL, FALSE, FALSE,
+ { "TamoSoft CommView", "commview", "ncf", NULL,
+ FALSE, FALSE, 0,
commview_dump_can_write_encap, commview_dump_open },
/* WTAP_FILE_BTSNOOP */
- { "Symbian OS btsnoop", "btsnoop", "log", NULL, FALSE, FALSE,
+ { "Symbian OS btsnoop", "btsnoop", "log", NULL,
+ FALSE, FALSE, 0,
btsnoop_dump_can_write_encap, btsnoop_dump_open_h4 },
/* WTAP_FILE_TNEF */
- { "Transport-Neutral Encapsulation Format", "tnef", NULL, NULL, FALSE, FALSE,
+ { "Transport-Neutral Encapsulation Format", "tnef", NULL, NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_DCT3TRACE */
- { "Gammu DCT3 trace", "dct3trace", "xml", NULL, FALSE, FALSE,
+ { "Gammu DCT3 trace", "dct3trace", "xml", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_PACKETLOGGER */
- { "PacketLogger", "pklg", "pklg", NULL, FALSE, FALSE,
+ { "PacketLogger", "pklg", "pklg", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_DAINTREE_SNA */
- { "Daintree SNA", "dsna", "dcf", NULL, FALSE, FALSE,
+ { "Daintree SNA", "dsna", "dcf", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_NETSCALER_1_0 */
- { "NetScaler Trace (Version 1.0)", "nstrace10", NULL, NULL, TRUE, FALSE,
+ { "NetScaler Trace (Version 1.0)", "nstrace10", NULL, NULL,
+ TRUE, FALSE, 0,
nstrace_10_dump_can_write_encap, nstrace_dump_open },
/* WTAP_FILE_NETSCALER_2_0 */
- { "NetScaler Trace (Version 2.0)", "nstrace20", "cap", NULL, TRUE, FALSE,
+ { "NetScaler Trace (Version 2.0)", "nstrace20", "cap", NULL,
+ TRUE, FALSE, 0,
nstrace_20_dump_can_write_encap, nstrace_dump_open },
/* WTAP_FILE_JPEG_JFIF */
- { "JPEG/JFIF", "jpeg", "jpg", "jpeg;jfif", FALSE, FALSE,
+ { "JPEG/JFIF", "jpeg", "jpg", "jpeg;jfif",
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_IPFIX */
- { "IPFIX File Format", "ipfix", "pfx", "ipfix", FALSE, FALSE,
+ { "IPFIX File Format", "ipfix", "pfx", "ipfix",
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_ENCAP_MIME */
- { "MIME File Format", "mime", NULL, NULL, FALSE, FALSE,
+ { "MIME File Format", "mime", NULL, NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_AETHRA */
- { "Aethra .aps file", "aethra", "aps", NULL, FALSE, FALSE,
+ { "Aethra .aps file", "aethra", "aps", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_MPEG_2_TS */
- { "MPEG2 transport stream", "mp2t", "mp2t", "ts;mpg", FALSE, FALSE,
+ { "MPEG2 transport stream", "mp2t", "mp2t", "ts;mpg",
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_VWR_80211 */
- { "Ixia IxVeriWave .vwr Raw 802.11 Capture", "vwr80211", "*.vwr", ".vwr", FALSE, FALSE,
+ { "Ixia IxVeriWave .vwr Raw 802.11 Capture", "vwr80211", "vwr", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_VWR_ETH */
- { "Ixia IxVeriWave .vwr Raw Ethernet Capture", "vwreth", "*.vwr", ".vwr", FALSE, FALSE,
+ { "Ixia IxVeriWave .vwr Raw Ethernet Capture", "vwreth", "vwr", NULL,
+ FALSE, FALSE, 0,
NULL, NULL },
/* WTAP_FILE_CAMINS */
- { "CAM Inspector file", "camins", "camins", NULL, FALSE, FALSE, NULL, NULL }
-
+ { "CAM Inspector file", "camins", "camins", NULL,
+ FALSE, FALSE, 0,
+ NULL, NULL }
};
gint wtap_num_file_types = sizeof(dump_open_table_base) / sizeof(struct file_type_info);
@@ -850,13 +915,14 @@ wtap_dump_can_write_encaps(int ft, const GArray *file_encaps)
return TRUE;
}
-/*
+/**
* Get a GArray of WTAP_FILE_ values for file types that can be used
* to save a file of a given type with a given GArray of WTAP_ENCAP_
- * types.
+ * types and the given bitmask of comment types.
*/
GArray *
-wtap_get_savable_file_types(int file_type, const GArray *file_encaps)
+wtap_get_savable_file_types(int file_type, const GArray *file_encaps,
+ guint32 required_comment_types)
{
GArray *savable_file_types;
int ft;
@@ -864,22 +930,18 @@ wtap_get_savable_file_types(int file_type, const GArray *file_encaps)
int other_file_type = -1;
/* Can we save this file in its own file type? */
- if (wtap_dump_can_write_encaps(file_type, file_encaps)) {
+ if (wtap_dump_can_write_encaps(file_type, file_encaps) &&
+ wtap_dump_supports_comment_types(file_type, required_comment_types)) {
/* Yes - make that the default file type. */
default_file_type = file_type;
} else {
- /* No - can we save it as a pcap-NG file? */
- if (wtap_dump_can_write_encaps(WTAP_FILE_PCAPNG, file_encaps)) {
- /* Yes - default to pcap-NG, instead. */
- default_file_type = WTAP_FILE_PCAPNG;
- } else {
- /* OK, find the first file type we *can* save it as. */
- default_file_type = -1;
- for (ft = 0; ft < WTAP_NUM_FILE_TYPES; ft++) {
- if (wtap_dump_can_write_encaps(ft, file_encaps)) {
- /* OK, got it. */
- default_file_type = ft;
- }
+ /* OK, find the first file type we *can* save it as. */
+ default_file_type = -1;
+ for (ft = 0; ft < WTAP_NUM_FILE_TYPES; ft++) {
+ if (wtap_dump_can_write_encaps(ft, file_encaps) &&
+ wtap_dump_supports_comment_types(ft, required_comment_types)) {
+ /* OK, got it. */
+ default_file_type = ft;
}
}
}
@@ -895,13 +957,17 @@ wtap_get_savable_file_types(int file_type, const GArray *file_encaps)
/* Put the default file format first in the list. */
g_array_append_val(savable_file_types, default_file_type);
- /* If it's pcap, put pcap-NG right after it; otherwise, if it's
- pcap-NG, put pcap right after it. */
+ /* If the default is pcap, put pcap-NG right after it if we can
+ also write it in pcap-NG format; otherwise, if the default is
+ pcap-NG, put pcap right after it if we can also write it in
+ pcap format. */
if (default_file_type == WTAP_FILE_PCAP) {
- if (wtap_dump_can_write_encaps(WTAP_FILE_PCAPNG, file_encaps))
+ if (wtap_dump_can_write_encaps(WTAP_FILE_PCAPNG, file_encaps) &&
+ wtap_dump_supports_comment_types(WTAP_FILE_PCAPNG, required_comment_types))
other_file_type = WTAP_FILE_PCAPNG;
} else if (default_file_type == WTAP_FILE_PCAPNG) {
- if (wtap_dump_can_write_encaps(WTAP_FILE_PCAP, file_encaps))
+ if (wtap_dump_can_write_encaps(WTAP_FILE_PCAP, file_encaps) &&
+ wtap_dump_supports_comment_types(WTAP_FILE_PCAP, required_comment_types))
other_file_type = WTAP_FILE_PCAP;
}
if (other_file_type != -1)
@@ -913,7 +979,8 @@ wtap_get_savable_file_types(int file_type, const GArray *file_encaps)
continue; /* not a real file type */
if (ft == default_file_type || ft == other_file_type)
continue; /* we've already done this one */
- if (wtap_dump_can_write_encaps(ft, file_encaps)) {
+ if (wtap_dump_can_write_encaps(ft, file_encaps) &&
+ wtap_dump_supports_comment_types(ft, required_comment_types)) {
/* OK, we can write it out in this type. */
g_array_append_val(savable_file_types, ft);
}
@@ -1126,6 +1193,20 @@ gboolean wtap_dump_has_name_resolution(int filetype)
return TRUE;
}
+gboolean wtap_dump_supports_comment_types(int filetype, guint32 comment_types)
+{
+ guint32 supported_comment_types;
+
+ if (filetype < 0 || filetype >= wtap_num_file_types)
+ return FALSE;
+
+ supported_comment_types = dump_open_table[filetype].supported_comment_types;
+
+ if ((comment_types & supported_comment_types) == comment_types)
+ return TRUE;
+ return FALSE;
+}
+
static gboolean wtap_dump_open_check(int filetype, int encap, gboolean comressed, int *err);
static wtap_dumper* wtap_dump_alloc_wdh(int filetype, int encap, int snaplen,
gboolean compressed, int *err);