[PATCH] libosmo-sccp[master]: xua_msg: Add xua_msg_free_tag() and xua_msg_copy_part()

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Mon Apr 3 15:50:33 UTC 2017


Review at  https://gerrit.osmocom.org/2196

xua_msg: Add xua_msg_free_tag() and xua_msg_copy_part()

... also, mark input to xua_msg_find_tag as 'const' pointer.

Change-Id: I083634db9c3606bcff87700f253054a38a20816d
---
M include/osmocom/sigtran/xua_msg.h
M src/xua_msg.c
2 files changed, 31 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/96/2196/1

diff --git a/include/osmocom/sigtran/xua_msg.h b/include/osmocom/sigtran/xua_msg.h
index 2a6e3ae..23f92c5 100644
--- a/include/osmocom/sigtran/xua_msg.h
+++ b/include/osmocom/sigtran/xua_msg.h
@@ -50,7 +50,10 @@
 
 int xua_msg_add_data(struct xua_msg *msg, uint16_t tag, uint16_t len, uint8_t *dat);
 
-struct xua_msg_part *xua_msg_find_tag(struct xua_msg *msg, uint16_t tag);
+struct xua_msg_part *xua_msg_find_tag(const struct xua_msg *msg, uint16_t tag);
+int xua_msg_free_tag(struct xua_msg *xua, uint16_t tag);
+int xua_msg_copy_part(struct xua_msg *xua_out, uint16_t tag_out,
+		      const struct xua_msg *xua_in, uint16_t tag_in);
 
 struct xua_msg *xua_from_msg(const int version, uint16_t len, uint8_t *data);
 struct msgb *xua_to_msg(const int version, struct xua_msg *msg);
diff --git a/src/xua_msg.c b/src/xua_msg.c
index 4a3e013..98c1832 100644
--- a/src/xua_msg.c
+++ b/src/xua_msg.c
@@ -77,7 +77,7 @@
 	return 0;
 }
 
-struct xua_msg_part *xua_msg_find_tag(struct xua_msg *xua, uint16_t tag)
+struct xua_msg_part *xua_msg_find_tag(const struct xua_msg *xua, uint16_t tag)
 {
 	struct xua_msg_part *part;
 
@@ -88,6 +88,32 @@
 	return NULL;
 }
 
+int xua_msg_free_tag(struct xua_msg *xua, uint16_t tag)
+{
+	struct xua_msg_part *part;
+
+	llist_for_each_entry(part, &xua->headers, entry) {
+		if (part->tag == tag) {
+			llist_del(&part->entry);
+			talloc_free(part);
+			return 1;
+		}
+	}
+	return 0;
+}
+
+int xua_msg_copy_part(struct xua_msg *xua_out, uint16_t tag_out,
+		      const struct xua_msg *xua_in, uint16_t tag_in)
+{
+	const struct xua_msg_part *part;
+	
+	part = xua_msg_find_tag(xua_in, tag_in);
+	if (!part)
+		return -1;
+
+	return xua_msg_add_data(xua_out, tag_out, part->len, part->dat);
+}
+
 struct xua_msg *xua_from_msg(const int version, uint16_t len, uint8_t *data)
 {
 	struct xua_parameter_hdr *par;

-- 
To view, visit https://gerrit.osmocom.org/2196
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I083634db9c3606bcff87700f253054a38a20816d
Gerrit-PatchSet: 1
Gerrit-Project: libosmo-sccp
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list