#include "dialogsourcepcap.h" #include "ui_dialogsourcepcap.h" #include #include #include #include #include #include "pcapio.h" DialogSourcePcap::DialogSourcePcap(QWidget *parent) : QDialog(parent), ui(new Ui::DialogSourcePcap), m_devInputModule(new QStandardItemModel(this)), cap_thread(new pcap_source(this)) { ui->setupUi(this); std::string errstring = PCAPIO::pcapio_interfaces(m_devmap); if (errstring.size()) ui->label_count->setText(QString::fromLocal8Bit(errstring.c_str())); for (auto & p : m_devmap) { m_names.push_back(p.first); m_devInputModule->appendRow(new QStandardItem(QString::fromLocal8Bit(p.second.c_str()))); } ui->comboBox_Devices->setModel(m_devInputModule); ui->btn_stop->setDisabled(true); connect(ui->btn_start, SIGNAL(clicked()), this,SLOT(OnRecordStart())); connect(ui->btn_stop, SIGNAL(clicked()), this,SLOT(OnRecordStop())); connect(cap_thread,&pcap_source::sig_message,ui->label_msg,&QLabel::setText); m_nTimerID = startTimer(1000); } DialogSourcePcap::DialogSourcePcap(const TASKBUS::cmdlineParser * pline,QWidget *parent ): DialogSourcePcap(parent) { m_cmdline = pline; if (m_cmdline) { setInstance(m_cmdline->toInt("instance",0)); //Listen thread to recieve messages from platform m_pListenThread = new listen_thread(m_cmdline,this); connect(m_pListenThread,&listen_thread::quit_app,this,&DialogSourcePcap::close); m_pListenThread->start(); m_n_device = m_cmdline->toInt("device",0); m_n_subject = m_cmdline->toInt("package",0); m_filter = m_cmdline->toString("filter",""); ui->lineEdit_filter->setText(QString::fromLocal8Bit(m_filter.c_str())); ui->comboBox_Devices->setCurrentIndex(m_n_device); int hiden = m_cmdline->toInt("hide",0); int autostart = m_cmdline->toInt("autostart",0); if (hiden || autostart) OnRecordStart(); } } DialogSourcePcap::~DialogSourcePcap() { if (m_pListenThread) m_pListenThread->terminate(); if (cap_thread->isRunning()) { cap_thread->stopCap(); } delete ui; } void DialogSourcePcap::timerEvent(QTimerEvent *event) { if (event->timerId()==m_nTimerID) { if (cap_thread->isRunning()) { QString str = QString("%1").arg((unsigned long long)cap_thread->m_rx); ui->label_count->setText(str); } } } void DialogSourcePcap::OnRecordStart() { ui->btn_start->setDisabled(true); ui->btn_stop->setDisabled(false); cap_thread->m_nInstance = m_n_instance; int nDev = ui->comboBox_Devices->currentIndex(); if (nDev < 0 || nDev >= m_names.size() ) { return; } cap_thread->m_device = m_names[nDev]; cap_thread->m_filter = ui->lineEdit_filter->text().toStdString(); cap_thread->m_nSubject = m_n_subject; cap_thread->startCap(); } void DialogSourcePcap::OnRecordStop() { ui->btn_start->setDisabled(false); ui->btn_stop->setDisabled(true); cap_thread->stopCap(); }