Merge pull request #3329 from efuss/fix-3311
[collectd.git] / src / curl.c
index 5c30ab7..7eb4805 100644 (file)
 
 #include "collectd.h"
 
-#include "common.h"
 #include "plugin.h"
-#include "utils_curl_stats.h"
-#include "utils_match.h"
+#include "utils/common/common.h"
+#include "utils/curl_stats/curl_stats.h"
+#include "utils/match/match.h"
 #include "utils_time.h"
 
 #include <curl/curl.h>
@@ -400,8 +400,6 @@ static int cc_config_add_page(oconfig_item_t *ci) /* {{{ */
   cdtime_t interval = 0;
   web_page_t *page;
   int status;
-  char *af = NULL;
-  curl_version_info_data *curl_info = curl_version_info(CURLVERSION_NOW);
 
   if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) {
     WARNING("curl plugin: `Page' blocks need exactly one string argument.");
@@ -443,16 +441,31 @@ static int cc_config_add_page(oconfig_item_t *ci) /* {{{ */
     else if (strcasecmp("URL", child->key) == 0)
       status = cf_util_get_string(child, &page->url);
     else if (strcasecmp("AddressFamily", child->key) == 0) {
+      char *af = NULL;
       status = cf_util_get_string(child, &af);
       if (status != 0 || af == NULL) {
+        WARNING("curl plugin: Cannot parse value of `%s' "
+                "for instance `%s'.",
+                child->key, page->instance);
+      } else if (strcasecmp("any", af) == 0) {
         page->address_family = CURL_IPRESOLVE_WHATEVER;
-      } else if (strcasecmp("inet4", af) == 0 || strcasecmp("ipv4", af) == 0) {
+      } else if (strcasecmp("ipv4", af) == 0) {
         page->address_family = CURL_IPRESOLVE_V4;
-      } else if (strcasecmp("inet6", af) == 0 || strcasecmp("ipv6", af) == 0) {
+      } else if (strcasecmp("ipv6", af) == 0) {
+        /* If curl supports ipv6, use it. If not, log a warning and
+         * fall back to default - don't set status to non-zero.
+         */
+        curl_version_info_data *curl_info = curl_version_info(CURLVERSION_NOW);
         if (curl_info->features & CURL_VERSION_IPV6)
           page->address_family = CURL_IPRESOLVE_V6;
         else
-          WARNING("curl plugin: IPv6 not supported by this libCURL.");
+          WARNING("curl plugin: IPv6 not supported by this libCURL. "
+                  "Using fallback `any'.");
+      } else {
+        WARNING("curl plugin: Unsupported value of `%s' "
+                "for instance `%s'.",
+                child->key, page->instance);
+        status = -1;
       }
     } else if (strcasecmp("User", child->key) == 0)
       status = cf_util_get_string(child, &page->user);
@@ -528,7 +541,8 @@ static int cc_config_add_page(oconfig_item_t *ci) /* {{{ */
   plugin_register_complex_read(/* group = */ NULL, cb_name, cc_read_page,
                                interval,
                                &(user_data_t){
-                                   .data = page, .free_func = cc_web_page_free,
+                                   .data = page,
+                                   .free_func = cc_web_page_free,
                                });
   sfree(cb_name);