forked from enlightenment/efl
Ecore-con: Test for IPV6 availability
SVN revision: 63680
This commit is contained in:
parent
ed03a201ef
commit
1fc4a13f80
|
@ -1303,6 +1303,22 @@ have_openssl="no"
|
||||||
have_cares="no"
|
have_cares="no"
|
||||||
if test "x${have_ecore_con}" = "xyes" ; then
|
if test "x${have_ecore_con}" = "xyes" ; then
|
||||||
|
|
||||||
|
# Verify IPV6 availability in headers
|
||||||
|
have_ipv6="no"
|
||||||
|
AC_CHECK_TYPES([struct ipv6_mreq], [have_ipv6="yes"], [have_ipv6="no"],
|
||||||
|
[[
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
# include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
]])
|
||||||
|
|
||||||
|
if test "x${have_ipv6}" = "xyes" ; then
|
||||||
|
AC_DEFINE(HAVE_IPV6, 1, [Define if IPV6 is supported])
|
||||||
|
fi
|
||||||
|
|
||||||
ECORE_CHECK_CURL([${want_curl}],
|
ECORE_CHECK_CURL([${want_curl}],
|
||||||
[
|
[
|
||||||
have_curl="yes"
|
have_curl="yes"
|
||||||
|
|
|
@ -869,7 +869,11 @@ ecore_con_client_port_get(Ecore_Con_Client *cl)
|
||||||
}
|
}
|
||||||
if (cl->client_addr->sa_family == AF_INET)
|
if (cl->client_addr->sa_family == AF_INET)
|
||||||
return ((struct sockaddr_in*)cl->client_addr)->sin_port;
|
return ((struct sockaddr_in*)cl->client_addr)->sin_port;
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
return ((struct sockaddr_in6*)cl->client_addr)->sin6_port;
|
return ((struct sockaddr_in6*)cl->client_addr)->sin6_port;
|
||||||
|
#else
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI double
|
EAPI double
|
||||||
|
@ -1440,7 +1444,9 @@ _ecore_con_cb_udp_listen(void *data,
|
||||||
Ecore_Con_Server *svr;
|
Ecore_Con_Server *svr;
|
||||||
Ecore_Con_Type type;
|
Ecore_Con_Type type;
|
||||||
struct ip_mreq mreq;
|
struct ip_mreq mreq;
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
struct ipv6_mreq mreq6;
|
struct ipv6_mreq mreq6;
|
||||||
|
#endif
|
||||||
const int on = 1;
|
const int on = 1;
|
||||||
|
|
||||||
svr = data;
|
svr = data;
|
||||||
|
@ -1477,6 +1483,7 @@ _ecore_con_cb_udp_listen(void *data,
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
else if (net_info->info.ai_family == AF_INET6)
|
else if (net_info->info.ai_family == AF_INET6)
|
||||||
{
|
{
|
||||||
if (!inet_pton(net_info->info.ai_family, net_info->ip,
|
if (!inet_pton(net_info->info.ai_family, net_info->ip,
|
||||||
|
@ -1493,6 +1500,7 @@ _ecore_con_cb_udp_listen(void *data,
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setsockopt(svr->fd, SOL_SOCKET, SO_REUSEADDR, (const void *)&on, sizeof(on)) != 0)
|
if (setsockopt(svr->fd, SOL_SOCKET, SO_REUSEADDR, (const void *)&on, sizeof(on)) != 0)
|
||||||
|
@ -1765,6 +1773,9 @@ static const char *
|
||||||
_ecore_con_pretty_ip(struct sockaddr *client_addr,
|
_ecore_con_pretty_ip(struct sockaddr *client_addr,
|
||||||
socklen_t size)
|
socklen_t size)
|
||||||
{
|
{
|
||||||
|
#ifndef HAVE_IPV6
|
||||||
|
char ipbuf[INET_ADDRSTRLEN + 1];
|
||||||
|
#else
|
||||||
char ipbuf[INET6_ADDRSTRLEN + 1];
|
char ipbuf[INET6_ADDRSTRLEN + 1];
|
||||||
|
|
||||||
/* show v4mapped address in pretty form */
|
/* show v4mapped address in pretty form */
|
||||||
|
@ -1783,6 +1794,7 @@ _ecore_con_pretty_ip(struct sockaddr *client_addr,
|
||||||
return eina_stringshare_add(ipbuf);
|
return eina_stringshare_add(ipbuf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (getnameinfo(client_addr, size, ipbuf, sizeof (ipbuf), NULL, 0, NI_NUMERICHOST))
|
if (getnameinfo(client_addr, size, ipbuf, sizeof (ipbuf), NULL, 0, NI_NUMERICHOST))
|
||||||
return eina_stringshare_add("0.0.0.0");
|
return eina_stringshare_add("0.0.0.0");
|
||||||
|
|
|
@ -41,7 +41,9 @@ struct _Ecore_Con_CAres
|
||||||
|
|
||||||
union {
|
union {
|
||||||
struct in_addr v4;
|
struct in_addr v4;
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
struct in6_addr v6;
|
struct in6_addr v6;
|
||||||
|
#endif
|
||||||
} addr;
|
} addr;
|
||||||
|
|
||||||
Eina_Bool byaddr : 1;
|
Eina_Bool byaddr : 1;
|
||||||
|
@ -124,7 +126,11 @@ ecore_con_info_tcp_connect(Ecore_Con_Server *svr,
|
||||||
struct addrinfo hints;
|
struct addrinfo hints;
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(struct addrinfo));
|
memset(&hints, 0, sizeof(struct addrinfo));
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
hints.ai_family = AF_INET6;
|
hints.ai_family = AF_INET6;
|
||||||
|
#else
|
||||||
|
hints.ai_family = AF_INET;
|
||||||
|
#endif
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
hints.ai_flags = AI_CANONNAME;
|
hints.ai_flags = AI_CANONNAME;
|
||||||
hints.ai_protocol = IPPROTO_TCP;
|
hints.ai_protocol = IPPROTO_TCP;
|
||||||
|
@ -143,7 +149,11 @@ ecore_con_info_tcp_listen(Ecore_Con_Server *svr,
|
||||||
struct addrinfo hints;
|
struct addrinfo hints;
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(struct addrinfo));
|
memset(&hints, 0, sizeof(struct addrinfo));
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
hints.ai_family = AF_INET6;
|
hints.ai_family = AF_INET6;
|
||||||
|
#else
|
||||||
|
hints.ai_family = AF_INET;
|
||||||
|
#endif
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
hints.ai_flags = AI_PASSIVE;
|
hints.ai_flags = AI_PASSIVE;
|
||||||
hints.ai_protocol = IPPROTO_TCP;
|
hints.ai_protocol = IPPROTO_TCP;
|
||||||
|
@ -162,7 +172,11 @@ ecore_con_info_udp_connect(Ecore_Con_Server *svr,
|
||||||
struct addrinfo hints;
|
struct addrinfo hints;
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(struct addrinfo));
|
memset(&hints, 0, sizeof(struct addrinfo));
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
hints.ai_family = AF_INET6;
|
hints.ai_family = AF_INET6;
|
||||||
|
#else
|
||||||
|
hints.ai_family = AF_INET;
|
||||||
|
#endif
|
||||||
hints.ai_socktype = SOCK_DGRAM;
|
hints.ai_socktype = SOCK_DGRAM;
|
||||||
hints.ai_flags = AI_CANONNAME;
|
hints.ai_flags = AI_CANONNAME;
|
||||||
hints.ai_protocol = IPPROTO_UDP;
|
hints.ai_protocol = IPPROTO_UDP;
|
||||||
|
@ -181,7 +195,11 @@ ecore_con_info_udp_listen(Ecore_Con_Server *svr,
|
||||||
struct addrinfo hints;
|
struct addrinfo hints;
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(struct addrinfo));
|
memset(&hints, 0, sizeof(struct addrinfo));
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
hints.ai_family = AF_INET6;
|
hints.ai_family = AF_INET6;
|
||||||
|
#else
|
||||||
|
hints.ai_family = AF_INET;
|
||||||
|
#endif
|
||||||
hints.ai_socktype = SOCK_DGRAM;
|
hints.ai_socktype = SOCK_DGRAM;
|
||||||
hints.ai_flags = AI_PASSIVE;
|
hints.ai_flags = AI_PASSIVE;
|
||||||
hints.ai_protocol = IPPROTO_UDP;
|
hints.ai_protocol = IPPROTO_UDP;
|
||||||
|
@ -200,7 +218,11 @@ ecore_con_info_mcast_listen(Ecore_Con_Server *svr,
|
||||||
struct addrinfo hints;
|
struct addrinfo hints;
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(struct addrinfo));
|
memset(&hints, 0, sizeof(struct addrinfo));
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
hints.ai_family = AF_INET6;
|
hints.ai_family = AF_INET6;
|
||||||
|
#else
|
||||||
|
hints.ai_family = AF_INET;
|
||||||
|
#endif
|
||||||
hints.ai_socktype = SOCK_DGRAM;
|
hints.ai_socktype = SOCK_DGRAM;
|
||||||
hints.ai_flags = 0;
|
hints.ai_flags = 0;
|
||||||
hints.ai_protocol = IPPROTO_UDP;
|
hints.ai_protocol = IPPROTO_UDP;
|
||||||
|
@ -262,7 +284,11 @@ ecore_con_info_get(Ecore_Con_Server *svr,
|
||||||
struct addrinfo *hints)
|
struct addrinfo *hints)
|
||||||
{
|
{
|
||||||
Ecore_Con_CAres *cares;
|
Ecore_Con_CAres *cares;
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
int ai_family = AF_INET6;
|
int ai_family = AF_INET6;
|
||||||
|
#else
|
||||||
|
int ai_family = AF_INET;
|
||||||
|
#endif
|
||||||
|
|
||||||
cares = calloc(1, sizeof(Ecore_Con_CAres));
|
cares = calloc(1, sizeof(Ecore_Con_CAres));
|
||||||
if (!cares)
|
if (!cares)
|
||||||
|
@ -288,6 +314,7 @@ ecore_con_info_get(Ecore_Con_Server *svr,
|
||||||
(ares_host_callback)_ecore_con_info_ares_host_cb,
|
(ares_host_callback)_ecore_con_info_ares_host_cb,
|
||||||
cares);
|
cares);
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
else if (inet_pton(AF_INET6, svr->name, &cares->addr.v6) == 1)
|
else if (inet_pton(AF_INET6, svr->name, &cares->addr.v6) == 1)
|
||||||
{
|
{
|
||||||
cares->byaddr = EINA_TRUE;
|
cares->byaddr = EINA_TRUE;
|
||||||
|
@ -298,6 +325,7 @@ ecore_con_info_get(Ecore_Con_Server *svr,
|
||||||
(ares_host_callback)_ecore_con_info_ares_host_cb,
|
(ares_host_callback)_ecore_con_info_ares_host_cb,
|
||||||
cares);
|
cares);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cares->byaddr = EINA_FALSE;
|
cares->byaddr = EINA_FALSE;
|
||||||
|
@ -432,7 +460,7 @@ _ecore_con_info_ares_host_cb(Ecore_Con_CAres *arg,
|
||||||
addr = (struct sockaddr *)addri;
|
addr = (struct sockaddr *)addri;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
{
|
{
|
||||||
struct sockaddr_in6 *addri6;
|
struct sockaddr_in6 *addri6;
|
||||||
|
@ -454,7 +482,7 @@ _ecore_con_info_ares_host_cb(Ecore_Con_CAres *arg,
|
||||||
addr = (struct sockaddr *)addri6;
|
addr = (struct sockaddr *)addri6;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
ERR("Unknown addrtype %i", hostent->h_addrtype);
|
ERR("Unknown addrtype %i", hostent->h_addrtype);
|
||||||
goto on_error;
|
goto on_error;
|
||||||
|
@ -470,6 +498,7 @@ _ecore_con_info_ares_host_cb(Ecore_Con_CAres *arg,
|
||||||
case ARES_ENOTFOUND: /* address notfound */
|
case ARES_ENOTFOUND: /* address notfound */
|
||||||
if (arg->byaddr)
|
if (arg->byaddr)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
/* This happen when host doesn't have a reverse. */
|
/* This happen when host doesn't have a reverse. */
|
||||||
if (arg->isv6)
|
if (arg->isv6)
|
||||||
{
|
{
|
||||||
|
@ -492,6 +521,7 @@ _ecore_con_info_ares_host_cb(Ecore_Con_CAres *arg,
|
||||||
addr = (struct sockaddr *)addri6;
|
addr = (struct sockaddr *)addri6;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
struct sockaddr_in *addri;
|
struct sockaddr_in *addri;
|
||||||
|
|
||||||
|
@ -511,8 +541,11 @@ _ecore_con_info_ares_host_cb(Ecore_Con_CAres *arg,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_ecore_con_info_ares_getnameinfo(arg,
|
if (!_ecore_con_info_ares_getnameinfo(arg,
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
arg->isv6 ? AF_INET6 :
|
arg->isv6 ? AF_INET6 :
|
||||||
|
#else
|
||||||
AF_INET,
|
AF_INET,
|
||||||
|
#endif
|
||||||
NULL, addr,
|
NULL, addr,
|
||||||
addrlen))
|
addrlen))
|
||||||
goto on_error;
|
goto on_error;
|
||||||
|
|
Loading…
Reference in New Issue