changeset 51:08d8cbeff30b

Fix for number of args to sctp_connectx
author Sebastien Decugis <sdecugis@nict.go.jp>
date Fri, 27 Nov 2009 17:19:45 +0900
parents 204718b0fa54
children 9bb1006cfa21
files freeDiameter/sctp.c include/freeDiameter/CMakeLists.txt include/freeDiameter/freeDiameter-host.h.in
diffstat 3 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/freeDiameter/sctp.c	Fri Nov 27 16:45:32 2009 +0900
+++ b/freeDiameter/sctp.c	Fri Nov 27 17:19:45 2009 +0900
@@ -734,7 +734,11 @@
 	
 	/* Try connecting */
 	TRACE_DEBUG(FULL, "Attempting SCTP connection (%d addresses attempted)...", count);
+#ifdef SCTP_CONNECTX_4_ARGS
 	CHECK_SYS_DO( sctp_connectx(*sock, sar.sa, count, NULL), { ret = errno; goto fail; } );
+#else /* SCTP_CONNECTX_4_ARGS */
+	CHECK_SYS_DO( sctp_connectx(*sock, sar.sa, count), { ret = errno; goto fail; } );
+#endif /* SCTP_CONNECTX_4_ARGS */
 	free(sar.buf); sar.buf = NULL;
 	
 	/* Set the remaining sockopts */
--- a/include/freeDiameter/CMakeLists.txt	Fri Nov 27 16:45:32 2009 +0900
+++ b/include/freeDiameter/CMakeLists.txt	Fri Nov 27 17:19:45 2009 +0900
@@ -26,6 +26,7 @@
 INCLUDE (CheckFunctionExists)
 INCLUDE (CheckIncludeFiles)
 INCLUDE (CheckSymbolExists) 
+INCLUDE (CheckCSourceCompiles)
 INCLUDE (TestBigEndian)
 
 # We use dlopen and dlclose
@@ -52,15 +53,24 @@
 ENDIF (HAVE_CLOCK_GETTIME)
 SET(FD_LIBS ${FD_LIBS} ${CLOCK_GETTIME_LIBS})
 
-# We need the sctp_getladdrs function ( -lsctp )
+# We need the sctp_connectx function among others
 # We need the IPPROTO_SCTP symbol from sys/socket.h, netinet/in.h or netinet/sctp.h
 IF(NOT DISABLE_SCTP)
-	CHECK_FUNCTION_EXISTS(sctp_getladdrs HAVE_NATIVE_SCTP)
+	CHECK_FUNCTION_EXISTS(sctp_connectx HAVE_NATIVE_SCTP)
 	IF(NOT HAVE_NATIVE_SCTP)
 		FIND_PACKAGE(SCTP REQUIRED)
 		INCLUDE_DIRECTORIES(${SCTP_INCLUDE_DIRS})
 		SET(FD_LIBS ${FD_LIBS} ${SCTP_LIBRARIES})
 	ENDIF(NOT HAVE_NATIVE_SCTP)
+	# Now check the number of args of this function, since it changed between Ubuntu 9.04 and 9.10
+   	SET(CHECK_SCTP_CONNECTX_4_ARGS_SOURCE_CODE "
+		#include <netinet/sctp.h>;
+		int main() {
+		   return sctp_connectx(0, NULL, 0, NULL);
+		}
+		")
+	SET(CMAKE_REQUIRED_LIBRARIES ${SCTP_LIBRARIES})
+	CHECK_C_SOURCE_COMPILES("${CHECK_SCTP_CONNECTX_4_ARGS_SOURCE_CODE}" SCTP_CONNECTX_4_ARGS)
 ENDIF(NOT DISABLE_SCTP)
 
 # Check byte ordering
--- a/include/freeDiameter/freeDiameter-host.h.in	Fri Nov 27 16:45:32 2009 +0900
+++ b/include/freeDiameter/freeDiameter-host.h.in	Fri Nov 27 17:19:45 2009 +0900
@@ -46,6 +46,8 @@
 #cmakedefine DISABLE_SCTP
 #cmakedefine DEBUG_SCTP
 #cmakedefine SCTP_USE_MAPPED_ADDRESSES
+#cmakedefine SCTP_CONNECTX_4_ARGS
+
 #cmakedefine ERRORS_ON_TODO
 #cmakedefine DEBUG
 
"Welcome to our mercurial repository"