ctrl: Improve error messages in ctrl_cmd_handle

This commit is contained in:
Daniel Willmann 2011-08-18 13:48:26 +02:00 committed by Harald Welte
parent bed515f5d6
commit 5d9b203db6
1 changed files with 28 additions and 12 deletions

View File

@ -143,8 +143,10 @@ int ctrl_cmd_handle(struct ctrl_cmd *cmd, void *data)
vline = cmd_make_strvec(request); vline = cmd_make_strvec(request);
talloc_free(request); talloc_free(request);
if (!vline) if (!vline) {
cmd->reply = "cmd_make_strvec failed.";
goto err; goto err;
}
for (i=0;i<vector_active(vline);i++) { for (i=0;i<vector_active(vline);i++) {
token = vector_slot(vline, i); token = vector_slot(vline, i);
@ -154,47 +156,47 @@ int ctrl_cmd_handle(struct ctrl_cmd *cmd, void *data)
if (!strcmp(token, "net")) { if (!strcmp(token, "net")) {
net = gsmnet; net = gsmnet;
if (!net) if (!net)
break; goto err_missing;
cmd->node = net; cmd->node = net;
node = CTRL_NODE_NET; node = CTRL_NODE_NET;
} else if (!strcmp(token, "bts")) { } else if (!strcmp(token, "bts")) {
if (!net) if (!net)
break; goto err_missing;
i++; i++;
if (i >= vector_active(vline)) if (i >= vector_active(vline))
break; goto err_index;
token = vector_slot(vline, i); token = vector_slot(vline, i);
num = atoi(token); num = atoi(token);
bts = gsm_bts_num(net, num); bts = gsm_bts_num(net, num);
if (!bts) if (!bts)
break; goto err_missing;
cmd->node = bts; cmd->node = bts;
node = CTRL_NODE_BTS; node = CTRL_NODE_BTS;
} else if (!strcmp(token, "trx")) { } else if (!strcmp(token, "trx")) {
if (!bts) if (!bts)
break; goto err_missing;
i++; i++;
if (i >= vector_active(vline)) if (i >= vector_active(vline))
break; goto err_index;
token = vector_slot(vline, i); token = vector_slot(vline, i);
num = atoi(token); num = atoi(token);
trx = gsm_bts_trx_num(bts, num); trx = gsm_bts_trx_num(bts, num);
if (!trx) if (!trx)
break; goto err_missing;
cmd->node = trx; cmd->node = trx;
node = CTRL_NODE_TRX; node = CTRL_NODE_TRX;
} else if (!strcmp(token, "ts")) { } else if (!strcmp(token, "ts")) {
if (!trx) if (!trx)
break; goto err_missing;
i++; i++;
if (i >= vector_active(vline)) if (i >= vector_active(vline))
break; goto err_index;
token = vector_slot(vline, i); token = vector_slot(vline, i);
num = atoi(token); num = atoi(token);
if ((num >= 0) && (num < TRX_NR_TS)) if ((num >= 0) && (num < TRX_NR_TS))
ts = &trx->ts[num]; ts = &trx->ts[num];
if (!ts) if (!ts)
break; goto err_missing;
cmd->node = ts; cmd->node = ts;
node = CTRL_NODE_TS; node = CTRL_NODE_TS;
} else { } else {
@ -208,7 +210,7 @@ int ctrl_cmd_handle(struct ctrl_cmd *cmd, void *data)
cmds_vec = vector_lookup(ctrl_node_vec, node); cmds_vec = vector_lookup(ctrl_node_vec, node);
if (!cmds_vec) { if (!cmds_vec) {
cmd->reply = "Command not found"; cmd->reply = "Command not found.";
vector_free(cmdvec); vector_free(cmdvec);
break; break;
} }
@ -218,6 +220,9 @@ int ctrl_cmd_handle(struct ctrl_cmd *cmd, void *data)
vector_free(cmdvec); vector_free(cmdvec);
break; break;
} }
if (i+1 == vector_active(vline))
cmd->reply = "Command not present.";
} }
cmd_free_strvec(vline); cmd_free_strvec(vline);
@ -226,6 +231,17 @@ err:
if (ret == CTRL_CMD_ERROR) if (ret == CTRL_CMD_ERROR)
cmd->type = CTRL_TYPE_ERROR; cmd->type = CTRL_TYPE_ERROR;
return ret; return ret;
err_missing:
cmd_free_strvec(vline);
cmd->type = CTRL_TYPE_ERROR;
cmd->reply = "Error while resolving object";
return ret;
err_index:
cmd_free_strvec(vline);
cmd->type = CTRL_TYPE_ERROR;
cmd->reply = "Error while parsing the index.";
return ret;
} }
static void control_close_conn(struct ctrl_connection *ccon) static void control_close_conn(struct ctrl_connection *ccon)