vty: Add simple VTY output for current calls
Start with a show call summary that lists simple data about the current set of calls: Call(5002) initial(type=SIP,state=CONFIRMED) remote(type=MNCC,state=INITIAL) Call(5001) initial(type=MNCC,state=PROCEEDING) remote(type=SIP,state=CONFIRMED) Related: OS#1680
This commit is contained in:
parent
b2b13f69ae
commit
c39c3df251
56
src/call.c
56
src/call.c
|
@ -28,6 +28,40 @@ extern void *tall_mncc_ctx;
|
||||||
LLIST_HEAD(g_call_list);
|
LLIST_HEAD(g_call_list);
|
||||||
static uint32_t last_call_id = 5000;
|
static uint32_t last_call_id = 5000;
|
||||||
|
|
||||||
|
|
||||||
|
const struct value_string call_type_vals[] = {
|
||||||
|
{ CALL_TYPE_NONE, "NONE" },
|
||||||
|
{ CALL_TYPE_SIP, "SIP" },
|
||||||
|
{ CALL_TYPE_MNCC, "MNCC" },
|
||||||
|
{ 0, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct value_string mncc_state_vals[] = {
|
||||||
|
{ MNCC_CC_INITIAL, "INITIAL" },
|
||||||
|
{ MNCC_CC_PROCEEDING, "PROCEEDING" },
|
||||||
|
{ MNCC_CC_CONNECTED, "CONNECTED" },
|
||||||
|
{ 0, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct value_string mncc_dir_vals[] = {
|
||||||
|
{ MNCC_DIR_MO, "MO" },
|
||||||
|
{ MNCC_DIR_MT, "MT" },
|
||||||
|
{ 0, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct value_string sip_state_vals[] = {
|
||||||
|
{ SIP_CC_INITIAL, "INITIAL" },
|
||||||
|
{ SIP_CC_DLG_CNFD, "CONFIRMED" },
|
||||||
|
{ SIP_CC_CONNECTED, "CONNECTED" },
|
||||||
|
{ 0, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct value_string sip_dir_vals[] = {
|
||||||
|
{ SIP_DIR_MO, "MO" },
|
||||||
|
{ SIP_DIR_MT, "MT" },
|
||||||
|
{ 0, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
void calls_init(void)
|
void calls_init(void)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -114,3 +148,25 @@ struct call_leg *call_leg_other(struct call_leg *leg)
|
||||||
leg, leg->call->id);
|
leg, leg->call->id);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *call_leg_type(struct call_leg *leg)
|
||||||
|
{
|
||||||
|
return get_value_string(call_type_vals, leg->type);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *call_leg_state(struct call_leg *leg)
|
||||||
|
{
|
||||||
|
struct mncc_call_leg *mncc;
|
||||||
|
struct sip_call_leg *sip;
|
||||||
|
|
||||||
|
switch (leg->type) {
|
||||||
|
case CALL_TYPE_SIP:
|
||||||
|
sip = (struct sip_call_leg *) leg;
|
||||||
|
return get_value_string(sip_state_vals, sip->state);
|
||||||
|
case CALL_TYPE_MNCC:
|
||||||
|
mncc = (struct mncc_call_leg *) leg;
|
||||||
|
return get_value_string(mncc_state_vals, mncc->state);
|
||||||
|
default:
|
||||||
|
return "unknown call type";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
10
src/call.h
10
src/call.h
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include <osmocom/core/linuxlist.h>
|
#include <osmocom/core/linuxlist.h>
|
||||||
#include <osmocom/core/timer.h>
|
#include <osmocom/core/timer.h>
|
||||||
|
#include <osmocom/core/utils.h>
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
@ -133,3 +134,12 @@ void call_leg_release(struct call_leg *leg);
|
||||||
|
|
||||||
struct call *call_mncc_create(void);
|
struct call *call_mncc_create(void);
|
||||||
struct call *call_sip_create(void);
|
struct call *call_sip_create(void);
|
||||||
|
|
||||||
|
const char *call_leg_type(struct call_leg *leg);
|
||||||
|
const char *call_leg_state(struct call_leg *leg);
|
||||||
|
|
||||||
|
extern const struct value_string call_type_vals[];
|
||||||
|
extern const struct value_string mncc_state_vals[];
|
||||||
|
extern const struct value_string mncc_dir_vals[];
|
||||||
|
extern const struct value_string sip_state_vals[];
|
||||||
|
extern const struct value_string sip_dir_vals[];
|
||||||
|
|
43
src/vty.c
43
src/vty.c
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "vty.h"
|
#include "vty.h"
|
||||||
#include "app.h"
|
#include "app.h"
|
||||||
|
#include "call.h"
|
||||||
|
|
||||||
#include <talloc.h>
|
#include <talloc.h>
|
||||||
|
|
||||||
|
@ -171,6 +172,46 @@ DEFUN(cfg_no_use_imsi, cfg_no_use_imsi_cmd,
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFUN(show_calls_sum, show_calls_sum_cmd,
|
||||||
|
"show calls summary",
|
||||||
|
SHOW_STR "Current calls\n")
|
||||||
|
{
|
||||||
|
struct call *call;
|
||||||
|
|
||||||
|
llist_for_each_entry(call, &g_call_list, entry) {
|
||||||
|
char *initial_type, *initial_state;
|
||||||
|
char *remote_type, *remote_state;
|
||||||
|
|
||||||
|
initial_type = initial_state = NULL;
|
||||||
|
remote_type = remote_state = NULL;
|
||||||
|
|
||||||
|
if (call->initial) {
|
||||||
|
initial_type = talloc_strdup(tall_mncc_ctx,
|
||||||
|
call_leg_type(call->initial));
|
||||||
|
initial_state = talloc_strdup(tall_mncc_ctx,
|
||||||
|
call_leg_state(call->initial));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (call->remote) {
|
||||||
|
remote_type = talloc_strdup(tall_mncc_ctx,
|
||||||
|
call_leg_type(call->remote));
|
||||||
|
remote_state = talloc_strdup(tall_mncc_ctx,
|
||||||
|
call_leg_state(call->remote));
|
||||||
|
}
|
||||||
|
|
||||||
|
vty_out(vty, "Call(%u) initial(type=%s,state=%s) remote(type=%s,state=%s)%s",
|
||||||
|
call->id, initial_type, initial_state, remote_type, remote_state,
|
||||||
|
VTY_NEWLINE);
|
||||||
|
|
||||||
|
talloc_free(initial_type);
|
||||||
|
talloc_free(initial_state);
|
||||||
|
talloc_free(remote_type);
|
||||||
|
talloc_free(remote_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
void mncc_sip_vty_init(void)
|
void mncc_sip_vty_init(void)
|
||||||
{
|
{
|
||||||
/* default values */
|
/* default values */
|
||||||
|
@ -196,4 +237,6 @@ void mncc_sip_vty_init(void)
|
||||||
install_node(&app_node, config_write_app);
|
install_node(&app_node, config_write_app);
|
||||||
install_element(APP_NODE, &cfg_use_imsi_cmd);
|
install_element(APP_NODE, &cfg_use_imsi_cmd);
|
||||||
install_element(APP_NODE, &cfg_no_use_imsi_cmd);
|
install_element(APP_NODE, &cfg_no_use_imsi_cmd);
|
||||||
|
|
||||||
|
install_element_ve(&show_calls_sum_cmd);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue