- int i, port, namelen, d1, d2, d3, d4;
- struct hostent *hostentry;
- const char *colon;
+ char port_buff [16];
+ struct addrinfo hints;
+ struct addrinfo* addrinf;
+ int err;
+
+ dpsnprintf (port_buff, sizeof (port_buff), "%d", port);
+ port_buff[sizeof (port_buff) - 1] = '\0';
+
+ memset(&hints, 0, sizeof (hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_DGRAM;
+ //hints.ai_flags = AI_PASSIVE;
+
+ err = getaddrinfo(name, port_buff, &hints, &addrinf);
+ if (err != 0 || addrinf == NULL)
+ return 0;
+ if (addrinf->ai_addr->sa_family != AF_INET6 && addrinf->ai_addr->sa_family != AF_INET)
+ {
+ freeaddrinfo (addrinf);
+ return 0;
+ }
+
+ // great it worked
+ if (addrinf->ai_addr->sa_family == AF_INET6)
+ {
+ address->addresstype = LHNETADDRESSTYPE_INET6;
+ memcpy(&address->addr.in6, addrinf->ai_addr, sizeof(address->addr.in6));
+ }
+ else
+ {
+ address->addresstype = LHNETADDRESSTYPE_INET4;
+ memcpy(&address->addr.in, addrinf->ai_addr, sizeof(address->addr.in));
+ }
+ address->port = port;
+
+ freeaddrinfo (addrinf);
+ return 1;
+}
+
+int LHNETADDRESS_FromString(lhnetaddress_t *vaddress, const char *string, int defaultport)
+{
+ lhnetaddressnative_t *address = (lhnetaddressnative_t *)vaddress;
+ int i, port, d1, d2, d3, d4, resolved;
+ size_t namelen;
+ unsigned char *a;