r3227 - in trunk/libmnetutil: . include/libmnetutil source

mikma at minisip.org mikma at minisip.org
Wed Mar 7 10:32:20 CET 2007


Author: mikma
Date: 2007-03-07 10:32:19 +0100 (Wed, 07 Mar 2007)
New Revision: 3227

Added:
   trunk/libmnetutil/source/NetworkFunctionsWin32.cxx
   trunk/libmnetutil/source/NetworkFunctionsWin32.h
Modified:
   trunk/libmnetutil/Makefile.am
   trunk/libmnetutil/configure.ac
   trunk/libmnetutil/include/libmnetutil/NetworkFunctions.h
   trunk/libmnetutil/source/IP6Address.cxx
   trunk/libmnetutil/source/NetUtil.cxx
   trunk/libmnetutil/source/NetworkFunctions.cxx
Log:
Fix WIN32 IPv6 support

Modified: trunk/libmnetutil/Makefile.am
===================================================================
--- trunk/libmnetutil/Makefile.am	2007-03-06 21:18:52 UTC (rev 3226)
+++ trunk/libmnetutil/Makefile.am	2007-03-07 09:32:19 UTC (rev 3227)
@@ -20,6 +20,9 @@
 res_obj = win32/libmnetutil-res.o
 libmnetutil_la_LDFLAGS += -Wl,$(res_obj)
 libmnetutil_la_DEPENDENCIES += $(res_obj)
+win32_src = \
+		source/NetworkFunctionsWin32.h \
+		source/NetworkFunctionsWin32.cxx
 endif OS_WIN
 
 srp_src = 
@@ -51,6 +54,7 @@
 		    source/NetUtil.cxx \
 		    source/UDPSocket.cxx \
 		    source/DatagramSocket.cxx \
+		    $(win32_src) \
 		    source/StreamSocket.cxx
 
 # maintainer rules

Modified: trunk/libmnetutil/configure.ac
===================================================================
--- trunk/libmnetutil/configure.ac	2007-03-06 21:18:52 UTC (rev 3226)
+++ trunk/libmnetutil/configure.ac	2007-03-07 09:32:19 UTC (rev 3227)
@@ -69,7 +69,7 @@
 #include<ws2tcpip.h>
 ])
 else
-AC_CHECK_FUNCS([getifaddrs getnameinfo])
+AC_CHECK_FUNCS([getifaddrs getnameinfo getaddrinfo freeaddrinfo])
 fi
 
 AM_MINISIP_CHECK_LIBMUTIL([0.3.1])

Modified: trunk/libmnetutil/include/libmnetutil/NetworkFunctions.h
===================================================================
--- trunk/libmnetutil/include/libmnetutil/NetworkFunctions.h	2007-03-06 21:18:52 UTC (rev 3226)
+++ trunk/libmnetutil/include/libmnetutil/NetworkFunctions.h	2007-03-07 09:32:19 UTC (rev 3227)
@@ -54,6 +54,9 @@
 */
 class LIBMNETUTIL_API NetworkFunctions{
 	public:
+
+		static void init();
+
 		/**
 		@return a string vector with all available network interfaces
 		*/

Modified: trunk/libmnetutil/source/IP6Address.cxx
===================================================================
--- trunk/libmnetutil/source/IP6Address.cxx	2007-03-06 21:18:52 UTC (rev 3226)
+++ trunk/libmnetutil/source/IP6Address.cxx	2007-03-07 09:32:19 UTC (rev 3227)
@@ -1,5 +1,6 @@
 /*
   Copyright (C) 2005, 2004 Erik Eliasson, Johan Bilien
+  Copyright (C) 2006-2007 Mikael Magnusson
   
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -19,6 +20,7 @@
 /*
  * Authors: Erik Eliasson <eliasson at it.kth.se>
  *          Johan Bilien <jobi at via.ecp.fr>
+ *          Mikael Magnusson <mikma at users.sourceforge.net>
 */
 
 #include<config.h>
@@ -32,6 +34,12 @@
 #include<libmnetutil/IP6Address.h>
 
 #ifdef WIN32
+# define _WIN32_WINNT 0x0501
+#endif
+
+#include<libmnetutil/IP6Address.h>
+
+#ifdef WIN32
 #include<winsock2.h>
 #include<ws2tcpip.h>
 const struct in6_addr in6addr_any = {{IN6ADDR_ANY_INIT}};
@@ -59,9 +67,57 @@
 #ifndef HAVE_INET_NTOP
 # include<inet_ntop.h>
 #endif
+#ifdef WIN32
+#include"NetworkFunctionsWin32.h"
+#endif
 
 using namespace std;
 
+#define MAKE_UINT16(x,y) ((x)<<8+(y))
+
+#ifdef HAVE_GETADDRINFO
+void initIp6Address( const string &ipaddr, struct sockaddr_in6 *sockaddress,
+		     unsigned short num_ip[8] ){
+	struct addrinfo hints;
+	struct addrinfo *ai = NULL;
+
+	memset( &hints, 0, sizeof(hints) );
+	hints.ai_family = AF_INET6;
+	
+	if( getaddrinfo( ipaddr.c_str(), NULL, &hints, &ai ) || !ai )
+		throw HostNotFound( ipaddr );
+
+	struct addrinfo *cur;
+	bool found=false;
+
+	for( cur = ai; cur; cur=cur->ai_next ){
+		if( cur->ai_family != AF_INET6 )
+			continue;
+
+		if( cur->ai_addrlen != sizeof(*sockaddress) )
+			continue;
+
+		memset(sockaddress, '\0', sizeof(*sockaddress));
+		memcpy(sockaddress, cur->ai_addr, cur->ai_addrlen);
+
+		for (int32_t i=0; i<8; i++){
+			uint8_t x = sockaddress->sin6_addr.s6_addr[2 * i];
+			uint8_t y = sockaddress->sin6_addr.s6_addr[2 * i + 1];
+
+			num_ip[i] = MAKE_UINT16(x, y);
+		}
+
+		found=true;
+		break;
+	}
+
+	freeaddrinfo( ai );
+
+	if( !found )
+		throw HostNotFound( ipaddr );
+}
+#endif	// HAVE_GETADDRINFO
+
 #ifdef HAVE_GETNAMEINFO
 string buildAddressString(const struct sockaddr *sa, socklen_t salen)
 {
@@ -113,6 +169,19 @@
 
 	setAddressFamily(AF_INET6);
 	setProtocolFamily(PF_INET6);
+
+#ifdef HAVE_GETADDRINFO
+	bool use_getaddrinfo = true;
+#ifdef WIN32
+	if( !(hgetaddrinfo && hfreeaddrinfo ) )
+		use_getaddrinfo = false;
+#endif
+	if( use_getaddrinfo ){
+		initIp6Address( addr, sockaddress, num_ip );
+		return;
+	}
+
+#endif // !HAVE_GETADDRINFO
 #ifndef WIN32
 	hostent *hp= gethostbyname2(addr.c_str(), AF_INET6);	
 #else

Modified: trunk/libmnetutil/source/NetUtil.cxx
===================================================================
--- trunk/libmnetutil/source/NetUtil.cxx	2007-03-06 21:18:52 UTC (rev 3226)
+++ trunk/libmnetutil/source/NetUtil.cxx	2007-03-07 09:32:19 UTC (rev 3227)
@@ -25,6 +25,7 @@
 #include<config.h>
 
 #include<libmnetutil/NetUtil.h>
+#include<libmnetutil/NetworkFunctions.h>
 
 #ifdef WIN32
 #include<winsock2.h>
@@ -60,6 +61,8 @@
 		return false; 
 	}
 #endif
+
+	NetworkFunctions::init();
 	return true;
 	
 }

Modified: trunk/libmnetutil/source/NetworkFunctions.cxx
===================================================================
--- trunk/libmnetutil/source/NetworkFunctions.cxx	2007-03-06 21:18:52 UTC (rev 3226)
+++ trunk/libmnetutil/source/NetworkFunctions.cxx	2007-03-07 09:32:19 UTC (rev 3227)
@@ -1,5 +1,6 @@
 /*
   Copyright (C) 2005, 2004 Erik Eliasson, Johan Bilien
+  Copyright (C) 2006-2007 Mikael Magnusson
   
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -19,6 +20,7 @@
 /*
  * Authors: Erik Eliasson <eliasson at it.kth.se>
  *          Johan Bilien <jobi at via.ecp.fr>
+ *          Mikael Magnusson <mikma at users.sourceforge.net>
 */
 
 
@@ -55,6 +57,7 @@
 #include<map>
 #include<udns.h>
 
+#define _WIN32_WINNT 0x0501
 
 /**
 libresolv is only for linux ...
@@ -95,6 +98,11 @@
 
 using namespace std;
 
+#ifdef USE_WIN32_API
+#include"NetworkFunctionsWin32.h"
+#endif
+
+
 //Linux: Thanks to linuxgazette tips, http://www.linuxgazette.com/issue84/misc/tips/interfaces.c.txt,
 //seems to be public domain.
 //W32: Thanks to MSDN documentation:
@@ -131,7 +139,7 @@
 		return m_ip4Strs.push_back(ip);
 }
 
-#ifdef HAVE_GETIFADDRS
+#ifdef HAVE_GETNAMEINFO
 static bool sa_get_addr(struct sockaddr *sa, bool &ipv6, string &ip)
 {
 #ifdef HAVE_IPV6
@@ -153,7 +161,7 @@
 	}
 #endif
 	else{
-		// Unsupported address family
+		cerr << "sa_get_addr: unsupported address family: " << sa->sa_family << endl;
 		return false;
 	}
 	
@@ -166,7 +174,13 @@
 	ip = addr;
 	return true;
 }
+#endif
 
+#if HAVE_GETIFADDRS && HAVE_GETNAMEINFO
+// 
+// Implementation 1. getifaddrs
+// 
+
  vector<string> NetworkFunctions::getAllInterfaces(){
  	vector<string >res;
 	struct ifaddrs *ifs = NULL;
@@ -294,10 +308,195 @@
 }
 
 #else  // HAVE_GETIFADDRS
+#ifdef USE_WIN32_API
+
+#ifdef HAVE_GETADAPTERSADDRESSES
+IP_ADAPTER_ADDRESSES *WINXP_getAdaptersAddresses(){
+	IP_ADAPTER_ADDRESSES *pAdapters = NULL;
+	DWORD flags = GAA_FLAG_SKIP_ANYCAST|GAA_FLAG_SKIP_FRIENDLY_NAME|GAA_FLAG_SKIP_MULTICAST|GAA_FLAG_SKIP_DNS_SERVER;
+	ULONG bufLen = 0;
+
+	//cerr << "getAllInterfaces " << endl;
+	if( GetAdaptersAddresses( AF_UNSPEC, flags, NULL, NULL, &bufLen ) != ERROR_BUFFER_OVERFLOW ){
+// 		cerr << "getAllInterfaces 1" << endl;
+		return NULL;
+	}
+
+	pAdapters = (IP_ADAPTER_ADDRESSES*)malloc( bufLen );
+	memset( pAdapters, 0, bufLen );
+
+	if( GetAdaptersAddresses( AF_UNSPEC, flags, NULL, pAdapters, &bufLen ) != ERROR_SUCCESS ){
+// 		cerr << "getAllInterfaces 2" << endl;
+		return NULL;
+	}
+
+	return pAdapters;
+}
+
+
+
+vector<string> WINXP_getAllInterfaces(){
+	vector<string> res;
+	IP_ADAPTER_ADDRESSES *pAdapters = WINXP_getAdaptersAddresses();
+
+	if( !pAdapters ){
+		return res;
+	}
+
+	IP_ADAPTER_ADDRESSES *adapt;
+	for( adapt = pAdapters; adapt; adapt = adapt->Next ){
+		if( adapt->OperStatus != IfOperStatusUp ){
+// 			cerr << "Not up" << adapt->AdapterName << endl;
+			continue;
+		}
+
+		IP_ADAPTER_UNICAST_ADDRESS *addr;
+		for( addr = adapt->FirstUnicastAddress; addr; addr=addr->Next ){
+
+			if( !addr ){
+// 				cerr << "No unicast address" << endl;
+				break;
+			}
+
+			struct sockaddr *sa = addr->Address.lpSockaddr;
+
+			if( !sa ){
+// 				cerr << "No socket" << endl;
+				continue;
+			}
+
+			if( sa->sa_family != AF_INET ){
+				continue;
+			}
+
+			res.push_back( adapt->AdapterName );
+			break;
+		}
+	}
+
+	return res;
+}
+
+string WINXP_getInterfaceIPStr(string iface){
+	string ret;
+
+	IP_ADAPTER_ADDRESSES *pAdapters = WINXP_getAdaptersAddresses();
+
+	if( !pAdapters ){
+		return ret;
+	}
+
+	//cerr << "WINXP_getAdaptersAddresses" << endl;
+
+	IP_ADAPTER_ADDRESSES *adapt;
+	for( adapt = pAdapters; adapt; adapt=adapt->Next ){
+		//cerr << "Adapt: " << adapt->AdapterName << endl;
+
+		if( iface != string(adapt->AdapterName) ){
+			continue;
+		}
+
+		if( adapt->OperStatus != IfOperStatusUp ){
+// 			cerr << "Not up" << adapt->AdapterName << endl;
+			return false;
+		}
+
+		IP_ADAPTER_UNICAST_ADDRESS *addr;
+		for( addr = adapt->FirstUnicastAddress; addr; addr=addr->Next ){
+
+			if( !addr ){
+				cerr << "No unicast address" << endl;
+				break;
+			}
+
+			struct sockaddr *sa = addr->Address.lpSockaddr;
+
+			if( !sa ){
+				cerr << "No socket" << endl;
+				continue;
+			}
+
+			if( sa->sa_family != AF_INET ){
+				cerr << "Not IPv4 addr: " << adapt->AdapterName << endl;
+				return ret;
+			}
+
+			bool isIpv6;
+			if( sa_get_addr(sa, isIpv6, ret) ){
+				//cerr << "WINXP_getAdaptersAddresses: " << ret << endl;
+				return ret;
+			}
+			else{
+				cerr << "WINXP_getAdaptersAddresses error" << adapt->AdapterName << endl;
+			}
+		}
+
+		//cerr << "Not found: " << iface << endl;
+		return ret;
+	}
+
+	//cerr << "Not found: " << iface << endl;
+	return ret;
+}
+
+vector<MRef<NetworkInterface*> > WINXP_getInterfaces()
+{
+	vector<MRef<NetworkInterface*> > interfaces;
+
+	IP_ADAPTER_ADDRESSES *pAdapters = WINXP_getAdaptersAddresses();
+
+	if( !pAdapters ){
+		cerr << "WINXP_getInterfaces no adapters" << endl;
+		return interfaces;
+	}
+
+	IP_ADAPTER_ADDRESSES *adapt;
+	for( adapt = pAdapters; adapt; adapt = adapt->Next ){
+		if( adapt->OperStatus != IfOperStatusUp ){
+			cerr << "Not up" << adapt->AdapterName << endl;
+			continue;
+		}
+
+		IP_ADAPTER_UNICAST_ADDRESS *addr;
+		for( addr = adapt->FirstUnicastAddress; addr; addr=addr->Next ){
+			//cerr << "Unicast address" << endl;
+			struct sockaddr *sa = addr->Address.lpSockaddr;
+
+			bool isIpv6 = false;
+			string ip;
+			if( !sa_get_addr(sa, isIpv6, ip) ){
+				cerr << "sa_get_addr failed" << endl;
+				continue;
+			}
+
+			MRef<NetworkInterface*> iface;
+
+			iface = new NetworkInterface( adapt->AdapterName );
+			iface->addIPString( ip, isIpv6 );
+			interfaces.push_back( iface );
+
+			cerr << "Add: " << ip << "," << isIpv6 << endl;
+		}
+	}
+
+	return interfaces;
+}
+
+
+#endif // HAVE_GETADAPTERSADDRESSES
+
+// 
+// Implementation 2. WIN32
+// 
+
 vector<string> NetworkFunctions::getAllInterfaces(){
+#ifdef HAVE_GETADAPTERSADDRESSES
+	if( hGetAdaptersAddresses )
+		return WINXP_getAllInterfaces();
+#endif
+
 	vector<string >res;
 
-#ifdef USE_WIN32_API
 	ULONG           ulOutBufLen;
 	DWORD           dwRetVal;
 
@@ -330,7 +529,18 @@
 	}
 	free(pAdapterInfo);
 
-#else
+	return res;
+}
+
+#else // !USE_WIN32_API
+
+// 
+// Implementation 2. !WIN32
+// 
+
+vector<string> NetworkFunctions::getAllInterfaces(){
+	vector<string >res;
+
 	int32_t sockfd;
 	char *buf, *ptr;
 	struct ifconf ifc;
@@ -375,10 +585,10 @@
 	/* release resources */
 	free(buf);
 	close(sockfd);
-#endif //USE_WIN32_API
 
 	return res;
 }
+#endif //USE_WIN32_API
 
 #ifndef IF_NAMESIZE
 #define IF_NAMESIZE 16
@@ -388,6 +598,12 @@
 	string ret;
 
 #ifdef USE_WIN32_API
+
+#if defined (HAVE_GETADAPTERSADDRESSES) && defined (HAVE_GETNAMEINFO)
+	if( hGetAdaptersAddresses && hgetnameinfo )
+		return WINXP_getInterfaceIPStr( iface );
+#endif
+
 	ULONG           ulOutBufLen;
 	DWORD           dwRetVal;
 	
@@ -452,6 +668,11 @@
 
 vector<MRef<NetworkInterface*> > NetworkFunctions::getInterfaces()
 {
+#if defined(USE_WIN32_API) && defined(HAVE_GETADAPTERSADDRESSES) && defined (HAVE_GETNAMEINFO)
+	if( hGetAdaptersAddresses && hgetnameinfo )
+		return WINXP_getInterfaces();
+#endif
+
 	vector<string> names = getAllInterfaces();
 	vector<string>::iterator i;
  
@@ -575,3 +796,10 @@
 	return false;
 }
 
+
+
+void NetworkFunctions::init(){
+#if defined(WIN32) && HAVE_GETADAPTERSADDRESSES
+	WINXP_init();
+#endif
+}

Added: trunk/libmnetutil/source/NetworkFunctionsWin32.cxx
===================================================================
--- trunk/libmnetutil/source/NetworkFunctionsWin32.cxx	2007-03-06 21:18:52 UTC (rev 3226)
+++ trunk/libmnetutil/source/NetworkFunctionsWin32.cxx	2007-03-07 09:32:19 UTC (rev 3227)
@@ -0,0 +1,110 @@
+/*
+  Copyright (C) 2006-2007 Mikael Magnusson
+  
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+/*
+ * Authors: Mikael Magnusson <mikma at users.sourceforge.net>
+*/
+
+#define _WIN32_WINNT 0x0501
+#include<config.h>
+#include<libmutil/dbg.h>
+#include"NetworkFunctionsWin32.h"
+
+#include<iostream>
+
+using namespace std;
+
+HINSTANCE hiphlpapi;
+HINSTANCE hws2tcpip;
+
+#ifdef HAVE_GETADAPTERSADDRESSES
+PGETADAPTERSADDRESSES hGetAdaptersAddresses;
+#endif
+
+PGETADDRINFO hgetaddrinfo;
+PFREEADDRINFO hfreeaddrinfo;
+PGETNAMEINFO hgetnameinfo;
+
+void WINXP_exit(){
+#ifdef HAVE_GETADAPTERSADDRESSES
+	hGetAdaptersAddresses = NULL;
+#endif
+	hgetaddrinfo = NULL;
+	hfreeaddrinfo = NULL;
+	hgetnameinfo = NULL;
+	if( hiphlpapi )
+		FreeLibrary( hiphlpapi );
+	hiphlpapi = NULL;
+	if( hws2tcpip )
+		FreeLibrary( hws2tcpip );
+	hws2tcpip = NULL;
+}
+
+bool WINXP_init(){
+	hiphlpapi = LoadLibrary("iphlpapi");
+
+	if( !hiphlpapi ){
+		mdbg << "NetworkFunctionsWin32: no hiphlpapi" << end;
+		WINXP_exit();
+		return false;
+	}
+
+#ifdef HAVE_GETADAPTERSADDRESSES
+	hGetAdaptersAddresses = (PGETADAPTERSADDRESSES)GetProcAddress(hiphlpapi, "GetAdaptersAddresses");
+	
+	if( !hGetAdaptersAddresses ){
+		mdbg << "NetworkFunctionsWin32: no GetAdaptersAddresses" << end;
+		WINXP_exit();
+		return false;
+	}
+#endif // HAVE_GETADAPTERSADDRESSES
+
+	hws2tcpip = LoadLibrary("ws2_32");
+	if( !hws2tcpip ){
+		mdbg << "NetworkFunctionsWin32: no ws2tcpip" << end;
+		WINXP_exit();
+		return false;
+	}
+
+	hgetaddrinfo = (PGETADDRINFO)GetProcAddress(hws2tcpip, "getaddrinfo");
+
+	if( !hgetaddrinfo ){
+		mdbg << "NetworkFunctionsWin32: no getaddrinfo" << end;
+		WINXP_exit();
+		return false;
+	}
+
+	hfreeaddrinfo = (PFREEADDRINFO)GetProcAddress(hws2tcpip, "freeaddrinfo");
+
+	if( !hfreeaddrinfo ){
+		mdbg << "NetworkFunctionsWin32: no freeaddrinfo" << end;
+		WINXP_exit();
+		return false;
+	}
+
+	hgetnameinfo = (PGETNAMEINFO)GetProcAddress(hws2tcpip, "getnameinfo");
+
+	if( !hgetnameinfo ){
+		mdbg << "NetworkFunctionsWin32: no getnameinfo" << end;
+		WINXP_exit();
+		return false;
+	}
+
+	mdbg << "NetworkFunctionsWin32: functions loaded ok" << end;
+	return true;
+}


Property changes on: trunk/libmnetutil/source/NetworkFunctionsWin32.cxx
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native

Added: trunk/libmnetutil/source/NetworkFunctionsWin32.h
===================================================================
--- trunk/libmnetutil/source/NetworkFunctionsWin32.h	2007-03-06 21:18:52 UTC (rev 3226)
+++ trunk/libmnetutil/source/NetworkFunctionsWin32.h	2007-03-07 09:32:19 UTC (rev 3227)
@@ -0,0 +1,64 @@
+/*
+  Copyright (C) 2006-2007 Mikael Magnusson
+  
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+/*
+ * Authors: Mikael Magnusson <mikma at users.sourceforge.net>
+*/
+
+#ifndef NETWORKFUNCTIONSWIN32_H
+#define NETWORKFUNCTIONSWIN32_H
+
+#include<libmnetutil/libmnetutil_config.h>
+#include<windows.h>
+#ifdef HAVE_IPHLPAPI_H
+# include<iphlpapi.h>
+#endif
+#ifdef HAVE_WS2TCPIP_H
+# include<ws2tcpip.h>
+#endif
+
+extern HINSTANCE hiphlpapi;
+extern HINSTANCE hws2tcpip;
+
+#ifdef HAVE_GETADAPTERSADDRESSES
+typedef ULONG WINAPI (*PGETADAPTERSADDRESSES)(ULONG,ULONG,PVOID,PIP_ADAPTER_ADDRESSES,PULONG);
+
+extern PGETADAPTERSADDRESSES hGetAdaptersAddresses;
+#define GetAdaptersAddresses hGetAdaptersAddresses
+#endif // HAVE_GETADAPTERSADDRESSES
+
+typedef int WSAAPI (*PGETNAMEINFO)(const struct sockaddr*,socklen_t,char*,
+				   DWORD,char*,DWORD,int);
+extern PGETNAMEINFO hgetnameinfo;
+#define getnameinfo hgetnameinfo
+#define HAVE_GETNAMEINFO 1
+
+typedef int WSAAPI (*PGETADDRINFO)(const char*,const char*,const struct addrinfo*, struct addrinfo**);
+extern PGETADDRINFO hgetaddrinfo;
+#define getaddrinfo hgetaddrinfo
+#define HAVE_GETADDRINFO 1
+
+typedef void WSAAPI (*PFREEADDRINFO)(struct addrinfo*);
+extern PFREEADDRINFO hfreeaddrinfo;
+#define freeaddrinfo hfreeaddrinfo
+#define HAVE_FREEADDRINFO 1
+
+bool WINXP_init();
+void WINXP_exit();
+
+#endif	// NETWORKFUNCTIONSWIN32_H


Property changes on: trunk/libmnetutil/source/NetworkFunctionsWin32.h
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native



More information about the Minisip-devel mailing list