arduino-libraries/ArduinoBearSSL

failed to send a long data ( > 512bytes )

etakata opened this issue · 3 comments

Hello team,

I failed to send a long data(> 512bytes), using BearSSLClient::write(const uint8_t *buf, size_t size)

Suppose that buf stored 600 bytes data and br_sslio_write() could send 512 bytes at maximum each call.

Call write(buf, 600)

Expected behavior
write() sends 600 bytes and returns 600

Current behavior
write() sends 1024 bytes and returns 1024

Detail:

  1. User calls write(buf, 600)
  2. First time execution in the while loop
    • br_sslio_write() sends 512 bytes from &buf[0] and returns 512, buf points at &buf[512], written = 512
  3. written < size is true
  4. Second time execution in the while loop
    • br_sslio_write() sends 512 bytes from &buf[512] and returns 512, buf points at &buf[1024], written = 1024
  5. written < size is false and escaping from the loop
  6. write() returns 1024

To fix this issue, I'd like to change here
from:
int result = br_sslio_write(&_ioc, buf, size);
to:
int result = br_sslio_write(&_ioc, buf, size - written);

Approved 👍 Can you please prepare a PR?

CC @pennam might be worth to integrate this change over at the ArduinoIoTCloud stack.

@aentinger

Thank you:)

I opened the pull request.-->#61

Closing, due to merge of #61.