+char *
+str_sockaddr_no_port(
+ sockaddr_union *sa)
+{
+#ifdef WORKING_IPV6
+ char ipstr[INET6_ADDRSTRLEN];
+#else
+ char ipstr[INET_ADDRSTRLEN];
+#endif
+
+#ifdef WORKING_IPV6
+ if ( SU_GET_FAMILY(sa) == AF_INET6) {
+ inet_ntop(AF_INET6, &sa->sin6.sin6_addr, ipstr, sizeof(ipstr));
+ } else
+#endif
+ {
+ inet_ntop(AF_INET, &sa->sin.sin_addr.s_addr, ipstr, sizeof(ipstr));
+ }
+ g_snprintf(mystr_sockaddr,sizeof(mystr_sockaddr),"%s", ipstr);
+ mystr_sockaddr[sizeof(mystr_sockaddr)-1] = '\0';
+
+ return mystr_sockaddr;
+}
+
+int
+str_to_sockaddr(
+ const char *src,
+ sockaddr_union *dst)
+{
+ int result;
+
+ g_debug("parsing %s", src);
+ /* try AF_INET first */
+ SU_INIT(dst, AF_INET);
+ if ((result = inet_pton(AF_INET, src, &dst->sin.sin_addr)) == 1)
+ return result;
+
+ /* otherwise try AF_INET6, if supported */
+#ifdef WORKING_IPV6
+ SU_INIT(dst, AF_INET6);
+ return inet_pton(AF_INET6, src, &dst->sin6.sin6_addr);
+#else
+ return result;
+#endif
+}
+