diff --git a/common/include/tfe_types.h b/common/include/tfe_types.h index 41124c3..6200627 100644 --- a/common/include/tfe_types.h +++ b/common/include/tfe_types.h @@ -2,10 +2,13 @@ #include #include +#include +#include #include #include //defines struct in_addr #include + /* network-order */ struct tfe_stream_addr_tuple4_v4 { @@ -173,3 +176,66 @@ static inline char * tfe_stream_addr_to_str(const struct tfe_stream_addr * addr) return __str_ret; } +static inline void tfe_stream_addr_free(struct tfe_stream_addr *addr) +{ + free(addr); + return; +} +static inline struct tfe_stream_addr * tfe_stream_addr_create_by_fd(int fd) +{ + struct tfe_stream_addr * __stream_addr = NULL; + + struct sockaddr_storage sk_src_storage{}; + struct sockaddr * sk_src_ptr = (struct sockaddr *) &sk_src_storage; + socklen_t sk_src_len = sizeof(sk_src_storage); + + struct sockaddr_storage sk_dst_storage{}; + struct sockaddr * sk_dst_ptr = (struct sockaddr *) &sk_dst_storage; + socklen_t sk_dst_len = sizeof(sk_dst_storage); + + int ret = getsockname(fd, sk_src_ptr, &sk_src_len); + if (ret < 0) + { + goto __errout; + } + + ret = getpeername(fd, sk_dst_ptr, &sk_dst_len); + if (ret < 0) + { + goto __errout; + } + + assert(sk_src_ptr->sa_family == sk_dst_ptr->sa_family); + if (sk_src_ptr->sa_family == AF_INET) + { + __stream_addr = (struct tfe_stream_addr *) malloc( + sizeof(struct tfe_stream_addr) + sizeof(struct tfe_stream_addr_tuple4_v4)); + + struct tfe_stream_addr_ipv4 * st_addr_v4 = __stream_addr->ipv4; + struct sockaddr_in * sk_v4_src_ptr = (struct sockaddr_in *) sk_src_ptr; + struct sockaddr_in * sk_v4_dst_ptr = (struct sockaddr_in *) sk_dst_ptr; + + __stream_addr->addrtype = TFE_ADDR_STREAM_TUPLE4_V4; + __stream_addr->addrlen = sizeof(struct tfe_stream_addr_tuple4_v4); + + st_addr_v4->saddr.s_addr = sk_v4_src_ptr->sin_addr.s_addr; + st_addr_v4->source = sk_v4_src_ptr->sin_port; + st_addr_v4->daddr.s_addr = sk_v4_dst_ptr->sin_addr.s_addr; + st_addr_v4->dest = sk_v4_dst_ptr->sin_port; + } + else if (sk_src_ptr->sa_family == AF_INET6) + { + assert(0); + } + else + { + goto __errout; + } + + return __stream_addr; + +__errout: + if (__stream_addr != NULL) free(__stream_addr); + return NULL; +} + diff --git a/common/src/tfe_utils.cpp b/common/src/tfe_utils.cpp index 7e423fd..5cf6234 100644 --- a/common/src/tfe_utils.cpp +++ b/common/src/tfe_utils.cpp @@ -28,3 +28,4 @@ char* tfe_strdup(const char* s) memcpy(d,s,strlen(s)+1); return d; } + diff --git a/platform/src/ssl_stream.cpp b/platform/src/ssl_stream.cpp index 9d58d8e..bdffb86 100644 --- a/platform/src/ssl_stream.cpp +++ b/platform/src/ssl_stream.cpp @@ -1275,8 +1275,12 @@ retry: if (ctx->retries++ >= MAX_NET_RETRIES) { - TFE_LOG_ERROR(logger, "Failed to shutdown SSL connection cleanly: " - "Max retries reached. Closing fd.\n"); + struct tfe_stream_addr* addr=tfe_stream_addr_create_by_fd(fd); + char* addr_string=tfe_stream_addr_to_str(addr); + TFE_LOG_ERROR(logger, "Failed to shutdown SSL connection cleanly: %s" + "Max retries reached. Closing fd %d.", addr_string, fd); + tfe_stream_addr_free(addr); + free(addr_string); goto complete; } @@ -1289,7 +1293,7 @@ retry: else { TFE_LOG_ERROR(logger, "Failed to shutdown SSL connection cleanly: " - "Cannot create event. Closing fd.\n"); + "Cannot create event. Closing fd %d.", fd); } return; complete: diff --git a/platform/src/tcp_stream.cpp b/platform/src/tcp_stream.cpp index 1333a46..4fd1941 100644 --- a/platform/src/tcp_stream.cpp +++ b/platform/src/tcp_stream.cpp @@ -890,10 +890,10 @@ int tfe_stream_init_by_fds(struct tfe_stream * stream, evutil_socket_t fd_downst __stream_fd_option_setup(_stream, fd_downstream); __stream_fd_option_setup(_stream, fd_upstream); - _stream->head.addr = __stream_addr_create_by_fds(stream, fd_downstream); + _stream->head.addr = tfe_stream_addr_create_by_fd(fd_downstream); if (unlikely(_stream->head.addr == NULL)) { - TFE_LOG_ERROR(_stream->stream_logger, "Failed to fetch address for fd %d, %d, terminate fds.", + TFE_LOG_ERROR(_stream->stream_logger, "Failed to create address from fd %d, %d, terminate fds.", fd_downstream, fd_upstream); goto __errout; }