Wireshark 5.1.0
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
distribution_model.h
Go to the documentation of this file.
1
12
13#ifndef DISTRIBUTION_MODEL_H
14#define DISTRIBUTION_MODEL_H
15
16#include <config.h>
17
18#include <vector>
19
20#include <QAbstractTableModel>
21#include <QHash>
22#include <QList>
23#include <QString>
24#include <QStringList>
25#include <QVariant>
26
27#include <epan/proto.h>
28
50
60class DistributionModel : public QAbstractTableModel
61{
62 Q_OBJECT
63
64public:
67
69 static constexpr int maxFields = 4;
70
72 enum { SortRole = Qt::UserRole + 1 };
73
78 explicit DistributionModel(QObject *parent = nullptr);
79
85 static bool supportsField(const header_field_info *hfinfo);
86
92 static SortKind sortKind(enum ftenum type);
93
106 static QString parseFields(const QStringList &names, QList<DistributionField> &fields);
107
112 void setFields(const QList<DistributionField> &fields);
113
117 void clear();
118
128 bool addPacket(proto_tree *tree);
129
135 void publish();
136
141 void setResolveValues(bool resolve);
142
147 bool hasFields() const { return !fields_.isEmpty(); }
148
153 bool hasResult() const { return has_result_; }
154
159 int countColumn() const;
160
165 int percentColumn() const;
166
172 QString filterExpression(int row) const;
173
180 QList<QVariant> rowData(int row) const;
181
187 quint64 count(int row) const;
188
194 QList<int> topRows(int n) const;
195
201 QString rowLabel(int row) const;
202
207 QStringList fieldNames() const;
208
213 int distinctValues() const { return published_; }
214
219 quint64 packets() const { return published_packets_; }
220
225 quint64 observations() const { return published_observations_; }
226
231 double entropy() const { return entropy_; }
232
233 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
234 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
235 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
236 QVariant headerData(int section, Qt::Orientation orientation,
237 int role = Qt::DisplayRole) const override;
238
239signals:
244
245private:
247 struct Row {
248 QStringList dfilter;
249 QStringList display;
250 QStringList label;
251 QList<QVariant> sort;
252 quint64 count;
253 };
254
255 QString shownText(const Row &row, int field) const;
256 double percent(const Row &row) const;
257 void resetCounts();
258
259 QList<DistributionField> fields_;
260 std::vector<Row> rows_;
261 QHash<QStringList, int> index_;
262 int published_;
263 quint64 packets_;
264 quint64 observations_;
265 quint64 published_packets_;
266 quint64 published_observations_;
267 double entropy_;
268 bool has_result_;
269 bool resolve_values_;
270};
271
272#endif // DISTRIBUTION_MODEL_H
bool addPacket(proto_tree *tree)
Counts the field values of one packet.
Definition distribution_model.cpp:216
DistributionField::SortKind SortKind
The sort kind of a field, see DistributionField::SortKind.
Definition distribution_model.h:66
int percentColumn() const
Returns the column of the percentages.
Definition distribution_model.cpp:349
void setFields(const QList< DistributionField > &fields)
Sets the counted fields and removes all rows.
Definition distribution_model.cpp:186
int countColumn() const
Returns the column of the counts.
Definition distribution_model.cpp:344
quint64 packets() const
Returns the number of counted packets at the last publish().
Definition distribution_model.h:219
QList< QVariant > rowData(int row) const
Returns the data of a row for copying and saving.
Definition distribution_model.cpp:378
static SortKind sortKind(enum ftenum type)
Returns how the values of a field type sort.
Definition distribution_model.cpp:108
void clear()
Removes all rows and counts, keeps the fields.
Definition distribution_model.cpp:195
bool hasResult() const
Tells whether there is a result to describe.
Definition distribution_model.h:153
void publish()
Makes the rows and counts added since the last call visible.
Definition distribution_model.cpp:303
quint64 observations() const
Returns the number of observations at the last publish().
Definition distribution_model.h:225
static bool supportsField(const header_field_info *hfinfo)
Tells whether the values of a field can be counted.
Definition distribution_model.cpp:103
void summaryChanged()
Emitted when the summary values or hasResult() changed.
QString filterExpression(int row) const
Returns the display filter matching a row.
Definition distribution_model.cpp:362
int distinctValues() const
Returns the number of published distinct value combinations.
Definition distribution_model.h:213
QList< int > topRows(int n) const
Returns the rows with the highest counts.
Definition distribution_model.cpp:407
double entropy() const
Returns the normalized Shannon entropy at the last publish().
Definition distribution_model.h:231
QString rowLabel(int row) const
Returns a short name of a row.
Definition distribution_model.cpp:422
static constexpr int maxFields
The maximum number of fields that can be counted together.
Definition distribution_model.h:69
void setResolveValues(bool resolve)
Shows resolved labels instead of the raw values.
Definition distribution_model.cpp:333
quint64 count(int row) const
Returns the count of a row.
Definition distribution_model.cpp:394
static QString parseFields(const QStringList &names, QList< DistributionField > &fields)
Resolves field names into counted fields.
Definition distribution_model.cpp:131
QStringList fieldNames() const
Returns the names of the counted fields.
Definition distribution_model.cpp:436
DistributionModel(QObject *parent=nullptr)
Constructs an empty model without fields.
Definition distribution_model.cpp:90
bool hasFields() const
Tells whether fields were set.
Definition distribution_model.h:147
ftenum
Fundamental field value types used throughout the Wireshark dissector framework.
Definition ftypes.h:26
struct _header_field_info header_field_info
Definition proto.h:795
One field counted by DistributionModel.
Definition distribution_model.h:33
SortKind
How the values of a field sort.
Definition distribution_model.h:37
@ SortString
Definition distribution_model.h:43
@ SortDouble
Definition distribution_model.h:42
@ SortUnsigned
Definition distribution_model.h:39
@ SortIPv6
Definition distribution_model.h:41
@ SortSigned
Definition distribution_model.h:38
@ SortIPv4
Definition distribution_model.h:40
QString name
Definition distribution_model.h:46
QList< int > hf_indices
Definition distribution_model.h:47
SortKind kind
Definition distribution_model.h:48