Browse Source

Squashed commit of the following:

commit a2e5cfb8e5
Author: Razvan Crainea <razvan@opensips.org>
Date:   Thu Jan 13 16:16:19 2022 +0200

    Add tests for subscribe requests on paused media

commit fa58596a9f
Author: Razvan Crainea <razvan@opensips.org>
Date:   Wed Jan 12 22:01:27 2022 +0200

    Swap media direction check for `subscribe request`

    as @rfuchs mentioned in his review, the SEND/RECV media flags are set
    according to rtpengine's perspective, not the media flow's one.

commit e1e9a157c0
Author: Razvan Crainea <razvan@opensips.org>
Date:   Wed Jan 12 19:27:42 2022 +0200

    Fix `subscribe request` SDP media direction

    When building the SDP for a `subscribe request` command, take into
    consideration the media direction of the source stream - if stream is
    `recvonly`, then we do not have anything to send, thus the direction
    should be advertised as `inactive`, rather than `sendonly`.

Change-Id: I2d78bbec8ad584774f3c90f0ce5cca42f57f7b0f
pull/1439/head
Richard Fuchs 4 years ago
parent
commit
5fc658e33b
2 changed files with 235 additions and 1 deletions
  1. +4
    -1
      daemon/call.c
  2. +231
    -0
      t/auto-daemon-tests-pubsub.pl

+ 4
- 1
daemon/call.c View File

@ -2975,7 +2975,10 @@ static int monologue_subscribe_request1(struct call_monologue *src_ml, struct ca
codec_handlers_update(dst_media, src_media, flags, sp);
MEDIA_SET(dst_media, SEND);
if (MEDIA_ISSET(src_media, RECV))
MEDIA_SET(dst_media, SEND);
else
MEDIA_CLEAR(dst_media, SEND);
MEDIA_CLEAR(dst_media, RECV);
__rtcp_mux_set(flags, dst_media);


+ 231
- 0
t/auto-daemon-tests-pubsub.pl View File

@ -650,6 +650,237 @@ rcv($sock_c, $port_c, rtpm(8, 2001, 4160, -1, "\x2a" x 160));
($sock_a, $sock_b, $sock_c, $sock_d) =
new_call([qw(198.51.100.14 6112)], [qw(198.51.100.14 6114)], [qw(198.51.100.14 6116)]);
($port_a) = offer('sub pause/resume',
{ }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 6112 RTP/AVP 0
c=IN IP4 198.51.100.14
a=sendrecv
----------------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=sendrecv
a=rtcp:PORT
SDP
($port_b) = answer('sub pause/resume',
{ }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 6114 RTP/AVP 0
c=IN IP4 198.51.100.14
a=sendrecv
----------------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=sendrecv
a=rtcp:PORT
SDP
snd($sock_b, $port_a, rtp(0, 2000, 4000, 0x3456, "\x00" x 160));
($ssrc_a) = rcv($sock_a, $port_b, rtpm(0, 2000, 4000, -1, "\x00" x 160));
snd($sock_a, $port_b, rtp(0, 4000, 7000, 0x6543, "\x00" x 160));
($ssrc_b) = rcv($sock_b, $port_a, rtpm(0, 4000, 7000, -1, "\x00" x 160));
(undef, $ttr, undef, undef, undef, $port_c) = subscribe_request('sub pause/resume',
{ 'from-tag' => ft() }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=sendonly
a=rtcp:PORT
SDP
subscribe_answer('sub pause/resume',
{ 'to-tag' => $ttr }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 6116 RTP/AVP 0
c=IN IP4 198.51.100.14
a=recvonly
SDP
snd($sock_b, $port_a, rtp(0, 2001, 4160, 0x3456, "\x00" x 160));
rcv($sock_a, $port_b, rtpm(0, 2001, 4160, $ssrc_a, "\x00" x 160));
snd($sock_a, $port_b, rtp(0, 4001, 7160, 0x6543, "\x00" x 160));
rcv($sock_b, $port_a, rtpm(0, 4001, 7160, $ssrc_b, "\x00" x 160));
rcv($sock_c, $port_c, rtpm(0, 4001, 7160, $ssrc_b, "\x00" x 160));
($port_b) = offer('sub pause/resume',
{ 'from-tag' => tt(), 'to-tag' => ft() }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 6114 RTP/AVP 0
c=IN IP4 198.51.100.14
a=sendonly
----------------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=sendonly
a=rtcp:PORT
SDP
($port_a) = answer('sub pause/resume',
{ 'from-tag' => tt(), 'to-tag' => ft() }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 6112 RTP/AVP 0
c=IN IP4 198.51.100.14
a=recvonly
----------------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=recvonly
a=rtcp:PORT
SDP
snd($sock_b, $port_a, rtp(0, 2001, 4320, 0x3456, "\x00" x 160));
rcv($sock_a, $port_b, rtpm(0, 2001, 4320, $ssrc_a, "\x00" x 160));
(undef, $ttr2, undef, undef, undef, $port_c) = subscribe_request('sub pause/resume',
{ 'from-tag' => ft(), 'to-tag' => $ttr }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=inactive
a=rtcp:PORT
SDP
is $ttr, $ttr2, 'resubscribe to-tag matches';
subscribe_answer('sub pause/resume',
{ 'to-tag' => $ttr }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 6116 RTP/AVP 0
c=IN IP4 198.51.100.14
a=inactive
SDP
snd($sock_b, $port_a, rtp(0, 2001, 4480, 0x3456, "\x00" x 160));
rcv($sock_a, $port_b, rtpm(0, 2001, 4480, $ssrc_a, "\x00" x 160));
($port_b) = offer('sub pause/resume',
{ 'from-tag' => tt(), 'to-tag' => ft() }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 6114 RTP/AVP 0
c=IN IP4 198.51.100.14
a=sendrecv
----------------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=sendrecv
a=rtcp:PORT
SDP
($port_a) = answer('sub pause/resume',
{ 'from-tag' => tt(), 'to-tag' => ft() }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 6112 RTP/AVP 0
c=IN IP4 198.51.100.14
a=sendrecv
----------------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=sendrecv
a=rtcp:PORT
SDP
(undef, undef, undef, undef, undef, $port_c) = subscribe_request('sub pause/resume',
{ 'from-tag' => ft(), 'to-tag' => $ttr }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=sendonly
a=rtcp:PORT
SDP
subscribe_answer('sub pause/resume',
{ 'to-tag' => $ttr }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 6116 RTP/AVP 0
c=IN IP4 198.51.100.14
a=recvonly
SDP
snd($sock_b, $port_a, rtp(0, 2001, 4640, 0x3456, "\x00" x 160));
rcv($sock_a, $port_b, rtpm(0, 2001, 4640, $ssrc_a, "\x00" x 160));
snd($sock_a, $port_b, rtp(0, 4001, 7640, 0x6543, "\x00" x 160));
rcv($sock_b, $port_a, rtpm(0, 4001, 7640, $ssrc_b, "\x00" x 160));
rcv($sock_c, $port_c, rtpm(0, 4001, 7640, $ssrc_b, "\x00" x 160));
($sock_a, $sock_b, $sock_c) =
new_call([qw(198.51.100.14 6060)], [qw(198.51.100.14 6062)], [qw(198.51.100.14 6064)]);


Loading…
Cancel
Save