gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]