arduino-libraries / ArduinoBearSSL

Port of BearSSL to Arduino
MIT License
84 stars 49 forks source link

failed to send a long data ( > 512bytes ) #60

Closed etakata closed 2 years ago

etakata commented 2 years ago

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);

aentinger commented 2 years ago

Approved :+1: Can you please prepare a PR?

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

etakata commented 2 years ago

@aentinger

Thank you:)

I opened the pull request.-->https://github.com/arduino-libraries/ArduinoBearSSL/pull/61

aentinger commented 2 years ago

Closing, due to merge of #61.