mirror of
https://github.com/coturn/coturn.git
synced 2025-10-28 13:31:16 +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>
|
||||
Version 4.4.4.2 'Ardee West':
|
||||
- minor SCTP fix;
|
||||
- SCTP fixes;
|
||||
|
||||
3/15/2015 Oleg Moskalenko <mom040267@gmail.com>
|
||||
Version 4.4.4.1 'Ardee West':
|
||||
|
||||
@ -30,5 +30,5 @@ fi
|
||||
|
||||
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;
|
||||
#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 (use_reuseaddr) {
|
||||
int on = flag;
|
||||
@ -177,9 +170,10 @@ int socket_set_reusable(evutil_socket_t fd, int flag, SOCKET_TYPE st)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !defined(TURN_NO_SCTP)
|
||||
#if defined(SCTP_REUSE_PORT)
|
||||
if (use_reuseaddr) {
|
||||
if((st == SCTP_SOCKET)||(st==TLS_SCTP_SOCKET)||(st==TENTATIVE_SCTP_SOCKET)) {
|
||||
if(is_sctp_socket(st)) {
|
||||
int on = flag;
|
||||
int ret = setsockopt(fd, IPPROTO_SCTP, SCTP_REUSE_PORT, (const void*) &on, (socklen_t) sizeof(on));
|
||||
if (ret < 0)
|
||||
@ -187,6 +181,14 @@ int socket_set_reusable(evutil_socket_t fd, int flag, SOCKET_TYPE st)
|
||||
}
|
||||
}
|
||||
#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;
|
||||
}
|
||||
@ -434,6 +436,70 @@ int set_raw_socket_tos(evutil_socket_t fd, int family, int tos)
|
||||
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 /////////////////////////////////////////
|
||||
|
||||
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);
|
||||
|
||||
if(is_stream_socket(st)) {
|
||||
if(is_tcp_socket(st)) { /* <<== FREEBSD fix */
|
||||
struct linger so_linger;
|
||||
so_linger.l_onoff = 1;
|
||||
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;
|
||||
|
||||
if((st == TENTATIVE_TCP_SOCKET)||(st == TCP_SOCKET)||(st == TLS_SOCKET)) {
|
||||
if(is_tcp_socket(st)) {
|
||||
setsockopt(fd, /* socket affected */
|
||||
IPPROTO_TCP, /* set option at TCP level */
|
||||
TCP_NODELAY, /* name of option */
|
||||
@ -878,7 +878,7 @@ int set_socket_options_fd(evutil_socket_t fd, SOCKET_TYPE st, int family)
|
||||
} else {
|
||||
#if defined(SCTP_NODELAY)
|
||||
setsockopt(fd, /* socket affected */
|
||||
IPPROTO_SCTP, /* set option at TCP level */
|
||||
IPPROTO_SCTP, /* set option at SCTP level */
|
||||
SCTP_NODELAY, /* name of option */
|
||||
(char*)&flag, /* value */
|
||||
sizeof(int)); /* length of option value */
|
||||
@ -907,46 +907,6 @@ int set_socket_options(ioa_socket_handle s)
|
||||
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 */
|
||||
|
||||
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->broken = 1;
|
||||
}
|
||||
/*
|
||||
bufferevent_flush(s->bev,
|
||||
EV_READ|EV_WRITE,
|
||||
BEV_FLUSH);
|
||||
*/
|
||||
s->in_write = 0;
|
||||
} else {
|
||||
//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 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_ssl_method(ioa_socket_handle s);
|
||||
SOCKET_TYPE get_ioa_socket_type(ioa_socket_handle s);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user