31
31
#include <stdarg.h>
32
32
#include <tcp_axtls.h>
33
33
34
+ uint8_t * default_private_key = NULL ;
35
+ uint16_t default_private_key_len = 0 ;
36
+
37
+ uint8_t * default_certificate = NULL ;
38
+ uint16_t default_certificate_len = 0 ;
34
39
35
40
SSL_CTX * tcp_ssl_new_server_ctx (const char * cert , const char * private_key_file , const char * password ){
36
41
uint32_t options = SSL_CONNECT_IN_PARTS ;
@@ -254,18 +259,62 @@ int tcp_ssl_free(struct tcp_pcb *tcp) {
254
259
return 0 ;
255
260
}
256
261
262
+ #if AXTLS_2_0_0_SNDBUF
263
+ int tcp_ssl_sndbuf (struct tcp_pcb * tcp ){
264
+ int expected ;
265
+ int available ;
266
+ int result = -1 ;
267
+
268
+ if (tcp == NULL ) {
269
+ return result ;
270
+ }
271
+ tcp_ssl_t * tcp_ssl = tcp_ssl_get (tcp );
272
+ if (!tcp_ssl ){
273
+ TCP_SSL_DEBUG ("tcp_ssl_sndbuf: tcp_ssl is NULL\n" );
274
+ return result ;
275
+ }
276
+ available = tcp_sndbuf (tcp );
277
+ if (!available ){
278
+ TCP_SSL_DEBUG ("tcp_ssl_sndbuf: tcp_sndbuf is zero\n" );
279
+ return 0 ;
280
+ }
281
+ result = available ;
282
+ while ((expected = ssl_calculate_write_length (tcp_ssl -> ssl , result )) > available ){
283
+ result -= (expected - available ) + 4 ;
284
+ }
285
+
286
+ if (expected > 0 ){
287
+ //TCP_SSL_DEBUG("tcp_ssl_sndbuf: tcp_sndbuf is %d from %d\n", result, available);
288
+ return result ;
289
+ }
290
+
291
+ return 0 ;
292
+ }
293
+ #endif
294
+
257
295
int tcp_ssl_write (struct tcp_pcb * tcp , uint8_t * data , size_t len ) {
258
296
if (tcp == NULL ) {
259
297
return -1 ;
260
298
}
261
- tcp_ssl_t * axl = tcp_ssl_get (tcp );
262
- if (!axl ){
299
+ tcp_ssl_t * tcp_ssl = tcp_ssl_get (tcp );
300
+ if (!tcp_ssl ){
263
301
TCP_SSL_DEBUG ("tcp_ssl_write: tcp_ssl is NULL\n" );
264
302
return 0 ;
265
303
}
266
- axl -> last_wr = 0 ;
304
+ tcp_ssl -> last_wr = 0 ;
305
+
306
+ #if AXTLS_2_0_0_SNDBUF
307
+ int expected_len = ssl_calculate_write_length (tcp_ssl -> ssl , len );
308
+ int available_len = tcp_sndbuf (tcp );
309
+ if (expected_len < 0 || expected_len > available_len ){
310
+ TCP_SSL_DEBUG ("tcp_ssl_write: data will not fit! %u < %d(%u)\r\n" , available_len , expected_len , len );
311
+ return -1 ;
312
+ }
313
+ #endif
314
+
315
+ int rc = ssl_write (tcp_ssl -> ssl , data , len );
267
316
268
- int rc = ssl_write ( axl -> ssl , data , len );
317
+ //TCP_SSL_DEBUG("tcp_ssl_write: %u -> %d (%d)\r\n" , len, tcp_ssl->last_wr, rc );
269
318
270
319
if (rc < 0 ){
271
320
if (rc != SSL_CLOSE_NOTIFY ) {
@@ -274,9 +323,7 @@ int tcp_ssl_write(struct tcp_pcb *tcp, uint8_t *data, size_t len) {
274
323
return rc ;
275
324
}
276
325
277
- //TCP_SSL_DEBUG("tcp_ssl_write: %u -> %d\r\n", len, axl->last_wr);
278
-
279
- return axl -> last_wr ;
326
+ return tcp_ssl -> last_wr ;
280
327
}
281
328
282
329
/**
@@ -437,20 +484,19 @@ int ax_port_write(int fd, uint8_t *data, uint16_t len) {
437
484
fd_data = tcp_ssl_get_by_fd (fd );
438
485
if (fd_data == NULL ) {
439
486
//TCP_SSL_DEBUG("ax_port_write: tcp_ssl[%d] is NULL\n", fd);
440
- return ERR_TCP_SSL_INVALID_CLIENTFD ;
487
+ return ERR_MEM ;
441
488
}
442
489
443
- if (fd_data -> tcp == NULL || data == NULL || len == 0 ) {
490
+ if (data == NULL || len == 0 ) {
444
491
return 0 ;
445
492
}
446
493
447
494
if (tcp_sndbuf (fd_data -> tcp ) < len ) {
448
495
tcp_len = tcp_sndbuf (fd_data -> tcp );
449
496
if (tcp_len == 0 ) {
450
497
TCP_SSL_DEBUG ("ax_port_write: tcp_sndbuf is zero: %d\n" , len );
451
- return -1 ;
498
+ return ERR_MEM ;
452
499
}
453
-
454
500
} else {
455
501
tcp_len = len ;
456
502
}
@@ -460,21 +506,19 @@ int ax_port_write(int fd, uint8_t *data, uint16_t len) {
460
506
}
461
507
462
508
err = tcp_write (fd_data -> tcp , data , tcp_len , TCP_WRITE_FLAG_COPY );
463
- if (err < SSL_OK ) {
509
+ if (err < ERR_OK ) {
464
510
if (err == ERR_MEM ) {
465
511
TCP_SSL_DEBUG ("ax_port_write: No memory %d (%d)\n" , tcp_len , len );
466
512
return err ;
467
513
}
468
514
TCP_SSL_DEBUG ("ax_port_write: tcp_write error: %d\n" , err );
469
- }
470
-
471
-
472
- if (err == ERR_OK ) {
473
- //TCP_SSL_DEBUG("ax_port_write: tcp_output length %d / %d\n", tcp_len, len);
515
+ return err ;
516
+ } else if (err == ERR_OK ) {
517
+ //TCP_SSL_DEBUG("ax_port_write: tcp_output: %d / %d\n", tcp_len, len);
474
518
err = tcp_output (fd_data -> tcp );
475
519
if (err != ERR_OK ) {
476
520
TCP_SSL_DEBUG ("ax_port_write: tcp_output err: %d\n" , err );
477
- return 0 ;
521
+ return err ;
478
522
}
479
523
}
480
524
0 commit comments