1 #include <dragonnet/addr.h>
2 #include <dragonport/asprintf.h>
8 DragonnetAddr dragonnet_addr_parse_str(char *str)
10 DragonnetAddr addr = {0};
13 for (ssize_t i = strlen(str)-1; i >= 0; --i) {
20 size_t ip_addr_i = 0, port_i = 0;
21 for (size_t i = 0; i < strlen(str); ++i) {
22 if (i < colon_i && str[i] != '[' && str[i] != ']')
23 addr.ip[ip_addr_i++] = str[i];
25 addr.port[port_i++] = str[i];
31 char *dragonnet_addr_str(DragonnetAddr addr)
34 asprintf(&ptr, "[%s]:%s", addr.ip, addr.port);
38 DragonnetAddr dragonnet_addr_parse_sock(struct sockaddr_in6 ai_addr)
40 DragonnetAddr addr = {0};
41 sprintf(addr.port, "%d", ntohs(ai_addr.sin6_port));
42 inet_ntop(AF_INET6, &ai_addr.sin6_addr, addr.ip, INET6_ADDRSTRLEN);
47 struct sockaddr_in6 dragonnet_addr_sock(DragonnetAddr addr)
49 struct sockaddr_in6 ai_addr = {0};
50 ai_addr.sin6_family = AF_INET6;
51 ai_addr.sin6_flowinfo = 0;
52 ai_addr.sin6_port = htons(atoi(addr.port));
53 inet_pton(AF_INET6, addr.ip, &ai_addr.sin6_addr);