Add "Export Packet Bytes".
svn path=/trunk/; revision=45567
This commit is contained in:
parent
be4c14ff77
commit
677c913f42
|
@ -86,6 +86,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
gbl_cur_main_window = this;
|
||||
main_ui_->setupUi(this);
|
||||
setMenusForCaptureFile();
|
||||
setMenusForSelectedTreeRow();
|
||||
setForCaptureInProgress(false);
|
||||
setMenusForFileSet(false);
|
||||
|
||||
|
@ -203,6 +204,8 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
|
||||
connect(proto_tree, SIGNAL(protoItemSelected(bool)),
|
||||
main_ui_->actionViewExpandSubtrees, SLOT(setEnabled(bool)));
|
||||
connect(proto_tree, SIGNAL(protoItemSelected(field_info *)),
|
||||
this, SLOT(setMenusForSelectedTreeRow(field_info *)));
|
||||
|
||||
connect(&file_set_dialog_, SIGNAL(fileSetOpenCaptureFile(QString&)),
|
||||
this, SLOT(openCaptureFile(QString&)));
|
||||
|
|
|
@ -150,6 +150,7 @@ private slots:
|
|||
|
||||
void updateRecentFiles();
|
||||
void recentActionTriggered();
|
||||
void setMenusForSelectedTreeRow(field_info *fi = NULL);
|
||||
|
||||
void on_actionFileOpen_triggered();
|
||||
void on_actionFileMerge_triggered();
|
||||
|
@ -167,6 +168,7 @@ private slots:
|
|||
void on_actionFileExportAsCArrays_triggered();
|
||||
void on_actionFileExportAsPSML_triggered();
|
||||
void on_actionFileExportAsPDML_triggered();
|
||||
void on_actionFileExportPacketBytes_triggered();
|
||||
|
||||
void on_actionGoGoToPacket_triggered();
|
||||
void resetPreviousFocus();
|
||||
|
|
|
@ -21,6 +21,9 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "main_window.h"
|
||||
#include "ui_main_window.h"
|
||||
|
||||
|
@ -40,9 +43,12 @@
|
|||
#include "capture_ui_utils.h"
|
||||
#endif
|
||||
|
||||
#include "ui/main_statusbar.h"
|
||||
#include "wsutil/file_util.h"
|
||||
|
||||
#include "ui/alert_box.h"
|
||||
#include "ui/capture_globals.h"
|
||||
#include "ui/help_url.h"
|
||||
#include "ui/main_statusbar.h"
|
||||
|
||||
#include "wireshark_application.h"
|
||||
#include "capture_file_dialog.h"
|
||||
|
@ -310,6 +316,8 @@ void MainWindow::captureFileClosed(const capture_file *cf) {
|
|||
|
||||
main_ui_->statusBar->popFileStatus();
|
||||
cap_file_ = NULL;
|
||||
|
||||
setMenusForSelectedTreeRow();
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -503,6 +511,113 @@ void MainWindow::recentActionTriggered() {
|
|||
}
|
||||
}
|
||||
|
||||
void MainWindow::setMenusForSelectedTreeRow(field_info *fi) {
|
||||
gboolean properties;
|
||||
gint id;
|
||||
|
||||
// XXX Add commented items below
|
||||
|
||||
if (cap_file_) {
|
||||
cap_file_->finfo_selected = fi;
|
||||
}
|
||||
|
||||
if (cap_file_ != NULL && fi != NULL) {
|
||||
header_field_info *hfinfo = fi->hfinfo;
|
||||
const char *abbrev;
|
||||
// char *prev_abbrev;
|
||||
|
||||
if (hfinfo->parent == -1) {
|
||||
abbrev = hfinfo->abbrev;
|
||||
id = (hfinfo->type == FT_PROTOCOL) ? proto_get_id((protocol_t *)hfinfo->strings) : -1;
|
||||
} else {
|
||||
abbrev = proto_registrar_get_abbrev(hfinfo->parent);
|
||||
id = hfinfo->parent;
|
||||
}
|
||||
properties = prefs_is_registered_protocol(abbrev);
|
||||
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu,
|
||||
// "/TreeViewPopup/GotoCorrespondingPacket", hfinfo->type == FT_FRAMENUM);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/Copy",
|
||||
// TRUE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/Copy/AsFilter",
|
||||
// proto_can_match_selected(cf->finfo_selected, cf->edt));
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ApplyasColumn",
|
||||
// hfinfo->type != FT_NONE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ApplyAsFilter",
|
||||
// proto_can_match_selected(cf->finfo_selected, cf->edt));
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/PrepareaFilter",
|
||||
// proto_can_match_selected(cf->finfo_selected, cf->edt));
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ColorizewithFilter",
|
||||
// proto_can_match_selected(cf->finfo_selected, cf->edt));
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ProtocolPreferences",
|
||||
// properties);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/DisableProtocol",
|
||||
// (id == -1) ? FALSE : proto_can_toggle_protocol(id));
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ExpandSubtrees",
|
||||
// cf->finfo_selected->tree_type != -1);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/WikiProtocolPage",
|
||||
// (id == -1) ? FALSE : TRUE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/FilterFieldReference",
|
||||
// (id == -1) ? FALSE : TRUE);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar,
|
||||
main_ui_->actionFileExportPacketBytes->setEnabled(true);
|
||||
|
||||
// set_menu_sensitivity(ui_manager_main_menubar,
|
||||
// "/Menubar/GoMenu/GotoCorrespondingPacket", hfinfo->type == FT_FRAMENUM);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/Copy/Description",
|
||||
// proto_can_match_selected(cf->finfo_selected, cf->edt));
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/Copy/Fieldname",
|
||||
// proto_can_match_selected(cf->finfo_selected, cf->edt));
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/Copy/Value",
|
||||
// proto_can_match_selected(cf->finfo_selected, cf->edt));
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/Copy/AsFilter",
|
||||
// proto_can_match_selected(cf->finfo_selected, cf->edt));
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/ApplyasColumn",
|
||||
// hfinfo->type != FT_NONE);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/ApplyAsFilter",
|
||||
// proto_can_match_selected(cf->finfo_selected, cf->edt));
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/PrepareaFilter",
|
||||
// proto_can_match_selected(cf->finfo_selected, cf->edt));
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/ViewMenu/ExpandSubtrees",
|
||||
// cf->finfo_selected->tree_type != -1);
|
||||
// prev_abbrev = g_object_get_data(G_OBJECT(ui_manager_tree_view_menu), "menu_abbrev");
|
||||
// if (!prev_abbrev || (strcmp (prev_abbrev, abbrev) != 0)) {
|
||||
// /* No previous protocol or protocol changed - update Protocol Preferences menu */
|
||||
// module_t *prefs_module_p = prefs_find_module(abbrev);
|
||||
// rebuild_protocol_prefs_menu (prefs_module_p, properties);
|
||||
|
||||
// g_object_set_data(G_OBJECT(ui_manager_tree_view_menu), "menu_abbrev", g_strdup(abbrev));
|
||||
// g_free (prev_abbrev);
|
||||
// }
|
||||
} else {
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu,
|
||||
// "/TreeViewPopup/GotoCorrespondingPacket", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/Copy", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ApplyasColumn", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ApplyAsFilter", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/PrepareaFilter", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ColorizewithFilter", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ProtocolPreferences",
|
||||
// FALSE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/DisableProtocol", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ExpandSubtrees", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/WikiProtocolPage",
|
||||
// FALSE);
|
||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/FilterFieldReference",
|
||||
// FALSE);
|
||||
main_ui_->actionFileExportPacketBytes->setEnabled(false);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar,
|
||||
// "/Menubar/GoMenu/GotoCorrespondingPacket", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/Copy/Description", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/Copy/Fieldname", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/Copy/Value", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/Copy/AsFilter", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/ApplyasColumn", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/ApplyAsFilter", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/PrepareaFilter", FALSE);
|
||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/ViewMenu/ExpandSubtrees", FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// File Menu
|
||||
|
@ -592,6 +707,43 @@ void MainWindow::on_actionFileExportAsPDML_triggered()
|
|||
exportDissections(export_type_pdml);
|
||||
}
|
||||
|
||||
void MainWindow::on_actionFileExportPacketBytes_triggered()
|
||||
{
|
||||
QString file_name;
|
||||
|
||||
if (!cap_file_ || !cap_file_->finfo_selected) return;
|
||||
|
||||
file_name = QFileDialog::getSaveFileName(this,
|
||||
tr("Wireshark: Export Selected Packet Bytes"),
|
||||
wsApp->lastOpenDir().absolutePath(),
|
||||
tr("Raw data (*.bin *.dat *.raw);;Any File (*.*)")
|
||||
);
|
||||
|
||||
if (file_name.length() > 0) {
|
||||
const guint8 *data_p;
|
||||
int fd;
|
||||
|
||||
data_p = tvb_get_ptr(cap_file_->finfo_selected->ds_tvb, 0, -1) +
|
||||
cap_file_->finfo_selected->start;
|
||||
fd = ws_open(file_name.toUtf8().constData(), O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666);
|
||||
if (fd == -1) {
|
||||
open_failure_alert_box(file_name.toUtf8().constData(), errno, TRUE);
|
||||
return;
|
||||
}
|
||||
if (write(fd, data_p, cfile.finfo_selected->length) < 0) {
|
||||
write_failure_alert_box(file_name.toUtf8().constData(), errno);
|
||||
::close(fd);
|
||||
return;
|
||||
}
|
||||
if (::close(fd) < 0) {
|
||||
write_failure_alert_box(file_name.toUtf8().constData(), errno);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Save the directory name for future file dialogs. */
|
||||
wsApp->setLastOpenDir(&file_name);
|
||||
}
|
||||
}
|
||||
|
||||
// View Menu
|
||||
|
||||
|
|
|
@ -202,10 +202,10 @@ void ProtoTree::updateSelectionStatus(QTreeWidgetItem* item) {
|
|||
itemInfo.append(QString(tr(", %1 bytes")).arg(finfo_length));
|
||||
}
|
||||
|
||||
emit protoItemSelected(new QString());
|
||||
emit protoItemSelected(false);
|
||||
emit protoItemSelected(*new QString());
|
||||
emit protoItemSelected(NULL);
|
||||
emit protoItemSelected(itemInfo);
|
||||
emit protoItemSelected(true);
|
||||
emit protoItemSelected(fi);
|
||||
} // else the GTK+ version pushes an empty string as described below.
|
||||
/*
|
||||
* Don't show anything if the field name is zero-length;
|
||||
|
@ -228,8 +228,8 @@ void ProtoTree::updateSelectionStatus(QTreeWidgetItem* item) {
|
|||
*/
|
||||
|
||||
} else {
|
||||
emit protoItemSelected(new QString());
|
||||
emit protoItemSelected(false);
|
||||
emit protoItemSelected(*new QString());
|
||||
emit protoItemSelected(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ private:
|
|||
|
||||
signals:
|
||||
void protoItemSelected(QString &);
|
||||
void protoItemSelected(bool);
|
||||
void protoItemSelected(field_info *);
|
||||
void goToFrame(int);
|
||||
|
||||
public slots:
|
||||
|
|
Loading…
Reference in New Issue