[PATCH] libosmocore[master]: CTRL: allow argument for GET commands

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

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Tue Sep 26 13:47:49 UTC 2017


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

CTRL: allow argument for GET commands

It is sometimes necessary to pass an argument for GET commands, e.g. to get a
variable's value for a specific subscriber. Example from osmo-hlr:

  GET <id> status-ps <IMSI>

Just a 'status-ps' without the IMSI cannot return that IMSI's PS status. So far
osmo-hlr's hack is to implement status-ps as a SET command instead. That's
semantically very ugly: it's a designated write-only acting as read-only.

With this patch, we can easily allow passing a value along with a GET command.
All passing on of the value is already in place, in form of the ctrl_cmd
struct.

So far, string tokens following the variable name would be ignored. All that
this patch needs to do is pass remaining tokens along as value part.

Change-Id: I228342bedd623f6058493e1d0dea0c721d21c4e5
---
M src/ctrl/control_cmd.c
M tests/ctrl/ctrl_test.c
M tests/ctrl/ctrl_test.ok
3 files changed, 14 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/69/4069/1

diff --git a/src/ctrl/control_cmd.c b/src/ctrl/control_cmd.c
index a0476dd..3eeb015 100644
--- a/src/ctrl/control_cmd.c
+++ b/src/ctrl/control_cmd.c
@@ -313,6 +313,7 @@
 	switch (cmd->type) {
 		case CTRL_TYPE_GET:
 			var = strtok_r(NULL, " \n", &saveptr);
+			val = strtok_r(NULL, "\n", &saveptr);
 			if (!var) {
 				cmd->type = CTRL_TYPE_ERROR;
 				cmd->reply = "GET incomplete";
@@ -320,7 +321,9 @@
 				goto err;
 			}
 			cmd->variable = talloc_strdup(cmd, var);
-			LOGP(DLCTRL, LOGL_DEBUG, "Command: GET %s\n", cmd->variable);
+			cmd->value = talloc_strdup(cmd, val);
+			LOGP(DLCTRL, LOGL_DEBUG, "Command: GET %s%s%s\n", cmd->variable,
+			     cmd->value? " " : "", cmd->value? cmd->value : "");
 			break;
 		case CTRL_TYPE_SET:
 			var = strtok_r(NULL, " ", &saveptr);
diff --git a/tests/ctrl/ctrl_test.c b/tests/ctrl/ctrl_test.c
index bf8abae..a55e788 100644
--- a/tests/ctrl/ctrl_test.c
+++ b/tests/ctrl/ctrl_test.c
@@ -132,6 +132,7 @@
 			.type = CTRL_TYPE_GET,
 			.id = "1",
 			.variable = "var",
+			.value = "i",
 		}
 	},
 	{ "GET 1 variable value",
@@ -139,7 +140,7 @@
 			.type = CTRL_TYPE_GET,
 			.id = "1",
 			.variable = "variable",
-			.value = NULL,
+			.value = "value",
 		}
 	},
 	{ "GET 1 variable value\n",
@@ -147,7 +148,7 @@
 			.type = CTRL_TYPE_GET,
 			.id = "1",
 			.variable = "variable",
-			.value = NULL,
+			.value = "value",
 		}
 	},
 	{ "GET 1 variable multiple value tokens",
@@ -155,7 +156,7 @@
 			.type = CTRL_TYPE_GET,
 			.id = "1",
 			.variable = "variable",
-			.value = NULL,
+			.value = "multiple value tokens",
 		}
 	},
 	{ "GET 1 variable multiple value tokens\n",
@@ -163,7 +164,7 @@
 			.type = CTRL_TYPE_GET,
 			.id = "1",
 			.variable = "variable",
-			.value = NULL,
+			.value = "multiple value tokens",
 		}
 	},
 	{ "SET 1 variable value",
diff --git a/tests/ctrl/ctrl_test.ok b/tests/ctrl/ctrl_test.ok
index bca5f4b..3812d9a 100644
--- a/tests/ctrl/ctrl_test.ok
+++ b/tests/ctrl/ctrl_test.ok
@@ -22,31 +22,31 @@
 test parsing: 'GET 1 var\ni\nable'
 id = '1'
 variable = 'var'
-value = NULL
+value = 'i'
 reply = NULL
 ok
 test parsing: 'GET 1 variable value'
 id = '1'
 variable = 'variable'
-value = NULL
+value = 'value'
 reply = NULL
 ok
 test parsing: 'GET 1 variable value\n'
 id = '1'
 variable = 'variable'
-value = NULL
+value = 'value'
 reply = NULL
 ok
 test parsing: 'GET 1 variable multiple value tokens'
 id = '1'
 variable = 'variable'
-value = NULL
+value = 'multiple value tokens'
 reply = NULL
 ok
 test parsing: 'GET 1 variable multiple value tokens\n'
 id = '1'
 variable = 'variable'
-value = NULL
+value = 'multiple value tokens'
 reply = NULL
 ok
 test parsing: 'SET 1 variable value'

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I228342bedd623f6058493e1d0dea0c721d21c4e5
Gerrit-PatchSet: 1
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>



More information about the gerrit-log mailing list