From 754f46ab7de757d1dcca6eb22789c80625ec0e5e Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Thu, 5 Aug 1999 17:29:07 +0000 Subject: [PATCH] added ipAddrToHostName --- src/libCom/os/generic/bsdSockResource.c | 44 +++++------------- src/libCom/os/vxWorks/bsdSockResource.c | 60 +++++++++++++++++++++---- 2 files changed, 61 insertions(+), 43 deletions(-) diff --git a/src/libCom/os/generic/bsdSockResource.c b/src/libCom/os/generic/bsdSockResource.c index ce2280ce4..e0b988a55 100644 --- a/src/libCom/os/generic/bsdSockResource.c +++ b/src/libCom/os/generic/bsdSockResource.c @@ -55,48 +55,24 @@ void bsdSockRelease() } /* - * ipAddrToA() - * (convert IP address to ASCII host name) + * ipAddrToHostName */ -void epicsShareAPI ipAddrToA - (const struct sockaddr_in *paddr, char *pBuf, unsigned bufSize) +epicsShareFunc unsigned epicsShareAPI ipAddrToHostName + (const struct in_addr *pAddr, char *pBuf, unsigned bufSize) { - char *pString; struct hostent *ent; -# define maxPortDigits 5u if (bufSize<1) { - return; + return 0; } - if (paddr->sin_family!=AF_INET) { - strncpy(pBuf, "", bufSize-1); - /* - * force null termination - */ - pBuf[bufSize-1] = '\0'; - } - else { - ent = gethostbyaddr((char *) &paddr->sin_addr, - sizeof(paddr->sin_addr), AF_INET); - if(ent){ - pString = ent->h_name; - } - else{ - pString = inet_ntoa (paddr->sin_addr); - } - - /* - * allow space for the port number - */ - if (bufSize>maxPortDigits+strlen(pString)) { - sprintf (pBuf, "%.*s:%hu", (int) (bufSize-maxPortDigits-1), - pString, ntohs(paddr->sin_port)); - } - else { - sprintf (pBuf, "%.*s", (int) (bufSize-1), pString); - } + ent = gethostbyaddr((char *) pAddr, sizeof (*pAddr), AF_INET); + if (ent) { + strncpy (pBuf, ent->h_name, bufSize); + pBuf[bufSize-1] = '\0'; + return strlen (pBuf); } + return 0; } /* diff --git a/src/libCom/os/vxWorks/bsdSockResource.c b/src/libCom/os/vxWorks/bsdSockResource.c index ad958f112..82c660a1c 100644 --- a/src/libCom/os/vxWorks/bsdSockResource.c +++ b/src/libCom/os/vxWorks/bsdSockResource.c @@ -21,13 +21,54 @@ void bsdSockRelease() { } +/* + * ipAddrToHostName + */ +epicsShareFunc unsigned epicsShareAPI ipAddrToHostName + (const struct in_addr *pAddr, char *pBuf, unsigned bufSize) +{ + int status; + int errnoCopy = errno; + unsigned len; + + if (bufSize<1) { + return 0; + } + + if (bufSize>MAXHOSTNAMELEN) { + status = hostGetByAddr ((int)pAddr->s_addr, pBuf); + if (status==OK) { + pBuf[MAXHOSTNAMELEN] = '\0'; + len = strlen (pBuf); + } + else { + len = 0; + } + } + else { + char name[MAXHOSTNAMELEN+1]; + status = hostGetByAddr (pAddr->s_addr, name); + if (status==OK) { + strncpy (pBuf, name, bufSize); + pBuf[bufSize-1] = '\0'; + len = strlen (pBuf); + } + else { + len = 0; + } + } + + errno = errnoCopy; + + return len; +} /* - * ipAddrToA() - * (convert IP address to ASCII host name) + * sockAddrToA() + * (convert socket address to ASCII host name) */ -void epicsShareAPI ipAddrToA - (const struct sockaddr_in *paddr, char *pBuf, unsigned bufSize) +void epicsShareAPI sockAddrToA + (const struct sockaddr *paddr, char *pBuf, unsigned bufSize) { const int maxPortDigits = 5u; char name[max(INET_ADDR_LEN,MAXHOSTNAMELEN)+1]; @@ -38,7 +79,7 @@ void epicsShareAPI ipAddrToA return; } - if (paddr->sin_family!=AF_INET) { + if (paddr->sa_family!=AF_INET) { strncpy(pBuf, "", bufSize-1); /* * force null termination @@ -46,9 +87,10 @@ void epicsShareAPI ipAddrToA pBuf[bufSize-1] = '\0'; } else { - status = hostGetByAddr ((int)paddr->sin_addr.s_addr, name); + struct sockaddr_in *paddr_in = (struct sockaddr_in *) paddr; + status = hostGetByAddr ((int)paddr_in->sin_addr.s_addr, name); if (status!=OK) { - inet_ntoa_b (paddr->sin_addr, name); + inet_ntoa_b (paddr_in->sin_addr, name); } /* @@ -56,7 +98,7 @@ void epicsShareAPI ipAddrToA */ if (bufSize>maxPortDigits+strlen(name)) { sprintf (pBuf, "%.*s:%u", ((int)bufSize)-maxPortDigits-1, - name, ntohs(paddr->sin_port)); + name, ntohs(paddr_in->sin_port)); } else { sprintf (pBuf, "%.*s", ((int)bufSize)-1, name); @@ -88,4 +130,4 @@ epicsShareFunc int epicsShareAPI hostToIPAddr * success */ return 0; -} \ No newline at end of file +}