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

Cleanup

parent 9ebe8e38
...@@ -313,7 +313,7 @@ CPPFLAGS_save="${CPPFLAGS_save} -DSYS_`echo ${SYS} | sed -e 's/-.*//' | tr 'abcd ...@@ -313,7 +313,7 @@ CPPFLAGS_save="${CPPFLAGS_save} -DSYS_`echo ${SYS} | sed -e 's/-.*//' | tr 'abcd
dnl Check for system libs needed dnl Check for system libs needed
need_libc=false need_libc=false
AC_CHECK_FUNCS(gettimeofday select strerror strtod strtol strtof strtoll strtoull strsep isatty vasprintf asprintf swab sigrelse getpwuid memalign posix_memalign gethostbyname2 if_nametoindex atoll getenv putenv setenv gmtime_r ctime_r localtime_r lrintf daemon) AC_CHECK_FUNCS(gettimeofday select strerror strtod strtol strtof strtoll strtoull strsep isatty vasprintf asprintf swab sigrelse getpwuid memalign posix_memalign if_nametoindex atoll getenv putenv setenv gmtime_r ctime_r localtime_r lrintf daemon)
dnl Check for usual libc functions dnl Check for usual libc functions
AC_CHECK_FUNCS(strdup strndup atof) AC_CHECK_FUNCS(strdup strndup atof)
......
...@@ -48,10 +48,6 @@ ...@@ -48,10 +48,6 @@
# include <netdb.h> /* hostent ... */ # include <netdb.h> /* hostent ... */
# include <sys/socket.h> # include <sys/socket.h>
# include <netinet/in.h> # include <netinet/in.h>
# include <net/if.h>
# ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h> /* inet_ntoa(), inet_aton() */
# endif
#endif #endif
#include "network.h" #include "network.h"
...@@ -59,25 +55,25 @@ ...@@ -59,25 +55,25 @@
#if defined(WIN32) #if defined(WIN32)
static const struct in6_addr in6addr_any = {{IN6ADDR_ANY_INIT}}; static const struct in6_addr in6addr_any = {{IN6ADDR_ANY_INIT}};
/* the following will have to be removed when w32api defines them */ /* the following will have to be removed when w32api defines them */
#ifndef IPPROTO_IPV6 # ifndef IPPROTO_IPV6
# define IPPROTO_IPV6 41 # define IPPROTO_IPV6 41
#endif # endif
#ifndef IPV6_JOIN_GROUP # ifndef IPV6_JOIN_GROUP
# define IPV6_JOIN_GROUP 12 # define IPV6_JOIN_GROUP 12
#endif # endif
#ifndef IPV6_MULTICAST_HOPS # ifndef IPV6_MULTICAST_HOPS
# define IPV6_MULTICAST_HOPS 10 # define IPV6_MULTICAST_HOPS 10
#endif # endif
#ifndef IPV6_UNICAST_HOPS # ifndef IPV6_UNICAST_HOPS
# define IPV6_UNICAST_HOPS 4 # define IPV6_UNICAST_HOPS 4
#endif # endif
# define close closesocket # define close closesocket
#endif #endif
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
static int NetOpen( vlc_object_t * ); static int OpenUDP( vlc_object_t * );
/***************************************************************************** /*****************************************************************************
* Module descriptor * Module descriptor
...@@ -85,145 +81,39 @@ static int NetOpen( vlc_object_t * ); ...@@ -85,145 +81,39 @@ static int NetOpen( vlc_object_t * );
vlc_module_begin(); vlc_module_begin();
set_description( _("IPv6 network abstraction layer") ); set_description( _("IPv6 network abstraction layer") );
set_capability( "network", 40 ); set_capability( "network", 40 );
set_callbacks( NetOpen, NULL ); set_callbacks( OpenUDP, NULL );
vlc_module_end(); vlc_module_end();
/***************************************************************************** /*****************************************************************************
* BuildAddr: utility function to build a struct sockaddr_in6 * BuildAddr: utility function to build a struct sockaddr_in6
*****************************************************************************/ *****************************************************************************/
static int BuildAddr( vlc_object_t * p_this, struct sockaddr_in6 * p_socket, static int BuildAddr( vlc_object_t *p_this, struct sockaddr_in6 *p_socket,
const char * psz_bind_address, int i_port ) const char *psz_address, int i_port )
{ {
char * psz_multicast_interface = "";
char * psz_backup = strdup(psz_bind_address);
char * psz_address = psz_backup;
#if defined(WIN32)
/* Try to get getaddrinfo() and freeaddrinfo() from wship6.dll */
typedef int (CALLBACK * GETADDRINFO) ( const char *nodename,
const char *servname,
const struct addrinfo *hints,
struct addrinfo **res );
typedef void (CALLBACK * FREEADDRINFO) ( struct addrinfo FAR *ai );
struct addrinfo hints, *res; struct addrinfo hints, *res;
GETADDRINFO _getaddrinfo = NULL; int i;
FREEADDRINFO _freeaddrinfo = NULL;
HINSTANCE wship6_dll = LoadLibrary("wship6.dll"); memset( &hints, 0, sizeof( hints ) );
if( wship6_dll ) hints.ai_family = PF_INET6;
{ hints.ai_socktype = SOCK_DGRAM;
_getaddrinfo = (GETADDRINFO) GetProcAddress( wship6_dll, hints.ai_flags = AI_PASSIVE;
"getaddrinfo" );
_freeaddrinfo = (FREEADDRINFO) GetProcAddress( wship6_dll,
"freeaddrinfo" );
}
if( !_getaddrinfo || !_freeaddrinfo )
{
msg_Warn( p_this, "no IPv6 stack installed" );
if( wship6_dll ) FreeLibrary( wship6_dll );
free( psz_backup );
return( -1 );
}
#endif
/* Reset struct */ i = vlc_getaddrinfo( p_this, psz_address, NULL, &hints, &res );
memset( p_socket, 0, sizeof( struct sockaddr_in6 ) ); if( i )
p_socket->sin6_family = AF_INET6; /* family */
p_socket->sin6_port = htons( i_port );
if( !*psz_address )
{ {
p_socket->sin6_addr = in6addr_any; msg_Dbg( p_this, "%s: %s", psz_address, vlc_gai_strerror( i ) );
return -1;
} }
else if( psz_address[0] == '[' if ( res->ai_addrlen > sizeof (struct sockaddr_in6) )
&& psz_address[strlen(psz_address) - 1] == ']' )
{ {
psz_address[strlen(psz_address) - 1] = '\0'; vlc_freeaddrinfo( res );
psz_address++; return -1;
/* see if there is an interface name in there... */
if( (psz_multicast_interface = strchr(psz_address, '%')) != NULL )
{
*psz_multicast_interface = '\0';
psz_multicast_interface++;
msg_Dbg( p_this, "Interface name specified: \"%s\"",
psz_multicast_interface );
/* now convert that interface name to an index */
#if defined( WIN32 )
/* FIXME ?? */
p_socket->sin6_scope_id = atol(psz_multicast_interface);
#elif defined( HAVE_IF_NAMETOINDEX )
p_socket->sin6_scope_id = if_nametoindex(psz_multicast_interface);
#endif
msg_Dbg( p_this, " = #%i", p_socket->sin6_scope_id );
}
#if !defined( WIN32 )
inet_pton(AF_INET6, psz_address, &p_socket->sin6_addr.s6_addr);
#else
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET6;
if( _getaddrinfo( psz_address, NULL, &hints, &res ) != 0 )
{
FreeLibrary( wship6_dll );
free( psz_backup );
return( -1 );
}
memcpy( &p_socket->sin6_addr,
&((struct sockaddr_in6 *)res->ai_addr)->sin6_addr,
sizeof(struct in6_addr) );
_freeaddrinfo( res );
#endif
}
else
{
#ifdef HAVE_GETHOSTBYNAME2
struct hostent * p_hostent;
/* We have a fqdn, try to find its address */
if ( (p_hostent = gethostbyname2( psz_address, AF_INET6 )) == NULL )
{
msg_Warn( p_this, "IPv6 error: unknown host %s", psz_address );
free( psz_backup );
return( -1 );
}
/* Copy the first address of the host in the socket address */
memcpy( &p_socket->sin6_addr, p_hostent->h_addr_list[0],
p_hostent->h_length );
#elif defined(WIN32)
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET6;
if( _getaddrinfo( psz_address, NULL, &hints, &res ) != 0 )
{
FreeLibrary( wship6_dll );
free( psz_backup );
return( -1 );
}
memcpy( &p_socket->sin6_addr,
&((struct sockaddr_in6 *)res->ai_addr)->sin6_addr,
sizeof(struct in6_addr) );
_freeaddrinfo( res );
#else
msg_Warn( p_this, "IPv6 error: IPv6 address %s is invalid",
psz_address );
free( psz_backup );
return( -1 );
#endif
} }
#if defined(WIN32) memcpy( p_socket, res->ai_addr, res->ai_addrlen );
FreeLibrary( wship6_dll ); vlc_freeaddrinfo( res );
#endif p_socket->sin6_port = htons( i_port );
free( psz_backup );
return 0; return 0;
} }
...@@ -240,13 +130,13 @@ static int BuildAddr( vlc_object_t * p_this, struct sockaddr_in6 * p_socket, ...@@ -240,13 +130,13 @@ static int BuildAddr( vlc_object_t * p_this, struct sockaddr_in6 * p_socket,
* Its use leads to great confusion and is currently discouraged. * Its use leads to great confusion and is currently discouraged.
* This function returns -1 in case of error. * This function returns -1 in case of error.
*****************************************************************************/ *****************************************************************************/
static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket ) static int OpenUDP( vlc_object_t * p_this )
{ {
char * psz_bind_addr = p_socket->psz_bind_addr; network_socket_t *p_socket = p_this->p_private;
const char *psz_bind_addr = p_socket->psz_bind_addr;
int i_bind_port = p_socket->i_bind_port; int i_bind_port = p_socket->i_bind_port;
char * psz_server_addr = p_socket->psz_server_addr; const char *psz_server_addr = p_socket->psz_server_addr;
int i_server_port = p_socket->i_server_port; int i_server_port = p_socket->i_server_port;
int i_handle, i_opt; int i_handle, i_opt;
socklen_t i_opt_size; socklen_t i_opt_size;
struct sockaddr_in6 sock; struct sockaddr_in6 sock;
...@@ -333,7 +223,8 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket ) ...@@ -333,7 +223,8 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket )
close( i_handle ); close( i_handle );
return( -1 ); return( -1 );
} }
} else }
else
#endif #endif
/* Bind it */ /* Bind it */
if( bind( i_handle, (struct sockaddr *)&sock, sizeof( sock ) ) < 0 ) if( bind( i_handle, (struct sockaddr *)&sock, sizeof( sock ) ) < 0 )
...@@ -439,15 +330,6 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket ) ...@@ -439,15 +330,6 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket )
var_Get( p_this, "mtu", &val ); var_Get( p_this, "mtu", &val );
p_socket->i_mtu = val.i_int; p_socket->i_mtu = val.i_int;
msg_Info( p_this, "ipv6 suceeded" );
return( 0 ); return( 0 );
} }
/*****************************************************************************
* NetOpen: wrapper around OpenUDP, ListenTCP and OpenTCP
*****************************************************************************/
static int NetOpen( vlc_object_t * p_this )
{
network_socket_t * p_socket = p_this->p_private;
return OpenUDP( p_this, p_socket );
}
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