diff options
author | ruengeler <ruengeler@wireshark.org> | 2018-06-06 11:57:21 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2018-06-08 10:23:34 +0000 |
commit | e7c6576b51a41472e82735edab995c9eb487ae58 (patch) | |
tree | f39d67a827581aba61dd841060d84a09ca2f8745 /ui/qt/sctp_graph_dialog.cpp | |
parent | 9932f496e2f32da5c004e78a8c0375e7bcebdae2 (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.cpp | 83 |
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 * |