diff --git a/daemon/call.c b/daemon/call.c index 35ce82890..cfd109350 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -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; diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 5dd9e6855..a5b31ac30 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -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}; diff --git a/daemon/janus.c b/daemon/janus.c index 546f1fbb4..d307bee01 100644 --- a/daemon/janus.c +++ b/daemon/janus.c @@ -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"; diff --git a/include/call.h b/include/call.h index 4ea0c7299..d2ce360c0 100644 --- a/include/call.h +++ b/include/call.h @@ -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);