mirror of
https://github.com/coturn/coturn.git
synced 2025-06-02 11:55:15 +08:00
TOS fixed
This commit is contained in:
parent
0d7d85da58
commit
2e0b8aefcc
@ -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),
|
||||
<p_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 "'"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user