From 189adf52eb96de135d531f53389ecce2d791268d Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 8 Aug 2015 21:46:26 +0200 Subject: finshing json parsing support for /refresh/melt handling --- src/mint-lib/mint_api_json.c | 75 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) (limited to 'src/mint-lib/mint_api_json.c') diff --git a/src/mint-lib/mint_api_json.c b/src/mint-lib/mint_api_json.c index 8b0b5437..b1517394 100644 --- a/src/mint-lib/mint_api_json.c +++ b/src/mint-lib/mint_api_json.c @@ -253,6 +253,37 @@ parse_json (json_t *root, } break; + case MAJ_CMD_UINT16: + { + json_int_t val; + + if (! json_is_integer (pos)) + { + GNUNET_break_op (0); + return i; + } + val = json_integer_value (pos); + if ( (0 > val) || (val > UINT16_MAX) ) + { + GNUNET_break_op (0); + return i; + } + *spec[i].details.u16 = (uint16_t) val; + } + break; + + case MAJ_CMD_JSON_OBJECT: + { + if (! (json_is_object (pos) || json_is_array (pos)) ) + { + GNUNET_break_op (0); + return i; + } + json_incref (pos); + *spec[i].details.obj = pos; + } + break; + default: GNUNET_break (0); return i; @@ -307,6 +338,10 @@ parse_free (struct MAJ_Specification *spec, GNUNET_free (*spec[i].details.eddsa_signature.purpose_p); *spec[i].details.eddsa_signature.purpose_p = NULL; break; + case MAJ_CMD_JSON_OBJECT: + json_decref (*spec[i].details.obj); + *spec[i].details.obj = NULL; + break; default: GNUNET_break (0); break; @@ -417,6 +452,46 @@ MAJ_spec_amount (const char *name, } +/** + * 16-bit integer. + * + * @param name name of the JSON field + * @param[out] u16 where to store the integer found under @a name + */ +struct MAJ_Specification +MAJ_spec_uint16 (const char *name, + uint16_t *u16) +{ + struct MAJ_Specification ret = + { + .cmd = MAJ_CMD_UINT16, + .field = name, + .details.u16 = u16 + }; + return ret; +} + + +/** + * JSON object. + * + * @param name name of the JSON field + * @param[out] jsonp where to store the JSON found under @a name + */ +struct MAJ_Specification +MAJ_spec_json (const char *name, + json_t **jsonp) +{ + struct MAJ_Specification ret = + { + .cmd = MAJ_CMD_JSON_OBJECT, + .field = name, + .details.obj = jsonp + }; + return ret; +} + + /** * Specification for parsing an RSA public key. * -- cgit v1.2.3