Skip to content

Commit

Permalink
Options: Fix block encoding
Browse files Browse the repository at this point in the history
Closes: #130
  • Loading branch information
chrysn committed Nov 17, 2018
1 parent 21f7135 commit 9bd612d
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
4 changes: 3 additions & 1 deletion aiocoap/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,9 @@ def encode(self):
data.append(bytes([((delta & 0x0F) << 4) + (length & 0x0F)]))
data.append(extended_delta)
data.append(extended_length)
data.append(option.encode())
optiondata = option.encode()
assert len(optiondata) == option.length, "Option announced different data length than produced"
data.append(optiondata)
current_opt_num = option.number
return (b''.join(data))

Expand Down
4 changes: 3 additions & 1 deletion aiocoap/optiontypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,9 @@ def decode(self, rawdata):
self.value = self.BlockwiseTuple(block_number=(as_integer >> 4), more=bool(as_integer & 0x08), size_exponent=(as_integer & 0x07))

def _length(self):
return ((self.value[0].bit_length() + 3) // 8 + 1)
if self.value.block_number == 0:
return int(self.value.more or (self.value.size_exponent != 0))
return ((self.value.block_number.bit_length() + 3) // 8 + 1)
length = property(_length)

def __str__(self):
Expand Down

0 comments on commit 9bd612d

Please sign in to comment.