More TLV encoding fixes
This commit is contained in:
parent
2fe5fac82b
commit
05745b1952
6 changed files with 64 additions and 46 deletions
|
|
@ -1023,7 +1023,7 @@ class CircuitMatter:
|
|||
cstatus.CommandRef = command_ref
|
||||
response.Status = cstatus
|
||||
cdata = interaction_model.CommandDataIB()
|
||||
cdata.Path = path
|
||||
cdata.CommandPath = path
|
||||
cdata.CommandFields = cluster.invoke(path, fields)
|
||||
if command_ref is not None:
|
||||
cdata.CommandRef = command_ref
|
||||
|
|
@ -1261,5 +1261,15 @@ class CircuitMatter:
|
|||
)
|
||||
else:
|
||||
print(f"Cluster 0x{path.Cluster:02x} not found")
|
||||
for r in invoke_responses:
|
||||
print(r)
|
||||
response = interaction_model.InvokeResponseMessage()
|
||||
response.SuppressResponse = False
|
||||
response.InvokeResponses = invoke_responses
|
||||
exchange.send(
|
||||
ProtocolId.INTERACTION_MODEL,
|
||||
InteractionModelOpcode.INVOKE_RESPONSE,
|
||||
response,
|
||||
)
|
||||
elif protocol_opcode == InteractionModelOpcode.INVOKE_RESPONSE:
|
||||
print("Received Invoke Response")
|
||||
|
|
|
|||
|
|
@ -55,16 +55,16 @@ class NumberAttribute(Attribute):
|
|||
type = tlv.ElementType.UNSIGNED_INT
|
||||
length = 0 # in power of two
|
||||
if bit_length <= 8:
|
||||
format_string = "Bb" if signed else "BB"
|
||||
format_string = "<Bb" if signed else "<BB"
|
||||
length = 0
|
||||
elif bit_length <= 16:
|
||||
format_string = "Bh" if signed else "BH"
|
||||
format_string = "<Bh" if signed else "<BH"
|
||||
length = 1
|
||||
elif bit_length <= 32:
|
||||
format_string = "Bi" if signed else "BI"
|
||||
format_string = "<Bi" if signed else "<BI"
|
||||
length = 2
|
||||
else:
|
||||
format_string = "Bq" if signed else "BQ"
|
||||
format_string = "<Bq" if signed else "<BQ"
|
||||
length = 3
|
||||
|
||||
return struct.pack(format_string, type | length, value)
|
||||
|
|
@ -177,7 +177,7 @@ class Cluster:
|
|||
if not field_name.startswith("_") and isinstance(descriptor, Command):
|
||||
yield field_name, descriptor
|
||||
|
||||
def invoke(self, path, fields):
|
||||
def invoke(self, path, fields) -> bytes:
|
||||
print("invoke", path.Command)
|
||||
found = False
|
||||
for field_name, descriptor in self._commands():
|
||||
|
|
@ -185,7 +185,8 @@ class Cluster:
|
|||
continue
|
||||
arg = descriptor.request_type.from_value(fields)
|
||||
print("invoke", field_name, descriptor, arg)
|
||||
return getattr(self, field_name)(arg)
|
||||
result = getattr(self, field_name)(arg)
|
||||
return descriptor.response_type.encode(result)
|
||||
if not found:
|
||||
print("not found", path.Attribute)
|
||||
return None
|
||||
|
|
@ -299,8 +300,10 @@ class GeneralCommissioningCluster(Cluster):
|
|||
Breadcrumb = tlv.IntMember(1, signed=False, octets=8)
|
||||
|
||||
class ArmFailSafeResponse(tlv.Structure):
|
||||
ErrorCode = tlv.EnumMember(0, CommissioningErrorEnum)
|
||||
DebugText = tlv.UTF8StringMember(1, max_length=128)
|
||||
ErrorCode = tlv.EnumMember(
|
||||
0, CommissioningErrorEnum, default=CommissioningErrorEnum.OK
|
||||
)
|
||||
DebugText = tlv.UTF8StringMember(1, max_length=128, default="")
|
||||
|
||||
arm_fail_safe = Command(0x00, ArmFailSafe, 0x01, ArmFailSafeResponse)
|
||||
|
||||
|
|
|
|||
|
|
@ -48,12 +48,12 @@ class StatusIB(tlv.Structure):
|
|||
|
||||
class AttributeDataIB(tlv.Structure):
|
||||
DataVersion = tlv.IntMember(0, signed=False, octets=4)
|
||||
Path = tlv.StructMember(1, AttributePathIB)
|
||||
Path = tlv.ListMember(1, AttributePathIB)
|
||||
Data = tlv.AnythingMember(2)
|
||||
|
||||
|
||||
class AttributeStatusIB(tlv.Structure):
|
||||
Path = tlv.StructMember(0, AttributePathIB)
|
||||
Path = tlv.ListMember(0, AttributePathIB)
|
||||
Status = tlv.StructMember(1, StatusIB)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ class Member(ABC, Generic[_T, _OPT, _NULLABLE]):
|
|||
else:
|
||||
self.tag_length = 8
|
||||
self._max_length = None
|
||||
self._default = None
|
||||
self._default = default
|
||||
self._name = None
|
||||
|
||||
def __set_name__(self, owner, name):
|
||||
|
|
@ -264,7 +264,9 @@ class Member(ABC, Generic[_T, _OPT, _NULLABLE]):
|
|||
raise ValueError("Not nullable")
|
||||
obj.values[self.tag] = value
|
||||
|
||||
def encode_into(self, obj: Container, buffer: bytearray, offset: int) -> int:
|
||||
def encode_into(
|
||||
self, obj: Container, buffer: bytearray, offset: int, anonymous_ok=False
|
||||
) -> int:
|
||||
value = self.__get__(obj) # type: ignore # self inference issues
|
||||
element_type = ElementType.NULL
|
||||
if value is not None:
|
||||
|
|
@ -282,10 +284,12 @@ class Member(ABC, Generic[_T, _OPT, _NULLABLE]):
|
|||
tag_control = 0b110
|
||||
if self.tag[2] >= 65536:
|
||||
tag_control = 0b111
|
||||
elif not anonymous_ok:
|
||||
raise ValueError("Anonymous tag not allowed")
|
||||
|
||||
buffer[offset] = tag_control << 5 | element_type
|
||||
offset += 1
|
||||
if self.tag:
|
||||
if self.tag is not None:
|
||||
if isinstance(self.tag, int):
|
||||
buffer[offset] = self.tag
|
||||
offset += 1
|
||||
|
|
@ -669,7 +673,13 @@ class ArrayMember(Member[_TLVStruct, _OPT, _NULLABLE]):
|
|||
|
||||
def encode_value_into(self, value, buffer: bytearray, offset: int) -> int:
|
||||
for v in value:
|
||||
offset = v.encode_into(buffer, offset)
|
||||
if isinstance(v, Structure):
|
||||
buffer[offset] = ElementType.STRUCTURE
|
||||
elif isinstance(v, List):
|
||||
buffer[offset] = ElementType.LIST
|
||||
offset = v.encode_into(buffer, offset + 1)
|
||||
buffer[offset] = ElementType.END_OF_CONTAINER
|
||||
offset += 1
|
||||
buffer[offset] = ElementType.END_OF_CONTAINER
|
||||
return offset + 1
|
||||
|
||||
|
|
@ -728,7 +738,7 @@ class List(Container):
|
|||
name, member = member_by_tag[tag]
|
||||
else:
|
||||
raise NotImplementedError("Unknown tag")
|
||||
offset = member.encode_into(self, buffer, offset)
|
||||
offset = member.encode_into(self, buffer, offset, anonymous_ok=True)
|
||||
else:
|
||||
raise NotImplementedError("Anonymous list member")
|
||||
return offset
|
||||
|
|
@ -806,10 +816,16 @@ class AnythingMember(Member):
|
|||
return None
|
||||
|
||||
def print(self, value):
|
||||
if isinstance(value, bytes):
|
||||
return value.hex(" ")
|
||||
if isinstance(value, memoryview):
|
||||
return "memoryview" + value.hex(" ")
|
||||
return str(value)
|
||||
|
||||
def encode_element_type(self, value):
|
||||
return value[0]
|
||||
|
||||
def encode_value_into(self, value, buffer: bytearray, offset: int) -> int:
|
||||
return offset
|
||||
value_length = len(value) - 1
|
||||
buffer[offset : offset + value_length] = memoryview(value)[1:]
|
||||
return offset + value_length
|
||||
|
|
|
|||
|
|
@ -1,28 +1,17 @@
|
|||
["urandom", 160614526879484, 8, "8YsmPKFtlz4="]
|
||||
["receive", 160618295172071, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "BAAAAEiWhgLtobv+k7S8oAUgwOUAABUwASDACCVgi6wHtD02m6EwComQdn2IFjOtafHq7o3J35TokSUCWBUkAwAoBDUFJQH0ASUCLAElA6APJAQRJAULJgYAAAMBJAcBGBg="]
|
||||
["urandom", 160618321366957, 32, "es6TR37V0Vs3gU1qjRIv7FpG/HE/v7vaePV733fuYEk="]
|
||||
["send", 160618321501802, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AQAAAMvRYA7tobv+k7S8oAIhwOUAAEiWhgIVMAEgwAglYIusB7Q9NpuhMAqJkHZ9iBYzrWnx6u6Nyd+U6JEwAiB6zpNHftXRWzeBTWqNEi/sWkb8cT+/u9p49Xvfd+5gSSUDAQA1BCYBECcAADACIObgj9CEx2MyPagRHuoX1OB32N8u1aKUpNKjb4b854YkGBg="]
|
||||
["receive", 160618328400875, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "BAAAAEmWhgLtobv+k7S8oAUiwOUAABUwAUEEyh96+016RRlMo2cltQnM5jj/5oWQNd3GH7996DLCOLcN+pXEuJZVwIbk5g6FNhAp5/59hkvEvXmR1/+HSkISKBg="]
|
||||
["randbelow", 160618328500723, 115792089210356248762697446949407573529996955224135760342422259061068512044369, 36493665673707781682760077969958150174565691242371595029269024942496324546290]
|
||||
["send", 160618343816534, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AQAAAMzRYA7tobv+k7S8oAIjwOUAAEmWhgIVMAFBBFTaW9UkewH4kdP99RTkZ9xiXyVlkkJ8bs3tnCkVx/rU2Itl7wM8XmTIIgOXn+kKf1Z0Fr/LrCocxhCOPfNvlQkwAiDpIXysLp1OXkFoP6drRa6SYqEhyXtF0xAPrDdz8F1ZOxg="]
|
||||
["receive", 160618344275711, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "BAAAAEqWhgLtobv+k7S8oAUkwOUAABUwASATSI2pTtC+AOxP4yCirp6kEj9Q9begb0tq3w3u4yZyPBg="]
|
||||
["send", 160618344358517, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AQAAAM3RYA7tobv+k7S8oAJAwOUAAEqWhgIAAAAAAAAAAA=="]
|
||||
["receive", 160618344531223, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEgYiwIK5lkiVUIKtC0izVHThMjdXagA6dzzfTXmQ+v4qFv7FUIB6GgxuPeemnaeoxmRYWjh623cnnbdHdQCV3xU1+5t7Fs9AGaqklrhuyteB3iw/EKHo/6LewBW937y7G4TM8MHeAw1cEJRamYJ6BEwAhwlxCiufDTdNMXSx3o="]
|
||||
["send", 160618345504430, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AFgVAPFi8wgJ0GpSMNPuib58Gf5jbw0EsxOqAZ0BO6Xe+2LZhhCHQoauhXDvuqI6/wviLJs6rYy6pYH8//V/vmCeQrm5aabgg3kp2/wDSqHKlFpQ1d5v8ZwVQOKGTrVcjUpzjTiBegcCe2ImAqB2rOXEL79w8TWI3ksg5LUQHFK4sil9OTuurhj2gQmv6rp/c2dZMzL7wbVRfFfNB7REq8S+QEfuAWiEfnJG3nMxvOFKS1/55fhkxXmjwteTrR3VgN/Dl4Ov2i40QRvSO7eSA3KoQsg7ZOozXomaEbtZgmuaDU1rUG0lt/jqgkK+T3CwMp651gAhEsXUrAiU45LmjPaX2FYjc643mBwkIArLfAjIQMpB6nJ31fEtv3tnM4W3SpBKksqLIzq/4HLasW2gtvKEAOkiPMXoITaghkdDcfzaaY22yoVPqg6Z/pD51PoLqznH6UDLWTdFsixJxt9rutVHvJYXMSqmOPcOUk4OwiU4Y0WWYFrGaY5+a5R7AKSwSIvVidtD7+RNAt57hzbMRuuPxzhCTSPNRBWn6UVgVzUgds5eTLzget1dO7XBCGvFHF93hqqkDZkofHeUrxXMhEwDjnRZqs0TTvGbZoXWtfe/OFSw7FyY0BpGwMR9cXsLAmFEeQAIYjhXQ7ifpwqZ"]
|
||||
["receive", 160618345613566, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEkYiwJ4b6vh+FvbVDqyiHBT68yOoi8m24rlNj6/pc61Ji4="]
|
||||
["receive", 160618345708054, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEoYiwLICJ1qK0KIOVY4fZhkDFM1br8s2AIMnuB3LlNNOtpx06Px1NU1LITijZmuwfuKd+s55lfeHUN4Eq7VaZ3TaMm/YMZcOugVztZfPD8Z6g=="]
|
||||
["send", 160618346064587, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AFgVAPJi8whT/1rJ8+/PmPLtfJU+gfqvKxRqoxXHVrVNwSQRtT8KNcHG7AUB4GXmqQNkIespcsaB5YdJ0vx5pZRlPdat/hgnL7IMHs5oQpILupXH0Mk0wemG9cpxYoHU"]
|
||||
["receive", 160618346162823, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEsYiwIEbVnLlyzaGClk4HiarUKr2gOzdREtt061v4dxrWU="]
|
||||
["receive", 160618346248334, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEwYiwJOXgbJhUfASZelDvyYFl81ZlpiirdsKSFhwvOLGVe621V88HpP5DMT9fDJDu+9uNahj3yrLZqBw44="]
|
||||
["receive", 160618706956191, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEwYiwJOXgbJhUfASZelDvyYFl81ZlpiirdsKSFhwvOLGVe621V88HpP5DMT9fDJDu+9uNahj3yrLZqBw44="]
|
||||
["receive", 160618736081048, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEsYiwIEbVnLlyzaGClk4HiarUKr2gOzdREtt061v4dxrWU="]
|
||||
["receive", 160618745189903, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEkYiwJ4b6vh+FvbVDqyiHBT68yOoi8m24rlNj6/pc61Ji4="]
|
||||
["receive", 160619063600537, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEwYiwJOXgbJhUfASZelDvyYFl81ZlpiirdsKSFhwvOLGVe621V88HpP5DMT9fDJDu+9uNahj3yrLZqBw44="]
|
||||
["receive", 160619108728162, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEsYiwIEbVnLlyzaGClk4HiarUKr2gOzdREtt061v4dxrWU="]
|
||||
["receive", 160619143844829, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEkYiwJ4b6vh+FvbVDqyiHBT68yOoi8m24rlNj6/pc61Ji4="]
|
||||
["receive", 160619645443106, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEwYiwJOXgbJhUfASZelDvyYFl81ZlpiirdsKSFhwvOLGVe621V88HpP5DMT9fDJDu+9uNahj3yrLZqBw44="]
|
||||
["receive", 160619729615633, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEsYiwIEbVnLlyzaGClk4HiarUKr2gOzdREtt061v4dxrWU="]
|
||||
["receive", 160619772725940, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEkYiwJ4b6vh+FvbVDqyiHBT68yOoi8m24rlNj6/pc61Ji4="]
|
||||
["receive", 160620573635719, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEwYiwJOXgbJhUfASZelDvyYFl81ZlpiirdsKSFhwvOLGVe621V88HpP5DMT9fDJDu+9uNahj3yrLZqBw44="]
|
||||
["receive", 160620635781868, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEsYiwIEbVnLlyzaGClk4HiarUKr2gOzdREtt061v4dxrWU="]
|
||||
["receive", 160620722965760, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEkYiwJ4b6vh+FvbVDqyiHBT68yOoi8m24rlNj6/pc61Ji4="]
|
||||
["urandom", 350585853607419, 8, "xA4yE5YTpkA="]
|
||||
["receive", 350587096075493, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "BAAAAMa1vQPUSbbPrqLtJgUggP8AABUwASD2zxwaK72yIGXgGo6eoto/w+n5f2yRavZXWHgi+PXapiUC7d0kAwAoBDUFJQH0ASUCLAElA6APJAQRJAULJgYAAAMBJAcBGBg="]
|
||||
["urandom", 350587128879760, 32, "xzGpsJxnxQou/EF15WCv/oi7aedtmlZU4Q6aV6MxybA="]
|
||||
["send", 350587129006309, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AQAAANcK+wHUSbbPrqLtJgIhgP8AAMa1vQMVMAEg9s8cGiu9siBl4BqOnqLaP8Pp+X9skWr2V1h4Ivj12qYwAiDHMamwnGfFCi78QXXlYK/+iLtp522aVlThDppXozHJsCUDAQA1BCYBECcAADACIObgj9CEx2MyPagRHuoX1OB32N8u1aKUpNKjb4b854YkGBg="]
|
||||
["receive", 350587135507153, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "BAAAAMe1vQPUSbbPrqLtJgUigP8AABUwAUEEFc1AB41Tr1tAfC+PmT/xEy1cglver2gjGxbxKQqOEwQwtzj5tIZk1CFEUZv5VhlQEO8FK9E+Zf1vn34PckFIURg="]
|
||||
["randbelow", 350587135613023, 115792089210356248762697446949407573529996955224135760342422259061068512044369, 115473339479673884280104370450166017066816674872314297419471759872926838745841]
|
||||
["send", 350587151156721, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AQAAANgK+wHUSbbPrqLtJgIjgP8AAMe1vQMVMAFBBAcGjqic2zu9I/CWQ37MQ5Cq/uQwGTiRZZ6x43FGUqrqb23/8yKqDH97/lXjZhuvNkEXdJyYekesbJRmDoSx9GIwAiAhyUXSRm/Nx/uuT0x/rFn4daOLfydl7fB9o3ri4KTsThg="]
|
||||
["receive", 350587151563108, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "BAAAAMi1vQPUSbbPrqLtJgUkgP8AABUwASAOyxB90IQ4pXVTkJGMAzxfshniG0vsE4vJxJUXpJgDOxg="]
|
||||
["send", 350587151661434, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AQAAANkK+wHUSbbPrqLtJgJAgP8AAMi1vQMAAAAAAAAAAA=="]
|
||||
["receive", 350587151843067, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AAEAAMvQfgqe1+b0ErOxGZUF3l4lhUVdlt+wCpTEaf28uQeGD6X2KPek1H52Uj2ePzDcnG28EM3DR7goMhI9+quoNZNEUASzCTDWppnMtUNZCeKOXYkadV1xURswla3q2PBBbFMclILwJRat6AB4G0oD6n9ciGcYMGdL9mwXuJR0hKE="]
|
||||
["send", 350587152774505, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AO3dAFApww0GutoB/WkZhRK+lHoiYxg7UjxXqyc0Vo4IvBw35itUf36ndZZ8qEjcqq3ukqUkAUcW3bs27R6Gg47aG1tgP4BNalazU8GZWxsDE36+VQSjQvF+NcipaAJT8Y4gbX98B41duYkP6GQI4M9v7Id9rlyC2AImwnGiRlTTDkkPsibLxXgVHAVzR2+BezIxPz5i+Q6wSg0tyn2R5gablGAC1NE2OzLqZkqY0lRz6khr2WNHRjf3Da6hbzdc+UPk1uI7kFZ9A9ZGYddIqBiENkUK2m5s8CDPcOeFOtsqlKxArldwMmPcUxKfklwdbCvHDyk3BR6G/DTmbS5OYWLEApSQfkIYGyc0263HwVDWvszaREkPiQw5nFoGa/cnjTt04gPyBl+SVkUJgGtq+UTszBm0t8401Jn04/rf7ekzaIlYYnjIAdBQkn6Hhg6ERrOMWN5K5WQG5vJbo4LX4r9L5SkeCsB9MLbq8KLvc/quWFPwNHYF2sHUKnT2za/rJUiRiZo+TIbwMIb9LrobUrKVSzo4Gj4SCElJCHv9z1Gdzs5pa7QOetjyZJ6817Gane0P639wm5C0fWOnu9obXha2FVB/oNIxuuiMqNA/Yi+CkQ8g3geK0D07LfL+RTcQrTIyFnCK/nCE0qCiNe+oi1rlQKo+zGCu9/fOX2ObqlO24xcYJ4ds8e+GC+eu4U6YztcqORp9hweYzHdui8J93w=="]
|
||||
["receive", 350587159372072, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AAEAAMzQfgptUG7fZgN3ppDYyBO7CiMe3ENiO7eXLyCv+YWjYv4="]
|
||||
["receive", 350587159472783, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AAEAAM3Qfgrgg3jWjNGgrTnf6GrhD/hniSA4j+7sRWnSu649VdCgKoz0ie0mLC2wunbfPDriu3ZzaQ/5H0ILqB4kVgIr2wQniwuEW1kFraee9/Asyw=="]
|
||||
["send", 350587159756658, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AO3dAFEpww07UbyghW+JBq253x+tXYUe/KjdCdeEUVy1HIUJ6FEQOiNSFRwVtS5+ZWpGcGGud/Yr02ZmhLtzHiH3KapX332etipkfIEbG2t84fFKJ17C9pUddLjUwEzsNiiNyX/U"]
|
||||
["receive", 350587161059829, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AAEAAM7QfgpRsOL0plLx7IwHLDLy/owyMK2cA8FWoBOmDf0eEVE="]
|
||||
["receive", 350587161149769, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AAEAAM/QfgqOO+MnXhNDVBSV19QiDStKc+ubq3myHXfyvduZdu29jZw93Lp0Kb+6kSU6OcpYqs+uubMBipiCo0w="]
|
||||
["send", 350587161501002, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AO3dAFIpww03V0tvzqO+Gcb4kRjJ9bhHZsZ7MR/oLOE6EakbF5ftcueaktUx+ccNFQYJUnu4YozpT7Y7p2Zs2bxa9jnZ6er12+ekgInHNq3eca5Du0e8Pyvq+h1cUJqBH1SoFhA7UnY="]
|
||||
|
|
|
|||
|
|
@ -533,7 +533,7 @@ class TestStruct:
|
|||
s.s = inner
|
||||
assert (
|
||||
s.encode().tobytes()
|
||||
== b"\x15\x22\x2a\x00\x00\x00\x22\x01\xef\xff\xff\xff\x18"
|
||||
== b"\x15\x22\x00\x2a\x00\x00\x00\x22\x01\xef\xff\xff\xff\x18"
|
||||
)
|
||||
|
||||
def test_inner_struct_encode_empty(self):
|
||||
|
|
|
|||
Loading…
Reference in a new issue