diff options
Diffstat (limited to 'main/cvm_server.c')
| -rw-r--r-- | main/cvm_server.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/main/cvm_server.c b/main/cvm_server.c index cf052df..dd04047 100644 --- a/main/cvm_server.c +++ b/main/cvm_server.c | |||
| @@ -100,9 +100,24 @@ static int ws_send_text(esp_tls_t *tls, const char *msg) | |||
| 100 | frame[pos + i] = (uint8_t)msg[i] ^ mask[i & 3]; | 100 | frame[pos + i] = (uint8_t)msg[i] ^ mask[i & 3]; |
| 101 | pos += len; | 101 | pos += len; |
| 102 | 102 | ||
| 103 | int w = esp_tls_conn_write(tls, frame, pos); | 103 | int total = pos; |
| 104 | int written = 0; | ||
| 105 | while (written < total) { | ||
| 106 | int w = esp_tls_conn_write(tls, frame + written, total - written); | ||
| 107 | if (w < 0) { | ||
| 108 | ESP_LOGE(TAG, "ws_send: write failed at %d/%d", written, total); | ||
| 109 | free(frame); | ||
| 110 | return -1; | ||
| 111 | } | ||
| 112 | if (w == 0) { | ||
| 113 | ESP_LOGW(TAG, "ws_send: write returned 0 at %d/%d", written, total); | ||
| 114 | vTaskDelay(pdMS_TO_TICKS(1)); | ||
| 115 | } | ||
| 116 | written += w; | ||
| 117 | } | ||
| 118 | ESP_LOGD(TAG, "ws_send: sent %d bytes (payload %d)", total, (int)len); | ||
| 104 | free(frame); | 119 | free(frame); |
| 105 | return w > 0 ? 0 : -1; | 120 | return 0; |
| 106 | } | 121 | } |
| 107 | 122 | ||
| 108 | static esp_err_t ws_connect(const char *relay_url, esp_tls_t **tls_out) | 123 | static esp_err_t ws_connect(const char *relay_url, esp_tls_t **tls_out) |
| @@ -292,7 +307,7 @@ static esp_err_t publish_event_to_relay(const char *relay_url, const char *event | |||
| 292 | 307 | ||
| 293 | char *msg; | 308 | char *msg; |
| 294 | size_t event_len2 = strlen(event_json); | 309 | size_t event_len2 = strlen(event_json); |
| 295 | size_t msg_len2 = 8 + event_len2 + 1; | 310 | size_t msg_len2 = 10 + event_len2 + 2; |
| 296 | msg = malloc(msg_len2); | 311 | msg = malloc(msg_len2); |
| 297 | snprintf(msg, msg_len2, "[\"EVENT\",%s]", event_json); | 312 | snprintf(msg, msg_len2, "[\"EVENT\",%s]", event_json); |
| 298 | 313 | ||
| @@ -591,7 +606,7 @@ static esp_err_t publish_event_via_ws(esp_tls_t *tls, int kind, | |||
| 591 | 606 | ||
| 592 | char *msg; | 607 | char *msg; |
| 593 | size_t event_len = strlen(event_json); | 608 | size_t event_len = strlen(event_json); |
| 594 | size_t msg_len = 8 + event_len + 1; | 609 | size_t msg_len = 10 + event_len + 2; |
| 595 | msg = malloc(msg_len); | 610 | msg = malloc(msg_len); |
| 596 | snprintf(msg, msg_len, "[\"EVENT\",%s]", event_json); | 611 | snprintf(msg, msg_len, "[\"EVENT\",%s]", event_json); |
| 597 | 612 | ||