lnwire: store unknown address type as OpaqueAddrs

Instead of erroring out with encountering an address with an unknown
type, we just store the remainder of the addrBytes as OpaqueAddrs so
that we are able to rewrite them to the wire when we re-propagate the
message.
This commit is contained in:
Elle Mouton
2022-04-21 10:53:06 +02:00
parent fa0512f62f
commit 1477c754f5
2 changed files with 28 additions and 3 deletions

View File

@@ -804,7 +804,29 @@ func ReadElement(r io.Reader, element interface{}) error {
addrBytesRead += aType.AddrLen()
default:
return &ErrUnknownAddrType{aType}
// If we don't understand this address type,
// we just store it along with the remaining
// address bytes as type OpaqueAddrs. We need
// to hold onto the bytes so that we can still
// write them back to the wire when we
// propagate this message.
payloadLen := 1 + addrsLen - addrBytesRead
payload := make([]byte, payloadLen)
// First write a byte for the address type that
// we already read.
payload[0] = byte(aType)
// Now append the rest of the address bytes.
_, err := io.ReadFull(addrBuf, payload[1:])
if err != nil {
return err
}
address = &OpaqueAddrs{
Payload: payload,
}
addrBytesRead = addrsLen
}
addresses = append(addresses, address)