Module: kamailio
Branch: master
Commit: 0252969c39ccda27c8cd78a9a4ad58d0f2b77354
URL:
https://github.com/kamailio/kamailio/commit/0252969c39ccda27c8cd78a9a4ad58d…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2017-01-06T15:10:25+01:00
ctl: proper handling of rpc array type in response
---
Modified: src/modules/ctl/binrpc_run.c
---
Diff:
https://github.com/kamailio/kamailio/commit/0252969c39ccda27c8cd78a9a4ad58d…
Patch:
https://github.com/kamailio/kamailio/commit/0252969c39ccda27c8cd78a9a4ad58d…
---
diff --git a/src/modules/ctl/binrpc_run.c b/src/modules/ctl/binrpc_run.c
index 4adad72..0f4f1a5 100644
--- a/src/modules/ctl/binrpc_run.c
+++ b/src/modules/ctl/binrpc_run.c
@@ -974,12 +974,18 @@ static int rpc_add(struct binrpc_ctx* ctx, char* fmt, ...)
break;
case '{':
case '[':
- err=binrpc_start_struct(&ctx->out.pkt);
+ if(*fmt == '{')
+ err=binrpc_start_struct(&ctx->out.pkt);
+ else
+ err=binrpc_start_array(&ctx->out.pkt);
if (err<0) goto error_add;
rs=new_rpc_struct();
if (rs==0) goto error_mem;
rs->offset=binrpc_pkt_len(&ctx->out.pkt);
- err=binrpc_end_struct(&ctx->out.pkt);
+ if(*fmt == '{')
+ err=binrpc_end_struct(&ctx->out.pkt);
+ else
+ err=binrpc_end_array(&ctx->out.pkt);
if (err<0) goto error_add;
clist_append(&ctx->out.structs, rs, next, prev);
*(va_arg(ap, void**))=rs;
@@ -1080,7 +1086,10 @@ static int rpc_struct_add(struct rpc_struct_l* s, char* fmt, ...)
break;
case '{':
case '[':
- avp.type=BINRPC_T_STRUCT;
+ if(*fmt == '{')
+ avp.type=BINRPC_T_STRUCT;
+ else
+ avp.type=BINRPC_T_ARRAY;
err=binrpc_addavp(&s->pkt, &avp);
if (err<0){
LM_ERR("failed to add attribute-value (%c)\n", *fmt);
@@ -1092,7 +1101,10 @@ static int rpc_struct_add(struct rpc_struct_l* s, char* fmt, ...)
goto error_mem;
}
rs->offset=binrpc_pkt_len(&s->pkt);
- err=binrpc_end_struct(&s->pkt);
+ if(*fmt == '{')
+ err=binrpc_end_struct(&s->pkt);
+ else
+ err=binrpc_end_array(&s->pkt);
if (err<0) {
LM_ERR("failed to end struct (%c)\n", *fmt);
goto error_add;
@@ -1156,12 +1168,18 @@ static int rpc_array_add(struct rpc_struct_l* s, char* fmt, ...)
break;
case '{':
case '[':
- err=binrpc_start_struct(&s->pkt);
+ if(*fmt == '{')
+ err=binrpc_start_struct(&s->pkt);
+ else
+ err=binrpc_start_array(&s->pkt);
if (err<0) goto error_add;
rs=new_rpc_struct();
if (rs==0) goto error_mem;
rs->offset=binrpc_pkt_len(&s->pkt);
- err=binrpc_end_struct(&s->pkt);
+ if(*fmt == '{')
+ err=binrpc_end_struct(&s->pkt);
+ else
+ err=binrpc_end_array(&s->pkt);
if (err<0) goto error_add;
clist_append(&s->substructs, rs, next, prev);
*(va_arg(ap, void**))=rs;