mirror of https://gerrit.osmocom.org/libosmocore
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
This commit is contained in:
parent
ed7d2ddb15
commit
239ed3b3ee
|
@ -124,6 +124,7 @@ int ctrl_cmd_exec(vector vline, struct ctrl_cmd *command, vector node, void *dat
|
|||
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);
|
||||
|
|
|
@ -316,8 +316,24 @@ static bool id_str_valid(const char *str)
|
|||
* \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;
|
||||
|
@ -326,6 +342,7 @@ struct ctrl_cmd *ctrl_cmd_parse2(void *ctx, struct msgb *msg)
|
|||
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 @@ struct ctrl_cmd *ctrl_cmd_parse2(void *ctx, struct msgb *msg)
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ ctrl_cmd_install;
|
|||
ctrl_cmd_make;
|
||||
ctrl_cmd_parse;
|
||||
ctrl_cmd_parse2;
|
||||
ctrl_cmd_parse3;
|
||||
ctrl_cmd_send;
|
||||
ctrl_cmd_send_to_all;
|
||||
ctrl_cmd_send_trap;
|
||||
|
|
Loading…
Reference in New Issue