From 531862a0f982c70da9c62f7bca55b44deda4679e Mon Sep 17 00:00:00 2001 From: allnighter Date: Wed, 21 Feb 2024 18:08:18 +0900 Subject: [PATCH] update LwFTP print received data --- LWFTPC/lwftpc.c | 33 ++++++++++++++++++++++++++++++--- LWFTPC/lwftpc.h | 2 +- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/LWFTPC/lwftpc.c b/LWFTPC/lwftpc.c index e0c2357..8ec1eb6 100644 --- a/LWFTPC/lwftpc.c +++ b/LWFTPC/lwftpc.c @@ -116,7 +116,8 @@ err_t lwftp_list(lwftp_session_t *s) { void onDataReceived(void *data, size_t size) { osDelay(1000); - printf("%s\r\n", (char*) data); +// printf("%s\r\n", (char*) data); + printf("Received data (%zu bytes): %.*s\n", size, (int)size, (char*)data); } //void lwftp_data_thread(void *arg) { @@ -143,7 +144,9 @@ void onDataReceived(void *data, size_t size) { void lwftp_data_thread(void *arg) { lwftp_session_t *s = (lwftp_session_t*) arg; - static struct netbuf *d_buf; + static struct netbuf *d_buf; + static char *aggregated_data = NULL; + static size_t total_len = 0; while (1) { if (s->data_conn != NULL && s->data_state == LWFTP_CONNECTED) { @@ -153,9 +156,33 @@ void lwftp_data_thread(void *arg) { u16_t len; do { netbuf_data(d_buf, &data, &len); - onDataReceived(data, len); + if (aggregated_data == NULL) { + aggregated_data = (char*) malloc(len); + if (!aggregated_data) { + break; + } + memcpy(aggregated_data, data, len); + total_len = len; + } else { + char *new_data = (char*) realloc(aggregated_data, total_len + len); + if (!new_data) { + free(aggregated_data); + aggregated_data = NULL; + break; + } + aggregated_data = new_data; + memcpy(aggregated_data + total_len, data, len); + total_len += len; + } } while (netbuf_next(d_buf) >= 0); netbuf_delete(d_buf); + + if (aggregated_data != NULL) { +// onDataReceived(aggregated_data, total_len); + free(aggregated_data); + aggregated_data = NULL; + total_len = 0; + } } else { } } else { diff --git a/LWFTPC/lwftpc.h b/LWFTPC/lwftpc.h index 23c18fe..4035fc4 100644 --- a/LWFTPC/lwftpc.h +++ b/LWFTPC/lwftpc.h @@ -80,7 +80,7 @@ void lwftp_ctrl_thread(void *arg); /** for callback*/ typedef void (*lwftp_transfer_callback)(err_t result, void *context); -void onDataReceived(void* data, size_t size); +void onDataReceived(void *data, size_t size); err_t lwftp_store(lwftp_session_t *s, const char *filename, const char *data); err_t lwftp_retrieve(lwftp_session_t *s, const char *filename); err_t lwftp_list(lwftp_session_t *s);