From 4b4f8bd732de4eddf2bfd418695e6391bd791f95 Mon Sep 17 00:00:00 2001 From: Andreas Steffen Date: Fri, 9 Oct 2009 00:13:02 +0200 Subject: [PATCH] created identification_create_from_sockaddr() function --- src/libstrongswan/utils/identification.c | 33 ++++++++++++++++++++++++ src/libstrongswan/utils/identification.h | 8 ++++++ 2 files changed, 41 insertions(+) diff --git a/src/libstrongswan/utils/identification.c b/src/libstrongswan/utils/identification.c index 040847029d..20cfc902ba 100644 --- a/src/libstrongswan/utils/identification.c +++ b/src/libstrongswan/utils/identification.c @@ -819,6 +819,9 @@ int identification_printf_hook(char *dst, size_t len, printf_hook_spec_t *spec, snprintf(buf, sizeof(buf), "%#B", &this->encoded); } break; + case ID_MYID: + snprintf(buf, sizeof(buf), "%%myid"); + break; default: snprintf(buf, sizeof(buf), "(unknown ID type: %d)", this->type); break; @@ -1022,3 +1025,33 @@ identification_t *identification_create_from_encoding(id_type_t type, return &(this->public); } +/* + * Described in header. + */ +identification_t *identification_create_from_sockaddr(sockaddr_t *sockaddr) +{ + switch (sockaddr->sa_family) + { + case AF_INET: + { + struct in_addr *addr = &(((struct sockaddr_in*)sockaddr)->sin_addr); + + return identification_create_from_encoding(ID_IPV4_ADDR, + chunk_create((u_char*)addr, sizeof(struct in_addr))); + } + case AF_INET6: + { + struct in6_addr *addr = &(((struct sockaddr_in6*)sockaddr)->sin6_addr); + + return identification_create_from_encoding(ID_IPV6_ADDR, + chunk_create((u_char*)addr, sizeof(struct in6_addr))); + } + default: + { + private_identification_t *this = identification_create(ID_ANY); + + return &(this->public); + } + } +} + diff --git a/src/libstrongswan/utils/identification.h b/src/libstrongswan/utils/identification.h index 2e4b46cefe..c3cceebf3d 100644 --- a/src/libstrongswan/utils/identification.h +++ b/src/libstrongswan/utils/identification.h @@ -322,6 +322,14 @@ identification_t * identification_create_from_string(char *string); */ identification_t * identification_create_from_encoding(id_type_t type, chunk_t encoded); +/** + * Constructor to create a host_t object from a sockaddr struct + * + * @param sockaddr sockaddr struct which contains family and address + * @return identification_t + */ +identification_t * identification_create_from_sockaddr(sockaddr_t *sockaddr); + /** * printf hook function for identification_t. * -- 2.47.2