fix the "media address" parameter to comply with the docs

git.mgm/mediaproxy-ng/origin/mr3.2
Richard Fuchs 11 years ago
parent eec41b855c
commit 3c4b3872a8

@ -758,15 +758,7 @@ void sdp_free(GQueue *sessions) {
static int fill_stream_address(struct stream_input *si, struct sdp_media *media, struct sdp_ng_flags *flags) {
struct sdp_session *session = media->session;
if (flags->media_address.s) {
if (is_addr_unspecified(&flags->parsed_media_address)) {
if (__parse_address(&flags->parsed_media_address, NULL, NULL,
&flags->media_address))
return -1;
}
si->stream.ip46 = flags->parsed_media_address;
}
else if (!flags->trust_address) {
if (!flags->trust_address) {
if (is_addr_unspecified(&flags->parsed_received_from)) {
if (__parse_address(&flags->parsed_received_from, NULL, &flags->received_from_family,
&flags->received_from_address))
@ -1095,7 +1087,7 @@ static int insert_ice_address_alt(struct sdp_chopper *chop, struct streamrelay *
}
static int replace_network_address(struct sdp_chopper *chop, struct network_address *address,
struct streamrelay *sr)
struct streamrelay *sr, struct sdp_ng_flags *flags)
{
char buf[64];
int len;
@ -1106,9 +1098,20 @@ static int replace_network_address(struct sdp_chopper *chop, struct network_addr
if (copy_up_to(chop, &address->address_type))
return -1;
mutex_lock(&sr->up->up->lock);
call_stream_address(buf, sr->up, SAF_NG, &len);
mutex_unlock(&sr->up->up->lock);
if (!is_addr_unspecified(&flags->parsed_media_address)) {
if (IN6_IS_ADDR_V4MAPPED(&flags->parsed_media_address))
len = sprintf(buf, "IP4 " IPF, IPP(flags->parsed_media_address.s6_addr32[3]));
else {
memcpy(buf, "IP6 ", 4);
inet_ntop(AF_INET6, &flags->parsed_media_address, buf + 4, sizeof(buf)-4);
len = strlen(buf);
}
}
else {
mutex_lock(&sr->up->up->lock);
call_stream_address(buf, sr->up, SAF_NG, &len);
mutex_unlock(&sr->up->up->lock);
}
chopper_append_dup(chop, buf, len);
if (skip_over(chop, &address->address))
@ -1454,6 +1457,13 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call *call,
off = opmode;
m = call->callstreams->head;
do_ice = (flags->ice_force || (!has_ice(sessions) && !flags->ice_remove)) ? 1 : 0;
if (flags->media_address.s) {
if (is_addr_unspecified(&flags->parsed_media_address)) {
if (__parse_address(&flags->parsed_media_address, NULL, NULL,
&flags->media_address))
return -1;
}
}
for (l = sessions->head; l; l = l->next) {
session = l->data;
@ -1474,11 +1484,11 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call *call,
fill_relays(&rtp, &rtcp, m, off, NULL, NULL);
if (session->origin.parsed && flags->replace_origin) {
if (replace_network_address(chop, &session->origin.address, rtp))
if (replace_network_address(chop, &session->origin.address, rtp, flags))
goto error;
}
if (session->connection.parsed && sess_conn) {
if (replace_network_address(chop, &session->connection.address, rtp))
if (replace_network_address(chop, &session->connection.address, rtp, flags))
goto error;
}
@ -1515,7 +1525,7 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call *call,
goto error;
if (media->connection.parsed) {
if (replace_network_address(chop, &media->connection.address, rtp))
if (replace_network_address(chop, &media->connection.address, rtp, flags))
goto error;
}

Loading…
Cancel
Save