aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstrongswan/utils')
-rw-r--r--src/libstrongswan/utils/identification.c33
-rw-r--r--src/libstrongswan/utils/identification.h8
2 files changed, 41 insertions, 0 deletions
diff --git a/src/libstrongswan/utils/identification.c b/src/libstrongswan/utils/identification.c
index 040847029..20cfc902b 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 2e4b46cef..c3cceebf3 100644
--- a/src/libstrongswan/utils/identification.h
+++ b/src/libstrongswan/utils/identification.h
@@ -323,6 +323,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.
*
* Arguments are: