Use inet_ntop, inet_pton and gethostbyname_r if available on system.
git-svn-id: http://voip.null.ro/svn/yate@2859 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
parent
748e8b3ae6
commit
5eeab258d3
|
@ -197,6 +197,12 @@ LIBS="$SAVE_LIBS"
|
||||||
AC_LANG_RESTORE
|
AC_LANG_RESTORE
|
||||||
AC_SUBST(MUTEX_HACK)
|
AC_SUBST(MUTEX_HACK)
|
||||||
|
|
||||||
|
NETDB_FLAGS=""
|
||||||
|
AC_CHECK_FUNC([inet_ntop],[NETDB_FLAGS="$NETDB_FLAGS -DHAVE_NTOP"])
|
||||||
|
AC_CHECK_FUNC([inet_pton],[NETDB_FLAGS="$NETDB_FLAGS -DHAVE_PTON"])
|
||||||
|
AC_CHECK_FUNC([gethostbyname_r],[NETDB_FLAGS="$NETDB_FLAGS -DHAVE_GHBN_R"])
|
||||||
|
AC_SUBST(NETDB_FLAGS)
|
||||||
|
|
||||||
THREAD_KILL=""
|
THREAD_KILL=""
|
||||||
AC_MSG_CHECKING([for pthread_kill_other_threads_np declaration])
|
AC_MSG_CHECKING([for pthread_kill_other_threads_np declaration])
|
||||||
AC_LANG_SAVE
|
AC_LANG_SAVE
|
||||||
|
|
|
@ -88,7 +88,7 @@ DataFormat.o: @srcdir@/DataFormat.cpp $(MKDEPS) $(PINC)
|
||||||
$(COMPILE) -c $<
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
Socket.o: @srcdir@/Socket.cpp $(MKDEPS) $(CINC)
|
Socket.o: @srcdir@/Socket.cpp $(MKDEPS) $(CINC)
|
||||||
$(COMPILE) @FDSIZE_HACK@ @SCTP_FLAGS@ -c $<
|
$(COMPILE) @FDSIZE_HACK@ @NETDB_FLAGS@ @SCTP_FLAGS@ -c $<
|
||||||
|
|
||||||
Mutex.o: @srcdir@/Mutex.cpp $(MKDEPS) $(CINC)
|
Mutex.o: @srcdir@/Mutex.cpp $(MKDEPS) $(CINC)
|
||||||
$(COMPILE) @MUTEX_HACK@ -c $<
|
$(COMPILE) @MUTEX_HACK@ -c $<
|
||||||
|
|
|
@ -218,6 +218,15 @@ bool SocketAddr::host(const String& name)
|
||||||
{
|
{
|
||||||
in_addr_t a = inet_addr(name);
|
in_addr_t a = inet_addr(name);
|
||||||
if (a == INADDR_NONE) {
|
if (a == INADDR_NONE) {
|
||||||
|
#ifdef HAVE_GHBN_R
|
||||||
|
char buf[256];
|
||||||
|
struct hostent h;
|
||||||
|
struct hostent* he = 0;
|
||||||
|
int errn = 0;
|
||||||
|
if ((!gethostbyname_r(name,&h,buf,sizeof(buf),&he,&errn)) &&
|
||||||
|
he && (he->h_addrtype == AF_INET))
|
||||||
|
a = *((in_addr_t*)(he->h_addr_list[0]));
|
||||||
|
#else
|
||||||
if (s_mutex.lock(MAX_RESWAIT)) {
|
if (s_mutex.lock(MAX_RESWAIT)) {
|
||||||
struct hostent* he = gethostbyname(name);
|
struct hostent* he = gethostbyname(name);
|
||||||
if (he && (he->h_addrtype == AF_INET))
|
if (he && (he->h_addrtype == AF_INET))
|
||||||
|
@ -226,6 +235,7 @@ bool SocketAddr::host(const String& name)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Debug(DebugGoOn,"Resolver was busy, failing '%s'",name.c_str());
|
Debug(DebugGoOn,"Resolver was busy, failing '%s'",name.c_str());
|
||||||
|
#endif // HAVE_GHBN_R
|
||||||
}
|
}
|
||||||
if (a != INADDR_NONE) {
|
if (a != INADDR_NONE) {
|
||||||
((struct sockaddr_in*)m_address)->sin_addr.s_addr = a;
|
((struct sockaddr_in*)m_address)->sin_addr.s_addr = a;
|
||||||
|
@ -235,8 +245,16 @@ bool SocketAddr::host(const String& name)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#ifdef AF_INET6
|
#ifdef AF_INET6
|
||||||
// TODO: implement AF_INET6
|
case AF_INET6:
|
||||||
|
#ifdef HAVE_PTON
|
||||||
|
if (inet_pton(family(),name,&((struct sockaddr_in6*)m_address)->sin6_addr) > 0) {
|
||||||
|
stringify();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
// TODO: implement AF_INET6 resolving
|
||||||
|
break;
|
||||||
|
#endif // AF_INET6
|
||||||
#ifdef HAS_AF_UNIX
|
#ifdef HAS_AF_UNIX
|
||||||
case AF_UNIX:
|
case AF_UNIX:
|
||||||
if (name.length() >= (UNIX_PATH_MAX-1))
|
if (name.length() >= (UNIX_PATH_MAX-1))
|
||||||
|
@ -253,13 +271,31 @@ void SocketAddr::stringify()
|
||||||
{
|
{
|
||||||
switch (family()) {
|
switch (family()) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
|
#ifdef HAVE_NTOP
|
||||||
|
{
|
||||||
|
char buf[16];
|
||||||
|
buf[0] = '\0';
|
||||||
|
m_host = inet_ntop(family(),&((struct sockaddr_in*)m_address)->sin_addr,
|
||||||
|
buf,sizeof(buf));
|
||||||
|
}
|
||||||
|
#else
|
||||||
s_mutex.lock();
|
s_mutex.lock();
|
||||||
m_host = inet_ntoa(((struct sockaddr_in*)m_address)->sin_addr);
|
m_host = inet_ntoa(((struct sockaddr_in*)m_address)->sin_addr);
|
||||||
s_mutex.unlock();
|
s_mutex.unlock();
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
#ifdef AF_INET6
|
#ifdef AF_INET6
|
||||||
// TODO: implement AF_INET6
|
case AF_INET6:
|
||||||
|
#ifdef HAVE_NTOP
|
||||||
|
{
|
||||||
|
char buf[48];
|
||||||
|
buf[0] = '\0';
|
||||||
|
m_host = inet_ntop(family(),&((struct sockaddr_in6*)m_address)->sin6_addr,
|
||||||
|
buf,sizeof(buf));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
break;
|
||||||
|
#endif // AF_INET6
|
||||||
#ifdef HAS_AF_UNIX
|
#ifdef HAS_AF_UNIX
|
||||||
case AF_UNIX:
|
case AF_UNIX:
|
||||||
m_host = ((struct sockaddr_un*)m_address)->sun_path;
|
m_host = ((struct sockaddr_un*)m_address)->sun_path;
|
||||||
|
|
Loading…
Reference in New Issue