From 03e65a0b2401f63c8b10a1395def5c7859280aba Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sun, 28 Dec 2008 02:39:57 +0000 Subject: added enpoint to string functions --- src/udp.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'src/udp.c') diff --git a/src/udp.c b/src/udp.c index b5701ad..70375c2 100644 --- a/src/udp.c +++ b/src/udp.c @@ -96,7 +96,6 @@ void udp_set_remote(udp_socket_t* sock, const char* remote_addr, const char* por memset (&hints, 0, sizeof (hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; - hints.ai_flags |= AI_CANONNAME; int errcode = getaddrinfo(remote_addr, port, &hints, &res); if (errcode != 0) { @@ -118,7 +117,51 @@ void udp_close(udp_socket_t** sock) free(*sock); *sock = NULL; } - + +char* udp_endpoint_to_string(struct sockaddr_storage ss) +{ + void* ptr; + u_int16_t port; + char* addrstr; + + switch (((struct sockaddr *)&ss)->sa_family) + { + case AF_INET: + ptr = &((struct sockaddr_in *)&ss)->sin_addr; + port = ntohs(((struct sockaddr_in *)&ss)->sin_port); + addrstr = malloc(INET_ADDRSTRLEN+1); + break; + case AF_INET6: + ptr = &((struct sockaddr_in6 *)&ss)->sin6_addr; + port = ntohs(((struct sockaddr_in6 *)&ss)->sin6_port); + addrstr = malloc(INET6_ADDRSTRLEN+1); + break; + default: + return ""; + } + inet_ntop (((struct sockaddr *)&ss)->sa_family, ptr, addrstr, 100); + char* ret; + asprintf(&ret, "%s:%d", addrstr, port); + free(addrstr); + return ret; +} + +char* udp_get_local_end_string(udp_socket_t* sock) +{ + if(!sock) + return ""; + + return udp_endpoint_to_string(sock->remote_end_); +} + +char* udp_get_remote_end_string(udp_socket_t* sock) +{ + if(!sock) + return ""; + + return udp_endpoint_to_string(sock->remote_end_); +} + int udp_read(udp_socket_t* sock, u_int8_t* buf, u_int32_t len, struct sockaddr_storage* remote_end_) { if(!sock || !remote_end_) -- cgit v1.2.3