5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
35 #include "ui/ui_util.h"
37 #include <epan/prefs.h>
40 #include "capture_opts.h"
42 #include "capture_session.h"
44 #include <QMainWindow>
50 # include <QSocketNotifier>
53 #include "main_welcome.h"
54 #include "packet_list.h"
55 #include "display_filter_combo.h"
56 #include "progress_bar.h"
57 #include "file_set_dialog.h"
58 #include "capture_file_dialog.h"
59 #include "summary_dialog.h"
60 #include "follow_stream_dialog.h"
61 #include "capture_interfaces_dialog.h"
62 #include "about_dialog.h"
70 class MainWindow : public QMainWindow
75 explicit MainWindow(QWidget *parent = 0);
77 void setPipeInputHandler(gint source, gpointer user_data, int *child_process, pipe_input_cb_t input_cb);
82 bool eventFilter(QObject *obj, QEvent *event);
83 void keyPressEvent(QKeyEvent *event);
84 void closeEvent (QCloseEvent *event);
97 CopySelectedDescription,
98 CopySelectedFieldName,
102 Ui::MainWindow *main_ui_;
103 QMenu *open_recent_menu_;
104 QSplitter master_split_;
105 QSplitter extra_split_;
106 MainWelcome *main_welcome_;
107 DisplayFilterCombo *df_combo_box_;
108 capture_file *cap_file_;
109 // XXX - packet_list_, proto_tree_, and byte_view_tab_ should
110 // probably be full-on values instead of pointers.
111 PacketList *packet_list_;
112 ProtoTree *proto_tree_;
113 QWidget *previous_focus_;
114 FileSetDialog file_set_dialog_;
115 SummaryDialog summary_dialog_;
116 ByteViewTab *byte_view_tab_;
119 bool capture_stopping_;
120 bool capture_filter_valid_;
122 CaptureInterfacesDialog capture_interfaces_dialog_;
127 gpointer pipe_user_data_;
128 int *pipe_child_process_;
129 pipe_input_cb_t pipe_input_cb_;
133 QSocketNotifier *pipe_notifier_;
136 void saveWindowGeometry();
137 QWidget* getLayoutWidget(layout_pane_content_e type);
139 void mergeCaptureFile();
140 void importCaptureFile();
141 void saveCaptureFile(capture_file *cf, bool stay_closed);
142 void saveAsCaptureFile(capture_file *cf, bool must_support_comments, bool stay_closed);
143 void exportSelectedPackets();
144 void exportDissections(export_type_e export_type);
146 void fileAddExtension(QString &file_name, int file_type, bool compressed);
147 bool testCaptureFileClose(bool from_quit = false, QString& before_what = *new QString());
150 void setTitlebarForSelectedTreeRow();
151 void setTitlebarForCaptureFile();
152 void setTitlebarForCaptureInProgress();
153 void setMenusForCaptureFile(bool force_disable = false);
154 void setMenusForCaptureInProgress(bool capture_in_progress = false);
155 void setMenusForCaptureStopping();
156 void setForCapturedPackets(bool have_captured_packets);
157 void setMenusForFileSet(bool enable_list_files);
159 void setForCaptureInProgress(gboolean capture_in_progress = false);
162 void showProgress(progdlg_t **dlg_p, bool animate, const QString message, bool terminate_is_stop, bool *stop_flag, float pct);
163 void setCaptureFile(capture_file *cf);
164 void setDissectedCaptureFile(capture_file *cf);
165 void displayFilterSuccess(bool success);
168 // in main_window_slots.cpp
169 void openCaptureFile(QString& cf_path = *new QString(), QString &display_filter = *new QString());
170 void filterPackets(QString& new_filter = *new QString(), bool force = false);
171 void updateForUnsavedChanges();
174 void captureCapturePrepared(capture_session *cap_session);
175 void captureCaptureUpdateStarted(capture_session *cap_session);
176 void captureCaptureUpdateFinished(capture_session *cap_session);
177 void captureCaptureFixedStarted(capture_session *cap_session);
178 void captureCaptureFixedFinished(capture_session *cap_session);
179 void captureCaptureStopping(capture_session *cap_session);
180 void captureCaptureFailed(capture_session *cap_session);
182 void captureFileOpened(const capture_file *cf);
183 void captureFileReadStarted(const capture_file *cf);
184 void captureFileReadFinished(const capture_file *cf);
185 void captureFileClosing(const capture_file *cf);
186 void captureFileClosed(const capture_file *cf);
188 void configurationProfileChanged(const gchar *profile_name);
189 void filterExpressionsChanged();
192 // in main_window_slots.cpp
195 void pipeActivated(int source);
196 void pipeNotifierDestroyed();
199 void loadWindowGeometry();
200 void updateRecentFiles();
201 void recentActionTriggered();
202 void setMenusForFollowStream();
203 void setMenusForSelectedPacket();
204 void setMenusForSelectedTreeRow(field_info *fi = NULL);
205 void interfaceSelectionChanged();
206 void captureFilterSyntaxChanged(bool valid);
207 void redissectPackets();
208 void recreatePacketList();
210 void setFeaturesEnabled(bool enabled = true);
212 void addDisplayFilterButton(QString df_text);
213 void displayFilterButtonClicked();
215 // We should probably move these to main_window_actions.cpp similar to
216 // gtk/main_menubar.c
217 void on_actionFileOpen_triggered();
218 void on_actionFileMerge_triggered();
219 void on_actionFileImportFromHexDump_triggered();
220 void on_actionFileClose_triggered();
221 void on_actionFileSave_triggered();
222 void on_actionFileSaveAs_triggered();
223 void on_actionFileSetListFiles_triggered();
224 void on_actionFileSetNextFile_triggered();
225 void on_actionFileSetPreviousFile_triggered();
226 void on_actionFileExportPackets_triggered();
227 void on_actionFileExportAsPlainText_triggered();
228 // We're dropping PostScript exports
229 void on_actionFileExportAsCSV_triggered();
230 void on_actionFileExportAsCArrays_triggered();
231 void on_actionFileExportAsPSML_triggered();
232 void on_actionFileExportAsPDML_triggered();
233 void on_actionFileExportPacketBytes_triggered();
234 void on_actionFileExportObjectsDICOM_triggered();
235 void on_actionFileExportObjectsHTTP_triggered();
236 void on_actionFileExportObjectsSMB_triggered();
237 void on_actionFilePrint_triggered();
239 void on_actionFileExportSSLSessionKeys_triggered();
241 void actionEditCopyTriggered(MainWindow::CopySelected selection_type);
242 void on_actionEditCopyDescription_triggered();
243 void on_actionEditCopyFieldName_triggered();
244 void on_actionEditCopyValue_triggered();
245 void on_actionEditCopyAsFilter_triggered();
246 void on_actionEditFindPacket_triggered();
247 void on_actionEditFindNext_triggered();
248 void on_actionEditFindPrevious_triggered();
249 void on_actionEditMarkPacket_triggered();
250 void on_actionEditMarkAllDisplayed_triggered();
251 void on_actionEditUnmarkAllDisplayed_triggered();
252 void on_actionEditNextMark_triggered();
253 void on_actionEditPreviousMark_triggered();
254 void on_actionEditIgnorePacket_triggered();
255 void on_actionEditIgnoreAllDisplayed_triggered();
256 void on_actionEditUnignoreAllDisplayed_triggered();
257 void on_actionEditSetTimeReference_triggered();
258 void on_actionEditUnsetAllTimeReferences_triggered();
259 void on_actionEditNextTimeReference_triggered();
260 void on_actionEditPreviousTimeReference_triggered();
261 void on_actionEditTimeShift_triggered();
262 void on_actionEditPacketComment_triggered();
263 void on_actionEditConfigurationProfiles_triggered();
264 void on_actionEditPreferences_triggered();
266 void on_actionViewReload_triggered();
268 void on_actionGoGoToPacket_triggered();
269 void resetPreviousFocus();
272 void on_actionCaptureOptions_triggered();
275 void matchSelectedFilter(MainWindow::MatchSelected filter_type, bool apply = false, bool copy_only = false);
276 void on_actionAnalyzeAAFSelected_triggered();
277 void on_actionAnalyzeAAFNotSelected_triggered();
278 void on_actionAnalyzeAAFAndSelected_triggered();
279 void on_actionAnalyzeAAFOrSelected_triggered();
280 void on_actionAnalyzeAAFAndNotSelected_triggered();
281 void on_actionAnalyzeAAFOrNotSelected_triggered();
282 void on_actionAnalyzePAFSelected_triggered();
283 void on_actionAnalyzePAFNotSelected_triggered();
284 void on_actionAnalyzePAFAndSelected_triggered();
285 void on_actionAnalyzePAFOrSelected_triggered();
286 void on_actionAnalyzePAFAndNotSelected_triggered();
287 void on_actionAnalyzePAFOrNotSelected_triggered();
289 void on_actionAnalyzeDecodeAs_triggered();
291 void openFollowStreamDialog(follow_type_t type);
292 void on_actionAnalyzeFollowTCPStream_triggered();
293 void on_actionAnalyzeFollowUDPStream_triggered();
294 void on_actionAnalyzeFollowSSLStream_triggered();
296 void on_actionHelpContents_triggered();
297 void on_actionHelpMPWireshark_triggered();
298 void on_actionHelpMPWireshark_Filter_triggered();
299 void on_actionHelpMPCapinfos_triggered();
300 void on_actionHelpMPDumpcap_triggered();
301 void on_actionHelpMPEditcap_triggered();
302 void on_actionHelpMPMergecap_triggered();
303 void on_actionHelpMPRawShark_triggered();
304 void on_actionHelpMPReordercap_triggered();
305 void on_actionHelpMPText2cap_triggered();
306 void on_actionHelpMPTShark_triggered();
307 void on_actionHelpWebsite_triggered();
308 void on_actionHelpFAQ_triggered();
309 void on_actionHelpAsk_triggered();
310 void on_actionHelpDownloads_triggered();
311 void on_actionHelpWiki_triggered();
312 void on_actionHelpSampleCaptures_triggered();
313 void on_actionHelpAbout_triggered();
315 #ifdef HAVE_SOFTWARE_UPDATE
316 void on_actionHelpCheckForUpdates_triggered();
319 void on_goToCancel_clicked();
320 void on_goToGo_clicked();
321 void on_goToLineEdit_returnPressed();
322 void on_actionStartCapture_triggered();
323 void on_actionStopCapture_triggered();
325 void on_actionSummary_triggered();
326 void on_actionStatisticsFlowGraph_triggered();
327 void openTcpStreamDialog(int graph_type);
328 void on_actionStatisticsTcpStreamStevens_triggered();
329 void on_actionStatisticsTcpStreamTcptrace_triggered();
330 void on_actionStatisticsTcpStreamThroughput_triggered();
331 void on_actionStatisticsTcpStreamRoundTripTime_triggered();
332 void on_actionStatisticsTcpStreamWindowScaling_triggered();
333 void openSCTPAllAssocsDialog();
334 void on_actionSCTPShowAllAssociations_triggered();
335 void on_actionSCTPAnalyseThisAssociation_triggered();
336 void on_actionSCTPFilterThisAssociation_triggered();
339 void on_actionCaptureInterfaces_triggered();
342 void openStatisticsTreeDialog(const gchar *abbr);
343 void on_actionStatisticsANCP_triggered();
344 void on_actionStatisticsBACappInstanceId_triggered();
345 void on_actionStatisticsBACappIP_triggered();
346 void on_actionStatisticsBACappObjectId_triggered();
347 void on_actionStatisticsBACappService_triggered();
348 void on_actionStatisticsCollectd_triggered();
349 void on_actionStatisticsHART_IP_triggered();
350 void on_actionStatisticsHTTPPacketCounter_triggered();
351 void on_actionStatisticsHTTPRequests_triggered();
352 void on_actionStatisticsHTTPLoadDistribution_triggered();
353 void on_actionStatisticsPacketLen_triggered();
354 void on_actionStatisticsSametime_triggered();
356 void on_actionTelephonyISUPMessages_triggered();
357 void on_actionTelephonyRTSPPacketCounter_triggered();
358 void on_actionTelephonySMPPOperations_triggered();
359 void on_actionTelephonyUCPMessages_triggered();
362 #endif // MAINWINDOW_H
370 * indent-tabs-mode: nil
373 * ex: set shiftwidth=4 tabstop=8 expandtab:
374 * :indentSize=4:tabSize=8:noTabs=true: