gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-mdb] 08/93: json parsing and creating now done with libjann


From: gnunet
Subject: [taler-taler-mdb] 08/93: json parsing and creating now done with libjannson
Date: Mon, 18 Nov 2019 21:12:31 +0100

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

marco-boss pushed a commit to branch master
in repository taler-mdb.

commit a02a3a4b5b706e23c2f8cb2f34c463c5a1800733
Author: BOSS_Marco <address@hidden>
AuthorDate: Thu Oct 31 14:03:38 2019 +0100

    json parsing and creating now done with libjannson
---
 src/communication.c | 48 ++++++++++++++++++++++--------------------------
 src/communication.h |  2 +-
 src/configuration.h | 15 +++++++++++++++
 src/main.c          |  7 +++++++
 src/product.c       | 42 +++++++++++++++++++++++++++++-------------
 src/wallet.c        |  1 +
 src/wallet.h        | 12 ------------
 7 files changed, 75 insertions(+), 52 deletions(-)

diff --git a/src/communication.c b/src/communication.c
index 63a21b5..f9ddcc0 100644
--- a/src/communication.c
+++ b/src/communication.c
@@ -90,12 +90,12 @@ int taler_create_order_req( ProductOrder *product )
     char amountStr[ strlen(product->currency) + strlen(product->amount) + 2 ];
     sprintf( amountStr, "%s:%s", product->currency, product->amount );
 
-    // create the fullfillment ur, e.g. 
"taler://fulfillment-success/Enjoy+your+ice+cream!"; ( +2 because of '!' and 
'\0' )
-    char fullfillmentUrl[ strlen(FULLFILLMENT_URL) + strlen(FULLFILLMENT_MSG) 
+ strlen(product->product) + 2 ];
-    sprintf( fullfillmentUrl, "%s%s%s!", FULLFILLMENT_URL, FULLFILLMENT_MSG, 
product->product );
+    // create the fulfillment ur, e.g. 
"taler://fulfillment-success/Enjoy+your+ice+cream!"; ( +2 because of '!' and 
'\0' )
+    char fulfillmentUrl[ strlen(FULLFILLMENT_URL) + strlen(FULLFILLMENT_MSG) + 
strlen(product->product) + 2 ];
+    sprintf( fulfillmentUrl, "%s%s%s!", FULLFILLMENT_URL, FULLFILLMENT_MSG, 
product->product );
 
     // create the json object for the order request
-    json_t *orderReq = json_pack( "{ s: { s:s, s:s, s:s }}", "order", 
"summary", product->product, "amount", amountStr, "fullfilment_url", 
fullfillmentUrl );
+    json_t *orderReq = json_pack( "{ s: { s:s, s:s, s:s }}", "order", 
"summary", product->product, "amount", amountStr, "fulfillment_url", 
fulfillmentUrl );
     if( !orderReq ){
         printf( "taler_create_order_req: error creating json object\n" );
         return EXIT_FAILURE;
@@ -120,6 +120,7 @@ int taler_create_order_req( ProductOrder *product )
     // print the created order request and free the json object
     printf( "Created order Request: \n" );
     json_dumpf( orderReq, stdout, JSON_INDENT(2) );
+    printf("\n");
     json_delete( orderReq );
 
     // free the allocated buffer from json_dumps
@@ -164,6 +165,9 @@ int taler_create_order( CURL *curl, ProductOrder *product )
     // clean up
     curl_slist_free_all( list );
 
+
+    printf("%s\n", product->response->string );
+
     return EXIT_SUCCESS;
 }
 
@@ -203,48 +207,40 @@ int taler_check_payment_status( CURL *curl, ProductOrder 
*product )
     return EXIT_SUCCESS;
 }
 
-int taler_parse_json( const TalerResponse *response, const char *memberName, 
char **returnStr, bool isBoolean )
+int taler_parse_json( const TalerResponse *response, const char *memberName, 
char **returnStr )
 {
     if( !(*returnStr) )
         taler_alloc_string( returnStr, 1 );
-    char *result = NULL;
-    char *temp = NULL;
-    char mbr[64];
 
     json_error_t error;
-    json_t *root = json_loads( response->string, JSON_DISABLE_EOF_CHECK, 
&error );
+    json_t *root = NULL;
+    root = json_loads( response->string, JSON_DISABLE_EOF_CHECK, &error );
     if( !root ){
         printf("taler_parse_json: %s\n", error.text );
         return EXIT_FAILURE;
     }
-    if( isBoolean ){
-        // If the wanted member is of type boolean
-        sprintf( mbr, "\"%s\": true", memberName );
-        if( (temp = strstr( response->string, mbr)) != NULL )
-            result = "true";
-        else
-            result = "false";
-    }else{
-        // String type members
-        sprintf( mbr, "\"%s\":", memberName );
-        if( (temp = strstr( response->string, mbr )) != NULL ){
-            if( (temp = strstr( response->string, ": ")) != NULL ){
-                result = strtok( temp, "\"");
-                result = strtok( NULL, "\"");
-            }
-        }
+
+    char *result = NULL;
+    if( json_unpack( root, "{s:s}", memberName, &result ) < 0 ){
+        printf( "taler_parse_json: no member named \"%s\" found!\n", 
memberName );
+        json_decref( root );
+        return EXIT_FAILURE;
     }
     if( !result ){
-        printf( "taler_parse_json: no member named \"%s\" found!\n\n", 
memberName );
+        printf( "taler_parse_json: no member named \"%s\" found!\n", 
memberName );
+        json_decref( root );
         return EXIT_FAILURE;
     }
+    char *temp = NULL;
     temp = realloc( *returnStr, strlen(result) + 1 );
     if( !temp ){
         printf( "taler_parse_json: could not allocate memory for member\n" );
+        json_decref( root );
         return EXIT_FAILURE;
     }
     *returnStr = temp;
     strcpy( *returnStr, result );
+    json_decref( root );
 
     return EXIT_SUCCESS;
 }
diff --git a/src/communication.h b/src/communication.h
index 91cef87..1283d1e 100644
--- a/src/communication.h
+++ b/src/communication.h
@@ -47,6 +47,6 @@ int taler_create_order (CURL *curl, ProductOrder *product);
 int taler_check_payment_status (CURL *curl, ProductOrder *product);
 
 int taler_parse_json (const TalerResponse *response, const char *memberName,
-                      char **returnStr, bool isBoolean);
+                      char **returnStr);
 
 #endif // COMM_H
diff --git a/src/configuration.h b/src/configuration.h
index 897f0c3..fb7c721 100644
--- a/src/configuration.h
+++ b/src/configuration.h
@@ -26,6 +26,9 @@ along with
 #ifndef URL_H
 #define URL_H
 
+#include <stdio.h>
+#include <inttypes.h>
+
 static const char* const ORDER = "/order";
 static const char* const CHECK = "/check-payment";
 
@@ -41,4 +44,16 @@ static const char*const JSON_PAID = "paid";
 static const char*const JSON_PAY_URI = "taler_pay_uri";
 static const char*const JSON_ORDER_ID = "order_id";
 
+
+// New AID
+// static uint8_t taler_aid[] = { 0xF0, 0x00, 0x54, 0x41, 0x4c, 0x45, 0x52 };
+
+// Demo AID until uptade
+static const uint8_t taler_aid[] = { 0xA0, 0x00, 0x00, 0x02, 0x47, 0x10, 0x01 
};
+
+// APDU commands
+#define APDU_SUCCESS "\x90\x00"
+static const uint8_t select_file[] = { 0x00, 0xA4, 0x04, 0x00, 0x07 };
+static const uint8_t put_data[] = { 0x00, 0xDA, 0x01, 0x00, 0x7c, 0x01 };
+
 #endif // URL_H
diff --git a/src/main.c b/src/main.c
index 8fff739..73c3014 100644
--- a/src/main.c
+++ b/src/main.c
@@ -151,11 +151,18 @@ int main (  )
     }
     printf ("Order no.: %s paid!\n\n", product.orderID);
 
+
+    // -----------------
+    // Here comes the code for releasing the product
+    // -----------------
+
+
     // send cancel request to nfc thread
     while ( pthread_cancel (nfcThread) != 0 )
     {
       printf ("Error sending cancel request to thread for nfc transmission");
     }
+
     void*res;
     if ( pthread_join (nfcThread, &res) == 0 )
     {
diff --git a/src/product.c b/src/product.c
index 7c361e7..c9d921e 100644
--- a/src/product.c
+++ b/src/product.c
@@ -26,6 +26,7 @@ the attributes.
 */
 
 #include <string.h>
+#include <jansson.h>
 
 #include "product.h"
 #include "configuration.h"
@@ -109,26 +110,41 @@ int product_set_check_url (ProductOrder *product)
 int product_set_order_id (ProductOrder *product)
 {
   return taler_parse_json (product->response, JSON_ORDER_ID,
-                           &(product->orderID), false);
+                           &(product->orderID));
 }
 
 int product_set_pay_url (ProductOrder *product)
 {
-  return taler_parse_json (product->response, JSON_PAY_URI, &(product->payUrl),
-                           false);
+  return taler_parse_json (product->response, JSON_PAY_URI, 
&(product->payUrl));
 }
 
 int product_set_paid_status (ProductOrder *product)
 {
-  char *temp = NULL;
-  if ( taler_alloc_string (&temp, 1) == EXIT_SUCCESS )
-  {
-    taler_parse_json (product->response, JSON_PAID, &temp, true);
-    if ( strcmp (temp, "true") == 0 )
-      product->paid = true;
-    free (temp);
-    return EXIT_SUCCESS;
-  }
+    json_error_t error;
+    json_t *root = NULL;
+    root = json_loads( product->response->string, JSON_DISABLE_EOF_CHECK, 
&error );
+    if( !root ){
+        printf("taler_parse_json: %s\n", error.text );
+        return EXIT_FAILURE;
+    }
+
+    // extract the boolean value of paid out of the json object
+    int b = -1;
+    if ( json_unpack( root, "{s:b}", JSON_PAID, &b ) < 0 ){
+        printf("taler_parse_json: no value \"%s\" found!\n", JSON_PAID );
+        json_decref( root );
+        return EXIT_FAILURE;
+    }
+
+    json_decref(root);
+
+    // set the paid status to true or false
+    if( b == true || b == false ){
+        product->paid = b;
+    }else{
+       printf( "product_set_paid_status: json parsing failed\n" );
+       return EXIT_FAILURE;
+    }
 
-  return EXIT_FAILURE;
+  return EXIT_SUCCESS;
 }
diff --git a/src/wallet.c b/src/wallet.c
index 1233223..24f34c8 100644
--- a/src/wallet.c
+++ b/src/wallet.c
@@ -28,6 +28,7 @@ along with
 #include <string.h>
 
 #include "wallet.h"
+#include "configuration.h"
 
 
 int wallet_select_aid (nfc_device *pnd)
diff --git a/src/wallet.h b/src/wallet.h
index 885645c..9268335 100644
--- a/src/wallet.h
+++ b/src/wallet.h
@@ -29,20 +29,8 @@ along with
 #include <nfc/nfc.h>
 
 
-// New AID
-// static uint8_t taler_aid[] = { 0xF0, 0x00, 0x54, 0x41, 0x4c, 0x45, 0x52 };
-
-// Demo AID until uptade
-static const uint8_t taler_aid[] = { 0xA0, 0x00, 0x00, 0x02, 0x47, 0x10, 0x01 
};
-
 #define TRANSMIT_TIMEOUT 500
 
-// APDU commands
-#define APDU_SUCCESS "\x90\x00"
-static const uint8_t select_file[] = { 0x00, 0xA4, 0x04, 0x00, 0x07 };
-static const uint8_t put_data[] = { 0x00, 0xDA, 0x01, 0x00, 0x7c, 0x01 };
-
-
 
 int wallet_select_aid (nfc_device *pnd);
 

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

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