diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/exchange_api_purse_create_with_merge.c | 26 | ||||
| -rw-r--r-- | src/lib/exchange_api_purse_merge.c | 24 | 
2 files changed, 42 insertions, 8 deletions
| diff --git a/src/lib/exchange_api_purse_create_with_merge.c b/src/lib/exchange_api_purse_create_with_merge.c index dddf5e4a..35d52b91 100644 --- a/src/lib/exchange_api_purse_create_with_merge.c +++ b/src/lib/exchange_api_purse_create_with_merge.c @@ -250,6 +250,7 @@ TALER_EXCHANGE_purse_create_with_merge (    const struct TALER_ContractDiffiePrivateP *contract_priv,    const json_t *contract_terms,    bool upload_contract, +  bool pay_for_purse,    struct GNUNET_TIME_Timestamp merge_timestamp,    TALER_EXCHANGE_PurseCreateMergeCallback cb,    void *cb_cls) @@ -268,6 +269,8 @@ TALER_EXCHANGE_purse_create_with_merge (    struct TALER_PurseContractSignatureP purse_sig;    void *econtract = NULL;    size_t econtract_size = 0; +  struct TALER_Amount purse_fee; +  enum TALER_WalletAccountMergeFlags flags;    pcm = GNUNET_new (struct TALER_EXCHANGE_PurseCreateMergeHandle);    pcm->exchange = exchange; @@ -315,7 +318,22 @@ TALER_EXCHANGE_purse_create_with_merge (        return NULL;      }    } +  if (pay_for_purse) +  { +    const struct TALER_EXCHANGE_GlobalFee *gf; +    gf = TALER_EXCHANGE_get_global_fee ( +      TALER_EXCHANGE_get_keys (exchange), +      GNUNET_TIME_timestamp_get ()); +    purse_fee = gf->fees.purse; +    flags = TALER_WAMF_MODE_CREATE_WITH_PURSE_FEE; +  } +  else +  { +    TALER_amount_set_zero (pcm->purse_value_after_fees.currency, +                           &purse_fee); +    flags = TALER_WAMF_MODE_CREATE_FROM_PURSE_QUOTA; +  }    GNUNET_assert (GNUNET_YES ==                   TEAH_handle_is_ready (exchange)); @@ -359,7 +377,9 @@ TALER_EXCHANGE_purse_create_with_merge (                                     pcm->purse_expiration,                                     &pcm->h_contract_terms,                                     &pcm->purse_value_after_fees, +                                   &purse_fee,                                     min_age, +                                   flags,                                     reserve_priv,                                     &reserve_sig);    if (upload_contract) @@ -398,6 +418,12 @@ TALER_EXCHANGE_purse_create_with_merge (                                      &contract_pub)        : GNUNET_JSON_pack_string ("dummy",                                   NULL)), +    GNUNET_JSON_pack_allow_null ( +      pay_for_purse +      ? TALER_JSON_pack_amount ("purse_fee", +                                &purse_fee) +      : GNUNET_JSON_pack_string ("dummy2", +                                 NULL)),      GNUNET_JSON_pack_data_auto ("merge_pub",                                  &merge_pub),      GNUNET_JSON_pack_data_auto ("merge_sig", diff --git a/src/lib/exchange_api_purse_merge.c b/src/lib/exchange_api_purse_merge.c index d30d5da2..8bfa4248 100644 --- a/src/lib/exchange_api_purse_merge.c +++ b/src/lib/exchange_api_purse_merge.c @@ -349,14 +349,22 @@ TALER_EXCHANGE_account_merge (                                   purse_pub,                                   merge_priv,                                   &merge_sig); -  TALER_wallet_account_merge_sign (merge_timestamp, -                                   purse_pub, -                                   purse_expiration, -                                   h_contract_terms, -                                   purse_value_after_fees, -                                   min_age, -                                   reserve_priv, -                                   &reserve_sig); +  { +    struct TALER_Amount zero_purse_fee; + +    TALER_amount_set_zero (purse_value_after_fees->currency, +                           &zero_purse_fee); +    TALER_wallet_account_merge_sign (merge_timestamp, +                                     purse_pub, +                                     purse_expiration, +                                     h_contract_terms, +                                     purse_value_after_fees, +                                     &zero_purse_fee, +                                     min_age, +                                     TALER_WAMF_MODE_MERGE_FULLY_PAID_PURSE, +                                     reserve_priv, +                                     &reserve_sig); +  }    merge_obj = GNUNET_JSON_PACK (      GNUNET_JSON_pack_string ("payto_uri",                               reserve_url), | 
