summaryrefslogtreecommitdiffstats
path: root/src/set_elem.c
diff options
context:
space:
mode:
authorArturo Borrero <arturo.borrero.glez@gmail.com>2014-01-07 12:47:21 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2014-01-08 00:14:18 +0100
commit2c21b41889abf93ff816b82b59e6bf2d4a084a61 (patch)
tree1c74371285d2ce2fba1a95d2498367046fff01e4 /src/set_elem.c
parent7cf3f99d7a4673644dd56984dc418daae48c6dd9 (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/set_elem.c')
-rw-r--r--src/set_elem.c21
1 files changed, 21 insertions, 0 deletions
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;