Merge branch 'collectd-5.8'
[collectd.git] / src / libcollectdclient / server.c
index 4a414bf..1095eba 100644 (file)
@@ -23,9 +23,7 @@
  *   Florian octo Forster <octo at collectd.org>
  **/
 
-#if HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 #if !defined(__GNUC__) || !__GNUC__
 #define __attribute__(x) /**/
 #include "collectd/network_parse.h" /* for lcc_network_parse_options_t */
 #include "collectd/server.h"
 
+// clang-format off
 #include <errno.h>
-#include <net/if.h>
-#include <netdb.h>
+#include <stdbool.h>
 #include <string.h>
+#include <unistd.h>
 #include <sys/socket.h>
 #include <sys/types.h>
-#include <unistd.h>
+#include <net/if.h>
+#include <netdb.h>
+#include <netinet/in.h>
+// clang-format on
 
 #include <stdio.h>
 #define DEBUG(...) printf(__VA_ARGS__)
 
-static _Bool is_multicast(struct addrinfo const *ai) {
+static bool is_multicast(struct addrinfo const *ai) {
   if (ai->ai_family == AF_INET) {
     struct sockaddr_in *addr = (struct sockaddr_in *)ai->ai_addr;
     return IN_MULTICAST(ntohl(addr->sin_addr.s_addr));
@@ -83,7 +85,7 @@ static int server_multicast_join(lcc_listener_t *srv,
     };
 #else
     struct ip_mreq mreq = {
-        .imr_address.s_addr = INADDR_ANY, .imr_multiaddr.s_addr = sa->s_addr,
+        .imr_multiaddr.s_addr = sa->sin_addr.s_addr,
     };
 #endif
     status = setsockopt(srv->conn, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq,
@@ -108,7 +110,7 @@ static int server_multicast_join(lcc_listener_t *srv,
     };
     memmove(&mreq6.ipv6mr_multiaddr, &sa->sin6_addr, sizeof(struct in6_addr));
 
-    status = setsockopt(srv->conn, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &mreq6,
+    status = setsockopt(srv->conn, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq6,
                         sizeof(mreq6));
     if (status == -1)
       return errno;
@@ -176,7 +178,7 @@ static int server_open(lcc_listener_t *srv) {
 }
 
 int lcc_listen_and_write(lcc_listener_t srv) {
-  _Bool close_socket = 0;
+  bool close_socket = 0;
 
   if (srv.conn < 0) {
     int status = server_open(&srv);
@@ -186,8 +188,10 @@ int lcc_listen_and_write(lcc_listener_t srv) {
   }
 
   if (srv.buffer_size == 0)
-    /* TODO(octo): this should be a define. */
-    srv.buffer_size = 1452;
+    srv.buffer_size = LCC_NETWORK_BUFFER_SIZE;
+
+  if (srv.parser == NULL)
+    srv.parser = lcc_network_parse;
 
   int ret = 0;
   while (42) {
@@ -200,13 +204,7 @@ int lcc_listen_and_write(lcc_listener_t srv) {
       break;
     }
 
-    /* TODO(octo): implement parse(). */
-    (void)lcc_network_parse(buffer, (size_t)len,
-                            (lcc_network_parse_options_t){
-                                .writer = srv.writer,
-                                .password_lookup = srv.password_lookup,
-                                .security_level = srv.security_level,
-                            });
+    (void)srv.parser(buffer, (size_t)len, srv.parse_options);
   }
 
   if (close_socket) {