diff --git a/tools/generate-wire.py b/tools/generate-wire.py index e5489ea7f..6fffe73f0 100755 --- a/tools/generate-wire.py +++ b/tools/generate-wire.py @@ -678,6 +678,7 @@ def parse_tlv_file(tlv_field_name): tlv_includes = [] tlv_messages = [] tlv_comments = [] + tlv_prevfield = None with open(get_directory_prefix() + get_tlv_filename(tlv_field_name)) as f: for line in f: # #include gets inserted into header @@ -697,7 +698,31 @@ def parse_tlv_file(tlv_field_name): if len(parts) == 2: # eg commit_sig,132 - tlv_messages.append(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) + tlv_messages.append(tlv_msg) + + tlv_comments = [] + tlv_prevfield = None + else: + if len(parts) == 4: + # eg commit_sig,0,channel-id,8 OR + # commit_sig,0,channel-id,u64 + m = find_message(tlv_messages, parts[0]) + if m is None: + raise ValueError('Unknown message {}'.format(parts[0])) + elif len(parts) == 5: + # eg. + # channel_reestablish,48,your_last_per_commitment_secret,32,option209 + m = find_message_with_option(tlv_messages, messages_with_option, parts[0], parts[4]) + else: + raise ValueError('Line {} malformed'.format(line.rstrip())) + + f = Field(m.name, parts[2], parts[3], tlv_comments, tlv_prevfield) + m.addField(f) + # If it used prevfield as lenvar, keep that for next + # time (multiple fields can use the same lenvar). + if not f.lenvar: + tlv_prevfield = parts[2] tlv_comments = [] return tlv_includes, tlv_messages, tlv_comments