int main (int argc, char **argv) { char address[1024] = "unix:"DEFAULT_SOCK; lcc_connection_t *c; int status; while (42) { int c; c = getopt (argc, argv, "s:h"); if (c == -1) break; switch (c) { case 's': snprintf (address, sizeof (address), "unix:%s", optarg); address[sizeof (address) - 1] = '\0'; break; case 'h': exit_usage (argv[0], 0); break; default: exit_usage (argv[0], 1); } } if (optind >= argc) { fprintf (stderr, "%s: missing command\n", argv[0]); exit_usage (argv[0], 1); } c = NULL; status = lcc_connect (address, &c); if (status != 0) { fprintf (stderr, "ERROR: Failed to connect to daemon at %s: %s.\n", address, strerror (errno)); return (1); } if (strcasecmp (argv[optind], "getval") == 0) status = getval (c, argc - optind, argv + optind); else if (strcasecmp (argv[optind], "flush") == 0) status = flush (c, argc - optind, argv + optind); else if (strcasecmp (argv[optind], "listval") == 0) status = listval (c, argc - optind, argv + optind); else if (strcasecmp (argv[optind], "putval") == 0) status = putval (c, argc - optind, argv + optind); else { fprintf (stderr, "%s: invalid command: %s\n", argv[0], argv[optind]); return (1); } LCC_DESTROY (c); if (status != 0) return (status); return (0); } /* main */
static int flush ( const char *address, const char *plugin, const char *ident_str, int timeout) { lcc_connection_t *connection; lcc_identifier_t ident; /* Pointer which is passed to lcc_flush. * Either a null pointer or it points to ident */ lcc_identifier_t *identp; int status; connection = NULL; status = lcc_connect(address, &connection); if (status != 0) { fprintf (stderr, "ERROR: Connecting to daemon at %s failed: %s.\n", address, strerror (errno)); return 1; } identp = NULL; if (ident_str != NULL && *ident_str != '\0') { status = lcc_string_to_identifier (connection, &ident, ident_str); if (status != 0) { fprintf (stderr, "ERROR: Creating and identifier failed: %s.\n", lcc_strerror(connection)); LCC_DESTROY (connection); return 1; } identp = &ident; } status = lcc_flush (connection, plugin, identp, timeout); if (status != 0) { fprintf (stderr, "ERROR: Flushing failed: %s.\n", lcc_strerror (connection)); LCC_DESTROY (connection); return 1; } LCC_DESTROY (connection); return 0; }
/** Connect to a collectd server for stats output * * @param[in,out] conf radsniff configuration, we write the generated handle here. * @return 0 on success -1 on failure. */ int rs_stats_collectd_open(rs_t *conf) { assert(conf->stats.collectd); /* * Tear down stale connections gracefully. */ rs_stats_collectd_close(conf); /* * There's no way to get the error from the connection handle * because it's freed on failure, before lcc returns. */ if (lcc_connect(conf->stats.collectd, &conf->stats.handle) < 0) { ERROR("Failed opening connection to collectd: %s", fr_syserror(errno)); return -1; } DEBUG2("Connected to \"%s\"", conf->stats.collectd); assert(conf->stats.handle); return 0; }
int main (int argc, char **argv) { char address[1024]; lcc_connection_t *connection; int status; range_critical_g.min = NAN; range_critical_g.max = NAN; range_critical_g.invert = 0; range_warning_g.min = NAN; range_warning_g.max = NAN; range_warning_g.invert = 0; while (42) { int c; c = getopt (argc, argv, "w:c:s:n:H:g:d:hm"); if (c < 0) break; switch (c) { case 'c': parse_range (optarg, &range_critical_g); break; case 'w': parse_range (optarg, &range_warning_g); break; case 's': socket_file_g = optarg; break; case 'n': value_string_g = optarg; break; case 'H': hostname_g = optarg; break; case 'g': if (strcasecmp (optarg, "none") == 0) consolitation_g = CON_NONE; else if (strcasecmp (optarg, "average") == 0) consolitation_g = CON_AVERAGE; else if (strcasecmp (optarg, "sum") == 0) consolitation_g = CON_SUM; else if (strcasecmp (optarg, "percentage") == 0) consolitation_g = CON_PERCENTAGE; else { fprintf (stderr, "Unknown consolidation function `%s'.\n", optarg); usage (argv[0]); } break; case 'd': { char **tmp; tmp = (char **) realloc (match_ds_g, (match_ds_num_g + 1) * sizeof (char *)); if (tmp == NULL) { fprintf (stderr, "realloc failed: %s\n", strerror (errno)); return (RET_UNKNOWN); } match_ds_g = tmp; match_ds_g[match_ds_num_g] = cn_strdup (optarg); if (match_ds_g[match_ds_num_g] == NULL) { fprintf (stderr, "cn_strdup failed: %s\n", strerror (errno)); return (RET_UNKNOWN); } match_ds_num_g++; break; } case 'm': nan_is_error_g = 1; break; default: usage (argv[0]); } /* switch (c) */ } if ((socket_file_g == NULL) || (value_string_g == NULL) || ((hostname_g == NULL) && (strcasecmp (value_string_g, "LIST")))) { fprintf (stderr, "Missing required arguments.\n"); usage (argv[0]); } snprintf (address, sizeof (address), "unix:%s", socket_file_g); address[sizeof (address) - 1] = 0; connection = NULL; status = lcc_connect (address, &connection); if (status != 0) { printf ("ERROR: Connecting to daemon at %s failed.\n", socket_file_g); return (RET_CRITICAL); } if (0 == strcasecmp (value_string_g, "LIST")) return (do_listval (connection)); return (do_check (connection)); } /* int main */