Bläddra i källkod

core: xavp - helper function to set style when serializing

Daniel-Constantin Mierla 2 år sedan
förälder
incheckning
1e5d1e35fb
2 ändrade filer med 35 tillägg och 10 borttagningar
  1. 34 10
      src/core/xavp.c
  2. 1 0
      src/core/xavp.h

+ 34 - 10
src/core/xavp.c

@@ -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
+ * - mode - 0 - style is 'name=value;', 1 - style is ';name=value'
  * - 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)
+int xavp_serialize_fields_style(str *rname, int mode, char *obuf, int olen)
 {
 	sr_xavp_t *ravp = NULL;
 	sr_xavp_t *avp = NULL;
 	str ostr;
 	int rlen;
+	char *pr = "";
+	char *sf = "";
 
 	ravp = xavp_get(rname, NULL);
 	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;
 	}
 
+	if(mode & 1) {
+		pr = ";";
+		sf = "";
+	} else {
+		pr = "";
+		sf = ";";
+	}
+
 	rlen = 0;
 	ostr.s = obuf;
 	avp = ravp->val.v.xavp;
@@ -1132,9 +1143,9 @@ int xavp_serialize_fields(str *rname, char *obuf, int olen)
 		switch(avp->val.type) {
 			case SR_XTYPE_LONG:
 				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) {
 					LM_ERR("failed to serialize int value (%d/%d\n", ostr.len,
 							olen - rlen);
@@ -1144,12 +1155,12 @@ int xavp_serialize_fields(str *rname, char *obuf, int olen)
 			case SR_XTYPE_STR:
 				LM_DBG("     XAVP str value: %s\n", avp->val.v.s.s);
 				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 {
-					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) {
 					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;
 }
 
+/**
+ * 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);
+}
+
 /**
  *
  */

+ 1 - 0
src/core/xavp.h

@@ -114,6 +114,7 @@ sr_xavp_t *xavp_get_child(str *rname, str *cname);
 sr_xavp_t *xavp_get_child_with_ival(str *rname, str *cname);
 sr_xavp_t *xavp_get_child_with_sval(str *rname, str *cname);
 int xavp_serialize_fields(str *rname, char *obuf, int olen);
+int xavp_serialize_fields_style(str *rname, int mode, char *obuf, int olen);
 
 int xavp_set_child_ival(str *rname, str *cname, long ival);
 int xavp_set_child_sval(str *rname, str *cname, str *sval);