From a3635fbe2dac0d1827ee45504e3e3b1e08c392ce Mon Sep 17 00:00:00 2001 From: Christian Blättler Date: Fri, 8 Mar 2024 08:06:29 +0100 Subject: parse v0 max_fee into limits struct --- .../taler-merchant-httpd_private-post-orders.c | 54 ++++++++++++++++++---- 1 file changed, 46 insertions(+), 8 deletions(-) (limited to 'src/backend') 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) { -- cgit v1.2.3