summaryrefslogtreecommitdiff
path: root/src/udp.c
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2008-12-28 02:39:57 +0000
committerChristian Pointner <equinox@anytun.org>2008-12-28 02:39:57 +0000
commit03e65a0b2401f63c8b10a1395def5c7859280aba (patch)
tree1f1643f21653cfca58f3aa5b48871ac963114cdd /src/udp.c
parentfixed memory error und udp_close (diff)
added enpoint to string functions
Diffstat (limited to 'src/udp.c')
-rw-r--r--src/udp.c47
1 files changed, 45 insertions, 2 deletions
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_)