From f11c071d4c0bbea7a47e876edaf6bae2c3c0b6fd Mon Sep 17 00:00:00 2001 From: Damien Fouilleul <damienf@videolan.org> Date: Mon, 12 Feb 2007 16:25:16 +0000 Subject: [PATCH] - win32 replacements for inet_pton/inet_ntop --- modules/access_output/udp.c | 18 +++++++++++------- modules/services_discovery/sap.c | 13 ++++++++++++- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/modules/access_output/udp.c b/modules/access_output/udp.c index 423b49a56f..d1b134fa6a 100644 --- a/modules/access_output/udp.c +++ b/modules/access_output/udp.c @@ -648,30 +648,34 @@ static const char *MakeRandMulticast (int family, char *buf, size_t buflen) #ifdef AF_INET6 case AF_INET6: { - struct in6_addr addr; + struct sockaddr_in6 addr; + memset(&addr, 0, sizeof(addr)); memcpy (&addr, "\xff\x38\x00\x00" "\x00\x00\x00\x00" "\x00\x00\x00\x00", 12); rand |= 0x80000000; - memcpy (addr.s6_addr + 12, &(uint32_t){ htonl (rand) }, 4); + memcpy (addr.sin6_addr.s6_addr + 12, &(uint32_t){ htonl (rand) }, 4); #if defined(WIN32) || defined(UNDER_CE) - if( 0 == WSAAddressToStringA((LPSOCKADDR)&addr, sizeof(struct in6_addr), NULL, buf, &buflen) ) + addr.sin6_family = AF_INET6; + if( 0 == WSAAddressToStringA((LPSOCKADDR)&addr, sizeof(struct sockaddr_in6), NULL, buf, &buflen) ) { buf[buflen] = '\0'; return buf; } return NULL; #else - return inet_ntop (family, &addr, buf, buflen); + return inet_ntop (family, &(addr.sin_addr), buf, buflen); #endif } #endif case AF_INET: { - struct in_addr addr; - addr.s_addr = htonl ((rand & 0xffffff) | 0xe8000000); + struct sockaddr_in addr; + memset(&addr, 0, sizeof(addr)); + addr.sin_addr.s_addr = htonl ((rand & 0xffffff) | 0xe8000000); #if defined(WIN32) || defined(UNDER_CE) - if( 0 == WSAAddressToStringA((LPSOCKADDR)&addr, sizeof(struct in_addr), NULL, buf, &buflen) ) + addr.sin_family = AF_INET; + if( 0 == WSAAddressToStringA((LPSOCKADDR)&addr, sizeof(struct sockaddr_in), NULL, buf, &buflen) ) { buf[buflen] = '\0'; return buf; diff --git a/modules/services_discovery/sap.c b/modules/services_discovery/sap.c index f1ee9c1be4..f0cffb69e1 100644 --- a/modules/services_discovery/sap.c +++ b/modules/services_discovery/sap.c @@ -949,10 +949,15 @@ static int ParseSDPConnection (const char *str, struct sockaddr_storage *addr, # endif *addrlen = sizeof (struct sockaddr_in6); +#if defined(WIN32) || defined(UNDER_CE) + if( WSAStringToAddressA(host, AF_INET6, NULL, + (LPSOCKADDR)addr, addrlen) ) + return -1; +#else if (inet_pton (AF_INET6, host, &((struct sockaddr_in6 *)addr)->sin6_addr) <= 0) return -1; - +#endif *number = (res >= 3) ? n1 : 1; break; #endif @@ -964,9 +969,15 @@ static int ParseSDPConnection (const char *str, struct sockaddr_storage *addr, # endif *addrlen = sizeof (struct sockaddr_in); +#if defined(WIN32) || defined(UNDER_CE) + if( WSAStringToAddressA(host, AF_INET, NULL, + (LPSOCKADDR)addr, addrlen) ) + return -1; +#else if (inet_pton (AF_INET, host, &((struct sockaddr_in *)addr)->sin_addr) <= 0) return -1; +#endif *number = (res >= 4) ? n2 : 1; break; -- 2.25.4