aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2017-10-27 16:39:50 -0400
committerMichael Mann <mmann78@netscape.net>2017-10-27 21:51:49 +0000
commit3a6552744f2e44954a9e378dd076c8758bb5f1bb (patch)
treefb1bff1b6b0c74a5f6f012a15dabaf0741d50419
parentf24651493d04b974722b0b70179bcb6b9150a605 (diff)
Add find_conversation_pinfo
Convenience function to add the same parameters to find_conversation as find_or_create_conversation. Change-Id: I3a92541cb9c1e827a9de8248825636debbd989cd Reviewed-on: https://code.wireshark.org/review/24118 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot Reviewed-by: Michael Mann <mmann78@netscape.net>
-rw-r--r--debian/libwireshark0.symbols1
-rw-r--r--doc/README.dissector26
-rw-r--r--epan/conversation.c27
-rw-r--r--epan/conversation.h5
4 files changed, 53 insertions, 6 deletions
diff --git a/debian/libwireshark0.symbols b/debian/libwireshark0.symbols
index 5a9ee9b..ae1f058 100644
--- a/debian/libwireshark0.symbols
+++ b/debian/libwireshark0.symbols
@@ -594,6 +594,7 @@ libwireshark.so.0 libwireshark0 #MINVER#
find_capture_dissector@Base 2.3.0
find_circuit@Base 1.9.1
find_conversation@Base 1.9.1
+ find_conversation_pinfo@Base 2.5.0
find_conversation_filter@Base 2.0.0
find_depend_dissector_list@Base 2.1.0
find_dissector@Base 1.9.1
diff --git a/doc/README.dissector b/doc/README.dissector
index 0bcab9a..252abbd 100644
--- a/doc/README.dissector
+++ b/doc/README.dissector
@@ -2578,10 +2578,24 @@ NO_ADDR_B|NO_PORT_B, the "addr_b" address will be treated as matching
any "wildcarded" address and the "port_b" port will be treated as
matching any "wildcarded" port.
+2.2.1.4 The find_conversation_pinfo function.
-2.2.1.4 The find_or_create_conversation function.
+This convenience function will find an existing conversation (by calling
+find_conversation())
-This convenience function will create find an existing conversation (by calling
+The find_conversation_pinfo prototype:
+
+ extern conversation_t *find_conversation_pinfo(packet_info *pinfo);
+
+Where:
+ packet_info *pinfo = the packet_info structure
+
+The frame number and the addresses necessary for find_conversation() are
+taken from the pinfo structure (as is commonly done).
+
+2.2.1.5 The find_or_create_conversation function.
+
+This convenience function will find an existing conversation (by calling
find_conversation()) and, if a conversation does not already exist, create a
new conversation by calling conversation_new().
@@ -2597,7 +2611,7 @@ conversation_new() are taken from the pinfo structure (as is commonly done)
and no 'options' are used.
-2.2.1.5 The conversation_add_proto_data function.
+2.2.1.6 The conversation_add_proto_data function.
Once you have created a conversation with conversation_new, you can
associate data with it using this function.
@@ -2623,7 +2637,7 @@ Using the protocol number allows several dissectors to
associate data with a given conversation.
-2.2.1.6 The conversation_get_proto_data function.
+2.2.1.7 The conversation_get_proto_data function.
After you have located a conversation with find_conversation, you can use
this function to retrieve any data associated with it.
@@ -2642,7 +2656,7 @@ typically in the proto_register_XXXX portion of a dissector. The function
returns a pointer to the data requested, or NULL if no data was found.
-2.2.1.7 The conversation_delete_proto_data function.
+2.2.1.8 The conversation_delete_proto_data function.
After you are finished with a conversation, you can remove your association
with this function. Please note that ONLY the conversation entry is
@@ -2661,7 +2675,7 @@ Where:
is a unique protocol number created with proto_register_protocol,
typically in the proto_register_XXXX portion of a dissector.
-2.2.1.8 The conversation_set_dissector function
+2.2.1.9 The conversation_set_dissector function
This function sets the protocol dissector to be invoked whenever
conversation parameters (addresses, port_types, ports, etc) are matched
diff --git a/epan/conversation.c b/epan/conversation.c
index 5d32c11..4480788 100644
--- a/epan/conversation.c
+++ b/epan/conversation.c
@@ -1231,6 +1231,33 @@ try_conversation_dissector(const address *addr_a, const address *addr_b, const p
return FALSE;
}
+/** A helper function that calls find_conversation() using data from pinfo
+ * The frame number and addresses are taken from pinfo.
+ */
+conversation_t *
+find_conversation_pinfo(packet_info *pinfo, const guint options)
+{
+ conversation_t *conv=NULL;
+
+ DPRINT(("called for frame #%d: %s:%d -> %s:%d (ptype=%d)",
+ pinfo->num, address_to_str(wmem_packet_scope(), &pinfo->src), pinfo->srcport,
+ address_to_str(wmem_packet_scope(), &pinfo->dst), pinfo->destport, pinfo->ptype));
+ DINDENT();
+
+ /* Have we seen this conversation before? */
+ if((conv = find_conversation(pinfo->num, &pinfo->src, &pinfo->dst,
+ pinfo->ptype, pinfo->srcport,
+ pinfo->destport, options)) != NULL) {
+ DPRINT(("found previous conversation for frame #%d (last_frame=%d)",
+ pinfo->num, conv->last_frame));
+ if (pinfo->num > conv->last_frame) {
+ conv->last_frame = pinfo->num;
+ }
+ }
+
+ return conv;
+}
+
/* A helper function that calls find_conversation() and, if a conversation is
* not found, calls conversation_new().
* The frame number and addresses are taken from pinfo.
diff --git a/epan/conversation.h b/epan/conversation.h
index d31a210..3ddc3ec 100644
--- a/epan/conversation.h
+++ b/epan/conversation.h
@@ -145,6 +145,11 @@ WS_DLL_PUBLIC conversation_t *conversation_new(const guint32 setup_frame, const
WS_DLL_PUBLIC conversation_t *find_conversation(const guint32 frame_num, const address *addr_a, const address *addr_b,
const port_type ptype, const guint32 port_a, const guint32 port_b, const guint options);
+/** A helper function that calls find_conversation() using data from pinfo
+ * The frame number and addresses are taken from pinfo.
+ */
+WS_DLL_PUBLIC conversation_t *find_conversation_pinfo(packet_info *pinfo, const guint options);
+
/** A helper function that calls find_conversation() and, if a conversation is
* not found, calls conversation_new().
* The frame number and addresses are taken from pinfo.