[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.
- [taler-taler-mdb] branch master updated (345aeee -> a267c2d), gnunet, 2019/11/18
- [taler-taler-mdb] 05/93: reindent code to coding style, gnunet, 2019/11/18
- [taler-taler-mdb] 06/93: updated .gitignore, gnunet, 2019/11/18
- [taler-taler-mdb] 02/93: add bootstrap and uncrustify logic, gnunet, 2019/11/18
- [taler-taler-mdb] 08/93: json parsing and creating now done with libjannson,
gnunet <=
- [taler-taler-mdb] 03/93: fix nfc and other build issues, gnunet, 2019/11/18
- [taler-taler-mdb] 07/93: first includes of libjansson, gnunet, 2019/11/18
- [taler-taler-mdb] 11/93: fix nfc and other build issues, gnunet, 2019/11/18
- [taler-taler-mdb] 04/93: initial indenting, gnunet, 2019/11/18
- [taler-taler-mdb] 01/93: revisit build system, except for libnfc should work, gnunet, 2019/11/18
- [taler-taler-mdb] 09/93: revisit build system, except for libnfc should work, gnunet, 2019/11/18
- [taler-taler-mdb] 13/93: reindent code to coding style, gnunet, 2019/11/18
- [taler-taler-mdb] 16/93: merged jsonIntegrity, gnunet, 2019/11/18
- [taler-taler-mdb] 25/93: no curl here, gnunet, 2019/11/18
- [taler-taler-mdb] 21/93: product.h uncrustified, gnunet, 2019/11/18