1/* 2 * OpenVPN -- An application to securely tunnel IP networks 3 * over a single UDP port, with support for SSL/TLS-based 4 * session authentication and key exchange, 5 * packet encryption, packet authentication, and 6 * packet compression. 7 * 8 * Copyright (C) 2011 - David Sommerseth <davids@redhat.com> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 12 * as published by the Free Software Foundation. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program (see the file COPYING included with this 21 * distribution); if not, write to the Free Software Foundation, Inc., 22 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 */ 24 25#ifdef HAVE_CONFIG_H 26#include "config.h" 27#elif defined(_MSC_VER) 28#include "config-msvc.h" 29#endif 30 31#ifndef HAVE_INET_NTOP 32 33#include "compat.h" 34 35#ifdef WIN32 36 37#include <windows.h> 38 39/* 40 * inet_ntop() and inet_pton() wrap-implementations using 41 * WSAAddressToString() and WSAStringToAddress() functions 42 * 43 * this is needed as long as we support running OpenVPN on WinXP 44 */ 45 46const char * 47inet_ntop(int af, const void *src, char *dst, socklen_t size) 48{ 49 struct sockaddr_storage ss; 50 unsigned long s = size; 51 52 ZeroMemory(&ss, sizeof(ss)); 53 ss.ss_family = af; 54 55 switch(af) { 56 case AF_INET: 57 ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src; 58 break; 59 case AF_INET6: 60 ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src; 61 break; 62 default: 63 return NULL; 64 } 65 /* cannot direclty use &size because of strict aliasing rules */ 66 return (WSAAddressToString((struct sockaddr *)&ss, sizeof(ss), NULL, dst, &s) == 0)? 67 dst : NULL; 68} 69 70#else 71 72#error no emulation for inet_ntop 73 74#endif 75 76#endif 77