mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 19:28:53 +00:00
Oops, some dev-mode changes for ISO C90
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@88287 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
151
pbx/pbx_lua.c
151
pbx/pbx_lua.c
@@ -153,18 +153,21 @@ static int lua_pbx_findapp(lua_State *L)
|
||||
*/
|
||||
static int lua_pbx_exec(lua_State *L)
|
||||
{
|
||||
int nargs = lua_gettop(L);
|
||||
int res, nargs = lua_gettop(L);
|
||||
char data[LUA_EXT_DATA_SIZE] = "";
|
||||
char *data_next = data;
|
||||
char *data_next = data, *app_name;
|
||||
char *context, *exten;
|
||||
char tmp[80], tmp2[80], tmp3[LUA_EXT_DATA_SIZE];
|
||||
int priority, autoservice;
|
||||
size_t data_left = sizeof(data);
|
||||
int res;
|
||||
struct ast_app *app;
|
||||
struct ast_channel *chan;
|
||||
|
||||
lua_getfield(L, 1, "name");
|
||||
char *app_name = ast_strdupa(lua_tostring(L, -1));
|
||||
app_name = ast_strdupa(lua_tostring(L, -1));
|
||||
lua_pop(L, 1);
|
||||
|
||||
struct ast_app *app = pbx_findapp(app_name);
|
||||
if (!app) {
|
||||
if (!(app = pbx_findapp(app_name))) {
|
||||
lua_pushstring(L, "application '");
|
||||
lua_pushstring(L, app_name);
|
||||
lua_pushstring(L, "' not found");
|
||||
@@ -174,28 +177,29 @@ static int lua_pbx_exec(lua_State *L)
|
||||
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "channel");
|
||||
struct ast_channel *chan = lua_touserdata(L, -1);
|
||||
chan = lua_touserdata(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "context");
|
||||
char *context = ast_strdupa(lua_tostring(L, -1));
|
||||
context = ast_strdupa(lua_tostring(L, -1));
|
||||
lua_pop(L, 1);
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "exten");
|
||||
char *exten = ast_strdupa(lua_tostring(L, -1));
|
||||
exten = ast_strdupa(lua_tostring(L, -1));
|
||||
lua_pop(L, 1);
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "priority");
|
||||
int priority = lua_tointeger(L, -1);
|
||||
priority = lua_tointeger(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
|
||||
if (nargs > 1) {
|
||||
int i;
|
||||
|
||||
if (!lua_isnil(L, 2))
|
||||
ast_build_string(&data_next, &data_left, "%s", luaL_checkstring(L, 2));
|
||||
|
||||
int i;
|
||||
for (i = 3; i <= nargs; i++) {
|
||||
if (lua_isnil(L, i))
|
||||
ast_build_string(&data_next, &data_left, ",");
|
||||
@@ -204,7 +208,6 @@ static int lua_pbx_exec(lua_State *L)
|
||||
}
|
||||
}
|
||||
|
||||
char tmp[80], tmp2[80], tmp3[LUA_EXT_DATA_SIZE];
|
||||
ast_verb(3, "Executing [%s@%s:%d] %s(\"%s\", \"%s\")\n",
|
||||
exten, context, priority,
|
||||
term_color(tmp, app_name, COLOR_BRCYAN, 0, sizeof(tmp)),
|
||||
@@ -212,7 +215,7 @@ static int lua_pbx_exec(lua_State *L)
|
||||
term_color(tmp3, data, COLOR_BRMAGENTA, 0, sizeof(tmp3)));
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "autoservice");
|
||||
int autoservice = lua_toboolean(L, -1);
|
||||
autoservice = lua_toboolean(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
if (autoservice)
|
||||
@@ -245,8 +248,11 @@ static int lua_pbx_exec(lua_State *L)
|
||||
*/
|
||||
static int lua_get_variable_value(lua_State *L)
|
||||
{
|
||||
char *value = NULL;
|
||||
struct ast_channel *chan;
|
||||
char *value = NULL, *name;
|
||||
char *workspace = alloca(LUA_BUF_SIZE);
|
||||
int autoservice;
|
||||
|
||||
workspace[0] = '\0';
|
||||
|
||||
if (!lua_istable(L, 1)) {
|
||||
@@ -255,15 +261,15 @@ static int lua_get_variable_value(lua_State *L)
|
||||
}
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "channel");
|
||||
struct ast_channel *chan = lua_touserdata(L, -1);
|
||||
chan = lua_touserdata(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
lua_getfield(L, 1, "name");
|
||||
char *name = ast_strdupa(lua_tostring(L, -1));
|
||||
name = ast_strdupa(lua_tostring(L, -1));
|
||||
lua_pop(L, 1);
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "autoservice");
|
||||
int autoservice = lua_toboolean(L, -1);
|
||||
autoservice = lua_toboolean(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
if (autoservice)
|
||||
@@ -302,23 +308,27 @@ static int lua_get_variable_value(lua_State *L)
|
||||
*/
|
||||
static int lua_set_variable_value(lua_State *L)
|
||||
{
|
||||
const char *name, *value;
|
||||
struct ast_channel *chan;
|
||||
int autoservice;
|
||||
|
||||
if (!lua_istable(L, 1)) {
|
||||
lua_pushstring(L, "User probably used '.' instead of ':' for setting a channel variable");
|
||||
return lua_error(L);
|
||||
}
|
||||
|
||||
lua_getfield(L, 1, "name");
|
||||
const char *name = ast_strdupa(lua_tostring(L, -1));
|
||||
name = ast_strdupa(lua_tostring(L, -1));
|
||||
lua_pop(L, 1);
|
||||
|
||||
const char *value = luaL_checkstring(L, 2);
|
||||
value = luaL_checkstring(L, 2);
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "channel");
|
||||
struct ast_channel *chan = lua_touserdata(L, -1);
|
||||
chan = lua_touserdata(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "autoservice");
|
||||
int autoservice = lua_toboolean(L, -1);
|
||||
autoservice = lua_toboolean(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
if (autoservice)
|
||||
@@ -482,13 +492,14 @@ static void lua_create_autoservice_functions(lua_State *L)
|
||||
*/
|
||||
static int lua_get_variable(lua_State *L)
|
||||
{
|
||||
struct ast_channel *chan;
|
||||
char *name = ast_strdupa(luaL_checkstring(L, 2));
|
||||
char *value = NULL;
|
||||
char *workspace = alloca(LUA_BUF_SIZE);
|
||||
workspace[0] = '\0';
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "channel");
|
||||
struct ast_channel *chan = lua_touserdata(L, -1);
|
||||
chan = lua_touserdata(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
lua_push_variable_table(L, name);
|
||||
@@ -520,15 +531,17 @@ static int lua_get_variable(lua_State *L)
|
||||
*/
|
||||
static int lua_set_variable(lua_State *L)
|
||||
{
|
||||
struct ast_channel *chan;
|
||||
int autoservice;
|
||||
const char *name = luaL_checkstring(L, 2);
|
||||
const char *value = luaL_checkstring(L, 3);
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "channel");
|
||||
struct ast_channel *chan = lua_touserdata(L, -1);
|
||||
chan = lua_touserdata(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "autoservice");
|
||||
int autoservice = lua_toboolean(L, -1);
|
||||
autoservice = lua_toboolean(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
if (autoservice)
|
||||
@@ -562,20 +575,21 @@ static int lua_func_read(lua_State *L)
|
||||
{
|
||||
int nargs = lua_gettop(L);
|
||||
char fullname[LUA_EXT_DATA_SIZE] = "";
|
||||
char *fullname_next = fullname;
|
||||
char *fullname_next = fullname, *name;
|
||||
size_t fullname_left = sizeof(fullname);
|
||||
|
||||
lua_getfield(L, 1, "name");
|
||||
char *name = ast_strdupa(lua_tostring(L, -1));
|
||||
name = ast_strdupa(lua_tostring(L, -1));
|
||||
lua_pop(L, 1);
|
||||
|
||||
ast_build_string(&fullname_next, &fullname_left, "%s(", name);
|
||||
|
||||
if (nargs > 1) {
|
||||
int i;
|
||||
|
||||
if (!lua_isnil(L, 2))
|
||||
ast_build_string(&fullname_next, &fullname_left, "%s", luaL_checkstring(L, 2));
|
||||
|
||||
int i;
|
||||
for (i = 3; i <= nargs; i++) {
|
||||
if (lua_isnil(L, i))
|
||||
ast_build_string(&fullname_next, &fullname_left, ",");
|
||||
@@ -606,11 +620,14 @@ static int lua_func_read(lua_State *L)
|
||||
*/
|
||||
static int lua_autoservice_start(lua_State *L)
|
||||
{
|
||||
struct ast_channel *chan;
|
||||
int res;
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "channel");
|
||||
struct ast_channel *chan = lua_touserdata(L, -1);
|
||||
chan = lua_touserdata(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
int res = ast_autoservice_start(chan);
|
||||
res = ast_autoservice_start(chan);
|
||||
|
||||
lua_pushboolean(L, !res);
|
||||
lua_setfield(L, LUA_REGISTRYINDEX, "autoservice");
|
||||
@@ -634,11 +651,14 @@ static int lua_autoservice_start(lua_State *L)
|
||||
*/
|
||||
static int lua_autoservice_stop(lua_State *L)
|
||||
{
|
||||
struct ast_channel *chan;
|
||||
int res;
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "channel");
|
||||
struct ast_channel *chan = lua_touserdata(L, -1);
|
||||
chan = lua_touserdata(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
int res = ast_autoservice_stop(chan);
|
||||
res = ast_autoservice_stop(chan);
|
||||
|
||||
lua_pushboolean(L, 0);
|
||||
lua_setfield(L, LUA_REGISTRYINDEX, "autoservice");
|
||||
@@ -672,16 +692,18 @@ static int lua_autoservice_status(lua_State *L)
|
||||
*/
|
||||
static int lua_sort_extensions(lua_State *L)
|
||||
{
|
||||
int extensions, extensions_order;
|
||||
|
||||
/* create the extensions_order table */
|
||||
lua_newtable(L);
|
||||
lua_setfield(L, LUA_REGISTRYINDEX, "extensions_order");
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "extensions_order");
|
||||
int extensions_order = lua_gettop(L);
|
||||
extensions_order = lua_gettop(L);
|
||||
|
||||
/* sort each context in the extensions table */
|
||||
/* load the 'extensions' table */
|
||||
lua_getglobal(L, "extensions");
|
||||
int extensions = lua_gettop(L);
|
||||
extensions = lua_gettop(L);
|
||||
if (lua_isnil(L, -1)) {
|
||||
lua_pop(L, 1);
|
||||
lua_pushstring(L, "Unable to find 'extensions' table in extensions.lua\n");
|
||||
@@ -695,10 +717,11 @@ static int lua_sort_extensions(lua_State *L)
|
||||
for (lua_pushnil(L); lua_next(L, extensions); lua_pop(L, 1)) {
|
||||
int context = lua_gettop(L);
|
||||
int context_name = context - 1;
|
||||
int context_order;
|
||||
|
||||
lua_pushvalue(L, context_name);
|
||||
lua_newtable(L);
|
||||
int context_order = lua_gettop(L);
|
||||
context_order = lua_gettop(L);
|
||||
|
||||
/* iterate through this context an popluate the corrisponding
|
||||
* table in the extensions_order table */
|
||||
@@ -769,11 +792,12 @@ static int lua_extension_cmp(lua_State *L)
|
||||
*/
|
||||
static char *lua_read_extensions_file(lua_State *L, long *size)
|
||||
{
|
||||
FILE *f;
|
||||
char *data;
|
||||
char *path = alloca(strlen(config) + strlen(ast_config_AST_CONFIG_DIR) + 2);
|
||||
sprintf(path, "%s/%s", ast_config_AST_CONFIG_DIR, config);
|
||||
|
||||
FILE *f = fopen(path, "r");
|
||||
if (!f) {
|
||||
if (!(f = fopen(path, "r"))) {
|
||||
lua_pushstring(L, "cannot open '");
|
||||
lua_pushstring(L, path);
|
||||
lua_pushstring(L, "' for reading: ");
|
||||
@@ -788,8 +812,7 @@ static char *lua_read_extensions_file(lua_State *L, long *size)
|
||||
|
||||
fseek(f, 0l, SEEK_SET);
|
||||
|
||||
char *data = ast_malloc(*size);
|
||||
if (!data) {
|
||||
if (!(data = ast_malloc(*size))) {
|
||||
*size = 0;
|
||||
fclose(f);
|
||||
lua_pushstring(L, "not enough memory");
|
||||
@@ -913,6 +936,8 @@ static void lua_free_extensions()
|
||||
static lua_State *lua_get_state(struct ast_channel *chan)
|
||||
{
|
||||
struct ast_datastore *datastore = NULL;
|
||||
lua_State *L;
|
||||
|
||||
if (!chan) {
|
||||
lua_State *L = luaL_newstate();
|
||||
if (!L) {
|
||||
@@ -949,7 +974,7 @@ static lua_State *lua_get_state(struct ast_channel *chan)
|
||||
ast_channel_datastore_add(chan, datastore);
|
||||
ast_channel_unlock(chan);
|
||||
|
||||
lua_State *L = datastore->data;
|
||||
L = datastore->data;
|
||||
|
||||
if (lua_load_extensions(L, chan)) {
|
||||
const char *error = lua_tostring(L, -1);
|
||||
@@ -970,19 +995,21 @@ static lua_State *lua_get_state(struct ast_channel *chan)
|
||||
|
||||
static int exists(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data)
|
||||
{
|
||||
int res;
|
||||
lua_State *L;
|
||||
struct ast_module_user *u = ast_module_user_add(chan);
|
||||
if (!u) {
|
||||
ast_log(LOG_ERROR, "Error adjusting use count, probably could not allocate memory\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
lua_State *L = lua_get_state(chan);
|
||||
L = lua_get_state(chan);
|
||||
if (!L) {
|
||||
ast_module_user_remove(u);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int res = lua_find_extension(L, context, exten, priority, &exists, 0);
|
||||
res = lua_find_extension(L, context, exten, priority, &exists, 0);
|
||||
|
||||
if (!chan) lua_close(L);
|
||||
ast_module_user_remove(u);
|
||||
@@ -991,19 +1018,21 @@ static int exists(struct ast_channel *chan, const char *context, const char *ext
|
||||
|
||||
static int canmatch(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data)
|
||||
{
|
||||
int res;
|
||||
lua_State *L;
|
||||
struct ast_module_user *u = ast_module_user_add(chan);
|
||||
if (!u) {
|
||||
ast_log(LOG_ERROR, "Error adjusting use count, probably could not allocate memory\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
lua_State *L = lua_get_state(chan);
|
||||
L = lua_get_state(chan);
|
||||
if (!L) {
|
||||
ast_module_user_remove(u);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int res = lua_find_extension(L, context, exten, priority, &canmatch, 0);
|
||||
res = lua_find_extension(L, context, exten, priority, &canmatch, 0);
|
||||
|
||||
if (!chan) lua_close(L);
|
||||
ast_module_user_remove(u);
|
||||
@@ -1012,19 +1041,21 @@ static int canmatch(struct ast_channel *chan, const char *context, const char *e
|
||||
|
||||
static int matchmore(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data)
|
||||
{
|
||||
int res;
|
||||
lua_State *L;
|
||||
struct ast_module_user *u = ast_module_user_add(chan);
|
||||
if (!u) {
|
||||
ast_log(LOG_ERROR, "Error adjusting use count, probably could not allocate memory\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
lua_State *L = lua_get_state(chan);
|
||||
L = lua_get_state(chan);
|
||||
if (!L) {
|
||||
ast_module_user_remove(u);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int res = lua_find_extension(L, context, exten, priority, &matchmore, 0);
|
||||
res = lua_find_extension(L, context, exten, priority, &matchmore, 0);
|
||||
|
||||
if (!chan) lua_close(L);
|
||||
ast_module_user_remove(u);
|
||||
@@ -1034,15 +1065,15 @@ static int matchmore(struct ast_channel *chan, const char *context, const char *
|
||||
|
||||
static int exec(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data)
|
||||
{
|
||||
int res;
|
||||
lua_State *L;
|
||||
struct ast_module_user *u = ast_module_user_add(chan);
|
||||
if (!u) {
|
||||
ast_log(LOG_ERROR, "Error adjusting use count, probably could not allocate memory\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
int res;
|
||||
|
||||
lua_State *L = lua_get_state(chan);
|
||||
L = lua_get_state(chan);
|
||||
if (!L) {
|
||||
ast_module_user_remove(u);
|
||||
return -1;
|
||||
@@ -1095,6 +1126,8 @@ static int exec(struct ast_channel *chan, const char *context, const char *exten
|
||||
*/
|
||||
static int lua_find_extension(lua_State *L, const char *context, const char *exten, int priority, ast_switch_f *func, int push_func)
|
||||
{
|
||||
int context_table, context_order_table, i;
|
||||
|
||||
ast_debug(2, "Looking up %s@%s:%i\n", exten, context, priority);
|
||||
if (priority != 1)
|
||||
return 0;
|
||||
@@ -1117,7 +1150,7 @@ static int lua_find_extension(lua_State *L, const char *context, const char *ext
|
||||
/* remove the extensions table */
|
||||
lua_remove(L, -2);
|
||||
|
||||
int context_table = lua_gettop(L);
|
||||
context_table = lua_gettop(L);
|
||||
|
||||
/* load the extensions order table for this context */
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "extensions_order");
|
||||
@@ -1125,29 +1158,29 @@ static int lua_find_extension(lua_State *L, const char *context, const char *ext
|
||||
|
||||
lua_remove(L, -2); /* remove the extensions order table */
|
||||
|
||||
int context_order_table = lua_gettop(L);
|
||||
context_order_table = lua_gettop(L);
|
||||
|
||||
/* step through the extensions looking for a match */
|
||||
int i;
|
||||
for (i = 1; i < lua_objlen(L, context_order_table) + 1; i++) {
|
||||
int e_index, isnumber, match = 0;
|
||||
const char *e;
|
||||
|
||||
lua_pushinteger(L, i);
|
||||
lua_gettable(L, context_order_table);
|
||||
int e_index = lua_gettop(L);
|
||||
int isnumber = lua_isnumber(L, e_index);
|
||||
e_index = lua_gettop(L);
|
||||
isnumber = lua_isnumber(L, e_index);
|
||||
|
||||
const char *e = lua_tostring(L, e_index);
|
||||
if (!e) {
|
||||
if (!(e = lua_tostring(L, e_index))) {
|
||||
lua_pop(L, 1);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* make sure this is not the 'include' extension */
|
||||
if(!strcasecmp(e, "include")) {
|
||||
if (!strcasecmp(e, "include")) {
|
||||
lua_pop(L, 1);
|
||||
continue;
|
||||
}
|
||||
|
||||
int match = 0;
|
||||
if (func == &matchmore)
|
||||
match = ast_extension_close(e, exten, E_MATCHMORE);
|
||||
else if (func == &canmatch)
|
||||
@@ -1239,14 +1272,14 @@ static struct ast_switch lua_switch = {
|
||||
|
||||
static int load_or_reload_lua_stuff(void)
|
||||
{
|
||||
int res = AST_MODULE_LOAD_SUCCESS;
|
||||
|
||||
lua_State *L = luaL_newstate();
|
||||
if (!L) {
|
||||
ast_log(LOG_ERROR, "Error allocating lua_State, no memory\n");
|
||||
return AST_MODULE_LOAD_FAILURE;
|
||||
}
|
||||
|
||||
int res = AST_MODULE_LOAD_SUCCESS;
|
||||
|
||||
if (lua_reload_extensions(L)) {
|
||||
const char *error = lua_tostring(L, -1);
|
||||
ast_log(LOG_ERROR, "Error loading extensions.lua: %s\n", error);
|
||||
|
Reference in New Issue
Block a user