PageRenderTime 63ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 2ms

/ui/gtk/main_menubar.c

https://github.com/labx-technologies-llc/wireshark
C | 5722 lines | 4541 code | 715 blank | 466 comment | 475 complexity | fbd6208c3ec2216cd908c85ba63afb34 MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause

Large files files are truncated, but you can click here to view the full file

  1. /* main_menubar.c
  2. * Menu routines
  3. *
  4. * $Id$
  5. *
  6. * Wireshark - Network traffic analyzer
  7. * By Gerald Combs <gerald@wireshark.org>
  8. * Copyright 1998 Gerald Combs
  9. *
  10. * This program is free software; you can redistribute it and/or
  11. * modify it under the terms of the GNU General Public License
  12. * as published by the Free Software Foundation; either version 2
  13. * of the License, or (at your option) any later version.
  14. *
  15. * This program is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. * GNU General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU General Public License
  21. * along with this program; if not, write to the Free Software
  22. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  23. */
  24. #include "config.h"
  25. #include <gtk/gtk.h>
  26. #include <stdio.h>
  27. #include <string.h>
  28. #include <wsutil/u3.h>
  29. #include <epan/packet.h>
  30. #include <epan/addr_resolv.h>
  31. #include <epan/prefs.h>
  32. #include <epan/prefs-int.h>
  33. #include <epan/tap.h>
  34. #include <epan/timestamp.h>
  35. #include <epan/etypes.h>
  36. #include <epan/ipproto.h>
  37. #include <epan/dissector_filters.h>
  38. #include <epan/strutil.h>
  39. #include <epan/plugins.h>
  40. #include <epan/epan_dissect.h>
  41. #include <epan/column.h>
  42. #include <epan/stats_tree_priv.h>
  43. #include <epan/filesystem.h>
  44. #include <epan/print.h>
  45. #include "cfile.h"
  46. #include "globals.h"
  47. #include "color_filters.h"
  48. #include "stat_menu.h"
  49. #include "ui/iface_lists.h"
  50. #include "ui/main_statusbar.h"
  51. #include "ui/preference_utils.h"
  52. #include "ui/recent.h"
  53. #include "ui/recent_utils.h"
  54. #include "ui/simple_dialog.h"
  55. #include "ui/software_update.h"
  56. #include "ui/ui_util.h"
  57. #include "ui/utf8_entities.h"
  58. #include "ui/gtk/about_dlg.h"
  59. #include "ui/gtk/capture_dlg.h"
  60. #include "ui/gtk/capture_if_dlg.h"
  61. #include "ui/gtk/color_dlg.h"
  62. #include "ui/gtk/export_object_dlg.h"
  63. #include "ui/gtk/filter_dlg.h"
  64. #include "ui/gtk/profile_dlg.h"
  65. #include "ui/gtk/dlg_utils.h"
  66. #include "ui/gtk/capture_file_dlg.h"
  67. #include "ui/gtk/fileset_dlg.h"
  68. #include "ui/gtk/file_import_dlg.h"
  69. #include "ui/gtk/find_dlg.h"
  70. #include "ui/gtk/goto_dlg.h"
  71. #include "ui/gtk/summary_dlg.h"
  72. #include "ui/gtk/prefs_dlg.h"
  73. #include "ui/gtk/packet_win.h"
  74. #include "ui/gtk/follow_tcp.h"
  75. #include "ui/gtk/follow_udp.h"
  76. #include "ui/gtk/follow_ssl.h"
  77. #include "ui/gtk/decode_as_dlg.h"
  78. #include "ui/gtk/help_dlg.h"
  79. #include "ui/gtk/supported_protos_dlg.h"
  80. #include "ui/gtk/proto_dlg.h"
  81. #include "ui/gtk/proto_hier_stats_dlg.h"
  82. #include "ui/gtk/keys.h"
  83. #include "ui/gtk/stock_icons.h"
  84. #include "ui/gtk/gtkglobals.h"
  85. #include "ui/gtk/packet_panes.h"
  86. #include "ui/gtk/conversations_table.h"
  87. #include "ui/gtk/hostlist_table.h"
  88. #include "ui/gtk/packet_history.h"
  89. #include "ui/gtk/sctp_stat.h"
  90. #include "ui/gtk/firewall_dlg.h"
  91. #include "ui/gtk/macros_dlg.h"
  92. #include "epan/dissectors/packet-ssl-utils.h"
  93. #include "ui/gtk/export_sslkeys.h"
  94. #include "ui/gtk/gui_stat_menu.h"
  95. #include "ui/gtk/main.h"
  96. #include "ui/gtk/menus.h"
  97. #include "ui/gtk/main_menubar_private.h"
  98. #include "ui/gtk/main_toolbar.h"
  99. #include "ui/gtk/main_welcome.h"
  100. #include "ui/gtk/uat_gui.h"
  101. #include "ui/gtk/gui_utils.h"
  102. #include "ui/gtk/manual_addr_resolv.h"
  103. #include "ui/gtk/proto_help.h"
  104. #include "ui/gtk/dissector_tables_dlg.h"
  105. #include "ui/gtk/expert_comp_dlg.h"
  106. #include "ui/gtk/time_shift_dlg.h"
  107. #include "ui/gtk/edit_packet_comment_dlg.h"
  108. #include "ui/gtk/addr_resolution_dlg.h"
  109. #include "ui/gtk/export_pdu_dlg.h"
  110. #include "ui/gtk/packet_list.h"
  111. #ifdef HAVE_LIBPCAP
  112. #include "capture_opts.h"
  113. #include "ui/capture_globals.h"
  114. #endif
  115. #ifdef HAVE_IGE_MAC_INTEGRATION
  116. #include <ige-mac-menu.h>
  117. #endif
  118. #ifdef HAVE_GTKOSXAPPLICATION
  119. #include <gtkmacintegration/gtkosxapplication.h>
  120. #endif
  121. static int initialize = TRUE;
  122. GtkActionGroup *main_menu_bar_action_group;
  123. static GtkUIManager *ui_manager_main_menubar = NULL;
  124. static GtkUIManager *ui_manager_packet_list_heading = NULL;
  125. static GtkUIManager *ui_manager_packet_list_menu = NULL;
  126. static GtkUIManager *ui_manager_tree_view_menu = NULL;
  127. static GtkUIManager *ui_manager_bytes_menu = NULL;
  128. static GtkUIManager *ui_manager_statusbar_profiles_menu = NULL;
  129. static GSList *popup_menu_list = NULL;
  130. static GtkAccelGroup *grp;
  131. static GList *merge_menu_items_list = NULL;
  132. static GList *build_menubar_items_callback_list = NULL;
  133. GtkWidget *popup_menu_object;
  134. static void menu_open_recent_file_cmd_cb(GtkAction *action, gpointer data _U_ );
  135. static void add_recent_items (guint merge_id, GtkUIManager *ui_manager);
  136. static void add_tap_plugins (guint merge_id, GtkUIManager *ui_manager);
  137. static void menus_init(void);
  138. static void merge_menu_items(GList *node);
  139. static void ws_menubar_build_external_menus(void);
  140. static void set_menu_sensitivity (GtkUIManager *ui_manager, const gchar *, gint);
  141. static void menu_name_resolution_update_cb(GtkAction *action, gpointer data);
  142. static void name_resolution_cb(GtkWidget *w, gpointer d, gboolean* res_flag);
  143. static void colorize_cb(GtkWidget *w, gpointer d);
  144. static void rebuild_protocol_prefs_menu (module_t *prefs_module_p, gboolean preferences,
  145. GtkUIManager *ui_menu, const char *path);
  146. /* As a general GUI guideline, we try to follow the Gnome Human Interface Guidelines, which can be found at:
  147. http://developer.gnome.org/projects/gup/hig/1.0/index.html
  148. Please note: there are some differences between the Gnome HIG menu suggestions and our implementation:
  149. File/Open Recent: the Gnome HIG suggests putting the list of recently used files as elements into the File menuitem.
  150. As this is ok for only a few items, this will become unhandy for 10 or even more list entries.
  151. For this reason, we use a submenu for this.
  152. File/Close: the Gnome HIG suggests putting this item just above the Quit item.
  153. This results in unintuitive behaviour as both Close and Quit items are very near together.
  154. By putting the Close item near the open item(s), it better suggests that it will close the
  155. currently opened/captured file only.
  156. */
  157. typedef enum {
  158. CONV_ETHER = 1,
  159. CONV_IP,
  160. CONV_TCP,
  161. CONV_UDP,
  162. CONV_CBA
  163. } conv_values_e;
  164. static char *
  165. build_conversation_filter(int action, gboolean show_dialog)
  166. {
  167. packet_info *pi = &cfile.edt->pi;
  168. char *buf;
  169. switch(action) {
  170. case(CONV_CBA):
  171. if (pi->profinet_type == 0) {
  172. if (show_dialog) {
  173. simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
  174. "Error filtering conversation. Please make\n"
  175. "sure you have a PROFINET CBA packet selected.");
  176. }
  177. return NULL;
  178. }
  179. if( pi->net_src.type == AT_IPv4 && pi->net_dst.type == AT_IPv4
  180. && pi->ipproto == IP_PROTO_TCP ) {
  181. /* IPv4 */
  182. switch(pi->profinet_type) {
  183. case(1):
  184. buf = g_strdup_printf("(ip.src eq %s and ip.dst eq %s and cba.acco.dcom == 1) || (ip.src eq %s and ip.dst eq %s and cba.acco.dcom == 0)",
  185. ip_to_str( (const guint8 *)pi->net_dst.data),
  186. ip_to_str( (const guint8 *)pi->net_src.data),
  187. ip_to_str( (const guint8 *)pi->net_src.data),
  188. ip_to_str( (const guint8 *)pi->net_dst.data));
  189. break;
  190. case(2):
  191. buf = g_strdup_printf("(ip.src eq %s and ip.dst eq %s and cba.acco.dcom == 1) || (ip.src eq %s and ip.dst eq %s and cba.acco.dcom == 0)",
  192. ip_to_str( (const guint8 *)pi->net_src.data),
  193. ip_to_str( (const guint8 *)pi->net_dst.data),
  194. ip_to_str( (const guint8 *)pi->net_dst.data),
  195. ip_to_str( (const guint8 *)pi->net_src.data));
  196. break;
  197. case(3):
  198. buf = g_strdup_printf("(ip.src eq %s and ip.dst eq %s and cba.acco.srt == 1) || (ip.src eq %s and ip.dst eq %s and cba.acco.srt == 0)",
  199. ip_to_str( (const guint8 *)pi->net_dst.data),
  200. ip_to_str( (const guint8 *)pi->net_src.data),
  201. ip_to_str( (const guint8 *)pi->net_src.data),
  202. ip_to_str( (const guint8 *)pi->net_dst.data));
  203. break;
  204. case(4):
  205. buf = g_strdup_printf("(ip.src eq %s and ip.dst eq %s and cba.acco.srt == 1) || (ip.src eq %s and ip.dst eq %s and cba.acco.srt == 0)",
  206. ip_to_str( (const guint8 *)pi->net_src.data),
  207. ip_to_str( (const guint8 *)pi->net_dst.data),
  208. ip_to_str( (const guint8 *)pi->net_dst.data),
  209. ip_to_str( (const guint8 *)pi->net_src.data));
  210. break;
  211. default:
  212. return NULL;
  213. }
  214. } else {
  215. return NULL;
  216. }
  217. break;
  218. case(CONV_TCP):
  219. if (pi->ipproto != IP_PROTO_TCP) {
  220. if (show_dialog) {
  221. simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
  222. "Error filtering conversation. Please make\n"
  223. "sure you have a TCP packet selected.");
  224. }
  225. return NULL;
  226. }
  227. if( pi->net_src.type == AT_IPv4 && pi->net_dst.type == AT_IPv4 ) {
  228. /* TCP over IPv4 */
  229. buf = g_strdup_printf("(ip.addr eq %s and ip.addr eq %s) and (tcp.port eq %d and tcp.port eq %d)",
  230. ip_to_str( (const guint8 *)pi->net_src.data),
  231. ip_to_str( (const guint8 *)pi->net_dst.data),
  232. pi->srcport, pi->destport );
  233. } else if( pi->net_src.type == AT_IPv6 && pi->net_dst.type == AT_IPv6 ) {
  234. /* TCP over IPv6 */
  235. buf = g_strdup_printf("(ipv6.addr eq %s and ipv6.addr eq %s) and (tcp.port eq %d and tcp.port eq %d)",
  236. ip6_to_str((const struct e_in6_addr *)pi->net_src.data),
  237. ip6_to_str((const struct e_in6_addr *)pi->net_dst.data),
  238. pi->srcport, pi->destport );
  239. } else {
  240. return NULL;
  241. }
  242. break;
  243. case(CONV_UDP):
  244. if (pi->ipproto != IP_PROTO_UDP) {
  245. if (show_dialog) {
  246. simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
  247. "Error filtering conversation. Please make\n"
  248. "sure you have a UDP packet selected.");
  249. }
  250. return NULL;
  251. }
  252. if( pi->net_src.type == AT_IPv4 && pi->net_dst.type == AT_IPv4 ) {
  253. /* UDP over IPv4 */
  254. buf = g_strdup_printf("(ip.addr eq %s and ip.addr eq %s) and (udp.port eq %d and udp.port eq %d)",
  255. ip_to_str( (const guint8 *)pi->net_src.data),
  256. ip_to_str( (const guint8 *)pi->net_dst.data),
  257. pi->srcport, pi->destport );
  258. } else if( pi->net_src.type == AT_IPv6 && pi->net_dst.type == AT_IPv6 ) {
  259. /* UDP over IPv6 */
  260. buf = g_strdup_printf("(ipv6.addr eq %s and ipv6.addr eq %s) and (udp.port eq %d and udp.port eq %d)",
  261. ip6_to_str((const struct e_in6_addr *)pi->net_src.data),
  262. ip6_to_str((const struct e_in6_addr *)pi->net_dst.data),
  263. pi->srcport, pi->destport );
  264. } else {
  265. return NULL;
  266. }
  267. break;
  268. case(CONV_IP):
  269. if ((pi->ethertype != ETHERTYPE_IP) && (pi->ethertype != ETHERTYPE_IPv6)) {
  270. if (show_dialog) {
  271. simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
  272. "Error filtering conversation. Please make\n"
  273. "sure you have a IP packet selected.");
  274. }
  275. return NULL;
  276. }
  277. if( pi->net_src.type == AT_IPv4 && pi->net_dst.type == AT_IPv4 ) {
  278. /* IPv4 */
  279. buf = g_strdup_printf("ip.addr eq %s and ip.addr eq %s",
  280. ip_to_str( (const guint8 *)pi->net_src.data),
  281. ip_to_str( (const guint8 *)pi->net_dst.data));
  282. } else if( pi->net_src.type == AT_IPv6 && pi->net_dst.type == AT_IPv6 ) {
  283. /* IPv6 */
  284. buf = g_strdup_printf("ipv6.addr eq %s and ipv6.addr eq %s",
  285. ip6_to_str((const struct e_in6_addr *)pi->net_src.data),
  286. ip6_to_str((const struct e_in6_addr *)pi->net_dst.data));
  287. } else {
  288. return NULL;
  289. }
  290. break;
  291. case(CONV_ETHER):
  292. /* XXX - is this the right way to check for Ethernet? */
  293. /* check for the data link address type */
  294. /* (ethertype will be 0 when used as length field) */
  295. if (pi->dl_src.type != AT_ETHER) {
  296. if (show_dialog) {
  297. simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
  298. "Error filtering conversation. Please make\n"
  299. "sure you have a Ethernet packet selected.");
  300. }
  301. return NULL;
  302. }
  303. if( pi->dl_src.type == AT_ETHER && pi->dl_dst.type == AT_ETHER ) {
  304. /* Ethernet */
  305. buf = g_strdup_printf("eth.addr eq %s and eth.addr eq %s",
  306. ether_to_str( (const guint8 *)pi->dl_src.data),
  307. ether_to_str( (const guint8 *)pi->dl_dst.data));
  308. } else {
  309. return NULL;
  310. }
  311. break;
  312. default:
  313. return NULL;
  314. }
  315. return buf;
  316. }
  317. static void
  318. new_window_cb(GtkWidget *widget)
  319. {
  320. new_packet_window(widget, FALSE, FALSE);
  321. }
  322. static void
  323. new_window_cb_ref(GtkWidget *widget)
  324. {
  325. new_packet_window(widget, TRUE, FALSE);
  326. }
  327. #ifdef WANT_PACKET_EDITOR
  328. static void
  329. edit_window_cb(GtkWidget *widget _U_)
  330. {
  331. new_packet_window(widget, FALSE, TRUE);
  332. }
  333. #endif
  334. static void
  335. conversation_cb(GtkAction *a _U_, gpointer data _U_, int action)
  336. {
  337. gchar *filter;
  338. GtkWidget *filter_te;
  339. if (cfile.current_frame) {
  340. /* create a filter-string based on the selected packet and action */
  341. filter = build_conversation_filter(action, TRUE);
  342. /* Run the display filter so it goes in effect - even if it's the
  343. same as the previous display filter. */
  344. filter_te = gtk_bin_get_child(GTK_BIN(g_object_get_data(G_OBJECT(top_level), E_DFILTER_CM_KEY)));
  345. gtk_entry_set_text(GTK_ENTRY(filter_te), filter);
  346. main_filter_packets(&cfile, filter, TRUE);
  347. g_free(filter);
  348. }
  349. }
  350. static void
  351. colorize_conversation_cb(GtkAction *action _U_, gpointer data _U_, int action_num)
  352. {
  353. gchar *filter = NULL;
  354. if( (action_num>>8) == 255 ) {
  355. color_filters_reset_tmp();
  356. packet_list_colorize_packets();
  357. } else if (cfile.current_frame) {
  358. if( (action_num&0xff) == 0 ) {
  359. /* colorize_conversation_cb was called from the window-menu
  360. * or through an accelerator key. Try to build a conversation
  361. * filter in the order TCP, UDP, IP, Ethernet and apply the
  362. * coloring */
  363. filter = build_conversation_filter(CONV_TCP,FALSE);
  364. if( filter == NULL )
  365. filter = build_conversation_filter(CONV_UDP,FALSE);
  366. if( filter == NULL )
  367. filter = build_conversation_filter(CONV_IP,FALSE);
  368. if( filter == NULL )
  369. filter = build_conversation_filter(CONV_ETHER,FALSE);
  370. if( filter == NULL ) {
  371. simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Unable to build conversation filter.");
  372. return;
  373. }
  374. } else {
  375. /* create a filter-string based on the selected packet and action_num */
  376. filter = build_conversation_filter(action_num&0xff, TRUE);
  377. }
  378. if( (action_num>>8) == 0) {
  379. /* Open the "new coloring filter" dialog with the filter */
  380. color_display_with_filter(filter);
  381. } else {
  382. /* Set one of the temporary coloring filters */
  383. color_filters_set_tmp((guint8)(action_num>>8),filter,FALSE);
  384. packet_list_colorize_packets();
  385. }
  386. g_free(filter);
  387. }
  388. }
  389. static void
  390. goto_conversation_frame(gboolean dir)
  391. {
  392. gchar *filter;
  393. dfilter_t *dfcode = NULL;
  394. gboolean found_packet = FALSE;
  395. filter = build_conversation_filter(CONV_TCP,FALSE);
  396. if( filter == NULL )
  397. filter = build_conversation_filter(CONV_UDP,FALSE);
  398. if( filter == NULL )
  399. filter = build_conversation_filter(CONV_IP,FALSE);
  400. if( filter == NULL ) {
  401. statusbar_push_temporary_msg("Unable to build conversation filter.");
  402. g_free(filter);
  403. return;
  404. }
  405. if (!dfilter_compile(filter, &dfcode)) {
  406. /* The attempt failed; report an error. */
  407. statusbar_push_temporary_msg("Error compiling filter for this conversation.");
  408. g_free(filter);
  409. return;
  410. }
  411. found_packet = cf_find_packet_dfilter(&cfile, dfcode, dir?SD_BACKWARD:SD_FORWARD);
  412. if (!found_packet) {
  413. /* We didn't find a packet */
  414. statusbar_push_temporary_msg("No previous/next packet in conversation.");
  415. }
  416. dfilter_free(dfcode);
  417. g_free(filter);
  418. }
  419. static void
  420. goto_next_frame_conversation_cb(GtkAction *action _U_, gpointer user_data _U_)
  421. {
  422. goto_conversation_frame(FALSE);
  423. }
  424. static void
  425. goto_previous_frame_conversation_cb(GtkAction *action _U_, gpointer user_data _U_)
  426. {
  427. goto_conversation_frame(TRUE);
  428. }
  429. static void
  430. copy_description_cb(GtkAction *action _U_, gpointer user_data)
  431. {
  432. copy_selected_plist_cb( NULL /* widget _U_ */ , user_data, COPY_SELECTED_DESCRIPTION);
  433. }
  434. static void
  435. copy_fieldname_cb(GtkAction *action _U_, gpointer user_data)
  436. {
  437. copy_selected_plist_cb( NULL /* widget _U_ */ , user_data, COPY_SELECTED_FIELDNAME);
  438. }
  439. static void
  440. copy_value_cb(GtkAction *action _U_, gpointer user_data)
  441. {
  442. copy_selected_plist_cb( NULL /* widget _U_ */ , user_data, COPY_SELECTED_VALUE);
  443. }
  444. static void
  445. copy_as_filter_cb(GtkAction *action _U_, gpointer user_data _U_)
  446. {
  447. /* match_selected_ptree_cb needs the popup_menu_object to get the right object E_DFILTER_TE_KEY */
  448. match_selected_ptree_cb( popup_menu_object, (MATCH_SELECTED_E)(MATCH_SELECTED_REPLACE|MATCH_SELECTED_COPY_ONLY));
  449. }
  450. static void
  451. set_reftime_cb(GtkAction *action _U_, gpointer user_data)
  452. {
  453. reftime_frame_cb( NULL /* widget _U_ */ , user_data, REFTIME_TOGGLE);
  454. }
  455. static void
  456. find_next_ref_time_cb(GtkAction *action _U_, gpointer user_data)
  457. {
  458. reftime_frame_cb( NULL /* widget _U_ */ , user_data, REFTIME_FIND_NEXT);
  459. }
  460. static void
  461. find_previous_ref_time_cb(GtkAction *action _U_, gpointer user_data)
  462. {
  463. reftime_frame_cb( NULL /* widget _U_ */ , user_data, REFTIME_FIND_PREV);
  464. }
  465. static void
  466. menus_prefs_cb(GtkAction *action _U_, gpointer user_data)
  467. {
  468. prefs_page_cb( NULL /* widget _U_ */ , user_data, PREFS_PAGE_USER_INTERFACE);
  469. }
  470. static void
  471. main_toolbar_show_hide_cb(GtkAction *action _U_, gpointer user_data _U_)
  472. {
  473. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/MainToolbar");
  474. recent.main_toolbar_show = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
  475. main_widgets_show_or_hide();
  476. }
  477. static void
  478. filter_toolbar_show_hide_cb(GtkAction * action _U_, gpointer user_data _U_)
  479. {
  480. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/FilterToolbar");
  481. recent.filter_toolbar_show = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
  482. main_widgets_show_or_hide();
  483. }
  484. static void
  485. wireless_toolbar_show_hide_cb(GtkAction *action _U_, gpointer user_data _U_)
  486. {
  487. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/WirelessToolbar");
  488. if(widget) {
  489. recent.wireless_toolbar_show = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
  490. } else {
  491. recent.wireless_toolbar_show = FALSE;
  492. }
  493. main_widgets_show_or_hide();
  494. }
  495. static void
  496. status_bar_show_hide_cb(GtkAction *action _U_, gpointer user_data _U_)
  497. {
  498. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/StatusBar");
  499. recent.statusbar_show = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
  500. main_widgets_show_or_hide();
  501. }
  502. static void
  503. packet_list_show_hide_cb(GtkAction *action _U_, gpointer user_data _U_)
  504. {
  505. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/PacketList");
  506. recent.packet_list_show = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
  507. main_widgets_show_or_hide();
  508. }
  509. static void
  510. packet_details_show_hide_cb(GtkAction *action _U_, gpointer user_data _U_)
  511. {
  512. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/PacketDetails");
  513. recent.tree_view_show = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
  514. main_widgets_show_or_hide();
  515. }
  516. static void
  517. packet_bytes_show_hide_cb(GtkAction *action _U_, gpointer user_data _U_)
  518. {
  519. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/PacketBytes");
  520. recent.byte_view_show = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
  521. main_widgets_show_or_hide();
  522. }
  523. static void
  524. timestamp_seconds_time_cb(GtkAction *action _U_, gpointer user_data _U_)
  525. {
  526. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/TimeDisplayFormat/DisplaySecondsWithHoursAndMinutes");
  527. if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) {
  528. recent.gui_seconds_format = TS_SECONDS_HOUR_MIN_SEC;
  529. } else {
  530. recent.gui_seconds_format = TS_SECONDS_DEFAULT;
  531. }
  532. timestamp_set_seconds_type (recent.gui_seconds_format);
  533. /* This call adjusts column width */
  534. cf_timestamp_auto_precision(&cfile);
  535. packet_list_queue_draw();
  536. }
  537. static void
  538. timestamp_format_new_cb (GtkRadioAction *action, GtkRadioAction *current _U_, gpointer user_data _U_)
  539. {
  540. ts_type value;
  541. value = (ts_type) gtk_radio_action_get_current_value (action);
  542. if (recent.gui_time_format != value) {
  543. timestamp_set_type(value);
  544. recent.gui_time_format = value;
  545. /* This call adjusts column width */
  546. cf_timestamp_auto_precision(&cfile);
  547. packet_list_queue_draw();
  548. }
  549. }
  550. static void
  551. timestamp_precision_new_cb (GtkRadioAction *action, GtkRadioAction *current _U_, gpointer user_data _U_)
  552. {
  553. gint value;
  554. value = gtk_radio_action_get_current_value (action);
  555. if (recent.gui_time_precision != value) {
  556. /* the actual precision will be set in packet_list_queue_draw() below */
  557. if (value == TS_PREC_AUTO) {
  558. timestamp_set_precision(TS_PREC_AUTO_SEC);
  559. } else {
  560. timestamp_set_precision(value);
  561. }
  562. recent.gui_time_precision = value;
  563. /* This call adjusts column width */
  564. cf_timestamp_auto_precision(&cfile);
  565. packet_list_queue_draw();
  566. }
  567. }
  568. static void
  569. view_menu_en_for_MAC_cb(GtkAction *action _U_, gpointer user_data)
  570. {
  571. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/NameResolution/EnableforMACLayer");
  572. if (!widget){
  573. g_warning("view_menu_en_for_MAC_cb: No widget found");
  574. }else{
  575. name_resolution_cb( widget , user_data, &gbl_resolv_flags.mac_name);
  576. }
  577. }
  578. static void
  579. view_menu_en_for_network_cb(GtkAction *action _U_, gpointer user_data)
  580. {
  581. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/NameResolution/EnableforNetworkLayer");
  582. if (!widget){
  583. g_warning("view_menu_en_for_network_cb: No widget found");
  584. }else{
  585. name_resolution_cb( widget , user_data, &gbl_resolv_flags.network_name);
  586. }
  587. }
  588. static void
  589. view_menu_en_for_transport_cb(GtkAction *action _U_, gpointer user_data)
  590. {
  591. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/NameResolution/EnableforTransportLayer");
  592. if (!widget){
  593. g_warning("view_menu_en_for_transport_cb: No widget found");
  594. }else{
  595. name_resolution_cb( widget , user_data, &gbl_resolv_flags.transport_name);
  596. }
  597. }
  598. static void
  599. view_menu_en_use_external_resolver_cb(GtkAction *action _U_, gpointer user_data)
  600. {
  601. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/NameResolution/UseExternalNetworkNameResolver");
  602. if (!widget){
  603. g_warning("view_menu_en_use_external_resolver_cb: No widget found");
  604. }else{
  605. name_resolution_cb( widget , user_data, &gbl_resolv_flags.use_external_net_name_resolver);
  606. }
  607. }
  608. static void
  609. view_menu_colorize_pkt_lst_cb(GtkAction *action _U_, gpointer user_data)
  610. {
  611. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/ColorizePacketList");
  612. if (!widget){
  613. g_warning("view_menu_colorize_pkt_lst_cb: No widget found");
  614. }else{
  615. colorize_cb( widget , user_data);
  616. }
  617. }
  618. #ifdef HAVE_LIBPCAP
  619. static void
  620. view_menu_auto_scroll_live_cb(GtkAction *action _U_, gpointer user_data _U_)
  621. {
  622. GtkWidget *widget = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/AutoScrollinLiveCapture");
  623. if (!widget){
  624. g_warning("view_menu_auto_scroll_live_cb: No widget found");
  625. }else{
  626. main_auto_scroll_live_changed(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)));
  627. }
  628. }
  629. #endif
  630. static void
  631. view_menu_color_conv_color1_cb(GtkAction *action, gpointer user_data)
  632. {
  633. colorize_conversation_cb(action, user_data, 1*256);
  634. }
  635. static void
  636. view_menu_color_conv_color2_cb(GtkAction *action, gpointer user_data)
  637. {
  638. colorize_conversation_cb(action, user_data, 2*256);
  639. }
  640. static void
  641. view_menu_color_conv_color3_cb(GtkAction *action, gpointer user_data)
  642. {
  643. colorize_conversation_cb(action, user_data, 3*256);
  644. }
  645. static void
  646. view_menu_color_conv_color4_cb(GtkAction *action, gpointer user_data)
  647. {
  648. colorize_conversation_cb(action, user_data, 4*256);
  649. }
  650. static void
  651. view_menu_color_conv_color5_cb(GtkAction *action, gpointer user_data)
  652. {
  653. colorize_conversation_cb(action, user_data, 5*256);
  654. }
  655. static void
  656. view_menu_color_conv_color6_cb(GtkAction *action, gpointer user_data)
  657. {
  658. colorize_conversation_cb(action, user_data, 6*256);
  659. }
  660. static void
  661. view_menu_color_conv_color7_cb(GtkAction *action, gpointer user_data)
  662. {
  663. colorize_conversation_cb(action, user_data, 7*256);
  664. }
  665. static void
  666. view_menu_color_conv_color8_cb(GtkAction *action, gpointer user_data)
  667. {
  668. colorize_conversation_cb(action, user_data, 8*256);
  669. }
  670. static void
  671. view_menu_color_conv_color9_cb(GtkAction *action, gpointer user_data)
  672. {
  673. colorize_conversation_cb(action, user_data, 9*256);
  674. }
  675. static void
  676. view_menu_color_conv_color10_cb(GtkAction *action, gpointer user_data)
  677. {
  678. colorize_conversation_cb(action, user_data, 10*256);
  679. }
  680. static void
  681. view_menu_color_conv_new_rule_cb(GtkAction *action, gpointer user_data)
  682. {
  683. colorize_conversation_cb(action, user_data, 0);
  684. }
  685. static void
  686. view_menu_reset_coloring_cb(GtkAction *action, gpointer user_data)
  687. {
  688. colorize_conversation_cb(action, user_data, 255*256);
  689. }
  690. /*
  691. * TODO Move this menu to capture_if_dlg.c ?
  692. */
  693. #ifdef HAVE_LIBPCAP
  694. static void
  695. capture_if_action_cb(GtkAction *action _U_, gpointer user_data)
  696. {
  697. capture_if_cb(NULL /* GtkWidget *w _U_ */, user_data);
  698. }
  699. static void
  700. capture_prep_action_cb(GtkAction *action _U_, gpointer user_data)
  701. {
  702. capture_prep_cb(NULL /* GtkWidget *w _U_ */, user_data);
  703. }
  704. static void
  705. capture_start_action_cb(GtkAction *action _U_, gpointer user_data)
  706. {
  707. capture_start_cb(NULL /* GtkWidget *w _U_ */, user_data);
  708. }
  709. static void
  710. capture_stop_action_cb(GtkAction *action _U_, gpointer user_data)
  711. {
  712. capture_stop_cb(NULL /* GtkWidget *w _U_ */, user_data);
  713. }
  714. static void
  715. capture_restart_action_cb(GtkAction *action _U_, gpointer user_data)
  716. {
  717. capture_restart_cb(NULL /* GtkWidget *w _U_ */, user_data);
  718. }
  719. static void
  720. capture_filters_action_cb(GtkAction *action _U_, gpointer user_data _U_)
  721. {
  722. cfilter_dialog_cb(NULL /* GtkWidget *w _U_ */);
  723. }
  724. static void
  725. refresh_interfaces_action_cb(GtkAction *action _U_, gpointer user_data _U_)
  726. {
  727. refresh_local_interface_lists();
  728. }
  729. #endif /* HAVE_LIBPCAP */
  730. static void
  731. help_menu_cont_cb(GtkAction *action _U_, gpointer user_data _U_)
  732. {
  733. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(HELP_CONTENT));
  734. }
  735. static void
  736. help_menu_faq_cb(GtkAction *action _U_, gpointer user_data _U_)
  737. {
  738. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(ONLINEPAGE_FAQ));
  739. }
  740. static void
  741. help_menu_ask_cb(GtkAction *action _U_, gpointer user_data _U_)
  742. {
  743. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(ONLINEPAGE_ASK));
  744. }
  745. static void
  746. help_menu_wireshark_cb(GtkAction *action _U_, gpointer user_data _U_)
  747. {
  748. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(LOCALPAGE_MAN_WIRESHARK));
  749. }
  750. static void
  751. help_menu_wireshark_flt_cb(GtkAction *action _U_, gpointer user_data _U_)
  752. {
  753. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(LOCALPAGE_MAN_WIRESHARK_FILTER));
  754. }
  755. static void
  756. help_menu_Capinfos_cb(GtkAction *action _U_, gpointer user_data _U_)
  757. {
  758. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(LOCALPAGE_MAN_CAPINFOS));
  759. }
  760. static void
  761. help_menu_Dumpcap_cb(GtkAction *action _U_, gpointer user_data _U_)
  762. {
  763. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(LOCALPAGE_MAN_DUMPCAP));
  764. }
  765. static void
  766. help_menu_Editcap_cb(GtkAction *action _U_, gpointer user_data _U_)
  767. {
  768. topic_menu_cb(NULL/* widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(LOCALPAGE_MAN_EDITCAP));
  769. }
  770. static void
  771. help_menu_Mergecap_cb(GtkAction *action _U_, gpointer user_data _U_)
  772. {
  773. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(LOCALPAGE_MAN_MERGECAP));
  774. }
  775. static void
  776. help_menu_RawShark_cb(GtkAction *action _U_, gpointer user_data _U_)
  777. {
  778. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(LOCALPAGE_MAN_RAWSHARK));
  779. }
  780. static void
  781. help_menu_Reorder_cb(GtkAction *action _U_, gpointer user_data _U_)
  782. {
  783. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(LOCALPAGE_MAN_REORDERCAP));
  784. }
  785. static void
  786. help_menu_Text2pcap_cb(GtkAction *action _U_, gpointer user_data _U_)
  787. {
  788. topic_menu_cb(NULL/* widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(LOCALPAGE_MAN_TEXT2PCAP));
  789. }
  790. static void
  791. help_menu_TShark_cb(GtkAction *action _U_, gpointer user_data _U_)
  792. {
  793. topic_menu_cb(NULL/*widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(LOCALPAGE_MAN_TSHARK));
  794. }
  795. static void
  796. help_menu_Website_cb(GtkAction *action _U_, gpointer user_data _U_)
  797. {
  798. topic_menu_cb(NULL/* widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(ONLINEPAGE_HOME));
  799. }
  800. static void
  801. help_menu_Wiki_cb(GtkAction *action _U_, gpointer user_data _U_)
  802. {
  803. topic_menu_cb(NULL/* widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(ONLINEPAGE_WIKI));
  804. }
  805. static void
  806. help_menu_Downloads_cb(GtkAction *action _U_, gpointer user_data _U_)
  807. {
  808. topic_menu_cb(NULL/* widget _U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(ONLINEPAGE_DOWNLOAD));
  809. }
  810. static void
  811. help_menu_SampleCaptures_cb(GtkAction *action _U_, gpointer user_data _U_)
  812. {
  813. topic_menu_cb( NULL/* widget_U_ */, NULL /*GdkEventButton *event _U_*/, GINT_TO_POINTER(ONLINEPAGE_SAMPLE_FILES));
  814. }
  815. #ifdef HAVE_SOFTWARE_UPDATE
  816. static void
  817. check_for_updates_cb(GtkAction *action _U_, gpointer user_data _U_)
  818. {
  819. software_update_check();
  820. }
  821. #endif /* HAVE_SOFTWARE_UPDATE */
  822. static const char *ui_desc_menubar =
  823. "<ui>\n"
  824. " <menubar name ='Menubar'>\n"
  825. " <menu name= 'FileMenu' action='/File'>\n"
  826. " <menuitem name='Open' action='/File/Open'/>\n"
  827. " <menu name='OpenRecent' action='/File/OpenRecent'>\n"
  828. " <placeholder name='RecentFiles'/>\n"
  829. " </menu>\n"
  830. " <menuitem name='Merge' action='/File/Merge'/>\n"
  831. " <menuitem name='ImportFromHexDump' action='/File/ImportFromHexDump'/>\n"
  832. " <menuitem name='Close' action='/File/Close'/>\n"
  833. " <separator/>\n"
  834. " <menuitem name='Save' action='/File/Save'/>\n"
  835. " <menuitem name='SaveAs' action='/File/SaveAs'/>\n"
  836. " <separator/>\n"
  837. " <menu name= 'Set' action='/File/Set'>\n"
  838. " <menuitem name='ListFiles' action='/File/Set/ListFiles'/>\n"
  839. " <menuitem name='NextFile' action='/File/Set/NextFile'/>\n"
  840. " <menuitem name='PreviousFile' action='/File/Set/PreviousFile'/>\n"
  841. " </menu>\n"
  842. " <separator/>\n"
  843. " <menuitem name='ExportSpecifiedPackets' action='/File/ExportSpecifiedPackets'/>\n"
  844. " <menu name= 'ExportPacketDissections' action='/File/ExportPacketDissections'>\n"
  845. " <menuitem name='AsTxt' action='/File/ExportPacketDissections/Text'/>\n"
  846. " <menuitem name='AsPostScript' action='/File/ExportPacketDissections/PostScript'/>\n"
  847. " <menuitem name='AsCSV' action='/File/ExportPacketDissections/CSV'/>\n"
  848. " <menuitem name='AsCArrays' action='/File/ExportPacketDissections/CArrays'/>\n"
  849. " <separator/>\n"
  850. " <menuitem name='AsPSML' action='/File/ExportPacketDissections/PSML'/>\n"
  851. " <menuitem name='AsPDML' action='/File/ExportPacketDissections/PDML'/>\n"
  852. " <separator/>\n"
  853. " </menu>\n"
  854. " <menuitem name='ExportSelectedPacketBytes' action='/File/ExportSelectedPacketBytes'/>\n"
  855. " <menuitem name='ExportPDUs' action='/File/ExportPDUs'/>\n"
  856. " <menuitem name='ExportSSLSessionKeys' action='/File/ExportSSLSessionKeys'/>\n"
  857. " <menu name= 'ExportObjects' action='/File/ExportObjects'>\n"
  858. " <menuitem name='HTTP' action='/File/ExportObjects/HTTP'/>\n"
  859. " <menuitem name='DICOM' action='/File/ExportObjects/DICOM'/>\n"
  860. " <menuitem name='SMB' action='/File/ExportObjects/SMB'/>\n"
  861. " </menu>\n"
  862. " <separator/>\n"
  863. " <menuitem name='Print' action='/File/Print'/>\n"
  864. " <separator/>\n"
  865. " <menuitem name='Quit' action='/File/Quit'/>\n"
  866. " </menu>\n"
  867. " <menu name= 'EditMenu' action='/Edit'>\n"
  868. " <menu name= 'Copy' action='/Edit/Copy'>\n"
  869. " <menuitem name='Description' action='/Edit/Copy/Description'/>\n"
  870. " <menuitem name='Fieldname' action='/Edit/Copy/Fieldname'/>\n"
  871. " <menuitem name='Value' action='/Edit/Copy/Value'/>\n"
  872. " <separator/>\n"
  873. " <menuitem name='AsFilter' action='/Edit/Copy/AsFilter'/>\n"
  874. " </menu>\n"
  875. " <menuitem name='FindPacket' action='/Edit/FindPacket'/>\n"
  876. " <menuitem name='FindNext' action='/Edit/FindNext'/>\n"
  877. " <menuitem name='FindPrevious' action='/Edit/FindPrevious'/>\n"
  878. " <separator/>\n"
  879. " <menuitem name='MarkPacket' action='/Edit/MarkPacket'/>\n"
  880. " <menuitem name='MarkAllDisplayedPackets' action='/Edit/MarkAllDisplayedPackets'/>\n"
  881. " <menuitem name='UnmarkAllDisplayedPackets' action='/Edit/UnmarkAllDisplayedPackets'/>\n"
  882. " <menuitem name='FindNextMark' action='/Edit/FindNextMark'/>\n"
  883. " <menuitem name='FindPreviousMark' action='/Edit/FindPreviousMark'/>\n"
  884. " <separator/>\n"
  885. " <menuitem name='IgnorePacket' action='/Edit/IgnorePacket'/>\n"
  886. " <menuitem name='IgnoreAllDisplayedPackets' action='/Edit/IgnoreAllDisplayedPackets'/>\n"
  887. " <menuitem name='Un-IgnoreAllPackets' action='/Edit/Un-IgnoreAllPackets'/>\n"
  888. " <separator/>\n"
  889. " <menuitem name='SetTimeReference' action='/Edit/SetTimeReference'/>\n"
  890. " <menuitem name='Un-TimeReferenceAllPackets' action='/Edit/Un-TimeReferenceAllPackets'/>\n"
  891. " <menuitem name='FindNextTimeReference' action='/Edit/FindNextTimeReference'/>\n"
  892. " <menuitem name='FindPreviousTimeReference' action='/Edit/FindPreviousTimeReference'/>\n"
  893. " <separator/>\n"
  894. " <menuitem name='TimeShift' action='/Edit/TimeShift'/>\n"
  895. " <separator/>\n"
  896. #ifdef WANT_PACKET_EDITOR
  897. " <menuitem name='EditPacket' action='/Edit/EditPacket'/>\n"
  898. #endif
  899. " <menuitem name='AddEditPktComment' action='/Edit/AddEditPktComment'/>\n"
  900. " <separator/>\n"
  901. " <menuitem name='ConfigurationProfiles' action='/Edit/ConfigurationProfiles'/>\n"
  902. " <menuitem name='Preferences' action='/Edit/Preferences'/>\n"
  903. " </menu>\n"
  904. " <menu name= 'ViewMenu' action='/View'>\n"
  905. " <menuitem name='MainToolbar' action='/View/MainToolbar'/>\n"
  906. " <menuitem name='FilterToolbar' action='/View/FilterToolbar'/>\n"
  907. " <menuitem name='WirelessToolbar' action='/View/WirelessToolbar'/>\n"
  908. " <menuitem name='StatusBar' action='/View/StatusBar'/>\n"
  909. " <separator/>\n"
  910. " <menuitem name='PacketList' action='/View/PacketList'/>\n"
  911. " <menuitem name='PacketDetails' action='/View/PacketDetails'/>\n"
  912. " <menuitem name='PacketBytes' action='/View/PacketBytes'/>\n"
  913. " <separator/>\n"
  914. " <menu name= 'TimeDisplayFormat' action='/View/TimeDisplayFormat'>\n"
  915. " <menuitem name='DateandTimeofDay' action='/View/TimeDisplayFormat/DateandTimeofDay'/>\n"
  916. " <menuitem name='TimeofDay' action='/View/TimeDisplayFormat/TimeofDay'/>\n"
  917. " <menuitem name='SecondsSinceEpoch' action='/View/TimeDisplayFormat/SecondsSinceEpoch'/>\n"
  918. " <menuitem name='SecondsSinceBeginningofCapture' action='/View/TimeDisplayFormat/SecondsSinceBeginningofCapture'/>\n"
  919. " <menuitem name='SecondsSincePreviousCapturedPacket' action='/View/TimeDisplayFormat/SecondsSincePreviousCapturedPacket'/>\n"
  920. " <menuitem name='SecondsSincePreviousDisplayedPacket' action='/View/TimeDisplayFormat/SecondsSincePreviousDisplayedPacket'/>\n"
  921. " <menuitem name='UTCDateandTimeofDay' action='/View/TimeDisplayFormat/UTCDateandTimeofDay'/>\n"
  922. " <menuitem name='UTCTimeofDay' action='/View/TimeDisplayFormat/UTCTimeofDay'/>\n"
  923. " <separator/>\n"
  924. " <menuitem name='FileFormatPrecision-Automatic' action='/View/TimeDisplayFormat/FileFormatPrecision-Automatic'/>\n"
  925. " <menuitem name='FileFormatPrecision-Seconds' action='/View/TimeDisplayFormat/FileFormatPrecision-Seconds'/>\n"
  926. " <menuitem name='FileFormatPrecision-Deciseconds' action='/View/TimeDisplayFormat/FileFormatPrecision-Deciseconds'/>\n"
  927. " <menuitem name='FileFormatPrecision-Centiseconds' action='/View/TimeDisplayFormat/FileFormatPrecision-Centiseconds'/>\n"
  928. " <menuitem name='FileFormatPrecision-Milliseconds' action='/View/TimeDisplayFormat/FileFormatPrecision-Milliseconds'/>\n"
  929. " <menuitem name='FileFormatPrecision-Microseconds' action='/View/TimeDisplayFormat/FileFormatPrecision-Microseconds'/>\n"
  930. " <menuitem name='FileFormatPrecision-Nanoseconds' action='/View/TimeDisplayFormat/FileFormatPrecision-Nanoseconds'/>\n"
  931. " <separator/>\n"
  932. " <menuitem name='DisplaySecondsWithHoursAndMinutes' action='/View/TimeDisplayFormat/DisplaySecondsWithHoursAndMinutes'/>\n"
  933. " </menu>\n"
  934. " <menu name= 'NameResolution' action='/View/NameResolution'>\n"
  935. " <menuitem name='ResolveName' action='/View/NameResolution/ResolveName'/>\n"
  936. " <menuitem name='ManuallyResolveName' action='/View/NameResolution/ManuallyResolveName'/>\n"
  937. " <separator/>\n"
  938. " <menuitem name='EnableforMACLayer' action='/View/NameResolution/EnableforMACLayer'/>\n"
  939. " <menuitem name='EnableforTransportLayer' action='/View/NameResolution/EnableforTransportLayer'/>\n"
  940. " <menuitem name='EnableforNetworkLayer' action='/View/NameResolution/EnableforNetworkLayer'/>\n"
  941. " <menuitem name='UseExternalNetworkNameResolver' action='/View/NameResolution/UseExternalNetworkNameResolver'/>\n"
  942. " </menu>\n"
  943. " <menuitem name='ColorizePacketList' action='/View/ColorizePacketList'/>\n"
  944. #ifdef HAVE_LIBPCAP
  945. " <menuitem name='AutoScrollinLiveCapture' action='/View/AutoScrollinLiveCapture'/>\n"
  946. #endif
  947. " <separator/>\n"
  948. " <menuitem name='ZoomIn' action='/View/ZoomIn'/>\n"
  949. " <menuitem name='ZoomOut' action='/View/ZoomOut'/>\n"
  950. " <menuitem name='NormalSize' action='/View/NormalSize'/>\n"
  951. " <separator/>\n"
  952. " <menuitem name='ResizeAllColumns' action='/View/ResizeAllColumns'/>\n"
  953. " <menuitem name='DisplayedColumns' action='/View/DisplayedColumns'/>\n"
  954. " <separator/>\n"
  955. " <menuitem name='ExpandSubtrees' action='/View/ExpandSubtrees'/>\n"
  956. " <menuitem name='ExpandAll' action='/View/ExpandAll'/>\n"
  957. " <menuitem name='CollapseAll' action='/View/CollapseAll'/>\n"
  958. " <separator/>\n"
  959. " <menu name= 'ColorizeConversation' action='/View/ColorizeConversation'>\n"
  960. " <menuitem name='Color1' action='/View/ColorizeConversation/Color 1'/>\n"
  961. " <menuitem name='Color2' action='/View/ColorizeConversation/Color 2'/>\n"
  962. " <menuitem name='Color3' action='/View/ColorizeConversation/Color 3'/>\n"
  963. " <menuitem name='Color4' action='/View/ColorizeConversation/Color 4'/>\n"
  964. " <menuitem name='Color5' action='/View/ColorizeConversation/Color 5'/>\n"
  965. " <menuitem name='Color6' action='/View/ColorizeConversation/Color 6'/>\n"
  966. " <menuitem name='Color7' action='/View/ColorizeConversation/Color 7'/>\n"
  967. " <menuitem name='Color8' action='/View/ColorizeConversation/Color 8'/>\n"
  968. " <menuitem name='Color9' action='/View/ColorizeConversation/Color 9'/>\n"
  969. " <menuitem name='Color10' action='/View/ColorizeConversation/Color 10'/>\n"
  970. " <menuitem name='NewColoringRule' action='/View/ColorizeConversation/NewColoringRule'/>\n"
  971. " </menu>\n"
  972. " <separator/>\n"
  973. " <menuitem name='ResetColoring1-10' action='/View/ResetColoring1-10'/>\n"
  974. " <menuitem name='ColoringRules' action='/View/ColoringRules'/>\n"
  975. " <separator/>\n"
  976. " <menuitem name='ShowPacketinNewWindow' action='/View/ShowPacketinNewWindow'/>\n"
  977. " <menuitem name='Reload' action='/View/Reload'/>\n"
  978. " </menu>\n"
  979. " <menu name= 'GoMenu' action='/Go'>\n"
  980. " <menuitem name='Back' action='/Go/Back'/>\n"
  981. " <menuitem name='Forward' action='/Go/Forward'/>\n"
  982. " <menuitem name='Goto' action='/Go/Goto'/>\n"
  983. " <menuitem name='GotoCorrespondingPacket' action='/Go/GotoCorrespondingPacket'/>\n"
  984. " <separator/>\n"
  985. " <menuitem name='PreviousPacket' action='/Go/PreviousPacket'/>\n"
  986. " <menuitem name='NextPacket' action='/Go/NextPacket'/>\n"
  987. " <menuitem name='FirstPacket' action='/Go/FirstPacket'/>\n"
  988. " <menuitem name='LastPacket' action='/Go/LastPacket'/>\n"
  989. " <menuitem name='PreviousPacketInConversation' action='/Go/PreviousPacketInConversation'/>\n"
  990. " <menuitem name='NextPacketInConversation' action='/Go/NextPacketInConversation'/>\n"
  991. " </menu>\n"
  992. #ifdef HAVE_LIBPCAP
  993. " <menu name= 'CaptureMenu' action='/Capture'>\n"
  994. " <menuitem name='Interfaces' action='/Capture/Interfaces'/>\n"
  995. " <menuitem name='Options' action='/Capture/Options'/>\n"
  996. " <menuitem name='Start' action='/Capture/Start'/>\n"
  997. " <menuitem name='Stop' action='/Capture/Stop'/>\n"
  998. " <menuitem name='Restart' action='/Capture/Restart'/>\n"
  999. " <menuitem name='CaptureFilters' action='/Capture/CaptureFilters'/>\n"
  1000. " <menuitem name='RefreshInterfaces' action='/Capture/RefreshInterfaces'/>\n"
  1001. " </menu>\n"
  1002. #endif
  1003. " <menu name= 'AnalyzeMenu' action='/Analyze'>\n"
  1004. " <menuitem name='DisplayFilters' action='/Analyze/DisplayFilters'/>\n"
  1005. " <menuitem name='DisplayFilterMacros' action='/Analyze/DisplayFilterMacros'/>\n"
  1006. " <separator/>\n"
  1007. " <menuitem name='ApplyasColumn' action='/Analyze/ApplyasColumn'/>\n"
  1008. " <menu name= 'ApplyAsFilter' action='/ApplyasFilter'>\n"
  1009. " <menuitem name='Selected' action='/ApplyasFilter/Selected'/>\n"
  1010. " <menuitem name='NotSelected' action='/ApplyasFilter/Not Selected'/>\n"
  1011. " <menuitem name='AndSelected' action='/ApplyasFilter/AndSelected'/>\n"
  1012. " <menuitem name='OrSelected' action='/ApplyasFilter/OrSelected'/>\n"
  1013. " <menuitem name='AndNotSelected' action='/ApplyasFilter/AndNotSelected'/>\n"
  1014. " <menuitem name='OrNotSelected' action='/ApplyasFilter/OrNotSelected'/>\n"
  1015. " </menu>\n"
  1016. " <menu name= 'PrepareaFilter' action='/PrepareaFilter'>\n"
  1017. " <menuitem name='Selected' action='/PrepareaFilter/Selected'/>\n"
  1018. " <menuitem name='NotSelected' action='/PrepareaFilter/Not Selected'/>\n"
  1019. " <menuitem name='AndSelected' action='/PrepareaFilter/AndSelected'/>\n"
  1020. " <menuitem name='OrSelected' action='/PrepareaFilter/OrSelected'/>\n"
  1021. " <menuitem name='AndNotSelected' action='/PrepareaFilter/AndNotSelected'/>\n"
  1022. " <menuitem name='OrNotSelected' action='/PrepareaFilter/OrNotSelected'/>\n"
  1023. " </menu>\n"
  1024. " <separator/>\n"
  1025. " <menuitem name='EnabledProtocols' action='/Analyze/EnabledProtocols'/>\n"
  1026. " <menuitem name='DecodeAs' action='/Analyze/DecodeAs'/>\n"
  1027. " <menuitem name='UserSpecifiedDecodes' action='/Analyze/UserSpecifiedDecodes'/>\n"
  1028. " <separator/>\n"
  1029. " <menuitem name='FollowTCPStream' action='/Analyze/FollowTCPStream'/>\n"
  1030. " <menuitem name='FollowUDPStream' action='/Analyze/FollowUDPStream'/>\n"
  1031. " <menuitem name='FollowSSLStream' action='/Analyze/FollowSSLStream'/>\n"
  1032. " <menuitem name='ExpertInfo' action='/Analyze/ExpertInfo'/>\n"
  1033. " <menu name= 'ConversationFilterMenu' action='/Analyze/ConversationFilter'>\n"
  1034. " <placeholder name='Filters'/>\n"
  1035. " </menu>\n"
  1036. " </menu>\n"
  1037. " <menu name= 'StatisticsMenu' action='/Statistics'>\n"
  1038. " <menuitem name='Summary' action='/Statistics/Summary'/>\n"
  1039. " <menuitem name='ShowCommentsSummary' action='/Statistics/CommentsSummary'/>\n"
  1040. " <menuitem name='ShowAddreRes' action='/Statistics/ShowAddreRes'/>\n"
  1041. " <menuitem name='ProtocolHierarchy' action='/Statistics/ProtocolHierarchy'/>\n"
  1042. " <menuitem name='Conversations' action='/Statistics/Conversations'/>\n"
  1043. " <menuitem name='Endpoints' action='/Statistics/Endpoints'/>\n"
  1044. " <menuitem name='PacketLengths' action='/Statistics/plen'/>\n"
  1045. " <menuitem name='IOGraphs' action='/Statistics/IOGraphs'/>\n"
  1046. " <separator/>\n"
  1047. " <menu name= 'ConversationListMenu' action='/Statistics/ConversationList'>\n"
  1048. " <menuitem name='Ethernet' action='/Statistics/ConversationList/Ethernet'/>\n"
  1049. " <menuitem name='FibreChannel' action='/Statistics/ConversationList/FibreChannel'/>\n"
  1050. " <menuitem name='FDDI' action='/Statistics/ConversationList/FDDI'/>\n"
  1051. " <menuitem name='IP' action='/Statistics/ConversationList/IP'/>\n"
  1052. " <menuitem name='IPv6' action='/Statistics/ConversationList/IPv6'/>\n"
  1053. " <menuitem name='IPX' action='/Statistics/ConversationList/IPX'/>\n"
  1054. " <menuitem name='JXTA' action='/Statistics/ConversationList/JXTA'/>\n"
  1055. " <menuitem name='NCP' action='/Statistics/ConversationList/NCP'/>\n"
  1056. " <menuitem name='RSVP' action='/Statistics/ConversationList/RSVP'/>\n"
  1057. " <menuitem name='SCTP' action='/Statistics/ConversationList/SCTP'/>\n"
  1058. " <menuitem name='TCPIP' action='/Statistics/ConversationList/TCPIP'/>\n"
  1059. " <menuitem name='TR' action='/Statistics/ConversationList/TR'/>\n"
  1060. " <menuitem name='UDPIP' action='/Statistics/ConversationList/UDPIP'/>\n"
  1061. " <menuitem name='USB' action='/Statistics/ConversationList/USB'/>\n"
  1062. " <menuitem name='WLAN' action='/Statistics/ConversationList/WLAN'/>\n"
  1063. " </menu>\n"
  1064. " <menu name= 'EndpointListMenu' action='/Statistics/EndpointList'>\n"
  1065. " <menuitem name='Ethernet' action='/Statistics/EndpointList/Ethernet'/>\n"
  1066. " <menuitem name='FibreChannel' action='/Statistics/EndpointList/FibreChannel'/>\n"
  1067. " <menuitem name='FDDI' action='/Statistics/EndpointList/FDDI'/>\n"
  1068. " <menuitem name='IP' action='/Statistics/EndpointList/IP'/>\n"
  1069. " <menuitem name='IPv6' action='/Statistics/EndpointList/IPv6'/>\n"
  1070. " <menuitem name='IPX' action='/Statistics/EndpointList/IPX'/>\n"
  1071. " <menuitem name='JXTA' action='/Statistics/EndpointList/JXTA'/>\n"
  1072. " <menuitem name='NCP' action='/Statistics/EndpointList/NCP'/>\n"
  1073. " <menuitem name='RSVP' action='/Statistics/EndpointList/RSVP'/>\n"
  1074. " <menuitem name='SCTP' action='/Statistics/EndpointList/SCTP'/>\n"
  1075. " <menuitem name='TCPIP' action='/Statistics/EndpointList/TCPIP'/>\n"
  1076. " <menuitem name='TR' action='/Statistics/EndpointList/TR'/>\n"
  1077. " <menuitem name='UDPIP' action='/Statistics/EndpointList/UDPIP'/>\n"
  1078. " <menuitem name='USB' action='/Statistics/EndpointList/USB'/>\n"
  1079. " <menuitem name='WLAN' action='/Statistics/EndpointList/WLAN'/>\n"
  1080. " </menu>\n"
  1081. " <menu name='ServiceResponseTimeMenu' action='/Statistics/ServiceResponseTime'>\n"
  1082. " <menuitem name='DCE-RPC' action='/Statistics/ServiceResponseTime/DCE-RPC'/>\n"
  1083. " <menuitem name='ONC-RPC' action='/Statistics/ServiceResponseTime/ONC-RPC'/>\n"
  1084. " </menu>\n"
  1085. " <separator/>\n"
  1086. " <menuitem name='ANCP' action='/Statistics/ancp'/>\n"
  1087. " <menu name= 'BACnetMenu' action='/Statistics/BACnet'>\n"
  1088. " <menuitem name='bacapp_instanceid' action='/Statistics/BACnet/bacapp_instanceid'/>\n"
  1089. " <menuitem name='bacapp_ip' action='/Statistics/BACnet/bacapp_ip'/>\n"
  1090. " <menuitem name='bacapp_objectid' action='/Statistics/BACnet/bacapp_objectid'/>\n"
  1091. " <menuitem name='bacapp_service' action='/Statistics/BACnet/bacapp_service'/>\n"
  1092. " </menu>\n"
  1093. " <menuitem name='Collectd' action='/Statistics/collectd'/>\n"
  1094. " <menuitem name='Compare' action='/Statistics/compare'/>\n"
  1095. " <menuitem name='FlowGraph' action='/Statistics/FlowGraph'/>\n"
  1096. " <menuitem name='HART-IP' action='/Statistics/hart_ip'/>\n"
  1097. " <menu name= 'HTTPMenu' action='/Statistics/HTTP'>\n"
  1098. " <menuitem name='http' action='/Statistics/HTTP/http'/>\n"
  1099. " <menuitem name='http_req' action='/Statistics/HTTP/http_req'/>\n"
  1100. " <menuitem name='htt…

Large files files are truncated, but you can click here to view the full file