diff options
author | Marcello Stanisci <marcello.stanisci@inria.fr> | 2016-10-04 17:22:44 +0200 |
---|---|---|
committer | Marcello Stanisci <marcello.stanisci@inria.fr> | 2016-10-04 17:22:44 +0200 |
commit | abe9d0dcb703baee4bf70dbaf8810c31314cabea (patch) | |
tree | 561d492e9d0b1a53130771333420a12ea4184463 | |
parent | 0bf1860da1f91a1a6130f20d19b6f2aa9e996566 (diff) |
adding stub for /history callback
-rw-r--r-- | src/include/taler_merchant_service.h | 13 | ||||
-rw-r--r-- | src/lib/Makefile.am | 3 | ||||
-rw-r--r-- | src/lib/merchant_api_history.c | 128 |
3 files changed, 141 insertions, 3 deletions
diff --git a/src/include/taler_merchant_service.h b/src/include/taler_merchant_service.h index 787032e0..d5bc4ce7 100644 --- a/src/include/taler_merchant_service.h +++ b/src/include/taler_merchant_service.h @@ -486,16 +486,25 @@ struct TALER_MERCHANT_HistoryOperation; * @param http_status HTTP status returned by the merchant backend * @param json actual body containing history */ - typedef void (*TALER_MERCHANT_HistoryOperationCallback) (void *cls, unsigned int http_status, const json_t *json); - +/** + * Issue a /history request to the backend. + * + * @param ctx execution context + * @param backend_uri base URL of the merchant backend + * @param date only transactions younger than/equals to date will be returned + * @param history_cb callback which will work the response gotten from the backend + * @param history_cb_cls closure to pass to history_cb + * @return handle for this operation, NULL upon errors + */ struct TALER_MERCHANT_HistoryOperation * TALER_MERCHANT_history (struct GNUNET_CURL_Context *ctx, const char *backend_uri, + struct GNUNET_TIME_Absolute date, TALER_MERCHANT_HistoryOperationCallback history_cb, void *history_cb_cls); diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index a7ded655..d36eec22 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -17,7 +17,8 @@ libtalermerchant_la_SOURCES = \ merchant_api_contract.c \ merchant_api_pay.c \ merchant_api_track_transaction.c \ - merchant_api_track_transfer.c + merchant_api_track_transfer.c \ + merchant_api_history.c libtalermerchant_la_LIBADD = \ -ltalerexchange \ diff --git a/src/lib/merchant_api_history.c b/src/lib/merchant_api_history.c new file mode 100644 index 00000000..ed35f27d --- /dev/null +++ b/src/lib/merchant_api_history.c @@ -0,0 +1,128 @@ +/* + This file is part of TALER + Copyright (C) 2014, 2015, 2016 GNUnet e.V. and INRIA + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free Software + Foundation; either version 2.1, 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along with + TALER; see the file COPYING.LGPL. If not, see + <http://www.gnu.org/licenses/> +*/ +/** + * @file lib/merchant_api_contract.c + * @brief Implementation of the /contract request of the merchant's HTTP API + * @author Christian Grothoff + */ +#include "platform.h" +#include <curl/curl.h> +#include <jansson.h> +#include <microhttpd.h> /* just for HTTP status codes */ +#include <gnunet/gnunet_util_lib.h> +#include <gnunet/gnunet_curl_lib.h> +#include "taler_merchant_service.h" +#include <taler/taler_json_lib.h> + + +/** + * @brief A Contract Operation Handle + */ +struct TALER_MERCHANT_HistoryOperation +{ + + /** + * The url for this request, including parameters. + */ + char *url; + + /** + * Handle for the request. + */ + struct GNUNET_CURL_Job *job; + + /** + * Function to call with the result. + */ + TALER_MERCHANT_HistoryOperationCallback cb; + + /** + * Closure for @a cb. + */ + void *cb_cls; + + /** + * Reference to the execution context. + */ + struct GNUNET_CURL_Context *ctx; +}; + +/** + * Function called when we're done processing the + * HTTP /track/transaction request. + * + * @param cls the `struct TALER_MERCHANT_TrackTransactionHandle` + * @param response_code HTTP response code, 0 on error + * @param json response body, NULL if not in JSON + */ +static void +history_raw_cb (void *cls, + long response_code, + const json_t *json) +{ + + + +} + +/** + * Issue a /history request to the backend. + * + * @param ctx execution context + * @param backend_uri base URL of the merchant backend + * @param date only transactions younger than/equals to date will be returned + * @param history_cb callback which will work the response gotten from the backend + * @param history_cb_cls closure to pass to history_cb + * @return handle for this operation, NULL upon errors + */ +struct TALER_MERCHANT_HistoryOperation * +TALER_MERCHANT_history (struct GNUNET_CURL_Context *ctx, + const char *backend_uri, + struct GNUNET_TIME_Absolute date, + TALER_MERCHANT_HistoryOperationCallback history_cb, + void *history_cb_cls) +{ + struct TALER_MERCHANT_HistoryOperation *ho; + uint64_t seconds; + CURL *eh; + + ho = GNUNET_new (struct TALER_MERCHANT_HistoryOperation); + ho->ctx = ctx; + ho->cb = history_cb; + ho->cb_cls = history_cb_cls; + seconds = date.abs_value_us / 1000LL / 1000LL; + GNUNET_asprintf (&ho->url, + "%s?date=%llu", + backend_uri, + seconds); + eh = curl_easy_init (); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (eh, + CURLOPT_URL, + ho->url)); + + + ho->job = GNUNET_CURL_job_add (ctx, + eh, + GNUNET_YES, + &history_raw_cb, + ho); + return ho; +} + + +/* end of merchant_api_contract.c */ |