2013-12-13 07:25:30 +00:00
# include "sctp_graph_byte_dialog.h"
# include "ui_sctp_graph_byte_dialog.h"
# include "sctp_graph_dialog.h"
SCTPGraphByteDialog : : SCTPGraphByteDialog ( QWidget * parent , sctp_assoc_info_t * assoc , capture_file * cf , int dir ) :
QDialog ( parent ) ,
ui ( new Ui : : SCTPGraphByteDialog ) ,
selected_assoc ( assoc ) ,
cap_file_ ( cf ) ,
direction ( dir )
{
ui - > setupUi ( this ) ;
this - > setWindowTitle ( QString ( " SCTP Data and Adv. Rec. Window over Time: %1 Port1 %2 Port2 %3 " ) . arg ( cf_get_display_name ( cap_file_ ) ) . arg ( selected_assoc - > port1 ) . arg ( selected_assoc - > port2 ) ) ;
if ( ( direction = = 1 & & selected_assoc - > n_array_tsn1 = = 0 ) | | ( direction = = 2 & & selected_assoc - > n_array_tsn2 = = 0 ) ) {
QMessageBox msgBox ;
msgBox . setText ( " No Data Chunks sent " ) ;
msgBox . exec ( ) ;
return ;
} else {
drawGraph ( ) ;
}
}
SCTPGraphByteDialog : : ~ SCTPGraphByteDialog ( )
{
delete ui ;
}
void SCTPGraphByteDialog : : drawBytesGraph ( )
{
GList * listTSN = NULL , * tlist ;
tsn_t * tsn ;
guint8 type ;
2013-12-13 09:10:35 +00:00
guint32 maxBytes ;
// guint32 minBytes, maxBytes;
2013-12-13 07:25:30 +00:00
long sumBytes = 0 ;
// printf("drawBytesGraph\n");
if ( direction = = 1 ) {
2013-12-13 09:10:35 +00:00
//minBytes = 0; //selected_assoc->min_tsn1;
2013-12-13 07:25:30 +00:00
maxBytes = selected_assoc - > n_data_bytes_ep1 ;
listTSN = g_list_last ( selected_assoc - > tsn1 ) ;
} else {
2013-12-13 09:10:35 +00:00
//minBytes = 0; //selected_assoc->min_tsn2;
2013-12-13 07:25:30 +00:00
maxBytes = selected_assoc - > n_data_bytes_ep2 ;
listTSN = g_list_last ( selected_assoc - > tsn2 ) ;
}
while ( listTSN ) {
tsn = ( tsn_t * ) ( listTSN - > data ) ;
tlist = g_list_first ( tsn - > tsns ) ;
guint16 length ;
while ( tlist )
{
type = ( ( struct chunk_header * ) tlist - > data ) - > type ;
if ( type = = SCTP_DATA_CHUNK_ID ) {
length = g_ntohs ( ( ( struct data_chunk_header * ) tlist - > data ) - > length ) ;
sumBytes + = length ;
yb . append ( sumBytes ) ;
xb . append ( tsn - > secs + tsn - > usecs / 1000000.0 ) ;
// printf("x=%f y=%ld\n", tsn->secs + tsn->usecs/1000000.0, sumBytes);
fb . append ( tsn - > frame_number ) ;
}
tlist = g_list_next ( tlist ) ;
}
listTSN = g_list_previous ( listTSN ) ;
}
QCPScatterStyle myScatter ;
myScatter . setShape ( QCPScatterStyle : : ssCircle ) ;
myScatter . setSize ( 3 ) ;
// create graph and assign data to it:
// Add Bytes graph
if ( xb . size ( ) > 0 ) {
QCPGraph * gr = ui - > sctpPlot - > addGraph ( ui - > sctpPlot - > xAxis , ui - > sctpPlot - > yAxis ) ;
gr - > setName ( QString ( " Bytes " ) ) ;
myScatter . setPen ( QPen ( Qt : : red ) ) ;
myScatter . setBrush ( Qt : : red ) ;
ui - > sctpPlot - > graph ( 0 ) - > setScatterStyle ( myScatter ) ;
ui - > sctpPlot - > graph ( 0 ) - > setLineStyle ( QCPGraph : : lsNone ) ;
ui - > sctpPlot - > graph ( 0 ) - > setData ( xb , yb ) ;
}
ui - > sctpPlot - > xAxis - > setLabel ( " time [secs] " ) ;
ui - > sctpPlot - > yAxis - > setLabel ( " Received Bytes " ) ;
// set axes ranges, so we see all data:
QCPRange myXByteRange ( 0 , ( selected_assoc - > max_secs + 1 ) ) ;
QCPRange myYByteRange ( 0 , maxBytes ) ;
ui - > sctpPlot - > xAxis - > setRange ( myXByteRange ) ;
ui - > sctpPlot - > yAxis - > setRange ( myYByteRange ) ;
}
void SCTPGraphByteDialog : : drawGraph ( )
{
ui - > sctpPlot - > clearGraphs ( ) ;
drawBytesGraph ( ) ;
ui - > sctpPlot - > setInteractions ( QCP : : iRangeZoom | QCP : : iRangeDrag | QCP : : iSelectPlottables ) ;
connect ( ui - > sctpPlot , SIGNAL ( plottableClick ( QCPAbstractPlottable * , QMouseEvent * ) ) , this , SLOT ( graphClicked ( QCPAbstractPlottable * , QMouseEvent * ) ) ) ;
ui - > sctpPlot - > replot ( ) ;
}
void SCTPGraphByteDialog : : on_pushButton_4_clicked ( )
{
ui - > sctpPlot - > xAxis - > setRange ( selected_assoc - > min_secs + selected_assoc - > min_usecs / 1000000.0 , selected_assoc - > max_secs + selected_assoc - > max_usecs / 1000000.0 ) ;
if ( direction = = 1 ) {
ui - > sctpPlot - > yAxis - > setRange ( 0 , selected_assoc - > n_data_bytes_ep1 ) ;
} else {
ui - > sctpPlot - > yAxis - > setRange ( 0 , selected_assoc - > n_data_bytes_ep2 ) ;
}
ui - > sctpPlot - > replot ( ) ;
}
void SCTPGraphByteDialog : : graphClicked ( QCPAbstractPlottable * plottable , QMouseEvent * event )
{
if ( plottable - > name ( ) . contains ( " Bytes " , Qt : : CaseInsensitive ) ) {
double bytes = round ( ui - > sctpPlot - > yAxis - > pixelToCoord ( event - > pos ( ) . y ( ) ) ) ;
int i ;
for ( i = 0 ; i < yb . size ( ) ; i + + ) {
if ( bytes < = yb . value ( i ) ) {
frame_num = fb . at ( i ) ;
break ;
}
}
if ( cap_file_ & & frame_num > 0 ) {
cf_goto_frame ( cap_file_ , frame_num ) ;
}
ui - > hintLabel - > setText ( QString ( " <small><i>Graph %1: Received bytes=%2 Time=%3 secs </i></small> " )
. arg ( plottable - > name ( ) )
. arg ( yb . value ( i ) )
. arg ( xb . value ( i ) ) ) ;
}
}
void SCTPGraphByteDialog : : on_saveButton_clicked ( )
{
SCTPGraphDialog : : save_graph ( this , ui - > sctpPlot ) ;
}