From 910438b17f3f8b9ca9cfdbb87b3daf49dd7eb9a0 Mon Sep 17 00:00:00 2001 From: Hadriel Kaplan Date: Mon, 20 Jul 2015 10:35:06 -0400 Subject: Pcapng: support Name Resolution Block options Make pcapng decode options in an NRB during read, and store the comment option, and write it back out as well. Also make it handle plugin handlers for unknown options in received NRB(s). Change-Id: I81863ef8d85cb1c8b5ba6673ba0e562efe77714f Reviewed-on: https://code.wireshark.org/review/9723 Petri-Dish: Hadriel Kaplan Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman --- ui/gtk/file_import_dlg.c | 4 +++- ui/qt/resolved_addresses_dialog.cpp | 30 ++++++++++++++++++++++++++++++ ui/qt/resolved_addresses_dialog.h | 2 ++ ui/qt/resolved_addresses_dialog.ui | 14 ++++++++++++++ ui/tap_export_pdu.c | 4 +++- 5 files changed, 52 insertions(+), 2 deletions(-) (limited to 'ui') diff --git a/ui/gtk/file_import_dlg.c b/ui/gtk/file_import_dlg.c index fd7e2f5d8c..06e3a5790b 100644 --- a/ui/gtk/file_import_dlg.c +++ b/ui/gtk/file_import_dlg.c @@ -518,7 +518,9 @@ file_import_open(text_import_info_t *info) g_array_append_val(idb_inf->interface_data, int_data); - info->wdh = wtap_dump_fdopen_ng(import_file_fd, WTAP_FILE_TYPE_SUBTYPE_PCAPNG, info->encapsulation, info->max_frame_length, FALSE, shb_hdr, idb_inf, &err); + info->wdh = wtap_dump_fdopen_ng(import_file_fd, WTAP_FILE_TYPE_SUBTYPE_PCAPNG, info->encapsulation, + info->max_frame_length, FALSE, + shb_hdr, idb_inf, NULL, &err); if (info->wdh == NULL) { open_failure_alert_box(capfile_name, err, TRUE); fclose(info->import_text_file); diff --git a/ui/qt/resolved_addresses_dialog.cpp b/ui/qt/resolved_addresses_dialog.cpp index 43334e2c5b..f9f06a189d 100644 --- a/ui/qt/resolved_addresses_dialog.cpp +++ b/ui/qt/resolved_addresses_dialog.cpp @@ -29,6 +29,7 @@ #include "file.h" #include "epan/addr_resolv.h" +#include #include #include @@ -193,6 +194,14 @@ ResolvedAddressesDialog::ResolvedAddressesDialog(QWidget *parent, CaptureFile *c ui->plainTextEdit->setWordWrapMode(QTextOption::NoWrap); ui->plainTextEdit->setTabStopWidth(ui->plainTextEdit->fontMetrics().averageCharWidth() * 8); + if (capture_file->isValid()) { + wtap* wth = capture_file->capFile()->wth; + if (wth) { + // might return null + comment_ = wtap_get_nrb_comment(wth); + } + } + GHashTable *ipv4_hash_table = get_ipv4_hash_table(); if (ipv4_hash_table) { g_hash_table_foreach(ipv4_hash_table, ipv4_hash_table_resolved_to_qstringlist, &host_addresses_); @@ -265,6 +274,7 @@ void ResolvedAddressesDialog::fillShowMenu() show_menu->clear(); show_menu->addAction(ui->actionAddressesHosts); + show_menu->addAction(ui->actionComment); show_menu->addAction(ui->actionIPv4HashTable); show_menu->addAction(ui->actionIPv6HashTable); show_menu->addAction(ui->actionPortNames); @@ -285,6 +295,19 @@ void ResolvedAddressesDialog::fillBlocks() QString lines; ui->plainTextEdit->appendPlainText(tr("# Resolved addresses found in %1").arg(file_name_)); + if (ui->actionComment->isChecked()) { + lines = "\n"; + lines.append(tr("# Comments\n#\n# ")); + if (!comment_.isEmpty()) { + lines.append("\n\n"); + lines.append(comment_); + lines.append("\n"); + } else { + lines.append(no_entries_); + } + ui->plainTextEdit->appendPlainText(lines); + } + if (ui->actionAddressesHosts->isChecked()) { lines = "\n"; lines.append(tr("# Hosts\n#\n# ")); @@ -385,6 +408,11 @@ void ResolvedAddressesDialog::on_actionAddressesHosts_triggered() fillBlocks(); } +void ResolvedAddressesDialog::on_actionComment_triggered() +{ + fillBlocks(); +} + void ResolvedAddressesDialog::on_actionIPv4HashTable_triggered() { fillBlocks(); @@ -418,6 +446,7 @@ void ResolvedAddressesDialog::on_actionEthernetWKA_triggered() void ResolvedAddressesDialog::on_actionShowAll_triggered() { ui->actionAddressesHosts->setChecked(true); + ui->actionComment->setChecked(true); ui->actionIPv4HashTable->setChecked(true); ui->actionIPv6HashTable->setChecked(true); ui->actionPortNames->setChecked(true); @@ -431,6 +460,7 @@ void ResolvedAddressesDialog::on_actionShowAll_triggered() void ResolvedAddressesDialog::on_actionHideAll_triggered() { ui->actionAddressesHosts->setChecked(false); + ui->actionComment->setChecked(false); ui->actionIPv4HashTable->setChecked(false); ui->actionIPv6HashTable->setChecked(false); ui->actionPortNames->setChecked(false); diff --git a/ui/qt/resolved_addresses_dialog.h b/ui/qt/resolved_addresses_dialog.h index 01aef1e4a0..d268b28017 100644 --- a/ui/qt/resolved_addresses_dialog.h +++ b/ui/qt/resolved_addresses_dialog.h @@ -44,6 +44,7 @@ protected slots: private slots: void on_actionAddressesHosts_triggered(); + void on_actionComment_triggered(); void on_actionIPv4HashTable_triggered(); void on_actionIPv6HashTable_triggered(); void on_actionPortNames_triggered(); @@ -57,6 +58,7 @@ private slots: private: Ui::ResolvedAddressesDialog *ui; QString file_name_; + QString comment_; QStringList host_addresses_; QStringList v4_hash_addrs_; QStringList v6_hash_addrs_; diff --git a/ui/qt/resolved_addresses_dialog.ui b/ui/qt/resolved_addresses_dialog.ui index 7e174085ac..c5ab5c6946 100644 --- a/ui/qt/resolved_addresses_dialog.ui +++ b/ui/qt/resolved_addresses_dialog.ui @@ -28,6 +28,20 @@ + + + true + + + true + + + Comment + + + Show the comment. + + true diff --git a/ui/tap_export_pdu.c b/ui/tap_export_pdu.c index 7a315a8b29..0055c1290f 100644 --- a/ui/tap_export_pdu.c +++ b/ui/tap_export_pdu.c @@ -163,7 +163,9 @@ exp_pdu_file_open(exp_pdu_t *exp_pdu_tap_data) g_array_append_val(idb_inf->interface_data, int_data); - exp_pdu_tap_data->wdh = wtap_dump_fdopen_ng(import_file_fd, WTAP_FILE_TYPE_SUBTYPE_PCAPNG, WTAP_ENCAP_WIRESHARK_UPPER_PDU, WTAP_MAX_PACKET_SIZE, FALSE, shb_hdr, idb_inf, &err); + exp_pdu_tap_data->wdh = wtap_dump_fdopen_ng(import_file_fd, WTAP_FILE_TYPE_SUBTYPE_PCAPNG, + WTAP_ENCAP_WIRESHARK_UPPER_PDU, WTAP_MAX_PACKET_SIZE, + FALSE, shb_hdr, idb_inf, NULL, &err); if (exp_pdu_tap_data->wdh == NULL) { open_failure_alert_box(capfile_name, err, TRUE); goto end; -- cgit v1.2.1