aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-tcp.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2014-12-08 21:40:24 -0500
committerAnders Broman <a.broman58@gmail.com>2014-12-10 09:04:00 +0000
commita97176853010e5e39492d8a1fea79799ef43758b (patch)
tree2d4d2da0fb11863ce802cdd2f388e0959c3fe86b /epan/dissectors/packet-tcp.c
parente050ad27a4a7b330bf7c4cb223958b0e9f656deb (diff)
Refactor "color" conversation filters
Have dissectors register their desire to be part of "color" conversation filters and have the GUI use that registered list. GUI actually using API will come in a separate commit. Change-Id: I5ffe922d97894fe7bf3182056b76ab5839a9461a Reviewed-on: https://code.wireshark.org/review/5658 Reviewed-by: Michael Mann <mmann78@netscape.net> Petri-Dish: Michael Mann <mmann78@netscape.net> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-tcp.c')
-rw-r--r--epan/dissectors/packet-tcp.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/epan/dissectors/packet-tcp.c b/epan/dissectors/packet-tcp.c
index 57dfb81c55..0668b4542f 100644
--- a/epan/dissectors/packet-tcp.c
+++ b/epan/dissectors/packet-tcp.c
@@ -38,6 +38,7 @@
#include <epan/show_exception.h>
#include <epan/conversation.h>
#include <epan/conversation_table.h>
+#include <epan/color_dissector_filters.h>
#include <epan/reassemble.h>
#include <epan/tap.h>
#include <epan/decode_as.h>
@@ -632,6 +633,34 @@ tcpip_hostlist_prefix(void)
return "endpoints";
}
+static gboolean
+tcp_color_filter_valid(packet_info *pinfo)
+{
+ return proto_is_frame_protocol(pinfo->layers, "tcp");
+}
+
+static gchar*
+tcp_build_color_filter(packet_info *pinfo)
+{
+ if( pinfo->net_src.type == AT_IPv4 && pinfo->net_dst.type == AT_IPv4 ) {
+ /* TCP over IPv4 */
+ return g_strdup_printf("(ip.addr eq %s and ip.addr eq %s) and (tcp.port eq %d and tcp.port eq %d)",
+ ip_to_str( (const guint8 *)pinfo->net_src.data),
+ ip_to_str( (const guint8 *)pinfo->net_dst.data),
+ pinfo->srcport, pinfo->destport );
+ }
+
+ if( pinfo->net_src.type == AT_IPv6 && pinfo->net_dst.type == AT_IPv6 ) {
+ /* TCP over IPv6 */
+ return g_strdup_printf("(ipv6.addr eq %s and ipv6.addr eq %s) and (tcp.port eq %d and tcp.port eq %d)",
+ ip6_to_str((const struct e_in6_addr *)pinfo->net_src.data),
+ ip6_to_str((const struct e_in6_addr *)pinfo->net_dst.data),
+ pinfo->srcport, pinfo->destport );
+ }
+
+ return NULL;
+}
+
/* TCP structs and definitions */
/* **************************************************************************
@@ -5935,6 +5964,7 @@ proto_register_tcp(void)
register_decode_as(&tcp_da);
register_conversation_table(proto_tcp, FALSE, tcpip_conversation_packet, tcpip_hostlist_packet, tcpip_hostlist_prefix);
+ register_color_conversation_filter("TCP", tcp_color_filter_valid, tcp_build_color_filter);
}
void