From e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 22:34:10 +0200 Subject: Adding upstream version 4.2.2. Signed-off-by: Daniel Baumann --- ui/qt/credentials_dialog.cpp | 120 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 ui/qt/credentials_dialog.cpp (limited to 'ui/qt/credentials_dialog.cpp') diff --git a/ui/qt/credentials_dialog.cpp b/ui/qt/credentials_dialog.cpp new file mode 100644 index 00000000..810e0c81 --- /dev/null +++ b/ui/qt/credentials_dialog.cpp @@ -0,0 +1,120 @@ +/* + * credentials_dialog.c + * + * Copyright 2019 - Dario Lombardo + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include + +#include "file.h" + +#include "credentials_dialog.h" +#include +#include +#include "main_application.h" +#include "ui/qt/widgets/wireshark_file_dialog.h" +#include "ui/qt/models/credentials_model.h" +#include + +#include +#include +#include +#include +#include + +class CredentialsUrlDelegate : public UrlLinkDelegate +{ +public: + + CredentialsUrlDelegate(QObject * parent) : UrlLinkDelegate(parent) {} + + virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const + { + bool ok = false; + int val = index.data(Qt::UserRole).toInt(&ok); + if (!ok || val <= 0) + QStyledItemDelegate::paint(painter, option, index); + else + UrlLinkDelegate::paint(painter, option, index); + } + +}; + +CredentialsDialog::CredentialsDialog(QWidget &parent, CaptureFile &cf, PacketList *packet_list) : + WiresharkDialog(parent, cf), + ui(new Ui::CredentialsDialog) +{ + ui->setupUi(this); + loadGeometry(); + packet_list_ = packet_list; + + model_ = new CredentialsModel(this); + QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this); + + proxyModel->setSourceModel(model_); + ui->auths->setModel(proxyModel); + + setWindowSubtitle(tr("Credentials")); + + ui->auths->setRootIsDecorated(false); + ui->auths->setItemDelegateForColumn(CredentialsModel::COL_NUM, new CredentialsUrlDelegate(this)); + ui->auths->setItemDelegateForColumn(CredentialsModel::COL_USERNAME, new CredentialsUrlDelegate(this)); + + ui->auths->resizeColumnToContents(CredentialsModel::COL_NUM); + ui->auths->resizeColumnToContents(CredentialsModel::COL_PROTO); + ui->auths->resizeColumnToContents(CredentialsModel::COL_USERNAME); + + ui->auths->setSortingEnabled(true); + ui->auths->sortByColumn(CredentialsModel::COL_NUM, Qt::AscendingOrder); + + connect(ui->auths, &QTreeView::clicked, this, &CredentialsDialog::actionGoToPacket); + + registerTapListener("credentials", this, "", 0, tapReset, tapPacket, Q_NULLPTR); + cf.retapPackets(); +} + +CredentialsDialog::~CredentialsDialog() +{ + delete ui; +} + +void CredentialsDialog::tapReset(void *tapdata) +{ + CredentialsDialog * d = (CredentialsDialog*) tapdata; + d->model_->clear(); +} + +tap_packet_status CredentialsDialog::tapPacket(void *tapdata, _packet_info *, epan_dissect *, const void *data, tap_flags_t) +{ + CredentialsDialog * d = (CredentialsDialog*) tapdata; + d->model_->addRecord((const tap_credential_t*)data); + return TAP_PACKET_REDRAW; +} + +void CredentialsDialog::actionGoToPacket(const QModelIndex& idx) +{ + if (!idx.isValid()) + return; + + QVariant packet_data = idx.data(Qt::UserRole); + QVariant hf_id = idx.data(CredentialsModel::ColumnHFID); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + if (!hf_id.canConvert()) + hf_id = QVariant::fromValue(0); + + if (packet_data.canConvert()) + packet_list_->goToPacket(packet_data.toInt(), hf_id.toInt()); +#else + if (!hf_id.canConvert(QVariant::Int)) + hf_id = QVariant::fromValue(0); + + if (packet_data.canConvert(QVariant::Int)) + packet_list_->goToPacket(packet_data.toInt(), hf_id.toInt()); +#endif +} -- cgit v1.2.3