gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated (7e409c37 -> af983045)


From: gnunet
Subject: [taler-exchange] branch master updated (7e409c37 -> af983045)
Date: Fri, 30 Jul 2021 17:31:23 +0200

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

grothoff pushed a change to branch master
in repository exchange.

    from 7e409c37 debian: copy etc files for libtalerexchange
     new cbb905a9 -eliminate more json_pack format strings
     new af983045 REVOCATION_DIR is long obsolete, KEYDIR was renamed to 
KEY_DIR and is in another section

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/auditor/generate-auditor-basedb.conf           |   2 -
 src/exchange/taler-exchange-httpd.c                |   2 +-
 src/exchange/taler-exchange-httpd_deposit.c        |  15 +-
 src/exchange/taler-exchange-httpd_deposits_get.c   |  38 ++--
 src/exchange/taler-exchange-httpd_keys.c           | 249 ++++++++++-----------
 src/exchange/taler-exchange-httpd_link.c           |  26 +--
 src/exchange/taler-exchange-httpd_melt.c           |  44 ++--
 src/exchange/taler-exchange-httpd_recoup.c         |  20 +-
 .../taler-exchange-httpd_refreshes_reveal.c        |  67 ++----
 src/exchange/taler-exchange-httpd_refund.c         |  55 ++---
 src/exchange/taler-exchange-httpd_reserves_get.c   |  14 +-
 src/exchange/taler-exchange-httpd_responses.c      | 217 +++++++++---------
 src/exchange/taler-exchange-httpd_transfers_get.c  |  72 +++---
 src/exchange/taler-exchange-httpd_wire.c           |  47 ++--
 src/exchange/taler-exchange-httpd_withdraw.c       |  27 ++-
 src/testing/testing_api_helpers_exchange.c         |  51 +++--
 16 files changed, 453 insertions(+), 493 deletions(-)

diff --git a/src/auditor/generate-auditor-basedb.conf 
b/src/auditor/generate-auditor-basedb.conf
index d3ded7bd..21e40c32 100644
--- a/src/auditor/generate-auditor-basedb.conf
+++ b/src/auditor/generate-auditor-basedb.conf
@@ -1,6 +1,4 @@
 [exchange]
-KEYDIR = ${TALER_DATA_HOME}/exchange/live-keys/
-REVOCATION_DIR = ${TALER_DATA_HOME}/exchange/revocations/
 MAX_KEYS_CACHING = forever
 DB = postgres
 MASTER_PRIV_FILE = ${TALER_DATA_HOME}/exchange/offline-keys/master.priv
diff --git a/src/exchange/taler-exchange-httpd.c 
b/src/exchange/taler-exchange-httpd.c
index 6113152a..ea8830be 100644
--- a/src/exchange/taler-exchange-httpd.c
+++ b/src/exchange/taler-exchange-httpd.c
@@ -1161,7 +1161,7 @@ exchange_serve_process_config (void)
     {
       GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
                                  "exchange",
-                                 "master_public_key");
+                                 "MASTER_PUBLIC_KEY");
       return GNUNET_SYSERR;
     }
     if (GNUNET_OK !=
diff --git a/src/exchange/taler-exchange-httpd_deposit.c 
b/src/exchange/taler-exchange-httpd_deposit.c
index 5e802fb0..ba94f25d 100644
--- a/src/exchange/taler-exchange-httpd_deposit.c
+++ b/src/exchange/taler-exchange-httpd_deposit.c
@@ -89,16 +89,15 @@ reply_deposit_success (struct MHD_Connection *connection,
                                     ec,
                                     NULL);
   }
-  return TALER_MHD_reply_json_pack (
+  return TALER_MHD_REPLY_JSON_PACK (
     connection,
     MHD_HTTP_OK,
-    "{s:o, s:o, s:o}",
-    "exchange_timestamp",
-    GNUNET_JSON_from_time_abs (exchange_timestamp),
-    "exchange_sig",
-    GNUNET_JSON_from_data_auto (&sig),
-    "exchange_pub",
-    GNUNET_JSON_from_data_auto (&pub));
+    GNUNET_JSON_pack_time_abs ("exchange_timestamp",
+                               exchange_timestamp),
+    GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                &sig),
+    GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                &pub));
 }
 
 
diff --git a/src/exchange/taler-exchange-httpd_deposits_get.c 
b/src/exchange/taler-exchange-httpd_deposits_get.c
index 90f28b4e..c51e0f42 100644
--- a/src/exchange/taler-exchange-httpd_deposits_get.c
+++ b/src/exchange/taler-exchange-httpd_deposits_get.c
@@ -78,20 +78,19 @@ reply_deposit_details (struct MHD_Connection *connection,
                                     ec,
                                     NULL);
   }
-  return TALER_MHD_reply_json_pack (connection,
-                                    MHD_HTTP_OK,
-                                    "{s:o, s:o, s:o, s:o, s:o}",
-                                    "wtid", GNUNET_JSON_from_data_auto (
-                                      wtid),
-                                    "execution_time",
-                                    GNUNET_JSON_from_time_abs (exec_time),
-                                    "coin_contribution",
-                                    TALER_JSON_from_amount (
-                                      coin_contribution),
-                                    "exchange_sig",
-                                    GNUNET_JSON_from_data_auto (&sig),
-                                    "exchange_pub",
-                                    GNUNET_JSON_from_data_auto (&pub));
+  return TALER_MHD_REPLY_JSON_PACK (
+    connection,
+    MHD_HTTP_OK,
+    GNUNET_JSON_pack_data_auto ("wtid",
+                                wtid),
+    GNUNET_JSON_pack_time_abs ("execution_time",
+                               exec_time),
+    TALER_JSON_pack_amount ("coin_contribution",
+                            coin_contribution),
+    GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                &sig),
+    GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                &pub));
 }
 
 
@@ -279,12 +278,11 @@ handle_track_transaction_request (
                               &ctx))
     return mhd_ret;
   if (GNUNET_YES == ctx.pending)
-    return TALER_MHD_reply_json_pack (connection,
-                                      MHD_HTTP_ACCEPTED,
-                                      "{s:o}",
-                                      "execution_time",
-                                      GNUNET_JSON_from_time_abs (
-                                        ctx.execution_time));
+    return TALER_MHD_REPLY_JSON_PACK (
+      connection,
+      MHD_HTTP_ACCEPTED,
+      GNUNET_JSON_pack_time_abs ("execution_time",
+                                 ctx.execution_time));
   if (GNUNET_SYSERR == ctx.pending)
     return TALER_MHD_reply_with_error (connection,
                                        MHD_HTTP_INTERNAL_SERVER_ERROR,
diff --git a/src/exchange/taler-exchange-httpd_keys.c 
b/src/exchange/taler-exchange-httpd_keys.c
index b12a1e42..0cd61804 100644
--- a/src/exchange/taler-exchange-httpd_keys.c
+++ b/src/exchange/taler-exchange-httpd_keys.c
@@ -1074,12 +1074,11 @@ get_auditor_sigs (void *cls,
     GNUNET_break (0 ==
                   json_array_append_new (
                     ctx->denom_keys,
-                    json_pack (
-                      "{s:o, s:o}",
-                      "denom_pub_h",
-                      GNUNET_JSON_from_data_auto (h_denom_pub),
-                      "auditor_sig",
-                      GNUNET_JSON_from_data_auto (&as->asig))));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_data_auto ("denom_pub_h",
+                                                  h_denom_pub),
+                      GNUNET_JSON_pack_data_auto ("auditor_sig",
+                                                  &as->asig))));
   }
   return GNUNET_OK;
 }
@@ -1104,6 +1103,7 @@ auditor_info_cb (
   struct GetAuditorSigsContext ctx;
 
   ctx.denom_keys = json_array ();
+  GNUNET_assert (NULL != ctx.denom_keys);
   ctx.auditor_pub = auditor_pub;
   GNUNET_CONTAINER_multihashmap_iterate (ksh->denomkey_map,
                                          &get_auditor_sigs,
@@ -1111,15 +1111,15 @@ auditor_info_cb (
   GNUNET_break (0 ==
                 json_array_append_new (
                   ksh->auditors,
-                  json_pack ("{s:s, s:o, s:s, s:o}",
-                             "auditor_name",
-                             auditor_name,
-                             "auditor_pub",
-                             GNUNET_JSON_from_data_auto (auditor_pub),
-                             "auditor_url",
-                             auditor_url,
-                             "denomination_keys",
-                             ctx.denom_keys)));
+                  GNUNET_JSON_PACK (
+                    GNUNET_JSON_pack_string ("auditor_name",
+                                             auditor_name),
+                    GNUNET_JSON_pack_data_auto ("auditor_pub",
+                                                auditor_pub),
+                    GNUNET_JSON_pack_string ("auditor_url",
+                                             auditor_url),
+                    GNUNET_JSON_pack_array_steal ("denomination_keys",
+                                                  ctx.denom_keys))));
 }
 
 
@@ -1204,17 +1204,17 @@ add_sign_key_cb (void *cls,
     0 ==
     json_array_append_new (
       ctx->signkeys,
-      json_pack ("{s:o, s:o, s:o, s:o, s:o}",
-                 "stamp_start",
-                 GNUNET_JSON_from_time_abs (sk->meta.start),
-                 "stamp_expire",
-                 GNUNET_JSON_from_time_abs (sk->meta.expire_sign),
-                 "stamp_end",
-                 GNUNET_JSON_from_time_abs (sk->meta.expire_legal),
-                 "master_sig",
-                 GNUNET_JSON_from_data_auto (&sk->master_sig),
-                 "key",
-                 GNUNET_JSON_from_data_auto (&sk->exchange_pub))));
+      GNUNET_JSON_PACK (
+        GNUNET_JSON_pack_time_abs ("stamp_start",
+                                   sk->meta.start),
+        GNUNET_JSON_pack_time_abs ("stamp_expire",
+                                   sk->meta.expire_sign),
+        GNUNET_JSON_pack_time_abs ("stamp_end",
+                                   sk->meta.expire_legal),
+        GNUNET_JSON_pack_data_auto ("master_sig",
+                                    &sk->master_sig),
+        GNUNET_JSON_pack_data_auto ("key",
+                                    &sk->exchange_pub))));
   return GNUNET_OK;
 }
 
@@ -1266,9 +1266,9 @@ add_denom_key_cb (void *cls,
       0 ==
       json_array_append_new (
         dkc->recoup,
-        json_pack ("{s:o}",
-                   "h_denom_pub",
-                   GNUNET_JSON_from_data_auto (h_denom_pub))));
+        GNUNET_JSON_PACK (
+          GNUNET_JSON_pack_data_auto ("h_denom_pub",
+                                      h_denom_pub))));
   }
   else
   {
@@ -1440,23 +1440,29 @@ create_krd (struct TEH_KeyStateHandle *ksh,
                                                        ksh->signature_expires);
   }
 
-  keys = json_pack (
-    "{s:s, s:s, s:o, s:o, s:O, s:O,"
-    " s:O, s:O, s:o, s:o, s:o}",
-    /* 1-6 */
-    "version", EXCHANGE_PROTOCOL_VERSION,
-    "currency", TEH_currency,
-    "master_public_key", GNUNET_JSON_from_data_auto (&TEH_master_public_key),
-    "reserve_closing_delay", GNUNET_JSON_from_time_rel (
-      TEH_reserve_closing_delay),
-    "signkeys", signkeys,
-    "recoup", recoup,
-    /* 7-11 */
-    "denoms", denoms,
-    "auditors", ksh->auditors,
-    "list_issue_date", GNUNET_JSON_from_time_abs (last_cpd),
-    "eddsa_pub", GNUNET_JSON_from_data_auto (&exchange_pub),
-    "eddsa_sig", GNUNET_JSON_from_data_auto (&exchange_sig));
+  keys = GNUNET_JSON_PACK (
+    GNUNET_JSON_pack_string ("version",
+                             EXCHANGE_PROTOCOL_VERSION),
+    GNUNET_JSON_pack_string ("currency",
+                             TEH_currency),
+    GNUNET_JSON_pack_data_auto ("master_public_key",
+                                &TEH_master_public_key),
+    GNUNET_JSON_pack_time_rel ("reserve_closing_delay",
+                               TEH_reserve_closing_delay),
+    GNUNET_JSON_pack_array_incref ("signkeys",
+                                   signkeys),
+    GNUNET_JSON_pack_array_incref ("recoup",
+                                   recoup),
+    GNUNET_JSON_pack_array_incref ("denoms",
+                                   denoms),
+    GNUNET_JSON_pack_array_incref ("auditors",
+                                   ksh->auditors),
+    GNUNET_JSON_pack_time_abs ("list_issue_date",
+                               last_cpd),
+    GNUNET_JSON_pack_data_auto ("eddsa_pub",
+                                &exchange_pub),
+    GNUNET_JSON_pack_data_auto ("eddsa_sig",
+                                &exchange_sig));
   GNUNET_assert (NULL != keys);
 
   {
@@ -1601,34 +1607,29 @@ finish_keys_response (struct TEH_KeyStateHandle *ksh)
         0 ==
         json_array_append_new (
           denoms,
-          json_pack ("{s:o, s:o, s:o, s:o, s:o,"
-                     " s:o, s:o, s:o, s:o, s:o,"
-                     " s:o}",
-                     "master_sig",
-                     GNUNET_JSON_from_data_auto (&dk->master_sig),
-                     "stamp_start",
-                     GNUNET_JSON_from_time_abs (dk->meta.start),
-                     "stamp_expire_withdraw",
-                     GNUNET_JSON_from_time_abs (dk->meta.expire_withdraw),
-                     "stamp_expire_deposit",
-                     GNUNET_JSON_from_time_abs (dk->meta.expire_deposit),
-                     "stamp_expire_legal",
-                     GNUNET_JSON_from_time_abs (dk->meta.expire_legal),
-                     /* 5 entries until here */
-                     "denom_pub",
-                     GNUNET_JSON_from_rsa_public_key (
-                       dk->denom_pub.rsa_public_key),
-                     "value",
-                     TALER_JSON_from_amount (&dk->meta.value),
-                     "fee_withdraw",
-                     TALER_JSON_from_amount (&dk->meta.fee_withdraw),
-                     "fee_deposit",
-                     TALER_JSON_from_amount (&dk->meta.fee_deposit),
-                     "fee_refresh",
-                     TALER_JSON_from_amount (&dk->meta.fee_refresh),
-                     /* 10 entries until here */
-                     "fee_refund",
-                     TALER_JSON_from_amount (&dk->meta.fee_refund))));
+          GNUNET_JSON_PACK (
+            GNUNET_JSON_pack_data_auto ("master_sig",
+                                        &dk->master_sig),
+            GNUNET_JSON_pack_time_abs ("stamp_start",
+                                       dk->meta.start),
+            GNUNET_JSON_pack_time_abs ("stamp_expire_withdraw",
+                                       dk->meta.expire_withdraw),
+            GNUNET_JSON_pack_time_abs ("stamp_expire_deposit",
+                                       dk->meta.expire_deposit),
+            GNUNET_JSON_pack_time_abs ("stamp_expire_legal",
+                                       dk->meta.expire_legal),
+            GNUNET_JSON_pack_rsa_public_key ("denom_pub",
+                                             dk->denom_pub.rsa_public_key),
+            TALER_JSON_pack_amount ("value",
+                                    &dk->meta.value),
+            TALER_JSON_pack_amount ("fee_withdraw",
+                                    &dk->meta.fee_withdraw),
+            TALER_JSON_pack_amount ("fee_deposit",
+                                    &dk->meta.fee_deposit),
+            TALER_JSON_pack_amount ("fee_refresh",
+                                    &dk->meta.fee_refresh),
+            TALER_JSON_pack_amount ("fee_refund",
+                                    &dk->meta.fee_refund))));
     }
   }
   GNUNET_CONTAINER_heap_destroy (heap);
@@ -2400,36 +2401,31 @@ add_future_denomkey_cb (void *cls,
     0 ==
     json_array_append_new (
       fbc->denoms,
-      json_pack ("{s:o, s:o, s:o, s:o, s:o,"
-                 " s:o, s:o, s:o, s:o, s:o,"
-                 " s:o, s:s}",
-                 /* 1-5 */
-                 "value",
-                 TALER_JSON_from_amount (&meta.value),
-                 "stamp_start",
-                 GNUNET_JSON_from_time_abs (meta.start),
-                 "stamp_expire_withdraw",
-                 GNUNET_JSON_from_time_abs (meta.expire_withdraw),
-                 "stamp_expire_deposit",
-                 GNUNET_JSON_from_time_abs (meta.expire_deposit),
-                 "stamp_expire_legal",
-                 GNUNET_JSON_from_time_abs (meta.expire_legal),
-                 /* 6-10 */
-                 "denom_pub",
-                 GNUNET_JSON_from_rsa_public_key 
(hd->denom_pub.rsa_public_key),
-                 "fee_withdraw",
-                 TALER_JSON_from_amount (&meta.fee_withdraw),
-                 "fee_deposit",
-                 TALER_JSON_from_amount (&meta.fee_deposit),
-                 "fee_refresh",
-                 TALER_JSON_from_amount (&meta.fee_refresh),
-                 "fee_refund",
-                 TALER_JSON_from_amount (&meta.fee_refund),
-                 /* 11- */
-                 "denom_secmod_sig",
-                 GNUNET_JSON_from_data_auto (&hd->sm_sig),
-                 "section_name",
-                 hd->section_name)));
+      GNUNET_JSON_PACK (
+        TALER_JSON_pack_amount ("value",
+                                &meta.value),
+        GNUNET_JSON_pack_time_abs ("stamp_start",
+                                   meta.start),
+        GNUNET_JSON_pack_time_abs ("stamp_expire_withdraw",
+                                   meta.expire_withdraw),
+        GNUNET_JSON_pack_time_abs ("stamp_expire_deposit",
+                                   meta.expire_deposit),
+        GNUNET_JSON_pack_time_abs ("stamp_expire_legal",
+                                   meta.expire_legal),
+        GNUNET_JSON_pack_rsa_public_key ("denom_pub",
+                                         hd->denom_pub.rsa_public_key),
+        TALER_JSON_pack_amount ("fee_withdraw",
+                                &meta.fee_withdraw),
+        TALER_JSON_pack_amount ("fee_deposit",
+                                &meta.fee_deposit),
+        TALER_JSON_pack_amount ("fee_refresh",
+                                &meta.fee_refresh),
+        TALER_JSON_pack_amount ("fee_refund",
+                                &meta.fee_refund),
+        GNUNET_JSON_pack_data_auto ("denom_secmod_sig",
+                                    &hd->sm_sig),
+        GNUNET_JSON_pack_string ("section_name",
+                                 hd->section_name))));
   return GNUNET_OK;
 }
 
@@ -2469,17 +2465,17 @@ add_future_signkey_cb (void *cls,
   GNUNET_assert (0 ==
                  json_array_append_new (
                    fbc->signkeys,
-                   json_pack ("{s:o, s:o, s:o, s:o, s:o}",
-                              "key",
-                              GNUNET_JSON_from_data_auto (&hsk->exchange_pub),
-                              "stamp_start",
-                              GNUNET_JSON_from_time_abs (hsk->start_time),
-                              "stamp_expire",
-                              GNUNET_JSON_from_time_abs (stamp_expire),
-                              "stamp_end",
-                              GNUNET_JSON_from_time_abs (legal_end),
-                              "signkey_secmod_sig",
-                              GNUNET_JSON_from_data_auto (&hsk->sm_sig))));
+                   GNUNET_JSON_PACK (
+                     GNUNET_JSON_pack_data_auto ("key",
+                                                 &hsk->exchange_pub),
+                     GNUNET_JSON_pack_time_abs ("stamp_start",
+                                                hsk->start_time),
+                     GNUNET_JSON_pack_time_abs ("stamp_expire",
+                                                stamp_expire),
+                     GNUNET_JSON_pack_time_abs ("stamp_end",
+                                                legal_end),
+                     GNUNET_JSON_pack_data_auto ("signkey_secmod_sig",
+                                                 &hsk->sm_sig))));
   return GNUNET_OK;
 }
 
@@ -2516,18 +2512,17 @@ TEH_keys_management_get_handler (const struct 
TEH_RequestHandler *rh,
     GNUNET_CONTAINER_multipeermap_iterate (ksh->helpers->esign_keys,
                                            &add_future_signkey_cb,
                                            &fbc);
-    reply = json_pack (
-      "{s:o, s:o, s:o, s:o, s:o}",
-      "future_denoms",
-      fbc.denoms,
-      "future_signkeys",
-      fbc.signkeys,
-      "master_pub",
-      GNUNET_JSON_from_data_auto (&TEH_master_public_key),
-      "denom_secmod_public_key",
-      GNUNET_JSON_from_data_auto (&denom_sm_pub),
-      "signkey_secmod_public_key",
-      GNUNET_JSON_from_data_auto (&esign_sm_pub));
+    reply = GNUNET_JSON_PACK (
+      GNUNET_JSON_pack_array_steal ("future_denoms",
+                                    fbc.denoms),
+      GNUNET_JSON_pack_array_steal ("future_signkeys",
+                                    fbc.signkeys),
+      GNUNET_JSON_pack_data_auto ("master_pub",
+                                  &TEH_master_public_key),
+      GNUNET_JSON_pack_data_auto ("denom_secmod_public_key",
+                                  &denom_sm_pub),
+      GNUNET_JSON_pack_data_auto ("signkey_secmod_public_key",
+                                  &esign_sm_pub));
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 "Returning GET /management/keys response:\n");
     if (NULL == reply)
diff --git a/src/exchange/taler-exchange-httpd_link.c 
b/src/exchange/taler-exchange-httpd_link.c
index b93d2e71..a39e5864 100644
--- a/src/exchange/taler-exchange-httpd_link.c
+++ b/src/exchange/taler-exchange-httpd_link.c
@@ -81,15 +81,13 @@ handle_link_data (void *cls,
   {
     json_t *obj;
 
-    obj = json_pack ("{s:o, s:o, s:o}",
-                     "denom_pub",
-                     GNUNET_JSON_from_rsa_public_key (
-                       pos->denom_pub.rsa_public_key),
-                     "ev_sig",
-                     GNUNET_JSON_from_rsa_signature
-                       (pos->ev_sig.rsa_signature),
-                     "link_sig",
-                     GNUNET_JSON_from_data_auto (&pos->orig_coin_link_sig));
+    obj = GNUNET_JSON_PACK (
+      GNUNET_JSON_pack_rsa_public_key ("denom_pub",
+                                       pos->denom_pub.rsa_public_key),
+      GNUNET_JSON_pack_rsa_signature ("ev_sig",
+                                      pos->ev_sig.rsa_signature),
+      GNUNET_JSON_pack_data_auto ("link_sig",
+                                  &pos->orig_coin_link_sig));
     if ( (NULL == obj) ||
          (0 !=
           json_array_append_new (list,
@@ -102,11 +100,11 @@ handle_link_data (void *cls,
   {
     json_t *root;
 
-    root = json_pack ("{s:o, s:o}",
-                      "new_coins",
-                      list,
-                      "transfer_pub",
-                      GNUNET_JSON_from_data_auto (transfer_pub));
+    root = GNUNET_JSON_PACK (
+      GNUNET_JSON_pack_array_steal ("new_coins",
+                                    list),
+      GNUNET_JSON_pack_data_auto ("transfer_pub",
+                                  transfer_pub));
     if ( (NULL == root) ||
          (0 !=
           json_array_append_new (ctx->mlist,
diff --git a/src/exchange/taler-exchange-httpd_melt.c 
b/src/exchange/taler-exchange-httpd_melt.c
index 8e51a417..42780826 100644
--- a/src/exchange/taler-exchange-httpd_melt.c
+++ b/src/exchange/taler-exchange-httpd_melt.c
@@ -66,24 +66,24 @@ reply_melt_insufficient_funds (
                                        MHD_HTTP_INTERNAL_SERVER_ERROR,
                                        
TALER_EC_EXCHANGE_MELT_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS,
                                        NULL);
-  return TALER_MHD_reply_json_pack (
+  return TALER_MHD_REPLY_JSON_PACK (
     connection,
     MHD_HTTP_CONFLICT,
-    "{s:s, s:I, s:o, s:o, s:o, s:o, s:o}",
-    "hint",
-    TALER_ErrorCode_get_hint (TALER_EC_EXCHANGE_MELT_INSUFFICIENT_FUNDS),
-    "code",
-    (json_int_t) TALER_EC_EXCHANGE_MELT_INSUFFICIENT_FUNDS,
-    "coin_pub",
-    GNUNET_JSON_from_data_auto (coin_pub),
-    "original_value",
-    TALER_JSON_from_amount (coin_value),
-    "residual_value",
-    TALER_JSON_from_amount (residual),
-    "requested_value",
-    TALER_JSON_from_amount (requested),
-    "history",
-    history);
+    GNUNET_JSON_pack_string ("hint",
+                             TALER_ErrorCode_get_hint (
+                               TALER_EC_EXCHANGE_MELT_INSUFFICIENT_FUNDS)),
+    GNUNET_JSON_pack_uint64 ("code",
+                             TALER_EC_EXCHANGE_MELT_INSUFFICIENT_FUNDS),
+    GNUNET_JSON_pack_data_auto ("coin_pub",
+                                coin_pub),
+    TALER_JSON_pack_amount ("original_value",
+                            coin_value),
+    TALER_JSON_pack_amount ("residual_value",
+                            residual),
+    TALER_JSON_pack_amount ("requested_value",
+                            requested),
+    GNUNET_JSON_pack_array_steal ("history",
+                                  history));
 }
 
 
@@ -119,13 +119,15 @@ reply_melt_success (struct MHD_Connection *connection,
                                     ec,
                                     NULL);
   }
-  return TALER_MHD_reply_json_pack (
+  return TALER_MHD_REPLY_JSON_PACK (
     connection,
     MHD_HTTP_OK,
-    "{s:i, s:o, s:o}",
-    "noreveal_index", (int) noreveal_index,
-    "exchange_sig", GNUNET_JSON_from_data_auto (&sig),
-    "exchange_pub", GNUNET_JSON_from_data_auto (&pub));
+    GNUNET_JSON_pack_uint64 ("noreveal_index",
+                             noreveal_index),
+    GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                &sig),
+    GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                &pub));
 }
 
 
diff --git a/src/exchange/taler-exchange-httpd_recoup.c 
b/src/exchange/taler-exchange-httpd_recoup.c
index 991b16e2..521b7562 100644
--- a/src/exchange/taler-exchange-httpd_recoup.c
+++ b/src/exchange/taler-exchange-httpd_recoup.c
@@ -490,20 +490,20 @@ verify_and_execute_recoup (struct MHD_Connection 
*connection,
   }
   /* Recoup succeeded, return result */
   return (refreshed)
-         ? TALER_MHD_reply_json_pack (connection,
+         ? TALER_MHD_REPLY_JSON_PACK (connection,
                                       MHD_HTTP_OK,
-                                      "{s:o, s:b}",
-                                      "old_coin_pub",
-                                      GNUNET_JSON_from_data_auto (
+                                      GNUNET_JSON_pack_data_auto (
+                                        "old_coin_pub",
                                         &pc.target.old_coin_pub),
-                                      "refreshed", 1)
-         : TALER_MHD_reply_json_pack (connection,
+                                      GNUNET_JSON_pack_bool ("refreshed",
+                                                             true))
+         : TALER_MHD_REPLY_JSON_PACK (connection,
                                       MHD_HTTP_OK,
-                                      "{s:o, s:b}",
-                                      "reserve_pub",
-                                      GNUNET_JSON_from_data_auto (
+                                      GNUNET_JSON_pack_data_auto (
+                                        "reserve_pub",
                                         &pc.target.reserve_pub),
-                                      "refreshed", 0);
+                                      GNUNET_JSON_pack_bool ("refreshed",
+                                                             false));
 }
 
 
diff --git a/src/exchange/taler-exchange-httpd_refreshes_reveal.c 
b/src/exchange/taler-exchange-httpd_refreshes_reveal.c
index 4fbc949e..5cbb6e6c 100644
--- a/src/exchange/taler-exchange-httpd_refreshes_reveal.c
+++ b/src/exchange/taler-exchange-httpd_refreshes_reveal.c
@@ -60,51 +60,26 @@ reply_refreshes_reveal_success (struct MHD_Connection 
*connection,
   json_t *list;
 
   list = json_array ();
-  if (NULL == list)
-  {
-    GNUNET_break (0);
-    return TALER_MHD_reply_with_error (connection,
-                                       MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                       
TALER_EC_GENERIC_JSON_ALLOCATION_FAILURE,
-                                       "json_array() call failed");
-  }
+  GNUNET_assert (NULL != list);
   for (unsigned int freshcoin_index = 0;
        freshcoin_index < num_freshcoins;
        freshcoin_index++)
   {
     json_t *obj;
 
-    obj = json_pack ("{s:o}",
-                     "ev_sig",
-                     GNUNET_JSON_from_rsa_signature (
-                       sigs[freshcoin_index].rsa_signature));
-    if (NULL == obj)
-    {
-      json_decref (list);
-      GNUNET_break (0);
-      return TALER_MHD_reply_with_error (connection,
-                                         MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                         
TALER_EC_GENERIC_JSON_ALLOCATION_FAILURE,
-                                         "json_pack() failed");
-    }
-    if (0 !=
-        json_array_append_new (list,
-                               obj))
-    {
-      json_decref (list);
-      GNUNET_break (0);
-      return TALER_MHD_reply_with_error (connection,
-                                         MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                         
TALER_EC_GENERIC_JSON_ALLOCATION_FAILURE,
-                                         "json_array_append_new() failed");
-    }
+    obj = GNUNET_JSON_PACK (
+      GNUNET_JSON_pack_rsa_signature ("ev_sig",
+                                      sigs[freshcoin_index].rsa_signature));
+    GNUNET_assert (0 ==
+                   json_array_append_new (list,
+                                          obj));
   }
 
-  return TALER_MHD_reply_json_pack (connection,
-                                    MHD_HTTP_OK,
-                                    "{s:o}",
-                                    "ev_sigs",
-                                    list);
+  return TALER_MHD_REPLY_JSON_PACK (
+    connection,
+    MHD_HTTP_OK,
+    GNUNET_JSON_pack_array_steal ("ev_sigs",
+                                  list));
 }
 
 
@@ -409,18 +384,16 @@ refreshes_reveal_transaction (void *cls,
                             &rc_expected))
     {
       GNUNET_break_op (0);
-      *mhd_ret = TALER_MHD_reply_json_pack (
+      *mhd_ret = TALER_MHD_REPLY_JSON_PACK (
         connection,
         MHD_HTTP_CONFLICT,
-        "{s:s, s:I, s:o}",
-        "hint",
-        TALER_ErrorCode_get_hint (
-          TALER_EC_EXCHANGE_REFRESHES_REVEAL_COMMITMENT_VIOLATION),
-        "code",
-        (json_int_t) TALER_EC_EXCHANGE_REFRESHES_REVEAL_COMMITMENT_VIOLATION,
-        "rc_expected",
-        GNUNET_JSON_from_data_auto (
-          &rc_expected));
+        GNUNET_JSON_pack_string ("hint",
+                                 TALER_ErrorCode_get_hint (
+                                   
TALER_EC_EXCHANGE_REFRESHES_REVEAL_COMMITMENT_VIOLATION)),
+        GNUNET_JSON_pack_uint64 ("code",
+                                 
TALER_EC_EXCHANGE_REFRESHES_REVEAL_COMMITMENT_VIOLATION),
+        GNUNET_JSON_pack_data_auto ("rc_expected",
+                                    &rc_expected));
       return GNUNET_DB_STATUS_HARD_ERROR;
     }
   } /* end of checking "rc_expected" */
diff --git a/src/exchange/taler-exchange-httpd_refund.c 
b/src/exchange/taler-exchange-httpd_refund.c
index 35b179be..c2b2d800 100644
--- a/src/exchange/taler-exchange-httpd_refund.c
+++ b/src/exchange/taler-exchange-httpd_refund.c
@@ -71,12 +71,13 @@ reply_refund_success (struct MHD_Connection *connection,
                                     ec,
                                     NULL);
   }
-  return TALER_MHD_reply_json_pack (
+  return TALER_MHD_REPLY_JSON_PACK (
     connection,
     MHD_HTTP_OK,
-    "{s:o, s:o}",
-    "exchange_sig", GNUNET_JSON_from_data_auto (&sig),
-    "exchange_pub", GNUNET_JSON_from_data_auto (&pub));
+    GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                &sig),
+    GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                &pub));
 }
 
 
@@ -227,18 +228,20 @@ refund_transaction (void *cls,
           TEH_plugin->free_coin_transaction_list (TEH_plugin->cls,
                                                   tln);
           tli->next = NULL;
-          *mhd_ret = TALER_MHD_reply_json_pack (
+          *mhd_ret = TALER_MHD_REPLY_JSON_PACK (
             connection,
             MHD_HTTP_PRECONDITION_FAILED,
-            "{s:o, s:s, s:I, s:o}",
-            "detail",
-            TALER_JSON_from_amount (&ref->refund_amount),
-            "hint", TALER_ErrorCode_get_hint (
-              TALER_EC_EXCHANGE_REFUND_INCONSISTENT_AMOUNT),
-            "code", (json_int_t) TALER_EC_EXCHANGE_REFUND_INCONSISTENT_AMOUNT,
-            "history", TEH_RESPONSE_compile_transaction_history (
-              &refund->coin.coin_pub,
-              tli));
+            TALER_JSON_pack_amount ("detail",
+                                    &ref->refund_amount),
+            GNUNET_JSON_pack_string ("hint",
+                                     TALER_ErrorCode_get_hint (
+                                       
TALER_EC_EXCHANGE_REFUND_INCONSISTENT_AMOUNT)),
+            GNUNET_JSON_pack_uint64 ("code",
+                                     
TALER_EC_EXCHANGE_REFUND_INCONSISTENT_AMOUNT),
+            GNUNET_JSON_pack_array_steal ("history",
+                                          
TEH_RESPONSE_compile_transaction_history (
+                                            &refund->coin.coin_pub,
+                                            tli)));
           TEH_plugin->free_coin_transaction_list (TEH_plugin->cls,
                                                   tli);
           return GNUNET_DB_STATUS_HARD_ERROR;
@@ -324,20 +327,20 @@ refund_transaction (void *cls,
   if (1 == TALER_amount_cmp (&refund_total,
                              &deposit_total) )
   {
-    *mhd_ret = TALER_MHD_reply_json_pack (
+    *mhd_ret = TALER_MHD_REPLY_JSON_PACK (
       connection,
       MHD_HTTP_CONFLICT,
-      "{s:s, s:s, s:I, s:o}",
-      "detail",
-      "total amount refunded exceeds total amount deposited for this coin",
-      "hint",
-      TALER_ErrorCode_get_hint (
-        TALER_EC_EXCHANGE_REFUND_CONFLICT_DEPOSIT_INSUFFICIENT),
-      "code",
-      (json_int_t) TALER_EC_EXCHANGE_REFUND_CONFLICT_DEPOSIT_INSUFFICIENT,
-      "history",
-      TEH_RESPONSE_compile_transaction_history (&refund->coin.coin_pub,
-                                                tlx));
+      GNUNET_JSON_pack_string ("detail",
+                               "total amount refunded exceeds total amount 
deposited for this coin"),
+      GNUNET_JSON_pack_string ("hint",
+                               TALER_ErrorCode_get_hint (
+                                 
TALER_EC_EXCHANGE_REFUND_CONFLICT_DEPOSIT_INSUFFICIENT)),
+      GNUNET_JSON_pack_uint64 ("code",
+                               
TALER_EC_EXCHANGE_REFUND_CONFLICT_DEPOSIT_INSUFFICIENT),
+      GNUNET_JSON_pack_array_steal ("history",
+                                    TEH_RESPONSE_compile_transaction_history (
+                                      &refund->coin.coin_pub,
+                                      tlx)));
     TEH_plugin->free_coin_transaction_list (TEH_plugin->cls,
                                             tlx);
     return GNUNET_DB_STATUS_HARD_ERROR;
diff --git a/src/exchange/taler-exchange-httpd_reserves_get.c 
b/src/exchange/taler-exchange-httpd_reserves_get.c
index b901afbb..6ad393a2 100644
--- a/src/exchange/taler-exchange-httpd_reserves_get.c
+++ b/src/exchange/taler-exchange-httpd_reserves_get.c
@@ -40,7 +40,6 @@ static MHD_RESULT
 reply_reserve_history_success (struct MHD_Connection *connection,
                                const struct TALER_EXCHANGEDB_ReserveHistory 
*rh)
 {
-  json_t *json_balance;
   json_t *json_history;
   struct TALER_Amount balance;
 
@@ -51,12 +50,13 @@ reply_reserve_history_success (struct MHD_Connection 
*connection,
                                        MHD_HTTP_INTERNAL_SERVER_ERROR,
                                        
TALER_EC_GENERIC_JSON_ALLOCATION_FAILURE,
                                        NULL);
-  json_balance = TALER_JSON_from_amount (&balance);
-  return TALER_MHD_reply_json_pack (connection,
-                                    MHD_HTTP_OK,
-                                    "{s:o, s:o}",
-                                    "balance", json_balance,
-                                    "history", json_history);
+  return TALER_MHD_REPLY_JSON_PACK (
+    connection,
+    MHD_HTTP_OK,
+    TALER_JSON_pack_amount ("balance",
+                            &balance),
+    GNUNET_JSON_pack_array_steal ("history",
+                                  json_history));
 }
 
 
diff --git a/src/exchange/taler-exchange-httpd_responses.c 
b/src/exchange/taler-exchange-httpd_responses.c
index 40c7fd7e..e05b537e 100644
--- a/src/exchange/taler-exchange-httpd_responses.c
+++ b/src/exchange/taler-exchange-httpd_responses.c
@@ -381,25 +381,25 @@ TEH_RESPONSE_compile_transaction_history (
         if (0 !=
             json_array_append_new (
               history,
-              json_pack ("{s:s, s:o, s:o, s:o, s:o, s:o, s:o, s:o, s:o}",
-                         "type",
-                         "RECOUP-REFRESH",
-                         "amount",
-                         TALER_JSON_from_amount (&pr->value),
-                         "exchange_sig",
-                         GNUNET_JSON_from_data_auto (&esig),
-                         "exchange_pub",
-                         GNUNET_JSON_from_data_auto (&epub),
-                         "old_coin_pub",
-                         GNUNET_JSON_from_data_auto (&pr->old_coin_pub),
-                         "h_denom_pub",
-                         GNUNET_JSON_from_data_auto (&pr->coin.denom_pub_hash),
-                         "coin_sig",
-                         GNUNET_JSON_from_data_auto (&pr->coin_sig),
-                         "coin_blind",
-                         GNUNET_JSON_from_data_auto (&pr->coin_blind),
-                         "timestamp",
-                         GNUNET_JSON_from_time_abs (pr->timestamp))))
+              GNUNET_JSON_PACK (
+                GNUNET_JSON_pack_string ("type",
+                                         "RECOUP-REFRESH"),
+                TALER_JSON_pack_amount ("amount",
+                                        &pr->value),
+                GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                            &esig),
+                GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                            &epub),
+                GNUNET_JSON_pack_data_auto ("old_coin_pub",
+                                            &pr->old_coin_pub),
+                GNUNET_JSON_pack_data_auto ("h_denom_pub",
+                                            &pr->coin.denom_pub_hash),
+                GNUNET_JSON_pack_data_auto ("coin_sig",
+                                            &pr->coin_sig),
+                GNUNET_JSON_pack_data_auto ("coin_blind",
+                                            &pr->coin_blind),
+                GNUNET_JSON_pack_time_abs ("timestamp",
+                                           pr->timestamp))))
         {
           GNUNET_break (0);
           json_decref (history);
@@ -447,20 +447,19 @@ TEH_RESPONSE_reply_unknown_denom_pub_hash (
                                        ec,
                                        NULL);
   }
-  return TALER_MHD_reply_json_pack (
+  return TALER_MHD_REPLY_JSON_PACK (
     connection,
     MHD_HTTP_NOT_FOUND,
-    "{s:I,s:o,s:o,s:o,s:o}",
-    "code",
-    TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN,
-    "timestamp",
-    GNUNET_JSON_from_time_abs (now),
-    "exchange_pub",
-    GNUNET_JSON_from_data_auto (&epub),
-    "exchange_sig",
-    GNUNET_JSON_from_data_auto (&esig),
-    "h_denom_pub",
-    GNUNET_JSON_from_data_auto (dph));
+    GNUNET_JSON_pack_uint64 ("code",
+                             
TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN),
+    GNUNET_JSON_pack_time_abs ("timestamp",
+                               now),
+    GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                &epub),
+    GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                &esig),
+    GNUNET_JSON_pack_data_auto ("h_denom_pub",
+                                dph));
 }
 
 
@@ -499,22 +498,21 @@ TEH_RESPONSE_reply_expired_denom_pub_hash (
                                        ec,
                                        NULL);
   }
-  return TALER_MHD_reply_json_pack (
+  return TALER_MHD_REPLY_JSON_PACK (
     connection,
     MHD_HTTP_GONE,
-    "{s:I,s:s,s:o,s:o,s:o,s:o}",
-    "code",
-    ec,
-    "oper",
-    oper,
-    "timestamp",
-    GNUNET_JSON_from_time_abs (now),
-    "exchange_pub",
-    GNUNET_JSON_from_data_auto (&epub),
-    "exchange_sig",
-    GNUNET_JSON_from_data_auto (&esig),
-    "h_denom_pub",
-    GNUNET_JSON_from_data_auto (dph));
+    GNUNET_JSON_pack_uint64 ("code",
+                             ec),
+    GNUNET_JSON_pack_string ("oper",
+                             oper),
+    GNUNET_JSON_pack_time_abs ("timestamp",
+                               now),
+    GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                &epub),
+    GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                &esig),
+    GNUNET_JSON_pack_data_auto ("h_denom_pub",
+                                dph));
 }
 
 
@@ -549,12 +547,15 @@ TEH_RESPONSE_reply_coin_insufficient_funds (
                                        
TALER_EC_GENERIC_JSON_ALLOCATION_FAILURE,
                                        "Failed to generated proof of 
insufficient funds");
   }
-  return TALER_MHD_reply_json_pack (connection,
-                                    MHD_HTTP_CONFLICT,
-                                    "{s:s, s:I, s:o}",
-                                    "hint", TALER_ErrorCode_get_hint (ec),
-                                    "code", (json_int_t) ec,
-                                    "history", history);
+  return TALER_MHD_REPLY_JSON_PACK (
+    connection,
+    MHD_HTTP_CONFLICT,
+    GNUNET_JSON_pack_string ("hint",
+                             TALER_ErrorCode_get_hint (ec)),
+    GNUNET_JSON_pack_uint64 ("code",
+                             ec),
+    GNUNET_JSON_pack_array_steal ("history",
+                                  history));
 }
 
 
@@ -612,17 +613,17 @@ TEH_RESPONSE_compile_reserve_history (
         if (0 !=
             json_array_append_new (
               json_history,
-              json_pack ("{s:s, s:o, s:s, s:I, s:o}",
-                         "type",
-                         "CREDIT",
-                         "timestamp",
-                         GNUNET_JSON_from_time_abs (bank->execution_date),
-                         "sender_account_url",
-                         bank->sender_account_details,
-                         "wire_reference",
-                         (json_int_t) bank->wire_reference,
-                         "amount",
-                         TALER_JSON_from_amount (&bank->amount))))
+              GNUNET_JSON_PACK (
+                GNUNET_JSON_pack_string ("type",
+                                         "CREDIT"),
+                GNUNET_JSON_pack_time_abs ("timestamp",
+                                           bank->execution_date),
+                GNUNET_JSON_pack_string ("sender_account_url",
+                                         bank->sender_account_details),
+                GNUNET_JSON_pack_uint64 ("wire_reference",
+                                         bank->wire_reference),
+                TALER_JSON_pack_amount ("amount",
+                                        &bank->amount))))
         {
           GNUNET_break (0);
           json_decref (json_history);
@@ -657,20 +658,19 @@ TEH_RESPONSE_compile_reserve_history (
         if (0 !=
             json_array_append_new (
               json_history,
-              json_pack ("{s:s, s:o, s:o, s:o, s:o, s:o}",
-                         "type",
-                         "WITHDRAW",
-                         "reserve_sig",
-                         GNUNET_JSON_from_data_auto (&withdraw->reserve_sig),
-                         "h_coin_envelope",
-                         GNUNET_JSON_from_data_auto (
-                           &withdraw->h_coin_envelope),
-                         "h_denom_pub",
-                         GNUNET_JSON_from_data_auto 
(&withdraw->denom_pub_hash),
-                         "withdraw_fee",
-                         TALER_JSON_from_amount (&withdraw->withdraw_fee),
-                         "amount",
-                         TALER_JSON_from_amount (&value))))
+              GNUNET_JSON_PACK (
+                GNUNET_JSON_pack_string ("type",
+                                         "WITHDRAW"),
+                GNUNET_JSON_pack_data_auto ("reserve_sig",
+                                            &withdraw->reserve_sig),
+                GNUNET_JSON_pack_data_auto ("h_coin_envelope",
+                                            &withdraw->h_coin_envelope),
+                GNUNET_JSON_pack_data_auto ("h_denom_pub",
+                                            &withdraw->denom_pub_hash),
+                TALER_JSON_pack_amount ("withdraw_fee",
+                                        &withdraw->withdraw_fee),
+                TALER_JSON_pack_amount ("amount",
+                                        &value))))
         {
           GNUNET_break (0);
           json_decref (json_history);
@@ -722,21 +722,21 @@ TEH_RESPONSE_compile_reserve_history (
         }
 
         if (0 !=
-            json_array_append_new (json_history,
-                                   json_pack ("{s:s, s:o, s:o, s:o, s:o, s:o}",
-                                              "type", "RECOUP",
-                                              "exchange_pub",
-                                              GNUNET_JSON_from_data_auto 
(&pub),
-                                              "exchange_sig",
-                                              GNUNET_JSON_from_data_auto 
(&sig),
-                                              "timestamp",
-                                              GNUNET_JSON_from_time_abs (
-                                                recoup->timestamp),
-                                              "amount", TALER_JSON_from_amount 
(
-                                                &recoup->value),
-                                              "coin_pub",
-                                              GNUNET_JSON_from_data_auto (
-                                                &recoup->coin.coin_pub))))
+            json_array_append_new (
+              json_history,
+              GNUNET_JSON_PACK (
+                GNUNET_JSON_pack_string ("type",
+                                         "RECOUP"),
+                GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                            &pub),
+                GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                            &sig),
+                GNUNET_JSON_pack_time_abs ("timestamp",
+                                           recoup->timestamp),
+                TALER_JSON_pack_amount ("amount",
+                                        &recoup->value),
+                GNUNET_JSON_pack_data_auto ("coin_pub",
+                                            &recoup->coin.coin_pub))))
         {
           GNUNET_break (0);
           json_decref (json_history);
@@ -799,24 +799,23 @@ TEH_RESPONSE_compile_reserve_history (
         if (0 !=
             json_array_append_new (
               json_history,
-              json_pack (
-                "{s:s, s:s, s:o, s:o, s:o, s:o, s:o, s:o}",
-                "type",
-                "CLOSING",
-                "receiver_account_details",
-                closing->receiver_account_details,
-                "wtid",
-                GNUNET_JSON_from_data_auto (&closing->wtid),
-                "exchange_pub",
-                GNUNET_JSON_from_data_auto (&pub),
-                "exchange_sig",
-                GNUNET_JSON_from_data_auto (&sig),
-                "timestamp",
-                GNUNET_JSON_from_time_abs (closing->execution_date),
-                "amount",
-                TALER_JSON_from_amount (&value),
-                "closing_fee",
-                TALER_JSON_from_amount (&closing->closing_fee))))
+              GNUNET_JSON_PACK (
+                GNUNET_JSON_pack_string ("type",
+                                         "CLOSING"),
+                GNUNET_JSON_pack_string ("receiver_account_details",
+                                         closing->receiver_account_details),
+                GNUNET_JSON_pack_data_auto ("wtid",
+                                            &closing->wtid),
+                GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                            &pub),
+                GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                            &sig),
+                GNUNET_JSON_pack_time_abs ("timestamp",
+                                           closing->execution_date),
+                TALER_JSON_pack_amount ("amount",
+                                        &value),
+                TALER_JSON_pack_amount ("closing_fee",
+                                        &closing->closing_fee))))
         {
           GNUNET_break (0);
           json_decref (json_history);
diff --git a/src/exchange/taler-exchange-httpd_transfers_get.c 
b/src/exchange/taler-exchange-httpd_transfers_get.c
index 578b9428..c4e276cc 100644
--- a/src/exchange/taler-exchange-httpd_transfers_get.c
+++ b/src/exchange/taler-exchange-httpd_transfers_get.c
@@ -99,17 +99,9 @@ reply_transfer_details (struct MHD_Connection *connection,
   struct TALER_ExchangePublicKeyP pub;
   struct TALER_ExchangeSignatureP sig;
 
-
   GNUNET_TIME_round_abs (&exec_time);
   deposits = json_array ();
-  if (NULL == deposits)
-  {
-    return TALER_MHD_reply_with_error (connection,
-                                       MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                       
TALER_EC_GENERIC_JSON_ALLOCATION_FAILURE,
-                                       "json_array() failed");
-
-  }
+  GNUNET_assert (NULL != deposits);
   hash_context = GNUNET_CRYPTO_hash_context_start ();
   for (const struct AggregatedDepositDetail *wdd_pos = wdd_head;
        NULL != wdd_pos;
@@ -126,20 +118,17 @@ reply_transfer_details (struct MHD_Connection *connection,
                                      &dd,
                                      sizeof (struct TALER_WireDepositDetailP));
     if (0 !=
-        json_array_append_new (deposits,
-                               json_pack ("{s:o, s:o, s:o, s:o}",
-                                          "h_contract_terms",
-                                          GNUNET_JSON_from_data_auto (
-                                            &wdd_pos->h_contract_terms),
-                                          "coin_pub",
-                                          GNUNET_JSON_from_data_auto (
-                                            &wdd_pos->coin_pub),
-                                          "deposit_value",
-                                          TALER_JSON_from_amount (
-                                            &wdd_pos->deposit_value),
-                                          "deposit_fee",
-                                          TALER_JSON_from_amount (
-                                            &wdd_pos->deposit_fee))))
+        json_array_append_new (
+          deposits,
+          GNUNET_JSON_PACK (
+            GNUNET_JSON_pack_data_auto ("h_contract_terms",
+                                        &wdd_pos->h_contract_terms),
+            GNUNET_JSON_pack_data_auto ("coin_pub",
+                                        &wdd_pos->coin_pub),
+            TALER_JSON_pack_amount ("deposit_value",
+                                    &wdd_pos->deposit_value),
+            TALER_JSON_pack_amount ("deposit_fee",
+                                    &wdd_pos->deposit_fee))))
     {
       json_decref (deposits);
       GNUNET_CRYPTO_hash_context_abort (hash_context);
@@ -174,24 +163,25 @@ reply_transfer_details (struct MHD_Connection *connection,
     }
   }
 
-  return TALER_MHD_reply_json_pack (connection,
-                                    MHD_HTTP_OK,
-                                    "{s:o, s:o, s:o, s:o, s:o, s:o, s:o, s:o}",
-                                    "total", TALER_JSON_from_amount (total),
-                                    "wire_fee", TALER_JSON_from_amount (
-                                      wire_fee),
-                                    "merchant_pub",
-                                    GNUNET_JSON_from_data_auto (
-                                      merchant_pub),
-                                    "h_wire", GNUNET_JSON_from_data_auto (
-                                      h_wire),
-                                    "execution_time",
-                                    GNUNET_JSON_from_time_abs (exec_time),
-                                    "deposits", deposits,
-                                    "exchange_sig",
-                                    GNUNET_JSON_from_data_auto (&sig),
-                                    "exchange_pub",
-                                    GNUNET_JSON_from_data_auto (&pub));
+  return TALER_MHD_REPLY_JSON_PACK (
+    connection,
+    MHD_HTTP_OK,
+    TALER_JSON_pack_amount ("total",
+                            total),
+    TALER_JSON_pack_amount ("wire_fee",
+                            wire_fee),
+    GNUNET_JSON_pack_data_auto ("merchant_pub",
+                                merchant_pub),
+    GNUNET_JSON_pack_data_auto ("h_wire",
+                                h_wire),
+    GNUNET_JSON_pack_time_abs ("execution_time",
+                               exec_time),
+    GNUNET_JSON_pack_array_steal ("deposits",
+                                  deposits),
+    GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                &sig),
+    GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                &pub));
 }
 
 
diff --git a/src/exchange/taler-exchange-httpd_wire.c 
b/src/exchange/taler-exchange-httpd_wire.c
index 20fecd49..f919303a 100644
--- a/src/exchange/taler-exchange-httpd_wire.c
+++ b/src/exchange/taler-exchange-httpd_wire.c
@@ -134,11 +134,11 @@ add_wire_account (void *cls,
   if (0 !=
       json_array_append_new (
         a,
-        json_pack ("{s:s, s:o}",
-                   "payto_uri",
-                   payto_uri,
-                   "master_sig",
-                   GNUNET_JSON_from_data_auto (master_sig))))
+        GNUNET_JSON_PACK (
+          GNUNET_JSON_pack_string ("payto_uri",
+                                   payto_uri),
+          GNUNET_JSON_pack_data_auto ("master_sig",
+                                      master_sig))))
   {
     GNUNET_break (0);   /* out of memory!? */
     return;
@@ -170,17 +170,17 @@ add_wire_fee (void *cls,
   if (0 !=
       json_array_append_new (
         a,
-        json_pack ("{s:o, s:o, s:o, s:o, s:o}",
-                   "wire_fee",
-                   TALER_JSON_from_amount (wire_fee),
-                   "closing_fee",
-                   TALER_JSON_from_amount (closing_fee),
-                   "start_date",
-                   GNUNET_JSON_from_time_abs (start_date),
-                   "end_date",
-                   GNUNET_JSON_from_time_abs (end_date),
-                   "sig",
-                   GNUNET_JSON_from_data_auto (master_sig))))
+        GNUNET_JSON_PACK (
+          TALER_JSON_pack_amount ("wire_fee",
+                                  wire_fee),
+          TALER_JSON_pack_amount ("closing_fee",
+                                  closing_fee),
+          GNUNET_JSON_pack_time_abs ("start_date",
+                                     start_date),
+          GNUNET_JSON_pack_time_abs ("end_date",
+                                     end_date),
+          GNUNET_JSON_pack_data_auto ("sig",
+                                      master_sig))))
   {
     GNUNET_break (0);   /* out of memory!? */
     return;
@@ -283,14 +283,13 @@ build_wire_state (void)
     json_t *wire_reply;
     struct WireStateHandle *wsh;
 
-    wire_reply = json_pack (
-      "{s:o, s:o, s:o}",
-      "accounts",
-      wire_accounts_array,
-      "fees",
-      wire_fee_object,
-      "master_public_key",
-      GNUNET_JSON_from_data_auto (&TEH_master_public_key));
+    wire_reply = GNUNET_JSON_PACK (
+      GNUNET_JSON_pack_array_steal ("accounts",
+                                    wire_accounts_array),
+      GNUNET_JSON_pack_object_steal ("fees",
+                                     wire_fee_object),
+      GNUNET_JSON_pack_data_auto ("master_public_key",
+                                  &TEH_master_public_key));
     if (NULL == wire_reply)
     {
       GNUNET_break (0);
diff --git a/src/exchange/taler-exchange-httpd_withdraw.c 
b/src/exchange/taler-exchange-httpd_withdraw.c
index 5c484653..a5e6db0a 100644
--- a/src/exchange/taler-exchange-httpd_withdraw.c
+++ b/src/exchange/taler-exchange-httpd_withdraw.c
@@ -78,18 +78,18 @@ reply_withdraw_insufficient_funds (
                                        TALER_EC_GENERIC_DB_INVARIANT_FAILURE,
                                        "reserve balance corrupt");
   }
-  return TALER_MHD_reply_json_pack (
+  return TALER_MHD_REPLY_JSON_PACK (
     connection,
     MHD_HTTP_CONFLICT,
-    "{s:s, s:I, s:o, s:o}",
-    "hint",
-    TALER_ErrorCode_get_hint (TALER_EC_EXCHANGE_WITHDRAW_INSUFFICIENT_FUNDS),
-    "code",
-    (json_int_t) TALER_EC_EXCHANGE_WITHDRAW_INSUFFICIENT_FUNDS,
-    "balance",
-    TALER_JSON_from_amount (&balance),
-    "history",
-    json_history);
+    GNUNET_JSON_pack_string ("hint",
+                             TALER_ErrorCode_get_hint (
+                               TALER_EC_EXCHANGE_WITHDRAW_INSUFFICIENT_FUNDS)),
+    GNUNET_JSON_pack_uint64 ("code",
+                             TALER_EC_EXCHANGE_WITHDRAW_INSUFFICIENT_FUNDS),
+    TALER_JSON_pack_amount ("balance",
+                            &balance),
+    GNUNET_JSON_pack_array_steal ("history",
+                                  json_history));
 }
 
 
@@ -523,12 +523,11 @@ TEH_handler_withdraw (const struct TEH_RequestHandler *rh,
   {
     MHD_RESULT ret;
 
-    ret = TALER_MHD_reply_json_pack (
+    ret = TALER_MHD_REPLY_JSON_PACK (
       connection,
       MHD_HTTP_OK,
-      "{s:o}",
-      "ev_sig", GNUNET_JSON_from_rsa_signature (
-        wc.collectable.sig.rsa_signature));
+      GNUNET_JSON_pack_rsa_signature ("ev_sig",
+                                      wc.collectable.sig.rsa_signature));
     GNUNET_CRYPTO_rsa_signature_free (wc.collectable.sig.rsa_signature);
     return ret;
   }
diff --git a/src/testing/testing_api_helpers_exchange.c 
b/src/testing/testing_api_helpers_exchange.c
index 3fa2d416..bc301d77 100644
--- a/src/testing/testing_api_helpers_exchange.c
+++ b/src/testing/testing_api_helpers_exchange.c
@@ -41,21 +41,27 @@ TALER_TESTING_cleanup_files (const char *config_name)
 }
 
 
-int
-TALER_TESTING_cleanup_files_cfg (void *cls,
-                                 const struct GNUNET_CONFIGURATION_Handle *cfg)
+/**
+ * Remove @a option directory from @a section in @a cfg.
+ *
+ * @return #GNUNET_OK on success
+ */
+static enum GNUNET_GenericReturnValue
+remove_dir (const struct GNUNET_CONFIGURATION_Handle *cfg,
+            const char *section,
+            const char *option)
 {
   char *dir;
 
   if (GNUNET_OK !=
       GNUNET_CONFIGURATION_get_value_filename (cfg,
-                                               "exchange",
-                                               "KEYDIR",
+                                               section,
+                                               option,
                                                &dir))
   {
     GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                               "exchange",
-                               "KEYDIR");
+                               section,
+                               option);
     return GNUNET_SYSERR;
   }
   if (GNUNET_YES ==
@@ -64,23 +70,24 @@ TALER_TESTING_cleanup_files_cfg (void *cls,
     GNUNET_break (GNUNET_OK ==
                   GNUNET_DISK_directory_remove (dir));
   GNUNET_free (dir);
+  return GNUNET_OK;
+}
+
+
+int
+TALER_TESTING_cleanup_files_cfg (void *cls,
+                                 const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
   if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_filename (cfg,
-                                               "exchange",
-                                               "REVOCATION_DIR",
-                                               &dir))
-  {
-    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                               "exchange",
-                               "REVOCATION_DIR");
+      remove_dir (cfg,
+                  "taler-exchange-secmod-eddsa",
+                  "KEY_DIR"))
+    return GNUNET_SYSERR;
+  if (GNUNET_OK !=
+      remove_dir (cfg,
+                  "taler-exchange-secmod-rsa",
+                  "KEY_DIR"))
     return GNUNET_SYSERR;
-  }
-  if (GNUNET_YES ==
-      GNUNET_DISK_directory_test (dir,
-                                  GNUNET_NO))
-    GNUNET_break (GNUNET_OK ==
-                  GNUNET_DISK_directory_remove (dir));
-  GNUNET_free (dir);
   return GNUNET_OK;
 }
 

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