/* expert_info_model.h * Data model for Expert Info tap data. * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef EXPERT_INFO_MODEL_H #define EXPERT_INFO_MODEL_H #include #include #include #include #include #include #include #include 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 childItems_; ExpertPacketItem* parentItem_; QHash 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 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: */