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

Wireshark-dev: Re: [Wireshark-dev] Regenerating packet-parlay.c

From: Jaap Keuter <jaap.keuter@xxxxxxxxx>
Date: Fri, 1 May 2020 07:34:30 +0200
> On 1 May 2020, at 04:13, Luke Mewburn <luke@xxxxxxxxxxx> wrote:
> 
> On 20-04-30 20:30, Jaap Keuter wrote:
>  | On 4/30/20 2:41 AM, Luke Mewburn wrote:
>  | > On 20-04-30 10:35, Luke Mewburn wrote:
>  | >   | As to the problem; looking at the use of .keys() in wireshark_gen.py,
>  | >   | there's a couple of places where the code is either:
>  | >   | - get_intlist(), sorted:
>  | >   | 	ret = list(ex_hash.keys())
>  | >   | 	ret.sort()
>  | >   | 	return ret
>  | >   | - get_exceptionList(), unsorted:
>  | >   | 	ret = list(ex_hash.keys())
>  | >   | 	return ret
>  | >   | 
>  | >   | Both could be simplified to an ordered result using sorted():
>  | >   | 	ret = sorted(ex_hash.keys())
>  | >   | 	return ret
>  | > 
>  | > I actually meant:
>  | > 	ret = sorted(ex_hash)
>  | > 	return ret
>  | > 
>  | > Because sorted() takes an iterable.
>  | > That seems to work in both python2 and python3.
>  | > 
>  | > 
>  | > Luke.
>  | 
>  | Hi,
>  | 
>  | tried this, but: in get_exceptionList
>  | ret = sorted(ex_hash.keys())
>  | TypeError: '<' not supported between instances of 'Exception' and 'Exception'
> 
> I've reproduced the problem; the correct invocation is:
> 	ret = sorted(ex_hash, key=lambda ex: ex.identifier())
> 	return ret
> 
> 
> However, looking at the code some more, it appears that generally
> wireshark_gen.py generates code in the order the operations are defined;
> the exception (hah!) is the user exceptions.
> 
> If I instead add at the top
> 	import collections
> and change get_exceptionList() from
> 	ex_hash = {}  # holds a hash of unique exceptions.
> to
> 	ex_hash = collections.OrderedDict()  # holds a hash of unique exceptions.
> 
> This results in consistent generated code with both python 2.7 (CentOS 7)
> and python 3.7 (Fedora 31).
> 
> I've also fixed a whitespace issue in the generated code by indenting
> the break in template_helper_switch_msgtype_default_end, so that it
> matches the epan/dissectors code and other default statements.
> 
> 
> Here's a patch with my suggested fixes.
> Or would you prefer a commit/pull request (etc)?
> 
> 
> regards,
> Luke.
> 

Hi Luke,

That’s great, I didn’t have the opportunity yet to dig into this. Nice that you compared Python 2.7 and 3.7 already.
I’ll pick this up and put it in with the other fixes I've lined up, so you won’t have to push a change. I’ll credit you in the commit :)

Thanks,
Jaap