#include "asterisk.h"
#include "asterisk/pbx.h"
#include "asterisk/app.h"
#include "asterisk/module.h"
Go to the source code of this file.
Enumerations | |
enum | { OPT_OFFSET = (1 << 1) } |
enum | { OPT_ARG_OFFSET = 0, OPT_ARG_ARRAY_LEN } |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static int | controlplayback_exec (struct ast_channel *chan, const char *data) |
static int | is_argument (const char *haystack, int needle) |
static int | is_on_phonepad (char key) |
static int | load_module (void) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Control Playback Application" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "88eaa8f5c1bd988bedd71113385e0886" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } |
static const char | app [] = "ControlPlayback" |
static struct ast_module_info * | ast_module_info = &__mod_info |
static struct ast_app_option | cpb_opts [128] = { [ 'o' ] = { .flag = OPT_OFFSET , .arg_index = OPT_ARG_OFFSET + 1 }, } |
Definition in file app_controlplayback.c.
anonymous enum |
anonymous enum |
Definition at line 105 of file app_controlplayback.c.
00105 { 00106 OPT_ARG_OFFSET = 0, 00107 /* must stay as the last entry ... */ 00108 OPT_ARG_ARRAY_LEN, 00109 };
static void __reg_module | ( | void | ) | [static] |
Definition at line 230 of file app_controlplayback.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 230 of file app_controlplayback.c.
static int controlplayback_exec | ( | struct ast_channel * | chan, | |
const char * | data | |||
) | [static] |
Definition at line 132 of file app_controlplayback.c.
References args, AST_APP_ARG, ast_app_parse_options(), ast_control_streamfile(), ast_debug, AST_DECLARE_APP_ARGS, ast_log(), AST_STANDARD_APP_ARGS, ast_strdupa, ast_strlen_zero(), ast_test_flag, cpb_opts, is_argument(), is_on_phonepad(), LOG_WARNING, OPT_ARG_ARRAY_LEN, OPT_ARG_OFFSET, OPT_OFFSET, pbx_builtin_setvar_helper(), skipms, and stop.
Referenced by load_module().
00133 { 00134 int res = 0; 00135 int skipms = 0; 00136 long offsetms = 0; 00137 char offsetbuf[20]; 00138 char stopkeybuf[2]; 00139 char *tmp; 00140 struct ast_flags opts = { 0, }; 00141 char *opt_args[OPT_ARG_ARRAY_LEN]; 00142 AST_DECLARE_APP_ARGS(args, 00143 AST_APP_ARG(filename); 00144 AST_APP_ARG(skip); 00145 AST_APP_ARG(fwd); 00146 AST_APP_ARG(rev); 00147 AST_APP_ARG(stop); 00148 AST_APP_ARG(pause); 00149 AST_APP_ARG(restart); 00150 AST_APP_ARG(options); 00151 ); 00152 00153 if (ast_strlen_zero(data)) { 00154 ast_log(LOG_WARNING, "ControlPlayback requires an argument (filename)\n"); 00155 return -1; 00156 } 00157 00158 tmp = ast_strdupa(data); 00159 AST_STANDARD_APP_ARGS(args, tmp); 00160 00161 if (args.argc < 1) { 00162 ast_log(LOG_WARNING, "ControlPlayback requires an argument (filename)\n"); 00163 return -1; 00164 } 00165 00166 skipms = args.skip ? (atoi(args.skip) ? atoi(args.skip) : 3000) : 3000; 00167 00168 if (!args.fwd || !is_on_phonepad(*args.fwd)) { 00169 char *digit = "#"; 00170 if (!is_argument(args.rev, *digit) && !is_argument(args.stop, *digit) && !is_argument(args.pause, *digit) && !is_argument(args.restart, *digit)) 00171 args.fwd = digit; 00172 else 00173 args.fwd = NULL; 00174 } 00175 if (!args.rev || !is_on_phonepad(*args.rev)) { 00176 char *digit = "*"; 00177 if (!is_argument(args.fwd, *digit) && !is_argument(args.stop, *digit) && !is_argument(args.pause, *digit) && !is_argument(args.restart, *digit)) 00178 args.rev = digit; 00179 else 00180 args.rev = NULL; 00181 } 00182 ast_debug(1, "Forward key = %s, Rewind key = %s\n", args.fwd, args.rev); 00183 if (args.stop && !is_on_phonepad(*args.stop)) 00184 args.stop = NULL; 00185 if (args.pause && !is_on_phonepad(*args.pause)) 00186 args.pause = NULL; 00187 if (args.restart && !is_on_phonepad(*args.restart)) 00188 args.restart = NULL; 00189 00190 if (args.options) { 00191 ast_app_parse_options(cpb_opts, &opts, opt_args, args.options); 00192 if (ast_test_flag(&opts, OPT_OFFSET)) 00193 offsetms = atol(opt_args[OPT_ARG_OFFSET]); 00194 } 00195 00196 res = ast_control_streamfile(chan, args.filename, args.fwd, args.rev, args.stop, args.pause, args.restart, skipms, &offsetms); 00197 00198 /* If we stopped on one of our stop keys, return 0 */ 00199 if (res > 0 && args.stop && strchr(args.stop, res)) { 00200 pbx_builtin_setvar_helper(chan, "CPLAYBACKSTATUS", "USERSTOPPED"); 00201 snprintf(stopkeybuf, sizeof(stopkeybuf), "%c", res); 00202 pbx_builtin_setvar_helper(chan, "CPLAYBACKSTOPKEY", stopkeybuf); 00203 res = 0; 00204 } else { 00205 if (res < 0) { 00206 res = 0; 00207 pbx_builtin_setvar_helper(chan, "CPLAYBACKSTATUS", "ERROR"); 00208 } else 00209 pbx_builtin_setvar_helper(chan, "CPLAYBACKSTATUS", "SUCCESS"); 00210 } 00211 00212 snprintf(offsetbuf, sizeof(offsetbuf), "%ld", offsetms); 00213 pbx_builtin_setvar_helper(chan, "CPLAYBACKOFFSET", offsetbuf); 00214 00215 return res; 00216 }
static int is_argument | ( | const char * | haystack, | |
int | needle | |||
) | [static] |
Definition at line 121 of file app_controlplayback.c.
References ast_strlen_zero().
Referenced by controlplayback_exec().
00122 { 00123 if (ast_strlen_zero(haystack)) 00124 return 0; 00125 00126 if (strchr(haystack, needle)) 00127 return -1; 00128 00129 return 0; 00130 }
static int is_on_phonepad | ( | char | key | ) | [static] |
static int load_module | ( | void | ) | [static] |
Definition at line 225 of file app_controlplayback.c.
References ast_register_application_xml, and controlplayback_exec().
00226 { 00227 return ast_register_application_xml(app, controlplayback_exec); 00228 }
static int unload_module | ( | void | ) | [static] |
Definition at line 218 of file app_controlplayback.c.
References ast_unregister_application().
00219 { 00220 int res; 00221 res = ast_unregister_application(app); 00222 return res; 00223 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Control Playback Application" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "88eaa8f5c1bd988bedd71113385e0886" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 230 of file app_controlplayback.c.
const char app[] = "ControlPlayback" [static] |
Definition at line 99 of file app_controlplayback.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 230 of file app_controlplayback.c.
struct ast_app_option cpb_opts[128] = { [ 'o' ] = { .flag = OPT_OFFSET , .arg_index = OPT_ARG_OFFSET + 1 }, } [static] |