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_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=""
|
||||
AC_MSG_CHECKING([for pthread_kill_other_threads_np declaration])
|
||||
AC_LANG_SAVE
|
||||
|
|
|
@ -88,7 +88,7 @@ DataFormat.o: @srcdir@/DataFormat.cpp $(MKDEPS) $(PINC)
|
|||
$(COMPILE) -c $<
|
||||
|
||||
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)
|
||||
$(COMPILE) @MUTEX_HACK@ -c $<
|
||||
|
|
|
@ -218,6 +218,15 @@ bool SocketAddr::host(const String& name)
|
|||
{
|
||||
in_addr_t a = inet_addr(name);
|
||||
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)) {
|
||||
struct hostent* he = gethostbyname(name);
|
||||
if (he && (he->h_addrtype == AF_INET))
|
||||
|
@ -226,6 +235,7 @@ bool SocketAddr::host(const String& name)
|
|||
}
|
||||
else
|
||||
Debug(DebugGoOn,"Resolver was busy, failing '%s'",name.c_str());
|
||||
#endif // HAVE_GHBN_R
|
||||
}
|
||||
if (a != INADDR_NONE) {
|
||||
((struct sockaddr_in*)m_address)->sin_addr.s_addr = a;
|
||||
|
@ -235,8 +245,16 @@ bool SocketAddr::host(const String& name)
|
|||
}
|
||||
break;
|
||||
#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
|
||||
// TODO: implement AF_INET6 resolving
|
||||
break;
|
||||
#endif // AF_INET6
|
||||
#ifdef HAS_AF_UNIX
|
||||
case AF_UNIX:
|
||||
if (name.length() >= (UNIX_PATH_MAX-1))
|
||||
|
@ -253,13 +271,31 @@ void SocketAddr::stringify()
|
|||
{
|
||||
switch (family()) {
|
||||
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();
|
||||
m_host = inet_ntoa(((struct sockaddr_in*)m_address)->sin_addr);
|
||||
s_mutex.unlock();
|
||||
#endif
|
||||
break;
|
||||
#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
|
||||
break;
|
||||
#endif // AF_INET6
|
||||
#ifdef HAS_AF_UNIX
|
||||
case AF_UNIX:
|
||||
m_host = ((struct sockaddr_un*)m_address)->sun_path;
|
||||
|
|
Loading…
Reference in New Issue