diff options
author | Michael Mann <mmann78@netscape.net> | 2013-11-21 12:16:49 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2013-11-21 12:16:49 +0000 |
commit | ad1d471b1b4383116e5572b5e98adc045d26aad1 (patch) | |
tree | 302270bc93e365c166be523573a7eb9824b7b3ce /ui/gtk/main_menubar.c | |
parent | 3894de27f3cd8a917c1e005b3d112c9c30e8ae69 (diff) |
Walk list of protocol strings to determine which protocols are present in a packet rather than rely on protocol specific items in packet_info in an effort to (eventually) reduce packet_info members.
svn path=/trunk/; revision=53473
Diffstat (limited to 'ui/gtk/main_menubar.c')
-rw-r--r-- | ui/gtk/main_menubar.c | 89 |
1 files changed, 69 insertions, 20 deletions
diff --git a/ui/gtk/main_menubar.c b/ui/gtk/main_menubar.c index be4ba6740a..343a3c1c8a 100644 --- a/ui/gtk/main_menubar.c +++ b/ui/gtk/main_menubar.c @@ -186,11 +186,40 @@ typedef enum { CONV_CBA } conv_values_e; +static gboolean is_ip_packet(packet_info* pinfo) +{ + + return FALSE; +} + static char * build_conversation_filter(int action, gboolean show_dialog) { packet_info *pi = &cfile.edt->pi; + wmem_list_frame_t * protos = wmem_list_head(pi->layers); + int proto_id; + const char* proto_name; char *buf; + gboolean is_ip = FALSE, is_tcp = FALSE, is_udp = FALSE; + + /* walk the list of a available protocols in the packet to + figure out if any of them affect conversation filters */ + while (protos != NULL) + { + proto_id = GPOINTER_TO_INT(wmem_list_frame_data(protos)); + proto_name = proto_get_protocol_filter_name(proto_id); + + if ((!strcmp(proto_name, "ip")) || + (!strcmp(proto_name, "ipv6"))) { + is_ip = TRUE; + } else if (!strcmp(proto_name, "tcp")) { + is_tcp = TRUE; + } else if (!strcmp(proto_name, "udp")) { + is_udp = TRUE; + } + + protos = wmem_list_frame_next(protos); + } switch(action) { case(CONV_CBA): @@ -204,7 +233,7 @@ build_conversation_filter(int action, gboolean show_dialog) } if( pi->net_src.type == AT_IPv4 && pi->net_dst.type == AT_IPv4 - && pi->ipproto == IP_PROTO_TCP ) { + && is_tcp ) { /* IPv4 */ switch(pi->profinet_type) { case(1): @@ -243,7 +272,7 @@ build_conversation_filter(int action, gboolean show_dialog) } break; case(CONV_TCP): - if (pi->ipproto != IP_PROTO_TCP) { + if (is_tcp == FALSE) { if (show_dialog) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Error filtering conversation. Please make\n" @@ -269,7 +298,7 @@ build_conversation_filter(int action, gboolean show_dialog) } break; case(CONV_UDP): - if (pi->ipproto != IP_PROTO_UDP) { + if (is_udp == FALSE) { if (show_dialog) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Error filtering conversation. Please make\n" @@ -295,7 +324,7 @@ build_conversation_filter(int action, gboolean show_dialog) } break; case(CONV_IP): - if ((pi->ethertype != ETHERTYPE_IP) && (pi->ethertype != ETHERTYPE_IPv6)) { + if (is_ip == FALSE) { if (show_dialog) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Error filtering conversation. Please make\n" @@ -4897,11 +4926,16 @@ set_menus_for_captured_packets(gboolean have_captured_packets) void set_menus_for_selected_packet(capture_file *cf) { + packet_info *pi = &cfile.edt->pi; + wmem_list_frame_t* protos = wmem_list_head(pi->layers); GList *list_entry = dissector_filter_list; guint i = 0; gboolean properties = FALSE; const char *abbrev = NULL; char *prev_abbrev; + int proto_id; + const char* proto_name; + gboolean is_ip = FALSE, is_tcp = FALSE, is_udp = FALSE; /* Making the menu context-sensitive allows for easier selection of the desired item and has the added benefit, with large captures, of @@ -4925,9 +4959,24 @@ set_menus_for_selected_packet(capture_file *cf) than one time reference frame or the current frame isn't a time reference frame). (XXX - why check frame_selected?) */ - gboolean tcp_packet_selected = FALSE; + /* walk the list of a available protocols in the packet to + figure out if any of them affect context sensitivity */ + while (protos != NULL) + { + proto_id = GPOINTER_TO_INT(wmem_list_frame_data(protos)); + proto_name = proto_get_protocol_filter_name(proto_id); + + if ((!strcmp(proto_name, "ip")) || + (!strcmp(proto_name, "ipv6"))) { + is_ip = TRUE; + } else if (!strcmp(proto_name, "tcp")) { + is_tcp = TRUE; + } else if (!strcmp(proto_name, "udp")) { + is_udp = TRUE; + } - tcp_packet_selected = frame_selected && (cf->edt->pi.ipproto == IP_PROTO_TCP); + protos = wmem_list_frame_next(protos); + } if (cfile.edt && cfile.edt->tree) { GPtrArray *ga; @@ -5021,15 +5070,15 @@ set_menus_for_selected_packet(capture_file *cf) set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ShowPacketinNewWindow", frame_selected); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ManuallyResolveAddress", - frame_selected ? ((cf->edt->pi.ethertype == ETHERTYPE_IP)||(cf->edt->pi.ethertype == ETHERTYPE_IPv6)) : FALSE); + frame_selected ? is_ip : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/SCTP", frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_SCTP) : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/FollowTCPStream", - tcp_packet_selected); + is_tcp); set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/FollowTCPStream", - tcp_packet_selected); + is_tcp); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/FollowUDPStream", - frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_UDP) : FALSE); + frame_selected ? is_udp : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/FollowSSLStream", frame_selected ? is_ssl : FALSE); set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/FollowSSLStream", @@ -5039,13 +5088,13 @@ set_menus_for_selected_packet(capture_file *cf) set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/Ethernet", frame_selected ? (cf->edt->pi.dl_src.type == AT_ETHER) : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/IP", - frame_selected ? ((cf->edt->pi.ethertype == ETHERTYPE_IP)||(cf->edt->pi.ethertype == ETHERTYPE_IPv6)) : FALSE); + frame_selected ? is_ip : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/TCP", - tcp_packet_selected); + is_tcp); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/UDP", - frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_UDP) : FALSE); + frame_selected ? is_udp : FALSE); set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/FollowUDPStream", - frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_UDP) : FALSE); + frame_selected ? is_udp : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/PN-CBA", frame_selected ? (cf->edt->pi.profinet_type != 0 && cf->edt->pi.profinet_type < 10) : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation", @@ -5053,11 +5102,11 @@ set_menus_for_selected_packet(capture_file *cf) set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation/Ethernet", frame_selected ? (cf->edt->pi.dl_src.type == AT_ETHER) : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation/IP", - frame_selected ? ((cf->edt->pi.ethertype == ETHERTYPE_IP)||(cf->edt->pi.ethertype == ETHERTYPE_IPv6)) : FALSE); + frame_selected ? is_ip : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation/TCP", - tcp_packet_selected); + is_tcp); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation/UDP", - frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_UDP) : FALSE); + frame_selected ? is_udp : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation/PN-CBA", frame_selected ? (cf->edt->pi.profinet_type != 0 && cf->edt->pi.profinet_type < 10) : FALSE); set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/DecodeAs", @@ -5089,9 +5138,9 @@ set_menus_for_selected_packet(capture_file *cf) frame_selected && (gbl_resolv_flags.mac_name || gbl_resolv_flags.network_name || gbl_resolv_flags.transport_name || gbl_resolv_flags.concurrent_dns)); set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/FollowTCPStream", - tcp_packet_selected); + is_tcp); set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/FollowUDPStream", - frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_UDP) : FALSE); + frame_selected ? is_udp : FALSE); set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/FollowSSLStream", frame_selected ? is_ssl : FALSE); set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/DecodeAs", @@ -5102,7 +5151,7 @@ set_menus_for_selected_packet(capture_file *cf) set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/ToolsMenu/FirewallACLRules", frame_selected); set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/StatisticsMenu/TCPStreamGraphMenu", - tcp_packet_selected); + is_tcp); while (list_entry != NULL) { dissector_filter_t *filter_entry; |