This patch implements the REST API's for POST /channels/{channelId}/play

and GET /playback/{playbackId}.

This allows an external application to initiate playback of a sound on a
channel while the channel is in the Stasis application.

/play commands are issued asynchronously, and return immediately with
the URL of the associated /playback resource. Playback commands queue up,
playing in succession. The /playback resource shows the state of a
playback operation as enqueued, playing or complete. (Although the
operation will only be in the 'complete' state for a very short time,
since it is almost immediately freed up).

(closes issue ASTERISK-21283)
(closes issue ASTERISK-21586)
Review: https://reviewboard.asterisk.org/r/2531/



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@389587 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
David M. Lee
2013-05-23 20:11:35 +00:00
parent 3464e0919a
commit 10ba6bf8a8
20 changed files with 906 additions and 97 deletions

View File

@@ -414,15 +414,17 @@ int ast_channel_data_cmp_structure(const struct ast_data_search *tree,
/* ACCESSORS */
#define DEFINE_STRINGFIELD_SETTERS_FOR(field) \
#define DEFINE_STRINGFIELD_SETTERS_FOR(field, publish) \
void ast_channel_##field##_set(struct ast_channel *chan, const char *value) \
{ \
ast_string_field_set(chan, field, value); \
if (publish) ast_channel_publish_snapshot(chan); \
} \
\
void ast_channel_##field##_build_va(struct ast_channel *chan, const char *fmt, va_list ap) \
{ \
ast_string_field_build_va(chan, field, fmt, ap); \
if (publish) ast_channel_publish_snapshot(chan); \
} \
void ast_channel_##field##_build(struct ast_channel *chan, const char *fmt, ...) \
{ \
@@ -430,19 +432,20 @@ void ast_channel_##field##_build(struct ast_channel *chan, const char *fmt, ...)
va_start(ap, fmt); \
ast_channel_##field##_build_va(chan, fmt, ap); \
va_end(ap); \
if (publish) ast_channel_publish_snapshot(chan); \
}
DEFINE_STRINGFIELD_SETTERS_FOR(name);
DEFINE_STRINGFIELD_SETTERS_FOR(language);
DEFINE_STRINGFIELD_SETTERS_FOR(musicclass);
DEFINE_STRINGFIELD_SETTERS_FOR(accountcode);
DEFINE_STRINGFIELD_SETTERS_FOR(peeraccount);
DEFINE_STRINGFIELD_SETTERS_FOR(userfield);
DEFINE_STRINGFIELD_SETTERS_FOR(call_forward);
DEFINE_STRINGFIELD_SETTERS_FOR(uniqueid);
DEFINE_STRINGFIELD_SETTERS_FOR(parkinglot);
DEFINE_STRINGFIELD_SETTERS_FOR(hangupsource);
DEFINE_STRINGFIELD_SETTERS_FOR(dialcontext);
DEFINE_STRINGFIELD_SETTERS_FOR(name, 0);
DEFINE_STRINGFIELD_SETTERS_FOR(language, 1);
DEFINE_STRINGFIELD_SETTERS_FOR(musicclass, 0);
DEFINE_STRINGFIELD_SETTERS_FOR(accountcode, 0);
DEFINE_STRINGFIELD_SETTERS_FOR(peeraccount, 0);
DEFINE_STRINGFIELD_SETTERS_FOR(userfield, 0);
DEFINE_STRINGFIELD_SETTERS_FOR(call_forward, 0);
DEFINE_STRINGFIELD_SETTERS_FOR(uniqueid, 0);
DEFINE_STRINGFIELD_SETTERS_FOR(parkinglot, 0);
DEFINE_STRINGFIELD_SETTERS_FOR(hangupsource, 0);
DEFINE_STRINGFIELD_SETTERS_FOR(dialcontext, 0);
#define DEFINE_STRINGFIELD_GETTER_FOR(field) const char *ast_channel_##field(const struct ast_channel *chan) \
{ \