Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion include/udp_logging.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
33 changes: 13 additions & 20 deletions udp_logging.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand All @@ -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;
}
}
Expand All @@ -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);
Expand All @@ -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));
Expand All @@ -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;
Expand All @@ -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)
Expand All @@ -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;
}