diff options
Diffstat (limited to 'Source/charon/network/host.c')
-rw-r--r-- | Source/charon/network/host.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/Source/charon/network/host.c b/Source/charon/network/host.c index a8fab245d..7d120886e 100644 --- a/Source/charon/network/host.c +++ b/Source/charon/network/host.c @@ -319,3 +319,26 @@ host_t *host_create_from_chunk(int family, chunk_t address, u_int16_t port) allocator_free(this); return NULL; } + +/* + * Described in header. + */ +host_t *host_create_from_sockaddr(sockaddr_t *sockaddr) +{ + chunk_t address; + + switch (sockaddr->sa_family) + { + /* IPv4 */ + case AF_INET: + { + struct sockaddr_in *sin = (struct sockaddr_in *)sockaddr; + address.ptr = (void*)&(sin->sin_addr.s_addr); + address.len = 4; + return host_create_from_chunk(AF_INET, address, ntohs(sin->sin_port)); + } + default: + return NULL; + } +} + |