diff options
author | Arturo Borrero <arturo.borrero.glez@gmail.com> | 2014-01-07 12:47:21 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-01-08 00:14:18 +0100 |
commit | 2c21b41889abf93ff816b82b59e6bf2d4a084a61 (patch) | |
tree | 1c74371285d2ce2fba1a95d2498367046fff01e4 /src | |
parent | 7cf3f99d7a4673644dd56984dc418daae48c6dd9 (diff) |
set_elem: add json parsing to API
Add missing support in the API function to parse a JSON set_elem.
I've renamed the main JSON parsing function to prevent clashing.
Signed-off-by: Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/internal.h | 4 | ||||
-rw-r--r-- | src/jansson.c | 4 | ||||
-rw-r--r-- | src/set.c | 3 | ||||
-rw-r--r-- | src/set_elem.c | 21 |
4 files changed, 27 insertions, 5 deletions
diff --git a/src/internal.h b/src/internal.h index 9ef505f..5fef6d6 100644 --- a/src/internal.h +++ b/src/internal.h @@ -105,8 +105,8 @@ int nft_jansson_data_reg_parse(json_t *root, const char *node_name, union nft_data_reg *data_reg, struct nft_parse_err *err); struct nft_set_elem; -int nft_set_elem_json_parse(struct nft_set_elem *e, json_t *root, - struct nft_parse_err *err); +int nft_jansson_set_elem_parse(struct nft_set_elem *e, json_t *root, + struct nft_parse_err *err); struct nft_table; int nft_jansson_parse_table(struct nft_table *t, json_t *tree, struct nft_parse_err *err); diff --git a/src/jansson.c b/src/jansson.c index 54a56b9..e62116b 100644 --- a/src/jansson.c +++ b/src/jansson.c @@ -244,8 +244,8 @@ int nft_jansson_data_reg_parse(json_t *root, const char *node_name, } } -int nft_set_elem_json_parse(struct nft_set_elem *e, json_t *root, - struct nft_parse_err *err) +int nft_jansson_set_elem_parse(struct nft_set_elem *e, json_t *root, + struct nft_parse_err *err) { uint32_t uval32; int set_elem_data; @@ -357,7 +357,8 @@ int nft_jansson_parse_set(struct nft_set *s, json_t *tree, if (json_elem == NULL) goto err; - if (nft_set_elem_json_parse(elem, json_elem, err) < 0) + if (nft_jansson_set_elem_parse(elem, + json_elem, err) < 0) goto err; list_add_tail(&elem->head, &s->element_list); diff --git a/src/set_elem.c b/src/set_elem.c index 7365aff..14bf6f4 100644 --- a/src/set_elem.c +++ b/src/set_elem.c @@ -414,6 +414,24 @@ static int nft_set_elem_xml_parse(struct nft_set_elem *e, const char *xml, #endif } +static int nft_set_elem_json_parse(struct nft_set_elem *e, const void *json, + struct nft_parse_err *err) +{ +#ifdef JSON_PARSING + json_t *tree; + json_error_t error; + + tree = nft_jansson_create_root(json, &error, err); + if (tree == NULL) + return -1; + + return nft_jansson_set_elem_parse(e, tree, err); +#else + errno = EOPNOTSUPP; + return -1; +#endif +} + int nft_set_elem_parse(struct nft_set_elem *e, enum nft_parse_type type, const char *data, struct nft_parse_err *err) { @@ -423,6 +441,9 @@ int nft_set_elem_parse(struct nft_set_elem *e, case NFT_PARSE_XML: ret = nft_set_elem_xml_parse(e, data, err); break; + case NFT_PARSE_JSON: + ret = nft_set_elem_json_parse(e, data, err); + break; default: errno = EOPNOTSUPP; ret = -1; |