silent call: clarify rc and error messages logged on vty

In gsm_silent_call_{start,stop}(), return meaningful error codes and interpret
them on the VTY to clearly indicate the result.

Change-Id: Id5abb8f2ba901689e03040af8e51483b6c618e7f
This commit is contained in:
Neels Hofmeyr 2018-03-09 14:59:44 +01:00
parent e9495388d9
commit d656dff235
2 changed files with 40 additions and 17 deletions

View File

@ -30,6 +30,7 @@
#include <osmocom/msc/gsm_data.h>
#include <osmocom/msc/gsm_subscriber.h>
#include <osmocom/msc/osmo_msc.h>
#include <osmocom/msc/vlr.h>
/* paging of the requested subscriber has completed */
static int paging_cb_silent(unsigned int hooknum, unsigned int event,
@ -130,7 +131,9 @@ int gsm_silent_call_start(struct vlr_subscr *vsub, void *data, int type)
* A-interface. */
req = subscr_request_conn(vsub, paging_cb_silent, data,
"establish silent call");
return req != NULL;
if (!req)
return -ENODEV;
return 0;
}
/* end a silent call with a given subscriber */
@ -139,12 +142,18 @@ int gsm_silent_call_stop(struct vlr_subscr *vsub)
struct gsm_subscriber_connection *conn;
conn = connection_for_subscr(vsub);
if (!conn)
return -EINVAL;
if (!conn) {
LOGP(DMM, LOGL_ERROR, "%s: Cannot stop silent call, no connection for subscriber\n",
vlr_subscr_name(vsub));
return -ENODEV;
}
/* did we actually establish a silent call for this guy? */
if (!conn->silent_call)
return -EINVAL;
if (!conn->silent_call) {
LOGP(DMM, LOGL_ERROR, "%s: Cannot stop silent call, subscriber has no active silent call\n",
vlr_subscr_name(vsub));
return -ENOENT;
}
#if BEFORE_MSCSPLIT
/* Re-enable this log output once we can obtain this information via

View File

@ -524,16 +524,20 @@ DEFUN(subscriber_silent_call_start,
type = RSL_CHANNEED_ANY; /* Defaults to ANY */
rc = gsm_silent_call_start(vsub, vty, type);
if (rc <= 0) {
vty_out(vty, "%% Subscriber not attached%s",
VTY_NEWLINE);
vlr_subscr_put(vsub);
return CMD_WARNING;
switch (rc) {
case -ENODEV:
vty_out(vty, "%% Subscriber not attached%s", VTY_NEWLINE);
break;
default:
if (rc)
vty_out(vty, "%% Cannot start silent call (rc=%d)%s", rc, VTY_NEWLINE);
else
vty_out(vty, "%% Silent call initiated%s", VTY_NEWLINE);
break;
}
vlr_subscr_put(vsub);
return CMD_SUCCESS;
return rc ? CMD_WARNING : CMD_SUCCESS;
}
DEFUN(subscriber_silent_call_stop,
@ -553,14 +557,24 @@ DEFUN(subscriber_silent_call_stop,
}
rc = gsm_silent_call_stop(vsub);
if (rc < 0) {
vlr_subscr_put(vsub);
return CMD_WARNING;
switch (rc) {
case -ENODEV:
vty_out(vty, "%% No active connection for subscriber%s", VTY_NEWLINE);
break;
case -ENOENT:
vty_out(vty, "%% Subscriber has no silent call active%s",
VTY_NEWLINE);
break;
default:
if (rc)
vty_out(vty, "%% Cannot stop silent call (rc=%d)%s", rc, VTY_NEWLINE);
else
vty_out(vty, "%% Silent call stopped%s", VTY_NEWLINE);
break;
}
vlr_subscr_put(vsub);
return CMD_SUCCESS;
return rc ? CMD_WARNING : CMD_SUCCESS;
}
DEFUN(subscriber_ussd_notify,