diff --git a/UPGRADE.txt b/UPGRADE.txt index ca09720c124e89eebe18b8882546ea78c7286cd9..86d256fa9881052cad0fe500e471bf3f8474ea58 100644 --- a/UPGRADE.txt +++ b/UPGRADE.txt @@ -35,6 +35,11 @@ Functions: * The function ${CHECK_MD5()} has been deprecated in favor of using an expression: $[${MD5(<string>)} = ${saved_md5}]. +* The 'builtin' functions that used to be combined in pbx_functions.so are + now built as separate modules. If you are not using 'autoload=yes' in your + modules.conf file then you will need to explicitly load the modules that + contain the functions you want to use. + The SIP channel: * The "incominglimit" setting is replaced by the "call-limit" setting in sip.conf. diff --git a/funcs/Makefile b/funcs/Makefile index c1e8cd4f611d8daf4277959452c25fd961d76120..1d231faa2ad944b756c7337a429a2a193d656aec 100644 --- a/funcs/Makefile +++ b/funcs/Makefile @@ -3,7 +3,7 @@ # # Makefile for dialplan functions # -# Copyright (C) 2005, Digium +# Copyright (C) 2005 - 2006, Digium # # Kevin P. Fleming <kpfleming@digium.com> # @@ -11,23 +11,7 @@ # the GNU General Public License # -FUNCS=pbx_functions.so - -BUILTINS=func_md5.o \ - func_math.o \ - func_groupcount.o \ - func_strings.o \ - func_cdr.o \ - func_logic.o \ - func_env.o \ - func_db.o \ - func_timeout.o \ - func_language.o \ - func_moh.o \ - func_base64.o \ - func_sha1.o - -AVAILABLE_FUNCS=$(filter-out $(BUILTINS),$(patsubst %.c,%.o,$(wildcard func*.c))) +AVAILABLE_FUNCS=$(patsubst %.c,%.o,$(wildcard func*.c)) ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/odbcinst.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/odbcinst.h),) STANDALONE_FUNCS=$(filter-out func_odbc.o,$(AVAILABLE_FUNCS)) @@ -35,11 +19,7 @@ else STANDALONE_FUNCS=$(AVAILABLE_FUNCS) endif -FUNCS+=$(STANDALONE_FUNCS:.o=.so) - -FUNC_SOURCES=$(BUILTINS:.o=.c) - -FUNC_STRUCTS=$(shell grep 'struct ast_custom_function' $(FUNC_SOURCES) | awk '{print $$3};' | sort) +FUNCS=$(STANDALONE_FUNCS:.o=.so) ifeq (${OSARCH},CYGWIN) CYGSOLINK=-Wl,--out-implib=lib$@.a -Wl,--export-all-symbols @@ -56,20 +36,6 @@ clean: %.so : %.o $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -#$(BUILTINS) : CFLAGS += -DBUILTIN_FUNC - -pbx_functions.h: $(FUNC_SOURCES) - @echo "/* Automatically generated - do not edit */" > $@ - @for f in $(FUNC_SOURCES); do echo "#include \"$$f\"" >> $@; done - @echo "static struct ast_custom_function *builtins[] = {" >> $@ - @for f in $(FUNC_STRUCTS); do echo "&$$f," >> $@; done - @echo "};" >> $@ - -pbx_functions.o: pbx_functions.h - -pbx_functions.so: pbx_functions.o #$(BUILTINS) - $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} - func_odbc.so: func_odbc.o $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -lodbc diff --git a/funcs/func_base64.c b/funcs/func_base64.c index be335e37ae626c5338252df2220806b007e6cc76..cbd1739e2e4961a78199279167b1350e3f4e9f97 100644 --- a/funcs/func_base64.c +++ b/funcs/func_base64.c @@ -1,85 +1,117 @@ -/* - * Asterisk -- An open source telephony toolkit. - * - * Copyright (C) 2005, Digium, Inc. - * Copyright (C) 2005, Claude Patry - * - * See http://www.asterisk.org for more information about - * the Asterisk project. Please do not directly contact - * any of the maintainers of this project for assistance; - * the project provides a web site, mailing lists and IRC - * channels for your use. - * - * This program is free software, distributed under the terms of - * the GNU General Public License Version 2. See the LICENSE file - * at the top of the source tree. - */ - -/*! \file - * - * \brief Use the base64 as functions - * - */ - -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> - -#include "asterisk.h" - -/* ASTERISK_FILE_VERSION(__FILE__, "Revision: 7221 ") */ - -#include "asterisk/channel.h" -#include "asterisk/pbx.h" -#include "asterisk/logger.h" -#include "asterisk/utils.h" -#include "asterisk/app.h" - -static char *builtin_function_base64_encode(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) -{ - int res = 0; - - if (ast_strlen_zero(data) ) { - ast_log(LOG_WARNING, "Syntax: BASE64_ENCODE(<data>) - missing argument!\n"); - return NULL; - } - - ast_log(LOG_DEBUG, "data=%s\n",data); - res = ast_base64encode(buf, data, strlen(data), len); - ast_log(LOG_DEBUG, "res=%d\n", res); - return buf; -} - -static char *builtin_function_base64_decode(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) -{ - if (ast_strlen_zero(data) ) { - ast_log(LOG_WARNING, "Syntax: BASE64_DECODE(<base_64 string>) - missing argument!\n"); - return NULL; - } - - ast_log(LOG_DEBUG, "data=%s\n", data); - ast_base64decode(buf, data, len); - return buf; -} - -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function base64_encode_function = { - .name = "BASE64_ENCODE", - .synopsis = "Encode a string in base64", - .desc = "Returns the base64 string\n", - .syntax = "BASE64_ENCODE(<string>)", - .read = builtin_function_base64_encode, -}; - -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function base64_decode_function = { - .name = "BASE64_DECODE", - .synopsis = "Decode a base64 string", - .desc = "Returns the plain text string\n", - .syntax = "BASE64_DECODE(<base64_string>)", - .read = builtin_function_base64_decode, -}; +/* + * Asterisk -- An open source telephony toolkit. + * + * Copyright (C) 2005 - 2006, Digium, Inc. + * Copyright (C) 2005, Claude Patry + * + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. + */ + +/*! \file + * + * \brief Use the base64 as functions + * + */ + +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> + +#include "asterisk.h" + +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + +#include "asterisk/module.h" +#include "asterisk/channel.h" +#include "asterisk/pbx.h" +#include "asterisk/logger.h" +#include "asterisk/utils.h" +#include "asterisk/app.h" + +static char *base64_encode(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + int res = 0; + + if (ast_strlen_zero(data) ) { + ast_log(LOG_WARNING, "Syntax: BASE64_ENCODE(<data>) - missing argument!\n"); + return NULL; + } + + ast_log(LOG_DEBUG, "data=%s\n",data); + res = ast_base64encode(buf, data, strlen(data), len); + ast_log(LOG_DEBUG, "res=%d\n", res); + return buf; +} + +static char *base64_decode(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + if (ast_strlen_zero(data) ) { + ast_log(LOG_WARNING, "Syntax: BASE64_DECODE(<base_64 string>) - missing argument!\n"); + return NULL; + } + + ast_log(LOG_DEBUG, "data=%s\n", data); + ast_base64decode(buf, data, len); + return buf; +} + +static struct ast_custom_function base64_encode_function = { + .name = "BASE64_ENCODE", + .synopsis = "Encode a string in base64", + .desc = "Returns the base64 string\n", + .syntax = "BASE64_ENCODE(<string>)", + .read = base64_encode, +}; + +static struct ast_custom_function base64_decode_function = { + .name = "BASE64_DECODE", + .synopsis = "Decode a base64 string", + .desc = "Returns the plain text string\n", + .syntax = "BASE64_DECODE(<base64_string>)", + .read = base64_decode, +}; + +static char *tdesc = "base64 encode/decode dialplan functions"; + +int unload_module(void) +{ + return ast_custom_function_unregister(&base64_encode_function) || + ast_custom_function_unregister(&base64_decode_function); +} + +int load_module(void) +{ + return ast_custom_function_register(&base64_encode_function) || + ast_custom_function_register(&base64_decode_function); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} + +/* +Local Variables: +mode: C +c-file-style: "linux" +indent-tabs-mode: nil +End: +*/ diff --git a/funcs/func_callerid.c b/funcs/func_callerid.c index fdaaf632d80d7ab4dea78d7b65ebb803aa6c89ab..c907d96a9e8b8cfed119ba11ec184d94fcce4126 100644 --- a/funcs/func_callerid.c +++ b/funcs/func_callerid.c @@ -29,9 +29,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") -#ifndef BUILTIN_FUNC #include "asterisk/module.h" -#endif /* BUILTIN_FUNC */ #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" @@ -120,10 +118,7 @@ static void callerid_write(struct ast_channel *chan, char *cmd, char *data, cons } } -#ifndef BUILTIN_FUNC -static -#endif /* BUILTIN_FUNC */ -struct ast_custom_function callerid_function = { +static struct ast_custom_function callerid_function = { .name = "CALLERID", .synopsis = "Gets or sets Caller*ID data on the channel.", .syntax = "CALLERID(datatype[,<optional-CID>])", @@ -134,7 +129,6 @@ struct ast_custom_function callerid_function = { .write = callerid_write, }; -#ifndef BUILTIN_FUNC static char *tdesc = "Caller ID related dialplan function"; int unload_module(void) @@ -161,7 +155,6 @@ char *key() { return ASTERISK_GPL_KEY; } -#endif /* BUILTIN_FUNC */ /* Local Variables: diff --git a/funcs/func_cdr.c b/funcs/func_cdr.c index 4922b9a933a5e5b00198a325df2fcb628bdb40fc..205651a1c22b54bea0f3c58e0da92d865bda0122 100644 --- a/funcs/func_cdr.c +++ b/funcs/func_cdr.c @@ -29,8 +29,9 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" @@ -46,7 +47,7 @@ AST_APP_OPTIONS(cdr_func_options, { AST_APP_OPTION('r', OPT_RECURSIVE), }); -static char *builtin_function_cdr_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *cdr_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { char *ret; char *parse; @@ -76,7 +77,7 @@ static char *builtin_function_cdr_read(struct ast_channel *chan, char *cmd, char return ret; } -static void builtin_function_cdr_write(struct ast_channel *chan, char *cmd, char *data, const char *value) +static void cdr_write(struct ast_channel *chan, char *cmd, char *data, const char *value) { char *parse; struct ast_flags flags = {0}; @@ -107,15 +108,46 @@ static void builtin_function_cdr_write(struct ast_channel *chan, char *cmd, char ast_cdr_setvar(chan->cdr, args.variable, value, (ast_test_flag(&flags,OPT_RECURSIVE) ) ? 1 : 0 ); } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function cdr_function = { +static struct ast_custom_function cdr_function = { .name = "CDR", .synopsis = "Gets or sets a CDR variable", .desc= "Option 'r' searches the entire stack of CDRs on the channel\n", .syntax = "CDR(<name>[|options])", - .read = builtin_function_cdr_read, - .write = builtin_function_cdr_write, + .read = cdr_read, + .write = cdr_write, }; +static char *tdesc = "CDR dialplan function"; + +int unload_module(void) +{ + return ast_custom_function_unregister(&cdr_function); +} + +int load_module(void) +{ + return ast_custom_function_register(&cdr_function); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} + +/* +Local Variables: +mode: C +c-file-style: "linux" +indent-tabs-mode: nil +End: +*/ diff --git a/funcs/func_cut.c b/funcs/func_cut.c index 9064b1e68226421e97d048d8ddcca08d6cfbcd6e..7b3d2bff8072b0421545546009435b950b00d5b9 100644 --- a/funcs/func_cut.c +++ b/funcs/func_cut.c @@ -301,9 +301,9 @@ struct ast_custom_function acf_cut = { int unload_module(void) { - int res; + int res = 0; - res = ast_custom_function_unregister(&acf_cut); + res |= ast_custom_function_unregister(&acf_cut); res |= ast_custom_function_unregister(&acf_sort); STANDARD_HANGUP_LOCALUSERS; @@ -313,9 +313,9 @@ int unload_module(void) int load_module(void) { - int res; + int res = 0; - res = ast_custom_function_register(&acf_cut); + res |= ast_custom_function_register(&acf_cut); res |= ast_custom_function_register(&acf_sort); return res; diff --git a/funcs/func_db.c b/funcs/func_db.c index 3125d8ecaa1303383307d1553720f936f1607b9d..efce117c883b41cdc49428cf550da17c98653935 100644 --- a/funcs/func_db.c +++ b/funcs/func_db.c @@ -32,8 +32,9 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" @@ -111,10 +112,7 @@ static void function_db_write(struct ast_channel *chan, char *cmd, char *data, c } } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function db_function = { +static struct ast_custom_function db_function = { .name = "DB", .synopsis = "Read or Write from/to the Asterisk database", .syntax = "DB(<family>/<key>)", @@ -167,10 +165,7 @@ static char *function_db_exists(struct ast_channel *chan, char *cmd, char *data, return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function db_exists_function = { +static struct ast_custom_function db_exists_function = { .name = "DB_EXISTS", .synopsis = "Check to see if a key exists in the Asterisk database", .syntax = "DB_EXISTS(<family>/<key>)", @@ -180,3 +175,41 @@ struct ast_custom_function db_exists_function = { "also set the variable DB_RESULT to the key's value if it exists.\n", .read = function_db_exists, }; + +static char *tdesc = "Database (astdb) related dialplan functions"; + +int unload_module(void) +{ + int res = 0; + + res |= ast_custom_function_unregister(&db_function); + res |= ast_custom_function_unregister(&db_exists_function); + + return res; +} + +int load_module(void) +{ + int res = 0; + + res |= ast_custom_function_register(&db_function); + res |= ast_custom_function_register(&db_exists_function); + + return res; +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} + diff --git a/funcs/func_enum.c b/funcs/func_enum.c index 65b22db84fb5b9e10cc683c9d84ebe13dc32617a..8a063bee7ea2de02a2dab0c6fcd559b0807770b6 100644 --- a/funcs/func_enum.c +++ b/funcs/func_enum.c @@ -34,9 +34,9 @@ #include "asterisk.h" -#ifndef BUILTIN_FUNC +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + #include "asterisk/module.h" -#endif /* BUILTIN_FUNC */ #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/utils.h" @@ -145,10 +145,7 @@ static char *function_enum(struct ast_channel *chan, char *cmd, char *data, char return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function enum_function = { +static struct ast_custom_function enum_function = { .name = "ENUMLOOKUP", .synopsis = "ENUMLOOKUP allows for general or specific querying of NAPTR records" " or counts of NAPTR types for ENUM or ENUM-like DNS pointers", @@ -188,10 +185,7 @@ static char *function_txtcidname(struct ast_channel *chan, char *cmd, char *data return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function txtcidname_function = { +static struct ast_custom_function txtcidname_function = { .name = "TXTCIDNAME", .synopsis = "TXTCIDNAME looks up a caller name via DNS", .syntax = "TXTCIDNAME(<number>)", @@ -201,27 +195,26 @@ struct ast_custom_function txtcidname_function = { .read = function_txtcidname, }; -#ifndef BUILTIN_FUNC - -static char *tdesc = "ENUM Related Functions"; +static char *tdesc = "ENUM related dialplan functions"; int unload_module(void) { - ast_custom_function_unregister(&enum_function); - ast_custom_function_unregister(&txtcidname_function); + int res = 0; + + res |= ast_custom_function_unregister(&enum_function); + res |= ast_custom_function_unregister(&txtcidname_function); STANDARD_HANGUP_LOCALUSERS; - return 0; + return res; } int load_module(void) { - int res; + int res = 0; - res = ast_custom_function_register(&enum_function); - if (!res) - ast_custom_function_register(&txtcidname_function); + res |= ast_custom_function_register(&enum_function); + res |= ast_custom_function_register(&txtcidname_function); return res; } @@ -244,5 +237,4 @@ char *key() { return ASTERISK_GPL_KEY; } -#endif /* BUILTIN_FUNC */ diff --git a/funcs/func_env.c b/funcs/func_env.c index a4a5162d6f6f2ff0f76f5868e87fb85e08159077..6ad6bf73fb16be1e9d3e171a6bafa285da34432a 100644 --- a/funcs/func_env.c +++ b/funcs/func_env.c @@ -27,15 +27,16 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" #include "asterisk/utils.h" #include "asterisk/app.h" -static char *builtin_function_env_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *env_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { char *ret = ""; @@ -49,7 +50,7 @@ static char *builtin_function_env_read(struct ast_channel *chan, char *cmd, char return buf; } -static void builtin_function_env_write(struct ast_channel *chan, char *cmd, char *data, const char *value) +static void env_write(struct ast_channel *chan, char *cmd, char *data, const char *value) { if (!ast_strlen_zero(data)) { if (!ast_strlen_zero(value)) { @@ -60,7 +61,7 @@ static void builtin_function_env_write(struct ast_channel *chan, char *cmd, char } } -static char *builtin_function_stat_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *stat_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { char *action; struct stat s; @@ -105,25 +106,19 @@ static char *builtin_function_stat_read(struct ast_channel *chan, char *cmd, cha return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function env_function = { +static struct ast_custom_function env_function = { .name = "ENV", .synopsis = "Gets or sets the environment variable specified", .syntax = "ENV(<envname>)", - .read = builtin_function_env_read, - .write = builtin_function_env_write, + .read = env_read, + .write = env_write, }; -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function stat_function = { +static struct ast_custom_function stat_function = { .name = "STAT", .synopsis = "Does a check on the specified file", .syntax = "STAT(<flag>,<filename>)", - .read = builtin_function_stat_read, + .read = stat_read, .desc = "flag may be one of the following:\n" " d - Checks if the file is a directory\n" @@ -136,3 +131,48 @@ struct ast_custom_function stat_function = { " M - Returns the epoch at which the file was last modified\n", }; + +static char *tdesc = "Environment/filesystem dialplan functions"; + +int unload_module(void) +{ + int res = 0; + + res |= ast_custom_function_unregister(&env_function); + res |= ast_custom_function_unregister(&stat_function); + + return res; +} + +int load_module(void) +{ + int res = 0; + + res |= ast_custom_function_register(&env_function); + res |= ast_custom_function_register(&stat_function); + + return res; +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} + +/* +Local Variables: +mode: C +c-file-style: "linux" +indent-tabs-mode: nil +End: +*/ diff --git a/funcs/func_groupcount.c b/funcs/func_groupcount.c index bf389a61dee5c580a139303477d1f431743e26fd..a4a133056cb22819dd0742c6cd46b8b73dd2c4e4 100644 --- a/funcs/func_groupcount.c +++ b/funcs/func_groupcount.c @@ -27,8 +27,9 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" @@ -57,10 +58,7 @@ static char *group_count_function_read(struct ast_channel *chan, char *cmd, char return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function group_count_function = { +static struct ast_custom_function group_count_function = { .name = "GROUP_COUNT", .syntax = "GROUP_COUNT([groupname][@category])", .synopsis = "Counts the number of channels in the specified group", @@ -85,10 +83,7 @@ static char *group_match_count_function_read(struct ast_channel *chan, char *cmd return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function group_match_count_function = { +static struct ast_custom_function group_match_count_function = { .name = "GROUP_MATCH_COUNT", .syntax = "GROUP_MATCH_COUNT(groupmatch[@category])", .synopsis = "Counts the number of channels in the groups matching the specified pattern", @@ -130,10 +125,7 @@ static void group_function_write(struct ast_channel *chan, char *cmd, char *data ast_log(LOG_WARNING, "Setting a group requires an argument (group name)\n"); } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function group_function = { +static struct ast_custom_function group_function = { .name = "GROUP", .syntax = "GROUP([category])", .synopsis = "Gets or sets the channel group.", @@ -171,10 +163,7 @@ static char *group_list_function_read(struct ast_channel *chan, char *cmd, char return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function group_list_function = { +static struct ast_custom_function group_list_function = { .name = "GROUP_LIST", .syntax = "GROUP_LIST()", .synopsis = "Gets a list of the groups set on a channel.", @@ -183,6 +172,47 @@ struct ast_custom_function group_list_function = { .write = NULL, }; +static char *tdesc = "Channel group dialplan functions"; + +int unload_module(void) +{ + int res = 0; + + res |= ast_custom_function_unregister(&group_count_function); + res |= ast_custom_function_unregister(&group_match_count_function); + res |= ast_custom_function_unregister(&group_list_function); + res |= ast_custom_function_unregister(&group_function); + + return res; +} + +int load_module(void) +{ + int res = 0; + + res |= ast_custom_function_register(&group_count_function); + res |= ast_custom_function_register(&group_match_count_function); + res |= ast_custom_function_register(&group_list_function); + res |= ast_custom_function_register(&group_function); + + return res; +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} + /* Local Variables: mode: C diff --git a/funcs/func_language.c b/funcs/func_language.c index 2ca98ef18cce337c4b39f2a7a835dbe3ec217911..f6bc1a4c947fc3b3644dc6396a3333dd5462ff0a 100644 --- a/funcs/func_language.c +++ b/funcs/func_language.c @@ -26,8 +26,9 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" @@ -35,23 +36,20 @@ #include "asterisk/app.h" #include "asterisk/stringfields.h" -static char *builtin_function_language_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *language_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { ast_copy_string(buf, chan->language, len); return buf; } -static void builtin_function_language_write(struct ast_channel *chan, char *cmd, char *data, const char *value) +static void language_write(struct ast_channel *chan, char *cmd, char *data, const char *value) { if (value) ast_string_field_set(chan, language, value); } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function language_function = { +static struct ast_custom_function language_function = { .name = "LANGUAGE", .synopsis = "Gets or sets the channel's language.", .syntax = "LANGUAGE()", @@ -63,10 +61,37 @@ struct ast_custom_function language_function = { "will play the normal 'demo-congrats'. For some language codes,\n" "changing the language also changes the syntax of some Asterisk\n" "functions, like SayNumber.\n", - .read = builtin_function_language_read, - .write = builtin_function_language_write, + .read = language_read, + .write = language_write, }; +static char *tdesc = "Channel language dialplan function"; + +int unload_module(void) +{ + return ast_custom_function_unregister(&language_function); +} + +int load_module(void) +{ + return ast_custom_function_register(&language_function); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} + /* Local Variables: mode: C diff --git a/funcs/func_logic.c b/funcs/func_logic.c index 642a4d45c3dc5e3bb71bb072368f7ed5482c4730..b3c7eb2b59239bb11b017811080eaa0d8c7fd6ba 100644 --- a/funcs/func_logic.c +++ b/funcs/func_logic.c @@ -28,26 +28,26 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" #include "asterisk/utils.h" #include "asterisk/app.h" -#include "asterisk/config.h" /* for ast_true */ -static char *builtin_function_isnull(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *isnull(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { return data && *data ? "0" : "1"; } -static char *builtin_function_exists(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *exists(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { return data && *data ? "1" : "0"; } -static char *builtin_function_iftime(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *iftime(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { struct ast_timing timing; char *ret; @@ -86,7 +86,7 @@ static char *builtin_function_iftime(struct ast_channel *chan, char *cmd, char * return ret; } -static char *builtin_function_if(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *acf_if(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { char *ret; char *expr; @@ -120,7 +120,7 @@ static char *builtin_function_if(struct ast_channel *chan, char *cmd, char *data return ret; } -static char *builtin_function_set(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *set(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { char *varname; char *val; @@ -144,53 +144,80 @@ static char *builtin_function_set(struct ast_channel *chan, char *cmd, char *dat return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function isnull_function = { +static struct ast_custom_function isnull_function = { .name = "ISNULL", .synopsis = "NULL Test: Returns 1 if NULL or 0 otherwise", .syntax = "ISNULL(<data>)", - .read = builtin_function_isnull, + .read = isnull, }; -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function set_function = { +static struct ast_custom_function set_function = { .name = "SET", .synopsis = "SET assigns a value to a channel variable", .syntax = "SET(<varname>=[<value>])", - .read = builtin_function_set, + .read = set, }; -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function exists_function = { +static struct ast_custom_function exists_function = { .name = "EXISTS", .synopsis = "Existence Test: Returns 1 if exists, 0 otherwise", .syntax = "EXISTS(<data>)", - .read = builtin_function_exists, + .read = exists, }; -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function if_function = { +static struct ast_custom_function if_function = { .name = "IF", .synopsis = "Conditional: Returns the data following '?' if true else the data following ':'", .syntax = "IF(<expr>?[<true>][:<false>])", - .read = builtin_function_if, + .read = acf_if, }; - -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function if_time_function = { +static struct ast_custom_function if_time_function = { .name = "IFTIME", .synopsis = "Temporal Conditional: Returns the data following '?' if true else the data following ':'", .syntax = "IFTIME(<timespec>?[<true>][:<false>])", - .read = builtin_function_iftime, + .read = iftime, }; + +static char *tdesc = "Logical dialplan functions"; + +int unload_module(void) +{ + int res = 0; + + res |= ast_custom_function_unregister(&isnull_function); + res |= ast_custom_function_unregister(&set_function); + res |= ast_custom_function_unregister(&exists_function); + res |= ast_custom_function_unregister(&if_function); + res |= ast_custom_function_unregister(&if_time_function); + + return res; +} + +int load_module(void) +{ + int res = 0; + + res |= ast_custom_function_register(&isnull_function); + res |= ast_custom_function_register(&set_function); + res |= ast_custom_function_register(&exists_function); + res |= ast_custom_function_register(&if_function); + res |= ast_custom_function_register(&if_time_function); + + return res; +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} diff --git a/funcs/func_math.c b/funcs/func_math.c index ebd7a707b665c31407b34a0d4d1f3a280724188d..4ae62499f599b8497a4135d2dd2fcfec0fcb3f1f 100644 --- a/funcs/func_math.c +++ b/funcs/func_math.c @@ -31,8 +31,9 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" @@ -47,7 +48,6 @@ enum TypeOfFunctions MULTIPLYFUNCTION, SUBTRACTFUNCTION, MODULUSFUNCTION, - GTFUNCTION, LTFUNCTION, GTEFUNCTION, @@ -64,7 +64,7 @@ enum TypeOfResult }; -static char *builtin_function_math(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *math(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { float fnum1; float fnum2; @@ -237,10 +237,7 @@ static char *builtin_function_math(struct ast_channel *chan, char *cmd, char *da return buf; } -#ifndef BUILTIN_FUNC -static -#endif /* BUILTIN_FUNC */ -struct ast_custom_function math_function = { +static struct ast_custom_function math_function = { .name = "MATH", .synopsis = "Performs Mathematical Functions", .syntax = "MATH(<number1><op><number 2>[,<type_of_result>])", @@ -253,5 +250,32 @@ struct ast_custom_function math_function = { " h, hex - hex,\n" " c, char - char\n" "Example: Set(i=${MATH(123%16,int)}) - sets var i=11", - .read = builtin_function_math + .read = math }; + +static char *tdesc = "Mathematical dialplan function"; + +int unload_module(void) +{ + return ast_custom_function_unregister(&math_function); +} + +int load_module(void) +{ + return ast_custom_function_register(&math_function); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} diff --git a/funcs/func_md5.c b/funcs/func_md5.c index 996521bf7ac334252da2d57c920c29fd2fceff32..53368d6c9fefe20632fb747bb22c6d6b8f001cb8 100644 --- a/funcs/func_md5.c +++ b/funcs/func_md5.c @@ -30,15 +30,16 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" #include "asterisk/utils.h" #include "asterisk/app.h" -static char *builtin_function_md5(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *md5(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { char md5[33]; @@ -53,7 +54,7 @@ static char *builtin_function_md5(struct ast_channel *chan, char *cmd, char *dat return buf; } -static char *builtin_function_checkmd5(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *checkmd5(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { char newmd5[33]; char *parse; @@ -93,23 +94,44 @@ static char *builtin_function_checkmd5(struct ast_channel *chan, char *cmd, char return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function md5_function = { +static struct ast_custom_function md5_function = { .name = "MD5", .synopsis = "Computes an MD5 digest", .syntax = "MD5(<data>)", - .read = builtin_function_md5, + .read = md5, }; -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function checkmd5_function = { +static struct ast_custom_function checkmd5_function = { .name = "CHECK_MD5", .synopsis = "Checks an MD5 digest", .desc = "Returns 1 on a match, 0 otherwise\n", .syntax = "CHECK_MD5(<digest>,<data>)", - .read = builtin_function_checkmd5, + .read = checkmd5, }; + +static char *tdesc = "MD5 digest dialplan functions"; + +int unload_module(void) +{ + return ast_custom_function_unregister(&md5_function) || ast_custom_function_unregister(&checkmd5_function); +} + +int load_module(void) +{ + return ast_custom_function_register(&md5_function) || ast_custom_function_register(&checkmd5_function); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} diff --git a/funcs/func_moh.c b/funcs/func_moh.c index 07a78234a361863825e5d6d7a00be95b8bbb67fa..f7cebff93b2f9d629786e6c24c4354d49c762392 100644 --- a/funcs/func_moh.c +++ b/funcs/func_moh.c @@ -27,32 +27,58 @@ #include "asterisk.h" +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/utils.h" #include "asterisk/stringfields.h" -static char *function_moh_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *moh_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { ast_copy_string(buf, chan->musicclass, len); return buf; } -static void function_moh_write(struct ast_channel *chan, char *cmd, char *data, const char *value) +static void moh_write(struct ast_channel *chan, char *cmd, char *data, const char *value) { ast_string_field_set(chan, musicclass, value); } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function moh_function = { +static struct ast_custom_function moh_function = { .name = "MUSICCLASS", .synopsis = "Read or Set the MusicOnHold class", .syntax = "MUSICCLASS()", .desc = "This function will read or set the music on hold class for a channel.\n", - .read = function_moh_read, - .write = function_moh_write, + .read = moh_read, + .write = moh_write, }; +static char *tdesc = "Music-on-hold dialplan function"; + +int unload_module(void) +{ + return ast_custom_function_unregister(&moh_function); +} + +int load_module(void) +{ + return ast_custom_function_register(&moh_function); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} diff --git a/funcs/func_odbc.c b/funcs/func_odbc.c index f7f7637b3a337da2d9f4690d4046033249994ac1..585d602560c7cdd1a64231916dcd416af7a977bc 100644 --- a/funcs/func_odbc.c +++ b/funcs/func_odbc.c @@ -1,13 +1,19 @@ /* - * Asterisk -- A telephony toolkit for Linux. + * Asterisk -- An open source telephony toolkit. * - * func_odbc - * * Copyright (c) 2005 Tilghman Lesher * * Tilghman Lesher <func_odbc__200508@the-tilghman.com> * - * Special thanks to Anthony Minessale II for debugging help. + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. */ /*! @@ -23,14 +29,20 @@ #include <stdlib.h> #include <unistd.h> #include <string.h> -#include <asterisk/file.h> -#include <asterisk/logger.h> -#include <asterisk/options.h> -#include <asterisk/channel.h> -#include <asterisk/pbx.h> -#include <asterisk/module.h> -#include <asterisk/config.h> -#include <asterisk/res_odbc.h> + +#include "asterisk.h" + +ASTERISK_FILE_VERSION(__FILE__, "$Revision: 7682 $") + +#include "asterisk/module.h" +#include "asterisk/file.h" +#include "asterisk/logger.h" +#include "asterisk/options.h" +#include "asterisk/channel.h" +#include "asterisk/pbx.h" +#include "asterisk/module.h" +#include "asterisk/config.h" +#include "asterisk/res_odbc.h" static char *tdesc = "ODBC lookups"; @@ -372,7 +384,7 @@ static char *acf_escape(struct ast_channel *chan, char *cmd, char *data, char *b return buf; } -struct ast_custom_function escape_function = { +static struct ast_custom_function escape_function = { .name = "SQL_ESC", .synopsis = "Escapes single ticks for use in SQL statements", .syntax = "SQL_ESC(<string>)", @@ -497,8 +509,8 @@ static int odbc_load_module(void) } for (catg = ast_category_browse(cfg, NULL); - catg; - catg = ast_category_browse(cfg, catg)) { + catg; + catg = ast_category_browse(cfg, catg)) { struct acf_odbc_query *query=NULL; if (init_acf_query(cfg, catg, &query)) { @@ -569,8 +581,8 @@ int reload(void) } for (catg = ast_category_browse(cfg, NULL); - catg; - catg = ast_category_browse(cfg, catg)) { + catg; + catg = ast_category_browse(cfg, catg)) { struct acf_odbc_query *query = NULL; /* We do this piecemeal, so that we stay in a consistent state, if there's ever an error */ diff --git a/funcs/func_rand.c b/funcs/func_rand.c index 4b7f7b6d42456c75f5f31524b21f05a9d23ac016..ef555e36d3b9004c571c874d37be4569bbd327e7 100644 --- a/funcs/func_rand.c +++ b/funcs/func_rand.c @@ -30,23 +30,19 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision: 7682 $") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision: 7682 $") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" #include "asterisk/utils.h" #include "asterisk/app.h" -#ifndef BUILTIN_FUNC -#include "asterisk/module.h" -#endif - STANDARD_LOCAL_USER; LOCAL_USER_DECL; - static char *acf_rand_exec(struct ast_channel *chan, char *cmd, char *data, char *buffer, size_t buflen) { struct localuser *u; @@ -91,10 +87,7 @@ static char *acf_rand_exec(struct ast_channel *chan, char *cmd, char *data, char return buffer; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function acf_rand = { +static struct ast_custom_function acf_rand = { .name = "RAND", .synopsis = "Choose a random number in a range", .syntax = "RAND([min][,max])", @@ -107,16 +100,12 @@ struct ast_custom_function acf_rand = { }; -#ifndef BUILTIN_FUNC - -static char *tdesc = "Generate a random number"; +static char *tdesc = "Random number dialplan function"; int unload_module(void) { ast_custom_function_unregister(&acf_rand); - STANDARD_HANGUP_LOCALUSERS; - return 0; } @@ -132,16 +121,10 @@ char *description(void) int usecount(void) { - int res; - - STANDARD_USECOUNT(res); - - return res; + return 0; } char *key() { return ASTERISK_GPL_KEY; } - -#endif diff --git a/funcs/func_sha1.c b/funcs/func_sha1.c index 020b842ee65fda22b6fbb96efd56c3ac91be44e2..9600d20c5e18c76ff9fe660f2d1b1233b0e2021f 100644 --- a/funcs/func_sha1.c +++ b/funcs/func_sha1.c @@ -1,68 +1,93 @@ -/* - * Asterisk -- An open source telephony toolkit. - * - * Copyright (C) 2006, Digium, Inc. - * Copyright (C) 2006, Claude Patry - * - * See http://www.asterisk.org for more information about - * the Asterisk project. Please do not directly contact - * any of the maintainers of this project for assistance; - * the project provides a web site, mailing lists and IRC - * channels for your use. - * - * This program is free software, distributed under the terms of - * the GNU General Public License Version 2. See the LICENSE file - * at the top of the source tree. - */ - -/*! \file - * - * \brief SHA1 digest related dialplan functions - * - * \author Claude Patry <cpatry@gmail.com> - */ - -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> - -#include "asterisk.h" - -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision: 8403 $") */ - -#include "asterisk/channel.h" -#include "asterisk/pbx.h" -#include "asterisk/logger.h" -#include "asterisk/utils.h" -#include "asterisk/app.h" - -static char *builtin_function_sha1(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) -{ - if (ast_strlen_zero(data)) { - ast_log(LOG_WARNING, "Syntax: SHA1(<data>) - missing argument!\n"); - return NULL; - } - - if (len >= 41) - ast_sha1_hash(buf, data); - else { - ast_log(LOG_ERROR, "Insufficient space to produce SHA1 hash result (%d < 41)\n", len); - *buf = '\0'; - } - return buf; -} - - -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function sha1_function = { - .name = "SHA1", - .synopsis = "Computes a SHA1 digest", - .syntax = "SHA1(<data>)", - .read = builtin_function_sha1, - .desc = "Generate a SHA1 digest via the SHA1 algorythm.\n" - " Example: Set(sha1hash=${SHA1(junky)})\n" - " Sets the asterisk variable sha1hash to the string '60fa5675b9303eb62f99a9cd47f9f5837d18f9a0'\n" - " which is known as his hash\n", -}; +/* + * Asterisk -- An open source telephony toolkit. + * + * Copyright (C) 2006, Digium, Inc. + * Copyright (C) 2006, Claude Patry + * + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. + */ + +/*! \file + * + * \brief SHA1 digest related dialplan functions + * + * \author Claude Patry <cpatry@gmail.com> + */ + +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> + +#include "asterisk.h" + +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + +#include "asterisk/module.h" +#include "asterisk/channel.h" +#include "asterisk/pbx.h" +#include "asterisk/logger.h" +#include "asterisk/utils.h" +#include "asterisk/app.h" + +static char *sha1(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + if (ast_strlen_zero(data)) { + ast_log(LOG_WARNING, "Syntax: SHA1(<data>) - missing argument!\n"); + return NULL; + } + + if (len >= 41) + ast_sha1_hash(buf, data); + else { + ast_log(LOG_ERROR, "Insufficient space to produce SHA1 hash result (%d < 41)\n", len); + *buf = '\0'; + } + return buf; +} + + +static struct ast_custom_function sha1_function = { + .name = "SHA1", + .synopsis = "Computes a SHA1 digest", + .syntax = "SHA1(<data>)", + .read = sha1, + .desc = "Generate a SHA1 digest via the SHA1 algorythm.\n" + " Example: Set(sha1hash=${SHA1(junky)})\n" + " Sets the asterisk variable sha1hash to the string '60fa5675b9303eb62f99a9cd47f9f5837d18f9a0'\n" + " which is known as his hash\n", +}; + +static char *tdesc = "SHA-1 computation dialplan function"; + +int unload_module(void) +{ + return ast_custom_function_unregister(&sha1_function); +} + +int load_module(void) +{ + return ast_custom_function_register(&sha1_function); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} diff --git a/funcs/func_strings.c b/funcs/func_strings.c index dba306c4714e05b204d7b64e5e5a080bef667770..644b9043eb63b23414323122c7b5fbf0d1d38d26 100644 --- a/funcs/func_strings.c +++ b/funcs/func_strings.c @@ -32,8 +32,9 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" @@ -69,17 +70,14 @@ static char *function_fieldqty(struct ast_channel *chan, char *cmd, char *data, return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function fieldqty_function = { +static struct ast_custom_function fieldqty_function = { .name = "FIELDQTY", .synopsis = "Count the fields, with an arbitrary delimiter", .syntax = "FIELDQTY(<varname>,<delim>)", .read = function_fieldqty, }; -static char *builtin_function_filter(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *filter(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { char *parse; AST_DECLARE_APP_ARGS(args, @@ -109,17 +107,14 @@ static char *builtin_function_filter(struct ast_channel *chan, char *cmd, char * return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function filter_function = { +static struct ast_custom_function filter_function = { .name = "FILTER", .synopsis = "Filter the string to include only the allowed characters", .syntax = "FILTER(<allowed-chars>,<string>)", - .read = builtin_function_filter, + .read = filter, }; -static char *builtin_function_regex(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *regex(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { char *parse; AST_DECLARE_APP_ARGS(args, @@ -154,17 +149,14 @@ static char *builtin_function_regex(struct ast_channel *chan, char *cmd, char *d return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function regex_function = { +static struct ast_custom_function regex_function = { .name = "REGEX", .synopsis = "Regular Expression: Returns 1 if data matches regular expression.", .syntax = "REGEX(\"<regular expression>\" <data>)", - .read = builtin_function_regex, + .read = regex, }; -static void builtin_function_array(struct ast_channel *chan, char *cmd, char *data, const char *value) +static void array(struct ast_channel *chan, char *cmd, char *data, const char *value) { AST_DECLARE_APP_ARGS(arg1, AST_APP_ARG(var)[100]; @@ -211,14 +203,11 @@ static void builtin_function_array(struct ast_channel *chan, char *cmd, char *da } } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function array_function = { +static struct ast_custom_function array_function = { .name = "ARRAY", .synopsis = "Allows setting multiple variables at once", .syntax = "ARRAY(var1[,var2[...][,varN]])", - .write = builtin_function_array, + .write = array, .desc = "The comma-separated list passed as a value to which the function is set will\n" "be interpreted as a set of values to which the comma-separated list of\n" @@ -228,7 +217,7 @@ struct ast_custom_function array_function = { "entire argument, since Set can take multiple arguments itself.\n", }; -static char *builtin_function_len(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *len(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { int length = 0; if (data) { @@ -238,14 +227,11 @@ static char *builtin_function_len(struct ast_channel *chan, char *cmd, char *dat return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function len_function = { +static struct ast_custom_function len_function = { .name = "LEN", .synopsis = "Returns the length of the argument given", .syntax = "LEN(<string>)", - .read = builtin_function_len, + .read = len, }; static char *acf_strftime(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) @@ -286,10 +272,7 @@ static char *acf_strftime(struct ast_channel *chan, char *cmd, char *data, char return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function strftime_function = { +static struct ast_custom_function strftime_function = { .name = "STRFTIME", .synopsis = "Returns the current date/time in a specified format.", .syntax = "STRFTIME([<epoch>][,[timezone][,format]])", @@ -330,10 +313,7 @@ static char *acf_strptime(struct ast_channel *chan, char *cmd, char *data, char return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function strptime_function = { +static struct ast_custom_function strptime_function = { .name = "STRPTIME", .synopsis = "Returns the epoch of the arbitrary date/time string structured as described in the format.", .syntax = "STRPTIME(<datetime>|<timezone>|<format>)", @@ -361,10 +341,7 @@ static char *function_eval(struct ast_channel *chan, char *cmd, char *data, char return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function eval_function = { +static struct ast_custom_function eval_function = { .name = "EVAL", .synopsis = "Evaluate stored variables.", .syntax = "EVAL(<variable>)", @@ -380,3 +357,59 @@ struct ast_custom_function eval_function = { .read = function_eval, }; +static char *tdesc = "String handling dialplan functions"; + +int unload_module(void) +{ + int res = 0; + + res |= ast_custom_function_unregister(&fieldqty_function); + res |= ast_custom_function_unregister(&filter_function); + res |= ast_custom_function_unregister(®ex_function); + res |= ast_custom_function_unregister(&array_function); + res |= ast_custom_function_unregister(&len_function); + res |= ast_custom_function_unregister(&strftime_function); + res |= ast_custom_function_unregister(&strptime_function); + res |= ast_custom_function_unregister(&eval_function); + + return res; +} + +int load_module(void) +{ + int res = 0; + + res |= ast_custom_function_register(&fieldqty_function); + res |= ast_custom_function_register(&filter_function); + res |= ast_custom_function_register(®ex_function); + res |= ast_custom_function_register(&array_function); + res |= ast_custom_function_register(&len_function); + res |= ast_custom_function_register(&strftime_function); + res |= ast_custom_function_register(&strptime_function); + res |= ast_custom_function_register(&eval_function); + + return res; +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} + +/* +Local Variables: +mode: C +c-file-style: "linux" +indent-tabs-mode: nil +End: +*/ diff --git a/funcs/func_timeout.c b/funcs/func_timeout.c index 6352b58b3d863d5a61b1b2d39e1e6385607be886..547159efea5a0781699615beb38492db32731a2a 100644 --- a/funcs/func_timeout.c +++ b/funcs/func_timeout.c @@ -30,8 +30,9 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" @@ -39,7 +40,7 @@ #include "asterisk/app.h" #include "asterisk/options.h" -static char *builtin_function_timeout_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +static char *timeout_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { time_t myt; @@ -81,7 +82,7 @@ static char *builtin_function_timeout_read(struct ast_channel *chan, char *cmd, return buf; } -static void builtin_function_timeout_write(struct ast_channel *chan, char *cmd, char *data, const char *value) +static void timeout_write(struct ast_channel *chan, char *cmd, char *data, const char *value) { int x; char timestr[64]; @@ -135,10 +136,7 @@ static void builtin_function_timeout_write(struct ast_channel *chan, char *cmd, } } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function timeout_function = { +static struct ast_custom_function timeout_function = { .name = "TIMEOUT", .synopsis = "Gets or sets timeouts on the channel.", .syntax = "TIMEOUT(timeouttype)", @@ -165,10 +163,37 @@ struct ast_custom_function timeout_function = { " extension in this amount of time, control will pass to the\n" " 't' extension if it exists, and if not the call would be\n" " terminated. The default timeout is 10 seconds.\n", - .read = builtin_function_timeout_read, - .write = builtin_function_timeout_write, + .read = timeout_read, + .write = timeout_write, }; +static char *tdesc = "Channel timeout dialplan functions"; + +int unload_module(void) +{ + return ast_custom_function_unregister(&timeout_function); +} + +int load_module(void) +{ + return ast_custom_function_register(&timeout_function); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} + /* Local Variables: mode: C diff --git a/funcs/func_uri.c b/funcs/func_uri.c index 122aff375f2cc0243c4662b34c6431f2cdfad5c4..08fdc5b4de7302167be9a60aeb62575974bcd4fe 100644 --- a/funcs/func_uri.c +++ b/funcs/func_uri.c @@ -34,17 +34,17 @@ #include "asterisk.h" -/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") +#include "asterisk/module.h" #include "asterisk/channel.h" #include "asterisk/pbx.h" #include "asterisk/logger.h" #include "asterisk/utils.h" #include "asterisk/app.h" -#include "asterisk/module.h" -/*! \brief builtin_function_uriencode: Encode URL according to RFC 2396 */ -static char *builtin_function_uriencode(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +/*! \brief uriencode: Encode URL according to RFC 2396 */ +static char *uriencode(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { char uri[BUFSIZ]; @@ -59,8 +59,8 @@ static char *builtin_function_uriencode(struct ast_channel *chan, char *cmd, cha return buf; } -/*!\brief builtin_function_uridecode: Decode URI according to RFC 2396 */ -static char *builtin_function_uridecode(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +/*!\brief uridecode: Decode URI according to RFC 2396 */ +static char *uridecode(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { if (ast_strlen_zero(data)) { ast_log(LOG_WARNING, "Syntax: URIDECODE(<data>) - missing argument!\n"); @@ -73,28 +73,21 @@ static char *builtin_function_uridecode(struct ast_channel *chan, char *cmd, cha return buf; } -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function urldecode_function = { +static struct ast_custom_function urldecode_function = { .name = "URIDECODE", .synopsis = "Decodes an URI-encoded string.", .syntax = "URIDECODE(<data>)", - .read = builtin_function_uridecode, + .read = uridecode, }; -#ifndef BUILTIN_FUNC -static -#endif -struct ast_custom_function urlencode_function = { +static struct ast_custom_function urlencode_function = { .name = "URIENCODE", .synopsis = "Encodes a string to URI-safe encoding.", .syntax = "URIENCODE(<data>)", - .read = builtin_function_uriencode, + .read = uriencode, }; -#ifndef BUILTIN_FUNC -static char *tdesc = "URI encode/decode functions"; +static char *tdesc = "URI encode/decode dialplan functions"; int unload_module(void) { @@ -120,4 +113,3 @@ char *key() { return ASTERISK_GPL_KEY; } -#endif /* BUILTIN_FUNC */ diff --git a/funcs/pbx_functions.c b/funcs/pbx_functions.c deleted file mode 100644 index 5c9e147aeaac684683ba2aa84a1950bd11b01520..0000000000000000000000000000000000000000 --- a/funcs/pbx_functions.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Asterisk -- An open source telephony toolkit. - * - * Copyright (C) 1999 - 2005, Digium, Inc. - * - * Kevin P. Fleming <kpfleming@digium.com> - * - * See http://www.asterisk.org for more information about - * the Asterisk project. Please do not directly contact - * any of the maintainers of this project for assistance; - * the project provides a web site, mailing lists and IRC - * channels for your use. - * - * This program is free software, distributed under the terms of - * the GNU General Public License Version 2. See the LICENSE file - * at the top of the source tree. - */ - -/*! \file - * - * \brief Builtin dialplan functions - * - * \author Kevin P. Fleming <kpfleming@digium.com> - */ - -#include <sys/types.h> -#include <stdlib.h> -#include <stdio.h> - -#include "asterisk.h" - -ASTERISK_FILE_VERSION(__FILE__, "$Revision$") - -#include "asterisk/module.h" -#include "asterisk/pbx.h" -#include "pbx_functions.h" - -static char *tdesc = "Builtin dialplan functions"; - -int unload_module(void) -{ - int x; - - for (x = 0; x < (sizeof(builtins) / sizeof(builtins[0])); x++) { - ast_custom_function_unregister(builtins[x]); - } - - return 0; -} - -int load_module(void) -{ - int x; - - for (x = 0; x < (sizeof(builtins) / sizeof(builtins[0])); x++) { - ast_custom_function_register(builtins[x]); - } - - return 0; -} - -char *description(void) -{ - return tdesc; -} - -int usecount(void) -{ - return 0; -} - -char *key() -{ - return ASTERISK_GPL_KEY; -}