diff --git a/include/udp_logging.h b/include/udp_logging.h index c87c52c..401b568 100644 --- a/include/udp_logging.h +++ b/include/udp_logging.h @@ -28,7 +28,7 @@ extern int udp_log_fd; int udp_logging_init(const char *node, const char *service, vprintf_like_t func); int udp_logging_vprintf( const char *str, va_list l ); -void udp_logging_free(va_list l); +void udp_logging_free(); #ifdef __cplusplus } diff --git a/udp_logging.c b/udp_logging.c index 70ded1f..6679ede 100644 --- a/udp_logging.c +++ b/udp_logging.c @@ -26,7 +26,7 @@ #include "lwip/dns.h" #include "freertos/task.h" static const char *TAG = "udp_logging"; -int udp_log_fd; +int udp_log_fd = 0; static struct sockaddr serveraddr; static struct addrinfo hints; static uint8_t buf[UDP_LOGGING_MAX_PAYLOAD_LEN]; @@ -46,36 +46,28 @@ int get_socket_error_code(int socket) int show_socket_error_reason(int socket) { int err = get_socket_error_code(socket); - printf("UDP socket error %d %s", err, strerror(err)); + printf("UDP socket error %d %s\n", err, strerror(err)); return err; } -void udp_logging_free(va_list l) +void udp_logging_free() { if (udp_log_fd != 0) { int err = 0; char *err_buf; esp_log_set_vprintf(vprintf); - if ((err = shutdown(udp_log_fd, 2)) == 0) - { - vprintf("\nUDP socket shutdown!", l); - } - else - { - asprintf(&err_buf, "\nShutting-down UDP socket failed: %d!\n", err); - vprintf(err_buf, l); - } if ((err = close(udp_log_fd)) == 0) { - vprintf("\nUDP socket closed!", l); + printf("\nUDP socket closed!"); } else { asprintf(&err_buf, "\n Closing UDP socket failed: %d!\n", err); - vprintf(err_buf, l); + printf(err_buf); } + shutdown(udp_log_fd, 2); udp_log_fd = 0; } } @@ -94,9 +86,9 @@ int udp_logging_vprintf(const char *str, va_list l) if ((err = sendto(udp_log_fd, buf, len, 0, (struct sockaddr *)&serveraddr, sizeof(serveraddr))) < 0) { show_socket_error_reason(udp_log_fd); - vprintf("\nFreeing UDP Logging. sendto failed!\n", l); - udp_logging_free(l); - return vprintf("UDP Logging freed!\n\n", l); + printf("\nSend failed!\n"); + udp_logging_free(); + return printf("UDP Logging freed!\n"); } } return vprintf(str, l); @@ -105,7 +97,7 @@ int udp_logging_vprintf(const char *str, va_list l) int udp_logging_init(const char *node, const char *service, vprintf_like_t func) { struct timeval send_timeout = {1, 0}; - udp_log_fd = 0; + udp_logging_free(); ESP_LOGI(TAG, "initializing udp logging..."); memset(&hints, 0, sizeof(hints)); @@ -117,6 +109,7 @@ int udp_logging_init(const char *node, const char *service, vprintf_like_t func) if (rc != 0) { ESP_LOGI(TAG, "Host not found! (%s)", node); + return -1; } memcpy(&serveraddr, res->ai_addr, sizeof(serveraddr)); family = res->ai_addr->sa_family; @@ -127,7 +120,7 @@ int udp_logging_init(const char *node, const char *service, vprintf_like_t func) return -1; } - ESP_LOGI(TAG, "Logging to %s", node); + ESP_LOGI(TAG, "Logging to %s:%s", node, service); int err = setsockopt(udp_log_fd, SOL_SOCKET, SO_SNDTIMEO, (const char *)&send_timeout, sizeof(send_timeout)); if (err < 0) @@ -136,6 +129,6 @@ int udp_logging_init(const char *node, const char *service, vprintf_like_t func) } esp_log_set_vprintf(func); - + return 0; }