1 #include <dragonport/asprintf.h>
9 DragonnetAddr dragonnet_addr_parse_str(char *str)
11 DragonnetAddr addr = {0};
14 for (ssize_t i = strlen(str)-1; i >= 0; --i) {
21 size_t ip_addr_i = 0, port_i = 0;
22 for (size_t i = 0; i < strlen(str); ++i) {
23 if (i < colon_i && str[i] != '[' && str[i] != ']')
24 addr.ip[ip_addr_i++] = str[i];
26 addr.port[port_i++] = str[i];
32 char *dragonnet_addr_str(DragonnetAddr addr)
35 asprintf(&ptr, "[%s]:%s", addr.ip, addr.port);
39 DragonnetAddr dragonnet_addr_parse_sock(struct sockaddr_in6 ai_addr)
41 DragonnetAddr addr = {0};
42 sprintf(addr.port, "%d", ntohs(ai_addr.sin6_port));
43 inet_ntop(AF_INET6, &ai_addr.sin6_addr, addr.ip, INET6_ADDRSTRLEN);
48 struct sockaddr_in6 dragonnet_addr_sock(DragonnetAddr addr)
50 struct sockaddr_in6 ai_addr = {0};
51 ai_addr.sin6_family = AF_INET6;
52 ai_addr.sin6_flowinfo = 0;
53 ai_addr.sin6_port = htons(atoi(addr.port));
54 inet_pton(AF_INET6, addr.ip, &ai_addr.sin6_addr);