diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-02-27 19:07:46 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-02-27 19:07:46 +0000 |
commit | c33ca69a5d99391fc96ef19996fad002a3a8712d (patch) | |
tree | 9f1e5fe39404d9956af0d7ad47e2b60637cd5c30 /apps/app_readfile.c | |
parent | 3f422b8a43f78cc1b1336a204f34dbadbeef0ac2 (diff) |
Merge mog's ReadFile application (bug #3670)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5099 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_readfile.c')
-rwxr-xr-x | apps/app_readfile.c | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/apps/app_readfile.c b/apps/app_readfile.c new file mode 100755 index 000000000..3adc79a9c --- /dev/null +++ b/apps/app_readfile.c @@ -0,0 +1,116 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * ReadFile application -- Reads in a File for you. + * + * Copyright (C) 2005 Digium, Inc. + * + * Matt O'Gorman <mogorman@digium.com> + * + * This program is free software, distributed under the terms of + * the GNU General Public License + * + */ + +#include <stdio.h> +#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/app.h> +#include <asterisk/module.h> + +static char *tdesc = "Stores output of file into a variable"; + +static char *app_readfile = "ReadFile"; + +static char *readfile_synopsis = "ReadFile(varname=file,length)"; + +static char *readfile_descrip = +"ReadFile(varname=file,length)\n" +" Varname - Result stored here.\n" +" File - The name of the file to read.\n" +" Length - Maximum number of lines to capture.\n"; + +STANDARD_LOCAL_USER; + +LOCAL_USER_DECL; + + +static int readfile_exec(struct ast_channel *chan, void *data) +{ + int res=0; + struct localuser *u; + char *s, *varname=NULL, *file=NULL, *length=NULL, *returnvar=NULL; + int len=0; + + + s = ast_strdupa(data); + if (!s) { + ast_log(LOG_ERROR, "Out of memory\n"); + return -1; + } + + varname = strsep(&s, "="); + file = strsep(&s, "|"); + length = s; + + if (!varname || !file) { + ast_log(LOG_ERROR, "No file or variable specified!\n"); + return -1; + } + + LOCAL_USER_ADD(u); + if (length) { + if ((sscanf(length, "%d", &len) != 1) || (len < 0)) { + ast_log(LOG_WARNING, "%s is not a positive number, defaulting length to max\n", length); + len = 0; + } + } + + + returnvar = ast_read_textfile(file); + if(len > 0){ + if(len < strlen(returnvar)) + returnvar[len]='\0'; + else + ast_log(LOG_WARNING,"%s is longer than %i, and %i \n",file,len,strlen(returnvar)); + } + pbx_builtin_setvar_helper(chan, varname, returnvar); + free(returnvar); + LOCAL_USER_REMOVE(u); + return res; +} + + +int unload_module(void) +{ + STANDARD_HANGUP_LOCALUSERS; + return ast_unregister_application(app_readfile); +} + +int load_module(void) +{ + return ast_register_application(app_readfile, readfile_exec, readfile_synopsis, readfile_descrip); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + int res; + STANDARD_USECOUNT(res); + return res; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} |