Manage Interfaces
- Add dialog to manage interfaces - Add and delete pipes - Hide local interfaces Change-Id: I08323c306c2ea736f99e57c28e2fe3170a0c2216 Reviewed-on: https://code.wireshark.org/review/2613 Tested-by: Anders Broman <a.broman58@gmail.com> Reviewed-by: Anders Broman <a.broman58@gmail.com> Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Reviewed-by: Michael Tüxen <tuexen@wireshark.org>
This commit is contained in:
parent
2c9d2bea32
commit
f3c5f14bc4
|
@ -27,6 +27,12 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "capture_opts.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBPCAP
|
#ifdef HAVE_LIBPCAP
|
||||||
/* Current state of capture engine. XXX - differentiate states */
|
/* Current state of capture engine. XXX - differentiate states */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
char *
|
char *
|
||||||
capture_dev_user_descr_find(const gchar *if_name)
|
capture_dev_user_descr_find(const gchar *if_name)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p, *str;
|
||||||
char *p2 = NULL;
|
char *p2 = NULL;
|
||||||
char *descr = NULL;
|
char *descr = NULL;
|
||||||
int lp = 0;
|
int lp = 0;
|
||||||
|
@ -56,11 +56,15 @@ capture_dev_user_descr_find(const gchar *if_name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((p = strstr(prefs.capture_devices_descr, if_name)) == NULL) {
|
/* There might be names like 'lo' and 'nflog' in Ubuntu which can lead to wrong results.
|
||||||
|
Therefore, the search must be more exact. */
|
||||||
|
str = g_strdup_printf(",%s(", if_name);
|
||||||
|
if ((p = strstr(prefs.capture_devices_descr, str)) == NULL) {
|
||||||
/* There are, but there isn't one for this interface. */
|
/* There are, but there isn't one for this interface. */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p++;
|
||||||
while (*p != '\0') {
|
while (*p != '\0') {
|
||||||
/* error: ran into next interface description */
|
/* error: ran into next interface description */
|
||||||
if (*p == ',')
|
if (*p == ',')
|
||||||
|
@ -85,6 +89,7 @@ capture_dev_user_descr_find(const gchar *if_name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_free(str);
|
||||||
if ((lp == 1) && (ct > 0) && (p2 != NULL)) {
|
if ((lp == 1) && (ct > 0) && (p2 != NULL)) {
|
||||||
/* Allocate enough space to return the string,
|
/* Allocate enough space to return the string,
|
||||||
which runs from p2 to p, plus a terminating
|
which runs from p2 to p, plus a terminating
|
||||||
|
|
|
@ -63,6 +63,7 @@ set(WIRESHARK_QT_HEADERS
|
||||||
main_welcome.h
|
main_welcome.h
|
||||||
main_window.h
|
main_window.h
|
||||||
main_window_preferences_frame.h
|
main_window_preferences_frame.h
|
||||||
|
manage_interfaces_dialog.h
|
||||||
module_preferences_scroll_area.h
|
module_preferences_scroll_area.h
|
||||||
packet_comment_dialog.h
|
packet_comment_dialog.h
|
||||||
packet_format_group_box.h
|
packet_format_group_box.h
|
||||||
|
@ -146,6 +147,7 @@ set(WIRESHARK_QT_SRC
|
||||||
main_window.cpp
|
main_window.cpp
|
||||||
main_window_preferences_frame.cpp
|
main_window_preferences_frame.cpp
|
||||||
main_window_slots.cpp
|
main_window_slots.cpp
|
||||||
|
manage_interfaces_dialog.cpp
|
||||||
module_preferences_scroll_area.cpp
|
module_preferences_scroll_area.cpp
|
||||||
packet_comment_dialog.cpp
|
packet_comment_dialog.cpp
|
||||||
packet_format_group_box.cpp
|
packet_format_group_box.cpp
|
||||||
|
@ -217,6 +219,7 @@ set(WIRESHARK_QT_UI
|
||||||
main_welcome.ui
|
main_welcome.ui
|
||||||
main_window.ui
|
main_window.ui
|
||||||
main_window_preferences_frame.ui
|
main_window_preferences_frame.ui
|
||||||
|
manage_interfaces_dialog.ui
|
||||||
module_preferences_scroll_area.ui
|
module_preferences_scroll_area.ui
|
||||||
packet_comment_dialog.ui
|
packet_comment_dialog.ui
|
||||||
packet_format_group_box.ui
|
packet_format_group_box.ui
|
||||||
|
|
|
@ -169,6 +169,8 @@ main_window.cpp main_window_slots.cpp main_window.h: ui_main_window.h
|
||||||
|
|
||||||
main_window_preferences_frame.cpp main_window_preferences_frame.h: ui_main_window_preferences_frame.h
|
main_window_preferences_frame.cpp main_window_preferences_frame.h: ui_main_window_preferences_frame.h
|
||||||
|
|
||||||
|
manage_interfaces_dialog.cpp manage_interfaces_dialog.h: ui_manage_interfaces_dialog.h
|
||||||
|
|
||||||
module_preferences_scroll_area.cpp module_preferences_scroll_area.h: ui_module_preferences_scroll_area.h
|
module_preferences_scroll_area.cpp module_preferences_scroll_area.h: ui_module_preferences_scroll_area.h
|
||||||
|
|
||||||
packet_comment_dialog.cpp packet_comment_dialog.h: ui_packet_comment_dialog.h
|
packet_comment_dialog.cpp packet_comment_dialog.h: ui_packet_comment_dialog.h
|
||||||
|
|
|
@ -51,6 +51,7 @@ NODIST_GENERATED_HEADER_FILES = \
|
||||||
ui_main_welcome.h \
|
ui_main_welcome.h \
|
||||||
ui_main_window.h \
|
ui_main_window.h \
|
||||||
ui_main_window_preferences_frame.h \
|
ui_main_window_preferences_frame.h \
|
||||||
|
ui_manage_interfaces_dialog.h \
|
||||||
ui_module_preferences_scroll_area.h \
|
ui_module_preferences_scroll_area.h \
|
||||||
ui_packet_comment_dialog.h \
|
ui_packet_comment_dialog.h \
|
||||||
ui_packet_format_group_box.h \
|
ui_packet_format_group_box.h \
|
||||||
|
@ -148,6 +149,7 @@ MOC_HDRS = \
|
||||||
main_welcome.h \
|
main_welcome.h \
|
||||||
main_window.h \
|
main_window.h \
|
||||||
main_window_preferences_frame.h \
|
main_window_preferences_frame.h \
|
||||||
|
manage_interfaces_dialog.h \
|
||||||
module_preferences_scroll_area.h \
|
module_preferences_scroll_area.h \
|
||||||
packet_comment_dialog.h \
|
packet_comment_dialog.h \
|
||||||
packet_format_group_box.h \
|
packet_format_group_box.h \
|
||||||
|
@ -209,6 +211,7 @@ UI_FILES = \
|
||||||
main_welcome.ui \
|
main_welcome.ui \
|
||||||
main_window.ui \
|
main_window.ui \
|
||||||
main_window_preferences_frame.ui \
|
main_window_preferences_frame.ui \
|
||||||
|
manage_interfaces_dialog.ui \
|
||||||
module_preferences_scroll_area.ui \
|
module_preferences_scroll_area.ui \
|
||||||
packet_format_group_box.ui \
|
packet_format_group_box.ui \
|
||||||
packet_range_group_box.ui \
|
packet_range_group_box.ui \
|
||||||
|
@ -326,6 +329,7 @@ WIRESHARK_QT_SRC = \
|
||||||
main_window.cpp \
|
main_window.cpp \
|
||||||
main_window_preferences_frame.cpp \
|
main_window_preferences_frame.cpp \
|
||||||
main_window_slots.cpp \
|
main_window_slots.cpp \
|
||||||
|
manage_interfaces_dialog.cpp \
|
||||||
module_preferences_scroll_area.cpp \
|
module_preferences_scroll_area.cpp \
|
||||||
packet_comment_dialog.cpp \
|
packet_comment_dialog.cpp \
|
||||||
packet_format_group_box.cpp \
|
packet_format_group_box.cpp \
|
||||||
|
|
|
@ -253,7 +253,8 @@ FORMS += \
|
||||||
summary_dialog.ui \
|
summary_dialog.ui \
|
||||||
time_shift_dialog.ui \
|
time_shift_dialog.ui \
|
||||||
uat_dialog.ui \
|
uat_dialog.ui \
|
||||||
tcp_stream_dialog.ui
|
tcp_stream_dialog.ui \
|
||||||
|
manage_interfaces_dialog.ui
|
||||||
|
|
||||||
HEADERS += $$HEADERS_WS_C \
|
HEADERS += $$HEADERS_WS_C \
|
||||||
about_dialog.h \
|
about_dialog.h \
|
||||||
|
@ -295,7 +296,8 @@ HEADERS += $$HEADERS_WS_C \
|
||||||
summary_dialog.h \
|
summary_dialog.h \
|
||||||
tango_colors.h \
|
tango_colors.h \
|
||||||
uat_dialog.h \
|
uat_dialog.h \
|
||||||
tcp_stream_dialog.h
|
tcp_stream_dialog.h \
|
||||||
|
manage_interfaces_dialog.h
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
OBJECTS_WS_C = $$SOURCES_WS_C
|
OBJECTS_WS_C = $$SOURCES_WS_C
|
||||||
|
@ -647,4 +649,5 @@ SOURCES += \
|
||||||
time_shift_dialog.cpp \
|
time_shift_dialog.cpp \
|
||||||
uat_dialog.cpp \
|
uat_dialog.cpp \
|
||||||
wireshark_application.cpp \
|
wireshark_application.cpp \
|
||||||
tcp_stream_dialog.cpp
|
tcp_stream_dialog.cpp \
|
||||||
|
manage_interfaces_dialog.cpp
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "capture_filter_combo.h"
|
#include "capture_filter_combo.h"
|
||||||
#include "ui_capture_interfaces_dialog.h"
|
#include "ui_capture_interfaces_dialog.h"
|
||||||
#include "compiled_filter_output.h"
|
#include "compiled_filter_output.h"
|
||||||
|
#include "manage_interfaces_dialog.h"
|
||||||
|
|
||||||
#include "wireshark_application.h"
|
#include "wireshark_application.h"
|
||||||
|
|
||||||
|
@ -71,6 +72,7 @@ CaptureInterfacesDialog::CaptureInterfacesDialog(QWidget *parent) :
|
||||||
connect(ui->tbInterfaces, SIGNAL(itemSelectionChanged()), this, SLOT(tableSelected()));
|
connect(ui->tbInterfaces, SIGNAL(itemSelectionChanged()), this, SLOT(tableSelected()));
|
||||||
connect(ui->allFilterComboBox, SIGNAL(captureFilterSyntaxChanged(bool)), this, SLOT(allFilterChanged()));
|
connect(ui->allFilterComboBox, SIGNAL(captureFilterSyntaxChanged(bool)), this, SLOT(allFilterChanged()));
|
||||||
connect(this, SIGNAL(interfacesChanged()), ui->allFilterComboBox, SIGNAL(interfacesChanged()));
|
connect(this, SIGNAL(interfacesChanged()), ui->allFilterComboBox, SIGNAL(interfacesChanged()));
|
||||||
|
connect(this, SIGNAL(ifsChanged()), this, SLOT(refreshInterfaceList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CaptureInterfacesDialog::allFilterChanged()
|
void CaptureInterfacesDialog::allFilterChanged()
|
||||||
|
@ -261,6 +263,7 @@ void CaptureInterfacesDialog::UpdateInterfaces()
|
||||||
ui->cbResolveTransportNames->setChecked(gbl_resolv_flags.transport_name);
|
ui->cbResolveTransportNames->setChecked(gbl_resolv_flags.transport_name);
|
||||||
|
|
||||||
ui->tbInterfaces->setRowCount(0);
|
ui->tbInterfaces->setRowCount(0);
|
||||||
|
ui->tbInterfaces->clearContents();
|
||||||
|
|
||||||
GList *list;
|
GList *list;
|
||||||
char *snaplen_string, *linkname;
|
char *snaplen_string, *linkname;
|
||||||
|
@ -386,7 +389,7 @@ void CaptureInterfacesDialog::UpdateInterfaces()
|
||||||
output = QString(device.cfilter);
|
output = QString(device.cfilter);
|
||||||
ui->tbInterfaces->setItem(ui->tbInterfaces->rowCount()-1, FILTER, new QTableWidgetItem(output));
|
ui->tbInterfaces->setItem(ui->tbInterfaces->rowCount()-1, FILTER, new QTableWidgetItem(output));
|
||||||
|
|
||||||
if (strstr(prefs.capture_device, device.name) != NULL) {
|
if (prefs.capture_device && strstr(prefs.capture_device, device.name) != NULL) {
|
||||||
device.selected = TRUE;
|
device.selected = TRUE;
|
||||||
global_capture_opts.num_selected++;
|
global_capture_opts.num_selected++;
|
||||||
}
|
}
|
||||||
|
@ -413,6 +416,12 @@ void CaptureInterfacesDialog::UpdateInterfaces()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CaptureInterfacesDialog::refreshInterfaceList()
|
||||||
|
{
|
||||||
|
UpdateInterfaces();
|
||||||
|
emit interfaceListChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void CaptureInterfacesDialog::updateStatistics(void)
|
void CaptureInterfacesDialog::updateStatistics(void)
|
||||||
{
|
{
|
||||||
QList<int> *points = NULL;
|
QList<int> *points = NULL;
|
||||||
|
@ -582,6 +591,13 @@ void CaptureInterfacesDialog::saveOptionsToPreferences()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CaptureInterfacesDialog::on_manage_clicked()
|
||||||
|
{
|
||||||
|
saveOptionsToPreferences();
|
||||||
|
ManageInterfacesDialog *dlg = new ManageInterfacesDialog(this);
|
||||||
|
dlg->show();
|
||||||
|
}
|
||||||
|
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
|
|
||||||
TbInterfacesDelegate::TbInterfacesDelegate(QObject *parent)
|
TbInterfacesDelegate::TbInterfacesDelegate(QObject *parent)
|
||||||
|
|
|
@ -103,6 +103,7 @@ private slots:
|
||||||
void on_cbExtraCaptureInfo_toggled(bool checked);
|
void on_cbExtraCaptureInfo_toggled(bool checked);
|
||||||
void on_cbResolveMacAddresses_toggled(bool checked);
|
void on_cbResolveMacAddresses_toggled(bool checked);
|
||||||
void on_compileBPF_clicked();
|
void on_compileBPF_clicked();
|
||||||
|
void on_manage_clicked();
|
||||||
void on_cbResolveNetworkNames_toggled(bool checked);
|
void on_cbResolveNetworkNames_toggled(bool checked);
|
||||||
void on_cbResolveTransportNames_toggled(bool checked);
|
void on_cbResolveTransportNames_toggled(bool checked);
|
||||||
void start_button_clicked();
|
void start_button_clicked();
|
||||||
|
@ -112,6 +113,7 @@ private slots:
|
||||||
void tableSelected();
|
void tableSelected();
|
||||||
void updateStatistics(void);
|
void updateStatistics(void);
|
||||||
void allFilterChanged();
|
void allFilterChanged();
|
||||||
|
void refreshInterfaceList();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void startCapture();
|
void startCapture();
|
||||||
|
@ -120,6 +122,8 @@ signals:
|
||||||
void setSelectedInterfaces();
|
void setSelectedInterfaces();
|
||||||
void setFilterValid(bool valid);
|
void setFilterValid(bool valid);
|
||||||
void interfacesChanged();
|
void interfacesChanged();
|
||||||
|
void ifsChanged();
|
||||||
|
void interfaceListChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::CaptureInterfacesDialog *ui;
|
Ui::CaptureInterfacesDialog *ui;
|
||||||
|
|
|
@ -23,9 +23,15 @@
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Input</string>
|
<string>Input</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_10" stretch="1,0">
|
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTableWidget" name="tbInterfaces">
|
<widget class="QTableWidget" name="tbInterfaces">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
<property name="editTriggers">
|
<property name="editTriggers">
|
||||||
<set>QAbstractItemView::DoubleClicked</set>
|
<set>QAbstractItemView::DoubleClicked</set>
|
||||||
</property>
|
</property>
|
||||||
|
@ -47,6 +53,9 @@
|
||||||
<property name="columnCount">
|
<property name="columnCount">
|
||||||
<number>8</number>
|
<number>8</number>
|
||||||
</property>
|
</property>
|
||||||
|
<attribute name="horizontalHeaderStretchLastSection">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
<column>
|
<column>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Interface</string>
|
<string>Interface</string>
|
||||||
|
@ -90,7 +99,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,0">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
|
@ -142,9 +151,12 @@
|
||||||
<item>
|
<item>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="bClose_2">
|
<widget class="QPushButton" name="manage">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
<bool>false</bool>
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Add a </string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Manage Interfaces...</string>
|
<string>Manage Interfaces...</string>
|
||||||
|
|
|
@ -23,6 +23,10 @@
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBPCAP
|
||||||
|
#include "ui/capture_globals.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "capture_preferences_frame.h"
|
#include "capture_preferences_frame.h"
|
||||||
#include "ui_capture_preferences_frame.h"
|
#include "ui_capture_preferences_frame.h"
|
||||||
|
|
||||||
|
@ -73,11 +77,24 @@ void CapturePreferencesFrame::updateWidgets()
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
ui->defaultInterfaceComboBox->clear();
|
ui->defaultInterfaceComboBox->clear();
|
||||||
if_list = capture_interface_list(&err, NULL,main_window_update);
|
if (global_capture_opts.all_ifaces->len > 0) {
|
||||||
combo_list = build_capture_combo_list(if_list, FALSE);
|
interface_t device;
|
||||||
free_interface_list(if_list);
|
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
|
||||||
for (combo_entry = combo_list; combo_entry != NULL && combo_entry->data != NULL; combo_entry = g_list_next(combo_entry)) {
|
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
|
||||||
ui->defaultInterfaceComboBox->addItem(QString((const char *)combo_entry->data));
|
|
||||||
|
/* Continue if capture device is hidden */
|
||||||
|
if (device.hidden) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ui->defaultInterfaceComboBox->addItem(QString((const char *)device.display_name));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if_list = capture_interface_list(&err, NULL,main_window_update);
|
||||||
|
combo_list = build_capture_combo_list(if_list, FALSE);
|
||||||
|
free_interface_list(if_list);
|
||||||
|
for (combo_entry = combo_list; combo_entry != NULL && combo_entry->data != NULL; combo_entry = g_list_next(combo_entry)) {
|
||||||
|
ui->defaultInterfaceComboBox->addItem(QString((const char *)combo_entry->data));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pref_device_->stashed_val.string) {
|
if (pref_device_->stashed_val.string) {
|
||||||
|
|
|
@ -331,6 +331,42 @@ void InterfaceTree::setSelectedInterfaces()
|
||||||
#endif // HAVE_LIBPCAP
|
#endif // HAVE_LIBPCAP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InterfaceTree::interfaceListChanged()
|
||||||
|
{
|
||||||
|
#ifdef HAVE_LIBPCAP
|
||||||
|
interface_t device;
|
||||||
|
clear();
|
||||||
|
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
|
||||||
|
QList<int> *points;
|
||||||
|
|
||||||
|
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
|
||||||
|
|
||||||
|
/* Continue if capture device is hidden */
|
||||||
|
if (device.hidden) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeWidgetItem *ti = new QTreeWidgetItem();
|
||||||
|
ti->setText(0, QString().fromUtf8(device.display_name));
|
||||||
|
ti->setData(0, Qt::UserRole, QString(device.name));
|
||||||
|
points = new QList<int>();
|
||||||
|
ti->setData(1, Qt::UserRole, qVariantFromValue(points));
|
||||||
|
addTopLevelItem(ti);
|
||||||
|
// XXX Add other device information
|
||||||
|
resizeColumnToContents(1);
|
||||||
|
if (strstr(prefs.capture_device, device.name) != NULL) {
|
||||||
|
device.selected = TRUE;
|
||||||
|
global_capture_opts.num_selected++;
|
||||||
|
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
|
||||||
|
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
|
||||||
|
}
|
||||||
|
if (device.selected) {
|
||||||
|
ti->setSelected(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Editor modelines
|
* Editor modelines
|
||||||
*
|
*
|
||||||
|
|
|
@ -65,6 +65,7 @@ public slots:
|
||||||
//void getPoints(int row, QList<int> *pts);
|
//void getPoints(int row, QList<int> *pts);
|
||||||
void getPoints(int row, PointList *pts);
|
void getPoints(int row, PointList *pts);
|
||||||
void setSelectedInterfaces();
|
void setSelectedInterfaces();
|
||||||
|
void interfaceListChanged();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void getInterfaceList();
|
void getInterfaceList();
|
||||||
|
|
|
@ -303,6 +303,8 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||||
this->main_welcome_->getInterfaceTree(), SLOT(getPoints(int,PointList*)));
|
this->main_welcome_->getInterfaceTree(), SLOT(getPoints(int,PointList*)));
|
||||||
connect(&capture_interfaces_dialog_, SIGNAL(setSelectedInterfaces()),
|
connect(&capture_interfaces_dialog_, SIGNAL(setSelectedInterfaces()),
|
||||||
this->main_welcome_->getInterfaceTree(), SLOT(setSelectedInterfaces()));
|
this->main_welcome_->getInterfaceTree(), SLOT(setSelectedInterfaces()));
|
||||||
|
connect(&capture_interfaces_dialog_, SIGNAL(interfaceListChanged()),
|
||||||
|
this->main_welcome_->getInterfaceTree(), SLOT(interfaceListChanged()));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
main_ui_->mainStack->setCurrentWidget(main_welcome_);
|
main_ui_->mainStack->setCurrentWidget(main_welcome_);
|
||||||
|
|
|
@ -0,0 +1,450 @@
|
||||||
|
/* manage_interfaces_dialog.cpp
|
||||||
|
*
|
||||||
|
* Wireshark - Network traffic analyzer
|
||||||
|
* By Gerald Combs <gerald@wireshark.org>
|
||||||
|
* Copyright 1998 Gerald Combs
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include <glib.h>
|
||||||
|
#include "manage_interfaces_dialog.h"
|
||||||
|
#include "ui_manage_interfaces_dialog.h"
|
||||||
|
#include "epan/prefs.h"
|
||||||
|
#include "ui/last_open_dir.h"
|
||||||
|
#include "capture_opts.h"
|
||||||
|
#include "ui/capture_globals.h"
|
||||||
|
#include "ui/qt/capture_interfaces_dialog.h"
|
||||||
|
#include "ui/iface_lists.h"
|
||||||
|
#include "ui/preference_utils.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBPCAP
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QCheckBox>
|
||||||
|
|
||||||
|
ManageInterfacesDialog::ManageInterfacesDialog(QWidget *parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::ManageInterfacesDialog)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
ui->addButton->setAttribute(Qt::WA_MacSmallSize, true);
|
||||||
|
ui->delButton->setAttribute(Qt::WA_MacSmallSize, true);
|
||||||
|
#endif
|
||||||
|
ui->pipeList->setItemDelegateForColumn(0, &new_pipe_item_delegate_);
|
||||||
|
new_pipe_item_delegate_.setTable(ui->pipeList);
|
||||||
|
showPipes();
|
||||||
|
connect(this, SIGNAL(ifsChanged()), parent, SIGNAL(ifsChanged()));
|
||||||
|
|
||||||
|
showLocalInterfaces();
|
||||||
|
|
||||||
|
#if !defined(HAVE_PCAP_REMOTE)
|
||||||
|
ui->tabWidget->removeTab(2);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
ManageInterfacesDialog::~ManageInterfacesDialog()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ManageInterfacesDialog::showPipes()
|
||||||
|
{
|
||||||
|
ui->pipeList->setRowCount(0);
|
||||||
|
|
||||||
|
if (global_capture_opts.all_ifaces->len > 0) {
|
||||||
|
interface_t device;
|
||||||
|
|
||||||
|
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
|
||||||
|
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
|
||||||
|
|
||||||
|
/* Continue if capture device is hidden */
|
||||||
|
if (device.hidden || device.type != IF_PIPE) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ui->pipeList->setRowCount(ui->pipeList->rowCount()+1);
|
||||||
|
QString output = QString(device.display_name);
|
||||||
|
ui->pipeList->setItem(ui->pipeList->rowCount()-1, INTERFACE, new QTableWidgetItem(output));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ManageInterfacesDialog::on_addButton_clicked()
|
||||||
|
{
|
||||||
|
ui->pipeList->setRowCount(ui->pipeList->rowCount() + 1);
|
||||||
|
QTableWidgetItem *widget = new QTableWidgetItem(QString(tr("New Pipe")));
|
||||||
|
ui->pipeList->setItem(ui->pipeList->rowCount() - 1 , 0, widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ManageInterfacesDialog::on_buttonBox_accepted()
|
||||||
|
{
|
||||||
|
interface_t device;
|
||||||
|
gchar *pipe_name;
|
||||||
|
|
||||||
|
for (int row = 0; row < ui->pipeList->rowCount(); row++) {
|
||||||
|
pipe_name = g_strdup(ui->pipeList->item(row,0)->text().toUtf8().constData());
|
||||||
|
if (!strcmp(pipe_name, "New pipe") || !strcmp(pipe_name, "")) {
|
||||||
|
g_free(pipe_name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
|
||||||
|
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
|
||||||
|
if (strcmp(pipe_name, device.name) == 0) {
|
||||||
|
g_free(pipe_name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
device.name = g_strdup(pipe_name);
|
||||||
|
device.display_name = g_strdup_printf("%s", device.name);
|
||||||
|
device.hidden = FALSE;
|
||||||
|
device.selected = TRUE;
|
||||||
|
device.type = IF_PIPE;
|
||||||
|
device.pmode = global_capture_opts.default_options.promisc_mode;
|
||||||
|
device.has_snaplen = global_capture_opts.default_options.has_snaplen;
|
||||||
|
device.snaplen = global_capture_opts.default_options.snaplen;
|
||||||
|
device.cfilter = g_strdup(global_capture_opts.default_options.cfilter);
|
||||||
|
device.addresses = g_strdup("");
|
||||||
|
device.no_addresses = 0;
|
||||||
|
device.last_packets = 0;
|
||||||
|
device.links = NULL;
|
||||||
|
#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
|
||||||
|
device.buffer = DEFAULT_CAPTURE_BUFFER_SIZE;
|
||||||
|
#endif
|
||||||
|
device.active_dlt = -1;
|
||||||
|
device.locked = FALSE;
|
||||||
|
device.if_info.name = g_strdup(pipe_name);
|
||||||
|
device.if_info.friendly_name = NULL;
|
||||||
|
device.if_info.vendor_description = NULL;
|
||||||
|
device.if_info.addrs = NULL;
|
||||||
|
device.if_info.loopback = FALSE;
|
||||||
|
device.if_info.type = IF_PIPE;
|
||||||
|
#if defined(HAVE_PCAP_CREATE)
|
||||||
|
device.monitor_mode_enabled = FALSE;
|
||||||
|
device.monitor_mode_supported = FALSE;
|
||||||
|
#endif
|
||||||
|
global_capture_opts.num_selected++;
|
||||||
|
g_array_append_val(global_capture_opts.all_ifaces, device);
|
||||||
|
|
||||||
|
g_free(pipe_name);
|
||||||
|
}
|
||||||
|
emit ifsChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ManageInterfacesDialog::on_delButton_clicked()
|
||||||
|
{
|
||||||
|
interface_t device;
|
||||||
|
bool found = false;
|
||||||
|
QList<QTableWidgetItem*> selected = ui->pipeList->selectedItems();
|
||||||
|
if (selected.length() == 0) {
|
||||||
|
QMessageBox::warning(this, tr("Error"),
|
||||||
|
tr("No interface selected."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QString pipename = selected[0]->text();
|
||||||
|
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
|
||||||
|
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
|
||||||
|
/* Continue if capture device is hidden or not a pipe*/
|
||||||
|
if (device.hidden || device.type != IF_PIPE) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (pipename.compare(device.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
|
||||||
|
ui->pipeList->removeRow(selected[0]->row());
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (found)
|
||||||
|
emit ifsChanged();
|
||||||
|
else /* pipe has not been saved yet */
|
||||||
|
ui->pipeList->removeRow(selected[0]->row());
|
||||||
|
}
|
||||||
|
|
||||||
|
void ManageInterfacesDialog::showLocalInterfaces()
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
interface_t device;
|
||||||
|
QString output;
|
||||||
|
Qt::ItemFlags eFlags;
|
||||||
|
gchar *pr_descr = g_strdup("");
|
||||||
|
char *comment = NULL;
|
||||||
|
|
||||||
|
ui->localList->setRowCount(0);
|
||||||
|
for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
|
||||||
|
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
|
||||||
|
if (device.local && device.type != IF_PIPE && device.type != IF_STDIN) {
|
||||||
|
ui->localList->setRowCount(ui->localList->rowCount()+1);
|
||||||
|
QTableWidgetItem *item = new QTableWidgetItem("");
|
||||||
|
item->setCheckState(device.hidden?Qt::Checked:Qt::Unchecked);
|
||||||
|
ui->localList->setItem(ui->localList->rowCount()-1, HIDE, item);
|
||||||
|
ui->localList->setColumnWidth(HIDE, 40);
|
||||||
|
#ifdef _WIN32
|
||||||
|
output = QString(device.friendly_name);
|
||||||
|
ui->localList->setItem(ui->localList->rowCount()-1, FRIENDLY, new QTableWidgetItem(output));
|
||||||
|
eFlags = ui->localList->item(ui->localList->rowCount()-1, FRIENDLY)->flags();
|
||||||
|
eFlags &= Qt::NoItemFlags;
|
||||||
|
eFlags |= Qt::ItemIsSelectable | Qt::ItemIsEnabled;
|
||||||
|
ui->localList->item(ui->localList->rowCount()-1, FRIENDLY)->setFlags(eFlags);
|
||||||
|
#else
|
||||||
|
ui->localList->setColumnHidden(FRIENDLY, true);
|
||||||
|
#endif
|
||||||
|
output = QString(device.name);
|
||||||
|
ui->localList->setItem(ui->localList->rowCount()-1, LOCAL_NAME, new QTableWidgetItem(output));
|
||||||
|
output = QString("");
|
||||||
|
eFlags = ui->localList->item(ui->localList->rowCount()-1, FRIENDLY)->flags();
|
||||||
|
eFlags &= Qt::NoItemFlags;
|
||||||
|
eFlags |= Qt::ItemIsSelectable | Qt::ItemIsEnabled;
|
||||||
|
ui->localList->item(ui->localList->rowCount()-1, LOCAL_NAME)->setFlags(eFlags);
|
||||||
|
|
||||||
|
comment = capture_dev_user_descr_find(device.name);
|
||||||
|
if (comment)
|
||||||
|
output = QString(comment);
|
||||||
|
ui->localList->setItem(ui->localList->rowCount()-1, COMMENT, new QTableWidgetItem(output));
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g_free(pr_descr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ManageInterfacesDialog::saveLocalHideChanges(QTableWidgetItem* item)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
interface_t device;
|
||||||
|
|
||||||
|
if (item->column() != HIDE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QTableWidgetItem* nameItem = ui->localList->item(item->row(), LOCAL_NAME);
|
||||||
|
|
||||||
|
if (!nameItem) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString name = nameItem->text();
|
||||||
|
/* See if this is the currently selected capturing device */
|
||||||
|
|
||||||
|
for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
|
||||||
|
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
|
||||||
|
if (name.compare(device.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
device.hidden = (item->checkState()==Qt::Checked?true:false);
|
||||||
|
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
|
||||||
|
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ManageInterfacesDialog::saveLocalCommentChanges(QTableWidgetItem* item)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
interface_t device;
|
||||||
|
|
||||||
|
if (item->column() != COMMENT) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QTableWidgetItem* nameItem = ui->localList->item(item->row(), LOCAL_NAME);
|
||||||
|
|
||||||
|
if (!nameItem) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString name = nameItem->text();
|
||||||
|
QString comment = ui->localList->item(item->row(), COMMENT)->text();
|
||||||
|
/* See if this is the currently selected capturing device */
|
||||||
|
|
||||||
|
for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
|
||||||
|
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
|
||||||
|
if (name.compare(device.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!comment.compare("")) {
|
||||||
|
device.display_name = g_strdup_printf("%s", name.toUtf8().constData());
|
||||||
|
} else {
|
||||||
|
device.display_name = g_strdup_printf("%s: %s", comment.toUtf8().constData(), name.toUtf8().constData());
|
||||||
|
}
|
||||||
|
global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i);
|
||||||
|
g_array_insert_val(global_capture_opts.all_ifaces, i, device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ManageInterfacesDialog::checkBoxChanged(QTableWidgetItem* item)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
interface_t device;
|
||||||
|
|
||||||
|
if (item->column() != HIDE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QTableWidgetItem* nameItem = ui->localList->item(item->row(), LOCAL_NAME);
|
||||||
|
|
||||||
|
if (!nameItem) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString name = nameItem->text();
|
||||||
|
/* See if this is the currently selected capturing device */
|
||||||
|
|
||||||
|
for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
|
||||||
|
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
|
||||||
|
if (name.compare(device.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (prefs.capture_device && strstr(prefs.capture_device, device.name) && item->checkState() == Qt::Checked) {
|
||||||
|
/* Don't allow current interface to be hidden */
|
||||||
|
QMessageBox::warning(this, tr("Error"),
|
||||||
|
tr("Default interface cannot be hidden."));
|
||||||
|
item->setCheckState(Qt::Unchecked);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ManageInterfacesDialog::on_localButtonBox_accepted()
|
||||||
|
{
|
||||||
|
gchar *new_hide = g_strdup("");
|
||||||
|
gchar *new_comment = NULL;
|
||||||
|
QString name;
|
||||||
|
gchar *tmp_descr = NULL;
|
||||||
|
|
||||||
|
if (global_capture_opts.all_ifaces->len > 0) {
|
||||||
|
new_hide = (gchar*)g_malloc0(MAX_VAL_LEN);
|
||||||
|
for (int row = 0; row < ui->localList->rowCount(); row++) {
|
||||||
|
QTableWidgetItem* hitem = ui->localList->item(row, HIDE);
|
||||||
|
checkBoxChanged(hitem);
|
||||||
|
if (hitem->checkState() == Qt::Checked) {
|
||||||
|
name = ui->localList->item(row, LOCAL_NAME)->text();
|
||||||
|
g_strlcat (new_hide, ",", MAX_VAL_LEN);
|
||||||
|
g_strlcat (new_hide, name.toUtf8().constData(), MAX_VAL_LEN);
|
||||||
|
}
|
||||||
|
saveLocalHideChanges(hitem);
|
||||||
|
}
|
||||||
|
/* write new "hidden" string to preferences */
|
||||||
|
g_free(prefs.capture_devices_hide);
|
||||||
|
prefs.capture_devices_hide = new_hide;
|
||||||
|
hide_interface(g_strdup(new_hide));
|
||||||
|
|
||||||
|
new_comment = (gchar*)g_malloc0(MAX_VAL_LEN);
|
||||||
|
for (int row = 0; row < ui->localList->rowCount(); row++) {
|
||||||
|
name = ui->localList->item(row, LOCAL_NAME)->text();
|
||||||
|
QTableWidgetItem* citem = ui->localList->item(row, COMMENT);
|
||||||
|
if (citem->text().compare("")) {
|
||||||
|
g_strlcat (new_comment, ",", MAX_VAL_LEN);
|
||||||
|
tmp_descr = g_strdup_printf("%s(%s)", name.toUtf8().constData(), citem->text().toUtf8().constData());
|
||||||
|
g_strlcat (new_comment, tmp_descr, MAX_VAL_LEN);
|
||||||
|
g_free(tmp_descr);
|
||||||
|
}
|
||||||
|
saveLocalCommentChanges(citem);
|
||||||
|
}
|
||||||
|
/* write new description string to preferences */
|
||||||
|
if (prefs.capture_devices_descr)
|
||||||
|
g_free(prefs.capture_devices_descr);
|
||||||
|
prefs.capture_devices_descr = new_comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* save changes to the preferences file */
|
||||||
|
if (!prefs.gui_use_pref_save) {
|
||||||
|
prefs_main_write();
|
||||||
|
}
|
||||||
|
emit ifsChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NewFileDelegate::NewFileDelegate(QObject *parent)
|
||||||
|
: QStyledItemDelegate(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NewFileDelegate::~NewFileDelegate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QWidget* NewFileDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(option);
|
||||||
|
Q_UNUSED(index);
|
||||||
|
|
||||||
|
QWidget * widg = new QWidget(parent);
|
||||||
|
QHBoxLayout *hbox = new QHBoxLayout(widg);
|
||||||
|
widg->setLayout(hbox);
|
||||||
|
QLineEdit *le = new QLineEdit(widg);
|
||||||
|
QPushButton *pb = new QPushButton(widg);
|
||||||
|
pb->setText(QString(tr("Browse...")));
|
||||||
|
le->setText(table->currentItem()->text());
|
||||||
|
hbox->addWidget(le);
|
||||||
|
hbox->addWidget(pb);
|
||||||
|
hbox->setMargin(0);
|
||||||
|
|
||||||
|
connect(le, SIGNAL(textEdited(const QString &)), this, SLOT(setTextField(const QString &)));
|
||||||
|
connect(le, SIGNAL(editingFinished()), this, SLOT(stopEditor()));
|
||||||
|
connect(pb, SIGNAL(pressed()), this, SLOT(browse_button_clicked()));
|
||||||
|
return widg;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NewFileDelegate::setTextField(const QString &text)
|
||||||
|
{
|
||||||
|
table->currentItem()->setText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NewFileDelegate::stopEditor()
|
||||||
|
{
|
||||||
|
closeEditor(table->cellWidget(table->currentRow(), 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
void NewFileDelegate::browse_button_clicked()
|
||||||
|
{
|
||||||
|
char *open_dir = NULL;
|
||||||
|
|
||||||
|
switch (prefs.gui_fileopen_style) {
|
||||||
|
|
||||||
|
case FO_STYLE_LAST_OPENED:
|
||||||
|
open_dir = get_last_open_dir();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FO_STYLE_SPECIFIED:
|
||||||
|
if (prefs.gui_fileopen_dir[0] != '\0')
|
||||||
|
open_dir = prefs.gui_fileopen_dir;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
QString file_name = QFileDialog::getOpenFileName(table, tr("Open Pipe"), open_dir);
|
||||||
|
closeEditor(table->cellWidget(table->currentRow(), 0));
|
||||||
|
table->currentItem()->setText(file_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_LIBPCAP */
|
||||||
|
//
|
||||||
|
// Editor modelines - http://www.wireshark.org/tools/modelines.html
|
||||||
|
//
|
||||||
|
// Local variables:
|
||||||
|
// c-basic-offset: 4
|
||||||
|
// tab-width: 4
|
||||||
|
// indent-tabs-mode: nil
|
||||||
|
// End:
|
||||||
|
//
|
||||||
|
// vi: set shiftwidth=4 tabstop=4 expandtab:
|
||||||
|
// :indentSize=4:tabSize=4:noTabs=true:
|
||||||
|
//
|
|
@ -0,0 +1,106 @@
|
||||||
|
/* manage_interfaces_dialog.h
|
||||||
|
*
|
||||||
|
* Wireshark - Network traffic analyzer
|
||||||
|
* By Gerald Combs <gerald@wireshark.org>
|
||||||
|
* Copyright 1998 Gerald Combs
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MANAGE_INTERFACES_DIALOG_H
|
||||||
|
#define MANAGE_INTERFACES_DIALOG_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QTableWidget>
|
||||||
|
#include <QStyledItemDelegate>
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
HIDE = 0,
|
||||||
|
FRIENDLY,
|
||||||
|
LOCAL_NAME,
|
||||||
|
COMMENT,
|
||||||
|
NUM_LOCAL_COLUMNS
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class NewFileDelegate : public QStyledItemDelegate
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
QTableWidget* table;
|
||||||
|
|
||||||
|
public:
|
||||||
|
NewFileDelegate(QObject *parent = 0);
|
||||||
|
~NewFileDelegate();
|
||||||
|
|
||||||
|
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
||||||
|
void setTable(QTableWidget* tb) { table = tb; };
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void browse_button_clicked();
|
||||||
|
void setTextField(const QString &text);
|
||||||
|
void stopEditor();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class ManageInterfacesDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ManageInterfacesDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ManageInterfacesDialog(QWidget *parent = 0);
|
||||||
|
~ManageInterfacesDialog();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::ManageInterfacesDialog *ui;
|
||||||
|
NewFileDelegate new_pipe_item_delegate_;
|
||||||
|
|
||||||
|
void showPipes();
|
||||||
|
void showLocalInterfaces();
|
||||||
|
void saveLocalHideChanges(QTableWidgetItem *item);
|
||||||
|
void saveLocalCommentChanges(QTableWidgetItem *item);
|
||||||
|
void checkBoxChanged(QTableWidgetItem *item);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void ifsChanged();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_addButton_clicked();
|
||||||
|
void on_buttonBox_accepted();
|
||||||
|
void on_delButton_clicked();
|
||||||
|
void on_localButtonBox_accepted();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MANAGE_INTERFACES_DIALOG_H
|
||||||
|
|
||||||
|
//
|
||||||
|
// Editor modelines - http://www.wireshark.org/tools/modelines.html
|
||||||
|
//
|
||||||
|
// Local variables:
|
||||||
|
// c-basic-offset: 4
|
||||||
|
// tab-width: 4
|
||||||
|
// indent-tabs-mode: nil
|
||||||
|
// End:
|
||||||
|
//
|
||||||
|
// vi: set shiftwidth=4 tabstop=4 expandtab:
|
||||||
|
// :indentSize=4:tabSize=4:noTabs=true:
|
||||||
|
//
|
|
@ -0,0 +1,327 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ManageInterfacesDialog</class>
|
||||||
|
<widget class="QDialog" name="ManageInterfacesDialog">
|
||||||
|
<property name="windowModality">
|
||||||
|
<enum>Qt::ApplicationModal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>574</width>
|
||||||
|
<height>338</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Manage Interfaces</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p><br/></p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="modal">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="Pipes">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Add a pipe to capture from or remove an existing pipe from the list.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Pipes</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QTableWidget" name="pipeList">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="baseSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="verticalScrollBarPolicy">
|
||||||
|
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||||
|
</property>
|
||||||
|
<property name="horizontalScrollBarPolicy">
|
||||||
|
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||||
|
</property>
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="selectionMode">
|
||||||
|
<enum>QAbstractItemView::SingleSelection</enum>
|
||||||
|
</property>
|
||||||
|
<property name="selectionBehavior">
|
||||||
|
<enum>QAbstractItemView::SelectRows</enum>
|
||||||
|
</property>
|
||||||
|
<property name="showGrid">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="rowCount">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="columnCount">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<attribute name="horizontalHeaderVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="horizontalHeaderStretchLastSection">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="verticalHeaderVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<row/>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Pipe</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="addButton">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Add a new pipe using default settings.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../image/toolbar.qrc">
|
||||||
|
<normaloff>:/stock/plus-8.png</normaloff>:/stock/plus-8.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="delButton">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Remove the selected pipe from the list.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../image/toolbar.qrc">
|
||||||
|
<normaloff>:/stock/minus-8.png</normaloff>:/stock/minus-8.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="Local">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Click the checkbox to hide or show a hidden interface.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Local Interfaces</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QTableWidget" name="localList">
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::DoubleClicked</set>
|
||||||
|
</property>
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="selectionMode">
|
||||||
|
<enum>QAbstractItemView::SingleSelection</enum>
|
||||||
|
</property>
|
||||||
|
<property name="selectionBehavior">
|
||||||
|
<enum>QAbstractItemView::SelectRows</enum>
|
||||||
|
</property>
|
||||||
|
<attribute name="horizontalHeaderStretchLastSection">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="verticalHeaderVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Hide</string>
|
||||||
|
</property>
|
||||||
|
<property name="textAlignment">
|
||||||
|
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Friendly Name</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Interface Name</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Comment</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="localButtonBox">
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="Remote">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Remote Interfaces</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources>
|
||||||
|
<include location="../../image/toolbar.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>ManageInterfacesDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>469</x>
|
||||||
|
<y>303</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>164</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>ManageInterfacesDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>469</x>
|
||||||
|
<y>303</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>164</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>localButtonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>ManageInterfacesDialog</receiver>
|
||||||
|
<slot>close()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>469</x>
|
||||||
|
<y>303</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>164</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>localButtonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>ManageInterfacesDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>469</x>
|
||||||
|
<y>303</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>164</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
Loading…
Reference in New Issue