diff options
Diffstat (limited to 'src/descrtags.c')
-rw-r--r-- | src/descrtags.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/descrtags.c b/src/descrtags.c new file mode 100644 index 0000000..2fc44ef --- /dev/null +++ b/src/descrtags.c @@ -0,0 +1,81 @@ +/* This file is part of Eclat. + Copyright (C) 2012 Sergey Poznyakoff. + + Eclat 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; either version 3, or (at your option) + any later version. + + Eclat 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. + + You should have received a copy of the GNU General Public License + along with Eclat. If not, see <http://www.gnu.org/licenses/>. */ + +#include "eclat.h" + +int +eclat_describe_tags(CURL *curl, int argc, char **argv) +{ + int i, j, k; + struct ec2_query *q; + char *url; + char *bufptr = NULL; + size_t bufsize = 0; + size_t bs; + CURLcode res; + struct wordsplit ws; + int wsflags; + + q = eclat_query_create(use_ssl ? EC2_QF_HTTPS : 0, endpoint, "/"); + eclat_query_add_param(q, "Action", "DescribeTags"); + + ws.ws_delim = ","; + wsflags = WRDSF_DEFFLAGS | WRDSF_DELIM; + for (i = 0, j = 1; i < argc; i++) { + char *p = strchr(argv[i], '='); + if (!p) + die(EX_USAGE, "maformed filter: %s", argv[i]); + *p++ = 0; + grecs_asprintf(&bufptr, &bufsize, "Filter.%d.Name", j); + eclat_query_add_param(q, bufptr, argv[i]); + + if (wordsplit(p, &ws, wsflags)) + die(EX_SOFTWARE, "wordsplit failed at \"%s\": %s", + p, wordsplit_strerror(&ws)); + wsflags |= WRDSF_REUSE; + + for (k = 0; k < ws.ws_wordc; k++) { + grecs_asprintf(&bufptr, &bufsize, "Filter.%d.Value.%d", + j, k+1); + eclat_query_add_param(q, bufptr, ws.ws_wordv[k]); + } + } + if (wsflags & WRDSF_REUSE) + wordsplit_free(&ws); + free(bufptr); + + eclat_query_add_param(q, "AWSAccessKeyId", access_key); + + eclat_query_signature(q, secret_key); + url = eclat_query_to_url(q, NULL); + + debug(ECLAT_DEBCAT_MAIN, 1, ("using URL: %s", url)); + curl_easy_setopt(curl, CURLOPT_URL, url); + + free(url); + eclat_query_free(q); + + if (dry_run_mode) + debug(ECLAT_DEBCAT_MAIN, 1, ("not sending request")); + else { + res = curl_easy_perform(curl); + + if (res != CURLE_OK) + err("CURL: %s", curl_easy_strerror(res)); + } + + return 0; +} |