mirror of
https://github.com/coturn/coturn.git
synced 2025-10-29 14:01:01 +01:00
SCTP fixes.
This commit is contained in:
parent
8662de6d73
commit
948a61d250
@ -1,6 +1,6 @@
|
|||||||
3/31/2015 Oleg Moskalenko <mom040267@gmail.com>
|
3/31/2015 Oleg Moskalenko <mom040267@gmail.com>
|
||||||
Version 4.4.4.2 'Ardee West':
|
Version 4.4.4.2 'Ardee West':
|
||||||
- minor SCTP fix;
|
- SCTP fixes;
|
||||||
|
|
||||||
3/15/2015 Oleg Moskalenko <mom040267@gmail.com>
|
3/15/2015 Oleg Moskalenko <mom040267@gmail.com>
|
||||||
Version 4.4.4.1 'Ardee West':
|
Version 4.4.4.1 'Ardee West':
|
||||||
|
|||||||
@ -30,5 +30,5 @@ fi
|
|||||||
|
|
||||||
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib/
|
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib/
|
||||||
|
|
||||||
PATH=examples/bin/:../bin:./bin/:${PATH} turnutils_uclient -b -S -k turn_client_pkey.pem -n 1000 -m 10 -l 170 -e 127.0.0.1 -X -g -u gorst -w hero $@ ::1
|
PATH=examples/bin/:../bin:./bin/:${PATH} turnutils_uclient -b -k turn_client_pkey.pem -n 1000 -m 10 -l 170 -e 127.0.0.1 -X -g -u gorst -w hero $@ ::1
|
||||||
|
|
||||||
|
|||||||
@ -161,13 +161,6 @@ int socket_set_reusable(evutil_socket_t fd, int flag, SOCKET_TYPE st)
|
|||||||
int use_reuseaddr = 1;
|
int use_reuseaddr = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SO_REUSEPORT)
|
|
||||||
if (use_reuseaddr) {
|
|
||||||
int on = flag;
|
|
||||||
setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, (const void*) &on, (socklen_t) sizeof(on));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(SO_REUSEADDR)
|
#if defined(SO_REUSEADDR)
|
||||||
if (use_reuseaddr) {
|
if (use_reuseaddr) {
|
||||||
int on = flag;
|
int on = flag;
|
||||||
@ -177,9 +170,10 @@ int socket_set_reusable(evutil_socket_t fd, int flag, SOCKET_TYPE st)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(TURN_NO_SCTP)
|
||||||
#if defined(SCTP_REUSE_PORT)
|
#if defined(SCTP_REUSE_PORT)
|
||||||
if (use_reuseaddr) {
|
if (use_reuseaddr) {
|
||||||
if((st == SCTP_SOCKET)||(st==TLS_SCTP_SOCKET)||(st==TENTATIVE_SCTP_SOCKET)) {
|
if(is_sctp_socket(st)) {
|
||||||
int on = flag;
|
int on = flag;
|
||||||
int ret = setsockopt(fd, IPPROTO_SCTP, SCTP_REUSE_PORT, (const void*) &on, (socklen_t) sizeof(on));
|
int ret = setsockopt(fd, IPPROTO_SCTP, SCTP_REUSE_PORT, (const void*) &on, (socklen_t) sizeof(on));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -187,6 +181,14 @@ int socket_set_reusable(evutil_socket_t fd, int flag, SOCKET_TYPE st)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(SO_REUSEPORT)
|
||||||
|
if (use_reuseaddr) {
|
||||||
|
int on = flag;
|
||||||
|
setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, (const void*) &on, (socklen_t) sizeof(on));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -434,6 +436,70 @@ int set_raw_socket_tos(evutil_socket_t fd, int family, int tos)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int is_stream_socket(int st) {
|
||||||
|
switch(st) {
|
||||||
|
case TCP_SOCKET:
|
||||||
|
case TLS_SOCKET:
|
||||||
|
case TENTATIVE_TCP_SOCKET:
|
||||||
|
case SCTP_SOCKET:
|
||||||
|
case TLS_SCTP_SOCKET:
|
||||||
|
case TENTATIVE_SCTP_SOCKET:
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int is_tcp_socket(int st) {
|
||||||
|
switch(st) {
|
||||||
|
case TCP_SOCKET:
|
||||||
|
case TLS_SOCKET:
|
||||||
|
case TENTATIVE_TCP_SOCKET:
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int is_sctp_socket(int st) {
|
||||||
|
switch(st) {
|
||||||
|
case SCTP_SOCKET:
|
||||||
|
case TLS_SCTP_SOCKET:
|
||||||
|
case TENTATIVE_SCTP_SOCKET:
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* socket_type_name(SOCKET_TYPE st)
|
||||||
|
{
|
||||||
|
switch(st) {
|
||||||
|
case TCP_SOCKET:
|
||||||
|
return "TCP";
|
||||||
|
case SCTP_SOCKET:
|
||||||
|
return "SCTP";
|
||||||
|
case UDP_SOCKET:
|
||||||
|
return "UDP";
|
||||||
|
case TLS_SOCKET:
|
||||||
|
return "TLS/TCP";
|
||||||
|
case TLS_SCTP_SOCKET:
|
||||||
|
return "TLS/SCTP";
|
||||||
|
case DTLS_SOCKET:
|
||||||
|
return "DTLS";
|
||||||
|
case TENTATIVE_TCP_SOCKET:
|
||||||
|
return "TLS/TCP ?";
|
||||||
|
case TENTATIVE_SCTP_SOCKET:
|
||||||
|
return "TLS/SCTP ?";
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
};
|
||||||
|
return "UNKNOWN";
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////// MTU /////////////////////////////////////////
|
/////////////////// MTU /////////////////////////////////////////
|
||||||
|
|
||||||
int set_socket_df(evutil_socket_t fd, int family, int value)
|
int set_socket_df(evutil_socket_t fd, int family, int value)
|
||||||
|
|||||||
@ -823,7 +823,7 @@ int set_socket_options_fd(evutil_socket_t fd, SOCKET_TYPE st, int family)
|
|||||||
|
|
||||||
set_sock_buf_size(fd,UR_CLIENT_SOCK_BUF_SIZE);
|
set_sock_buf_size(fd,UR_CLIENT_SOCK_BUF_SIZE);
|
||||||
|
|
||||||
if(is_stream_socket(st)) {
|
if(is_tcp_socket(st)) { /* <<== FREEBSD fix */
|
||||||
struct linger so_linger;
|
struct linger so_linger;
|
||||||
so_linger.l_onoff = 1;
|
so_linger.l_onoff = 1;
|
||||||
so_linger.l_linger = 0;
|
so_linger.l_linger = 0;
|
||||||
@ -869,7 +869,7 @@ int set_socket_options_fd(evutil_socket_t fd, SOCKET_TYPE st, int family)
|
|||||||
|
|
||||||
int flag = 1;
|
int flag = 1;
|
||||||
|
|
||||||
if((st == TENTATIVE_TCP_SOCKET)||(st == TCP_SOCKET)||(st == TLS_SOCKET)) {
|
if(is_tcp_socket(st)) {
|
||||||
setsockopt(fd, /* socket affected */
|
setsockopt(fd, /* socket affected */
|
||||||
IPPROTO_TCP, /* set option at TCP level */
|
IPPROTO_TCP, /* set option at TCP level */
|
||||||
TCP_NODELAY, /* name of option */
|
TCP_NODELAY, /* name of option */
|
||||||
@ -878,7 +878,7 @@ int set_socket_options_fd(evutil_socket_t fd, SOCKET_TYPE st, int family)
|
|||||||
} else {
|
} else {
|
||||||
#if defined(SCTP_NODELAY)
|
#if defined(SCTP_NODELAY)
|
||||||
setsockopt(fd, /* socket affected */
|
setsockopt(fd, /* socket affected */
|
||||||
IPPROTO_SCTP, /* set option at TCP level */
|
IPPROTO_SCTP, /* set option at SCTP level */
|
||||||
SCTP_NODELAY, /* name of option */
|
SCTP_NODELAY, /* name of option */
|
||||||
(char*)&flag, /* value */
|
(char*)&flag, /* value */
|
||||||
sizeof(int)); /* length of option value */
|
sizeof(int)); /* length of option value */
|
||||||
@ -907,46 +907,6 @@ int set_socket_options(ioa_socket_handle s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int is_stream_socket(int st) {
|
|
||||||
switch(st) {
|
|
||||||
case TCP_SOCKET:
|
|
||||||
case TLS_SOCKET:
|
|
||||||
case TENTATIVE_TCP_SOCKET:
|
|
||||||
case SCTP_SOCKET:
|
|
||||||
case TLS_SCTP_SOCKET:
|
|
||||||
case TENTATIVE_SCTP_SOCKET:
|
|
||||||
return 1;
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* socket_type_name(SOCKET_TYPE st)
|
|
||||||
{
|
|
||||||
switch(st) {
|
|
||||||
case TCP_SOCKET:
|
|
||||||
return "TCP";
|
|
||||||
case SCTP_SOCKET:
|
|
||||||
return "SCTP";
|
|
||||||
case UDP_SOCKET:
|
|
||||||
return "UDP";
|
|
||||||
case TLS_SOCKET:
|
|
||||||
return "TLS/TCP";
|
|
||||||
case TLS_SCTP_SOCKET:
|
|
||||||
return "TLS/SCTP";
|
|
||||||
case DTLS_SOCKET:
|
|
||||||
return "DTLS";
|
|
||||||
case TENTATIVE_TCP_SOCKET:
|
|
||||||
return "TLS/TCP ?";
|
|
||||||
case TENTATIVE_SCTP_SOCKET:
|
|
||||||
return "TLS/SCTP ?";
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
};
|
|
||||||
return "UNKNOWN";
|
|
||||||
}
|
|
||||||
|
|
||||||
/* <<== Socket options helpers */
|
/* <<== Socket options helpers */
|
||||||
|
|
||||||
ioa_socket_handle create_unbound_relay_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)
|
||||||
@ -3171,6 +3131,11 @@ int send_data_from_ioa_socket_nbh(ioa_socket_handle s, ioa_addr* dest_addr,
|
|||||||
s->tobeclosed = 1;
|
s->tobeclosed = 1;
|
||||||
s->broken = 1;
|
s->broken = 1;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
bufferevent_flush(s->bev,
|
||||||
|
EV_READ|EV_WRITE,
|
||||||
|
BEV_FLUSH);
|
||||||
|
*/
|
||||||
s->in_write = 0;
|
s->in_write = 0;
|
||||||
} else {
|
} else {
|
||||||
//drop the packet
|
//drop the packet
|
||||||
|
|||||||
@ -231,7 +231,9 @@ int get_ioa_socket_from_reservation(ioa_engine_handle e, u64bits in_reservation_
|
|||||||
|
|
||||||
int get_ioa_socket_address_family(ioa_socket_handle s);
|
int get_ioa_socket_address_family(ioa_socket_handle s);
|
||||||
int is_stream_socket(int st);
|
int is_stream_socket(int st);
|
||||||
const char* socket_type_name(SOCKET_TYPE st);
|
int is_tcp_socket(int st);
|
||||||
|
int is_sctp_socket(int st);
|
||||||
|
const char* socket_type_name(SOCKET_TYPE st);
|
||||||
const char* get_ioa_socket_cipher(ioa_socket_handle s);
|
const char* get_ioa_socket_cipher(ioa_socket_handle s);
|
||||||
const char* get_ioa_socket_ssl_method(ioa_socket_handle s);
|
const char* get_ioa_socket_ssl_method(ioa_socket_handle s);
|
||||||
SOCKET_TYPE get_ioa_socket_type(ioa_socket_handle s);
|
SOCKET_TYPE get_ioa_socket_type(ioa_socket_handle s);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user