Wireshark  4.3.0
The Wireshark network protocol analyzer
atap_data_model.h
Go to the documentation of this file.
1 
10 #ifndef ATAP_DATA_MODEL_H
11 #define ATAP_DATA_MODEL_H
12 
13 #include "config.h"
14 
15 #include <epan/tap.h>
16 #include <epan/conversation.h>
18 
19 #include <QAbstractListModel>
20 
32 class ATapDataModel : public QAbstractListModel
33 {
34  Q_OBJECT
35 public:
36 
37  enum {
38  DISPLAY_FILTER = Qt::UserRole,
39  UNFORMATTED_DISPLAYDATA,
40 #ifdef HAVE_MAXMINDDB
41  GEODATA_AVAILABLE,
42  GEODATA_LOOKUPTABLE,
43  GEODATA_ADDRESS,
44 #endif
45  TIMELINE_DATA,
46  ENDPOINT_DATATYPE,
47  PROTO_ID,
48  CONVERSATION_ID,
49  ROW_IS_FILTERED,
50  DATA_ADDRESS_TYPE,
51  DATA_IPV4_INTEGER,
52  DATA_IPV6_LIST,
53  };
54 
55  typedef enum {
56  DATAMODEL_ENDPOINT,
57  DATAMODEL_CONVERSATION,
58  DATAMODEL_UNKNOWN
59  } dataModelType;
60 
74  explicit ATapDataModel(dataModelType type, int protoId, QString filter, QObject *parent = nullptr);
75  virtual ~ATapDataModel();
76 
85  int rowCount(const QModelIndex &parent = QModelIndex()) const;
86 
87  virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0;
88  virtual QVariant headerData(int section, Qt::Orientation orientation = Qt::Horizontal, int role = Qt::DisplayRole) const = 0;
89  virtual QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const = 0;
90 
96  QString tap() const;
97 
103  int protoId() const;
104 
112  void setFilter(QString filter);
113 
119  QString filter() const;
120 
127  bool resolveNames() const;
128 
134  void setResolveNames(bool resolve);
135 
145  bool allowsNameResolution() const;
146 
152  void useAbsoluteTime(bool absolute);
153 
159  void useNanosecondTimestamps(bool nanoseconds);
160 
167  bool portsAreHidden() const;
168 
175  bool showTotalColumn() const;
176 
186  bool enableTap();
187 
191  void disableTap();
192 
198  dataModelType modelType() const;
199 
200 #ifdef HAVE_MAXMINDDB
207  bool hasGeoIPData();
208 #endif
209 
210 signals:
211  void tapListenerChanged(bool enable);
212 
213 protected:
214 
215  static void tapReset(void *tapdata);
216  static void tapDraw(void *tap_data);
217 
218  virtual tap_packet_cb conversationPacketHandler();
219 
220  conv_hash_t * hash();
221 
222  void resetData();
223  void updateData(GArray * data);
224 
225  dataModelType _type;
226  GArray * storage_;
227  QString _filter;
228 
229  bool _absoluteTime;
230  bool _nanoseconds;
231  bool _resolveNames;
232  bool _disableTap;
233 
234  double _minRelStartTime;
235  double _maxRelStopTime;
236 
237  register_ct_t* registerTable() const;
238 
239 private:
240  int _protoId;
241 
242  conv_hash_t hash_;
243 };
244 
246 {
247  Q_OBJECT
248 public:
249 
250  typedef enum
251  {
252  ENDP_COLUMN_ADDR,
253  ENDP_COLUMN_PORT,
254  ENDP_COLUMN_PACKETS,
255  ENDP_COLUMN_BYTES,
256  ENDP_COLUMN_PACKETS_TOTAL,
257  ENDP_COLUMN_BYTES_TOTAL,
258  ENDP_COLUMN_PKT_AB,
259  ENDP_COLUMN_BYTES_AB,
260  ENDP_COLUMN_PKT_BA,
261  ENDP_COLUMN_BYTES_BA,
262  ENDP_NUM_COLUMNS,
263  ENDP_COLUMN_GEO_COUNTRY = ENDP_NUM_COLUMNS,
264  ENDP_COLUMN_GEO_CITY,
265  ENDP_COLUMN_GEO_LATITUDE,
266  ENDP_COLUMN_GEO_LONGITUDE,
267  ENDP_COLUMN_GEO_AS_NUM,
268  ENDP_COLUMN_GEO_AS_ORG,
269  ENDP_NUM_GEO_COLUMNS
270  } endpoint_column_type_e;
271 
272  explicit EndpointDataModel(int protoId, QString filter, QObject *parent = nullptr);
273 
274  int columnCount(const QModelIndex &parent = QModelIndex()) const;
275  QVariant headerData(int section, Qt::Orientation orientation = Qt::Horizontal, int role = Qt::DisplayRole) const;
276  QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const;
277 
278 };
279 
281 {
282  Q_OBJECT
283 public:
284 
285  typedef enum {
286  CONV_COLUMN_SRC_ADDR,
287  CONV_COLUMN_SRC_PORT,
288  CONV_COLUMN_DST_ADDR,
289  CONV_COLUMN_DST_PORT,
290  CONV_COLUMN_PACKETS,
291  CONV_COLUMN_BYTES,
292  CONV_COLUMN_CONV_ID,
293  CONV_COLUMN_PACKETS_TOTAL,
294  CONV_COLUMN_BYTES_TOTAL,
295  CONV_COLUMN_PKT_AB,
296  CONV_COLUMN_BYTES_AB,
297  CONV_COLUMN_PKT_BA,
298  CONV_COLUMN_BYTES_BA,
299  CONV_COLUMN_START,
300  CONV_COLUMN_DURATION,
301  CONV_COLUMN_BPS_AB,
302  CONV_COLUMN_BPS_BA,
303  CONV_NUM_COLUMNS,
304  CONV_INDEX_COLUMN = CONV_NUM_COLUMNS
305  } conversation_column_type_e;
306 
307  typedef enum {
308  CONV_TCP_EXT_COLUMN_A = CONV_INDEX_COLUMN,
309  CONV_TCP_EXT_NUM_COLUMNS,
310  CONV_TCP_EXT_INDEX_COLUMN = CONV_TCP_EXT_NUM_COLUMNS
311  } conversation_tcp_ext_column_type_e;
312 
313  explicit ConversationDataModel(int protoId, QString filter, QObject *parent = nullptr);
314 
315  int columnCount(const QModelIndex &parent = QModelIndex()) const;
316  QVariant headerData(int section, Qt::Orientation orientation = Qt::Horizontal, int role = Qt::DisplayRole) const;
317  QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const;
318 
319  void doDataUpdate();
320 
321  conv_item_t * itemForRow(int row);
322 
329  bool showConversationId(int row = 0) const;
330 
331 };
332 
333 #endif // ATAP_DATA_MODEL_H
DataModel for tap user data.
Definition: atap_data_model.h:33
bool showTotalColumn() const
A total column is filled.
Definition: atap_data_model.cpp:316
bool resolveNames() const
Is the model set to resolve names in address and ports columns.
Definition: atap_data_model.cpp:223
void useAbsoluteTime(bool absolute)
Use absolute time for any column supporting it.
Definition: atap_data_model.cpp:264
bool enableTap()
Enable tapping in this model.
Definition: atap_data_model.cpp:104
ATapDataModel(dataModelType type, int protoId, QString filter, QObject *parent=nullptr)
Construct a new ATapDataModel object.
Definition: atap_data_model.cpp:36
QString tap() const
Returns the name for the tap being used.
Definition: atap_data_model.cpp:77
bool allowsNameResolution() const
Does the model allow names to be resolved.
Definition: atap_data_model.cpp:238
dataModelType modelType() const
Return the model type.
Definition: atap_data_model.cpp:306
void setFilter(QString filter)
Set the filter string.
Definition: atap_data_model.cpp:284
void setResolveNames(bool resolve)
Enable or disable if names should be resolved.
Definition: atap_data_model.cpp:228
void disableTap()
Disable the tapping for this model.
Definition: atap_data_model.cpp:131
void useNanosecondTimestamps(bool nanoseconds)
Use nanosecond timestamps if requested.
Definition: atap_data_model.cpp:274
int rowCount(const QModelIndex &parent=QModelIndex()) const
Number of rows under the given parent in this model, which is the total number of rows for the empty ...
Definition: atap_data_model.cpp:140
bool portsAreHidden() const
Are ports hidden for this model.
Definition: atap_data_model.cpp:311
int protoId() const
The protocol id for the tap.
Definition: atap_data_model.cpp:72
QString filter() const
Return a filter set for the model.
Definition: atap_data_model.cpp:301
Definition: atap_data_model.h:281
bool showConversationId(int row=0) const
Show the conversation id if available.
Definition: atap_data_model.cpp:865
Definition: atap_data_model.h:246
Definition: conversation_table.h:53
Definition: conversation_table.h:121
Definition: conversation_table.c:24