#include <net/if.h>
#endif
+#ifdef WIN32
+#define AI_ADDRCONFIG 0
+#endif
+
#include "collectd/network.h"
#include "collectd/network_buffer.h"
static int server_close_socket(lcc_server_t *srv) /* {{{ */
{
if (srv == NULL)
- return (EINVAL);
+ return EINVAL;
if (srv->fd < 0)
- return (0);
+ return 0;
close(srv->fd);
srv->fd = -1;
srv->sa = NULL;
srv->sa_len = 0;
- return (0);
+ return 0;
} /* }}} int server_close_socket */
static void int_server_destroy(lcc_server_t *srv) /* {{{ */
int status;
if (srv == NULL)
- return (EINVAL);
+ return EINVAL;
if (srv->fd >= 0)
server_close_socket(srv);
status = getaddrinfo(srv->node, srv->service, &ai_hints, &ai_list);
if (status != 0)
- return (status);
+ return status;
assert(ai_list != NULL);
for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL;
freeaddrinfo(ai_list);
if (srv->fd < 0)
- return (-1);
- return (0);
+ return -1;
+ return 0;
} /* }}} int server_open_socket */
static int server_send_buffer(lcc_server_t *srv) /* {{{ */
if (srv->fd < 0) {
status = server_open_socket(srv);
if (status != 0)
- return (status);
+ return status;
}
buffer_size = sizeof(buffer);
status = lcc_network_buffer_finalize(srv->buffer);
if (status != 0) {
lcc_network_buffer_initialize(srv->buffer);
- return (status);
+ return status;
}
status = lcc_network_buffer_get(srv->buffer, buffer, &buffer_size);
lcc_network_buffer_initialize(srv->buffer);
if (status != 0)
- return (status);
+ return status;
if (buffer_size > sizeof(buffer))
buffer_size = sizeof(buffer);
}
if (status < 0)
- return (status);
- return (0);
+ return status;
+ return 0;
} /* }}} int server_send_buffer */
static int server_value_add(lcc_server_t *srv, /* {{{ */
status = lcc_network_buffer_add_value(srv->buffer, vl);
if (status == 0)
- return (0);
+ return 0;
server_send_buffer(srv);
- return (lcc_network_buffer_add_value(srv->buffer, vl));
+ return lcc_network_buffer_add_value(srv->buffer, vl);
} /* }}} int server_value_add */
/*
net = calloc(1, sizeof(*net));
if (net == NULL)
- return (NULL);
+ return NULL;
net->servers = NULL;
- return (net);
+ return net;
} /* }}} lcc_network_t *lcc_network_create */
void lcc_network_destroy(lcc_network_t *net) /* {{{ */
lcc_server_t *srv;
if ((net == NULL) || (node == NULL))
- return (NULL);
+ return NULL;
if (service == NULL)
service = NET_DEFAULT_PORT;
srv = calloc(1, sizeof(*srv));
if (srv == NULL)
- return (NULL);
+ return NULL;
srv->fd = -1;
srv->security_level = NONE;
srv->node = strdup(node);
if (srv->node == NULL) {
free(srv);
- return (NULL);
+ return NULL;
}
srv->service = strdup(service);
if (srv->service == NULL) {
free(srv->node);
free(srv);
- return (NULL);
+ return NULL;
}
srv->buffer = lcc_network_buffer_create(/* size = */ 0);
free(srv->service);
free(srv->node);
free(srv);
- return (NULL);
+ return NULL;
}
if (net->servers == NULL) {
last->next = srv;
}
- return (srv);
+ return srv;
} /* }}} lcc_server_t *lcc_server_create */
int lcc_server_destroy(lcc_network_t *net, lcc_server_t *srv) /* {{{ */
{
if ((net == NULL) || (srv == NULL))
- return (EINVAL);
+ return EINVAL;
if (net->servers == srv) {
net->servers = srv->next;
prev = prev->next;
if (prev == NULL)
- return (ENOENT);
+ return ENOENT;
prev->next = srv->next;
srv->next = NULL;
int_server_destroy(srv);
- return (0);
+ return 0;
} /* }}} int lcc_server_destroy */
int lcc_server_set_ttl(lcc_server_t *srv, uint8_t ttl) /* {{{ */
{
if (srv == NULL)
- return (EINVAL);
+ return EINVAL;
srv->ttl = (int)ttl;
- return (0);
+ return 0;
} /* }}} int lcc_server_set_ttl */
-int lcc_server_set_interface(lcc_server_t *srv, char const *interface) /* {{{ */
+int lcc_server_set_interface(lcc_server_t *srv, char const *iface) /* {{{ */
{
unsigned int if_index;
int status;
- if ((srv == NULL) || (interface == NULL))
- return (EINVAL);
+ if ((srv == NULL) || (iface == NULL))
+ return EINVAL;
- if_index = if_nametoindex(interface);
+ if_index = if_nametoindex(iface);
if (if_index == 0)
- return (ENOENT);
+ return ENOENT;
/* IPv4 multicast */
if (srv->sa->sa_family == AF_INET) {
status =
setsockopt(srv->fd, IPPROTO_IP, IP_MULTICAST_IF, &mreq, sizeof(mreq));
if (status != 0)
- return (status);
+ return status;
- return (0);
+ return 0;
}
}
status = setsockopt(srv->fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, &if_index,
sizeof(if_index));
if (status != 0)
- return (status);
+ return status;
- return (0);
+ return 0;
}
}
/* else: Not a multicast interface. */
#if defined(SO_BINDTODEVICE)
- status = setsockopt(srv->fd, SOL_SOCKET, SO_BINDTODEVICE, interface,
- (socklen_t)(strlen(interface) + 1));
+ status = setsockopt(srv->fd, SOL_SOCKET, SO_BINDTODEVICE, iface,
+ (socklen_t)(strlen(iface) + 1));
if (status != 0)
- return (-1);
+ return -1;
#endif
- return (0);
+ return 0;
} /* }}} int lcc_server_set_interface */
int lcc_server_set_security_level(lcc_server_t *srv, /* {{{ */
lcc_security_level_t level,
const char *username, const char *password) {
- return (lcc_network_buffer_set_security_level(srv->buffer, level, username,
- password));
+ return lcc_network_buffer_set_security_level(srv->buffer, level, username,
+ password);
} /* }}} int lcc_server_set_security_level */
int lcc_network_values_send(lcc_network_t *net, /* {{{ */
const lcc_value_list_t *vl) {
if ((net == NULL) || (vl == NULL))
- return (EINVAL);
+ return EINVAL;
for (lcc_server_t *srv = net->servers; srv != NULL; srv = srv->next)
server_value_add(srv, vl);
- return (0);
+ return 0;
} /* }}} int lcc_network_values_send */