static gboolean finfo_window_refresh(struct FieldinfoWinData *DataPtr) { field_info *old_finfo = DataPtr->finfo; field_info *finfo; epan_dissect_t edt; const guint8 *data; GtkWidget *byte_view; gchar label_str[ITEM_LABEL_LENGTH]; /* always update byteviews */ if (DataPtr->bv && (byte_view = get_notebook_bv_ptr(DataPtr->bv))) { int pos_inside = DataPtr->pd_offset - DataPtr->start_offset - old_finfo->start; if (pos_inside < 0 || pos_inside >= old_finfo->length) pos_inside = -1; data = DataPtr->pd + DataPtr->start_offset + old_finfo->start; packet_hex_editor_print(byte_view, data, DataPtr->frame, pos_inside, DataPtr->pd_bitoffset, old_finfo->length); } if (DataPtr->app_bv && (byte_view = get_notebook_bv_ptr(DataPtr->app_bv))) { int pos_inside = DataPtr->pd_offset - DataPtr->start_offset - old_finfo->appendix_start; if (pos_inside < 0 || pos_inside >= old_finfo->appendix_length) pos_inside = -1; data = DataPtr->pd + DataPtr->start_offset + old_finfo->appendix_start; packet_hex_editor_print(byte_view, data, DataPtr->frame, pos_inside, DataPtr->pd_bitoffset, old_finfo->appendix_length); } /* redisect */ epan_dissect_init(&edt, DataPtr->epan, TRUE, TRUE); /* Makes any sense? if (old_finfo->hfinfo) proto_tree_prime_hfid(edt.tree, old_finfo->hfinfo->id); */ epan_dissect_run(&edt, &DataPtr->phdr, frame_tvbuff_new(DataPtr->frame, DataPtr->pd), DataPtr->frame, NULL); /* Try to find finfo which looks like old_finfo. * We might not found one, if protocol requires specific magic values, etc... */ if (!(finfo = proto_finfo_find(edt.tree, old_finfo))) { epan_dissect_cleanup(&edt); gtk_entry_set_text(GTK_ENTRY(DataPtr->repr), "[finfo not found, try with another value, or restore old. If you think it is bug, fill bugreport]"); return FALSE; } /* XXX, update fvalue_edit, e.g. when hexedit was changed */ if (finfo->rep == NULL) { proto_item_fill_label(finfo, label_str); gtk_entry_set_text(GTK_ENTRY(DataPtr->repr), label_str); } else gtk_entry_set_text(GTK_ENTRY(DataPtr->repr), finfo->rep->representation); epan_dissect_cleanup(&edt); return TRUE; }
static void redissect_packet_window(gpointer object, gpointer user_data _U_) { struct PacketWinData *DataPtr = (struct PacketWinData *)object; char *title; /* XXX, can be optimized? */ proto_tree_draw(NULL, DataPtr->tree_view); epan_dissect_cleanup(&(DataPtr->edt)); epan_dissect_init(&(DataPtr->edt), DataPtr->epan, TRUE, TRUE); epan_dissect_run(&(DataPtr->edt), &DataPtr->phdr, frame_tvbuff_new(DataPtr->frame, DataPtr->pd), DataPtr->frame, NULL); add_byte_views(&(DataPtr->edt), DataPtr->tree_view, DataPtr->bv_nb_ptr); proto_tree_draw(DataPtr->edt.tree, DataPtr->tree_view); /* update the window title */ title = create_packet_window_title(); gtk_window_set_title(GTK_WINDOW(DataPtr->main), title); g_free(title); }
void FrameInformation::loadFrameTree() { if ( ! fi_ || ! cap_file_ || !cap_file_->capFile()) return; if (!cf_read_record(cap_file_->capFile(), fi_)) return; struct wtap_pkthdr phdr_ = cap_file_->capFile()->phdr; packet_data_ = (guint8 *) g_memdup(ws_buffer_start_ptr(&(cap_file_->capFile()->buf)), fi_->cap_len); /* proto tree, visible. We need a proto tree if there's custom columns */ epan_dissect_init(&edt_, cap_file_->capFile()->epan, TRUE, TRUE); col_custom_prime_edt(&edt_, &(cap_file_->capFile()->cinfo)); epan_dissect_run(&edt_, cap_file_->capFile()->cd_t, &phdr_, frame_tvbuff_new(&cap_file_->capFile()->provider, fi_, packet_data_), fi_, &(cap_file_->capFile()->cinfo)); epan_dissect_fill_in_columns(&edt_, TRUE, TRUE); }
PacketDialog::PacketDialog(QWidget &parent, CaptureFile &cf, frame_data *fdata) : WiresharkDialog(parent, cf), ui(new Ui::PacketDialog), packet_data_(NULL) { ui->setupUi(this); ui->hintLabel->setSmallText(); // XXX Use recent settings instead resize(parent.width() * 4 / 5, parent.height() * 4 / 5); setWindowSubtitle(tr("Packet %1").arg(fdata->num)); phdr_ = cap_file_.capFile()->phdr; packet_data_ = (guint8 *) g_memdup(ws_buffer_start_ptr(&(cap_file_.capFile()->buf)), fdata->cap_len); if (!cf_read_record(cap_file_.capFile(), fdata)) reject(); /* proto tree, visible. We need a proto tree if there's custom columns */ epan_dissect_init(&edt_, cap_file_.capFile()->epan, TRUE, TRUE); col_custom_prime_edt(&edt_, &(cap_file_.capFile()->cinfo)); epan_dissect_run(&edt_, cap_file_.capFile()->cd_t, &phdr_, frame_tvbuff_new(fdata, packet_data_), fdata, &(cap_file_.capFile()->cinfo)); epan_dissect_fill_in_columns(&edt_, TRUE, TRUE); proto_tree_ = new ProtoTree(ui->packetSplitter); proto_tree_->fillProtocolTree(edt_.tree); proto_tree_->expandAll(); byte_view_tab_ = new ByteViewTab(ui->packetSplitter); byte_view_tab_->setCaptureFile(cap_file_.capFile()); byte_view_tab_->clear(); GSList *src_le; for (src_le = edt_.pi.data_src; src_le != NULL; src_le = src_le->next) { struct data_source *source; char* source_name; source = (struct data_source *)src_le->data; source_name = get_data_source_name(source); byte_view_tab_->addTab(source_name, get_data_source_tvb(source), edt_.tree, proto_tree_, cap_file_.capFile()->current_frame->flags.encoding); wmem_free(NULL, source_name); } byte_view_tab_->setCurrentIndex(0); ui->packetSplitter->setStretchFactor(0, 5); ui->packetSplitter->setStretchFactor(1, 1); QStringList col_parts; for (int i = 0; i < cap_file_.capFile()->cinfo.num_cols; ++i) { // ElidedLabel doesn't support rich text / HTML col_parts << QString("%1: %2") .arg(get_column_title(i)) .arg(cap_file_.capFile()->cinfo.col_data[i]); } col_info_ = col_parts.join(" " UTF8_MIDDLE_DOT " "); setHintText(); connect(this, SIGNAL(monospaceFontChanged(QFont)), proto_tree_, SLOT(setMonospaceFont(QFont))); connect(this, SIGNAL(monospaceFontChanged(QFont)), byte_view_tab_, SLOT(setMonospaceFont(QFont))); connect(proto_tree_, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), byte_view_tab_, SLOT(protoTreeItemChanged(QTreeWidgetItem*))); connect(byte_view_tab_, SIGNAL(byteFieldHovered(QString&)), this, SLOT(setHintText(QString&))); }
PacketDialog::PacketDialog(QWidget &parent, CaptureFile &cf, frame_data *fdata) : WiresharkDialog(parent, cf), ui(new Ui::PacketDialog), phdr_(wtap_pkthdr()), packet_data_(NULL) { ui->setupUi(this); loadGeometry(parent.width() * 4 / 5, parent.height() * 4 / 5); ui->hintLabel->setSmallText(); setWindowSubtitle(tr("Packet %1").arg(fdata->num)); if (!cf_read_record(cap_file_.capFile(), fdata)) { reject(); return; } phdr_ = cap_file_.capFile()->phdr; packet_data_ = (guint8 *) g_memdup(ws_buffer_start_ptr(&(cap_file_.capFile()->buf)), fdata->cap_len); /* proto tree, visible. We need a proto tree if there's custom columns */ epan_dissect_init(&edt_, cap_file_.capFile()->epan, TRUE, TRUE); col_custom_prime_edt(&edt_, &(cap_file_.capFile()->cinfo)); epan_dissect_run(&edt_, cap_file_.capFile()->cd_t, &phdr_, frame_tvbuff_new(&cap_file_.capFile()->provider, fdata, packet_data_), fdata, &(cap_file_.capFile()->cinfo)); epan_dissect_fill_in_columns(&edt_, TRUE, TRUE); proto_tree_ = new ProtoTree(ui->packetSplitter); proto_tree_->setRootNode(edt_.tree); byte_view_tab_ = new ByteViewTab(ui->packetSplitter); byte_view_tab_->setCaptureFile(cap_file_.capFile()); byte_view_tab_->selectedFrameChanged(0); ui->packetSplitter->setStretchFactor(1, 0); QStringList col_parts; for (int i = 0; i < cap_file_.capFile()->cinfo.num_cols; ++i) { // ElidedLabel doesn't support rich text / HTML col_parts << QString("%1: %2") .arg(get_column_title(i)) .arg(cap_file_.capFile()->cinfo.columns[i].col_data); } col_info_ = col_parts.join(" " UTF8_MIDDLE_DOT " "); ui->hintLabel->setText(col_info_); connect(wsApp, SIGNAL(zoomMonospaceFont(QFont)), proto_tree_, SLOT(setMonospaceFont(QFont))); connect(byte_view_tab_, SIGNAL(fieldSelected(FieldInformation *)), proto_tree_, SLOT(selectedFieldChanged(FieldInformation *))); connect(proto_tree_, SIGNAL(fieldSelected(FieldInformation *)), byte_view_tab_, SLOT(selectedFieldChanged(FieldInformation *))); connect(byte_view_tab_, SIGNAL(fieldHighlight(FieldInformation *)), this, SLOT(setHintText(FieldInformation *))); }