Browse Source

TOS fixed

mom040267 11 years ago
parent
commit
2e0b8aefcc

+ 4 - 2
ChangeLog

@@ -1,6 +1,8 @@
-2/2/2015 Oleg Moskalenko <[email protected]>
-Version 4.4.1.3 'Ardee West':
+2/3/2015 Oleg Moskalenko <[email protected]>
+Version 4.4.2.1 'Ardee West':
 	- SHA-512 added to oAuth;
+	- updates according to the new third-party-auth draft (oauth);
+	- TOS behavior fixed;
 	
 2/1/2015 Oleg Moskalenko <[email protected]>
 Version 4.4.1.2 'Ardee West':

+ 1 - 1
rpm/build.settings.sh

@@ -2,7 +2,7 @@
 
 # Common settings script.
 
-TURNVERSION=4.4.1.3
+TURNVERSION=4.4.2.1
 BUILDDIR=~/rpmbuild
 ARCH=`uname -p`
 TURNSERVER_SVN_URL=http://coturn.googlecode.com/svn

+ 3 - 3
rpm/turnserver.spec

@@ -1,5 +1,5 @@
 Name:		turnserver
-Version:	4.4.1.3
+Version:	4.4.2.1
 Release:	0%{dist}
 Summary:	Coturn TURN Server
 
@@ -288,8 +288,8 @@ fi
 %{_includedir}/turn/client/TurnMsgLib.h
 
 %changelog
-* Sun Feb 2 2015 Oleg Moskalenko <[email protected]>
-  - Sync to 4.4.1.3
+* Tue Feb 3 2015 Oleg Moskalenko <[email protected]>
+  - Sync to 4.4.2.1
 * Sun Feb 1 2015 Oleg Moskalenko <[email protected]>
   - Sync to 4.4.1.2
 * Sat Jan 24 2015 Oleg Moskalenko <[email protected]>

+ 125 - 0
src/apps/common/apputils.c

@@ -289,6 +289,131 @@ int addr_get_from_sock(evutil_socket_t fd, ioa_addr *addr)
 	}
 }
 
+int get_raw_socket_ttl(evutil_socket_t fd, int family)
+{
+	int ttl = 0;
+
+	if(family == AF_INET6) {
+#if !defined(IPV6_UNICAST_HOPS)
+		UNUSED_ARG(fd);
+		do { return TTL_IGNORE; } while(0);
+#else
+		socklen_t slen = (socklen_t)sizeof(ttl);
+		if(getsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl,&slen)<0) {
+			perror("get HOPLIMIT on socket");
+			return TTL_IGNORE;
+		}
+#endif
+	} else {
+#if !defined(IP_TTL)
+		UNUSED_ARG(fd);
+		do { return TTL_IGNORE; } while(0);
+#else
+		socklen_t slen = (socklen_t)sizeof(ttl);
+		if(getsockopt(fd, IPPROTO_IP, IP_TTL, &ttl,&slen)<0) {
+			perror("get TTL on socket");
+			return TTL_IGNORE;
+		}
+#endif
+	}
+
+	CORRECT_RAW_TTL(ttl);
+
+	return ttl;
+}
+
+int get_raw_socket_tos(evutil_socket_t fd, int family)
+{
+	int tos = 0;
+
+	if(family == AF_INET6) {
+#if !defined(IPV6_TCLASS)
+		UNUSED_ARG(fd);
+		do { return TOS_IGNORE; } while(0);
+#else
+		socklen_t slen = (socklen_t)sizeof(tos);
+		if(getsockopt(fd, IPPROTO_IPV6, IPV6_TCLASS, &tos,&slen)<0) {
+			perror("get TCLASS on socket");
+			return -1;
+		}
+#endif
+	} else {
+#if !defined(IP_TOS)
+		UNUSED_ARG(fd);
+		do { return TOS_IGNORE; } while(0);
+#else
+		socklen_t slen = (socklen_t)sizeof(tos);
+		if(getsockopt(fd, IPPROTO_IP, IP_TOS, &tos,&slen)<0) {
+			perror("get TOS on socket");
+			return -1;
+		}
+#endif
+	}
+
+	CORRECT_RAW_TOS(tos);
+
+	return tos;
+}
+
+int set_raw_socket_ttl(evutil_socket_t fd, int family, int ttl)
+{
+
+	if(family == AF_INET6) {
+#if !defined(IPV6_UNICAST_HOPS)
+		UNUSED_ARG(fd);
+		UNUSED_ARG(ttl);
+#else
+		CORRECT_RAW_TTL(ttl);
+		if(setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl,sizeof(ttl))<0) {
+			perror("set HOPLIMIT on socket");
+			return -1;
+		}
+#endif
+	} else {
+#if !defined(IP_TTL)
+		UNUSED_ARG(fd);
+		UNUSED_ARG(ttl);
+#else
+		CORRECT_RAW_TTL(ttl);
+		if(setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl,sizeof(ttl))<0) {
+			perror("set TTL on socket");
+			return -1;
+		}
+#endif
+	}
+
+	return 0;
+}
+
+int set_raw_socket_tos(evutil_socket_t fd, int family, int tos)
+{
+
+	if(family == AF_INET6) {
+#if !defined(IPV6_TCLASS)
+		UNUSED_ARG(fd);
+		UNUSED_ARG(tos);
+#else
+		CORRECT_RAW_TOS(tos);
+		if(setsockopt(fd, IPPROTO_IPV6, IPV6_TCLASS, &tos,sizeof(tos))<0) {
+			perror("set TCLASS on socket");
+			return -1;
+		}
+#endif
+	} else {
+#if !defined(IP_TOS)
+		UNUSED_ARG(fd);
+		UNUSED_ARG(tos);
+#else
+		if(setsockopt(fd, IPPROTO_IP, IP_TOS, &tos,sizeof(tos))<0) {
+			perror("set TOS on socket");
+			return -1;
+		}
+#endif
+	}
+
+	return 0;
+}
+
 /////////////////// MTU /////////////////////////////////////////
 
 int set_socket_df(evutil_socket_t fd, int family, int value)

+ 8 - 0
src/apps/common/apputils.h

@@ -186,6 +186,14 @@ int addr_get_from_sock(evutil_socket_t fd, ioa_addr *addr);
 
 int handle_socket_error(void);
 
+#define CORRECT_RAW_TTL(ttl) do { if(ttl<0 || ttl>255) ttl=TTL_DEFAULT; } while(0)
+#define CORRECT_RAW_TOS(tos) do { if(tos<0 || tos>255) tos=TOS_DEFAULT; } while(0)
+
+int set_raw_socket_tos(evutil_socket_t fd, int family, int tos);
+int set_raw_socket_ttl(evutil_socket_t fd, int family, int ttl);
+int get_raw_socket_tos(evutil_socket_t fd, int family);
+int get_raw_socket_ttl(evutil_socket_t fd, int family);
+
 /////////////////////// SYS /////////////////////
 
 void ignore_sigpipe(void);

+ 4 - 132
src/apps/relay/ns_ioalib_engine_impl.c

@@ -355,16 +355,16 @@ ioa_engine_handle create_ioa_engine(super_memory_t *sm,
 #if !defined(CMSG_SPACE)
 		TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "On this platform, I am using alternative behavior of TTL/TOS according to RFC 5766.\n");
 #endif
-#if !defined(IP_RECVTTL)
+#if !defined(IP_RECVTTL) || !defined(IP_TTL)
 		TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "IPv4: On this platform, I am using alternative behavior of TTL according to RFC 5766.\n");
 #endif
-#if !defined(IPV6_RECVHOPLIMIT)
+#if !defined(IPV6_RECVHOPLIMIT) || !defined(IPV6_HOPLIMIT)
 		TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "IPv6: On this platform, I am using alternative behavior of TTL (HOPLIMIT) according to RFC 6156.\n");
 #endif
-#if !defined(IP_RECVTOS)
+#if !defined(IP_RECVTOS) || !defined(IP_TOS)
 		TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "IPv4: On this platform, I am using alternative behavior of TOS according to RFC 5766.\n");
 #endif
-#if !defined(IPV6_RECVTCLASS)
+#if !defined(IPV6_RECVTCLASS) || !defined(IPV6_TCLASS)
 		TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "IPv6: On this platform, I am using alternative behavior of TRAFFIC CLASS according to RFC 6156.\n");
 #endif
 	}
@@ -706,134 +706,6 @@ int get_ioa_socket_from_reservation(ioa_engine_handle e, u64bits in_reservation_
 
 /* Socket options helpers ==>> */
 
-#define CORRECT_RAW_TTL(ttl) do { if(ttl<0 || ttl>255) ttl=TTL_DEFAULT; } while(0)
-#define CORRECT_RAW_TOS(tos) do { if(tos<0 || tos>255) tos=TOS_DEFAULT; } while(0)
-
-static int get_raw_socket_ttl(evutil_socket_t fd, int family)
-{
-	int ttl = 0;
-
-	if(family == AF_INET6) {
-#if !defined(IPV6_RECVHOPLIMIT)
-		UNUSED_ARG(fd);
-		do { return TTL_IGNORE; } while(0);
-#else
-		socklen_t slen = (socklen_t)sizeof(ttl);
-		if(getsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl,&slen)<0) {
-			perror("get HOPLIMIT on socket");
-			return TTL_IGNORE;
-		}
-#endif
-	} else {
-#if !defined(IP_RECVTTL)
-		UNUSED_ARG(fd);
-		do { return TTL_IGNORE; } while(0);
-#else
-		socklen_t slen = (socklen_t)sizeof(ttl);
-		if(getsockopt(fd, IPPROTO_IP, IP_TTL, &ttl,&slen)<0) {
-			perror("get TTL on socket");
-			return TTL_IGNORE;
-		}
-#endif
-	}
-
-	CORRECT_RAW_TTL(ttl);
-
-	return ttl;
-}
-
-static int get_raw_socket_tos(evutil_socket_t fd, int family)
-{
-	int tos = 0;
-
-	if(family == AF_INET6) {
-#if !defined(IPV6_RECVTCLASS)
-		UNUSED_ARG(fd);
-		do { return TOS_IGNORE; } while(0);
-#else
-		socklen_t slen = (socklen_t)sizeof(tos);
-		if(getsockopt(fd, IPPROTO_IPV6, IPV6_TCLASS, &tos,&slen)<0) {
-			perror("get TCLASS on socket");
-			return -1;
-		}
-#endif
-	} else {
-#if !defined(IP_RECVTOS)
-		UNUSED_ARG(fd);
-		do { return TOS_IGNORE; } while(0);
-#else
-		socklen_t slen = (socklen_t)sizeof(tos);
-		if(getsockopt(fd, IPPROTO_IP, IP_TOS, &tos,&slen)<0) {
-			perror("get TOS on socket");
-			return -1;
-		}
-#endif
-	}
-
-	CORRECT_RAW_TOS(tos);
-
-	return tos;
-}
-
-static int set_raw_socket_ttl(evutil_socket_t fd, int family, int ttl)
-{
-
-	if(family == AF_INET6) {
-#if !defined(IPV6_RECVHOPLIMIT)
-		UNUSED_ARG(fd);
-		UNUSED_ARG(ttl);
-#else
-		CORRECT_RAW_TTL(ttl);
-		if(setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl,sizeof(ttl))<0) {
-			perror("set HOPLIMIT on socket");
-			return -1;
-		}
-#endif
-	} else {
-#if !defined(IP_RECVTTL)
-		UNUSED_ARG(fd);
-		UNUSED_ARG(ttl);
-#else
-		CORRECT_RAW_TTL(ttl);
-		if(setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl,sizeof(ttl))<0) {
-			perror("set TTL on socket");
-			return -1;
-		}
-#endif
-	}
-
-	return 0;
-}
-
-static int set_raw_socket_tos(evutil_socket_t fd, int family, int tos)
-{
-
-	if(family == AF_INET6) {
-#if !defined(IPV6_RECVTCLASS)
-		UNUSED_ARG(fd);
-		UNUSED_ARG(tos);
-#else
-		CORRECT_RAW_TOS(tos);
-		if(setsockopt(fd, IPPROTO_IPV6, IPV6_TCLASS, &tos,sizeof(tos))<0) {
-			perror("set TCLASS on socket");
-			return -1;
-		}
-#endif
-	} else {
-#if !defined(IPV6_RECVTOS)
-		UNUSED_ARG(fd);
-		UNUSED_ARG(tos);
-#else
-		if(setsockopt(fd, IPPROTO_IP, IP_TOS, &tos,sizeof(tos))<0) {
-			perror("set TOS on socket");
-			return -1;
-		}
-#endif
-	}
-
-	return 0;
-}
-
 static int set_socket_ttl(ioa_socket_handle s, int ttl)
 {
 	if(s->default_ttl < 0) //Unsupported

+ 3 - 3
src/apps/rfc5769/rfc5769check.c

@@ -82,12 +82,12 @@ static int check_oauth(void) {
 
 	size_t i_hmacs,i_shas,i_encs;
 
-	const char long_term_password[33] = "HGkj32KJGiuy098sdfaqbNjOiaz71923";
+	const char long_term_key[33] = "HGkj32KJGiuy098sdfaqbNjOiaz71923";
 
 	size_t ltp_output_length=0;
 
-	const char* base64encoded_ltp = base64_encode((const unsigned char *)long_term_password,
-						      strlen(long_term_password),
+	const char* base64encoded_ltp = base64_encode((const unsigned char *)long_term_key,
+						      strlen(long_term_key),
 						      &ltp_output_length);
 
 	const char mac_key[33] = "ZksjpweoixXmvn67534m";

+ 3 - 0
src/apps/uclient/startuclient.c

@@ -242,6 +242,9 @@ static int clnet_connect(uint16_t clnet_remote_port, const char *remote_address,
 
 	set_sock_buf_size(clnet_fd, UR_CLIENT_SOCK_BUF_SIZE);
 
+	set_raw_socket_tos(clnet_fd, remote_addr.ss.sa_family, 0x22);
+	set_raw_socket_ttl(clnet_fd, remote_addr.ss.sa_family, 47);
+
 	if(clnet_info->is_peer && (*local_address==0)) {
 
 		if(remote_addr.ss.sa_family == AF_INET6) {

+ 1 - 1
src/ns_turn_defs.h

@@ -31,7 +31,7 @@
 #ifndef __IOADEFS__
 #define __IOADEFS__
 
-#define TURN_SERVER_VERSION "4.4.1.3"
+#define TURN_SERVER_VERSION "4.4.2.1"
 #define TURN_SERVER_VERSION_NAME "Ardee West"
 #define TURN_SOFTWARE "Coturn-" TURN_SERVER_VERSION " '" TURN_SERVER_VERSION_NAME "'"