MT#55283 use medias_q instead of subscriptions

Change-Id: I7bb2bbc79b2da7fa7e7d9d4158de20e3afb9aa11
pull/2099/head
Richard Fuchs 4 weeks ago
parent 959bd66a1d
commit a5d067f4cc

@ -4502,14 +4502,14 @@ static int monologue_subscribe_request1(struct call_media *src_media, struct cal
/* called with call->master_lock held in W */
__attribute__((nonnull(1, 2, 3)))
int monologue_subscribe_request(const subscription_q *srms, struct call_monologue *dst_ml, sdp_ng_flags *flags) {
int monologue_subscribe_request(const medias_q *medias, struct call_monologue *dst_ml, sdp_ng_flags *flags) {
g_auto(subscription_store_ht) ht = subscription_store_ht_new();
__unsubscribe_medias_from_all(dst_ml, ht);
__call_monologue_init_from_flags(dst_ml, NULL, flags);
IQUEUE_FOREACH(srms, ms) {
struct call_media *src_media = ms->media;
for (auto_iter(l, medias->head); l; l = l->next) {
struct call_media *src_media = l->data;
if (!src_media)
continue;

@ -3445,6 +3445,7 @@ found:
__monologue_unconfirm(*monologue, "media blocking signalling event");
return NULL;
}
static const char *media_block_match(call_t **call, struct call_monologue **monologue,
sdp_ng_flags *flags, ng_command_ctx_t *ctx)
{
@ -3475,13 +3476,8 @@ static const char *media_block_match(call_t **call, struct call_monologue **mono
return NULL;
}
void add_media_to_sub_list(subscription_q *q, struct call_media *media, struct call_monologue *ml) {
struct media_subscription *ms = g_new0(__typeof(*ms), 1);
ms->media = media;
ms->monologue = ml;
i_queue_push_tail(q, ms);
}
static const char *media_block_match_mult(call_t **call, subscription_q *medias,
static const char *medias_match(call_t **call, medias_q *medias,
sdp_ng_flags *flags, ng_command_ctx_t *ctx)
{
call_ng_process_flags(flags, ctx);
@ -3501,7 +3497,7 @@ static const char *media_block_match_mult(call_t **call, subscription_q *medias,
continue;
}
add_media_to_sub_list(medias, media, media->monologue);
t_queue_push_tail(medias, media);
}
return NULL;
}
@ -3514,10 +3510,10 @@ static const char *media_block_match_mult(call_t **call, subscription_q *medias,
if (ml) {
for (int i = 0; i < ml->medias->len; i++)
{
struct call_media * media = ml->medias->pdata[i];
struct call_media *media = ml->medias->pdata[i];
if (!media)
continue;
add_media_to_sub_list(medias, media, ml);
t_queue_push_tail(medias, media);
}
return NULL;
}
@ -3531,10 +3527,10 @@ static const char *media_block_match_mult(call_t **call, subscription_q *medias,
} else {
for (int i = 0; i < mlf->medias->len; i++)
{
struct call_media * media = mlf->medias->pdata[i];
struct call_media *media = mlf->medias->pdata[i];
if (!media)
continue;
add_media_to_sub_list(medias, media, mlf);
t_queue_push_tail(medias, media);
}
}
}
@ -4208,20 +4204,20 @@ const char *call_subscribe_request_ng(ng_command_ctx_t *ctx) {
g_auto(sdp_ng_flags) flags;
char rand_buf[65];
g_autoptr(call_t) call = NULL;
g_auto(subscription_q) srms = IQUEUE_INIT;
g_auto(medias_q) mq = TYPED_GQUEUE_INIT;
g_auto(str) sdp_out = STR_NULL;
parser_arg output = ctx->resp;
const ng_parser_t *parser = ctx->parser_ctx.parser;
/* get source monologue */
err = media_block_match_mult(&call, &srms, &flags, ctx);
err = medias_match(&call, &mq, &flags, ctx);
if (err)
return err;
if (flags.sdp.len)
ilog(LOG_INFO, "Subscribe-request with SDP received - ignoring SDP");
if (!srms.length)
if (!mq.length)
return "No call participants specified (no medias found)";
/* the `label=` option was possibly used above to select the from-tag --
@ -4241,7 +4237,7 @@ const char *call_subscribe_request_ng(ng_command_ctx_t *ctx) {
struct call_monologue *dest_ml = call_get_or_create_monologue(call, &flags.to_tag);
int ret = monologue_subscribe_request(&srms, dest_ml, &flags);
int ret = monologue_subscribe_request(&mq, dest_ml, &flags);
if (ret)
return "Failed to request subscription";
@ -4258,9 +4254,9 @@ const char *call_subscribe_request_ng(ng_command_ctx_t *ctx) {
/* add single response ml tag if there's just one, but always add a list
* TODO: deprecate it, since initially added for monologue subscriptions.
*/
if (srms.length == 1) {
struct media_subscription *ms = srms.head;
struct call_monologue *source_ml = ms->monologue;
if (mq.length == 1) {
struct call_media *media = mq.head->data;
struct call_monologue *source_ml = media->monologue;
parser->dict_add_str_dup(output, "from-tag", &source_ml->tag);
}
parser_arg tag_medias = {0}, media_labels = {0};

@ -424,7 +424,7 @@ static void janus_publishers_list(JsonBuilder *builder, call_t *call, struct jan
// global janus_lock is held
static const char *janus_videoroom_join_sub(struct janus_handle *handle, struct janus_room *room, int *retcode,
uint64_t feed_id, call_t *call, subscription_q *medias)
uint64_t feed_id, call_t *call, medias_q *medias)
{
// does the feed actually exist? get the feed handle
*retcode = 512;
@ -444,10 +444,10 @@ static const char *janus_videoroom_join_sub(struct janus_handle *handle, struct
for (int i = 0; i < source_ml->medias->len; i++)
{
struct call_media * media = source_ml->medias->pdata[i];
struct call_media *media = source_ml->medias->pdata[i];
if (!media)
continue;
add_media_to_sub_list(medias, media, source_ml);
t_queue_push_tail(medias, media);
}
return NULL;
}
@ -553,7 +553,7 @@ static const char *janus_videoroom_join(struct websocket_message *wm, struct jan
else {
// subscriber
g_auto(subscription_q) srms = IQUEUE_INIT;
g_auto(medias_q) medias = TYPED_GQUEUE_INIT;
// get single feed ID if there is one
if (json_reader_read_member(reader, "feed")) {
@ -562,7 +562,7 @@ static const char *janus_videoroom_join(struct websocket_message *wm, struct jan
if (!feed_id)
return "JSON object contains invalid 'message.feed' key";
const char *ret = janus_videoroom_join_sub(handle, room, retcode, feed_id,
call, &srms);
call, &medias);
if (ret)
return ret;
}
@ -596,7 +596,7 @@ static const char *janus_videoroom_join(struct websocket_message *wm, struct jan
if (!t_queue_find_custom(&ret_streams, &fid, int64_cmp)) {
const char *ret = janus_videoroom_join_sub(handle, room, retcode, fid,
call, &srms);
call, &medias);
if (ret)
return ret;
@ -614,7 +614,7 @@ static const char *janus_videoroom_join(struct websocket_message *wm, struct jan
json_reader_end_member(reader);
*retcode = 456;
if (!srms.length)
if (!medias.length)
return "No feeds to subscribe to given";
struct call_monologue *dest_ml = janus_get_monologue(handle->id, call,
@ -635,7 +635,7 @@ static const char *janus_videoroom_join(struct websocket_message *wm, struct jan
flags.rtcp_mux_demux = 1;
}
int ret = monologue_subscribe_request(&srms, dest_ml, &flags);
int ret = monologue_subscribe_request(&medias, dest_ml, &flags);
if (ret)
return "Subscribe error";

@ -894,7 +894,7 @@ void codecs_offer_answer(struct call_media *media, struct call_media *other_medi
__attribute__((nonnull(1, 2, 3)))
int monologue_publish(struct call_monologue *ml, sdp_streams_q *streams, sdp_ng_flags *flags);
__attribute__((nonnull(1, 2, 3)))
int monologue_subscribe_request(const subscription_q *srms, struct call_monologue *dst, sdp_ng_flags *flags);
int monologue_subscribe_request(const medias_q *medias, struct call_monologue *dst, sdp_ng_flags *flags);
__attribute__((nonnull(1, 2, 3)))
int monologue_subscribe_answer(struct call_monologue *dst, sdp_ng_flags *flags,
sdp_streams_q *streams);

Loading…
Cancel
Save