Module: kamailio Branch: master Commit: e7f7e2dd73e45d82279ab5a9b1f8b4de891740c1 URL: https://github.com/kamailio/kamailio/commit/e7f7e2dd73e45d82279ab5a9b1f8b4de891740c1
Author: Daniel-Constantin Mierla <[email protected]> Committer: Daniel-Constantin Mierla <[email protected]> Date: 2025-10-08T11:44:24+02:00 core: xavp - function to add xavp with different modes - new mode to allocate space for a string value, but initialize it to empty string instead of copying over an input value - related GH #4395 --- Modified: src/core/xavp.c Modified: src/core/xavp.h --- Diff: https://github.com/kamailio/kamailio/commit/e7f7e2dd73e45d82279ab5a9b1f8b4de891740c1.diff Patch: https://github.com/kamailio/kamailio/commit/e7f7e2dd73e45d82279ab5a9b1f8b4de891740c1.patch --- diff --git a/src/core/xavp.c b/src/core/xavp.c index 21a8197080b..ba102a93e76 100644 --- a/src/core/xavp.c +++ b/src/core/xavp.c @@ -101,7 +101,13 @@ void xavp_free_unsafe(sr_xavp_t *xa) shm_free_unsafe(xa); } -static sr_xavp_t *xavp_new_value(str *name, sr_xval_t *val) +/** + * create a new value + * - mode: + * - 0 allocate (val->v.s.len + 1) for value and copy over val->v.s.s + * - 1 allocate (val->v.s.len + 1) for value, but set it to empty string + */ +static sr_xavp_t *xavp_new_value_mode(str *name, sr_xval_t *val, int mode) { sr_xavp_t *avp; int size; @@ -128,7 +134,11 @@ static sr_xavp_t *xavp_new_value(str *name, sr_xval_t *val) memcpy(&avp->val, val, sizeof(sr_xval_t)); if(val->type == SR_XTYPE_STR) { avp->val.v.s.s = avp->name.s + avp->name.len + 1; - memcpy(avp->val.v.s.s, val->v.s.s, val->v.s.len); + if(mode == 1) { + avp->val.v.s.s[0] = '\0'; + } else { + memcpy(avp->val.v.s.s, val->v.s.s, val->v.s.len); + } avp->val.v.s.s[val->v.s.len] = '\0'; avp->val.v.s.len = val->v.s.len; } @@ -136,6 +146,11 @@ static sr_xavp_t *xavp_new_value(str *name, sr_xval_t *val) return avp; } +static sr_xavp_t *xavp_new_value(str *name, sr_xval_t *val) +{ + return xavp_new_value_mode(name, val, 0); +} + int xavp_add(sr_xavp_t *xavp, sr_xavp_t **list) { if(xavp == NULL) { @@ -205,11 +220,12 @@ int xavp_add_after(sr_xavp_t *nxavp, sr_xavp_t *pxavp) return 0; } -sr_xavp_t *xavp_add_value(str *name, sr_xval_t *val, sr_xavp_t **list) +sr_xavp_t *xavp_add_value_mode( + str *name, sr_xval_t *val, int mode, sr_xavp_t **list) { sr_xavp_t *avp = 0; - avp = xavp_new_value(name, val); + avp = xavp_new_value_mode(name, val, mode); if(avp == NULL) return NULL; @@ -225,6 +241,11 @@ sr_xavp_t *xavp_add_value(str *name, sr_xval_t *val, sr_xavp_t **list) return avp; } +sr_xavp_t *xavp_add_value(str *name, sr_xval_t *val, sr_xavp_t **list) +{ + return xavp_add_value_mode(name, val, 0, list); +} + sr_xavp_t *xavp_add_value_after(str *name, sr_xval_t *val, sr_xavp_t *pxavp) { sr_xavp_t *avp = 0; diff --git a/src/core/xavp.h b/src/core/xavp.h index b9131c2d2df..f273c508fac 100644 --- a/src/core/xavp.h +++ b/src/core/xavp.h @@ -80,6 +80,8 @@ int xavp_add(sr_xavp_t *xavp, sr_xavp_t **list); int xavp_add_last(sr_xavp_t *xavp, sr_xavp_t **list); int xavp_add_after(sr_xavp_t *nxavp, sr_xavp_t *pxavp); sr_xavp_t *xavp_add_value(str *name, sr_xval_t *val, sr_xavp_t **list); +sr_xavp_t *xavp_add_value_mode( + str *name, sr_xval_t *val, int mode, sr_xavp_t **list); sr_xavp_t *xavp_add_value_after(str *name, sr_xval_t *val, sr_xavp_t *pxavp); sr_xavp_t *xavp_add_xavp_value( str *rname, str *name, sr_xval_t *val, sr_xavp_t **list); _______________________________________________ Kamailio - Development Mailing List -- [email protected] To unsubscribe send an email to [email protected] Important: keep the mailing list in the recipients, do not reply only to the sender!
