From b70a3584474b7d10f70e9be79c7dcd7a20c21723 Mon Sep 17 00:00:00 2001 From: luis Date: Fri, 29 Mar 2013 17:53:02 +0000 Subject: [PATCH] Merge r30025 from nmap-npingchanges: Add two helper functions to handle sockaddr_storage structures. --- nping/utils_net.cc | 25 +++++++++++++++++++++++++ nping/utils_net.h | 2 ++ 2 files changed, 27 insertions(+) diff --git a/nping/utils_net.cc b/nping/utils_net.cc index c7ce794ba..6d0b053ab 100644 --- a/nping/utils_net.cc +++ b/nping/utils_net.cc @@ -277,6 +277,31 @@ u16 sockaddr2port(struct sockaddr_in6 *s6){ } +/* Sets the address family member of the supplied sockaddr. */ +int setsockaddrfamily(struct sockaddr_storage *ss, int family){ + struct sockaddr_in *s4=(struct sockaddr_in *)ss; + s4->sin_family=family; + return OP_SUCCESS; +} /* End of setsockaddrfamily() */ + + +/* Sets the special INADDR_ANY or in6addr_an constant on the sin_family or + * sin6_addr member of the supplied sockaddr. Note that for this to work, + * the supplied sockaddr_storage MUST have a correct address family set + * already (sin_family or sin6_family). */ +int setsockaddrany(struct sockaddr_storage *ss){ + struct sockaddr_in *s4=(struct sockaddr_in *)ss; + struct sockaddr_in6 *s6=(struct sockaddr_in6 *)ss; + if(s4->sin_family==AF_INET) + s4->sin_addr.s_addr=INADDR_ANY; + else if(s6->sin6_family==AF_INET6) + s6->sin6_addr=in6addr_any; + else + return OP_FAILURE; + return OP_SUCCESS; +} /* End of setsockaddrany() */ + + /** Returns true if supplied value corresponds to a valid RFC compliant ICMP * Code. Otherwise it returns false. * @warning The fact that a given value matches a standard code does not diff --git a/nping/utils_net.h b/nping/utils_net.h index 87ffec271..6f43d116e 100644 --- a/nping/utils_net.h +++ b/nping/utils_net.h @@ -117,6 +117,8 @@ u16 sockaddr2port(struct sockaddr_storage *ss); u16 sockaddr2port(struct sockaddr_storage ss); u16 sockaddr2port(struct sockaddr_in *s4); u16 sockaddr2port(struct sockaddr_in6 *s6); +int setsockaddrfamily(struct sockaddr_storage *ss, int family); +int setsockaddrany(struct sockaddr_storage *ss); bool isICMPType(u8 type); bool isICMPCode(u8 code); bool isICMPCode(u8 code, u8 type);