mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-03 17:35:06 -05:00
util: use common functions to convert to/from sockaddr
This commit is contained in:
59
util.c
59
util.c
@@ -426,6 +426,65 @@ UTI_CompareIPs(IPAddr *a, IPAddr *b, IPAddr *mask)
|
||||
|
||||
/* ================================================== */
|
||||
|
||||
void
|
||||
UTI_Sockaddr2IPAndPort(struct sockaddr *sa, IPAddr *ip, unsigned short *port)
|
||||
{
|
||||
switch (sa->sa_family) {
|
||||
case AF_INET:
|
||||
ip->family = IPADDR_INET4;
|
||||
ip->addr.in4 = ntohl(((struct sockaddr_in *)sa)->sin_addr.s_addr);
|
||||
*port = ntohs(((struct sockaddr_in *)sa)->sin_port);
|
||||
break;
|
||||
#ifdef FEAT_IPV6
|
||||
case AF_INET6:
|
||||
ip->family = IPADDR_INET6;
|
||||
memcpy(ip->addr.in6, ((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr,
|
||||
sizeof (ip->addr.in6));
|
||||
*port = ntohs(((struct sockaddr_in6 *)sa)->sin6_port);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
ip->family = IPADDR_UNSPEC;
|
||||
*port = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================================== */
|
||||
|
||||
int
|
||||
UTI_IPAndPort2Sockaddr(IPAddr *ip, unsigned short port, struct sockaddr *sa)
|
||||
{
|
||||
switch (ip->family) {
|
||||
case IPADDR_INET4:
|
||||
memset(sa, 0, sizeof (struct sockaddr_in));
|
||||
sa->sa_family = AF_INET;
|
||||
((struct sockaddr_in *)sa)->sin_addr.s_addr = htonl(ip->addr.in4);
|
||||
((struct sockaddr_in *)sa)->sin_port = htons(port);
|
||||
#ifdef SIN6_LEN
|
||||
((struct sockaddr_in *)sa)->sin_len = sizeof (struct sockaddr_in);
|
||||
#endif
|
||||
return sizeof (struct sockaddr_in);
|
||||
#ifdef FEAT_IPV6
|
||||
case IPADDR_INET6:
|
||||
memset(sa, 0, sizeof (struct sockaddr_in6));
|
||||
sa->sa_family = AF_INET6;
|
||||
memcpy(((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr, ip->addr.in6,
|
||||
sizeof (ip->addr.in6));
|
||||
((struct sockaddr_in6 *)sa)->sin6_port = htons(port);
|
||||
#ifdef SIN6_LEN
|
||||
((struct sockaddr_in6 *)sa)->sin6_len = sizeof (struct sockaddr_in6);
|
||||
#endif
|
||||
return sizeof (struct sockaddr_in6);
|
||||
#endif
|
||||
default:
|
||||
memset(sa, 0, sizeof (struct sockaddr));
|
||||
sa->sa_family = AF_UNSPEC;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================================== */
|
||||
|
||||
char *
|
||||
UTI_TimeToLogForm(time_t t)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user