Huge thanks to our Platinum Members Endace and LiveAction,
and our Silver Member Veeam, for supporting the Wireshark Foundation and project.

Wireshark-dev: [Wireshark-dev] TCP reassembly and Return value of a new-style dissector

From: Anders Broman <a.broman@xxxxxxxxxxxx>
Date: Tue, 09 Dec 2014 21:01:37 +0100
Hi,
I have recently come across some problems with reassembly of SIP messages over TCP one problem seems to be related to when a segment contains one full PDU and a segment of the next following PDU in this case the first SIP line of the following PDU is not complete.

I think the ultimate solution would be for the TCP dissector to call the SIP dissector again with the next incomplete PDU after receiving the number of bytes "accepted" by the SIP dissector e.g using the "new-style dissector interface.
also see http://seclists.org/wireshark/2014/Jun/289

As I read the code the first step would be to have
call_dissector()                                                [OK]
try_conversation_dissector()
dissector_try_heuristic()
dissector_try_uint_new                                 [OK]

Return the number of bytes consumed, 0 or -1(need more data) not sure about DESEGMENT_UNTIL_FIN (-2?).

If people agree the biggest change is to change dissector_try_heuristic() to return an int.
What do you think?

Regards
Anders