Fix compilation on OpenBSD
[collectd.git] / src / libcollectdclient / server.c
index 4a414bf..0e6d777 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/server.h"
 
 #include <errno.h>
-#include <net/if.h>
-#include <netdb.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>
 
 #include <stdio.h>
 #define DEBUG(...) printf(__VA_ARGS__)
@@ -83,7 +82,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 +107,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;
@@ -186,8 +185,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 +201,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) {