X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fwrite_http.c;h=779c94f659722811e240eccac0035e5c67e0ec51;hb=c89182b424bb4184bd7da3f2ab687b542ed7eea3;hp=ec3a01ce228aeb7798a611333b90fdb9d2b4630d;hpb=82c9b0daf5ff90d01f4a4371f11727cd613e4b01;p=collectd.git diff --git a/src/write_http.c b/src/write_http.c index ec3a01ce..779c94f6 100644 --- a/src/write_http.c +++ b/src/write_http.c @@ -29,10 +29,6 @@ #include "utils_cache.h" #include "utils_format_json.h" -#if HAVE_PTHREAD_H -# include -#endif - #include #ifndef WRITE_HTTP_DEFAULT_BUFFER_SIZE @@ -156,7 +152,6 @@ static int wh_callback_init (wh_callback_t *cb) /* {{{ */ curl_easy_setopt (cb->curl, CURLOPT_NOSIGNAL, 1L); curl_easy_setopt (cb->curl, CURLOPT_USERAGENT, COLLECTD_USERAGENT); - cb->headers = NULL; cb->headers = curl_slist_append (cb->headers, "Accept: */*"); if (cb->format == WH_FORMAT_JSON) cb->headers = curl_slist_append (cb->headers, "Content-Type: application/json"); @@ -183,7 +178,7 @@ static int wh_callback_init (wh_callback_t *cb) /* {{{ */ if (cb->pass != NULL) credentials_size += strlen (cb->pass); - cb->credentials = (char *) malloc (credentials_size); + cb->credentials = malloc (credentials_size); if (cb->credentials == NULL) { ERROR ("curl plugin: malloc failed."); @@ -241,7 +236,7 @@ static int wh_flush_nolock (cdtime_t timeout, wh_callback_t *cb) /* {{{ */ if (cb->format == WH_FORMAT_COMMAND) { - if (cb->send_buffer_fill <= 0) + if (cb->send_buffer_fill == 0) { cb->send_buffer_init_time = cdtime (); return (0); @@ -540,6 +535,25 @@ static int config_set_format (wh_callback_t *cb, /* {{{ */ return (0); } /* }}} int config_set_format */ +static int wh_config_append_string (const char *name, struct curl_slist **dest, /* {{{ */ + oconfig_item_t *ci) +{ + struct curl_slist *temp = NULL; + if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) + { + WARNING ("write_http plugin: `%s' needs exactly one string argument.", name); + return (-1); + } + + temp = curl_slist_append(*dest, ci->values[0].value.string); + if (temp == NULL) + return (-1); + + *dest = temp; + + return (0); +} /* }}} int wh_config_append_string */ + static int wh_config_node (oconfig_item_t *ci) /* {{{ */ { wh_callback_t *cb; @@ -549,13 +563,12 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ int status = 0; int i; - cb = malloc (sizeof (*cb)); + cb = calloc (1, sizeof (*cb)); if (cb == NULL) { - ERROR ("write_http plugin: malloc failed."); + ERROR ("write_http plugin: calloc failed."); return (-1); } - memset (cb, 0, sizeof (*cb)); cb->verify_peer = 1; cb->verify_host = 1; cb->format = WH_FORMAT_COMMAND; @@ -643,6 +656,8 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ status = cf_util_get_int (child, &cb->timeout); else if (strcasecmp ("LogHttpError", child->key) == 0) status = cf_util_get_boolean (child, &cb->log_http_error); + else if (strcasecmp ("Header", child->key) == 0) + status = wh_config_append_string ("Header", &cb->headers, child); else { ERROR ("write_http plugin: Invalid configuration "