From 94f0d80cc115ce93e88b64f8e3d0fa81e853f6d3 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 26 Oct 2019 20:05:19 +0200 Subject: turn teah_common.c into libtalercurl, fixes many ugly issues in build system --- configure.ac | 1 + src/Makefile.am | 2 +- src/bank-lib/Makefile.am | 4 +- src/curl/curl.c | 116 +++++++++++++++++++++++++++++++++++++++++++++++ src/lib/Makefile.am | 8 ++-- src/lib/teah_common.c | 116 ----------------------------------------------- 6 files changed, 124 insertions(+), 123 deletions(-) create mode 100644 src/curl/curl.c delete mode 100644 src/lib/teah_common.c diff --git a/configure.ac b/configure.ac index a40dfb6a1..44703bf1e 100644 --- a/configure.ac +++ b/configure.ac @@ -542,6 +542,7 @@ AC_CONFIG_FILES([Makefile src/auditor/Makefile src/auditordb/Makefile src/bank-lib/Makefile + src/curl/Makefile src/exchange/Makefile src/exchangedb/Makefile src/exchange-tools/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index 80fa40dbc..38bf715fe 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -22,7 +22,7 @@ pkgcfg_DATA = \ EXTRA_DIST = \ taler.conf -SUBDIRS = include util wire json $(PQ_DIR) $(BANK_LIB) wire-plugins exchangedb exchange exchange-tools auditordb auditor +SUBDIRS = include util wire json curl $(PQ_DIR) $(BANK_LIB) wire-plugins exchangedb exchange exchange-tools auditordb auditor if HAVE_LIBCURL SUBDIRS += lib benchmark else diff --git a/src/bank-lib/Makefile.am b/src/bank-lib/Makefile.am index 9ae27a447..1166964aa 100644 --- a/src/bank-lib/Makefile.am +++ b/src/bank-lib/Makefile.am @@ -41,10 +41,10 @@ libtalerbank_la_SOURCES = \ bank_api_common.c bank_api_common.h \ bank_api_history.c \ bank_api_reject.c \ - bank_api_parse.c \ - ../lib/teah_common.c # FIXME: ugly hack!! + bank_api_parse.c libtalerbank_la_LIBADD = \ $(top_builddir)/src/json/libtalerjson.la \ + $(top_builddir)/src/curl/libtalercurl.la \ -lgnunetcurl \ -lgnunetjson \ -lgnunetutil \ diff --git a/src/curl/curl.c b/src/curl/curl.c new file mode 100644 index 000000000..3e56c7536 --- /dev/null +++ b/src/curl/curl.c @@ -0,0 +1,116 @@ +/* + This file is part of TALER + Copyright (C) 2019 GNUnet e.V. + + TALER 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. + + TALER 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 TALER; see the file COPYING. If not, see + +*/ + +/** + * @file lib/teah_common.c + * @brief Helper routines shared by libtalerexchange and libtalerauditor + * @author Christian Grothoff + */ +#include "platform.h" +#include "taler_curl_lib.h" + +#if COMPRESS_BODIES +#include +#endif + + +/** + * Add the @a body as POST data to the easy handle in @a ctx. + * + * @param ctx[in,out] a request context (updated) + * @param eh easy handle to use + * @param body JSON body to add to @e ctx + * @return #GNUNET_OK on success #GNUNET_SYSERR on failure + */ +int +TALER_curl_easy_post (struct TEAH_PostContext *ctx, + CURL *eh, + const json_t *body) +{ + char *str; + size_t slen; + + str = json_dumps (body, + JSON_COMPACT); + if (NULL == str) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + slen = strlen (str); +#if COMPRESS_BODIES + { + Bytef *cbuf; + uLongf cbuf_size; + int ret; + + cbuf_size = compressBound (slen); + cbuf = GNUNET_malloc (cbuf_size); + ret = compress (cbuf, + &cbuf_size, + (const Bytef *) str, + slen); + if (Z_OK != ret) + { + /* compression failed!? */ + GNUNET_break (0); + GNUNET_free (cbuf); + return GNUNET_SYSERR; + } + free (str); + slen = (size_t) cbuf_size; + ctx->json_enc = (char *) cbuf; + } + GNUNET_assert + (NULL != (ctx->headers = curl_slist_append + (ctx->headers, + "Content-Encoding: deflate"))); +#else + ctx->json_enc = str; +#endif + + GNUNET_assert + (NULL != (ctx->headers = curl_slist_append + (ctx->headers, + "Content-Type: application/json"))); + + GNUNET_assert (CURLE_OK == + curl_easy_setopt (eh, + CURLOPT_POSTFIELDS, + ctx->json_enc)); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (eh, + CURLOPT_POSTFIELDSIZE, + slen)); + return GNUNET_OK; +} + + +/** + * Free the data in @a ctx. + * + * @param ctx[in] a request context (updated) + */ +void +TALER_curl_easy_post_finished (struct TEAH_PostContext *ctx) +{ + curl_slist_free_all (ctx->headers); + ctx->headers = NULL; + GNUNET_free_non_null (ctx->json_enc); +} diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index fddc961f5..f5251524e 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -27,11 +27,11 @@ libtalerexchange_la_SOURCES = \ exchange_api_reserve.c \ exchange_api_track_transaction.c \ exchange_api_track_transfer.c \ - exchange_api_wire.c \ - teah_common.c + exchange_api_wire.c libtalerexchange_la_LIBADD = \ libtalerauditor.la \ $(top_builddir)/src/json/libtalerjson.la \ + $(top_builddir)/src/curl/libtalercurl.la \ $(top_builddir)/src/util/libtalerutil.la \ -lgnunetcurl \ -lgnunetjson \ @@ -47,9 +47,9 @@ libtalerauditor_la_SOURCES = \ auditor_api_curl_defaults.c auditor_api_curl_defaults.h \ auditor_api_handle.c auditor_api_handle.h \ auditor_api_deposit_confirmation.c \ - auditor_api_exchanges.c \ - teah_common.c + auditor_api_exchanges.c libtalerauditor_la_LIBADD = \ + $(top_builddir)/src/curl/libtalercurl.la \ $(top_builddir)/src/json/libtalerjson.la \ $(top_builddir)/src/util/libtalerutil.la \ -lgnunetcurl \ diff --git a/src/lib/teah_common.c b/src/lib/teah_common.c deleted file mode 100644 index 3e56c7536..000000000 --- a/src/lib/teah_common.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2019 GNUnet e.V. - - TALER 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. - - TALER 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 TALER; see the file COPYING. If not, see - -*/ - -/** - * @file lib/teah_common.c - * @brief Helper routines shared by libtalerexchange and libtalerauditor - * @author Christian Grothoff - */ -#include "platform.h" -#include "taler_curl_lib.h" - -#if COMPRESS_BODIES -#include -#endif - - -/** - * Add the @a body as POST data to the easy handle in @a ctx. - * - * @param ctx[in,out] a request context (updated) - * @param eh easy handle to use - * @param body JSON body to add to @e ctx - * @return #GNUNET_OK on success #GNUNET_SYSERR on failure - */ -int -TALER_curl_easy_post (struct TEAH_PostContext *ctx, - CURL *eh, - const json_t *body) -{ - char *str; - size_t slen; - - str = json_dumps (body, - JSON_COMPACT); - if (NULL == str) - { - GNUNET_break (0); - return GNUNET_SYSERR; - } - slen = strlen (str); -#if COMPRESS_BODIES - { - Bytef *cbuf; - uLongf cbuf_size; - int ret; - - cbuf_size = compressBound (slen); - cbuf = GNUNET_malloc (cbuf_size); - ret = compress (cbuf, - &cbuf_size, - (const Bytef *) str, - slen); - if (Z_OK != ret) - { - /* compression failed!? */ - GNUNET_break (0); - GNUNET_free (cbuf); - return GNUNET_SYSERR; - } - free (str); - slen = (size_t) cbuf_size; - ctx->json_enc = (char *) cbuf; - } - GNUNET_assert - (NULL != (ctx->headers = curl_slist_append - (ctx->headers, - "Content-Encoding: deflate"))); -#else - ctx->json_enc = str; -#endif - - GNUNET_assert - (NULL != (ctx->headers = curl_slist_append - (ctx->headers, - "Content-Type: application/json"))); - - GNUNET_assert (CURLE_OK == - curl_easy_setopt (eh, - CURLOPT_POSTFIELDS, - ctx->json_enc)); - GNUNET_assert (CURLE_OK == - curl_easy_setopt (eh, - CURLOPT_POSTFIELDSIZE, - slen)); - return GNUNET_OK; -} - - -/** - * Free the data in @a ctx. - * - * @param ctx[in] a request context (updated) - */ -void -TALER_curl_easy_post_finished (struct TEAH_PostContext *ctx) -{ - curl_slist_free_all (ctx->headers); - ctx->headers = NULL; - GNUNET_free_non_null (ctx->json_enc); -} -- cgit v1.2.3