sctp_assoc_info_t* SCTPAssocAnalyseDialog::findAssocForPacket(capture_file* cf) { frame_data *fdata; GList *list, *framelist; sctp_assoc_info_t *assoc; bool frame_found = false; fdata = cf->current_frame; if (sctp_stat_get_info()->is_registered == FALSE) { register_tap_listener_sctp_stat(); /* (redissect all packets) */ cf_retap_packets(cf); } list = g_list_first(sctp_stat_get_info()->assoc_info_list); while (list) { assoc = (sctp_assoc_info_t*)(list->data); framelist = g_list_first(assoc->frame_numbers); while (framelist) { guint32 *fn; fn = (guint32 *)framelist->data; if (*fn == fdata->num) { frame_found = TRUE; break; } framelist = g_list_next(framelist); } if (frame_found) { return assoc; } else { list = g_list_next(list); } } if (!frame_found) { QMessageBox msgBox; msgBox.setText(tr("No Association found for this packet.")); msgBox.exec(); } return NULL; }
void SCTPAllAssocsDialog::fillTable() { QString output; GList *list; sctp_assoc_info_t* assinfo; int numAssocs; ui->assocList->setColumnHidden(0, true); ui->assocList->setColumnWidth(1, 85); ui->assocList->setColumnWidth(2, 85); ui->assocList->setColumnWidth(3, 150); ui->assocList->setColumnWidth(4, 150); sctp_assocs = (sctp_allassocs_info_t*)sctp_stat_get_info(); if (sctp_stat_get_info()->is_registered == FALSE) { register_tap_listener_sctp_stat(); /* (redissect all packets) */ cf_retap_packets(cap_file_); } numAssocs = 0; ui->assocList->setRowCount(g_list_length(sctp_assocs->assoc_info_list)); list = g_list_first(sctp_assocs->assoc_info_list); while (list) { assinfo = (sctp_assoc_info_t*)(list->data); ui->assocList->setItem(numAssocs, 0, new QTableWidgetItem(QString("%1").arg(assinfo->assoc_id))); ui->assocList->setItem(numAssocs, 1, new QTableWidgetItem(QString("%1").arg(assinfo->port1))); ui->assocList->setItem(numAssocs, 2, new QTableWidgetItem(QString("%1").arg(assinfo->port2))); ui->assocList->setItem(numAssocs, 3, new QTableWidgetItem(QString("%1").arg(assinfo->n_packets))); ui->assocList->setItem(numAssocs, 4, new QTableWidgetItem(QString("%1").arg(assinfo->n_data_chunks))); ui->assocList->setItem(numAssocs, 5, new QTableWidgetItem(QString("%1").arg(assinfo->n_data_bytes))); list = g_list_next(list); numAssocs++; } ui->analyseButton->setEnabled(false); ui->setFilterButton->setEnabled(false); connect(ui->assocList, SIGNAL(itemSelectionChanged()), this, SLOT(getSelectedItem())); }
SCTPAssocAnalyseDialog::SCTPAssocAnalyseDialog(QWidget *parent, sctp_assoc_info_t *assoc, capture_file *cf, SCTPAllAssocsDialog* caller) : QDialog(parent), ui(new Ui::SCTPAssocAnalyseDialog), selected_assoc(assoc), cap_file_(cf), caller_(caller) { ui->setupUi(this); ui->SCTPAssocAnalyseTab->setCurrentWidget(ui->Statistics); if (!selected_assoc) { if (sctp_stat_get_info()->is_registered == FALSE) { register_tap_listener_sctp_stat(); } /* (redissect all packets) */ cf_retap_packets(cap_file_); selected_assoc = findAssocForPacket(cap_file_); } this->setWindowTitle(QString(tr("SCTP Analyse Association: %1 Port1 %2 Port2 %3")).arg(cf_get_display_name(cap_file_)).arg(selected_assoc->port1).arg(selected_assoc->port2)); fillTabs(); }