diff --git a/src/apps/relay/ns_ioalib_engine_impl.c b/src/apps/relay/ns_ioalib_engine_impl.c index b7e8396d..13be1dbc 100644 --- a/src/apps/relay/ns_ioalib_engine_impl.c +++ b/src/apps/relay/ns_ioalib_engine_impl.c @@ -1989,23 +1989,23 @@ static int socket_readerr(evutil_socket_t fd, ioa_addr *orig_addr) } #if defined(IP_RECVERR) && defined(SOCK_EXTENDED_ERR_DEFINED) -static void handle_icmp(struct sock_extended_err *e, u32bits *errcode, int isIpv6, int len, size_t clen) +static void handle_icmp(struct sock_extended_err *e, u32bits *errcode, int isIpv6, int len) { if(e && ((!isIpv6 && (e->ee_origin == SO_EE_ORIGIN_ICMP)) || (isIpv6 && (e->ee_origin == SO_EE_ORIGIN_ICMP6)))) { if(errcode) *errcode = e->ee_errno; struct sockaddr* badaddr = SO_EE_OFFENDER(e); - if(badaddr) { + if(badaddr && (badaddr->sa_family != AF_UNSPEC)) { ioa_addr ibadaddr; addr_cpy10(&ibadaddr,badaddr); char saddr[129]; addr_to_string(&ibadaddr, (u08bits*)saddr); - clen -= (sizeof (struct cmsghdr)); - printf("%s: 111.111: %d:%d: ipv6=%d, addr=%s, port=%d, info=%lu, data=%lu, len=%lu, clen=%lu\n",__FUNCTION__,(int)e->ee_type,(int)e->ee_code,isIpv6,saddr, - ntohs(((struct sockaddr_in*)badaddr)->sin_port), - (unsigned long)(e->ee_info),(unsigned long)(e->ee_data), - (unsigned long)len, (unsigned long)clen); + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "ICMP error: type=%d, code=%d, addr=%s, port=%d, pkg.len=%lu\n", + (int)e->ee_type,(int)e->ee_code, + saddr, + addr_get_port(&ibadaddr), + (unsigned long)len); } } } @@ -2084,7 +2084,6 @@ int udp_recvfrom(evutil_socket_t fd, ioa_addr* orig_addr, const ioa_addr *like_a = CMSG_NXTHDR(&msg,cmsgh)) { int l = cmsgh->cmsg_level; int t = cmsgh->cmsg_type; - size_t clen = cmsgh->cmsg_len; switch(l) { case IPPROTO_IP: @@ -2103,7 +2102,7 @@ int udp_recvfrom(evutil_socket_t fd, ioa_addr* orig_addr, const ioa_addr *like_a #endif #if defined(IP_RECVERR) && defined(SOCK_EXTENDED_ERR_DEFINED) case IP_RECVERR: - handle_icmp((struct sock_extended_err*) CMSG_DATA(cmsgh), errcode, 0, len, clen); + handle_icmp((struct sock_extended_err*) CMSG_DATA(cmsgh), errcode, 0, len); break; #endif default: @@ -2127,7 +2126,7 @@ int udp_recvfrom(evutil_socket_t fd, ioa_addr* orig_addr, const ioa_addr *like_a #endif #if defined(IPV6_RECVERR) && defined(SOCK_EXTENDED_ERR_DEFINED) case IPV6_RECVERR: - handle_icmp((struct sock_extended_err*) CMSG_DATA(cmsgh), errcode, 1, len, clen); + handle_icmp((struct sock_extended_err*) CMSG_DATA(cmsgh), errcode, 1, len); break; #endif default: