tfe_stream_addr_create_by_fd放到tfe_types.h供ssl_stream调用。
This commit is contained in:
@@ -2,10 +2,13 @@
|
|||||||
|
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <netinet/in.h> //defines struct in_addr
|
#include <netinet/in.h> //defines struct in_addr
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
|
||||||
/* network-order */
|
/* network-order */
|
||||||
struct tfe_stream_addr_tuple4_v4
|
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;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,3 +28,4 @@ char* tfe_strdup(const char* s)
|
|||||||
memcpy(d,s,strlen(s)+1);
|
memcpy(d,s,strlen(s)+1);
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1275,8 +1275,12 @@ retry:
|
|||||||
|
|
||||||
if (ctx->retries++ >= MAX_NET_RETRIES)
|
if (ctx->retries++ >= MAX_NET_RETRIES)
|
||||||
{
|
{
|
||||||
TFE_LOG_ERROR(logger, "Failed to shutdown SSL connection cleanly: "
|
struct tfe_stream_addr* addr=tfe_stream_addr_create_by_fd(fd);
|
||||||
"Max retries reached. Closing fd.\n");
|
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;
|
goto complete;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1289,7 +1293,7 @@ retry:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
TFE_LOG_ERROR(logger, "Failed to shutdown SSL connection cleanly: "
|
TFE_LOG_ERROR(logger, "Failed to shutdown SSL connection cleanly: "
|
||||||
"Cannot create event. Closing fd.\n");
|
"Cannot create event. Closing fd %d.", fd);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
complete:
|
complete:
|
||||||
|
|||||||
@@ -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_downstream);
|
||||||
__stream_fd_option_setup(_stream, fd_upstream);
|
__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))
|
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;
|
fd_downstream, fd_upstream); goto __errout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user