diff options
author | David M. Lee <dlee@digium.com> | 2013-05-23 20:11:35 +0000 |
---|---|---|
committer | David M. Lee <dlee@digium.com> | 2013-05-23 20:11:35 +0000 |
commit | 10ba6bf8a8114278ca974861ecebcb3a827d8d5b (patch) | |
tree | 1406ede124cf9665cb9f9244f9339b6cb522aa8b /main/channel_internal_api.c | |
parent | 3464e0919afe398717b93b20fff37560c6d4478f (diff) |
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
Diffstat (limited to 'main/channel_internal_api.c')
-rw-r--r-- | main/channel_internal_api.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/main/channel_internal_api.c b/main/channel_internal_api.c index 42aaada6d..87551f72f 100644 --- a/main/channel_internal_api.c +++ b/main/channel_internal_api.c @@ -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); \ -} - -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); + if (publish) ast_channel_publish_snapshot(chan); \ +} + +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) \ { \ |