diff --git a/daemon/sdp.c b/daemon/sdp.c index 052bc7a52..23a6654fa 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -2133,23 +2133,6 @@ static int skip_over(struct sdp_chopper *chop, str *where) { return 0; } -static int replace_transport_protocol(struct sdp_chopper *chop, - struct sdp_media *media, struct call_media *cm) -{ - str *tp = &media->transport; - - if (!cm->protocol) - return 0; - - if (copy_up_to(chop, tp)) - return -1; - chopper_append_c(chop, cm->protocol->name); - if (skip_over(chop, tp)) - return -1; - - return 0; -} - static int print_format_str(GString *s, struct call_media *cm) { if (!cm->format_str.s) return 0; @@ -2173,17 +2156,6 @@ static int print_codec_list(GString *s, struct call_media *media) { return 0; } -static int replace_codec_list(struct sdp_chopper *chop, - struct sdp_media *media, struct call_media *cm) -{ - if (copy_up_to(chop, &media->formats)) - return -1; - if (skip_over(chop, &media->formats)) - return -1; - - return print_codec_list(chop->output, cm); -} - static void insert_codec_parameters(GString *s, struct call_media *cm, const sdp_ng_flags *flags) { @@ -2257,68 +2229,6 @@ void sdp_insert_all_attributes(GString *s, struct call_media *media, struct sdp_ } } -static int replace_media_type(struct sdp_chopper *chop, struct sdp_media *media, struct call_media *cm) { - str *type = &media->media_type_str; - - if (!cm->type.s) - return 0; - - if (copy_up_to(chop, type)) - return -1; - - chopper_append_str(chop, &cm->type); - - if (skip_over(chop, type)) - return -1; - - return 0; -} - -static int replace_media_port(struct sdp_chopper *chop, struct sdp_media *media, struct packet_stream *ps) { - str *port = &media->port; - unsigned int p; - - if (!media->port_num) - return 0; - - if (copy_up_to(chop, port)) - return -1; - - p = ps->selected_sfd ? ps->selected_sfd->socket.local.port : 0; - chopper_append_printf(chop, "%u", p); - - if (skip_over(chop, port)) - return -1; - - return 0; -} - -static int replace_consecutive_port_count(struct sdp_chopper *chop, struct sdp_media *media, - struct packet_stream *ps, packet_stream_list *j) -{ - int cons; - struct packet_stream *ps_n; - - if (media->port_count == 1 || !ps->selected_sfd) - return 0; - - for (cons = 1; cons < media->port_count; cons++) { - j = j->next; - if (!j) - goto warn; - ps_n = j->data; - if (ps_n->selected_sfd->socket.local.port != ps->selected_sfd->socket.local.port + cons) { -warn: - ilog(LOG_WARN, "Failed to handle consecutive ports"); - break; - } - } - - chopper_append_printf(chop, "/%i", cons); - - return 0; -} - static int insert_ice_address(GString *s, stream_fd *sfd, const sdp_ng_flags *flags) { if (!is_addr_unspecified(&flags->media_address)) sockaddr_print_gstring(s, &flags->media_address); @@ -2341,42 +2251,6 @@ static int insert_raddr_rport(GString *s, stream_fd *sfd, const sdp_ng_flags *fl return 0; } - -static int replace_network_address(struct sdp_chopper *chop, struct network_address *address, - struct packet_stream *ps, sdp_ng_flags *flags, bool keep_unspec) -{ - if (copy_up_to(chop, &address->address_type)) - return -1; - - if (!is_addr_unspecified(&flags->media_address)) - g_string_append_printf(chop->output, "%s %s", - flags->media_address.family->rfc_name, - sockaddr_print_buf(&flags->media_address)); - else - call_stream_address(chop->output, ps, SAF_NG, NULL, keep_unspec); - - if (skip_over(chop, &address->address)) - return -1; - - return 0; -} - -static int synth_session_connection(struct sdp_chopper *chop, struct sdp_media *sdp_media) { - if (!sdp_media->session->connection.s.s) - return -1; - - if (sdp_media->c_line_pos) - copy_up_to_ptr(chop, sdp_media->c_line_pos); - else - copy_up_to_end_of(chop, chop->input); - - chopper_append_c(chop, "c="); - chopper_append_str(chop, &sdp_media->session->connection.s); - chopper_append_c(chop, "\n"); - - return 0; -} - void sdp_chopper_destroy(struct sdp_chopper *chop) { if (chop->output) g_string_free(chop->output, TRUE); @@ -3237,70 +3111,6 @@ static struct packet_stream *print_sdp_media_section(GString *s, struct call_med return ps_rtcp; } - -static const char *replace_sdp_media_section(struct sdp_chopper *chop, struct call_media *call_media, - struct sdp_media *sdp_media, packet_stream_list *rtp_ps_link, sdp_ng_flags *flags, - const bool keep_zero_address) -{ - const char *err = NULL; - struct packet_stream *ps = rtp_ps_link->data; - - bool is_active = true; - - if (flags->ice_option != ICE_FORCE_RELAY && call_media->type_id != MT_MESSAGE) { - err = "failed to replace media type"; - if (replace_media_type(chop, sdp_media, call_media)) - goto error; - err = "failed to replace media port"; - if (replace_media_port(chop, sdp_media, ps)) - goto error; - err = "failed to replace media port count"; - if (replace_consecutive_port_count(chop, sdp_media, ps, rtp_ps_link)) - goto error; - err = "failed to replace media protocol"; - if (replace_transport_protocol(chop, sdp_media, call_media)) - goto error; - err = "failed to replace media formats"; - if (replace_codec_list(chop, sdp_media, call_media)) - goto error; - - if (sdp_media->connection.parsed) { - err = "failed to replace media network address"; - if (replace_network_address(chop, &sdp_media->connection.address, ps, - flags, keep_zero_address)) - goto error; - } - } - else if (call_media->type_id == MT_MESSAGE) { - err = "failed to generate connection line"; - if (!sdp_media->connection.parsed) - if (synth_session_connection(chop, sdp_media)) - goto error; - // leave everything untouched - is_active = false; - goto next; - } - - /* all unknown type attributes will stripped here */ - err = "failed to process media attributes"; - if (process_media_attributes(chop, sdp_media, flags, call_media)) - goto error; - - copy_up_to_end_of(chop, &sdp_media->s); - - if (!sdp_media->port_num || !ps->selected_sfd) - is_active = false; - -next:; - struct call_media *source_media = sdp_out_set_source_media_address(call_media, ps, flags, NULL); - print_sdp_media_section(chop->output, call_media, source_media, flags, rtp_ps_link, is_active, - attr_get_by_id(&sdp_media->attributes, ATTR_END_OF_CANDIDATES), false); - return NULL; - -error: - return err; -} - static void sdp_out_add_origin(GString *out, struct call_monologue *monologue, struct packet_stream *first_ps, sdp_ng_flags *flags) {