|
@@ -1105,19 +1105,22 @@ int xavp_set_child_sval(str *rname, str *cname, str *sval)
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * serialize the values in subfields of an xavp in name=value; format
|
|
|
|
|
|
+ * serialize the values in subfields of an xavp in name=value format styles
|
|
* - rname - name of the root list xavp
|
|
* - rname - name of the root list xavp
|
|
|
|
+ * - mode - 0 - style is 'name=value;', 1 - style is ';name=value'
|
|
* - obuf - buffer were to write the output
|
|
* - obuf - buffer were to write the output
|
|
* - olen - the size of obuf
|
|
* - olen - the size of obuf
|
|
* return: 0 - not found; -1 - error; >0 - length of output
|
|
* return: 0 - not found; -1 - error; >0 - length of output
|
|
*/
|
|
*/
|
|
|
|
|
|
-int xavp_serialize_fields(str *rname, char *obuf, int olen)
|
|
|
|
|
|
+int xavp_serialize_fields_style(str *rname, int mode, char *obuf, int olen)
|
|
{
|
|
{
|
|
sr_xavp_t *ravp = NULL;
|
|
sr_xavp_t *ravp = NULL;
|
|
sr_xavp_t *avp = NULL;
|
|
sr_xavp_t *avp = NULL;
|
|
str ostr;
|
|
str ostr;
|
|
int rlen;
|
|
int rlen;
|
|
|
|
+ char *pr = "";
|
|
|
|
+ char *sf = "";
|
|
|
|
|
|
ravp = xavp_get(rname, NULL);
|
|
ravp = xavp_get(rname, NULL);
|
|
if(ravp == NULL || ravp->val.type != SR_XTYPE_XAVP) {
|
|
if(ravp == NULL || ravp->val.type != SR_XTYPE_XAVP) {
|
|
@@ -1125,6 +1128,14 @@ int xavp_serialize_fields(str *rname, char *obuf, int olen)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if(mode & 1) {
|
|
|
|
+ pr = ";";
|
|
|
|
+ sf = "";
|
|
|
|
+ } else {
|
|
|
|
+ pr = "";
|
|
|
|
+ sf = ";";
|
|
|
|
+ }
|
|
|
|
+
|
|
rlen = 0;
|
|
rlen = 0;
|
|
ostr.s = obuf;
|
|
ostr.s = obuf;
|
|
avp = ravp->val.v.xavp;
|
|
avp = ravp->val.v.xavp;
|
|
@@ -1132,9 +1143,9 @@ int xavp_serialize_fields(str *rname, char *obuf, int olen)
|
|
switch(avp->val.type) {
|
|
switch(avp->val.type) {
|
|
case SR_XTYPE_LONG:
|
|
case SR_XTYPE_LONG:
|
|
LM_DBG(" XAVP long int value: %ld\n", avp->val.v.l);
|
|
LM_DBG(" XAVP long int value: %ld\n", avp->val.v.l);
|
|
- ostr.len = snprintf(ostr.s, olen - rlen, "%.*s=%lu;",
|
|
|
|
- avp->name.len, avp->name.s,
|
|
|
|
- (unsigned long)avp->val.v.l);
|
|
|
|
|
|
+ ostr.len = snprintf(ostr.s, olen - rlen, "%s%.*s=%lu%s",
|
|
|
|
+ pr, avp->name.len, avp->name.s,
|
|
|
|
+ (unsigned long)avp->val.v.l, sf);
|
|
if(ostr.len <= 0 || ostr.len >= olen - rlen) {
|
|
if(ostr.len <= 0 || ostr.len >= olen - rlen) {
|
|
LM_ERR("failed to serialize int value (%d/%d\n", ostr.len,
|
|
LM_ERR("failed to serialize int value (%d/%d\n", ostr.len,
|
|
olen - rlen);
|
|
olen - rlen);
|
|
@@ -1144,12 +1155,12 @@ int xavp_serialize_fields(str *rname, char *obuf, int olen)
|
|
case SR_XTYPE_STR:
|
|
case SR_XTYPE_STR:
|
|
LM_DBG(" XAVP str value: %s\n", avp->val.v.s.s);
|
|
LM_DBG(" XAVP str value: %s\n", avp->val.v.s.s);
|
|
if(avp->val.v.s.len == 0) {
|
|
if(avp->val.v.s.len == 0) {
|
|
- ostr.len = snprintf(ostr.s, olen - rlen, "%.*s;",
|
|
|
|
- avp->name.len, avp->name.s);
|
|
|
|
|
|
+ ostr.len = snprintf(ostr.s, olen - rlen, "%s%.*s%s",
|
|
|
|
+ pr, avp->name.len, avp->name.s, sf);
|
|
} else {
|
|
} else {
|
|
- ostr.len = snprintf(ostr.s, olen - rlen, "%.*s=%.*s;",
|
|
|
|
- avp->name.len, avp->name.s, avp->val.v.s.len,
|
|
|
|
- avp->val.v.s.s);
|
|
|
|
|
|
+ ostr.len = snprintf(ostr.s, olen - rlen, "%s%.*s=%.*s%s",
|
|
|
|
+ pr, avp->name.len, avp->name.s, avp->val.v.s.len,
|
|
|
|
+ avp->val.v.s.s, sf);
|
|
}
|
|
}
|
|
if(ostr.len <= 0 || ostr.len >= olen - rlen) {
|
|
if(ostr.len <= 0 || ostr.len >= olen - rlen) {
|
|
LM_ERR("failed to serialize int value (%d/%d\n", ostr.len,
|
|
LM_ERR("failed to serialize int value (%d/%d\n", ostr.len,
|
|
@@ -1170,6 +1181,19 @@ int xavp_serialize_fields(str *rname, char *obuf, int olen)
|
|
return rlen;
|
|
return rlen;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * serialize the values in subfields of an xavp in 'name=value;' format
|
|
|
|
+ * - rname - name of the root list xavp
|
|
|
|
+ * - obuf - buffer were to write the output
|
|
|
|
+ * - olen - the size of obuf
|
|
|
|
+ * return: 0 - not found; -1 - error; >0 - length of output
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+int xavp_serialize_fields(str *rname, char *obuf, int olen)
|
|
|
|
+{
|
|
|
|
+ return xavp_serialize_fields_style(rname, 0, obuf, olen);
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
*
|
|
*
|
|
*/
|
|
*/
|