Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
73207625
Commit
73207625
authored
Nov 10, 2006
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Backport [17603]: include source-filter in SAP depending on group address
parent
b4188eda
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
50 additions
and
28 deletions
+50
-28
src/stream_output/sap.c
src/stream_output/sap.c
+50
-28
No files found.
src/stream_output/sap.c
View file @
73207625
...
...
@@ -76,7 +76,7 @@ static void RunThread( vlc_object_t *p_this);
static
int
CalculateRate
(
sap_handler_t
*
p_sap
,
sap_address_t
*
p_address
);
static
char
*
SDPGenerate
(
sap_handler_t
*
p_sap
,
const
session_descriptor_t
*
p_session
,
const
sap_address_t
*
p_addr
);
const
sap_address_t
*
p_addr
,
vlc_bool_t
b_ssm
);
static
int
announce_SendSAPAnnounce
(
sap_handler_t
*
p_sap
,
sap_session_t
*
p_session
);
...
...
@@ -235,7 +235,7 @@ static int announce_SAPAnnounceAdd( sap_handler_t *p_sap,
{
int
i_header_size
,
i
;
char
*
psz_head
,
psz_addr
[
NI_MAXNUMERICHOST
];
vlc_bool_t
b_ipv6
=
VLC_FALSE
;
vlc_bool_t
b_ipv6
=
VLC_FALSE
,
b_ssm
=
VLC_FALSE
;
sap_session_t
*
p_sap_session
;
mtime_t
i_hash
;
struct
addrinfo
hints
,
*
res
;
...
...
@@ -288,8 +288,13 @@ static int announce_SAPAnnounceAdd( sap_handler_t *p_sap,
memcpy
(
a6
->
s6_addr
+
2
,
"
\x00\x00\x00\x00\x00\x00
"
"
\x00\x00\x00\x00\x00\x02\x7f\xfe
"
,
14
);
if
(
IN6_IS_ADDR_MULTICAST
(
a6
)
)
/* force flags to zero, preserve scope */
{
/* force flags to zero, preserve scope */
a6
->
s6_addr
[
1
]
&=
0xf
;
/* SSM <=> ff3x::/32 */
b_ssm
=
(
GetDWLE
(
a6
->
s6_addr
)
&
0xfff0ffff
)
==
0xff300000
;
}
else
/* Unicast IPv6 - assume global scope */
memcpy
(
a6
->
s6_addr
,
"
\xff\x0e
"
,
2
);
...
...
@@ -321,8 +326,13 @@ static int announce_SAPAnnounceAdd( sap_handler_t *p_sap,
ipv4
=
0
;
else
/* other addresses => 224.2.127.254 */
{
ipv4
=
0xe0027ffe
;
/* SSM: 232.0.0.0/8 */
b_ssm
=
(
ipv4
>>
24
)
==
232
;
}
if
(
ipv4
==
0
)
{
msg_Err
(
p_sap
,
"Out-of-scope multicast address "
...
...
@@ -468,7 +478,7 @@ static int announce_SAPAnnounceAdd( sap_handler_t *p_sap,
if
(
p_session
->
psz_sdp
==
NULL
)
{
p_session
->
psz_sdp
=
SDPGenerate
(
p_sap
,
p_session
,
p_sap_session
->
p_address
);
p_sap_session
->
p_address
,
b_ssm
);
if
(
p_session
->
psz_sdp
==
NULL
)
{
vlc_mutex_unlock
(
&
p_sap
->
object_lock
);
...
...
@@ -584,7 +594,7 @@ static int announce_SendSAPAnnounce( sap_handler_t *p_sap,
static
char
*
SDPGenerate
(
sap_handler_t
*
p_sap
,
const
session_descriptor_t
*
p_session
,
const
sap_address_t
*
p_addr
)
const
sap_address_t
*
p_addr
,
vlc_bool_t
b_ssm
)
{
int64_t
i_sdp_id
=
mdate
();
int
i_sdp_version
=
1
+
p_sap
->
i_sessions
+
(
rand
()
&
0xfff
);
...
...
@@ -614,30 +624,42 @@ static char *SDPGenerate( sap_handler_t *p_sap,
else
psz_uri
=
p_session
->
psz_uri
;
char
*
sfilter
=
NULL
;
if
(
b_ssm
)
{
if
(
asprintf
(
&
sfilter
,
"a=source-filter: incl IN IP%c * %s
\r\n
"
,
ipv
,
p_addr
->
psz_machine
)
==
-
1
)
return
NULL
;
}
/* see the lists in modules/stream_out/rtp.c for compliance stuff */
if
(
asprintf
(
&
psz_sdp
,
"v=0
\r\n
"
"o=- "
I64Fd
" %d IN IP%c %s
\r\n
"
"s=%s
\r\n
"
"c=IN IP%c %s/%d
\r\n
"
"t=0 0
\r\n
"
"a=tool:"
PACKAGE_STRING
"
\r\n
"
"a=recvonly
\r\n
"
"a=type:broadcast
\n
"
"a=source-filter: incl IN IP%c * %s
\r\n
"
"m=video %d %s %d
\r\n
"
"%s%s%s"
,
i_sdp_id
,
i_sdp_version
,
ipv
,
p_addr
->
psz_machine
,
psz_name
,
ipv
,
psz_uri
,
/* FIXME: 1 is IPv4 default TTL, not that of IPv6 */
p_session
->
i_ttl
?:
(
config_GetInt
(
p_sap
,
"ttl"
)
?:
1
),
ipv
,
p_addr
->
psz_machine
,
p_session
->
i_port
,
p_session
->
b_rtp
?
"RTP/AVP"
:
"udp"
,
p_session
->
i_payload
,
psz_group
?
"a=x-plgroup:"
:
""
,
psz_group
?
psz_group
:
""
,
psz_group
?
"
\r\n
"
:
""
)
==
-
1
)
int
res
=
asprintf
(
&
psz_sdp
,
"v=0
\r\n
"
"o=- "
I64Fd
" %d IN IP%c %s
\r\n
"
"s=%s
\r\n
"
"c=IN IP%c %s/%d
\r\n
"
"t=0 0
\r\n
"
"a=tool:"
PACKAGE_STRING
"
\r\n
"
"a=recvonly
\r\n
"
"a=type:broadcast
\n
"
"%s"
"m=video %d %s %d
\r\n
"
"%s%s%s"
,
i_sdp_id
,
i_sdp_version
,
ipv
,
p_addr
->
psz_machine
,
psz_name
,
ipv
,
psz_uri
,
/* FIXME: 1 is IPv4 default TTL, not that of IPv6 */
p_session
->
i_ttl
?:
(
config_GetInt
(
p_sap
,
"ttl"
)
?:
1
),
(
sfilter
!=
NULL
)
?
sfilter
:
""
,
p_session
->
i_port
,
p_session
->
b_rtp
?
"RTP/AVP"
:
"udp"
,
p_session
->
i_payload
,
psz_group
?
"a=x-plgroup:"
:
""
,
psz_group
?
psz_group
:
""
,
psz_group
?
"
\r\n
"
:
""
);
if
(
sfilter
!=
NULL
)
free
(
sfilter
);
if
(
res
==
-
1
)
return
NULL
;
msg_Dbg
(
p_sap
,
"Generated SDP (%i bytes):
\n
%s"
,
strlen
(
psz_sdp
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment