在该部分你将看到如何实现Asterisk CLI命令。对Asterisk来说,CLI是尤为重要的,无论是在进行配置、显示状态以及调试都会用到。该部分将对如何写Asterisk模块(2)的基础上进行添加代码。
首先我们需要包含定义CLI命令接口的头文件。
#include “asterisk/cli.h”
我们要实现的命令是echo,用于回显,不过只回显第一个参数。用于实现CLI回显的部分代码如下,稍后解释。
static char *handle_cli_echo(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
switch (cmd) {
case CLI_INIT:
e->command = "echo";
e->usage =
"Usage: echo <stuff>/n"
" Print back the first argument./n"
"Examples:/n"
" echo foo/n"
" echo /"multiple words/"/n"
"";
return NULL;
case CLI_GENERATE:
return NULL;
}
if (a->argc == e->args) {
ast_cli(a->fd, "You did not provide an argument to echo/n/n");
return CLI_SHOWUSAGE;
}
ast_cli(a->fd, "%s/n", a->argv[1]);
return CLI_SUCCESS;
}
首行定义的CLI处理接口符合CLI命令行处理的函数原型。ast_cli_entry包含CLI命令处理的静态信息,比如该命令是怎么使用的,命令的帮组信息如何?ast_cli_args包含参数信息。
static char *handle_cli_echo(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
CLI_INIT用户返回使用信息;CLI_GENERATE用户自动补全。