mirror of
https://github.com/coturn/coturn.git
synced 2025-05-14 01:09:05 +08:00
optional SCTP support added
This commit is contained in:
parent
61239f9aa8
commit
1b279a2a5f
@ -1,3 +1,7 @@
|
||||
3/15/2015 Oleg Moskalenko <mom040267@gmail.com>
|
||||
Version 4.4.3.1 'Ardee West':
|
||||
- SCTP support compilation option;
|
||||
|
||||
2/28/2015 Oleg Moskalenko <mom040267@gmail.com>
|
||||
Version 4.4.2.3 'Ardee West':
|
||||
- bandwidth control fixed;
|
||||
|
12
configure
vendored
12
configure
vendored
@ -1157,12 +1157,22 @@ if [ -z "${LDCONFIG}" ] ; then
|
||||
fi
|
||||
fi
|
||||
|
||||
###############################
|
||||
# SCTP
|
||||
###############################
|
||||
|
||||
if [ -z "${TURN_SCTP}" ] ; then
|
||||
echo "no SCTP support"
|
||||
else
|
||||
echo "compiling with native SCTP client-side support (in place of TCP)"
|
||||
TURN_SCTP="-DTURN_SCTP"
|
||||
fi
|
||||
|
||||
###############################
|
||||
# So, what we have now:
|
||||
###############################
|
||||
|
||||
OSCFLAGS="${OSCFLAGS} ${TURN_NO_THREAD_BARRIERS} ${TURN_NO_DTLS} ${TURN_NO_GCM} ${TURN_NO_TLS} -DINSTALL_PREFIX=${PREFIX} -DTURNDB=${TURNDBDIR}/turndb"
|
||||
OSCFLAGS="${OSCFLAGS} ${TURN_SCTP} ${TURN_NO_THREAD_BARRIERS} ${TURN_NO_DTLS} ${TURN_NO_GCM} ${TURN_NO_TLS} -DINSTALL_PREFIX=${PREFIX} -DTURNDB=${TURNDBDIR}/turndb"
|
||||
|
||||
if ! [ -z "${TURN_ACCEPT_RPATH}" ] ; then
|
||||
if [ -z "${TURN_DISABLE_RPATH}" ] ; then
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
# Common settings script.
|
||||
|
||||
TURNVERSION=4.4.2.3
|
||||
TURNVERSION=4.4.3.1
|
||||
BUILDDIR=~/rpmbuild
|
||||
ARCH=`uname -p`
|
||||
TURNSERVER_SVN_URL=http://coturn.googlecode.com/svn
|
||||
|
@ -1,5 +1,5 @@
|
||||
Name: turnserver
|
||||
Version: 4.4.2.3
|
||||
Version: 4.4.3.1
|
||||
Release: 0%{dist}
|
||||
Summary: Coturn TURN Server
|
||||
|
||||
@ -288,6 +288,8 @@ fi
|
||||
%{_includedir}/turn/client/TurnMsgLib.h
|
||||
|
||||
%changelog
|
||||
* Sun Mar 15 2015 Oleg Moskalenko <mom040267@gmail.com>
|
||||
- Sync to 4.4.3.1
|
||||
* Sat Feb 28 2015 Oleg Moskalenko <mom040267@gmail.com>
|
||||
- Sync to 4.4.2.3
|
||||
* Wed Feb 18 2015 Oleg Moskalenko <mom040267@gmail.com>
|
||||
|
@ -74,7 +74,7 @@ static int udp_create_server_socket(server_type* server,
|
||||
|
||||
if(make_ioa_addr((const u08bits*)local_address, port, server_addr)<0) return -1;
|
||||
|
||||
udp_fd = socket(server_addr->ss.sa_family, SOCK_DGRAM, 0);
|
||||
udp_fd = socket(server_addr->ss.sa_family, RELAY_DGRAM_SOCKET_TYPE, RELAY_DGRAM_SOCKET_PROTOCOL);
|
||||
if (udp_fd < 0) {
|
||||
perror("socket");
|
||||
return -1;
|
||||
|
@ -474,7 +474,7 @@ static int create_new_connected_udp_socket(
|
||||
dtls_listener_relay_server_type* server, ioa_socket_handle s)
|
||||
{
|
||||
|
||||
evutil_socket_t udp_fd = socket(s->local_addr.ss.sa_family, SOCK_DGRAM, 0);
|
||||
evutil_socket_t udp_fd = socket(s->local_addr.ss.sa_family, CLIENT_DGRAM_SOCKET_TYPE, CLIENT_DGRAM_SOCKET_PROTOCOL);
|
||||
if (udp_fd < 0) {
|
||||
perror("socket");
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: Cannot allocate new socket\n",
|
||||
@ -751,7 +751,7 @@ static int create_server_socket(dtls_listener_relay_server_type* server, int rep
|
||||
{
|
||||
ioa_socket_raw udp_listen_fd = -1;
|
||||
|
||||
udp_listen_fd = socket(server->addr.ss.sa_family, SOCK_DGRAM, 0);
|
||||
udp_listen_fd = socket(server->addr.ss.sa_family, CLIENT_DGRAM_SOCKET_TYPE, CLIENT_DGRAM_SOCKET_PROTOCOL);
|
||||
if (udp_listen_fd < 0) {
|
||||
perror("socket");
|
||||
return -1;
|
||||
@ -830,7 +830,7 @@ static int reopen_server_socket(dtls_listener_relay_server_type* server, evutil_
|
||||
return create_server_socket(server,1);
|
||||
}
|
||||
|
||||
ioa_socket_raw udp_listen_fd = socket(server->addr.ss.sa_family, SOCK_DGRAM, 0);
|
||||
ioa_socket_raw udp_listen_fd = socket(server->addr.ss.sa_family, CLIENT_DGRAM_SOCKET_TYPE, CLIENT_DGRAM_SOCKET_PROTOCOL);
|
||||
if (udp_listen_fd < 0) {
|
||||
perror("socket");
|
||||
FUNCEND;
|
||||
|
@ -1690,7 +1690,11 @@ static void set_network_engine(void)
|
||||
turn_params.net_engine_version = NEV_UDP_SOCKET_PER_ENDPOINT;
|
||||
#if defined(SO_REUSEPORT)
|
||||
#if defined(__linux__) || defined(__LINUX__) || defined(__linux) || defined(linux__) || defined(LINUX) || defined(__LINUX) || defined(LINUX__)
|
||||
turn_params.net_engine_version = NEV_UDP_SOCKET_PER_THREAD;
|
||||
if(CLIENT_STREAM_SOCKET_PROTOCOL == IPPROTO_IP) {
|
||||
turn_params.net_engine_version = NEV_UDP_SOCKET_PER_THREAD;
|
||||
} else {
|
||||
turn_params.net_engine_version = NEV_UDP_SOCKET_PER_SESSION;
|
||||
}
|
||||
#else /* BSD ? */
|
||||
turn_params.net_engine_version = NEV_UDP_SOCKET_PER_SESSION;
|
||||
#endif /* Linux */
|
||||
|
@ -892,14 +892,14 @@ int set_socket_options(ioa_socket_handle s)
|
||||
|
||||
/* <<== Socket options helpers */
|
||||
|
||||
ioa_socket_handle create_unbound_ioa_socket(ioa_engine_handle e, int family, SOCKET_TYPE st, SOCKET_APP_TYPE sat)
|
||||
ioa_socket_handle create_unbound_relay_ioa_socket(ioa_engine_handle e, int family, SOCKET_TYPE st, SOCKET_APP_TYPE sat)
|
||||
{
|
||||
evutil_socket_t fd = -1;
|
||||
ioa_socket_handle ret = NULL;
|
||||
|
||||
switch (st){
|
||||
case UDP_SOCKET:
|
||||
fd = socket(family, SOCK_DGRAM, 0);
|
||||
fd = socket(family, RELAY_DGRAM_SOCKET_TYPE, RELAY_DGRAM_SOCKET_PROTOCOL);
|
||||
if (fd < 0) {
|
||||
perror("UDP socket");
|
||||
return NULL;
|
||||
@ -907,7 +907,7 @@ ioa_socket_handle create_unbound_ioa_socket(ioa_engine_handle e, int family, SOC
|
||||
set_sock_buf_size(fd, UR_CLIENT_SOCK_BUF_SIZE);
|
||||
break;
|
||||
case TCP_SOCKET:
|
||||
fd = socket(family, SOCK_STREAM, 0);
|
||||
fd = socket(family, RELAY_STREAM_SOCKET_TYPE, RELAY_STREAM_SOCKET_PROTOCOL);
|
||||
if (fd < 0) {
|
||||
perror("TCP socket");
|
||||
return NULL;
|
||||
@ -1016,7 +1016,7 @@ int create_relay_ioa_sockets(ioa_engine_handle e,
|
||||
if (port >= 0 && even_port > 0) {
|
||||
|
||||
IOA_CLOSE_SOCKET(*rtcp_s);
|
||||
*rtcp_s = create_unbound_ioa_socket(e, relay_addr.ss.sa_family, UDP_SOCKET, RELAY_RTCP_SOCKET);
|
||||
*rtcp_s = create_unbound_relay_ioa_socket(e, relay_addr.ss.sa_family, UDP_SOCKET, RELAY_RTCP_SOCKET);
|
||||
if (*rtcp_s == NULL) {
|
||||
perror("socket");
|
||||
IOA_CLOSE_SOCKET(*rtp_s);
|
||||
@ -1052,7 +1052,7 @@ int create_relay_ioa_sockets(ioa_engine_handle e,
|
||||
|
||||
IOA_CLOSE_SOCKET(*rtp_s);
|
||||
|
||||
*rtp_s = create_unbound_ioa_socket(e, relay_addr.ss.sa_family,
|
||||
*rtp_s = create_unbound_relay_ioa_socket(e, relay_addr.ss.sa_family,
|
||||
(transport == STUN_ATTRIBUTE_TRANSPORT_TCP_VALUE) ? TCP_SOCKET : UDP_SOCKET,
|
||||
RELAY_SOCKET);
|
||||
if (*rtp_s == NULL) {
|
||||
@ -1224,7 +1224,7 @@ static void connect_eventcb(struct bufferevent *bev, short events, void *ptr)
|
||||
|
||||
ioa_socket_handle ioa_create_connecting_tcp_relay_socket(ioa_socket_handle s, ioa_addr *peer_addr, connect_cb cb, void *arg)
|
||||
{
|
||||
ioa_socket_handle ret = create_unbound_ioa_socket(s->e, s->family, s->st, TCP_RELAY_DATA_SOCKET);
|
||||
ioa_socket_handle ret = create_unbound_relay_ioa_socket(s->e, s->family, s->st, TCP_RELAY_DATA_SOCKET);
|
||||
|
||||
if(!ret) {
|
||||
return NULL;
|
||||
@ -1590,7 +1590,7 @@ ioa_socket_handle detach_ioa_socket(ioa_socket_handle s)
|
||||
evutil_socket_t udp_fd = -1;
|
||||
|
||||
if(s->parent_s) {
|
||||
udp_fd = socket(s->local_addr.ss.sa_family, SOCK_DGRAM, 0);
|
||||
udp_fd = socket(s->local_addr.ss.sa_family, CLIENT_DGRAM_SOCKET_TYPE, CLIENT_DGRAM_SOCKET_PROTOCOL);
|
||||
if (udp_fd < 0) {
|
||||
perror("socket");
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,"%s: Cannot allocate new socket\n",__FUNCTION__);
|
||||
|
@ -130,7 +130,7 @@ static int create_server_listener(tls_listener_relay_server_type* server) {
|
||||
|
||||
evutil_socket_t tls_listen_fd = -1;
|
||||
|
||||
tls_listen_fd = socket(server->addr.ss.sa_family, SOCK_STREAM, 0);
|
||||
tls_listen_fd = socket(server->addr.ss.sa_family, CLIENT_STREAM_SOCKET_TYPE, CLIENT_STREAM_SOCKET_PROTOCOL);
|
||||
if (tls_listen_fd < 0) {
|
||||
perror("socket");
|
||||
return -1;
|
||||
|
@ -1263,7 +1263,7 @@ void setup_admin_thread(void)
|
||||
|
||||
addr_set_port(&cli_addr,cli_port);
|
||||
|
||||
adminserver.listen_fd = socket(cli_addr.ss.sa_family, SOCK_STREAM, 0);
|
||||
adminserver.listen_fd = socket(cli_addr.ss.sa_family, ADMIN_STREAM_SOCKET_TYPE, ADMIN_STREAM_SOCKET_PROTOCOL);
|
||||
if (adminserver.listen_fd < 0) {
|
||||
perror("socket");
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,"Cannot open CLI socket\n");
|
||||
|
@ -258,7 +258,7 @@ static int run_stunclient(const char* rip, int rport, int *port, int *rfc5780, i
|
||||
err(-1, NULL);
|
||||
|
||||
if (udp_fd < 0) {
|
||||
udp_fd = socket(remote_addr.ss.sa_family, SOCK_DGRAM, 0);
|
||||
udp_fd = socket(remote_addr.ss.sa_family, CLIENT_DGRAM_SOCKET_TYPE, CLIENT_DGRAM_SOCKET_PROTOCOL);
|
||||
if (udp_fd < 0)
|
||||
err(-1, NULL);
|
||||
|
||||
@ -270,7 +270,7 @@ static int run_stunclient(const char* rip, int rport, int *port, int *rfc5780, i
|
||||
|
||||
if (response_port >= 0) {
|
||||
|
||||
new_udp_fd = socket(remote_addr.ss.sa_family, SOCK_DGRAM, 0);
|
||||
new_udp_fd = socket(remote_addr.ss.sa_family, CLIENT_DGRAM_SOCKET_TYPE, CLIENT_DGRAM_SOCKET_PROTOCOL);
|
||||
if (new_udp_fd < 0)
|
||||
err(-1, NULL);
|
||||
|
||||
|
@ -229,7 +229,9 @@ static int clnet_connect(uint16_t clnet_remote_port, const char *remote_address,
|
||||
|
||||
ns_bzero(&local_addr, sizeof(ioa_addr));
|
||||
|
||||
clnet_fd = socket(remote_addr.ss.sa_family, use_tcp ? SOCK_STREAM : SOCK_DGRAM, 0);
|
||||
clnet_fd = socket(remote_addr.ss.sa_family,
|
||||
use_tcp ? CLIENT_STREAM_SOCKET_TYPE : CLIENT_DGRAM_SOCKET_TYPE,
|
||||
use_tcp ? CLIENT_STREAM_SOCKET_PROTOCOL : CLIENT_DGRAM_SOCKET_PROTOCOL);
|
||||
if (clnet_fd < 0) {
|
||||
perror("socket");
|
||||
exit(-1);
|
||||
@ -1570,7 +1572,7 @@ void tcp_data_connect(app_ur_session *elem, u32bits cid)
|
||||
|
||||
again:
|
||||
|
||||
clnet_fd = socket(elem->pinfo.remote_addr.ss.sa_family, SOCK_STREAM, 0);
|
||||
clnet_fd = socket(elem->pinfo.remote_addr.ss.sa_family, CLIENT_STREAM_SOCKET_TYPE, CLIENT_STREAM_SOCKET_PROTOCOL);
|
||||
if (clnet_fd < 0) {
|
||||
perror("socket");
|
||||
exit(-1);
|
||||
@ -1606,7 +1608,7 @@ void tcp_data_connect(app_ur_session *elem, u32bits cid)
|
||||
if (addr_connect(clnet_fd, &(elem->pinfo.remote_addr),&err) < 0) {
|
||||
if(err == EADDRINUSE) {
|
||||
socket_closesocket(clnet_fd);
|
||||
clnet_fd = socket(elem->pinfo.remote_addr.ss.sa_family, SOCK_STREAM, 0);
|
||||
clnet_fd = socket(elem->pinfo.remote_addr.ss.sa_family, CLIENT_STREAM_SOCKET_TYPE, CLIENT_STREAM_SOCKET_PROTOCOL);
|
||||
if (clnet_fd < 0) {
|
||||
perror("socket");
|
||||
exit(-1);
|
||||
|
@ -31,7 +31,7 @@
|
||||
#ifndef __IOADEFS__
|
||||
#define __IOADEFS__
|
||||
|
||||
#define TURN_SERVER_VERSION "4.4.2.3"
|
||||
#define TURN_SERVER_VERSION "4.4.3.1"
|
||||
#define TURN_SERVER_VERSION_NAME "Ardee West"
|
||||
#define TURN_SOFTWARE "Coturn-" TURN_SERVER_VERSION " '" TURN_SERVER_VERSION_NAME "'"
|
||||
|
||||
@ -218,6 +218,30 @@ typedef u32bits turn_time_t;
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
//#define DGRAM_SOCKET_TYPE SOCK_SEQPACKET
|
||||
//#define DGRAM_SOCKET_PROTOCOL IPPROTO_SCTP
|
||||
|
||||
#define CLIENT_DGRAM_SOCKET_TYPE SOCK_DGRAM
|
||||
#define CLIENT_DGRAM_SOCKET_PROTOCOL IPPROTO_IP
|
||||
|
||||
#define CLIENT_STREAM_SOCKET_TYPE SOCK_STREAM
|
||||
|
||||
#if defined(TURN_SCTP)
|
||||
#define CLIENT_STREAM_SOCKET_PROTOCOL IPPROTO_SCTP
|
||||
#else
|
||||
#define CLIENT_STREAM_SOCKET_PROTOCOL IPPROTO_IP
|
||||
#endif
|
||||
|
||||
#define RELAY_DGRAM_SOCKET_TYPE SOCK_DGRAM
|
||||
#define RELAY_DGRAM_SOCKET_PROTOCOL IPPROTO_IP
|
||||
#define RELAY_STREAM_SOCKET_TYPE SOCK_STREAM
|
||||
#define RELAY_STREAM_SOCKET_PROTOCOL IPPROTO_IP
|
||||
|
||||
#define ADMIN_STREAM_SOCKET_TYPE SOCK_STREAM
|
||||
#define ADMIN_STREAM_SOCKET_PROTOCOL IPPROTO_IP
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -206,7 +206,7 @@ void stop_ioa_timer(ioa_timer_handle th);
|
||||
void delete_ioa_timer(ioa_timer_handle th);
|
||||
#define IOA_EVENT_DEL(E) do { if(E) { delete_ioa_timer(E); E = NULL; } } while(0)
|
||||
|
||||
ioa_socket_handle create_unbound_ioa_socket(ioa_engine_handle e, int family, SOCKET_TYPE st, SOCKET_APP_TYPE sat);
|
||||
ioa_socket_handle create_unbound_relay_ioa_socket(ioa_engine_handle e, int family, SOCKET_TYPE st, SOCKET_APP_TYPE sat);
|
||||
|
||||
void inc_ioa_socket_ref_counter(ioa_socket_handle s);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user