Module: kamailio Branch: master Commit: a69c42f830dae5c7b14b03c56c47229f0b85f6c5 URL: https://github.com/kamailio/kamailio/commit/a69c42f830dae5c7b14b03c56c47229f...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2023-09-13T15:39:30+02:00
pv: added function to serialize xavps with quited str values
---
Modified: src/modules/pv/pv.c
---
Diff: https://github.com/kamailio/kamailio/commit/a69c42f830dae5c7b14b03c56c47229f... Patch: https://github.com/kamailio/kamailio/commit/a69c42f830dae5c7b14b03c56c47229f...
---
diff --git a/src/modules/pv/pv.c b/src/modules/pv/pv.c index 3a905593dc7..73c309da6e3 100644 --- a/src/modules/pv/pv.c +++ b/src/modules/pv/pv.c @@ -475,6 +475,8 @@ static int w_xavp_copy_dst(sip_msg_t *msg, char *src_name, char *src_idx, char *dst_name, char *dst_idx); static int w_xavp_params_explode(sip_msg_t *msg, char *pparams, char *pxname); static int w_xavp_params_implode(sip_msg_t *msg, char *pxname, char *pvname); +static int w_xavp_params_implode_qval( + sip_msg_t *msg, char *pxname, char *pvname); static int w_xavu_params_explode(sip_msg_t *msg, char *pparams, char *pxname); static int w_xavu_params_implode(sip_msg_t *msg, char *pxname, char *pvname); static int w_xavp_slist_explode( @@ -537,6 +539,8 @@ static cmd_export_t cmds[] = { fixup_spve_spve, fixup_free_spve_spve, ANY_ROUTE}, {"xavp_params_implode", (cmd_function)w_xavp_params_implode, 2, fixup_spve_str, fixup_free_spve_str, ANY_ROUTE}, + {"xavp_params_implode_qval", (cmd_function)w_xavp_params_implode_qval, + 2, fixup_spve_str, fixup_free_spve_str, ANY_ROUTE}, {"xavu_params_explode", (cmd_function)w_xavu_params_explode, 2, fixup_spve_spve, fixup_free_spve_spve, ANY_ROUTE}, {"xavu_params_implode", (cmd_function)w_xavu_params_implode, 2, @@ -1119,7 +1123,8 @@ static int ki_xavu_params_explode(sip_msg_t *msg, str *sparams, str *sxname) /** * */ -static int ki_xavp_params_implode(sip_msg_t *msg, str *sxname, str *svname) +static int ki_xavp_params_implode_mode( + sip_msg_t *msg, str *sxname, int mode, str *svname) { pv_spec_t *vspec = NULL; pv_value_t val; @@ -1144,7 +1149,8 @@ static int ki_xavp_params_implode(sip_msg_t *msg, str *sxname, str *svname) }
val.rs.s = pv_get_buffer(); - val.rs.len = xavp_serialize_fields(sxname, val.rs.s, pv_get_buffer_size()); + val.rs.len = xavp_serialize_fields_style( + sxname, mode, val.rs.s, pv_get_buffer_size()); if(val.rs.len <= 0) { return -1; } @@ -1158,6 +1164,14 @@ static int ki_xavp_params_implode(sip_msg_t *msg, str *sxname, str *svname) return 1; }
+/** + * + */ +static int ki_xavp_params_implode(sip_msg_t *msg, str *sxname, str *svname) +{ + return ki_xavp_params_implode_mode(msg, sxname, 0, svname); +} + /** * */ @@ -1173,6 +1187,30 @@ static int w_xavp_params_implode(sip_msg_t *msg, char *pxname, char *pvname) return ki_xavp_params_implode(msg, &sxname, (str *)pvname); }
+/** + * + */ +static int ki_xavp_params_implode_qval(sip_msg_t *msg, str *sxname, str *svname) +{ + return ki_xavp_params_implode_mode(msg, sxname, XAVP_PRINT_QVAL, svname); +} + +/** + * + */ +static int w_xavp_params_implode_qval( + sip_msg_t *msg, char *pxname, char *pvname) +{ + str sxname; + + if(fixup_get_svalue(msg, (gparam_t *)pxname, &sxname) != 0) { + LM_ERR("cannot get the xavp name\n"); + return -1; + } + + return ki_xavp_params_implode_qval(msg, &sxname, (str *)pvname); +} + /** * */ @@ -2864,6 +2902,11 @@ static sr_kemi_t sr_kemi_pvx_exports[] = { { SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE } }, + { str_init("pvx"), str_init("xavp_params_implode_qval"), + SR_KEMIP_INT, ki_xavp_params_implode_qval, + { SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_NONE, + SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE } + }, { str_init("pvx"), str_init("xavu_params_explode"), SR_KEMIP_INT, ki_xavu_params_explode, { SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_NONE,