#include "asterisk.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/app.h"
#include "asterisk/module.h"
#include "asterisk/translate.h"
#include "asterisk/utils.h"
#include "asterisk/options.h"
Include dependency graph for app_controlplayback.c:
Go to the source code of this file.
Functions | |
AST_MODULE_INFO_STANDARD (ASTERISK_GPL_KEY,"Control Playback Application") | |
static int | controlplayback_exec (struct ast_channel *chan, void *data) |
static int | is_on_phonepad (char key) |
static int | load_module (void) |
static int | unload_module (void) |
Variables | |
static const char * | app = "ControlPlayback" |
static const char * | descrip |
static const char * | synopsis = "Play a file with fast forward and rewind" |
Definition in file app_controlplayback.c.
AST_MODULE_INFO_STANDARD | ( | ASTERISK_GPL_KEY | , | |
"Control Playback Application" | ||||
) |
static int controlplayback_exec | ( | struct ast_channel * | chan, | |
void * | data | |||
) | [static] |
Definition at line 75 of file app_controlplayback.c.
References ast_app_separate_args(), ast_control_streamfile(), ast_goto_if_exists(), ast_log(), ast_module_user_add, ast_module_user_remove, ast_opt_priority_jumping, ast_strdupa, ast_strlen_zero(), ast_module_user::chan, ast_channel::context, is_on_phonepad(), LOG_WARNING, pbx_builtin_setvar_helper(), and skipms.
Referenced by load_module().
00076 { 00077 int res = 0, priority_jump = 0; 00078 int skipms = 0; 00079 struct ast_module_user *u; 00080 char *tmp; 00081 int argc; 00082 char *argv[8]; 00083 enum arg_ids { 00084 arg_file = 0, 00085 arg_skip = 1, 00086 arg_fwd = 2, 00087 arg_rev = 3, 00088 arg_stop = 4, 00089 arg_pause = 5, 00090 arg_restart = 6, 00091 options = 7, 00092 }; 00093 00094 if (ast_strlen_zero(data)) { 00095 ast_log(LOG_WARNING, "ControlPlayback requires an argument (filename)\n"); 00096 return -1; 00097 } 00098 00099 u = ast_module_user_add(chan); 00100 00101 tmp = ast_strdupa(data); 00102 memset(argv, 0, sizeof(argv)); 00103 00104 argc = ast_app_separate_args(tmp, '|', argv, sizeof(argv) / sizeof(argv[0])); 00105 00106 if (argc < 1) { 00107 ast_log(LOG_WARNING, "ControlPlayback requires an argument (filename)\n"); 00108 ast_module_user_remove(u); 00109 return -1; 00110 } 00111 00112 skipms = argv[arg_skip] ? atoi(argv[arg_skip]) : 3000; 00113 if (!skipms) 00114 skipms = 3000; 00115 00116 if (!argv[arg_fwd] || !is_on_phonepad(*argv[arg_fwd])) 00117 argv[arg_fwd] = "#"; 00118 if (!argv[arg_rev] || !is_on_phonepad(*argv[arg_rev])) 00119 argv[arg_rev] = "*"; 00120 if (argv[arg_stop] && !is_on_phonepad(*argv[arg_stop])) 00121 argv[arg_stop] = NULL; 00122 if (argv[arg_pause] && !is_on_phonepad(*argv[arg_pause])) 00123 argv[arg_pause] = NULL; 00124 if (argv[arg_restart] && !is_on_phonepad(*argv[arg_restart])) 00125 argv[arg_restart] = NULL; 00126 00127 if (argv[options]) { 00128 if (strchr(argv[options], 'j')) 00129 priority_jump = 1; 00130 } 00131 00132 res = ast_control_streamfile(chan, argv[arg_file], argv[arg_fwd], argv[arg_rev], argv[arg_stop], argv[arg_pause], argv[arg_restart], skipms); 00133 00134 /* If we stopped on one of our stop keys, return 0 */ 00135 if (res > 0 && argv[arg_stop] && strchr(argv[arg_stop], res)) { 00136 res = 0; 00137 pbx_builtin_setvar_helper(chan, "CPLAYBACKSTATUS", "USERSTOPPED"); 00138 } else { 00139 if (res < 0) { 00140 if (priority_jump || ast_opt_priority_jumping) { 00141 if (ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101)) { 00142 ast_log(LOG_WARNING, "ControlPlayback tried to jump to priority n+101 as requested, but priority didn't exist\n"); 00143 } 00144 } 00145 res = 0; 00146 pbx_builtin_setvar_helper(chan, "CPLAYBACKSTATUS", "ERROR"); 00147 } else 00148 pbx_builtin_setvar_helper(chan, "CPLAYBACKSTATUS", "SUCCESS"); 00149 } 00150 00151 ast_module_user_remove(u); 00152 00153 return res; 00154 }
static int is_on_phonepad | ( | char | key | ) | [static] |
static int load_module | ( | void | ) | [static] |
Definition at line 163 of file app_controlplayback.c.
References ast_register_application(), and controlplayback_exec().
00164 { 00165 return ast_register_application(app, controlplayback_exec, synopsis, descrip); 00166 }
static int unload_module | ( | void | ) | [static] |
Definition at line 156 of file app_controlplayback.c.
References ast_unregister_application().
00157 { 00158 int res; 00159 res = ast_unregister_application(app); 00160 return res; 00161 }
const char* app = "ControlPlayback" [static] |
Definition at line 47 of file app_controlplayback.c.
const char* descrip [static] |
Definition at line 51 of file app_controlplayback.c.
Definition at line 49 of file app_controlplayback.c.