Browse Source

tlv: add tlv messages to general message set

Add tlv-messages to the general messages set so that their parsing
messages get printed out.

FIXME: figure out how to account for partial message length processing?
pr-2587
lisa neigut 6 years ago
committed by Rusty Russell
parent
commit
0b12d90c4a
  1. 33
      tools/generate-wire.py

33
tools/generate-wire.py

@ -330,12 +330,13 @@ class CCode(object):
class Message(object): class Message(object):
def __init__(self, name, enum, comments): def __init__(self, name, enum, comments, is_tlv):
self.name = name self.name = name
self.enum = enum self.enum = enum
self.comments = comments self.comments = comments
self.fields = [] self.fields = []
self.has_variable_fields = False self.has_variable_fields = False
self.is_tlv = is_tlv
def checkLenField(self, field): def checkLenField(self, field):
# Optional fields don't have a len. # Optional fields don't have a len.
@ -698,8 +699,9 @@ def parse_tlv_file(tlv_field_name):
if len(parts) == 2: if len(parts) == 2:
# eg commit_sig,132 # eg commit_sig,132
tlv_msg = Message(parts[0], Enumtype("TLV_" + parts[0].upper(), parts[1]), tlv_comments) tlv_msg = Message(parts[0], Enumtype("TLV_" + parts[0].upper(), parts[1]), tlv_comments, True)
tlv_messages.append(tlv_msg) tlv_messages.append(tlv_msg)
messages.append(tlv_msg)
tlv_comments = [] tlv_comments = []
tlv_prevfield = None tlv_prevfield = None
@ -763,7 +765,7 @@ for line in fileinput.input(options.files):
if len(parts) == 2: if len(parts) == 2:
# eg commit_sig,132 # eg commit_sig,132
messages.append(Message(parts[0], Enumtype("WIRE_" + parts[0].upper(), parts[1]), comments)) messages.append(Message(parts[0], Enumtype("WIRE_" + parts[0].upper(), parts[1]), comments, False))
comments = [] comments = []
prevfield = None prevfield = None
else: else:
@ -816,21 +818,21 @@ def format_enums(template, enums, enumname):
enumname=enumname) enumname=enumname)
def build_hdr_enums(toplevel_enumname, messages, tlv_fields): def build_hdr_enums(toplevel_enumname, toplevel_messages, tlv_fields):
enum_set = "" enum_set = ""
enum_set += enum_header(construct_hdr_enums(messages), toplevel_enumname) enum_set += enum_header(construct_hdr_enums(toplevel_messages), toplevel_enumname)
for field_name, messages in tlv_fields.items(): for field_name, tlv_messages in tlv_fields.items():
enum_set += "\n" enum_set += "\n"
enum_set += enum_header(construct_hdr_enums(messages), field_name + '_type') enum_set += enum_header(construct_hdr_enums(tlv_messages), field_name + '_type')
return enum_set return enum_set
def build_impl_enums(toplevel_enumname, messages, tlv_fields): def build_impl_enums(toplevel_enumname, toplevel_messages, tlv_fields):
enum_set = "" enum_set = ""
enum_set += enum_impl(construct_impl_enums(messages), toplevel_enumname) enum_set += enum_impl(construct_impl_enums(toplevel_messages), toplevel_enumname)
for field_name, messages in tlv_fields.items(): for field_name, tlv_messages in tlv_fields.items():
enum_set += "\n" enum_set += "\n"
enum_set += enum_impl(construct_impl_enums(messages), field_name + '_type') enum_set += enum_impl(construct_impl_enums(tlv_messages), field_name + '_type')
return enum_set return enum_set
@ -921,11 +923,12 @@ elif options.header:
else: else:
template = impl_template template = impl_template
# Dump out enum, sorted by value order. # Print out all the things
built_hdr_enums = build_hdr_enums(options.enumname, messages, tlv_fields) toplevel_messages = [m for m in messages if not m.is_tlv]
built_impl_enums = build_impl_enums(options.enumname, messages, tlv_fields) built_hdr_enums = build_hdr_enums(options.enumname, toplevel_messages, tlv_fields)
built_impl_enums = build_impl_enums(options.enumname, toplevel_messages, tlv_fields)
includes = '\n'.join(includes) includes = '\n'.join(includes)
printcases = ['case {enum.name}: printf("{enum.name}:\\n"); printwire_{name}("{name}", msg); return;'.format(enum=m.enum, name=m.name) for m in messages] printcases = ['case {enum.name}: printf("{enum.name}:\\n"); printwire_{name}("{name}", msg); return;'.format(enum=m.enum, name=m.name) for m in toplevel_messages]
if options.printwire: if options.printwire:
decls = [m.print_printwire(options.header) for m in messages + messages_with_option] decls = [m.print_printwire(options.header) for m in messages + messages_with_option]

Loading…
Cancel
Save