forked from osmocom/wireshark
163 lines
4.2 KiB
C++
163 lines
4.2 KiB
C++
/*
|
|
* credentials_model.h
|
|
*
|
|
* Copyright 2019 - Dario Lombardo <lomato@gmail.com>
|
|
*
|
|
* Wireshark - Network traffic analyzer
|
|
* By Gerald Combs <gerald@wireshark.org>
|
|
* Copyright 1998 Gerald Combs
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#include "credentials_model.h"
|
|
|
|
#include <file.h>
|
|
#include <log.h>
|
|
#include <ui/qt/utils/qt_ui_utils.h>
|
|
|
|
CredentialsModel::CredentialsModel(QObject *parent)
|
|
:QAbstractListModel(parent)
|
|
{
|
|
}
|
|
|
|
int CredentialsModel::rowCount(const QModelIndex &) const
|
|
{
|
|
return credentials_.count();
|
|
}
|
|
|
|
int CredentialsModel::columnCount(const QModelIndex &) const
|
|
{
|
|
return COL_INFO + 1;
|
|
}
|
|
|
|
QVariant CredentialsModel::data(const QModelIndex &index, int role) const
|
|
{
|
|
if (!index.isValid())
|
|
return QVariant();
|
|
|
|
tap_credential_t * auth = credentials_.at(index.row());
|
|
if (!auth)
|
|
return QVariant();
|
|
|
|
|
|
if (role == Qt::DisplayRole) {
|
|
switch (index.column()) {
|
|
case COL_NUM:
|
|
return qVariantFromValue(auth->num);
|
|
case COL_PROTO:
|
|
return QString(auth->proto);
|
|
case COL_USERNAME:
|
|
return QString(auth->username);
|
|
case COL_INFO:
|
|
return QString(auth->info);
|
|
default:
|
|
return QVariant();
|
|
}
|
|
}
|
|
|
|
if (role == Qt::UserRole) {
|
|
switch (index.column()) {
|
|
case COL_NUM:
|
|
if (auth->num > 0)
|
|
return qVariantFromValue(auth->num);
|
|
break;
|
|
case COL_USERNAME:
|
|
if (auth->username_num > 0)
|
|
return qVariantFromValue(auth->username_num);
|
|
break;
|
|
default:
|
|
return QVariant();
|
|
}
|
|
}
|
|
|
|
if (role == CredentialsModel::ColumnHFID)
|
|
return qVariantFromValue(auth->password_hf_id);
|
|
|
|
if (role == Qt::ToolTipRole) {
|
|
const QString select_msg(tr("Click to select the packet"));
|
|
switch (index.column()) {
|
|
case COL_NUM:
|
|
if (auth->num > 0)
|
|
return select_msg;
|
|
break;
|
|
case COL_USERNAME:
|
|
if (auth->username_num > 0) {
|
|
if (auth->username_num != auth->num)
|
|
return QString(tr("Click to select the packet with username"));
|
|
else
|
|
return select_msg;
|
|
} else {
|
|
return QString(tr("Username not available"));
|
|
}
|
|
break;
|
|
default:
|
|
return QVariant();
|
|
}
|
|
}
|
|
|
|
return QVariant();
|
|
}
|
|
|
|
void CredentialsModel::addRecord(tap_credential_t* auth)
|
|
{
|
|
emit beginInsertRows(QModelIndex(), rowCount(), rowCount() + 1);
|
|
|
|
tap_credential_t* clone = new tap_credential_t;
|
|
clone->num = auth->num;
|
|
clone->username_num = auth->username_num;
|
|
clone->password_hf_id = auth->password_hf_id;
|
|
clone->username = qstring_strdup(auth->username);
|
|
clone->proto = auth->proto;
|
|
clone->info = qstring_strdup(auth->info);
|
|
credentials_.append(clone);
|
|
|
|
emit endInsertRows();
|
|
}
|
|
|
|
void CredentialsModel::clear()
|
|
{
|
|
emit beginRemoveRows(QModelIndex(), 0, rowCount());
|
|
for (QList<tap_credential_t*>::iterator itr = credentials_.begin(); itr != credentials_.end(); ++itr) {
|
|
g_free((*itr)->username);
|
|
g_free((*itr)->info);
|
|
delete *itr;
|
|
}
|
|
credentials_.clear();
|
|
emit endInsertRows();
|
|
}
|
|
|
|
QVariant CredentialsModel::headerData(int section, Qt::Orientation orientation, int role) const
|
|
{
|
|
if (role != Qt::DisplayRole)
|
|
return QVariant();
|
|
|
|
if (orientation == Qt::Horizontal) {
|
|
switch (section) {
|
|
case COL_NUM:
|
|
return QString(tr("Packet No."));
|
|
case COL_PROTO:
|
|
return QString(tr("Protocol"));
|
|
case COL_USERNAME:
|
|
return QString(tr("Username"));
|
|
case COL_INFO:
|
|
return QString(tr("Additional Info"));
|
|
}
|
|
}
|
|
|
|
return QVariant();
|
|
}
|
|
|
|
/*
|
|
* Editor modelines
|
|
*
|
|
* Local Variables:
|
|
* c-basic-offset: 4
|
|
* tab-width: 8
|
|
* indent-tabs-mode: nil
|
|
* End:
|
|
*
|
|
* ex: set shiftwidth=4 tabstop=8 expandtab:
|
|
* :indentSize=4:tabSize=8:noTabs=true:
|
|
*/
|