Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
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-2-2
Commits
aa935693
Commit
aa935693
authored
Jul 17, 2003
by
Sam Hocevar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* src/stream_output/announce.c:
+ Coding style fixes. + Use memcpy() instead of for() loops.
parent
8c7b5a88
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
139 additions
and
146 deletions
+139
-146
include/announce.h
include/announce.h
+3
-3
src/stream_output/announce.c
src/stream_output/announce.c
+136
-143
No files found.
include/announce.h
View file @
aa935693
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* announce.h : Session announcement
* announce.h : Session announcement
*****************************************************************************
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* Copyright (C) 2002 VideoLAN
* $Id: announce.h,v 1.
6 2003/07/05 15:00:28 zorglub
Exp $
* $Id: announce.h,v 1.
7 2003/07/17 14:10:08 sam
Exp $
*
*
* Authors: Clment Stenac <zorglub@via.ecp.fr>
* Authors: Clment Stenac <zorglub@via.ecp.fr>
*
*
...
@@ -51,8 +51,8 @@ struct sap_session_t
...
@@ -51,8 +51,8 @@ struct sap_session_t
char
psz_name
[
1024
];
char
psz_name
[
1024
];
char
psz_port
[
8
];
char
psz_port
[
8
];
module_t
p_network
;
module_t
p_network
;
unsigned
int
socket
;
unsigned
int
i_
socket
;
unsigned
int
sendnow
;
unsigned
int
i_calls
;
int
i_ip_version
;
int
i_ip_version
;
};
};
...
...
src/stream_output/announce.c
View file @
aa935693
...
@@ -113,7 +113,7 @@ static char * split( char *psz_in, char *psz_out1, char *psz_out2, char delim)
...
@@ -113,7 +113,7 @@ static char * split( char *psz_in, char *psz_out1, char *psz_out2, char delim)
/*****************************************************************************
/*****************************************************************************
* 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_url_arg
,
char
*
psz_name_arg
,
int
ip_version
,
char
*
psz_name_arg
,
int
ip_version
,
char
*
psz_v6_scope
)
char
*
psz_v6_scope
)
...
@@ -127,47 +127,47 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -127,47 +127,47 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
int
i_port
;
/* Port in numerical format */
int
i_port
;
/* Port in numerical format */
/* 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
,
"
out of memory
"
);
return
NULL
;
return
NULL
;
}
}
/* Fill the information in the structure */
/* Fill the information in the structure */
if
(
strstr
(
psz_url_arg
,
"["
)
)
if
(
strstr
(
psz_url_arg
,
"["
)
)
{
/* We have an IPv6 address. Do not use ':' as the port separator */
{
/* We have an IPv6 address. Do not use ':' as the port separator */
psz_eol
=
strchr
(
psz_url_arg
,
']'
);
psz_eol
=
strchr
(
psz_url_arg
,
']'
);
if
(
!
psz_eol
)
/* No matching ] ! Aborting */
if
(
!
psz_eol
)
/* No matching ] ! Aborting */
{
{
msg_Warn
(
p_sout
,
"No matching ]. U
nable to parse URI"
);
msg_Warn
(
p_sout
,
"no matching ], u
nable to parse URI"
);
return
NULL
;
return
NULL
;
}
}
if
(
!
psz_eol
++
)
if
(
!
psz_eol
++
)
{
{
sprintf
(
p_new
->
psz_url
,
"%s"
,
psz_url_arg
);
sprintf
(
p_new
->
psz_url
,
"%s"
,
psz_url_arg
);
sprintf
(
p_new
->
psz_port
,
"%s"
,
DEFAULT_PORT
);
sprintf
(
p_new
->
psz_port
,
"%s"
,
DEFAULT_PORT
);
}
}
else
else
{
{
*
psz_eol
=
'\0'
;
*
psz_eol
=
'\0'
;
sprintf
(
p_new
->
psz_url
,
"%s"
,
psz_url_arg
);
sprintf
(
p_new
->
psz_url
,
"%s"
,
psz_url_arg
);
psz_eol
++
;
psz_eol
++
;
if
(
psz_eol
)
if
(
psz_eol
)
{
{
sprintf
(
p_new
->
psz_port
,
"%s"
,
psz_eol
);
sprintf
(
p_new
->
psz_port
,
"%s"
,
psz_eol
);
}
}
}
}
}
}
else
else
{
{
split
(
psz_url_arg
,
p_new
->
psz_url
,
p_new
->
psz_port
,
':'
);
split
(
psz_url_arg
,
p_new
->
psz_url
,
p_new
->
psz_port
,
':'
);
}
}
/* Check if we have a port */
/* Check if we have a port */
if
(
!
strlen
(
p_new
->
psz_port
)
)
if
(
!
strlen
(
p_new
->
psz_port
)
)
{
{
sprintf
(
p_new
->
psz_port
,
"%s"
,
DEFAULT_PORT
);
sprintf
(
p_new
->
psz_port
,
"%s"
,
DEFAULT_PORT
);
}
}
/* Make sure our port is valid and atoi it*/
/* Make sure our port is valid and atoi it*/
...
@@ -175,22 +175,22 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -175,22 +175,22 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
if
(
!
i_port
)
if
(
!
i_port
)
{
{
sprintf
(
p_new
->
psz_port
,
"%s"
,
DEFAULT_PORT
);
sprintf
(
p_new
->
psz_port
,
"%s"
,
DEFAULT_PORT
);
}
}
else
else
{
{
sprintf
(
p_new
->
psz_port
,
"%i"
,
i_port
);
sprintf
(
p_new
->
psz_port
,
"%i"
,
i_port
);
}
}
/* The name that we send */
/* The name that we send */
sprintf
(
p_new
->
psz_name
,
"%s"
,
psz_name_arg
);
sprintf
(
p_new
->
psz_name
,
"%s"
,
psz_name_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
,
"C
reating IPv4 SAP socket"
);
msg_Dbg
(
p_sout
,
"c
reating IPv4 SAP socket"
);
/* Fill the socket descriptor */
/* Fill the socket descriptor */
socket_desc
.
i_type
=
NETWORK_UDP
;
socket_desc
.
i_type
=
NETWORK_UDP
;
...
@@ -202,7 +202,7 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -202,7 +202,7 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
/* 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
)
)
)
{
{
msg_Warn
(
p_sout
,
"failed to open a connection (udp)"
);
msg_Warn
(
p_sout
,
"failed to open a connection (udp)"
);
...
@@ -210,29 +210,27 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -210,29 +210,27 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
}
}
module_Unneed
(
p_sout
,
p_network
);
module_Unneed
(
p_sout
,
p_network
);
p_new
->
socket
=
socket_desc
.
i_handle
;
p_new
->
i_socket
=
socket_desc
.
i_handle
;
if
(
p_new
->
socket
<=
0
)
if
(
p_new
->
i_socket
<
0
)
{
{
msg_Warn
(
p_sout
,
"
U
nable to initialize SAP"
);
msg_Warn
(
p_sout
,
"
u
nable 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
,
"
out of memory
"
);
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
],
SAP_IPV6_ADDR_2
);
psz_v6_scope
[
0
],
SAP_IPV6_ADDR_2
);
/* Fill the socket descriptor */
/* Fill the socket descriptor */
socket_desc
.
i_type
=
NETWORK_UDP
;
socket_desc
.
i_type
=
NETWORK_UDP
;
...
@@ -245,7 +243,7 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -245,7 +243,7 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
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
)
)
)
{
{
msg_Warn
(
p_sout
,
"failed to open a connection (udp)"
);
msg_Warn
(
p_sout
,
"failed to open a connection (udp)"
);
...
@@ -253,19 +251,21 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -253,19 +251,21 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
}
}
module_Unneed
(
p_sout
,
p_network
);
module_Unneed
(
p_sout
,
p_network
);
p_new
->
socket
=
socket_desc
.
i_handle
;
p_new
->
i_socket
=
socket_desc
.
i_handle
;
if
(
p_new
->
i_socket
<=
0
)
if
(
p_new
->
socket
<=
0
)
{
{
msg_Warn
(
p_sout
,
"
U
nable to initialize SAP"
);
msg_Warn
(
p_sout
,
"
u
nable 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
);
}
}
...
@@ -273,14 +273,14 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
...
@@ -273,14 +273,14 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout ,
/*****************************************************************************
/*****************************************************************************
* 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
->
i_
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
);
free
(
p_this
);
}
}
/*****************************************************************************
/*****************************************************************************
...
@@ -288,45 +288,47 @@ void sout_SAPDelete( sout_instance_t *p_sout , sap_session_t * p_this )
...
@@ -288,45 +288,47 @@ void sout_SAPDelete( sout_instance_t *p_sout , sap_session_t * p_this )
*****************************************************************************/
*****************************************************************************/
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
psz_msg
[
1000
];
/* SDP content */
char
sap_msg
[
1000
];
/* SDP content */
char
*
psz_head
;
/* SAP header */
char
*
sap_send
;
/* What we send */
char
*
psz_send
;
/* What we send */
char
*
payload_type
=
"application/sdp"
;
char
*
psz_type
=
"application/sdp"
;
int
i_send_result
=
0
;
/* Result of send */
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 */
int
i_ret
=
0
;
/* 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
->
i_calls
++
<
24
)
{
{
i_header_size
=
9
+
strlen
(
payload_type
);
return
;
sap_head
=
(
char
*
)
malloc
(
i_header_size
*
sizeof
(
char
)
);
}
i_header_size
=
8
+
strlen
(
psz_type
)
+
1
;
psz_head
=
(
char
*
)
malloc
(
i_header_size
*
sizeof
(
char
)
);
if
(
!
sap
_head
)
if
(
!
psz
_head
)
{
{
msg_Warn
(
p_sout
,
"No memory left"
);
msg_Err
(
p_sout
,
"out of memory"
);
return
;
return
;
}
}
/* Create the SAP headers */
/* Create the SAP headers */
sap_head
[
0
]
=
0x20
;
/* Means IPv4, not encrypted, not compressed */
psz_head
[
0
]
=
0x20
;
/* Means IPv4, not encrypted, not compressed */
sap_head
[
1
]
=
0x00
;
/* No authentification */
psz_head
[
1
]
=
0x00
;
/* No authentification */
sap_head
[
2
]
=
0x42
;
/* Version */
psz_head
[
2
]
=
0x42
;
/* Version */
sap_head
[
3
]
=
0x12
;
/* Version */
psz_head
[
3
]
=
0x12
;
/* Version */
sap_head
[
4
]
=
0x01
;
/* Source IP FIXME: we should get the real address */
psz_head
[
4
]
=
0x01
;
/* Source IP FIXME: we should get the real address */
sap_head
[
5
]
=
0x02
;
/* idem */
psz_head
[
5
]
=
0x02
;
/* idem */
sap_head
[
6
]
=
0x03
;
/* idem */
psz_head
[
6
]
=
0x03
;
/* idem */
sap_head
[
7
]
=
0x04
;
/* idem */
psz_head
[
7
]
=
0x04
;
/* idem */
strncpy
(
sap_head
+
8
,
payload_type
,
15
);
strncpy
(
psz_head
+
8
,
psz_type
,
15
);
sap
_head
[
i_header_size
-
1
]
=
'\0'
;
psz
_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
(
psz
_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
"
...
@@ -334,53 +336,44 @@ void sout_SAPSend( sout_instance_t *p_sout, sap_session_t * p_this)
...
@@ -334,53 +336,44 @@ void sout_SAPSend( sout_instance_t *p_sout, sap_session_t * p_this)
"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
"
,
"a=type:test
\n
"
,
p_this
->
psz_name
,
p_this
->
psz_port
,
p_this
->
psz_url
);
p_this
->
psz_name
,
p_this
->
psz_port
,
p_this
->
psz_url
);
i_msg_size
=
strlen
(
sap
_msg
);
i_msg_size
=
strlen
(
psz
_msg
);
i_size
=
i_msg_size
+
i_header_size
;
i_size
=
i_msg_size
+
i_header_size
;
/* Create the message */
/* Create the message */
sap_send
=
(
char
*
)
malloc
(
i_size
*
sizeof
(
char
)
);
psz_send
=
(
char
*
)
malloc
(
i_size
*
sizeof
(
char
)
);
if
(
!
sap
_send
)
if
(
!
psz
_send
)
{
{
msg_Err
(
p_sout
,
"No memory left"
)
;
msg_Err
(
p_sout
,
"out of memory"
)
;
return
;
return
;
}
}
for
(
i
=
0
;
i
<
i_header_size
;
i
++
)
memcpy
(
psz_send
,
psz_head
,
i_header_size
);
{
memcpy
(
psz_send
+
i_header_size
,
psz_msg
,
i_msg_size
);
sap_send
[
i
]
=
sap_head
[
i
];
}
for
(
;
i
<
i_size
;
i
++
)
{
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_ret
=
send
(
p_this
->
i_socket
,
psz
_send
,
i_size
,
0
);
}
}
else
else
{
{
i_send_result
=
send
(
p_this
->
socket
,
sap
_send
,
i_size
,
0
);
i_ret
=
send
(
p_this
->
i_socket
,
psz
_send
,
i_size
,
0
);
}
}
}
}
if
(
i_send_result
==
-
1
)
if
(
i_ret
<=
0
)
{
{
msg_Warn
(
p_sout
,
"SAP send failed on socket %i"
,
p_this
->
socket
);
msg_Warn
(
p_sout
,
"SAP send failed on socket %i (%s)"
,
perror
(
"sendto"
);
p_this
->
i_socket
,
strerror
(
errno
)
);
}
}
p_this
->
sendnow
=
0
;
p_this
->
i_calls
=
0
;
/* Free what we allocated */
/* Free what we allocated */
if
(
sap_send
)
free
(
sap_send
);
free
(
psz_send
);
if
(
sap_head
)
free
(
sap_head
);
free
(
psz_head
);
}
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