74 static const char lbVal[13] ={0,0,0,0,0,0,0,0,0,0,0,0,0x7f};
83 const char *pFmt =
"]:%d";
84 int totLen, n, pNum, addBrak = 0;
91 if (
IP.Addr.sa_family == AF_UNIX)
92 {n = (omitP ? snprintf(bAddr, bLen,
"localhost")
93 : snprintf(bAddr, bLen,
"localhost:%s", unixPipe->sun_path));
94 return (n < bLen ? n :
QFill(bAddr, bLen));
100 pNum = ntohs(
IP.v4.sin_port);
108 {n = (omitP ? snprintf(bAddr, bLen,
"%s",
hostName)
109 : snprintf(bAddr, bLen,
"%s:%d",
hostName, pNum));
110 return (n < bLen ? n :
QFill(bAddr, bLen));
121 {n = (omitP ? snprintf(bAddr, bLen,
"%s",
hostName)
122 : snprintf(bAddr, bLen,
"%s:%d",
hostName, pNum));
123 return (n < bLen ? n :
QFill(bAddr, bLen));
128 if (
IP.Addr.sa_family == AF_INET6)
129 {
if (bLen < (INET6_ADDRSTRLEN+2))
return QFill(bAddr, bLen);
130 if (ipOld && IN6_IS_ADDR_V4MAPPED(&
IP.v6.sin6_addr))
131 {
if (fmtOpts &
prefipv4) {n = 0; pFmt =
":%d";}
132 else if (ipRaw) {strcpy(bAddr,
"::"); n = 2;}
133 else {strcpy(bAddr,
"[::"); n = 3; addBrak=1;}
134 if (!inet_ntop(AF_INET, &
IP.v6.sin6_addr.s6_addr32[3],
135 bAddr+n, bLen-n))
return QFill(bAddr, bLen);
137 if (!ipRaw) {*bAddr =
'['; n = 1; addBrak = 1;}
139 if (!inet_ntop(AF_INET6,&(
IP.v6.sin6_addr),bAddr+n,bLen-n))
140 return QFill(bAddr, bLen);
143 else if (
IP.Addr.sa_family == AF_INET)
144 {
if (theFmt !=
fmtAdv6) {n = 0; pFmt =
":%d";}
145 else {
if (bLen < (INET_ADDRSTRLEN+9))
return QFill(bAddr, bLen);
146 if (fmtOpts &
old6Map4) {strcpy(bAddr,
"[::"); n = 3;}
147 else {strcpy(bAddr,
"[::ffff:"); n = 8;}
148 if (ipRaw) {strcpy(bAddr, bAddr+1); n--;}
151 if (!inet_ntop(AF_INET, &(
IP.v4.sin_addr),bAddr+n,bLen-n))
152 return QFill(bAddr, bLen);
154 else return QFill(bAddr, bLen);
158 totLen = strlen(bAddr); bAddr += totLen; bLen -= totLen;
164 {
if (bLen < 2)
return QFill(bAddr, bLen);
165 *bAddr++ =
']'; *bAddr = 0; totLen++;
172 if ((n = snprintf(bAddr, bLen, pFmt, pNum)) >= bLen)
173 return QFill(bAddr, bLen);
186 if (
IP.Addr.sa_family == AF_INET)
187 return !memcmp(&
IP.v4.sin_addr.s_addr, &lbVal[12], 1);
189 if (
IP.Addr.sa_family == AF_INET6)
190 return !memcmp(&
IP.v6.sin6_addr, &in6addr_loopback,
sizeof(in6_addr))
191 || !memcmp(&
IP.v6.sin6_addr, lbVal,
sizeof(lbVal));
202 unsigned char *ipV4 = 0;
206 if (
IP.Addr.sa_family == AF_INET6)
207 {
if ((IN6_IS_ADDR_V4MAPPED(&
IP.v6.sin6_addr)))
208 ipV4 = (
unsigned char *)&
IP.v6.sin6_addr.s6_addr32[3];
209 else {
if ((IN6_IS_ADDR_LINKLOCAL(&
IP.v6.sin6_addr))
210 || (IN6_IS_ADDR_SITELOCAL(&
IP.v6.sin6_addr))
212 || (IN6_IS_ADDR_LOOPBACK (&
IP.v6.sin6_addr)))
return true;
220 {
if (
IP.Addr.sa_family != AF_INET)
return true;
221 ipV4 = (
unsigned char *)&
IP.v4.sin_addr.s_addr;
228 || (ipV4[0] == 172 && ipV4[1] >= 16 && ipV4[1] <= 31)
229 || (ipV4[0] == 192 && ipV4[1] == 168)
230 || (ipV4[0] == 169 && ipV4[1] == 254)
231 || ipV4[0] == 127)
return true;