aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2016-07-18 16:04:22 -0700
committerGuy Harris <guy@alum.mit.edu>2016-07-18 23:04:59 +0000
commite5fa40ab31fd127b4ad005448b6676fe9517a755 (patch)
tree3b3f84647819cce889f9049d48865e6542380580
parent6df8e83e5754a883e768573a0bae8199f1c8fb9c (diff)
Mark the file as having unsaved data if you change address resolution.
That information can, and will, get saved in some file formats, so mark the file as changed so it can and will get saved by "Save". XXX - we need to treat it as a type of data that can be discarded when saving in some file formats, just like comments. Bug: 12629 Change-Id: I1fd69b95f4f7345c339961b4c53c28b98b364e4e Reviewed-on: https://code.wireshark.org/review/16538 Reviewed-by: Guy Harris <guy@alum.mit.edu>
-rw-r--r--file.c18
-rw-r--r--file.h10
-rw-r--r--ui/gtk/manual_addr_resolv.c3
-rw-r--r--ui/qt/address_editor_frame.cpp29
-rw-r--r--ui/qt/address_editor_frame.h1
5 files changed, 47 insertions, 14 deletions
diff --git a/file.c b/file.c
index 9ab2854436..73eef29fe8 100644
--- a/file.c
+++ b/file.c
@@ -3977,6 +3977,24 @@ cf_comment_types(capture_file *cf)
return comment_types;
}
+/*
+ * Add a resolved address to this file's list of resolved addresses.
+ */
+gboolean
+cf_add_ip_name_from_string(capture_file *cf, const char *addr, const char *name)
+{
+ /*
+ * XXX - support multiple resolved address lists, and add to the one
+ * attached to this file?
+ */
+ if (!add_ip_name_from_string(addr, name))
+ return FALSE;
+
+ /* OK, we have unsaved changes. */
+ cf->unsaved_changes = TRUE;
+ return TRUE;
+}
+
#ifdef WANT_PACKET_EDITOR
static gint
g_direct_compare_func(gconstpointer a, gconstpointer b, gpointer user_data _U_)
diff --git a/file.h b/file.h
index 8a54cdefef..65354e7d47 100644
--- a/file.h
+++ b/file.h
@@ -696,6 +696,16 @@ gboolean cf_set_user_packet_comment(capture_file *cf, frame_data *fd, const gcha
*/
guint32 cf_comment_types(capture_file *cf);
+/**
+ * Add a resolved address to this file's list of resolved addresses.
+ *
+ * @param cf the capture file
+ * @param addr a string representing an IPv4 or IPv6 address
+ * @param name a string containing a name corresponding to that address
+ * @return TRUE if it succeeds, FALSE if not
+ */
+gboolean cf_add_ip_name_from_string(capture_file *cf, const char *addr, const char *name);
+
#ifdef WANT_PACKET_EDITOR
/**
* Give a frame new, edited data.
diff --git a/ui/gtk/manual_addr_resolv.c b/ui/gtk/manual_addr_resolv.c
index 0fae93da27..085dc0637c 100644
--- a/ui/gtk/manual_addr_resolv.c
+++ b/ui/gtk/manual_addr_resolv.c
@@ -62,7 +62,7 @@ man_addr_resolv_ok(GtkWidget *w _U_, gpointer data _U_)
name = gtk_entry_get_text(GTK_ENTRY(name_te));
if (strlen(addr) && strlen(name)) {
- if (!add_ip_name_from_string(addr, name)) {
+ if (!cf_add_ip_name_from_string(&cfile, addr, name)) {
GtkWidget *dialog = (GtkWidget *)simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
"Illegal IP address: \"%s\".", addr);
simple_dialog_set_cb(dialog, man_addr_ill_addr_cb, NULL);
@@ -70,6 +70,7 @@ man_addr_resolv_ok(GtkWidget *w _U_, gpointer data _U_)
return;
} else {
redissect = TRUE;
+ main_update_for_unsaved_changes(&cfile);
}
}
g_free(addr);
diff --git a/ui/qt/address_editor_frame.cpp b/ui/qt/address_editor_frame.cpp
index cb27144615..49e3fa1217 100644
--- a/ui/qt/address_editor_frame.cpp
+++ b/ui/qt/address_editor_frame.cpp
@@ -42,7 +42,8 @@
AddressEditorFrame::AddressEditorFrame(QWidget *parent) :
AccordionFrame(parent),
- ui(new Ui::AddressEditorFrame)
+ ui(new Ui::AddressEditorFrame),
+ cap_file_(NULL)
{
ui->setupUi(this);
@@ -60,12 +61,14 @@ AddressEditorFrame::~AddressEditorFrame()
void AddressEditorFrame::editAddresses(CaptureFile &cf, int column)
{
- if (!cf.capFile()->current_frame) {
+ cap_file_ = cf.capFile();
+
+ if (!cap_file_->current_frame) {
on_buttonBox_rejected();
return;
}
- if (!cf_read_record(cf.capFile(), cf.capFile()->current_frame)) {
+ if (!cf_read_record(cap_file_, cap_file_->current_frame)) {
on_buttonBox_rejected();
return; // error reading the frame
}
@@ -75,22 +78,22 @@ void AddressEditorFrame::editAddresses(CaptureFile &cf, int column)
ui->addressComboBox->clear();
- epan_dissect_init(&edt, cf.capFile()->epan, FALSE, FALSE);
- col_custom_prime_edt(&edt, &cf.capFile()->cinfo);
+ epan_dissect_init(&edt, cap_file_->epan, FALSE, FALSE);
+ col_custom_prime_edt(&edt, &cap_file_->cinfo);
- epan_dissect_run(&edt, cf.capFile()->cd_t, &cf.capFile()->phdr,
- frame_tvbuff_new_buffer(cf.capFile()->current_frame, &cf.capFile()->buf), cf.capFile()->current_frame, &cf.capFile()->cinfo);
+ epan_dissect_run(&edt, cap_file_->cd_t, &cap_file_->phdr,
+ frame_tvbuff_new_buffer(cap_file_->current_frame, &cap_file_->buf), cap_file_->current_frame, &cap_file_->cinfo);
epan_dissect_fill_in_columns(&edt, TRUE, TRUE);
/* First check selected column */
- if (isAddressColumn(&cf.capFile()->cinfo, column)) {
- addresses << cf.capFile()->cinfo.col_expr.col_expr_val[column];
+ if (isAddressColumn(&cap_file_->cinfo, column)) {
+ addresses << cap_file_->cinfo.col_expr.col_expr_val[column];
}
- for (int col = 0; col < cf.capFile()->cinfo.num_cols; col++) {
+ for (int col = 0; col < cap_file_->cinfo.num_cols; col++) {
/* Then check all columns except the selected */
- if ((col != column) && (isAddressColumn(&cf.capFile()->cinfo, col))) {
- addresses << cf.capFile()->cinfo.col_expr.col_expr_val[col];
+ if ((col != column) && (isAddressColumn(&cap_file_->cinfo, col))) {
+ addresses << cap_file_->cinfo.col_expr.col_expr_val[col];
}
}
@@ -142,7 +145,7 @@ void AddressEditorFrame::on_buttonBox_accepted()
}
QString addr = ui->addressComboBox->currentText();
QString name = ui->nameLineEdit->text();
- if (!add_ip_name_from_string(addr.toUtf8().constData(), name.toUtf8().constData())) {
+ if (!cf_add_ip_name_from_string(cap_file_, addr.toUtf8().constData(), name.toUtf8().constData())) {
QString error_msg = tr("Can't assign %1 to %2").arg(name).arg(addr);
emit editAddressStatus(error_msg);
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
diff --git a/ui/qt/address_editor_frame.h b/ui/qt/address_editor_frame.h
index 0bec30b4b9..eb57263c79 100644
--- a/ui/qt/address_editor_frame.h
+++ b/ui/qt/address_editor_frame.h
@@ -59,6 +59,7 @@ private slots:
private:
Ui::AddressEditorFrame *ui;
+ capture_file *cap_file_;
bool isAddressColumn(struct epan_column_info *cinfo, int column);
};