* write x byte to tcp or get timeout * @param client WSclient_t * * @param out uint8_t * data buffer * @param n size_t byte count * @return bytes send */
| 608 | * @return bytes send |
| 609 | */ |
| 610 | size_t WebSockets::write(WSclient_t * client, uint8_t *out, size_t n) { |
| 611 | if(out == NULL) return 0; |
| 612 | if(client == NULL) return 0; |
| 613 | unsigned long t = millis(); |
| 614 | size_t len = 0; |
| 615 | size_t total = 0; |
| 616 | DEBUG_WEBSOCKETS("[write] n: %zu t: %lu\n", n, t); |
| 617 | while(n > 0) { |
| 618 | if(client->tcp == NULL) { |
| 619 | DEBUG_WEBSOCKETS("[write] tcp is null!\n"); |
| 620 | break; |
| 621 | } |
| 622 | |
| 623 | if(!client->tcp->connected()) { |
| 624 | DEBUG_WEBSOCKETS("[write] not connected!\n"); |
| 625 | break; |
| 626 | } |
| 627 | |
| 628 | if((millis() - t) > WEBSOCKETS_TCP_TIMEOUT) { |
| 629 | DEBUG_WEBSOCKETS("[write] write TIMEOUT! %lu\n", (millis() - t)); |
| 630 | break; |
| 631 | } |
| 632 | |
| 633 | len = client->tcp->write((const uint8_t*)out, n); |
| 634 | if(len) { |
| 635 | t = millis(); |
| 636 | out += len; |
| 637 | n -= len; |
| 638 | total += len; |
| 639 | //DEBUG_WEBSOCKETS("write %d left %d!\n", len, n); |
| 640 | } else { |
| 641 | //DEBUG_WEBSOCKETS("write %d failed left %d!\n", len, n); |
| 642 | } |
| 643 | #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) |
| 644 | delay(0); |
| 645 | #endif |
| 646 | } |
| 647 | return total; |
| 648 | } |
| 649 | |
| 650 | size_t WebSockets::write(WSclient_t * client, const char *out) { |
| 651 | if(client == NULL) return 0; |
no outgoing calls
no test coverage detected