Skip to content

Commit

Permalink
xhttp_rpc: fix array printing
Browse files Browse the repository at this point in the history
(cherry picked from commit 41754b6)
  • Loading branch information
ovidiusas committed Nov 16, 2017
1 parent 7dbd698 commit f0395bf
Showing 1 changed file with 59 additions and 3 deletions.
62 changes: 59 additions & 3 deletions src/modules/xhttp_rpc/xhttp_rpc.c
Expand Up @@ -564,6 +564,62 @@ static int rpc_struct_add(struct rpc_data_struct* rpc_s, char* fmt, ...)
}


/** Adds a new member to array.
*/
static int rpc_array_add(struct rpc_data_struct* rpc_s, char* fmt, ...)
{
va_list ap;
void **void_ptr;
rpc_ctx_t *ctx = rpc_s->ctx;
struct rpc_data_struct *ds, *s;

if (!ctx) {
LM_ERR("Invalid context\n");
return -1;
}
if (!ctx->data_structs) {
LM_ERR("Invalid structs\n");
return -1;
}
s = ds = ctx->data_structs;
ctx->struc_depth = 0;
while (s) {
if (s == rpc_s) {
if (s->next) {
free_data_struct(s->next);
s->next = NULL;
}
break;
}
ctx->struc_depth++;
ds = s;
s = s->next;
}
if (!s)
s = ds;
va_start(ap, fmt);
while(*fmt) {
if (*fmt == '{' || *fmt == '[') {
void_ptr = va_arg(ap, void**);
ds = new_data_struct(ctx);
if (!ds) goto err;
s->next = ds;
*void_ptr = ds;
if (0!=xhttp_rpc_build_content(ctx, NULL, NULL))
goto err;
} else {
if (print_value(ctx, *fmt, &ap, NULL) < 0) goto err;
}
fmt++;
}
va_end(ap);
return 0;
err:
va_end(ap);
return -1;
}


static int rpc_struct_scan(struct rpc_data_struct* rpc_s, char* fmt, ...)
{
LM_ERR("Not implemented\n");
Expand Down Expand Up @@ -670,8 +726,7 @@ static int mod_init(void)
func_param.scan = (rpc_scan_f)rpc_scan;
func_param.rpl_printf = (rpc_rpl_printf_f)rpc_rpl_printf;
func_param.struct_add = (rpc_struct_add_f)rpc_struct_add;
/* use rpc_struct_add for array_add */
func_param.array_add = (rpc_struct_add_f)rpc_struct_add;
func_param.array_add = (rpc_array_add_f)rpc_array_add;
func_param.struct_scan = (rpc_struct_scan_f)rpc_struct_scan;
func_param.struct_printf = (rpc_struct_printf_f)rpc_struct_printf;
func_param.capabilities = (rpc_capabilities_f)rpc_capabilities;
Expand Down Expand Up @@ -866,4 +921,5 @@ int mod_register(char *path, int *dlflags, void *p1, void *p2)
{
sr_kemi_modules_add(sr_kemi_xhttp_rpc_exports);
return 0;
}
}

0 comments on commit f0395bf

Please sign in to comment.