[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-anastasis] 02/02: fix
From: |
gnunet |
Subject: |
[taler-anastasis] 02/02: fix |
Date: |
Tue, 13 Oct 2020 21:04:27 +0200 |
This is an automated email from the git hooks/post-receive script.
dennis-neufeld pushed a commit to branch master
in repository anastasis.
commit 492cc2be9e0a3e6123e5f9354cb43198ce98a8c3
Author: Dennis Neufeld <dennis.neufeld@students.bfh.ch>
AuthorDate: Tue Oct 13 21:04:10 2020 +0200
fix
---
src/lib/anastasis_api_backup_redux.c | 60 ++++++++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/src/lib/anastasis_api_backup_redux.c
b/src/lib/anastasis_api_backup_redux.c
index af3386c..f62da4b 100644
--- a/src/lib/anastasis_api_backup_redux.c
+++ b/src/lib/anastasis_api_backup_redux.c
@@ -196,6 +196,66 @@ eval_provider_selection (struct PolicyBuilder *pb,
unsigned int curr_diversity = 0;
struct TALER_Amount curr_cost;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_get_zero (currency,
+ &curr_cost));
+
+ // calculate cost
+ for (unsigned int i = 0; i < pb->req_methods; i++)
+ {
+ json_t *method_obj = json_array_get (pb->methods,
+ pb->m_idx[i]);
+ const char *method_name = json_string_value (json_object_get (method_obj,
+ "method"));
+ json_t *method_providers = json_object_get (pb->providers,
+ method_name);
+ json_t *provider_obj = json_array_get (method_providers,
+ prov_sel[i]);
+ void *provider_obj_iter = json_object_iter (provider_obj);
+ const char *provider_name = json_object_iter_key (provider_obj_iter);
+ json_t *policy_method = json_pack ("{s:i, s:s}",
+ "authentication_method", pb->m_idx[i],
+ "provider", provider_name);
+
+ struct TALER_Amount method_cost;
+ json_t *provider_data = json_object_get (provider_obj, provider_name);
+
+ GNUNET_assert (GNUNET_OK ==
+ TALER_string_to_amount (
+ json_string_value (json_object_get (provider_data,
+ "method_cost")),
+ &method_cost));
+ if (0 >
+ TALER_amount_add (&curr_cost,
+ &curr_cost,
+ &method_cost))
+ {
+ GNUNET_break (0);
+ return;
+ }
+ }
+
+ // calculate provider diversity
+ unsigned int *tmp_arr;
+ for (unsigned int i = 0; i < pb->req_methods; i++)
+ {
+ for (unsigned int j = 0; j < curr_diversity; j++)
+ {
+ if (curr_diversity == 0)
+ {
+ GNUNET_array_append (tmp_arr, curr_diversity, prov_sel[i]);
+ break;
+ }
+ if (tmp_arr[j] == prov_sel[i])
+ break;
+ GNUNET_array_append (tmp_arr, curr_diversity, prov_sel[i]);
+ }
+ }
+
+ if (curr_diversity < pb->best_diversity)
+ better = false;
+ else if (0 < TALER_amount_cmp (&curr_cost, &pb->best_cost))
+ better = false;
if (better)
{
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.