|
|
@ -452,7 +452,7 @@ static int replace_media_port(struct sdp_chopper *chop, struct sdp_media *media, |
|
|
return -1; |
|
|
return -1; |
|
|
|
|
|
|
|
|
if (media->port_count == 1) |
|
|
if (media->port_count == 1) |
|
|
return 1; |
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
for (cons = 1; cons < media->port_count; cons++) { |
|
|
for (cons = 1; cons < media->port_count; cons++) { |
|
|
m = m->next; |
|
|
m = m->next; |
|
|
@ -468,7 +468,7 @@ warn: |
|
|
|
|
|
|
|
|
chopper_append_printf(chop, "/%i", cons); |
|
|
chopper_append_printf(chop, "/%i", cons); |
|
|
|
|
|
|
|
|
return cons; |
|
|
|
|
|
|
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
static int replace_network_address(struct sdp_chopper *chop, struct network_address *address, GList *m, int off, struct sdp_ng_flags *flags) { |
|
|
static int replace_network_address(struct sdp_chopper *chop, struct network_address *address, GList *m, int off, struct sdp_ng_flags *flags) { |
|
|
@ -510,14 +510,13 @@ void sdp_chopper_destroy(struct sdp_chopper *chop) { |
|
|
g_slice_free1(sizeof(*chop), chop); |
|
|
g_slice_free1(sizeof(*chop), chop); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* XXX use stream numbers as index */ |
|
|
|
|
|
int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call *call, |
|
|
int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call *call, |
|
|
enum call_opmode opmode, struct sdp_ng_flags *flags, GHashTable *streamhash) |
|
|
enum call_opmode opmode, struct sdp_ng_flags *flags, GHashTable *streamhash) |
|
|
{ |
|
|
{ |
|
|
struct sdp_session *session; |
|
|
struct sdp_session *session; |
|
|
struct sdp_media *media; |
|
|
struct sdp_media *media; |
|
|
GList *l, *k, *m; |
|
|
GList *l, *k, *m; |
|
|
int off, skip; |
|
|
|
|
|
|
|
|
int off; |
|
|
struct stream_input si, *sip; |
|
|
struct stream_input si, *sip; |
|
|
|
|
|
|
|
|
off = opmode; |
|
|
off = opmode; |
|
|
@ -551,16 +550,13 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call *call, |
|
|
while (m && ((struct callstream *) m->data)->num > sip->stream.num) |
|
|
while (m && ((struct callstream *) m->data)->num > sip->stream.num) |
|
|
m = m->prev; |
|
|
m = m->prev; |
|
|
|
|
|
|
|
|
skip = replace_media_port(chop, media, m, off); |
|
|
|
|
|
if (skip < 0) |
|
|
|
|
|
|
|
|
if (replace_media_port(chop, media, m, off)) |
|
|
goto error; |
|
|
goto error; |
|
|
|
|
|
|
|
|
if (media->connection.parsed && flags->replace_sess_conn) { |
|
|
if (media->connection.parsed && flags->replace_sess_conn) { |
|
|
if (replace_network_address(chop, &media->connection.address, m, off, flags)) |
|
|
if (replace_network_address(chop, &media->connection.address, m, off, flags)) |
|
|
goto error; |
|
|
goto error; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
m = g_list_nth(m, skip); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|