Hey David,

On Thu, Mar 22, 2018 at 06:32:08PM +0100, David Aggeler wrote:
> Hi Peter,
> 
> Thanks for the hint.  Ok. I just debugged and apparently the DICOM one as 
> many others is DISSECTOR_TYPE_SIMPLE. Not sure how to change, but also not 
> sure whether it is that relevant. However, I return 0 when it does not match 
> (more like new style)
> 
> If the dissectors are combined like this, basically old and new need to 
> follow the same interface, otherwise every parent of 
> call_dissector_through_handle() would need a type selector, and  I've not 
> seen that anywhere else. 
> 
> Also from this comment & code, I'd conclude that the retuned number is the 
> number of processed bytes.
> In that sense, for me, 0 maps to FALSE in the heuristic and >0 maps to TRUE. 
> 
> I've now coded according to the README.heuristic. To me that reflects 
> 0/FALSE, >0 TRUE.
> 
> >> you can enable or disable heuristics dissectors it in the Enabled 
> >> Protocols menu.
> 
> I'm blind. All I can see there is Ethernet PW (CW heuristic). That one?

The one of DICOM appears to be named "dicom_tcp" ("DICOM over TCP").

Kind regards,
Peter

> Regards
> David
> 
> -----Original Message-----
> From: Wireshark-dev <[email protected]> On Behalf Of Peter 
> Wu
> Sent: Thursday, March 22, 2018 17:29
> To: Developer support list for Wireshark <[email protected]>
> Subject: Re: [Wireshark-dev] heur_dissector_add()
> 
> Hi David,
> 
> On Thu, Mar 22, 2018 at 11:50:07AM +0100, David Aggeler wrote:
> >  
> > 
> > I'm intending to re-enable the heuristic part in the DICOM dissector. 
> > So I read though the updates readme and some other dissector, and to 
> > my surprise, the return value of the heuristic still is supposed to be 
> > boolean, where the static one returns int.
> > 
> >  
> > 
> > Implementation wise, by now I kind of only see 'return 
> > tvb_captured_length(tvb)'. Wasn't this consumed bytes or needed bytes 
> > at some point? I used to return the same int also in heuristic part 
> > and never had an issue, but it looks wrong.
> 
> There are only two conventions for the integer return value, see the comment 
> for call_dissector_through_handle in epan/packet.c:
> 
>     /* This function will return
>      * old style dissector :
>      *   length of the payload or 1 of the payload is empty
>      * new dissector :
>      *   >0  this protocol was successfully dissected and this was this 
> protocol.
>      *   0   this packet did not match this protocol.
>      *
>      * The only time this function will return 0 is if it is a new style 
> dissector
>      * and if the dissector rejected the packet.
>      */
> 
> When I tried to change this such that the returned value is actually 
> significant 
> (https://www.wireshark.org/lists/wireshark-dev/201406/msg00221.html), I found 
> that it would be quite risky to use the return value to signal reassembly.
> 
> > I did not understand that 8 years back, and I still don't. Does it 
> > mean a heuristic can't re-assemble?
> 
> Heuristics can request reassembly, but then they must not reject the data 
> (return true). But only do this when you are sure it is your protocol. To 
> ensure that your normal (not heuristics) dissector is called in the future, 
> you can use conversation_set_dissector.
> 
> > The other part that seems to have changed are the settings for this. 
> > Is it not desired anymore, that the use can select at dissector level, 
> > whether it shall do the heuristic math or not?
> 
> Rather than having a preference at every dissector, it is now taken of by in 
> the core (see function "heur_dissector_add"). In the GUI, you can enable or 
> disable heuristics dissectors it in the Enabled Protocols menu.
> --
> Kind regards,
> Peter Wu
> https://lekensteyn.nl
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <[email protected]>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
             mailto:[email protected]?subject=unsubscribe

Reply via email to