restconf plugins and figthing with xml->json translation

This commit is contained in:
Olof Hagsand 2016-09-26 21:44:17 +02:00
parent 64f197cb00
commit 3443dbd33f
9 changed files with 117 additions and 51 deletions

View file

@ -244,7 +244,7 @@ xml2json1_cbuf(cbuf *cb,
if (xml2json1_cbuf(cb, xc, level+1, pretty) < 0)
goto done;
if (i<xml_child_nr(x)-1){
cprintf(cb, ",", list);
cprintf(cb, ",");
cprintf(cb, "%s", pretty?"\n":"");
}
}
@ -312,8 +312,32 @@ xml2json1_cbuf(cbuf *cb,
int
xml2json_cbuf(cbuf *cb,
cxobj *x,
int pretty,
int top)
int pretty)
{
int retval = 1;
int level = 0;
cprintf(cb, "%*s{%s",
pretty?(level*JSON_INDENT):0,"",
pretty?"\n":"");
if (xml2json1_cbuf(cb, x, level+1, pretty) < 0)
goto done;
cprintf(cb, "%*s}%s",
pretty?(level*JSON_INDENT):0,"",
pretty?"\n":"");
retval = 0;
done:
return retval;
}
/*!
* @note can be a problem with vector since xml2json1_cbuf checks parents
*/
int
xml2json_cbuf_vec(cbuf *cb,
cxobj **vec,
size_t veclen,
int pretty)
{
int retval = 1;
int level = 0;
@ -323,15 +347,16 @@ xml2json_cbuf(cbuf *cb,
cprintf(cb, "%*s{%s",
pretty?(level*JSON_INDENT):0,"",
pretty?"\n":"");
if (top){
if (xml2json1_cbuf(cb, x, level+1, pretty) < 0)
for (i=0; i<veclen; i++){
xc = vec[i];
if (xml2json1_cbuf(cb, xc, level, pretty) < 0)
goto done;
}
else{
for (i=0; i<xml_child_nr(x); i++){
xc = xml_child_i(x, i);
if (xml2json1_cbuf(cb, xc, level+1, pretty) < 0)
goto done;
if (i<veclen-1){
if (xml_type(xc)==CX_BODY)
cprintf(cb, "},{");
else
cprintf(cb, ",");
cprintf(cb, "%s", pretty?"\n":"");
}
}
cprintf(cb, "%*s}%s",
@ -358,8 +383,7 @@ xml2json_cbuf(cbuf *cb,
int
xml2json(FILE *f,
cxobj *x,
int pretty,
int top)
int pretty)
{
int retval = 1;
cbuf *cb = NULL;
@ -368,7 +392,7 @@ xml2json(FILE *f,
clicon_err(OE_XML, errno, "cbuf_new");
goto done;
}
if (xml2json_cbuf(cb, x, pretty, top) < 0)
if (xml2json_cbuf(cb, x, pretty) < 0)
goto done;
fprintf(f, "%s", cbuf_get(cb));
retval = 0;

View file

@ -579,6 +579,7 @@ get(char *dbname,
char *arg;
cbuf *cb;
// clicon_debug(1, "%s xkey:%s val:%s", __FUNCTION__, xk, val);
x = xt;
if (xk == NULL || *xk!='/'){
clicon_err(OE_DB, 0, "Invalid key: %s", xk);
@ -700,7 +701,7 @@ get(char *dbname,
xml_type_set(x, CX_BODY);
xml_value_set(x, val);
}
if(debug){
if(debug>1){
fprintf(stderr, "%s %s\n", __FUNCTION__, xk);
clicon_xml2file(stderr, xt, 0, 1);
}
@ -811,10 +812,9 @@ xmldb_get_tree(char *dbname,
goto done;
if ((xt = xml_new("clicon", NULL)) == NULL)
goto done;
if (debug) /* debug */
for (i = 0; i < npairs; i++)
fprintf(stderr, "%s %s\n", pairs[i].dp_key, pairs[i].dp_val?pairs[i].dp_val:"");
for (i = 0; i < npairs; i++)
clicon_debug(2, "%s %s", pairs[i].dp_key, pairs[i].dp_val?pairs[i].dp_val:"");
// clicon_debug(1, "%s npairs:%d", __FUNCTION__, npairs);
for (i = 0; i < npairs; i++) {
if (get(dbname,
yspec,
@ -953,6 +953,7 @@ xmldb_get_local(clicon_handle h,
yang_spec *yspec;
char *dbname = NULL;
clicon_debug(1, "%s", __FUNCTION__);
if (db2file(h, db, &dbname) < 0)
goto done;
if (dbname==NULL){
@ -1019,6 +1020,7 @@ xmldb_get(clicon_handle h,
{
int retval = -1;
clicon_debug(1, "%s", __FUNCTION__);
if (clicon_xmldb_rpc(h))
retval = xmldb_get_rpc(h, db, xpath, vector, xtop, xvec, xlen);
else
@ -1422,7 +1424,7 @@ xmldb_put_tree_local(clicon_handle h,
}
retval = 0;
done:
clicon_debug(1, "%s retval:%d", __FUNCTION__, retval);
// clicon_debug(1, "%s retval:%d", __FUNCTION__, retval);
if (filename)
free(filename);
if (ckey)