7d8cb0ab4f
We don't modify expert_info_t's used when constructing an ExpertPacketItem or when they're passed to the tap routine. Change-Id: I9e6a1545ce2340091eb7c5f6a8ef5a1da675b3ab Reviewed-on: https://code.wireshark.org/review/32456 Petri-Dish: Guy Harris <guy@alum.mit.edu> Tested-by: Petri Dish Buildbot Reviewed-by: Guy Harris <guy@alum.mit.edu>
143 lines
3.7 KiB
C++
143 lines
3.7 KiB
C++
/* expert_info_model.h
|
|
* Data model for Expert Info tap data.
|
|
*
|
|
* Wireshark - Network traffic analyzer
|
|
* By Gerald Combs <gerald@wireshark.org>
|
|
* Copyright 1998 Gerald Combs
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#ifndef EXPERT_INFO_MODEL_H
|
|
#define EXPERT_INFO_MODEL_H
|
|
|
|
#include <config.h>
|
|
|
|
#include <QAbstractItemModel>
|
|
#include <QList>
|
|
#include <QMap>
|
|
|
|
#include <ui/qt/capture_file.h>
|
|
|
|
#include <epan/expert.h>
|
|
#include <epan/tap.h>
|
|
#include <epan/column-utils.h>
|
|
|
|
class ExpertPacketItem
|
|
{
|
|
public:
|
|
ExpertPacketItem(const expert_info_t& expert_info, column_info *cinfo, ExpertPacketItem* parent);
|
|
virtual ~ExpertPacketItem();
|
|
|
|
unsigned int packetNum() const { return packet_num_; }
|
|
int group() const { return group_; }
|
|
int severity() const { return severity_; }
|
|
int hfId() const { return hf_id_; }
|
|
QString protocol() const { return protocol_; }
|
|
QString summary() const { return summary_; }
|
|
QString colInfo() const { return info_; }
|
|
|
|
static QString groupKey(bool group_by_summary, int severity, int group, QString protocol, int expert_hf);
|
|
QString groupKey(bool group_by_summary);
|
|
|
|
void appendChild(ExpertPacketItem* child, QString hash);
|
|
ExpertPacketItem* child(int row);
|
|
ExpertPacketItem* child(QString hash);
|
|
int childCount() const;
|
|
int row() const;
|
|
ExpertPacketItem* parentItem();
|
|
|
|
private:
|
|
unsigned int packet_num_;
|
|
int group_;
|
|
int severity_;
|
|
int hf_id_;
|
|
// Half-hearted attempt at conserving memory. If this isn't sufficient,
|
|
// PacketListRecord interns column strings in a GStringChunk.
|
|
QByteArray protocol_;
|
|
QByteArray summary_;
|
|
QByteArray info_;
|
|
|
|
QList<ExpertPacketItem*> childItems_;
|
|
ExpertPacketItem* parentItem_;
|
|
QHash<QString, ExpertPacketItem*> hashChild_; //optimization for insertion
|
|
};
|
|
|
|
class ExpertInfoModel : public QAbstractItemModel
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
ExpertInfoModel(CaptureFile& capture_file, QObject *parent = 0);
|
|
virtual ~ExpertInfoModel();
|
|
|
|
enum ExpertColumn {
|
|
colSeverity = 0,
|
|
colSummary,
|
|
colGroup,
|
|
colProtocol,
|
|
colCount,
|
|
colPacket,
|
|
colHf,
|
|
colLast
|
|
};
|
|
|
|
enum ExpertSeverity {
|
|
severityError = PI_ERROR,
|
|
severityWarn = PI_WARN,
|
|
severityNote = PI_NOTE,
|
|
severityChat = PI_CHAT,
|
|
severityComment = PI_COMMENT
|
|
};
|
|
|
|
QModelIndex index(int row, int column,
|
|
const QModelIndex & = QModelIndex()) const;
|
|
QModelIndex parent(const QModelIndex &) const;
|
|
#if 0
|
|
Qt::ItemFlags flags(const QModelIndex &index) const;
|
|
#endif
|
|
QVariant data(const QModelIndex &index, int role) const;
|
|
|
|
int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
|
int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
|
|
|
int numEvents(enum ExpertSeverity severity);
|
|
|
|
void clear();
|
|
|
|
//GUI helpers
|
|
void setGroupBySummary(bool group_by_summary);
|
|
|
|
// Called from tapPacket
|
|
void addExpertInfo(const struct expert_info_s& expert_info);
|
|
|
|
// Callbacks for register_tap_listener
|
|
static void tapReset(void *eid_ptr);
|
|
static tap_packet_status tapPacket(void *eid_ptr, struct _packet_info *pinfo, struct epan_dissect *, const void *data);
|
|
static void tapDraw(void *eid_ptr);
|
|
|
|
private:
|
|
CaptureFile& capture_file_;
|
|
|
|
ExpertPacketItem* createRootItem();
|
|
|
|
bool group_by_summary_;
|
|
ExpertPacketItem* root_;
|
|
|
|
QHash<enum ExpertSeverity, int> eventCounts_;
|
|
};
|
|
#endif // EXPERT_INFO_MODEL_H
|
|
|
|
/*
|
|
* 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:
|
|
*/
|