Skip to content

Commit

Permalink
MT#56465 Rework the sdp_out_add_origin() func
Browse files Browse the repository at this point in the history
Rework the `sdp_out_add_origin()` func so, that
it's compatible with offer/answer model.

Additionally it uses the previously existing logic
for the PUBLISH operations always, regardless any
conditions.

Additionally: fix auto-daemon-tests-websocket accordingly.

Change-Id: I0bddc67f4ebe47a24063ccc82428929aeb6cc37a
  • Loading branch information
zenichev committed May 23, 2024
1 parent 138ba8c commit fa8be54
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 29 deletions.
56 changes: 33 additions & 23 deletions daemon/sdp.c
Original file line number Diff line number Diff line change
Expand Up @@ -3373,36 +3373,46 @@ int sdp_replace(struct sdp_chopper *chop, sdp_sessions_q *sessions, struct call_
}

static void sdp_out_add_origin(GString *out, struct call_monologue *monologue,
struct packet_stream *first_ps, sdp_ng_flags *flags)
struct packet_stream *first_ps, sdp_ng_flags *flags)
{
const char * origin_address;
const char * origin_address_type;
struct call_monologue *ml = monologue;
const char *origin_address = NULL;
const char *origin_address_type = first_ps->selected_sfd->local_intf->advertised_address.addr.family->rfc_name;

/* init session params */
if (!monologue->sdp_session_id)
monologue->sdp_session_id = (unsigned long long) rtpe_now.tv_sec << 32 | rtpe_now.tv_usec;
if (!monologue->sdp_version)
monologue->sdp_version = monologue->sdp_session_id;
/* for the offer/answer model or subscribe don't use the given monologues SDP,
* but try the one of the subscription, because the given monologue itself
* has likely no session attributes set yet */
struct media_subscription *ms = call_get_top_media_subscription(monologue);
if (ms && ms->monologue) {
ml = ms->monologue;

if (flags->media_address.s && is_addr_unspecified(&flags->parsed_media_address))
__parse_address(&flags->parsed_media_address, NULL, NULL, &flags->media_address);
if (flags->session_sdp_orig.parsed &&
flags->replace_origin &&
flags->ice_option != ICE_FORCE_RELAY &&
!is_addr_unspecified(&flags->parsed_media_address))
{
origin_address = sockaddr_print_buf(&flags->parsed_media_address);
}
}

origin_address = sockaddr_print_buf(&first_ps->selected_sfd->local_intf->advertised_address.addr);
origin_address_type = first_ps->selected_sfd->local_intf->advertised_address.addr.family->rfc_name;
if (!origin_address)
/* by default for PUBLISH */
origin_address = sockaddr_print_buf(&first_ps->selected_sfd->local_intf->advertised_address.addr);

/* replace origin */
if (flags->media_address.s && is_addr_unspecified(&flags->parsed_media_address))
__parse_address(&flags->parsed_media_address, NULL, NULL, &flags->media_address);
if (flags->session_sdp_orig.parsed &&
flags->replace_origin &&
flags->ice_option != ICE_FORCE_RELAY &&
!is_addr_unspecified(&flags->parsed_media_address))
{
origin_address = sockaddr_print_buf(&flags->parsed_media_address);
}
if (!ml->sdp_username)
ml->sdp_username = "-";
if (!ml->sdp_session_id)
ml->sdp_session_id = (unsigned long long) rtpe_now.tv_sec << 32 | rtpe_now.tv_usec;
if (!ml->sdp_version)
ml->sdp_version = ml->sdp_session_id;

g_string_append_printf(out,
"o=%s %llu %llu IN %s %s\r\n",
(monologue->sdp_username ? : "-"), /* just set a dash if still absent */
monologue->sdp_session_id,
monologue->sdp_version,
ml->sdp_username,
ml->sdp_session_id,
ml->sdp_version,
origin_address_type,
origin_address);
}
Expand Down
9 changes: 4 additions & 5 deletions t/auto-daemon-tests-websocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -613,7 +613,7 @@ def testVideoroomWebRTC(self):
sdp,
re.compile(
"^v=0\r\n"
"o=- \d+ \d+ IN IP4 203.0.113.1\r\n"
"o=x \d+ \d+ IN IP4 203.0.113.1\r\n"
"s=foobar\r\n"
"t=0 0\r\n"
"m=audio \d+ UDP/TLS/RTP/SAVPF 8\r\n"
Expand Down Expand Up @@ -901,7 +901,7 @@ def testVideoroomWebRTCAlt(self):
sdp,
re.compile(
"^v=0\r\n"
"o=- \d+ \d+ IN IP4 203.0.113.1\r\n"
"o=x \d+ \d+ IN IP4 203.0.113.1\r\n"
"s=foobar\r\n"
"t=0 0\r\n"
"m=audio \d+ UDP/TLS/RTP/SAVPF 8\r\n"
Expand Down Expand Up @@ -2019,7 +2019,7 @@ def testVideoroomICE(self):
sdp,
re.compile(
"^v=0\r\n"
"o=- \d+ \d+ IN IP4 203.0.113.1\r\n"
"o=x \d+ \d+ IN IP4 203.0.113.1\r\n"
"s=foobar\r\n"
"t=0 0\r\n"
"m=audio \d+ UDP/TLS/RTP/SAVPF 8\r\n"
Expand Down Expand Up @@ -2627,7 +2627,6 @@ def testVideoroomMultiConn(self):
eventloop.run_until_complete(testIJanus(self, 1))
sdp = self._res["jsep"]["sdp"]
self.assertIsInstance(sdp, str)

match_re = re.compile(
"^v=0\r\n"
"o=x \d+ \d+ IN IP4 203.0.113.1\r\n"
Expand Down Expand Up @@ -3152,7 +3151,7 @@ def testVideoroomMute(self):

match_re = re.compile(
"^v=0\r\n"
"o=- \d+ \d+ IN IP4 203.0.113.1\r\n"
"o=x \d+ \d+ IN IP4 203.0.113.1\r\n"
"s=foobar\r\n"
"t=0 0\r\n"
"m=audio (\d+) RTP/AVP 96\r\n"
Expand Down
2 changes: 1 addition & 1 deletion t/auto-daemon-tests.pl
Original file line number Diff line number Diff line change
Expand Up @@ -1554,7 +1554,7 @@ sub stun_succ {

subscribe_request('AMR asymmetric', {flags => [qw/SIPREC all/]}, <<SDP);
v=0
o=- SDP_VERSION IN IP4 203.0.113.1
o=ccs-0-615-7 SDP_VERSION IN IP4 203.0.113.1
s=-
t=0 0
m=audio PORT RTP/AVP 96 98
Expand Down

0 comments on commit fa8be54

Please sign in to comment.