1
0
mirror of https://github.com/coturn/coturn.git synced 2025-06-02 11:55:15 +08:00

TOS fixed

This commit is contained in:
mom040267 2015-02-04 06:14:11 +00:00
parent 0d7d85da58
commit 2e0b8aefcc
9 changed files with 152 additions and 142 deletions

@ -1,6 +1,8 @@
2/2/2015 Oleg Moskalenko <mom040267@gmail.com>
Version 4.4.1.3 'Ardee West':
2/3/2015 Oleg Moskalenko <mom040267@gmail.com>
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 <mom040267@gmail.com>
Version 4.4.1.2 'Ardee West':

@ -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

@ -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 <mom040267@gmail.com>
- Sync to 4.4.1.3
* Tue Feb 3 2015 Oleg Moskalenko <mom040267@gmail.com>
- Sync to 4.4.2.1
* Sun Feb 1 2015 Oleg Moskalenko <mom040267@gmail.com>
- Sync to 4.4.1.2
* Sat Jan 24 2015 Oleg Moskalenko <mom040267@gmail.com>

@ -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)

@ -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);

@ -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

@ -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";

@ -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) {

@ -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 "'"