summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-06-05 11:29:16 +0200
committerChristian Grothoff <christian@grothoff.org>2016-06-05 11:29:16 +0200
commit94d8d6b48e7fdaf7c7caf47a39faa8a33a72915f (patch)
treefadca84bfaabffae64e5c6eafa46d99cd328e7f3
parent535a0c9988d7b6ecbd8352808ad5e0918fdc056e (diff)
downloadmerchant-94d8d6b48e7fdaf7c7caf47a39faa8a33a72915f.tar.gz
merchant-94d8d6b48e7fdaf7c7caf47a39faa8a33a72915f.tar.bz2
merchant-94d8d6b48e7fdaf7c7caf47a39faa8a33a72915f.zip
split /track handlers into two files
-rw-r--r--src/backend/Makefile.am3
-rw-r--r--src/backend/taler-merchant-httpd.c3
-rw-r--r--src/backend/taler-merchant-httpd_track-deposit.c237
-rw-r--r--src/backend/taler-merchant-httpd_track-deposit.h (renamed from src/backend/taler-merchant-httpd_track.h)26
-rw-r--r--src/backend/taler-merchant-httpd_track-transaction.c (renamed from src/backend/taler-merchant-httpd_track.c)186
-rw-r--r--src/backend/taler-merchant-httpd_track-transaction.h45
6 files changed, 293 insertions, 207 deletions
diff --git a/src/backend/Makefile.am b/src/backend/Makefile.am
index 1e2f1d1b..cd0fa050 100644
--- a/src/backend/Makefile.am
+++ b/src/backend/Makefile.am
@@ -21,7 +21,8 @@ taler_merchant_httpd_SOURCES = \
taler-merchant-httpd_exchanges.c taler-merchant-httpd_exchanges.h \
taler-merchant-httpd_contract.c taler-merchant-httpd_contract.h \
taler-merchant-httpd_pay.c taler-merchant-httpd_pay.h \
- taler-merchant-httpd_track.c taler-merchant-httpd_track.h
+ taler-merchant-httpd_track-deposit.c taler-merchant-httpd_track-deposit.h \
+ taler-merchant-httpd_track-transaction.c taler-merchant-httpd_track-transaction.h
taler_merchant_httpd_LDADD = \
diff --git a/src/backend/taler-merchant-httpd.c b/src/backend/taler-merchant-httpd.c
index 0785d635..5f0a887c 100644
--- a/src/backend/taler-merchant-httpd.c
+++ b/src/backend/taler-merchant-httpd.c
@@ -37,7 +37,8 @@
#include "taler-merchant-httpd_exchanges.h"
#include "taler-merchant-httpd_contract.h"
#include "taler-merchant-httpd_pay.h"
-#include "taler-merchant-httpd_track.h"
+#include "taler-merchant-httpd_track-deposit.h"
+#include "taler-merchant-httpd_track-transaction.h"
/**
diff --git a/src/backend/taler-merchant-httpd_track-deposit.c b/src/backend/taler-merchant-httpd_track-deposit.c
new file mode 100644
index 00000000..970bd576
--- /dev/null
+++ b/src/backend/taler-merchant-httpd_track-deposit.c
@@ -0,0 +1,237 @@
+/*
+ This file is part of TALER
+ (C) 2014, 2015, 2016 INRIA
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero 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, If not, see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file backend/taler-merchant-httpd_track-deposit.c
+ * @brief implement API for tracking deposits and wire transfers
+ * @author Marcello Stanisci
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include <jansson.h>
+#include <taler/taler_signatures.h>
+#include <taler/taler_json_lib.h>
+#include "taler-merchant-httpd.h"
+#include "taler-merchant-httpd_mhd.h"
+#include "taler-merchant-httpd_parsing.h"
+#include "taler-merchant-httpd_auditors.h"
+#include "taler-merchant-httpd_exchanges.h"
+#include "taler-merchant-httpd_responses.h"
+#include "taler-merchant-httpd_track_deposit.h"
+
+
+/**
+ * How long to wait before giving up processing with the exchange?
+ */
+#define TRACK_TIMEOUT (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30))
+
+extern char *TMH_merchant_currency_string;
+
+
+/**
+ * Context used for handing /track/deposit requests.
+ */
+struct DepositTrackContext
+{
+
+ /**
+ * This MUST be first!
+ */
+ struct TM_HandlerContext hc;
+
+ /**
+ * Handle to the exchange.
+ */
+ struct TALER_EXCHANGE_Handle *eh;
+
+ /**
+ * Handle for the /wire/deposits request.
+ */
+ struct TALER_EXCHANGE_WireDepositsHandle *wdh;
+
+ /**
+ *
+ */
+ struct TALER_WireDepositDetails *details;
+
+ /**
+ * Argument for the /wire/deposits request.
+ */
+ struct TALER_WireTransferIdentifierRawP wtid;
+
+ /**
+ * Length of the @e details array.
+ */
+ unsigned int details_length;
+
+ /**
+ * HTTP connection we are handling.
+ */
+ struct MHD_Connection *connection;
+
+ /**
+ * Response code to return.
+ */
+ unsigned int response_code;
+
+ /**
+ *
+ */
+ json_t *json;
+
+ /**
+ * Error message.
+ */
+ const char *error;
+
+};
+
+
+/**
+ * Function called with detailed wire transfer data, including all
+ * of the coin transactions that were combined into the wire transfer.
+ *
+ * @param cls closure
+ * @param http_status HTTP status code we got, 0 on exchange protocol violation
+ * @param json original json reply (may include signatures, those have then been
+ * validated already)
+ * @param wtid extracted wire transfer identifier, or NULL if the exchange could
+ * not provide any (set only if @a http_status is #MHD_HTTP_OK)
+ * @param total_amount total amount of the wire transfer, or NULL if the exchange could
+ * not provide any @a wtid (set only if @a http_status is #MHD_HTTP_OK)
+ * @param details_length length of the @a details array
+ * @param details array with details about the combined transactions
+ */
+static void
+wire_deposit_cb (void *cls,
+ unsigned int http_status,
+ const json_t *json,
+ const struct GNUNET_HashCode *h_wire,
+ const struct TALER_Amount *total_amount,
+ unsigned int details_length,
+ const struct TALER_WireDepositDetails *details)
+{
+ struct DepositTrackContext *rctx = cls;
+ // unsigned int i;
+
+ rctx->wdh = NULL;
+ if (NULL == total_amount)
+ {
+ rctx->error = "failed to obtain /wire/deposit response from exchange";
+ rctx->json = json_incref ((json_t *) json);
+ rctx->response_code = http_status;
+ MHD_resume_connection (rctx->connection);
+ return;
+ }
+ rctx->details_length = details_length;
+ rctx->details = GNUNET_new_array (details_length,
+ struct TALER_WireDepositDetails);
+ memcpy (rctx->details,
+ details,
+ details_length * sizeof (struct TALER_WireDepositDetails));
+ GNUNET_break (0);
+ /* FIXME: now check that these details match what we have in
+ our database... */
+
+
+}
+
+
+/**
+ * Function called with information about who is auditing
+ * a particular exchange and what key the exchange is using.
+ *
+ * @param cls closure
+ * @param keys information about the various keys used
+ * by the exchange, NULL if /keys failed
+ */
+static void
+cert_cb (void *cls,
+ const struct TALER_EXCHANGE_Keys *keys)
+{
+ struct DepositTrackContext *rctx = cls;
+
+ if (NULL == keys)
+ {
+ rctx->error = "failed to obtain /keys from exchange";
+ rctx->response_code = MHD_HTTP_SERVICE_UNAVAILABLE;
+ MHD_resume_connection (rctx->connection);
+ return;
+ }
+ rctx->wdh = TALER_EXCHANGE_wire_deposits (rctx->eh,
+ &rctx->wtid,
+ &wire_deposit_cb,
+ rctx);
+}
+
+
+/**
+ * Manages a /track/wtid call, thus it calls the /track/deposit
+ * offered by the exchange in order to return the set of deposits
+ * (of coins) associated with a given wire transfer.
+ *
+ * @param rh context of the handler
+ * @param connection the MHD connection to handle
+ * @param[in,out] connection_cls the connection's closure (can be updated)
+ * @param upload_data upload data
+ * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
+ * @return MHD result code
+ */
+int
+MH_handler_track_deposit (struct TMH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size)
+{
+ struct DepositTrackContext *rctx;
+ const char *str;
+ const char *uri;
+
+ rctx = *connection_cls;
+ if (NULL != rctx)
+ {
+ // ...
+ }
+ uri = MHD_lookup_connection_value (connection,
+ MHD_GET_ARGUMENT_KIND,
+ "exchange");
+ if (NULL == uri)
+ return TMH_RESPONSE_reply_external_error (connection,
+ "exchange argument missing");
+ str = MHD_lookup_connection_value (connection,
+ MHD_GET_ARGUMENT_KIND,
+ "wtid");
+ if (NULL == str)
+ return TMH_RESPONSE_reply_external_error (connection,
+ "wtid argument missing");
+ if (GNUNET_OK !=
+ GNUNET_STRINGS_string_to_data (str,
+ strlen (str),
+ &rctx->wtid,
+ sizeof (rctx->wtid)))
+ return TMH_RESPONSE_reply_external_error (connection,
+ "wtid argument malformed");
+ rctx->eh = TALER_EXCHANGE_connect (NULL /* FIXME */,
+ uri,
+ &cert_cb,
+ rctx,
+ TALER_EXCHANGE_OPTION_END);
+
+ GNUNET_break (0);
+ return MHD_NO;
+}
+
+/* end of taler-merchant-httpd_track-deposit.c */
diff --git a/src/backend/taler-merchant-httpd_track.h b/src/backend/taler-merchant-httpd_track-deposit.h
index d64cba47..93132b6e 100644
--- a/src/backend/taler-merchant-httpd_track.h
+++ b/src/backend/taler-merchant-httpd_track-deposit.h
@@ -14,12 +14,13 @@
TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/>
*/
/**
- * @file backend/taler-merchant-httpd_track.h
- * @brief headers for /track/{deposit,wtid} handler
+ * @file backend/taler-merchant-httpd_track-deposit.h
+ * @brief headers for /track/deposit handler
+ * @author Christian Grothoff
* @author Marcello Stanisci
*/
-#ifndef TALER_MERCHANT_HTTPD_TRACK_H
-#define TALER_MERCHANT_HTTPD_TRACK_H
+#ifndef TALER_MERCHANT_HTTPD_TRACK_DEPOSIT_H
+#define TALER_MERCHANT_HTTPD_TRACK_DEPOSIT_H
#include <microhttpd.h>
#include "taler-merchant-httpd.h"
@@ -42,22 +43,5 @@ MH_handler_track_deposit (struct TMH_RequestHandler *rh,
const char *upload_data,
size_t *upload_data_size);
-/**
- * Handle a "/track/transaction" request.
- *
- * @param rh context of the handler
- * @param connection the MHD connection to handle
- * @param[in,out] connection_cls the connection's closure (can be updated)
- * @param upload_data upload data
- * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @return MHD result code
- */
-int
-MH_handler_track_transaction (struct TMH_RequestHandler *rh,
- struct MHD_Connection *connection,
- void **connection_cls,
- const char *upload_data,
- size_t *upload_data_size);
-
#endif
diff --git a/src/backend/taler-merchant-httpd_track.c b/src/backend/taler-merchant-httpd_track-transaction.c
index 024fff38..b64e8204 100644
--- a/src/backend/taler-merchant-httpd_track.c
+++ b/src/backend/taler-merchant-httpd_track-transaction.c
@@ -14,7 +14,7 @@
TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/>
*/
/**
- * @file backend/taler-merchant-httpd_track.c
+ * @file backend/taler-merchant-httpd_track-transaction.c
* @brief implement API for tracking deposits and wire transfers
* @author Marcello Stanisci
* @author Christian Grothoff
@@ -29,7 +29,7 @@
#include "taler-merchant-httpd_auditors.h"
#include "taler-merchant-httpd_exchanges.h"
#include "taler-merchant-httpd_responses.h"
-#include "taler-merchant-httpd_track.h"
+#include "taler-merchant-httpd_track-transaction.h"
/**
@@ -40,188 +40,6 @@
extern char *TMH_merchant_currency_string;
-/**
- * Context used for handing /track/deposit requests.
- */
-struct DepositTrackContext
-{
-
- /**
- * This MUST be first!
- */
- struct TM_HandlerContext hc;
-
- /**
- * Handle to the exchange.
- */
- struct TALER_EXCHANGE_Handle *eh;
-
- /**
- * Handle for the /wire/deposits request.
- */
- struct TALER_EXCHANGE_WireDepositsHandle *wdh;
-
- /**
- *
- */
- struct TALER_WireDepositDetails *details;
-
- /**
- * Argument for the /wire/deposits request.
- */
- struct TALER_WireTransferIdentifierRawP wtid;
-
- /**
- *
- */
- unsigned int details_length;
-
- struct MHD_Connection *connection;
-
- unsigned int response_code;
-
- json_t *json;
-
- const char *error;
-
-};
-
-
-/**
- * Function called with detailed wire transfer data, including all
- * of the coin transactions that were combined into the wire transfer.
- *
- * @param cls closure
- * @param http_status HTTP status code we got, 0 on exchange protocol violation
- * @param json original json reply (may include signatures, those have then been
- * validated already)
- * @param wtid extracted wire transfer identifier, or NULL if the exchange could
- * not provide any (set only if @a http_status is #MHD_HTTP_OK)
- * @param total_amount total amount of the wire transfer, or NULL if the exchange could
- * not provide any @a wtid (set only if @a http_status is #MHD_HTTP_OK)
- * @param details_length length of the @a details array
- * @param details array with details about the combined transactions
- */
-static void
-wire_deposit_cb (void *cls,
- unsigned int http_status,
- const json_t *json,
- const struct GNUNET_HashCode *h_wire,
- const struct TALER_Amount *total_amount,
- unsigned int details_length,
- const struct TALER_WireDepositDetails *details)
-{
- struct DepositTrackContext *rctx = cls;
- // unsigned int i;
-
- rctx->wdh = NULL;
- if (NULL == total_amount)
- {
- rctx->error = "failed to obtain /wire/deposit response from exchange";
- rctx->json = json_incref ((json_t *) json);
- rctx->response_code = http_status;
- MHD_resume_connection (rctx->connection);
- return;
- }
- rctx->details_length = details_length;
- rctx->details = GNUNET_new_array (details_length,
- struct TALER_WireDepositDetails);
- memcpy (rctx->details,
- details,
- details_length * sizeof (struct TALER_WireDepositDetails));
- GNUNET_break (0);
- /* FIXME: now check that these details match what we have in
- our database... */
-
-
-}
-
-
-/**
- * Function called with information about who is auditing
- * a particular exchange and what key the exchange is using.
- *
- * @param cls closure
- * @param keys information about the various keys used
- * by the exchange, NULL if /keys failed
- */
-static void
-cert_cb (void *cls,
- const struct TALER_EXCHANGE_Keys *keys)
-{
- struct DepositTrackContext *rctx = cls;
-
- if (NULL == keys)
- {
- rctx->error = "failed to obtain /keys from exchange";
- rctx->response_code = MHD_HTTP_SERVICE_UNAVAILABLE;
- MHD_resume_connection (rctx->connection);
- return;
- }
- rctx->wdh = TALER_EXCHANGE_wire_deposits (rctx->eh,
- &rctx->wtid,
- &wire_deposit_cb,
- rctx);
-}
-
-
-/**
- * Manages a /track/wtid call, thus it calls the /track/deposit
- * offered by the exchange in order to return the set of deposits
- * (of coins) associated with a given wire transfer.
- *
- * @param rh context of the handler
- * @param connection the MHD connection to handle
- * @param[in,out] connection_cls the connection's closure (can be updated)
- * @param upload_data upload data
- * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @return MHD result code
- */
-int
-MH_handler_track_deposit (struct TMH_RequestHandler *rh,
- struct MHD_Connection *connection,
- void **connection_cls,
- const char *upload_data,
- size_t *upload_data_size)
-{
- struct DepositTrackContext *rctx;
- const char *str;
- const char *uri;
-
- rctx = *connection_cls;
- if (NULL != rctx)
- {
- // ...
- }
- uri = MHD_lookup_connection_value (connection,
- MHD_GET_ARGUMENT_KIND,
- "exchange");
- if (NULL == uri)
- return TMH_RESPONSE_reply_external_error (connection,
- "exchange argument missing");
- str = MHD_lookup_connection_value (connection,
- MHD_GET_ARGUMENT_KIND,
- "wtid");
- if (NULL == str)
- return TMH_RESPONSE_reply_external_error (connection,
- "wtid argument missing");
- if (GNUNET_OK !=
- GNUNET_STRINGS_string_to_data (str,
- strlen (str),
- &rctx->wtid,
- sizeof (rctx->wtid)))
- return TMH_RESPONSE_reply_external_error (connection,
- "wtid argument malformed");
- rctx->eh = TALER_EXCHANGE_connect (NULL /* FIXME */,
- uri,
- &cert_cb,
- rctx,
- TALER_EXCHANGE_OPTION_END);
-
- GNUNET_break (0);
- return MHD_NO;
-}
-
/**
* Information we keep for each coin in a /track/transaction operation.
diff --git a/src/backend/taler-merchant-httpd_track-transaction.h b/src/backend/taler-merchant-httpd_track-transaction.h
new file mode 100644
index 00000000..fb9027dc
--- /dev/null
+++ b/src/backend/taler-merchant-httpd_track-transaction.h
@@ -0,0 +1,45 @@
+/*
+ This file is part of TALER
+ (C) 2014, 2015 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, If not, see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file backend/taler-merchant-httpd_track-transaction.h
+ * @brief headers for /track/transaction handler
+ * @author Christian Grothoff
+ * @author Marcello Stanisci
+ */
+#ifndef TALER_MERCHANT_HTTPD_TRACK_TRANSACTION_H
+#define TALER_MERCHANT_HTTPD_TRACK_TRANSACTION_H
+#include <microhttpd.h>
+#include "taler-merchant-httpd.h"
+
+/**
+ * Handle a "/track/transaction" request.
+ *
+ * @param rh context of the handler
+ * @param connection the MHD connection to handle
+ * @param[in,out] connection_cls the connection's closure (can be updated)
+ * @param upload_data upload data
+ * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
+ * @return MHD result code
+ */
+int
+MH_handler_track_transaction (struct TMH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size);
+
+
+#endif