app_readfile.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "asterisk.h"
00034
00035 ASTERISK_FILE_VERSION(__FILE__, "$Revision: 328446 $")
00036
00037 #include "asterisk/file.h"
00038 #include "asterisk/channel.h"
00039 #include "asterisk/pbx.h"
00040 #include "asterisk/app.h"
00041 #include "asterisk/module.h"
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 static char *app_readfile = "ReadFile";
00074
00075 static int readfile_exec(struct ast_channel *chan, const char *data)
00076 {
00077 int res=0;
00078 char *s, *varname=NULL, *file=NULL, *length=NULL, *returnvar=NULL;
00079 int len=0;
00080 static int deprecation_warning = 0;
00081
00082 if (ast_strlen_zero(data)) {
00083 ast_log(LOG_WARNING, "ReadFile require an argument!\n");
00084 return -1;
00085 }
00086
00087 s = ast_strdupa(data);
00088
00089 varname = strsep(&s, "=");
00090 file = strsep(&s, ",");
00091 length = s;
00092
00093 if (deprecation_warning++ % 10 == 0)
00094 ast_log(LOG_WARNING, "ReadFile has been deprecated in favor of Set(%s=${FILE(%s,0,%s)})\n", varname, file, length);
00095
00096 if (!varname || !file) {
00097 ast_log(LOG_ERROR, "No file or variable specified!\n");
00098 return -1;
00099 }
00100
00101 if (length) {
00102 if ((sscanf(length, "%30d", &len) != 1) || (len < 0)) {
00103 ast_log(LOG_WARNING, "%s is not a positive number, defaulting length to max\n", length);
00104 len = 0;
00105 }
00106 }
00107
00108 if ((returnvar = ast_read_textfile(file))) {
00109 if (len > 0) {
00110 if (len < strlen(returnvar))
00111 returnvar[len]='\0';
00112 else
00113 ast_log(LOG_WARNING, "%s is longer than %d, and %d \n", file, len, (int)strlen(returnvar));
00114 }
00115 pbx_builtin_setvar_helper(chan, varname, returnvar);
00116 ast_free(returnvar);
00117 }
00118
00119 return res;
00120 }
00121
00122
00123 static int unload_module(void)
00124 {
00125 return ast_unregister_application(app_readfile);
00126 }
00127
00128 static int load_module(void)
00129 {
00130 return ast_register_application_xml(app_readfile, readfile_exec);
00131 }
00132
00133 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Stores output of file into a variable");