1/*** 2 This file is part of PulseAudio. 3 4 Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB 5 6 PulseAudio is free software; you can redistribute it and/or modify 7 it under the terms of the GNU Lesser General Public License as 8 published by the Free Software Foundation; either version 2.1 of the 9 License, or (at your option) any later version. 10 11 PulseAudio is distributed in the hope that it will be useful, but 12 WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public 17 License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>. 18***/ 19 20#ifdef HAVE_CONFIG_H 21#include <config.h> 22#endif 23 24#if !defined(HAVE_ARPA_INET_H) && defined(OS_IS_WIN32) && (_WIN32_WINNT < 0x0600) 25 26#include <errno.h> 27 28#include <pulsecore/macro.h> 29#include <pulsecore/socket.h> 30#include <pulsecore/core-util.h> 31 32#include "arpa-inet.h" 33 34const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) { 35 struct in_addr *in = (struct in_addr*)src; 36#ifdef HAVE_IPV6 37 struct in6_addr *in6 = (struct in6_addr*)src; 38#endif 39 40 pa_assert(src); 41 pa_assert(dst); 42 43 switch (af) { 44 case AF_INET: 45 pa_snprintf(dst, cnt, "%d.%d.%d.%d", 46#ifdef WORDS_BIGENDIAN 47 (int)(in->s_addr >> 24) & 0xff, 48 (int)(in->s_addr >> 16) & 0xff, 49 (int)(in->s_addr >> 8) & 0xff, 50 (int)(in->s_addr >> 0) & 0xff); 51#else 52 (int)(in->s_addr >> 0) & 0xff, 53 (int)(in->s_addr >> 8) & 0xff, 54 (int)(in->s_addr >> 16) & 0xff, 55 (int)(in->s_addr >> 24) & 0xff); 56#endif 57 break; 58#ifdef HAVE_IPV6 59 case AF_INET6: 60 pa_snprintf(dst, cnt, "%x:%x:%x:%x:%x:%x:%x:%x", 61 in6->s6_addr[ 0] << 8 | in6->s6_addr[ 1], 62 in6->s6_addr[ 2] << 8 | in6->s6_addr[ 3], 63 in6->s6_addr[ 4] << 8 | in6->s6_addr[ 5], 64 in6->s6_addr[ 6] << 8 | in6->s6_addr[ 7], 65 in6->s6_addr[ 8] << 8 | in6->s6_addr[ 9], 66 in6->s6_addr[10] << 8 | in6->s6_addr[11], 67 in6->s6_addr[12] << 8 | in6->s6_addr[13], 68 in6->s6_addr[14] << 8 | in6->s6_addr[15]); 69 break; 70#endif 71 default: 72 errno = EAFNOSUPPORT; 73 return NULL; 74 } 75 76 return dst; 77} 78 79int inet_pton(int af, const char *src, void *dst) { 80 struct in_addr *in = (struct in_addr*)dst; 81#ifdef HAVE_IPV6 82 struct in6_addr *in6 = (struct in6_addr*)dst; 83#endif 84 85 pa_assert(src); 86 pa_assert(dst); 87 88 switch (af) { 89 case AF_INET: 90 in->s_addr = inet_addr(src); 91 if (in->s_addr == INADDR_NONE) 92 return 0; 93 break; 94#ifdef HAVE_IPV6 95 case AF_INET6: 96 /* FIXME */ 97#endif 98 default: 99 errno = EAFNOSUPPORT; 100 return -1; 101 } 102 103 return 1; 104} 105 106#endif 107