X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=libcitadel%2Flib%2Furlhandling.c;h=131cafa6ec4efed449a330320a661b8ea4baf7d6;hb=33c17e29507e0424f80dd56241f3026100a71433;hp=5259d8228c6b69a416c47fbb1f23828daf86c983;hpb=a2f3fd43db6471e9c82bb4fb4c5b819ad6888bbe;p=citadel.git diff --git a/libcitadel/lib/urlhandling.c b/libcitadel/lib/urlhandling.c index 5259d8228..131cafa6e 100644 --- a/libcitadel/lib/urlhandling.c +++ b/libcitadel/lib/urlhandling.c @@ -9,6 +9,7 @@ #include #include #include "libcitadel.h" +#include /** * @defgroup URLHandling ParsedURL object to handle connection data @@ -112,7 +113,24 @@ int ParseURL(ParsedURL **Url, StrBuf *UrlStr, unsigned short DefaultPort) } if (pPort != NULL) url->Port = atol(pPort); - url->IsIP = inet_pton(url->af, url->Host, &url->Addr.sin6_addr); + if (url->IPv6) + { + url->IsIP = inet_pton(AF_INET6, url->Host, &url->Addr.sin6_addr); + if (url->IsIP) + { + url->Addr.sin6_port = htons(url->Port); + url->Addr.sin6_port = AF_INET6; + } + } + else + { + url->IsIP = inet_pton(AF_INET, url->Host, &((struct sockaddr_in *)&(url->Addr))->sin_addr); + if (url->IsIP) + { + ((struct sockaddr_in *)&(url->Addr))->sin_port = htons(url->Port); + ((struct sockaddr_in *)&(url->Addr))->sin_family = AF_INET; + } + } *Url = url; return 1; }