@@ -46,10 +46,24 @@ size_t BearSSLClient::write(uint8_t b)
46
46
47
47
size_t BearSSLClient::write (const uint8_t *buf, size_t size)
48
48
{
49
- br_sslio_write_all (&_ioc, buf, size);
50
- br_sslio_flush (&_ioc);
49
+ size_t written = 0 ;
50
+
51
+ while (written < size) {
52
+ int result = br_sslio_write (&_ioc, buf, size);
53
+
54
+ if (result < 0 ) {
55
+ break ;
56
+ }
57
+
58
+ buf += result;
59
+ written += result;
60
+ }
51
61
52
- return size;
62
+ if (written == size && br_sslio_flush (&_ioc) < 0 ) {
63
+ return 0 ;
64
+ }
65
+
66
+ return written;
53
67
}
54
68
55
69
int BearSSLClient::available ()
@@ -240,17 +254,16 @@ int BearSSLClient::clientRead(void *ctx, unsigned char *buf, size_t len)
240
254
return -1 ;
241
255
}
242
256
243
- int r = c->read (buf, len);
244
-
245
- if (r == -1 ) {
257
+ int result = c->read (buf, len);
258
+ if (result == -1 ) {
246
259
return 0 ;
247
260
}
248
261
249
262
#ifdef DEBUGSERIAL
250
263
DEBUGSERIAL.print (" BearSSLClient::clientRead - " );
251
- DEBUGSERIAL.print (r );
264
+ DEBUGSERIAL.print (result );
252
265
DEBUGSERIAL.print (" - " );
253
- for (size_t i = 0 ; i < r ; i++) {
266
+ for (size_t i = 0 ; i < result ; i++) {
254
267
byte b = buf[i];
255
268
256
269
if (b < 16 ) {
@@ -261,7 +274,7 @@ int BearSSLClient::clientRead(void *ctx, unsigned char *buf, size_t len)
261
274
DEBUGSERIAL.println ();
262
275
#endif
263
276
264
- return r ;
277
+ return result ;
265
278
}
266
279
267
280
int BearSSLClient::clientWrite (void *ctx, const unsigned char *buf, size_t len)
@@ -287,7 +300,10 @@ int BearSSLClient::clientWrite(void *ctx, const unsigned char *buf, size_t len)
287
300
return -1 ;
288
301
}
289
302
290
- int w = c->write (buf, len);
303
+ int result = c->write (buf, len);
304
+ if (result == 0 ) {
305
+ return -1 ;
306
+ }
291
307
292
- return w ;
308
+ return result ;
293
309
}
0 commit comments