libevent.rpm
mom040267 10 years ago
parent 8b3bd1e97d
commit 8662de6d73
  1. 36
      src/apps/common/apputils.c
  2. 7
      src/apps/common/apputils.h
  3. 2
      src/apps/peer/udpserver.c
  4. 6
      src/apps/relay/dtls_listener.c
  5. 23
      src/apps/relay/ns_ioalib_engine_impl.c
  6. 2
      src/apps/relay/ns_ioalib_impl.h
  7. 8
      src/apps/relay/tls_listener.c
  8. 6
      src/apps/relay/turn_admin_server.c
  9. 4
      src/apps/stunclient/stunclient.c
  10. 8
      src/apps/uclient/startuclient.c
  11. 22
      src/apps/uclient/uclient.c
  12. 2
      src/apps/uclient/uclient.h

@ -56,6 +56,10 @@
#include <sys/stat.h>
#include <sys/resource.h>
#if !defined(TURN_NO_SCTP) && defined(TURN_SCTP_INCLUDE)
#include TURN_SCTP_INCLUDE
#endif
/************************/
int IS_TURN_SERVER = 0;
@ -119,16 +123,18 @@ int set_sock_buf_size(evutil_socket_t fd, int sz0)
return 0;
}
int socket_tcp_set_keepalive(evutil_socket_t fd)
int socket_tcp_set_keepalive(evutil_socket_t fd,SOCKET_TYPE st)
{
UNUSED_ARG(st);
#ifdef SO_KEEPALIVE
/* Set the keepalive option active */
{
int on = 1;
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const void*)&on, (socklen_t) sizeof(on));
}
{
int on = 1;
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const void*)&on, (socklen_t) sizeof(on));
}
#else
UNUSED_ARG(fd);
UNUSED_ARG(fd);
#endif
#ifdef SO_NOSIGPIPE
@ -141,8 +147,9 @@ int socket_tcp_set_keepalive(evutil_socket_t fd)
return 0;
}
int socket_set_reusable(evutil_socket_t fd, int flag)
int socket_set_reusable(evutil_socket_t fd, int flag, SOCKET_TYPE st)
{
UNUSED_ARG(st);
if (fd < 0)
return -1;
@ -170,6 +177,17 @@ int socket_set_reusable(evutil_socket_t fd, int flag)
}
#endif
#if defined(SCTP_REUSE_PORT)
if (use_reuseaddr) {
if((st == SCTP_SOCKET)||(st==TLS_SCTP_SOCKET)||(st==TENTATIVE_SCTP_SOCKET)) {
int on = flag;
int ret = setsockopt(fd, IPPROTO_SCTP, SCTP_REUSE_PORT, (const void*) &on, (socklen_t) sizeof(on));
if (ret < 0)
perror("SCTP_REUSE_PORT");
}
}
#endif
return 0;
}
}
@ -229,7 +247,7 @@ int addr_connect(evutil_socket_t fd, const ioa_addr* addr, int *out_errno)
}
}
int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable, int debug)
int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable, int debug, SOCKET_TYPE st)
{
if (!addr || fd < 0) {
@ -239,7 +257,7 @@ int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable, int debug)
int ret = -1;
socket_set_reusable(fd, reusable);
socket_set_reusable(fd, reusable, st);
if (addr->ss.sa_family == AF_INET) {
do {

@ -37,6 +37,7 @@
#include "ns_turn_ioaddr.h"
#include "ns_turn_msg_defs.h"
#include "ns_turn_ioalib.h"
#ifdef __cplusplus
extern "C" {
@ -173,14 +174,14 @@ void read_spare_buffer(evutil_socket_t fd);
int set_sock_buf_size(evutil_socket_t fd, int sz);
int socket_set_reusable(evutil_socket_t fd, int reusable);
int socket_set_reusable(evutil_socket_t fd, int reusable, SOCKET_TYPE st);
int sock_bind_to_device(evutil_socket_t fd, const unsigned char* ifname);
int socket_set_nonblocking(evutil_socket_t fd);
int socket_tcp_set_keepalive(evutil_socket_t fd);
int socket_tcp_set_keepalive(evutil_socket_t fd, SOCKET_TYPE st);
int addr_connect(evutil_socket_t fd, const ioa_addr* addr, int *out_errno);
int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable, int debug);
int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable, int debug, SOCKET_TYPE st);
int addr_get_from_sock(evutil_socket_t fd, ioa_addr *addr);

@ -86,7 +86,7 @@ static int udp_create_server_socket(server_type* server,
set_sock_buf_size(udp_fd,UR_SERVER_SOCK_BUF_SIZE);
if(addr_bind(udp_fd,server_addr,1,1)<0) return -1;
if(addr_bind(udp_fd,server_addr,1,1,UDP_SOCKET)<0) return -1;
socket_set_nonblocking(udp_fd);

@ -509,7 +509,7 @@ static int create_new_connected_udp_socket(
ret->local_addr_known = 1;
addr_cpy(&(ret->local_addr), &(s->local_addr));
if (addr_bind(udp_fd,&(s->local_addr),1,1) < 0) {
if (addr_bind(udp_fd,&(s->local_addr),1,1,UDP_SOCKET) < 0) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,
"Cannot bind new detached udp server socket to local addr\n");
IOA_CLOSE_SOCKET(ret);
@ -773,7 +773,7 @@ static int create_server_socket(dtls_listener_relay_server_type* server, int rep
int addr_bind_cycle = 0;
retry_addr_bind:
if(addr_bind(udp_listen_fd,&server->addr,1,1)<0) {
if(addr_bind(udp_listen_fd,&server->addr,1,1,UDP_SOCKET)<0) {
perror("Cannot bind local socket to addr");
char saddr[129];
addr_to_string(&server->addr,(u08bits*)saddr);
@ -851,7 +851,7 @@ static int reopen_server_socket(dtls_listener_relay_server_type* server, evutil_
server->ifname);
}
if(addr_bind(udp_listen_fd,&server->addr,1,1)<0) {
if(addr_bind(udp_listen_fd,&server->addr,1,1,UDP_SOCKET)<0) {
perror("Cannot bind local socket to addr");
char saddr[129];
addr_to_string(&server->addr,(u08bits*)saddr);

@ -816,14 +816,14 @@ int set_raw_socket_tos_options(evutil_socket_t fd, int family)
return 0;
}
int set_socket_options_fd(evutil_socket_t fd, int tcp, int family)
int set_socket_options_fd(evutil_socket_t fd, SOCKET_TYPE st, int family)
{
if(fd<0)
return 0;
set_sock_buf_size(fd,UR_CLIENT_SOCK_BUF_SIZE);
if(tcp) {
if(is_stream_socket(st)) {
struct linger so_linger;
so_linger.l_onoff = 1;
so_linger.l_linger = 0;
@ -839,7 +839,7 @@ int set_socket_options_fd(evutil_socket_t fd, int tcp, int family)
socket_set_nonblocking(fd);
if (!tcp) {
if (!is_stream_socket(st)) {
set_raw_socket_ttl_options(fd, family);
set_raw_socket_tos_options(fd, family);
@ -868,12 +868,14 @@ int set_socket_options_fd(evutil_socket_t fd, int tcp, int family)
} else {
int flag = 1;
if(setsockopt(fd, /* socket affected */
if((st == TENTATIVE_TCP_SOCKET)||(st == TCP_SOCKET)||(st == TLS_SOCKET)) {
setsockopt(fd, /* socket affected */
IPPROTO_TCP, /* set option at TCP level */
TCP_NODELAY, /* name of option */
(char*)&flag, /* value */
sizeof(int))<0) { /* length of option value */
sizeof(int)); /* length of option value */
} else {
#if defined(SCTP_NODELAY)
setsockopt(fd, /* socket affected */
IPPROTO_SCTP, /* set option at TCP level */
@ -881,10 +883,9 @@ int set_socket_options_fd(evutil_socket_t fd, int tcp, int family)
(char*)&flag, /* value */
sizeof(int)); /* length of option value */
#endif
}
socket_tcp_set_keepalive(fd);
socket_tcp_set_keepalive(fd,st);
}
return 0;
@ -895,7 +896,7 @@ int set_socket_options(ioa_socket_handle s)
if(!s || (s->parent_s))
return 0;
set_socket_options_fd(s->fd,is_stream_socket(s->st),s->family);
set_socket_options_fd(s->fd,s->st,s->family);
s->default_ttl = get_raw_socket_ttl(s->fd, s->family);
s->current_ttl = s->default_ttl;
@ -998,7 +999,7 @@ static int bind_ioa_socket(ioa_socket_handle s, const ioa_addr* local_addr, int
if (s && s->fd >= 0 && s->e && local_addr) {
int res = addr_bind(s->fd, local_addr, reusable,1);
int res = addr_bind(s->fd, local_addr, reusable,1,s->st);
if (res >= 0) {
s->bound = 1;
addr_cpy(&(s->local_addr), local_addr);
@ -1656,7 +1657,7 @@ ioa_socket_handle detach_ioa_socket(ioa_socket_handle s)
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,"Cannot bind udp server socket to device %s\n",(char*)(s->e->relay_ifname));
}
if(addr_bind(udp_fd,&(s->local_addr),1,1)<0) {
if(addr_bind(udp_fd,&(s->local_addr),1,1,UDP_SOCKET)<0) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,"Cannot bind new detached udp server socket to local addr\n");
close(udp_fd);
return ret;

@ -299,7 +299,7 @@ int ssl_read(evutil_socket_t fd, SSL* ssl, ioa_network_buffer_handle nbh, int ve
int set_raw_socket_ttl_options(evutil_socket_t fd, int family);
int set_raw_socket_tos_options(evutil_socket_t fd, int family);
int set_socket_options_fd(evutil_socket_t fd, int tcp, int family);
int set_socket_options_fd(evutil_socket_t fd, SOCKET_TYPE st, int family);
int set_socket_options(ioa_socket_handle s);
int send_session_cancellation_to_relay(turnsession_id sid);

@ -213,7 +213,7 @@ static int create_server_listener(tls_listener_relay_server_type* server) {
int addr_bind_cycle = 0;
retry_addr_bind:
if(addr_bind(tls_listen_fd,&server->addr,1,1)<0) {
if(addr_bind(tls_listen_fd,&server->addr,1,1,TCP_SOCKET)<0) {
perror("Cannot bind local socket to addr");
char saddr[129];
addr_to_string(&server->addr,(u08bits*)saddr);
@ -228,7 +228,7 @@ static int create_server_listener(tls_listener_relay_server_type* server) {
}
}
socket_tcp_set_keepalive(tls_listen_fd);
socket_tcp_set_keepalive(tls_listen_fd,TCP_SOCKET);
socket_set_nonblocking(tls_listen_fd);
@ -275,12 +275,12 @@ static int sctp_create_server_listener(tls_listener_relay_server_type* server) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO,"Cannot bind listener socket to device %s\n",server->ifname);
}
if(addr_bind(tls_listen_fd,&server->addr,1,0)<0) {
if(addr_bind(tls_listen_fd,&server->addr,1,0,SCTP_SOCKET)<0) {
close(tls_listen_fd);
return -1;
}
socket_tcp_set_keepalive(tls_listen_fd);
socket_tcp_set_keepalive(tls_listen_fd,SCTP_SOCKET);
socket_set_nonblocking(tls_listen_fd);

@ -1163,7 +1163,7 @@ static void cliserver_input_handler(struct evconnlistener *l, evutil_socket_t fd
clisession->rp = get_realm(NULL);
set_socket_options_fd(fd, 1, sa->sa_family);
set_socket_options_fd(fd, TCP_SOCKET, sa->sa_family);
clisession->fd = fd;
@ -1251,7 +1251,7 @@ void setup_admin_thread(void)
return;
}
if(addr_bind(adminserver.listen_fd,&cli_addr,1,1)<0) {
if(addr_bind(adminserver.listen_fd,&cli_addr,1,1,TCP_SOCKET)<0) {
perror("Cannot bind CLI socket to addr");
char saddr[129];
addr_to_string(&cli_addr,(u08bits*)saddr);
@ -1260,7 +1260,7 @@ void setup_admin_thread(void)
return;
}
socket_tcp_set_keepalive(adminserver.listen_fd);
socket_tcp_set_keepalive(adminserver.listen_fd,TCP_SOCKET);
socket_set_nonblocking(adminserver.listen_fd);

@ -263,7 +263,7 @@ static int run_stunclient(const char* rip, int rport, int *port, int *rfc5780, i
err(-1, NULL);
if (!addr_any(&real_local_addr)) {
if (addr_bind(udp_fd, &real_local_addr,0,1) < 0)
if (addr_bind(udp_fd, &real_local_addr,0,1,UDP_SOCKET) < 0)
err(-1, NULL);
}
}
@ -276,7 +276,7 @@ static int run_stunclient(const char* rip, int rport, int *port, int *rfc5780, i
addr_set_port(&real_local_addr, response_port);
if (addr_bind(new_udp_fd, &real_local_addr,0,1) < 0)
if (addr_bind(new_udp_fd, &real_local_addr,0,1,UDP_SOCKET) < 0)
err(-1, NULL);
}

@ -259,7 +259,7 @@ static int clnet_connect(uint16_t clnet_remote_port, const char *remote_address,
}
}
addr_bind(clnet_fd, &local_addr, 0, 1);
addr_bind(clnet_fd, &local_addr, 0, 1, get_socket_type());
} else if (strlen(local_address) > 0) {
@ -267,7 +267,7 @@ static int clnet_connect(uint16_t clnet_remote_port, const char *remote_address,
&local_addr) < 0)
return -1;
addr_bind(clnet_fd, &local_addr,0,1);
addr_bind(clnet_fd, &local_addr,0,1,get_socket_type());
}
if(clnet_info->is_peer) {
@ -1597,7 +1597,7 @@ void tcp_data_connect(app_ur_session *elem, u32bits cid)
addr_set_port(&(elem->pinfo.tcp_conn[i]->tcp_data_local_addr),0);
addr_bind(clnet_fd, &(elem->pinfo.tcp_conn[i]->tcp_data_local_addr), 1, 1);
addr_bind(clnet_fd, &(elem->pinfo.tcp_conn[i]->tcp_data_local_addr), 1, 1, TCP_SOCKET);
addr_get_from_sock(clnet_fd,&(elem->pinfo.tcp_conn[i]->tcp_data_local_addr));
@ -1625,7 +1625,7 @@ void tcp_data_connect(app_ur_session *elem, u32bits cid)
addr_set_port(&(elem->pinfo.tcp_conn[i]->tcp_data_local_addr),0);
addr_bind(clnet_fd, &(elem->pinfo.tcp_conn[i]->tcp_data_local_addr),1,1);
addr_bind(clnet_fd, &(elem->pinfo.tcp_conn[i]->tcp_data_local_addr),1,1,TCP_SOCKET);
addr_get_from_sock(clnet_fd,&(elem->pinfo.tcp_conn[i]->tcp_data_local_addr));

@ -1702,5 +1702,27 @@ int check_integrity(app_ur_conn_info *clnet_info, stun_buffer *message)
return 0;
}
SOCKET_TYPE get_socket_type()
{
if(use_sctp) {
if(use_secure) {
return TLS_SCTP_SOCKET;
} else {
return SCTP_SOCKET;
}
} else if(use_tcp) {
if(use_secure) {
return TLS_SOCKET;
} else {
return TCP_SOCKET;
}
} else {
if(use_secure) {
return DTLS_SOCKET;
} else {
return UDP_SOCKET;
}
}
}
///////////////////////////////////////////

@ -112,6 +112,8 @@ int check_integrity(app_ur_conn_info *clnet_info, stun_buffer *message);
void recalculate_restapi_hmac(SHATYPE st);
SOCKET_TYPE get_socket_type(void);
////////////////////////////////////////////
#ifdef __cplusplus

Loading…
Cancel
Save