Asterisk - The Open Source Telephony Project
21.4.1
|
res_stasis playback support. More...
#include "asterisk.h"
#include "asterisk/app.h"
#include "asterisk/astobj2.h"
#include "asterisk/bridge.h"
#include "asterisk/bridge_internal.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/module.h"
#include "asterisk/paths.h"
#include "asterisk/stasis_app_impl.h"
#include "asterisk/stasis_app_playback.h"
#include "asterisk/stasis_app_recording.h"
#include "asterisk/stasis_channels.h"
#include "asterisk/stringfields.h"
#include "asterisk/uuid.h"
#include "asterisk/say.h"
#include "asterisk/indications.h"
Go to the source code of this file.
Data Structures | |
struct | stasis_app_playback |
Macros | |
#define | CHARACTERS_URI_SCHEME "characters:" |
#define | DIGITS_URI_SCHEME "digits:" |
#define | NUMBER_URI_SCHEME "number:" |
#define | PLAYBACK_BUCKETS 127 |
#define | PLAYBACK_DEFAULT_SKIPMS 3000 |
#define | RECORDING_URI_SCHEME "recording:" |
#define | SOUND_URI_SCHEME "sound:" |
#define | TONE_URI_SCHEME "tone:" |
Typedefs | |
typedef int(* | playback_operation_cb) (struct stasis_app_playback *playback) |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
struct ast_module * | AST_MODULE_SELF_SYM (void) |
static int | load_module (void) |
static void | play_on_channel (struct stasis_app_playback *playback, struct ast_channel *chan) |
static void | play_on_channel_in_bridge (struct ast_bridge_channel *bridge_channel, const char *playback_id) |
Special case code to play while a channel is in a bridge. More... | |
static int | play_uri (struct stasis_app_control *control, struct ast_channel *chan, void *data) |
static int | playback_cancel (struct stasis_app_playback *playback) |
static int | playback_cmp (void *obj, void *arg, int flags) |
static struct stasis_app_playback * | playback_create (struct stasis_app_control *control, const char *id) |
static void | playback_dtor (void *obj) |
static void | playback_final_update (struct stasis_app_playback *playback, long playedms, int res, int hangup, const char *uniqueid) |
static int | playback_first_update (struct stasis_app_playback *playback, const char *uniqueid) |
static int | playback_forward (struct stasis_app_playback *playback) |
static int | playback_hash (const void *obj, int flags) |
static int | playback_noop (struct stasis_app_playback *playback) |
static int | playback_pause (struct stasis_app_playback *playback) |
static void | playback_publish (struct stasis_app_playback *playback) |
static int | playback_restart (struct stasis_app_playback *playback) |
static int | playback_reverse (struct stasis_app_playback *playback) |
static int | playback_stop (struct stasis_app_playback *playback) |
static struct ast_json * | playback_to_json (struct stasis_message *message, const struct stasis_message_sanitizer *sanitize) |
static int | playback_unpause (struct stasis_app_playback *playback) |
static void | remove_from_playbacks (void *data) |
RAII_VAR function to remove a playback from the global list when leaving scope. | |
static void | set_target_uri (struct stasis_app_playback *playback, enum stasis_app_playback_target_type target_type, const char *target_id) |
struct stasis_app_playback * | stasis_app_control_play_uri (struct stasis_app_control *control, const char **media, size_t media_count, const char *language, const char *target_id, enum stasis_app_playback_target_type target_type, int skipms, long offsetms, const char *id) |
Play a file to the control's channel. More... | |
struct stasis_app_playback * | stasis_app_playback_find_by_id (const char *id) |
Finds the playback object with the given id. More... | |
const char * | stasis_app_playback_get_id (struct stasis_app_playback *control) |
Gets the unique id of a playback object. More... | |
enum stasis_app_playback_state | stasis_app_playback_get_state (struct stasis_app_playback *control) |
Gets the current state of a playback operation. More... | |
enum stasis_playback_oper_results | stasis_app_playback_operation (struct stasis_app_playback *playback, enum stasis_app_playback_media_operation operation) |
Controls the media for a given playback operation. More... | |
struct ast_json * | stasis_app_playback_to_json (const struct stasis_app_playback *playback) |
Convert a playback to its JSON representation. More... | |
STASIS_MESSAGE_TYPE_DEFN (stasis_app_playback_snapshot_type,.to_json=playback_to_json,) | |
static const char * | state_to_string (enum stasis_app_playback_state state) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_GLOBAL_SYMBOLS , .description = "Stasis application playback support" , .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 = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .requires = "res_stasis,res_stasis_recording" } |
static const struct ast_module_info * | ast_module_info = &__mod_info |
playback_operation_cb | operations [STASIS_PLAYBACK_STATE_MAX][STASIS_PLAYBACK_MEDIA_OP_MAX] |
A sparse array detailing how commands should be handled in the various playback states. Unset entries imply invalid operations. | |
static struct ao2_container * | playbacks |
res_stasis playback support.
Definition in file res_stasis_playback.c.
#define PLAYBACK_BUCKETS 127 |
Number of hash buckets for playback container. Keep it prime!
Definition at line 52 of file res_stasis_playback.c.
#define PLAYBACK_DEFAULT_SKIPMS 3000 |
Default number of milliseconds of media to skip
Definition at line 55 of file res_stasis_playback.c.
Referenced by stasis_app_control_play_uri().
|
static |
Special case code to play while a channel is in a bridge.
bridge_channel | The channel's bridge_channel. |
playback_id | Id of the playback to start. |
Definition at line 407 of file res_stasis_playback.c.
References ast_bridge_channel::chan, RAII_VAR, and stasis_app_playback_find_by_id().
struct stasis_app_playback* stasis_app_control_play_uri | ( | struct stasis_app_control * | control, |
const char ** | media, | ||
size_t | media_count, | ||
const char * | language, | ||
const char * | target_id, | ||
enum stasis_app_playback_target_type | target_type, | ||
int | skipms, | ||
long | offsetms, | ||
const char * | id | ||
) |
Play a file to the control's channel.
Note that the file isn't the full path to the file. Asterisk's internal playback mechanism will automagically select the best format based on the available codecs for the channel.
control | Control for res_stasis . |
media | Array of const char * media files to play. |
media_count | The number of media files in media . |
language | Selects the file based on language. |
target_id | ID of the target bridge or channel. |
target_type | What the target type is |
skipms | Number of milliseconds to skip for forward/reverse operations. |
offsetms | Number of milliseconds to skip before playing. |
id | ID to assign the new playback or NULL for default. |
NULL | on error. |
Definition at line 488 of file res_stasis_playback.c.
References ao2_bump, ao2_link, ao2_ref, ast_debug, ast_malloc, ast_string_field_set, AST_VECTOR_APPEND, AST_VECTOR_GET, stasis_app_playback::medias, stasis_app_playback::offsetms, PLAYBACK_DEFAULT_SKIPMS, remove_from_playbacks(), stasis_app_playback::skipms, stasis_app_control_get_channel_id(), stasis_app_send_command_async(), STASIS_PLAYBACK_STATE_QUEUED, and stasis_app_playback::state.
Referenced by ari_bridges_play_helper().
struct stasis_app_playback* stasis_app_playback_find_by_id | ( | const char * | id | ) |
Finds the playback object with the given id.
id | Id of the playback object to find. |
NULL | if id not found. |
Definition at line 567 of file res_stasis_playback.c.
References OBJ_KEY.
Referenced by ast_ari_playbacks_control(), ast_ari_playbacks_get(), ast_ari_playbacks_stop(), and play_on_channel_in_bridge().
const char* stasis_app_playback_get_id | ( | struct stasis_app_playback * | playback | ) |
Gets the unique id of a playback object.
playback | Playback control object. |
NULL | if playback ic NULL |
Definition at line 560 of file res_stasis_playback.c.
References stasis_app_playback::id.
Referenced by ari_bridges_play_helper().
enum stasis_app_playback_state stasis_app_playback_get_state | ( | struct stasis_app_playback * | playback | ) |
Gets the current state of a playback operation.
playback | Playback control object. |
Definition at line 553 of file res_stasis_playback.c.
References lock, SCOPED_AO2LOCK, and stasis_app_playback::state.
enum stasis_playback_oper_results stasis_app_playback_operation | ( | struct stasis_app_playback * | playback, |
enum stasis_app_playback_media_operation | operation | ||
) |
Controls the media for a given playback operation.
playback | Playback control object. |
operation | Media control operation. |
STASIS_PLAYBACK_OPER_OK | on success. |
Definition at line 726 of file res_stasis_playback.c.
References lock, SCOPED_AO2LOCK, STASIS_PLAYBACK_MEDIA_OP_MAX, STASIS_PLAYBACK_STATE_MAX, STASIS_PLAYBACK_STATE_PLAYING, and stasis_app_playback::state.
Referenced by ast_ari_playbacks_control(), and ast_ari_playbacks_stop().
struct ast_json* stasis_app_playback_to_json | ( | const struct stasis_app_playback * | playback | ) |
Convert a playback to its JSON representation.
playback | The playback object to convert to JSON |
NULL | on error |
Definition at line 572 of file res_stasis_playback.c.
References ast_json_pack(), ast_json_ref(), ast_json_unref(), AST_VECTOR_GET, AST_VECTOR_SIZE, stasis_app_playback::id, stasis_app_playback::language, stasis_app_playback::media, stasis_app_playback::media_index, stasis_app_playback::medias, RAII_VAR, stasis_app_playback::state, and stasis_app_playback::target.
Referenced by ari_bridges_play_helper(), and ast_ari_playbacks_get().
|
static |
Container of all current playbacks
Definition at line 65 of file res_stasis_playback.c.