X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/b43b0e68b21b64f31d0b79974d599d357fe7d240..e02f980793337f4bf0b16bca957a3d112a67b62a:/lib/addr.c diff --git a/lib/addr.c b/lib/addr.c index 0b5b783..fecc28c 100644 --- a/lib/addr.c +++ b/lib/addr.c @@ -1,39 +1,33 @@ /* * This file is part of DisOrder. - * Copyright (C) 2004, 2007 Richard Kettlewell + * Copyright (C) 2004, 2007, 2008 Richard Kettlewell * - * This program is free software; you can redistribute it and/or modify + * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * along with this program. If not, see . */ -/** @file lib/addr.c Socket address support */ +/** @file lib/addr.c + * @brief Socket address support */ -#include -#include "types.h" +#include "common.h" -#include -#include #include #include #include -#include #include #include #include "log.h" #include "printf.h" -#include "configuration.h" #include "addr.h" #include "mem.h" @@ -104,7 +98,7 @@ int addrinfocmp(const struct addrinfo *a, if(a->ai_family != b->ai_family) return a->ai_family - b->ai_family; if(a->ai_socktype != b->ai_socktype) return a->ai_socktype - b->ai_socktype; if(a->ai_protocol != b->ai_protocol) return a->ai_protocol - b->ai_protocol; - switch(a->ai_protocol) { + switch(a->ai_family) { case PF_INET: ina = (const struct sockaddr_in *)a->ai_addr; inb = (const struct sockaddr_in *)b->ai_addr; @@ -124,10 +118,12 @@ int addrinfocmp(const struct addrinfo *a, } } -static inline int multicast4(const struct sockaddr_in *sin) { - return IN_MULTICAST(ntohl(sin->sin_addr.s_addr)); +/** @brief Return nonzero if @p sin4 is an IPv4 multicast address */ +static inline int multicast4(const struct sockaddr_in *sin4) { + return IN_MULTICAST(ntohl(sin4->sin_addr.s_addr)); } +/** @brief Return nonzero if @p sin6 is an IPv6 multicast address */ static inline int multicast6(const struct sockaddr_in6 *sin6) { return IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr); } @@ -144,21 +140,23 @@ int multicast(const struct sockaddr *sa) { } } -static inline char *format_sockaddr4(const struct sockaddr_in *sin) { +/** @brief Format an IPv4 address */ +static inline char *format_sockaddr4(const struct sockaddr_in *sin4) { char buffer[1024], *r; - if(sin->sin_port) + if(sin4->sin_port) byte_xasprintf(&r, "%s port %u", - inet_ntop(sin->sin_family, &sin->sin_addr, + inet_ntop(sin4->sin_family, &sin4->sin_addr, buffer, sizeof buffer), - ntohs(sin->sin_port)); + ntohs(sin4->sin_port)); else byte_xasprintf(&r, "%s", - inet_ntop(sin->sin_family, &sin->sin_addr, + inet_ntop(sin4->sin_family, &sin4->sin_addr, buffer, sizeof buffer)); return r; } +/** @brief Format an IPv6 address */ static inline char *format_sockaddr6(const struct sockaddr_in6 *sin6) { char buffer[1024], *r; @@ -174,11 +172,15 @@ static inline char *format_sockaddr6(const struct sockaddr_in6 *sin6) { return r; } +/** @brief Format a UNIX socket address */ static inline char *format_sockaddrun(const struct sockaddr_un *sun) { return xstrdup(sun->sun_path); } -/** @brief Construct a text description a sockaddr */ +/** @brief Construct a text description a sockaddr + * @param sa Socket address + * @return Human-readable form of address + */ char *format_sockaddr(const struct sockaddr *sa) { switch(sa->sa_family) { case AF_INET: