/**
* libcollectdclient - src/libcollectdclient/client.c
- * Copyright (C) 2008 Florian octo Forster
+ * Copyright (C) 2008-2012 Florian octo Forster
*
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; only version 2 of the License is applicable.
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
*
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
*
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
*
* Authors:
- * Florian octo Forster <octo at verplant.org>
+ * Florian octo Forster <octo at collectd.org>
**/
#if HAVE_CONFIG_H
# define __attribute__(x) /**/
#endif
-#include "lcc_features.h"
+#include "collectd/lcc_features.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <netdb.h>
-#include "client.h"
+#include "collectd/client.h"
/* NI_MAXHOST has been obsoleted by RFC 3493 which is a reason for SunOS 5.11
* to no longer define it. We'll use the old, RFC 2553 value here. */
}
} /* }}} void lcc_chomp */
-static int lcc_identifier_cmp (const void *a, const void *b)
-{
- const lcc_identifier_t *ident_a, *ident_b;
-
- int status;
-
- ident_a = a;
- ident_b = b;
-
- status = strcasecmp (ident_a->host, ident_b->host);
- if (status != 0)
- return (status);
-
- status = strcmp (ident_a->plugin, ident_b->plugin);
- if (status != 0)
- return (status);
-
- if ((*ident_a->plugin_instance != '\0') || (*ident_b->plugin_instance != '\0'))
- {
- if (*ident_a->plugin_instance == '\0')
- return (-1);
- else if (*ident_b->plugin_instance == '\0')
- return (1);
-
- status = strcmp (ident_a->plugin_instance, ident_b->plugin_instance);
- if (status != 0)
- return (status);
- }
-
- status = strcmp (ident_a->type, ident_b->type);
- if (status != 0)
- return (status);
-
- if ((*ident_a->type_instance != '\0') || (*ident_b->type_instance != '\0'))
- {
- if (*ident_a->type_instance == '\0')
- return (-1);
- else if (*ident_b->type_instance == '\0')
- return (1);
-
- status = strcmp (ident_a->type_instance, ident_b->type_instance);
- if (status != 0)
- return (status);
- }
- return (0);
-} /* }}} int lcc_identifier_cmp */
-
static void lcc_response_free (lcc_response_t *res) /* {{{ */
{
size_t i;
lcc_set_errno (c, errno);
return (-1);
}
+ fflush(c->fh);
return (0);
} /* }}} int lcc_send */
if (fd < 0)
{
status = errno;
- fd = -1;
continue;
}
{
status = errno;
close (fd);
- fd = -1;
continue;
}
{
status = errno;
close (fd);
- fd = -1;
continue;
}
if (status != 0)
{
lcc_set_errno (c, status);
+ freeaddrinfo (ai_res);
return (-1);
}
+ freeaddrinfo (ai_res);
return (0);
} /* }}} int lcc_open_netsocket */
SSTRCATF (command, "PUTVAL %s",
lcc_strescape (ident_esc, ident_str, sizeof (ident_esc)));
- if (vl->interval > 0)
- SSTRCATF (command, " interval=%i", vl->interval);
+ if (vl->interval > 0.0)
+ SSTRCATF (command, " interval=%.3f", vl->interval);
- if (vl->time > 0)
- SSTRCATF (command, " %u", (unsigned int) vl->time);
+ if (vl->time > 0.0)
+ SSTRCATF (command, " %.3f", vl->time);
else
SSTRCAT (command, " N");
return (0);
} /* }}} int lcc_string_to_identifier */
+int lcc_identifier_compare (const lcc_identifier_t *i0, /* {{{ */
+ const lcc_identifier_t *i1)
+{
+ int status;
+
+ if ((i0 == NULL) && (i1 == NULL))
+ return (0);
+ else if (i0 == NULL)
+ return (-1);
+ else if (i1 == NULL)
+ return (1);
+
+#define CMP_FIELD(f) do { \
+ status = strcmp (i0->f, i1->f); \
+ if (status != 0) \
+ return (status); \
+} while (0);
+
+ CMP_FIELD (host);
+ CMP_FIELD (plugin);
+ CMP_FIELD (plugin_instance);
+ CMP_FIELD (type);
+ CMP_FIELD (type_instance);
+
+#undef CMP_FIELD
+
+ return (0);
+} /* }}} int lcc_identifier_compare */
+
int lcc_sort_identifiers (lcc_connection_t *c, /* {{{ */
lcc_identifier_t *idents, size_t idents_num)
{
return (-1);
}
- qsort (idents, idents_num, sizeof (*idents), lcc_identifier_cmp);
+ qsort (idents, idents_num, sizeof (*idents),
+ (void *) lcc_identifier_compare);
return (0);
} /* }}} int lcc_sort_identifiers */