From 0496635eddc6844562d96b34852b31da678f8d51 Mon Sep 17 00:00:00 2001 From: mom040267 Date: Sun, 15 Mar 2015 21:08:31 +0000 Subject: [PATCH] fixing SCTP on Linux --- src/apps/common/apputils.c | 14 ++++++++------ src/apps/common/apputils.h | 2 +- src/apps/peer/udpserver.c | 2 +- src/apps/relay/dtls_listener.c | 6 +++--- src/apps/relay/ns_ioalib_engine_impl.c | 4 ++-- src/apps/relay/tls_listener.c | 10 +++++++--- src/apps/relay/turn_admin_server.c | 2 +- src/apps/stunclient/stunclient.c | 4 ++-- src/apps/uclient/startuclient.c | 8 ++++---- 9 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/apps/common/apputils.c b/src/apps/common/apputils.c index 690c60d..b8da9a9 100644 --- a/src/apps/common/apputils.c +++ b/src/apps/common/apputils.c @@ -229,7 +229,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 addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable, int debug) { if (!addr || fd < 0) { @@ -255,11 +255,13 @@ int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable) return -1; } if(ret<0) { - int err = errno; - perror("bind"); - char str[129]; - addr_to_string(addr,(u08bits*)str); - TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "Trying to bind fd %d to <%s>: errno=%d\n", fd, str, err); + if(debug) { + int err = errno; + perror("bind"); + char str[129]; + addr_to_string(addr,(u08bits*)str); + TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "Trying to bind fd %d to <%s>: errno=%d\n", fd, str, err); + } } return ret; } diff --git a/src/apps/common/apputils.h b/src/apps/common/apputils.h index fb3133b..9d87115 100644 --- a/src/apps/common/apputils.h +++ b/src/apps/common/apputils.h @@ -180,7 +180,7 @@ int socket_tcp_set_keepalive(evutil_socket_t fd); 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 addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable, int debug); int addr_get_from_sock(evutil_socket_t fd, ioa_addr *addr); diff --git a/src/apps/peer/udpserver.c b/src/apps/peer/udpserver.c index 4b15f0b..d1b6b51 100644 --- a/src/apps/peer/udpserver.c +++ b/src/apps/peer/udpserver.c @@ -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)<0) return -1; + if(addr_bind(udp_fd,server_addr,1,1)<0) return -1; socket_set_nonblocking(udp_fd); diff --git a/src/apps/relay/dtls_listener.c b/src/apps/relay/dtls_listener.c index 4e4b5d3..7c4d590 100644 --- a/src/apps/relay/dtls_listener.c +++ b/src/apps/relay/dtls_listener.c @@ -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) < 0) { + if (addr_bind(udp_fd,&(s->local_addr),1,1) < 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)<0) { + if(addr_bind(udp_listen_fd,&server->addr,1,1)<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)<0) { + if(addr_bind(udp_listen_fd,&server->addr,1,1)<0) { perror("Cannot bind local socket to addr"); char saddr[129]; addr_to_string(&server->addr,(u08bits*)saddr); diff --git a/src/apps/relay/ns_ioalib_engine_impl.c b/src/apps/relay/ns_ioalib_engine_impl.c index 75890d8..8c1316c 100644 --- a/src/apps/relay/ns_ioalib_engine_impl.c +++ b/src/apps/relay/ns_ioalib_engine_impl.c @@ -940,7 +940,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); + int res = addr_bind(s->fd, local_addr, reusable,1); if (res >= 0) { s->bound = 1; addr_cpy(&(s->local_addr), local_addr); @@ -1598,7 +1598,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)<0) { + if(addr_bind(udp_fd,&(s->local_addr),1,1)<0) { TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,"Cannot bind new detached udp server socket to local addr\n"); close(udp_fd); return ret; diff --git a/src/apps/relay/tls_listener.c b/src/apps/relay/tls_listener.c index 8faf28c..6c62aa2 100644 --- a/src/apps/relay/tls_listener.c +++ b/src/apps/relay/tls_listener.c @@ -38,7 +38,11 @@ #include +#if defined(__linux__) || defined(__LINUX__) || defined(__linux) || defined(linux__) || defined(LINUX) || defined(__LINUX) || defined(LINUX__) +#include +#else #include +#endif /////////////////////////////////////////////////// @@ -148,7 +152,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)<0) { + if(addr_bind(tls_listen_fd,&server->addr,1,1)<0) { perror("Cannot bind local socket to addr"); char saddr[129]; addr_to_string(&server->addr,(u08bits*)saddr); @@ -208,10 +212,10 @@ 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) { + if(addr_bind(tls_listen_fd,&server->addr,1,0)<0) { close(tls_listen_fd); return -1; - } + } socket_tcp_set_keepalive(tls_listen_fd); diff --git a/src/apps/relay/turn_admin_server.c b/src/apps/relay/turn_admin_server.c index a9fb4d3..dcb58cc 100644 --- a/src/apps/relay/turn_admin_server.c +++ b/src/apps/relay/turn_admin_server.c @@ -1270,7 +1270,7 @@ void setup_admin_thread(void) return; } - if(addr_bind(adminserver.listen_fd,&cli_addr,1)<0) { + if(addr_bind(adminserver.listen_fd,&cli_addr,1,1)<0) { perror("Cannot bind CLI socket to addr"); char saddr[129]; addr_to_string(&cli_addr,(u08bits*)saddr); diff --git a/src/apps/stunclient/stunclient.c b/src/apps/stunclient/stunclient.c index 6565d5f..eb1029c 100644 --- a/src/apps/stunclient/stunclient.c +++ b/src/apps/stunclient/stunclient.c @@ -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) < 0) + if (addr_bind(udp_fd, &real_local_addr,0,1) < 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) < 0) + if (addr_bind(new_udp_fd, &real_local_addr,0,1) < 0) err(-1, NULL); } diff --git a/src/apps/uclient/startuclient.c b/src/apps/uclient/startuclient.c index a3fb92a..3153dc5 100644 --- a/src/apps/uclient/startuclient.c +++ b/src/apps/uclient/startuclient.c @@ -259,7 +259,7 @@ static int clnet_connect(uint16_t clnet_remote_port, const char *remote_address, } } - addr_bind(clnet_fd, &local_addr, 0); + addr_bind(clnet_fd, &local_addr, 0, 1); } 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); + addr_bind(clnet_fd, &local_addr,0,1); } 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); + addr_bind(clnet_fd, &(elem->pinfo.tcp_conn[i]->tcp_data_local_addr), 1, 1); 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); + addr_bind(clnet_fd, &(elem->pinfo.tcp_conn[i]->tcp_data_local_addr),1,1); addr_get_from_sock(clnet_fd,&(elem->pinfo.tcp_conn[i]->tcp_data_local_addr));