aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt/sctp_graph_dialog.cpp
diff options
context:
space:
mode:
authorruengeler <ruengeler@wireshark.org>2018-06-06 11:57:21 +0200
committerAnders Broman <a.broman58@gmail.com>2018-06-08 10:23:34 +0000
commite7c6576b51a41472e82735edab995c9eb487ae58 (patch)
treef39d67a827581aba61dd841060d84a09ca2f8745 /ui/qt/sctp_graph_dialog.cpp
parent9932f496e2f32da5c004e78a8c0375e7bcebdae2 (diff)
SCTP: Add a checkbox to show relative TSNs
Change-Id: I296cc5801e8a5184aea6bdc7fb841cce0c4f7b1d Reviewed-on: https://code.wireshark.org/review/28056 Reviewed-by: Peter Wu <peter@lekensteyn.nl> Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui/qt/sctp_graph_dialog.cpp')
-rw-r--r--ui/qt/sctp_graph_dialog.cpp83
1 files changed, 60 insertions, 23 deletions
diff --git a/ui/qt/sctp_graph_dialog.cpp b/ui/qt/sctp_graph_dialog.cpp
index 18c3ac196f..4c77445be0 100644
--- a/ui/qt/sctp_graph_dialog.cpp
+++ b/ui/qt/sctp_graph_dialog.cpp
@@ -35,7 +35,9 @@ SCTPGraphDialog::SCTPGraphDialog(QWidget *parent, sctp_assoc_info_t *assoc, capt
frame_num(0),
direction(dir),
gIsSackChunkPresent(false),
- gIsNRSackChunkPresent(false)
+ gIsNRSackChunkPresent(false),
+ relative(false),
+ type(1)
{
ui->setupUi(this);
if (!selected_assoc) {
@@ -53,7 +55,7 @@ SCTPGraphDialog::SCTPGraphDialog(QWidget *parent, sctp_assoc_info_t *assoc, capt
msgBox.exec();
return;
} else {
- drawGraph(3);
+ drawGraph();
}
}
@@ -68,7 +70,7 @@ void SCTPGraphDialog::drawNRSACKGraph()
GList *list=NULL, *tlist;
guint16 gap_start=0, gap_end=0, i, numberOf_gaps, numberOf_nr_gaps;
guint8 type;
- guint32 tsnumber, j = 0, min_tsn;
+ guint32 tsnumber, j = 0, min_tsn, rel = 0;
struct nr_sack_chunk_header *nr_sack_header;
struct gaps *nr_gap;
/* This holds the sum of gap acks and nr gap acks */
@@ -81,6 +83,9 @@ void SCTPGraphDialog::drawNRSACKGraph()
list = g_list_last(selected_assoc->sack2);
min_tsn = selected_assoc->min_tsn2;
}
+ if (relative) {
+ rel = min_tsn;
+ }
while (list) {
sack = (tsn_t*) (list->data);
tlist = g_list_first(sack->tsns);
@@ -101,11 +106,11 @@ void SCTPGraphDialog::drawNRSACKGraph()
gap_end = g_ntohs(nr_gap->end);
for (j = gap_start; j <= gap_end; j++) {
if (i >= numberOf_gaps) {
- yn.append(j + tsnumber);
+ yn.append(j + tsnumber - rel);
xn.append(sack->secs + sack->usecs/1000000.0);
fn.append(sack->frame_number);
} else {
- yg.append(j + tsnumber);
+ yg.append(j + tsnumber - rel);
xg.append(sack->secs + sack->usecs/1000000.0);
fg.append(sack->frame_number);
}
@@ -115,7 +120,7 @@ void SCTPGraphDialog::drawNRSACKGraph()
}
if (tsnumber>=min_tsn) {
- ys.append(j + tsnumber);
+ ys.append(j + tsnumber - rel);
xs.append(sack->secs + sack->usecs/1000000.0);
fs.append(sack->frame_number);
}
@@ -135,7 +140,7 @@ void SCTPGraphDialog::drawSACKGraph()
struct gaps *gap;
tsn_t *tsn;
guint8 type;
- guint32 tsnumber=0;
+ guint32 tsnumber=0, rel = 0;
guint32 minTSN;
guint32 *dup_list;
int i, j;
@@ -147,6 +152,9 @@ void SCTPGraphDialog::drawSACKGraph()
minTSN = selected_assoc->min_tsn2;
listSACK = g_list_last(selected_assoc->sack2);
}
+ if (relative) {
+ rel = minTSN;
+ }
while (listSACK) {
tsn = (tsn_t*) (listSACK->data);
tlist = g_list_first(tsn->tsns);
@@ -164,7 +172,7 @@ void SCTPGraphDialog::drawSACKGraph()
gap_start=g_ntohs(gap->start);
gap_end = g_ntohs(gap->end);
for (j=gap_start; j<=gap_end; j++) {
- yg.append(j+tsnumber);
+ yg.append(j + tsnumber - rel);
xg.append(tsn->secs + tsn->usecs/1000000.0);
fg.append(tsn->frame_number);
}
@@ -173,7 +181,7 @@ void SCTPGraphDialog::drawSACKGraph()
}
}
if (tsnumber>=minTSN) { // CumTSNAck red
- ys.append(tsnumber);
+ ys.append(tsnumber - rel);
xs.append(tsn->secs + tsn->usecs/1000000.0);
fs.append(tsn->frame_number);
}
@@ -182,7 +190,7 @@ void SCTPGraphDialog::drawSACKGraph()
for (i = 0; i < dup_nr; i++) {
tsnumber = g_ntohl(dup_list[i]);
if (tsnumber >= minTSN) {
- yd.append(tsnumber);
+ yd.append(tsnumber - rel);
xd.append(tsn->secs + tsn->usecs/1000000.0);
fd.append(tsn->frame_number);
}
@@ -258,14 +266,20 @@ void SCTPGraphDialog::drawTSNGraph()
GList *listTSN = NULL,*tlist;
tsn_t *tsn;
guint8 type;
- guint32 tsnumber=0;
+ guint32 tsnumber=0, rel = 0, minTSN;
if (direction == 1) {
listTSN = g_list_last(selected_assoc->tsn1);
+ minTSN = selected_assoc->min_tsn1;
} else {
listTSN = g_list_last(selected_assoc->tsn2);
+ minTSN = selected_assoc->min_tsn2;
}
+ if (relative) {
+ rel = minTSN;
+ }
+
while (listTSN) {
tsn = (tsn_t*) (listTSN->data);
tlist = g_list_first(tsn->tsns);
@@ -274,7 +288,7 @@ void SCTPGraphDialog::drawTSNGraph()
type = ((struct chunk_header *)tlist->data)->type;
if (type == SCTP_DATA_CHUNK_ID || type == SCTP_I_DATA_CHUNK_ID || type == SCTP_FORWARD_TSN_CHUNK_ID) {
tsnumber = g_ntohl(((struct data_chunk_header *)tlist->data)->tsn);
- yt.append(tsnumber);
+ yt.append(tsnumber - rel);
xt.append(tsn->secs + tsn->usecs/1000000.0);
ft.append(tsn->frame_number);
}
@@ -303,7 +317,7 @@ void SCTPGraphDialog::drawTSNGraph()
}
}
-void SCTPGraphDialog::drawGraph(int which)
+void SCTPGraphDialog::drawGraph()
{
guint32 maxTSN, minTSN;
@@ -318,7 +332,7 @@ void SCTPGraphDialog::drawGraph(int which)
minTSN = selected_assoc->min_tsn2;
}
ui->sctpPlot->clearGraphs();
- switch (which) {
+ switch (type) {
case 1: drawSACKGraph();
drawNRSACKGraph();
break;
@@ -340,34 +354,51 @@ void SCTPGraphDialog::drawGraph(int which)
connect(ui->sctpPlot, SIGNAL(plottableClick(QCPAbstractPlottable*,QMouseEvent*)), this, SLOT(graphClicked(QCPAbstractPlottable*, QMouseEvent*)));
// set axes ranges, so we see all data:
QCPRange myXRange(selected_assoc->min_secs, (selected_assoc->max_secs+1));
- QCPRange myYRange(minTSN, maxTSN);
+ QCPRange myYRange;
+ if (relative) {
+ QCPRange myYRange(0, maxTSN - minTSN);
+ ui->sctpPlot->yAxis->setRange(myYRange);
+ } else {
+ QCPRange myYRange(minTSN, maxTSN);
+ ui->sctpPlot->yAxis->setRange(myYRange);
+ }
ui->sctpPlot->xAxis->setRange(myXRange);
- ui->sctpPlot->yAxis->setRange(myYRange);
ui->sctpPlot->replot();
}
void SCTPGraphDialog::on_pushButton_clicked()
{
- drawGraph(1);
+ type = 1;
+ drawGraph();
}
void SCTPGraphDialog::on_pushButton_2_clicked()
{
- drawGraph(2);
+ type = 2;
+ drawGraph();
}
void SCTPGraphDialog::on_pushButton_3_clicked()
{
- drawGraph(3);
+ type = 3;
+ drawGraph();
}
void SCTPGraphDialog::on_pushButton_4_clicked()
{
ui->sctpPlot->xAxis->setRange(selected_assoc->min_secs, selected_assoc->max_secs+1);
- if (direction == 1) {
- ui->sctpPlot->yAxis->setRange(selected_assoc->min_tsn1, selected_assoc->max_tsn1);
- } else {
- ui->sctpPlot->yAxis->setRange(selected_assoc->min_tsn2, selected_assoc->max_tsn2);
+ if (relative) {
+ if (direction == 1) {
+ ui->sctpPlot->yAxis->setRange(0, selected_assoc->max_tsn1 - selected_assoc->min_tsn1);
+ } else {
+ ui->sctpPlot->yAxis->setRange(0, selected_assoc->max_tsn2 - selected_assoc->min_tsn2);
+ }
+ } else {
+ if (direction == 1) {
+ ui->sctpPlot->yAxis->setRange(selected_assoc->min_tsn1, selected_assoc->max_tsn1);
+ } else {
+ ui->sctpPlot->yAxis->setRange(selected_assoc->min_tsn2, selected_assoc->max_tsn2);
+ }
}
ui->sctpPlot->replot();
}
@@ -465,6 +496,12 @@ void SCTPGraphDialog::on_saveButton_clicked()
save_graph(this, ui->sctpPlot);
}
+void SCTPGraphDialog::on_relativeTsn_stateChanged(int arg1)
+{
+ relative = arg1;
+ drawGraph();
+}
+
/*
* Editor modelines
*