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

ctrl: separate handling of GET_REPLY, SET_REPLY and TRAP

So far, error reporting just says "Trap/Reply", more accurately report 'GET
REPLY', 'SET REPLY' and 'TRAP' as appropriate.

Change-Id: Ic25a251502499aeda4e2952ec4190a1fa0bebb01
---
M src/ctrl/control_cmd.c
1 file changed, 52 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/39/5439/1

diff --git a/src/ctrl/control_cmd.c b/src/ctrl/control_cmd.c
index f32a200..31199bf 100644
--- a/src/ctrl/control_cmd.c
+++ b/src/ctrl/control_cmd.c
@@ -411,20 +411,18 @@
                             osmo_escape_str(cmd->value, -1));
                        break;
                case CTRL_TYPE_GET_REPLY:
-               case CTRL_TYPE_SET_REPLY:
-               case CTRL_TYPE_TRAP:
                        var = strtok_r(NULL, " ", &saveptr);
                        val = strtok_r(NULL, "", &saveptr);
-                       if (!var || !val) {
+                       if (!var) {
                                cmd->type = CTRL_TYPE_ERROR;
-                               cmd->reply = "Trap/Reply incomplete";
-                               LOGP(DLCTRL, LOGL_NOTICE, "Trap/Reply 
incomplete\n");
+                               cmd->reply = "GET REPLY incomplete";
+                               LOGP(DLCTRL, LOGL_NOTICE, "GET REPLY 
incomplete\n");
                                goto err;
                        }
                        if (!osmo_separated_identifiers_valid(var, ".")) {
                                cmd->type = CTRL_TYPE_ERROR;
-                               cmd->reply = "Trap/Reply variable contains 
invalid characters";
-                               LOGP(DLCTRL, LOGL_NOTICE, "Trap/Reply variable 
contains invalid characters: \"%s\"\n",
+                               cmd->reply = "GET REPLY variable contains 
invalid characters";
+                               LOGP(DLCTRL, LOGL_NOTICE, "GET REPLY variable 
contains invalid characters: \"%s\"\n",
                                     osmo_escape_str(var, -1));
                                goto err;
                        }
@@ -432,7 +430,53 @@
                        cmd->reply = talloc_strdup(cmd, val);
                        if (!cmd->variable || !cmd->reply)
                                goto oom;
-                       LOGP(DLCTRL, LOGL_DEBUG, "Command: TRAP/REPLY %s: 
\"%s\"\n", cmd->variable,
+                       LOGP(DLCTRL, LOGL_DEBUG, "Command: GET REPLY %s: %s\n", 
cmd->variable,
+                            osmo_escape_str(cmd->reply, -1));
+                       break;
+               case CTRL_TYPE_SET_REPLY:
+                       var = strtok_r(NULL, " ", &saveptr);
+                       val = strtok_r(NULL, "", &saveptr);
+                       if (!var) {
+                               cmd->type = CTRL_TYPE_ERROR;
+                               cmd->reply = "SET REPLY incomplete";
+                               LOGP(DLCTRL, LOGL_NOTICE, "GET REPLY 
incomplete\n");
+                               goto err;
+                       }
+                       if (!osmo_separated_identifiers_valid(var, ".")) {
+                               cmd->type = CTRL_TYPE_ERROR;
+                               cmd->reply = "SET REPLY variable contains 
invalid characters";
+                               LOGP(DLCTRL, LOGL_NOTICE, "SET REPLY variable 
contains invalid characters: \"%s\"\n",
+                                    osmo_escape_str(var, -1));
+                               goto err;
+                       }
+                       cmd->variable = talloc_strdup(cmd, var);
+                       cmd->reply = talloc_strdup(cmd, val);
+                       if (!cmd->variable || !cmd->reply)
+                               goto oom;
+                       LOGP(DLCTRL, LOGL_DEBUG, "Command: SET REPLY %s: %s\n", 
cmd->variable,
+                            osmo_escape_str(cmd->reply, -1));
+                       break;
+               case CTRL_TYPE_TRAP:
+                       var = strtok_r(NULL, " ", &saveptr);
+                       val = strtok_r(NULL, "", &saveptr);
+                       if (!var || !val) {
+                               cmd->type = CTRL_TYPE_ERROR;
+                               cmd->reply = "TRAP incomplete";
+                               LOGP(DLCTRL, LOGL_NOTICE, "TRAP incomplete\n");
+                               goto err;
+                       }
+                       if (!osmo_separated_identifiers_valid(var, ".")) {
+                               cmd->type = CTRL_TYPE_ERROR;
+                               cmd->reply = "TRAP variable contains invalid 
characters";
+                               LOGP(DLCTRL, LOGL_NOTICE, "TRAP variable 
contains invalid characters: \"%s\"\n",
+                                    osmo_escape_str(var, -1));
+                               goto err;
+                       }
+                       cmd->variable = talloc_strdup(cmd, var);
+                       cmd->reply = talloc_strdup(cmd, val);
+                       if (!cmd->variable || !cmd->reply)
+                               goto oom;
+                       LOGP(DLCTRL, LOGL_DEBUG, "Command: TRAP %s: \"%s\"\n", 
cmd->variable,
                             osmo_escape_str(cmd->reply, -1));
                        break;
                case CTRL_TYPE_ERROR:

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic25a251502499aeda4e2952ec4190a1fa0bebb01
Gerrit-PatchSet: 1
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <[email protected]>

Reply via email to