Change in libosmocore[master]: ctrl: Introduce ctrl_cmd_parse3 API

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/.

Pau Espin Pedrol gerrit-no-reply at lists.osmocom.org
Thu Jul 12 16:40:40 UTC 2018


Pau Espin Pedrol has uploaded this change for review. ( https://gerrit.osmocom.org/9978


Change subject: ctrl: Introduce ctrl_cmd_parse3 API
......................................................................

ctrl: Introduce ctrl_cmd_parse3 API

Callers require to know whether the returned ERROR cmd was received or
generated locally, in order to send it or do something with it locally.

Related: OS#3394

Change-Id: Ide9170e5c31967c353f8fe4e8227e64130b91eae
---
M include/osmocom/ctrl/control_cmd.h
M src/ctrl/control_cmd.c
M src/ctrl/libosmoctrl.map
3 files changed, 22 insertions(+), 1 deletion(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/78/9978/1

diff --git a/include/osmocom/ctrl/control_cmd.h b/include/osmocom/ctrl/control_cmd.h
index 08376f3..93055c7 100644
--- a/include/osmocom/ctrl/control_cmd.h
+++ b/include/osmocom/ctrl/control_cmd.h
@@ -124,6 +124,7 @@
 int ctrl_cmd_install(enum ctrl_node_type node, struct ctrl_cmd_element *cmd);
 int ctrl_cmd_send(struct osmo_wqueue *queue, struct ctrl_cmd *cmd);
 int ctrl_cmd_send_to_all(struct ctrl_handle *ctrl, struct ctrl_cmd *cmd);
+struct ctrl_cmd *ctrl_cmd_parse3(void *ctx, struct msgb *msg, bool *parse_failed);
 struct ctrl_cmd *ctrl_cmd_parse2(void *ctx, struct msgb *msg);
 struct ctrl_cmd *ctrl_cmd_parse(void *ctx, struct msgb *msg);
 struct msgb *ctrl_cmd_make(struct ctrl_cmd *cmd);
diff --git a/src/ctrl/control_cmd.c b/src/ctrl/control_cmd.c
index 14ff906..33496bd 100644
--- a/src/ctrl/control_cmd.c
+++ b/src/ctrl/control_cmd.c
@@ -316,9 +316,25 @@
  *  \param[in] msg message buffer containing command to be decoded
  *  \returns callee-allocated decoded CTRL command; NULL on allocation failure,
  *  ctrl->type == CTRL_TYPE_ERROR and an error message in ctrl->reply on any error.
- * The caller is responsible to talloc_free() the returned struct pointer. */
+ * The caller is responsible to talloc_free() the returned struct pointer.
+ * If information of the origin of the ERROR cmd returned is required (received
+ * or local parsing failure), use \ref ctrl_cmd_parse3 instead. */
 struct ctrl_cmd *ctrl_cmd_parse2(void *ctx, struct msgb *msg)
 {
+	bool unused;
+	return ctrl_cmd_parse3(ctx, msg, &unused);
+}
+
+/*! Parse/Decode CTRL from \ref msgb into command struct.
+ *  \param[in] ctx talloc context from which to allocate
+ *  \param[in] msg message buffer containing command to be decoded
+ *  \param[out] parse_failed Whether returned ERROR cmd was generatd locally
+ *  		(due to parse failure) or was received.
+ *  \returns callee-allocated decoded CTRL command; NULL on allocation failure,
+ *  ctrl->type == CTRL_TYPE_ERROR and an error message in ctrl->reply on any error.
+ * The caller is responsible to talloc_free() the returned struct pointer. */
+struct ctrl_cmd *ctrl_cmd_parse3(void *ctx, struct msgb *msg, bool *parse_failed)
+{
 	char *str, *tmp, *saveptr = NULL;
 	char *var, *val;
 	struct ctrl_cmd *cmd;
@@ -326,6 +342,7 @@
 	cmd = talloc_zero(ctx, struct ctrl_cmd);
 	if (!cmd) {
 		LOGP(DLCTRL, LOGL_ERROR, "Failed to allocate.\n");
+		*parse_failed = true;
 		return NULL;
 	}
 
@@ -483,12 +500,14 @@
 			goto err;
 	}
 
+	*parse_failed = false;
 	return cmd;
 oom:
 	cmd->type = CTRL_TYPE_ERROR;
 	cmd->id = "err";
 	cmd->reply = "OOM";
 err:
+	*parse_failed = true;
 	return cmd;
 }
 
diff --git a/src/ctrl/libosmoctrl.map b/src/ctrl/libosmoctrl.map
index 5b888a2..f995467 100644
--- a/src/ctrl/libosmoctrl.map
+++ b/src/ctrl/libosmoctrl.map
@@ -13,6 +13,7 @@
 ctrl_cmd_make;
 ctrl_cmd_parse;
 ctrl_cmd_parse2;
+ctrl_cmd_parse3;
 ctrl_cmd_send;
 ctrl_cmd_send_to_all;
 ctrl_cmd_send_trap;

-- 
To view, visit https://gerrit.osmocom.org/9978
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ide9170e5c31967c353f8fe4e8227e64130b91eae
Gerrit-Change-Number: 9978
Gerrit-PatchSet: 1
Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180712/39dc584e/attachment.htm>


More information about the gerrit-log mailing list