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
1df637dd
Commit
1df637dd
authored
Jun 25, 2003
by
Sam Hocevar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* src/stream_output/announce.c:
+ Fixed a multiline string. + Coding style fixes.
parent
209f2eaf
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
105 additions
and
109 deletions
+105
-109
src/stream_output/announce.c
src/stream_output/announce.c
+105
-109
No files found.
src/stream_output/announce.c
View file @
1df637dd
...
@@ -47,26 +47,25 @@
...
@@ -47,26 +47,25 @@
/*****************************************************************************
/*****************************************************************************
* sout_SAPNew: Creates a SAP Session
* sout_SAPNew: Creates a SAP Session
*****************************************************************************/
*****************************************************************************/
sap_session_t
*
sout_SAPNew
(
sout_instance_t
*
p_sout
,
sap_session_t
*
sout_SAPNew
(
sout_instance_t
*
p_sout
,
char
*
psz_url_arg
,
char
*
psz_port_arg
,
char
*
psz_url_arg
,
char
*
psz_port_arg
,
char
*
psz_name_arg
,
int
ip_version
,
char
*
psz_name_arg
,
int
ip_version
,
char
*
psz_v6_scope
)
char
*
psz_v6_scope
)
{
{
sap_session_t
*
p_new
;
/* The SAP structure */
sap_session_t
*
p_new
;
/* The SAP structure */
module_t
*
p_network
;
/* Network module */
module_t
*
p_network
;
/* Network module */
network_socket_t
socket_desc
;
/* Socket descriptor */
network_socket_t
socket_desc
;
/* Socket descriptor */
char
psz_network
[
6
];
/* IPv4 or IPv6 */
char
psz_network
[
6
];
/* IPv4 or IPv6 */
char
*
sap_ipv6_addr
=
NULL
;
/* IPv6 built address */
char
*
sap_ipv6_addr
=
NULL
;
/* IPv6 built address */
/* Allocate the SAP structure */
/* Allocate the SAP structure */
p_new
=
(
sap_session_t
*
)
malloc
(
sizeof
(
sap_session_t
)
)
;
p_new
=
(
sap_session_t
*
)
malloc
(
sizeof
(
sap_session_t
)
)
;
if
(
!
p_new
)
if
(
!
p_new
)
{
{
msg_Err
(
p_sout
,
"No memory left"
);
msg_Err
(
p_sout
,
"No memory left"
);
return
NULL
;
return
NULL
;
}
}
/* Fill the information in the structure */
/* Fill the information in the structure */
sprintf
(
p_new
->
psz_url
,
"%s"
,
psz_url_arg
);
sprintf
(
p_new
->
psz_url
,
"%s"
,
psz_url_arg
);
sprintf
(
p_new
->
psz_name
,
"%s"
,
psz_name_arg
);
sprintf
(
p_new
->
psz_name
,
"%s"
,
psz_name_arg
);
...
@@ -74,12 +73,12 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -74,12 +73,12 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
sprintf
(
p_new
->
psz_port
,
"%s"
,
psz_port_arg
);
sprintf
(
p_new
->
psz_port
,
"%s"
,
psz_port_arg
);
p_new
->
i_ip_version
=
ip_version
;
p_new
->
i_ip_version
=
ip_version
;
/* Only "6" triggers IPv6. IPv4 is default */
/* Only "6" triggers IPv6. IPv4 is default */
if
(
ip_version
!=
6
)
if
(
ip_version
!=
6
)
{
{
msg_Dbg
(
p_sout
,
"Creating IPv4 SAP socket"
);
msg_Dbg
(
p_sout
,
"Creating IPv4 SAP socket"
);
/* Fill the socket descriptor */
/* Fill the socket descriptor */
socket_desc
.
i_type
=
NETWORK_UDP
;
socket_desc
.
i_type
=
NETWORK_UDP
;
socket_desc
.
psz_bind_addr
=
""
;
socket_desc
.
psz_bind_addr
=
""
;
...
@@ -87,9 +86,9 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -87,9 +86,9 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
socket_desc
.
psz_server_addr
=
SAP_IPV4_ADDR
;
socket_desc
.
psz_server_addr
=
SAP_IPV4_ADDR
;
socket_desc
.
i_server_port
=
SAP_PORT
;
socket_desc
.
i_server_port
=
SAP_PORT
;
socket_desc
.
i_handle
=
0
;
socket_desc
.
i_handle
=
0
;
/* Call the network module */
/* Call the network module */
sprintf
(
psz_network
,
"ipv4"
);
sprintf
(
psz_network
,
"ipv4"
);
p_sout
->
p_private
=
(
void
*
)
&
socket_desc
;
p_sout
->
p_private
=
(
void
*
)
&
socket_desc
;
if
(
!
(
p_network
=
module_Need
(
p_sout
,
"network"
,
psz_network
)
)
)
if
(
!
(
p_network
=
module_Need
(
p_sout
,
"network"
,
psz_network
)
)
)
{
{
...
@@ -97,42 +96,41 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -97,42 +96,41 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
return
NULL
;
return
NULL
;
}
}
module_Unneed
(
p_sout
,
p_network
);
module_Unneed
(
p_sout
,
p_network
);
p_new
->
socket
=
socket_desc
.
i_handle
;
p_new
->
socket
=
socket_desc
.
i_handle
;
if
(
p_new
->
socket
<=
0
)
if
(
p_new
->
socket
<=
0
)
{
{
msg_Warn
(
p_sout
,
"Unable to initialize SAP"
);
msg_Warn
(
p_sout
,
"Unable to initialize SAP"
);
return
NULL
;
return
NULL
;
}
}
}
}
else
else
{
{
msg_Dbg
(
p_sout
,
"Creating IPv6 SAP socket with scope %s"
msg_Dbg
(
p_sout
,
"Creating IPv6 SAP socket with scope %s"
,
psz_v6_scope
);
,
psz_v6_scope
);
/* Initialize and build the IPv6 address to broadcast to */
/* Initialize and build the IPv6 address to broadcast to */
sap_ipv6_addr
=
(
char
*
)
malloc
(
28
*
sizeof
(
char
));
sap_ipv6_addr
=
(
char
*
)
malloc
(
28
*
sizeof
(
char
));
if
(
!
sap_ipv6_addr
)
if
(
!
sap_ipv6_addr
)
{
{
msg_Err
(
p_sout
,
"No memory left"
);
msg_Err
(
p_sout
,
"No memory left"
);
return
NULL
;
return
NULL
;
}
}
sprintf
(
sap_ipv6_addr
,
"%s%c%s"
,
sprintf
(
sap_ipv6_addr
,
"%s%c%s"
,
SAP_IPV6_ADDR_1
,
SAP_IPV6_ADDR_1
,
psz_v6_scope
[
0
],
psz_v6_scope
[
0
],
SAP_IPV6_ADDR_2
);
SAP_IPV6_ADDR_2
);
/* Fill the socket descriptor */
/* Fill the socket descriptor */
socket_desc
.
i_type
=
NETWORK_UDP
;
socket_desc
.
i_type
=
NETWORK_UDP
;
socket_desc
.
psz_bind_addr
=
""
;
socket_desc
.
psz_bind_addr
=
""
;
socket_desc
.
i_bind_port
=
0
;
socket_desc
.
i_bind_port
=
0
;
socket_desc
.
psz_server_addr
=
sap_ipv6_addr
;
socket_desc
.
psz_server_addr
=
sap_ipv6_addr
;
socket_desc
.
i_server_port
=
SAP_PORT
;
socket_desc
.
i_server_port
=
SAP_PORT
;
socket_desc
.
i_handle
=
0
;
socket_desc
.
i_handle
=
0
;
sprintf
(
psz_network
,
"ipv6"
);
sprintf
(
psz_network
,
"ipv6"
);
/* Call the network module */
/* Call the network module */
p_sout
->
p_private
=
(
void
*
)
&
socket_desc
;
p_sout
->
p_private
=
(
void
*
)
&
socket_desc
;
if
(
!
(
p_network
=
module_Need
(
p_sout
,
"network"
,
psz_network
)
)
)
if
(
!
(
p_network
=
module_Need
(
p_sout
,
"network"
,
psz_network
)
)
)
...
@@ -141,137 +139,135 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -141,137 +139,135 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
return
NULL
;
return
NULL
;
}
}
module_Unneed
(
p_sout
,
p_network
);
module_Unneed
(
p_sout
,
p_network
);
p_new
->
socket
=
socket_desc
.
i_handle
;
p_new
->
socket
=
socket_desc
.
i_handle
;
if
(
p_new
->
socket
<=
0
)
if
(
p_new
->
socket
<=
0
)
{
{
msg_Warn
(
p_sout
,
"Unable to initialize SAP"
);
msg_Warn
(
p_sout
,
"Unable to initialize SAP"
);
return
NULL
;
return
NULL
;
}
}
/* Free what we allocated */
/* Free what we allocated */
if
(
sap_ipv6_addr
)
free
(
sap_ipv6_addr
);
if
(
sap_ipv6_addr
)
free
(
sap_ipv6_addr
);
}
}
msg_Dbg
(
p_sout
,
"SAP initialization complete"
);
msg_Dbg
(
p_sout
,
"SAP initialization complete"
);
return
(
p_new
);
return
(
p_new
);
}
}
/*****************************************************************************
/*****************************************************************************
* sout_SAPDelete: Deletes a SAP Session
* sout_SAPDelete: Deletes a SAP Session
*****************************************************************************/
*****************************************************************************/
void
sout_SAPDelete
(
sout_instance_t
*
p_sout
,
sap_session_t
*
p_this
)
void
sout_SAPDelete
(
sout_instance_t
*
p_sout
,
sap_session_t
*
p_this
)
{
{
if
(
close
(
p_this
->
socket
)
)
if
(
close
(
p_this
->
socket
)
)
msg_Err
(
p_sout
,
"Unable to close SAP socket"
);
{
msg_Err
(
p_sout
,
"Unable to close SAP socket"
);
if
(
p_this
)
free
(
p_this
);
}
}
if
(
p_this
)
free
(
p_this
);
}
/*****************************************************************************
/*****************************************************************************
* sout_SAPSend: Sends a SAP packet
* sout_SAPSend: Sends a SAP packet
*****************************************************************************/
*****************************************************************************/
void
sout_SAPSend
(
sout_instance_t
*
p_sout
,
sap_session_t
*
p_this
)
void
sout_SAPSend
(
sout_instance_t
*
p_sout
,
sap_session_t
*
p_this
)
{
{
char
*
sap_head
;
/* SAP header */
char
*
sap_head
;
/* SAP header */
char
sap_msg
[
1000
];
/* SDP content */
char
sap_msg
[
1000
];
/* SDP content */
char
*
sap_send
;
/* What we send */
char
*
sap_send
;
/* What we send */
char
*
payload_type
=
"application/sdp"
;
char
*
payload_type
=
"application/sdp"
;
int
i_send_result
=
0
;
/* Result of send */
int
i_send_result
=
0
;
/* Result of send */
int
i
;
int
i
;
int
i_header_size
;
/* SAP header size */
int
i_header_size
;
/* SAP header size */
int
i_msg_size
;
/* SDP content size */
int
i_msg_size
;
/* SDP content size */
int
i_size
;
/* Total size */
int
i_size
;
/* Total size */
/* We send a packet every 24 calls to the function */
/* We send a packet every 24 calls to the function */
if
(
p_this
->
sendnow
==
24
)
if
(
p_this
->
sendnow
==
24
)
{
{
i_header_size
=
9
+
strlen
(
payload_type
);
i_header_size
=
9
+
strlen
(
payload_type
);
sap_head
=
(
char
*
)
malloc
(
i_header_size
*
sizeof
(
char
)
);
sap_head
=
(
char
*
)
malloc
(
i_header_size
*
sizeof
(
char
)
);
if
(
!
sap_head
)
if
(
!
sap_head
)
{
{
msg_Warn
(
p_sout
,
"No memory left"
);
msg_Warn
(
p_sout
,
"No memory left"
);
return
;
return
;
}
}
/* Create the SAP headers */
/* Create the SAP headers */
sap_head
[
0
]
=
0x20
;
/* Means IPv4, not encrypted, not compressed */
sap_head
[
0
]
=
0x20
;
/* Means IPv4, not encrypted, not compressed */
sap_head
[
1
]
=
0x00
;
/* No authentification */
sap_head
[
1
]
=
0x00
;
/* No authentification */
sap_head
[
2
]
=
0x42
;
/* Version */
sap_head
[
2
]
=
0x42
;
/* Version */
sap_head
[
3
]
=
0x12
;
/* Version */
sap_head
[
3
]
=
0x12
;
/* Version */
sap_head
[
4
]
=
0x01
;
/* Source IP FIXME: we should get the real address */
sap_head
[
4
]
=
0x01
;
/* Source IP FIXME: we should get the real address */
sap_head
[
5
]
=
0x02
;
/* idem */
sap_head
[
5
]
=
0x02
;
/* idem */
sap_head
[
6
]
=
0x03
;
/* idem */
sap_head
[
6
]
=
0x03
;
/* idem */
sap_head
[
7
]
=
0x04
;
/* idem */
sap_head
[
7
]
=
0x04
;
/* idem */
strncpy
(
sap_head
+
8
,
payload_type
,
15
);
strncpy
(
sap_head
+
8
,
payload_type
,
15
);
sap_head
[
i_header_size
-
1
]
=
'\0'
;
sap_head
[
i_header_size
-
1
]
=
'\0'
;
/* Create the SDP content */
/* Create the SDP content */
/* Do not add spaces at beginning of the lines ! */
/* Do not add spaces at beginning of the lines ! */
sprintf
(
sap_msg
,
"v=0
\n
\
sprintf
(
sap_msg
,
"v=0
\n
"
o=VideoLAN 3247692199 3247895918 IN IP4 VideoLAN
\n
\
"o=VideoLAN 3247692199 3247895918 IN IP4 VideoLAN
\n
"
s=%s
\n
\
"s=%s
\n
"
u=VideoLAN
\n
\
"u=VideoLAN
\n
"
t=0 0
\n
\
"t=0 0
\n
"
m=audio %s udp 14
\n
\
"m=audio %s udp 14
\n
"
c=IN IP4 %s/15
\n
\
"c=IN IP4 %s/15
\n
"
a=type:test
\n
"
,
p_this
->
psz_name
,
p_this
->
psz_port
,
p_this
->
psz_url
);
"a=type:test
\n
"
,
p_this
->
psz_name
,
p_this
->
psz_port
,
p_this
->
psz_url
);
i_msg_size
=
strlen
(
sap_msg
);
i_size
=
i_msg_size
+
i_header_size
;
i_msg_size
=
strlen
(
sap_msg
);
i_size
=
i_msg_size
+
i_header_size
;
/* Create the message */
sap_send
=
(
char
*
)
malloc
(
i_size
*
sizeof
(
char
)
);
/* Create the message */
if
(
!
sap_send
)
sap_send
=
(
char
*
)
malloc
(
i_size
*
sizeof
(
char
)
);
{
if
(
!
sap_send
)
msg_Err
(
p_sout
,
"No memory left"
)
;
{
return
;
msg_Err
(
p_sout
,
"No memory left"
)
;
}
return
;
}
for
(
i
=
0
;
i
<
i_header_size
;
i
++
)
{
for
(
i
=
0
;
i
<
i_header_size
;
i
++
)
sap_send
[
i
]
=
sap_head
[
i
];
{
}
sap_send
[
i
]
=
sap_head
[
i
];
}
for
(
;
i
<
i_size
;
i
++
)
{
for
(
;
i
<
i_size
;
i
++
)
sap_send
[
i
]
=
sap_msg
[
i
-
i_header_size
];
{
}
sap_send
[
i
]
=
sap_msg
[
i
-
i_header_size
];
}
if
(
i_size
<
1024
)
/* We mustn't send packets larger than 1024B */
{
if
(
i_size
<
1024
)
/* We mustn't send packets larger than 1024B */
if
(
p_this
->
i_ip_version
==
6
)
{
{
if
(
p_this
->
i_ip_version
==
6
)
i_send_result
=
send
(
p_this
->
socket
,
sap_send
,
{
i_size
,
0
);
i_send_result
=
send
(
p_this
->
socket
,
sap_send
,
i_size
,
0
);
}
}
else
else
{
{
i_send_result
=
send
(
p_this
->
socket
,
sap_send
,
i_send_result
=
send
(
p_this
->
socket
,
sap_send
,
i_size
,
0
);
i_size
,
0
);
}
}
}
}
if
(
i_send_result
==
-
1
)
if
(
i_send_result
==
-
1
)
{
{
msg_Warn
(
p_sout
,
"SAP send failed on socket %i"
,
p_this
->
socket
);
msg_Warn
(
p_sout
,
"SAP Send failed on socket %i. "
,
perror
(
"sendto"
);
p_this
->
socket
);
}
perror
(
"sendto"
);
}
p_this
->
sendnow
=
0
;
p_this
->
sendnow
=
0
;
/* Free what we allocated */
if
(
sap_send
)
free
(
sap_send
);
/* Free what we allocated */
if
(
sap_head
)
free
(
sap_head
);
if
(
sap_send
)
free
(
sap_send
);
}
if
(
sap_head
)
free
(
sap_head
);
}
p_this
->
sendnow
++
;
p_this
->
sendnow
++
;
}
}
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