Wireshark  2.9.0-477-g68ec514b
The Wireshark network protocol analyzer
expert_info_model.h
1 /* expert_info_model.h
2  * Data model for Expert Info tap data.
3  *
4  * Wireshark - Network traffic analyzer
5  * By Gerald Combs <gerald@wireshark.org>
6  * Copyright 1998 Gerald Combs
7  *
8  * SPDX-License-Identifier: GPL-2.0-or-later
9  */
10 
11 #ifndef EXPERT_INFO_MODEL_H
12 #define EXPERT_INFO_MODEL_H
13 
14 #include <config.h>
15 
16 #include <QAbstractItemModel>
17 #include <QList>
18 #include <QMap>
19 
20 #include <ui/qt/capture_file.h>
21 
22 #include <epan/expert.h>
23 #include <epan/column-utils.h>
24 
26 {
27 public:
28  ExpertPacketItem(expert_info_t& expert_info, column_info *cinfo, ExpertPacketItem* parent);
29  virtual ~ExpertPacketItem();
30 
31  unsigned int packetNum() const { return packet_num_; }
32  int group() const { return group_; }
33  int severity() const { return severity_; }
34  int hfId() const { return hf_id_; }
35  QString protocol() const { return protocol_; }
36  QString summary() const { return summary_; }
37  QString colInfo() const { return info_; }
38 
39  static QString groupKey(bool group_by_summary, int severity, int group, QString protocol, int expert_hf);
40  QString groupKey(bool group_by_summary);
41 
42  void appendChild(ExpertPacketItem* child, QString hash);
43  ExpertPacketItem* child(int row);
44  ExpertPacketItem* child(QString hash);
45  int childCount() const;
46  int row() const;
47  ExpertPacketItem* parentItem();
48 
49 private:
50  unsigned int packet_num_;
51  int group_;
52  int severity_;
53  int hf_id_;
54  // Half-hearted attempt at conserving memory. If this isn't sufficient,
55  // PacketListRecord interns column strings in a GStringChunk.
56  QByteArray protocol_;
57  QByteArray summary_;
58  QByteArray info_;
59 
60  QList<ExpertPacketItem*> childItems_;
61  ExpertPacketItem* parentItem_;
62  QHash<QString, ExpertPacketItem*> hashChild_; //optimization for insertion
63 };
64 
65 class ExpertInfoModel : public QAbstractItemModel
66 {
67  Q_OBJECT
68 
69 public:
70  ExpertInfoModel(CaptureFile& capture_file, QObject *parent = 0);
71  virtual ~ExpertInfoModel();
72 
73  enum ExpertColumn {
74  colSeverity = 0,
75  colSummary,
76  colGroup,
77  colProtocol,
78  colCount,
79  colPacket,
80  colHf,
81  colLast
82  };
83 
84  enum ExpertSeverity {
85  severityError = PI_ERROR,
86  severityWarn = PI_WARN,
87  severityNote = PI_NOTE,
88  severityChat = PI_CHAT,
89  severityComment = PI_COMMENT
90  };
91 
92  QModelIndex index(int row, int column,
93  const QModelIndex & = QModelIndex()) const;
94  QModelIndex parent(const QModelIndex &) const;
95 #if 0
96  Qt::ItemFlags flags(const QModelIndex &index) const;
97 #endif
98  QVariant data(const QModelIndex &index, int role) const;
99 
100  int rowCount(const QModelIndex &parent = QModelIndex()) const;
101  int columnCount(const QModelIndex &parent = QModelIndex()) const;
102 
103  int numEvents(enum ExpertSeverity severity);
104 
105  void clear();
106 
107  //GUI helpers
108  void setGroupBySummary(bool group_by_summary);
109 
110  // Called from tapPacket
111  void addExpertInfo(struct expert_info_s& expert_info);
112 
113  // Callbacks for register_tap_listener
114  static void tapReset(void *eid_ptr);
115  static gboolean tapPacket(void *eid_ptr, struct _packet_info *pinfo, struct epan_dissect *, const void *data);
116  static void tapDraw(void *eid_ptr);
117 
118 private:
119  CaptureFile& capture_file_;
120 
121  ExpertPacketItem* createRootItem();
122 
123  bool group_by_summary_;
124  ExpertPacketItem* root_;
125 
126  QHash<enum ExpertSeverity, int> eventCounts_;
127 };
128 #endif // EXPERT_INFO_MODEL_H
129 
130 /*
131  * Editor modelines
132  *
133  * Local Variables:
134  * c-basic-offset: 4
135  * tab-width: 8
136  * indent-tabs-mode: nil
137  * End:
138  *
139  * ex: set shiftwidth=4 tabstop=8 expandtab:
140  * :indentSize=4:tabSize=8:noTabs=true:
141  */
Definition: expert_info_model.h:25
Definition: expert_info_model.h:65
Definition: packet_info.h:44
Definition: column-info.h:51
#define PI_COMMENT
Definition: proto.h:784
#define PI_CHAT
Definition: proto.h:786
Definition: expert.h:26
#define PI_ERROR
Definition: proto.h:792
#define PI_NOTE
Definition: proto.h:788
#define PI_WARN
Definition: proto.h:790
Definition: epan_dissect.h:28
Definition: cfile.h:58
Definition: capture_file.h:22