aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt/sctp_graph_dialog.h
blob: dc3e5b92272a8e386045dc8d103a83dbf4d0a099 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* sctp_graph_dialog.h
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

#ifndef SCTP_GRAPH_DIALOG_H
#define SCTP_GRAPH_DIALOG_H

#include <config.h>
#include <glib.h>

#include "cfile.h"

#include <QDialog>

namespace Ui {
class SCTPGraphDialog;
}

class QCPAbstractPlottable;
class QCustomPlot;

struct _sctp_assoc_info;

struct chunk_header {
    guint8  type;
    guint8  flags;
    guint16 length;
};

struct data_chunk_header {
    guint8  type;
    guint8  flags;
    guint16 length;
    guint32 tsn;
    guint16 sid;
    guint16 ssn;
    guint32 ppi;
};

struct gaps {
    guint16 start;
    guint16 end;
};

struct sack_chunk_header {
    guint8  type;
    guint8  flags;
    guint16 length;
    guint32 cum_tsn_ack;
    guint32 a_rwnd;
    guint16 nr_of_gaps;
    guint16 nr_of_dups;
    struct gaps gaps[1];
};

struct nr_sack_chunk_header {
    guint8  type;
    guint8  flags;
    guint16 length;
    guint32 cum_tsn_ack;
    guint32 a_rwnd;
    guint16 nr_of_gaps;
    guint16 nr_of_nr_gaps;
    guint16 nr_of_dups;
    guint16 reserved;
    struct gaps gaps[1];
};


class SCTPGraphDialog : public QDialog
{
    Q_OBJECT

public:
    explicit SCTPGraphDialog(QWidget *parent = 0, const _sctp_assoc_info *assoc = NULL,
            capture_file *cf = NULL, int dir = 0);
    ~SCTPGraphDialog();
    static void save_graph(QDialog *dlg, QCustomPlot *plot);

public slots:
    void setCaptureFile(capture_file *cf) { cap_file_ = cf; }

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void graphClicked(QCPAbstractPlottable* plottable, QMouseEvent* event);

    void on_saveButton_clicked();

    void on_relativeTsn_stateChanged(int arg1);

private:
    Ui::SCTPGraphDialog *ui;
    guint16 selected_assoc_id;
    capture_file *cap_file_;
    int frame_num;
    int direction;
    QVector<double> xt, yt, xs, ys, xg, yg, xd, yd, xn, yn;
    QVector<guint32> ft, fs, fg, fd, fn;
    QVector<QString> typeStrings;
    bool relative;
    int type;

    void drawGraph(const _sctp_assoc_info* selected_assoc = NULL);
    void drawTSNGraph(const _sctp_assoc_info* selected_assoc);
    void drawSACKGraph(const _sctp_assoc_info* selected_assoc);
    void drawNRSACKGraph(const _sctp_assoc_info* selected_assoc);
};

#endif // SCTP_GRAPH_DIALOG_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:
 */