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
This commit is contained in:
Michael Mann 2013-11-21 12:16:49 +00:00
parent 3894de27f3
commit ad1d471b1b
2 changed files with 109 additions and 36 deletions

View File

@ -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);
tcp_packet_selected = frame_selected && (cf->edt->pi.ipproto == IP_PROTO_TCP);
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);
}
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;

View File

@ -726,6 +726,11 @@ void MainWindow::setMenusForSelectedPacket()
// gboolean properties = FALSE;
// const char *abbrev = NULL;
// char *prev_abbrev;
packet_info *pi;
wmem_list_frame_t* protos;
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
@ -753,7 +758,6 @@ void MainWindow::setMenusForSelectedPacket()
than one time reference frame or the current frame isn't a
time reference frame). (XXX - why check frame_selected?) */
gboolean another_is_time_ref = FALSE;
gboolean tcp_packet_selected = FALSE;
if (cap_file_) {
frame_selected = cap_file_->current_frame != NULL;
@ -766,7 +770,27 @@ void MainWindow::setMenusForSelectedPacket()
have_time_ref = cap_file_->ref_time_count > 0;
another_is_time_ref = frame_selected && have_time_ref &&
!(cap_file_->ref_time_count == 1 && cap_file_->current_frame->flags.ref_time);
tcp_packet_selected = frame_selected && (cap_file_->edt->pi.ipproto == IP_PROTO_TCP);
protos = wmem_list_head(cap_file_->edt->pi.layers);
/* 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;
}
protos = wmem_list_frame_next(protos);
}
}
// if (cfile.edt && cfile.edt->tree) {
// GPtrArray *ga;
@ -839,15 +863,15 @@ void MainWindow::setMenusForSelectedPacket()
// 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",
// frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_TCP) : FALSE);
// frame_selected ? is_tcp : FALSE);
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/FollowTCPStream",
// frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_TCP) : FALSE);
// frame_selected ? is_tcp : FALSE);
// 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",
@ -857,13 +881,13 @@ void MainWindow::setMenusForSelectedPacket()
// 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",
// frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_TCP) : FALSE);
// frame_selected ? is_tcp : FALSE);
// 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",
@ -871,11 +895,11 @@ void MainWindow::setMenusForSelectedPacket()
// 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",
// frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_TCP) : FALSE);
// frame_selected ? is_tcp : FALSE);
// 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",
@ -907,9 +931,9 @@ void MainWindow::setMenusForSelectedPacket()
// 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",
// frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_TCP) : FALSE);
// frame_selected ? is_tcp : FALSE);
// 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",
@ -919,7 +943,7 @@ void MainWindow::setMenusForSelectedPacket()
// gbl_resolv_flags.transport_name || gbl_resolv_flags.concurrent_dns));
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/ToolsMenu/FirewallACLRules",
// frame_selected);
main_ui_->menuTcpStreamGraphs->setEnabled(tcp_packet_selected);
main_ui_->menuTcpStreamGraphs->setEnabled(is_tcp);
// while (list_entry != NULL) {
// dissector_filter_t *filter_entry;