Wireshark mailing list archives
Problems with dissector order of execution
From: Tarjei Knapstad <tarjei.knapstad () gmail com>
Date: Thu, 15 Jul 2010 10:35:07 +0200
Hi all, I'm trying to write a dissector which should be invoked on certain XML media types, but so far I'm having trouble invoking it. A shortened version of my dissector code: /************ START CODE **************/ void proto_reg_handoff_something(void) { xml_handle = find_dissector("xml"); something_handle = new_create_dissector_handle(dissect_something, proto_something); dissector_add_string("media_type", "text/xml", something_handle); dissector_add_string("media_type", "application/something+xml", something_handle); } static int dissect_something(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { /* nothing of interest, let dissector_try_string() know that it should continue looking for a suitable dissector */ if ( !xml_payload_of_interest(tvb) ) return 0; /* add stuff for my protocol here */ /* call the XML dissector as a subdissector */ call_dissector(xml_handle, tvb, pinfo, tree); /* return bytes_processed */ } /************ END CODE **************/ The problem I'm facing is that I'm calling dissector_add_string for two media types that is already registered with the packet-xml dissector (the "application/something+xml" media type gets added through a DTD I've written). When the dissector_try_string() function in packet.c is called, the table lookup finds the XML dissector first which means that my dissector never gets called (the XML dissector doesn't call sub-dissectors and shouldn't need to either). Is there any way I can make this work as I intend to? I need to compute some metadata based on certain tags in the XML and would like to customize the COL_INFO data, so simply adding a DTD isn't enough. The only way I've gotten this half working so far is: 1. Call "dissector_delete_string" on my media types on the xml_handle in proto_reg_handoff_something() 2. Edit the generated register.c so that proto_reg_handoff_something() gets called after proto_reg_handoff_xml() so that the above step actually has any effect. The above steps gives me the results I want, but of course I've messed things up in the cases where xml_payload_of_interest() returns false. Regards, Tarjei ___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev () wireshark org> Archives: http://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-request () wireshark org?subject=unsubscribe
Current thread:
- Problems with dissector order of execution Tarjei Knapstad (Jul 15)