Commit 541441bf authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

- Fix segfault when doing RTSP DESCRIBE (trunk-only bug from [11811])

- cleanup net_AddressIsMulticast
parent ea314b58
...@@ -469,41 +469,32 @@ static inline vlc_bool_t net_AddressIsMulticast( vlc_object_t *p_object, char *p ...@@ -469,41 +469,32 @@ static inline vlc_bool_t net_AddressIsMulticast( vlc_object_t *p_object, char *p
vlc_bool_t b_multicast = VLC_FALSE; vlc_bool_t b_multicast = VLC_FALSE;
int i; int i;
if( psz_addr == NULL )
{
msg_Err( p_object, "*FIXME* Unexpected NULL URI for net_AddressIsMulticast" );
msg_Err( p_object, "This should not happen. VLC needs fixing." );
return VLC_FALSE;
}
memset( &hints, 0, sizeof( hints ) ); memset( &hints, 0, sizeof( hints ) );
hints.ai_socktype = SOCK_DGRAM; /* UDP */ hints.ai_socktype = SOCK_DGRAM; /* UDP */
hints.ai_flags = AI_NUMERICHOST; hints.ai_flags = AI_NUMERICHOST;
i = vlc_getaddrinfo( p_object, psz_addr, 0, i = vlc_getaddrinfo( p_object, psz_addr, 0,
&hints, &res ); &hints, &res );
/*if( i == 0 )
i = vlc_getnameinfo( res->ai_addr, res->ai_addrlen, psz_buf,
sizeof( psz_buf ), NULL, NI_NUMERICHOST );*/
if( i ) if( i )
{ {
msg_Err( p_object, "Invalid node for net_AddressIsMulticast: %s : %s", msg_Err( p_object, "Invalid node for net_AddressIsMulticast: %s : %s",
psz_addr, vlc_gai_strerror( i ) ); psz_addr, vlc_gai_strerror( i ) );
return b_multicast; return VLC_FALSE;
} }
if( res->ai_family == AF_INET ) if( res->ai_family == AF_INET )
{ {
#if !defined( SYS_BEOS ) #if !defined( SYS_BEOS )
struct sockaddr_in *v4 = (struct sockaddr_in *) res->ai_addr; struct sockaddr_in *v4 = (struct sockaddr_in *) res->ai_addr;
b_multicast = ( ntohl( v4->sin_addr.s_addr ) >= 0xe0000000 && ntohl( v4->sin_addr.s_addr ) <= 0xefffffff ); b_multicast = ( ntohl( v4->sin_addr.s_addr ) >= 0xe0000000 )
&& ( ntohl( v4->sin_addr.s_addr ) <= 0xefffffff );
#endif #endif
} }
else if( res->ai_family == AF_INET6 ) else if( res->ai_family == AF_INET6 )
{ {
#if defined( WIN32 ) || defined( HAVE_IF_NAMETOINDEX ) #if defined( WIN32 ) || defined( HAVE_GETADDRINFO )
struct sockaddr_in6 *v6 = (struct sockaddr_in6 *) res->ai_addr; struct sockaddr_in6 *v6 = (struct sockaddr_in6 *)res->ai_addr;
b_multicast = IN6_IS_ADDR_MULTICAST( &v6->sin6_addr); b_multicast = IN6_IS_ADDR_MULTICAST( &v6->sin6_addr );
#endif #endif
} }
......
...@@ -1018,10 +1018,11 @@ static char *SDPGenerate( vod_media_t *p_media, char *psz_destination ) ...@@ -1018,10 +1018,11 @@ static char *SDPGenerate( vod_media_t *p_media, char *psz_destination )
p += sprintf( p, "c=IN IP4 %s", psz_destination ? psz_destination : "0.0.0.0" ); p += sprintf( p, "c=IN IP4 %s", psz_destination ? psz_destination : "0.0.0.0" );
if( net_AddressIsMulticast( p_media, psz_destination ? psz_destination : "0.0.0.0" ) ) if( ( psz_destination != NULL )
&& net_AddressIsMulticast( p_media->p_vod, psz_destination ) )
{ {
/* Add the ttl if it is a multicast address */ /* Add the ttl if it is a multicast address */
p += sprintf( p, "/%d\r\n", p_media->i_ttl ); p += sprintf( p, "/%d\r\n", p_media->i_ttl );
} }
else else
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment