summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorChristian Blättler <blatc2@bfh.ch>2024-03-08 08:06:29 +0100
committerChristian Blättler <blatc2@bfh.ch>2024-03-08 08:06:29 +0100
commita3635fbe2dac0d1827ee45504e3e3b1e08c392ce (patch)
tree16c49ebc912aa7068de954445969df4e48a36e88 /src/backend
parent1ae1dcbbbba24b3135659dd8b38b9dc1c392f515 (diff)
downloadmerchant-a3635fbe2dac0d1827ee45504e3e3b1e08c392ce.tar.gz
merchant-a3635fbe2dac0d1827ee45504e3e3b1e08c392ce.tar.bz2
merchant-a3635fbe2dac0d1827ee45504e3e3b1e08c392ce.zip
parse v0 max_fee into limits struct
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/taler-merchant-httpd_private-post-orders.c54
1 files changed, 46 insertions, 8 deletions
diff --git a/src/backend/taler-merchant-httpd_private-post-orders.c b/src/backend/taler-merchant-httpd_private-post-orders.c
index 45402a1b..d2159246 100644
--- a/src/backend/taler-merchant-httpd_private-post-orders.c
+++ b/src/backend/taler-merchant-httpd_private-post-orders.c
@@ -341,7 +341,17 @@ struct OrderContext
/**
* Maximum fee as given by the client request.
*/
- struct TALER_Amount max_fee;
+ // struct TALER_Amount max_fee;
+
+ /**
+ * Array of fee limits and wire account details by currency.
+ */
+ struct TALER_MerchantContractLimits *limits;
+
+ /**
+ * Length of the @e limits array;
+ */
+ unsigned int limits_len;
/**
* Specifies for how long the wallet should try to get an
@@ -425,7 +435,18 @@ struct OrderContext
/**
* Maximum fee
*/
- struct TALER_Amount max_fee;
+ // struct TALER_Amount max_fee;
+
+ /**
+ * Array of fee limits and wire account details by currency.
+ */
+ struct TALER_MerchantContractLimits *limits;
+
+ /**
+ * Length of the @e limits array;
+ */
+ unsigned int limits_len;
+
} set_max_fee;
/**
@@ -1197,6 +1218,9 @@ keys_cb (
struct OrderContext *oc = rx->oc;
const struct TALER_MERCHANTDB_InstanceSettings *settings =
&oc->hc->instance->settings;
+ struct TALER_MerchantContractLimits *parsed_limits = oc->parse_order.limits;
+
+ GNUNET_assert (1 == oc->parse_order.limits_len && NULL != parsed_limits);
rx->fo = NULL;
GNUNET_CONTAINER_DLL_remove (oc->set_exchanges.pending_reload_head,
@@ -1215,7 +1239,7 @@ keys_cb (
rx->url);
if ( (settings->use_stefan) &&
(GNUNET_OK !=
- TALER_amount_is_valid (&oc->parse_order.max_fee)) )
+ TALER_amount_is_valid (&parsed_limits->max_fee)) )
update_stefan (oc,
keys);
get_acceptable (oc,
@@ -1275,8 +1299,11 @@ static void
serialize_order (struct OrderContext *oc)
{
struct TALER_MerchantContractChoice *choice = oc->parse_order.choices;
+ struct TALER_MerchantContractLimits *limits = oc->set_max_fee.limits;
+ // TODO: How to properly handle these cases / errors?
GNUNET_assert (1 == oc->parse_order.choices_len && NULL != choice);
+ GNUNET_assert (1 == oc->set_max_fee.limits_len && NULL != limits);
oc->serialize_order.contract = GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("summary",
@@ -1325,7 +1352,7 @@ serialize_order (struct OrderContext *oc)
GNUNET_JSON_pack_array_incref ("exchanges",
oc->set_exchanges.exchanges),
TALER_JSON_pack_amount ("max_fee",
- &oc->set_max_fee.max_fee),
+ &limits->max_fee),
TALER_JSON_pack_amount ("amount",
&oc->parse_order.brutto),
GNUNET_JSON_pack_allow_null (
@@ -1375,9 +1402,14 @@ set_max_fee (struct OrderContext *oc)
{
const struct TALER_MERCHANTDB_InstanceSettings *settings =
&oc->hc->instance->settings;
+ struct TALER_MerchantContractLimits *parsed_limits = oc->parse_order.limits;
+ struct TALER_MerchantContractLimits *limits = oc->set_max_fee.limits;
+
+ GNUNET_assert (1 == oc->parse_order.limits_len && NULL != parsed_limits);
+ GNUNET_assert (1 == oc->set_max_fee.limits_len && NULL != limits);
if (GNUNET_OK !=
- TALER_amount_is_valid (&oc->parse_order.max_fee))
+ TALER_amount_is_valid (&parsed_limits->max_fee))
{
struct TALER_Amount stefan;
@@ -1389,7 +1421,7 @@ set_max_fee (struct OrderContext *oc)
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (oc->parse_order.brutto.currency,
&stefan));
- oc->set_max_fee.max_fee = stefan;
+ limits->max_fee = stefan;
}
oc->phase++;
}
@@ -1540,7 +1572,7 @@ parse_order (struct OrderContext *oc)
NULL),
GNUNET_JSON_spec_mark_optional (
TALER_JSON_spec_amount_any ("max_fee",
- &oc->parse_order.max_fee),
+ &limits->max_fee),
&no_fee),
GNUNET_JSON_spec_mark_optional (
GNUNET_JSON_spec_json ("delivery_location",
@@ -1588,7 +1620,7 @@ parse_order (struct OrderContext *oc)
if ( (! no_fee) &&
(GNUNET_OK !=
TALER_amount_cmp_currency (&oc->parse_order.brutto,
- &oc->parse_order.max_fee)) )
+ &limits->max_fee)) )
{
GNUNET_break_op (0);
GNUNET_JSON_parse_free (spec);
@@ -1599,6 +1631,12 @@ parse_order (struct OrderContext *oc)
return;
}
+ /* Copy currency of max_fee into limits label */
+ GNUNET_snprintf (limits->currency,
+ sizeof (limits->currency),
+ "%s",
+ limits->max_fee.currency);
+
/* Add order_id if it doesn't exist. */
if (NULL == oc->parse_order.order_id)
{