gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-anastasis] branch master updated (6c17e73 -> 492cc2b)


From: gnunet
Subject: [taler-anastasis] branch master updated (6c17e73 -> 492cc2b)
Date: Tue, 13 Oct 2020 21:04:25 +0200

This is an automated email from the git hooks/post-receive script.

dennis-neufeld pushed a change to branch master
in repository anastasis.

    from 6c17e73  Merge branch 'master' of ssh://git.taler.net/anastasis into 
master
     new 3578441  fix
     new 492cc2b  fix

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/lib/anastasis_api_backup_redux.c | 83 ++++++++++++++++++++++++++++++++----
 src/lib/anastasis_api_redux.c        |  7 ++-
 2 files changed, 79 insertions(+), 11 deletions(-)

diff --git a/src/lib/anastasis_api_backup_redux.c 
b/src/lib/anastasis_api_backup_redux.c
index ab4d039..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)
   {
@@ -224,10 +284,10 @@ provider_candidate (struct PolicyBuilder *pb,
   method_providers = json_object_get (pb->providers,
                                       method_name);
   int num_prov = json_array_size (method_providers);
-  for (unsigned int j = 0; j<num_prov; j++)
+  for (unsigned int j = 0; j < num_prov; j++)
   {
     prov_sel[i] = j;
-    if (i == num_prov)
+    if (i == pb->req_methods - 1)
     {
       eval_provider_selection (pb,
                                prov_sel);
@@ -251,6 +311,7 @@ go_with (struct PolicyBuilder *pb,
   pb->best_diversity = 0;
   pb->best_sel = best_sel;
   pb->m_idx = m_idx;
+
   provider_candidate (pb,
                       prov_sel,
                       0);
@@ -258,8 +319,9 @@ go_with (struct PolicyBuilder *pb,
   GNUNET_assert (GNUNET_OK ==
                  TALER_amount_get_zero (currency,
                                         &recovery_cost));
+
   json_t *method_arr = json_array ();
-  for (unsigned int i = 0; i<pb->req_methods; i++)
+  for (unsigned int i = 0; i < pb->req_methods; i++)
   {
     json_t *method_obj = json_array_get (pb->methods,
                                          m_idx[i]);
@@ -269,17 +331,19 @@ go_with (struct PolicyBuilder *pb,
                                                 method_name);
     json_t *provider_obj = json_array_get (method_providers,
                                            best_sel[i]);
-    const char *provider_name = json_string_value (json_object_get (
-                                                     provider_obj,
-                                                     "provider"));
+    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", m_idx[i],
                                        "provider", provider_name);
     json_array_append_new (method_arr, policy_method);
+
     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_obj,
+                     json_string_value (json_object_get (provider_data,
                                                          "method_cost")),
                      &method_cost));
     if (0 >
@@ -291,10 +355,11 @@ go_with (struct PolicyBuilder *pb,
       return;
     }
   }
-  json_t *policy = json_pack ("{s:i, s:i}",
+  json_t *policy = json_pack ("{s:o, s:o}",
                               "recovery_cost",
                               TALER_JSON_from_amount (&recovery_cost),
                               "methods", method_arr);
+  json_array_append_new (pb->policies, policy);
 }
 
 
@@ -309,7 +374,6 @@ method_candidate (struct PolicyBuilder *pb,
     start = m_idx[i - 1];
   for (unsigned int j = start; j < pb->num_methods; j++)
   {
-    m_idx[i] = j;
     if (i == pb->req_methods)
     {
       go_with (pb,
@@ -318,6 +382,7 @@ method_candidate (struct PolicyBuilder *pb,
     }
     else
     {
+      m_idx[i] = j;
       method_candidate (pb,
                         m_idx,
                         i + 1);
diff --git a/src/lib/anastasis_api_redux.c b/src/lib/anastasis_api_redux.c
index 4bab722..847f371 100644
--- a/src/lib/anastasis_api_redux.c
+++ b/src/lib/anastasis_api_redux.c
@@ -210,6 +210,8 @@ config_cb (void *cls,
       GNUNET_assert (NULL != provider_id);
       json_t *method_data = json_object ();
       GNUNET_assert (NULL != method_data);
+      json_t *provider_arr = json_array ();
+      GNUNET_assert (NULL != provider_arr);
 
       GNUNET_assert (0 == json_object_set_new (method_data,
                                                "method_cost",
@@ -222,10 +224,11 @@ config_cb (void *cls,
       GNUNET_assert (0 == json_object_set_new (provider_id,
                                                cs->server->backend_id,
                                                method_data));
-
+      GNUNET_assert (0 == json_array_append_new (provider_arr,
+                                                 provider_id));
       GNUNET_assert (0 == json_object_set_new (provider_method,
                                                json_string_value (method_type),
-                                               provider_id));
+                                               provider_arr));
 
       GNUNET_assert (0 == json_object_set_new (config,
                                                "config",

-- 
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]