From e0d4e807e849edd9fbbdb7fc9b010fd4e3d85e4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Ter=C3=A4s?= Date: Fri, 16 Dec 2011 08:44:26 +0200 Subject: main/asterisk: upgrade to 10.0.0 ... and delete the testing version. --- main/asterisk/ASTERISK-18976.patch | 142 +++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 main/asterisk/ASTERISK-18976.patch (limited to 'main/asterisk/ASTERISK-18976.patch') diff --git a/main/asterisk/ASTERISK-18976.patch b/main/asterisk/ASTERISK-18976.patch new file mode 100644 index 000000000..36c613ff4 --- /dev/null +++ b/main/asterisk/ASTERISK-18976.patch @@ -0,0 +1,142 @@ +--- a/pbx/pbx_lua.c.orig 2011-12-08 08:28:31.000000000 +0200 ++++ b/pbx/pbx_lua.c 2011-12-08 08:54:22.000000000 +0200 +@@ -94,7 +94,6 @@ + static void lua_create_application_metatable(lua_State *L); + static void lua_create_autoservice_functions(lua_State *L); + static void lua_create_hangup_function(lua_State *L); +-static void lua_detect_goto(lua_State *L); + static void lua_concat_args(lua_State *L, int start, int nargs); + + static void lua_state_destroy(void *data); +@@ -213,19 +212,10 @@ + chan = lua_touserdata(L, -1); + lua_pop(L, 1); + ++ context = ast_strdupa(chan->context); ++ exten = ast_strdupa(chan->exten); ++ priority = chan->priority; + +- lua_getfield(L, LUA_REGISTRYINDEX, "context"); +- context = ast_strdupa(lua_tostring(L, -1)); +- lua_pop(L, 1); +- +- lua_getfield(L, LUA_REGISTRYINDEX, "exten"); +- exten = ast_strdupa(lua_tostring(L, -1)); +- lua_pop(L, 1); +- +- lua_getfield(L, LUA_REGISTRYINDEX, "priority"); +- priority = lua_tointeger(L, -1); +- lua_pop(L, 1); +- + lua_concat_args(L, 2, nargs); + data = lua_tostring(L, -1); + +@@ -256,75 +246,51 @@ + return lua_error(L); + } + +- lua_detect_goto(L); +- +- return 0; +-} +- +-/*! +- * \brief Detect if a Goto or other dialplan jump has been executed and return +- * control to the pbx engine. +- */ +-static void lua_detect_goto(lua_State *L) +-{ +- struct ast_channel *chan; +- +- lua_getfield(L, LUA_REGISTRYINDEX, "channel"); +- chan = lua_touserdata(L, -1); +- lua_pop(L, 1); +- +- /* check context */ +- lua_getfield(L, LUA_REGISTRYINDEX, "context"); +- lua_pushstring(L, chan->context); +- if (!lua_equal(L, -1, -2)) { ++ if (strcmp(context, chan->context)) { ++ lua_pushstring(L, context); ++ lua_pushstring(L, chan->context); + lua_pushliteral(L, "context"); +- goto e_goto_detected; +- } +- lua_pop(L, 2); +- +- /* check exten */ +- lua_getfield(L, LUA_REGISTRYINDEX, "exten"); +- lua_pushstring(L, chan->exten); +- if (!lua_equal(L, -1, -2)) { ++ } else if (strcmp(exten, chan->exten)) { ++ lua_pushstring(L, exten); ++ lua_pushstring(L, chan->exten); + lua_pushliteral(L, "exten"); +- goto e_goto_detected; +- } +- lua_pop(L, 2); +- +- /* check priority */ +- lua_getfield(L, LUA_REGISTRYINDEX, "priority"); +- lua_pushinteger(L, chan->priority); +- if (!lua_equal(L, -1, -2)) { ++ } else if (priority != chan->priority) { ++ lua_pushinteger(L, priority); ++ lua_pushinteger(L, chan->priority); + lua_pushliteral(L, "priority"); +- goto e_goto_detected; ++ } else { ++ /* no goto - restore the original position back ++ * to lua state, in case this was a recursive dialplan ++ * call (a dialplan application re-entering dialplan) */ ++ lua_update_registry(L, context, exten, priority); ++ return 0; + } +- lua_pop(L, 2); +- return; +- +-e_goto_detected: +- /* format our debug message */ +- lua_insert(L, -3); + +- lua_pushliteral(L, " changed from "); ++ /* goto detected - construct error message */ + lua_insert(L, -3); +- +- lua_pushliteral(L, " to "); +- lua_insert(L, -2); +- +- lua_concat(L, 5); +- +- ast_debug(2, "Goto detected: %s\n", lua_tostring(L, -1)); +- lua_pop(L, 1); +- +- /* let the lua engine know it needs to return control to the pbx */ +- lua_pushinteger(L, LUA_GOTO_DETECTED); ++ ++ lua_pushliteral(L, " changed from "); ++ lua_insert(L, -3); ++ ++ lua_pushliteral(L, " to "); ++ lua_insert(L, -2); ++ ++ lua_concat(L, 5); ++ ++ ast_debug(2, "Goto detected: %s\n", lua_tostring(L, -1)); ++ lua_pop(L, 1); ++ ++ /* let the lua engine know it needs to return control to the pbx */ ++ lua_pushinteger(L, LUA_GOTO_DETECTED); + lua_error(L); ++ ++ return 0; + } + + /*! + * \brief [lua_CFunction] Used to get the value of a variable or dialplan + * function (for access from lua, don't call directly) +- * ++ * + * The value of the variable or function is returned. This function is the + * 'get()' function in the following example as would be seen in + * extensions.lua. -- cgit v1.2.3