Browse Source

TT#50652 add stop_media call

Change-Id: I1b18a41d4b97ccbb83499873e50a797f846a8602
changes/44/27744/4
Richard Fuchs 7 years ago
parent
commit
7f5e16d3da
4 changed files with 56 additions and 17 deletions
  1. +50
    -17
      daemon/call_interfaces.c
  2. +4
    -0
      daemon/control_ng.c
  3. +1
    -0
      include/call_interfaces.h
  4. +1
    -0
      include/control_ng.h

+ 50
- 17
daemon/call_interfaces.c View File

@ -1732,28 +1732,30 @@ out:
}
#ifdef WITH_TRANSCODING
static const char *play_media_select_party(struct call **call, struct call_monologue **monologue,
bencode_item_t *input)
{
const char *err = media_block_match(call, monologue, input);
if (err)
return err;
if (!*monologue)
return "No participant party specified";
return NULL;
}
#endif
const char *call_play_media_ng(bencode_item_t *input, bencode_item_t *output) {
#ifdef WITH_TRANSCODING
str callid, fromtag, str;
str str;
struct call *call;
struct call_monologue *monologue;
const char *err = NULL;
long long db_id;
if (!bencode_dictionary_get_str(input, "call-id", &callid))
return "No call-id in message";
call = call_get_opmode(&callid, OP_OTHER);
if (!call)
return "Unknown call-id";
err = "No participant party specified";
if (bencode_dictionary_get_str(input, "from-tag", &fromtag)) {
monologue = call_get_mono_dialogue(call, &fromtag, NULL, NULL);
err = "Unknown monologue from-tag";
if (!monologue)
goto out;
}
else
err = play_media_select_party(&call, &monologue, input);
if (err)
goto out;
if (!monologue->player)
@ -1784,8 +1786,39 @@ const char *call_play_media_ng(bencode_item_t *input, bencode_item_t *output) {
err = NULL;
out:
rwlock_unlock_w(&call->master_lock);
obj_put(call);
if (call) {
rwlock_unlock_w(&call->master_lock);
obj_put(call);
}
return err;
#else
return "unsupported";
#endif
}
const char *call_stop_media_ng(bencode_item_t *input, bencode_item_t *output) {
#ifdef WITH_TRANSCODING
struct call *call;
struct call_monologue *monologue;
const char *err = NULL;
err = play_media_select_party(&call, &monologue, input);
if (err)
goto out;
if (!monologue->player)
return "Not currently playing media";
media_player_stop(monologue->player);
err = NULL;
out:
if (call) {
rwlock_unlock_w(&call->master_lock);
obj_put(call);
}
return err;
#else
return "unsupported";


+ 4
- 0
daemon/control_ng.c View File

@ -247,6 +247,10 @@ static void control_ng_incoming(struct obj *obj, str *buf, const endpoint_t *sin
errstr = call_play_media_ng(dict, resp);
g_atomic_int_inc(&cur->play_media);
break;
case CSH_LOOKUP("stop media"):
errstr = call_stop_media_ng(dict, resp);
g_atomic_int_inc(&cur->stop_media);
break;
default:
errstr = "Unrecognized command";
}


+ 1
- 0
include/call_interfaces.h View File

@ -109,6 +109,7 @@ const char *call_unblock_dtmf_ng(bencode_item_t *, bencode_item_t *);
const char *call_block_media_ng(bencode_item_t *, bencode_item_t *);
const char *call_unblock_media_ng(bencode_item_t *, bencode_item_t *);
const char *call_play_media_ng(bencode_item_t *, bencode_item_t *);
const char *call_stop_media_ng(bencode_item_t *, bencode_item_t *);
void ng_call_stats(struct call *call, const str *fromtag, const str *totag, bencode_item_t *output,
struct call_stats *totals);


+ 1
- 0
include/control_ng.h View File

@ -26,6 +26,7 @@ struct control_ng_stats {
int block_media;
int unblock_media;
int play_media;
int stop_media;
int errors;
};


Loading…
Cancel
Save