From 3cb644d728815f41e2844eac38c15f2a1d946de5 Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Sun, 29 Jan 2023 23:26:16 +0800 Subject: [PATCH] log: optimize proxy log --- src/proxy.c | 81 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/src/proxy.c b/src/proxy.c index e7bf2e1..5eb1b51 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -499,7 +499,8 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co buff[3] = PROXY_SOCKS5_AUTH_USER_PASS; len = send(proxy_conn->fd, buff, 4, MSG_NOSIGNAL); if (len != 4) { - tlog(TLOG_ERROR, "init socks5 failed, %s", strerror(errno)); + tlog(TLOG_ERROR, "connect socks5 server %s failed, %s", proxy_conn->server_info->proxy_name, + strerror(errno)); return PROXY_HANDSHAKE_ERR; } @@ -514,7 +515,8 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co return PROXY_HANDSHAKE_WANT_READ; } - tlog(TLOG_ERROR, "recv socks5 init ack failed, %s", strerror(errno)); + tlog(TLOG_ERROR, "recv socks5 init ack from %s failed, %s", proxy_conn->server_info->proxy_name, + strerror(errno)); return PROXY_HANDSHAKE_ERR; } @@ -524,23 +526,24 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co } if (proxy_conn->buffer.len > 2) { - tlog(TLOG_ERROR, "recv socks5 init ack failed"); + tlog(TLOG_ERROR, "recv socks5 init ack from %s failed", proxy_conn->server_info->proxy_name); return PROXY_HANDSHAKE_ERR; } proxy_conn->buffer.len = 0; if (proxy_conn->buffer.buffer[0] != PROXY_SOCKS5_VERSION) { - tlog(TLOG_ERROR, "server not support socks5"); + tlog(TLOG_ERROR, "server %s not support socks5", proxy_conn->server_info->proxy_name); return PROXY_HANDSHAKE_ERR; } if ((unsigned char)proxy_conn->buffer.buffer[1] == PROXY_SOCKS5_AUTH_NONE) { - tlog(TLOG_ERROR, "server not support auth methods"); + tlog(TLOG_ERROR, "server %s not support auth methods", proxy_conn->server_info->proxy_name); return PROXY_HANDSHAKE_ERR; } - tlog(TLOG_INFO, "server select auth method is %d", proxy_conn->buffer.buffer[1]); + tlog(TLOG_INFO, "server %s select auth method is %d", proxy_conn->server_info->proxy_name, + proxy_conn->buffer.buffer[1]); if (proxy_conn->buffer.buffer[1] == PROXY_SOCKS5_AUTH_USER_PASS) { return _proxy_handshake_socks5_send_auth(proxy_conn); } @@ -549,7 +552,8 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co return _proxy_handshake_socks5_reply_connect_addr(proxy_conn); } - tlog(TLOG_ERROR, "server select invalid auth method %d", proxy_conn->buffer.buffer[1]); + tlog(TLOG_ERROR, "server %s select invalid auth method %d", proxy_conn->server_info->proxy_name, + proxy_conn->buffer.buffer[1]); return PROXY_HANDSHAKE_ERR; break; case PROXY_CONN_AUTH_ACK: @@ -560,7 +564,8 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co return PROXY_HANDSHAKE_WANT_READ; } - tlog(TLOG_ERROR, "recv socks5 auth ack failed, %s", strerror(errno)); + tlog(TLOG_ERROR, "recv socks5 auth ack from %s failed, %s", proxy_conn->server_info->proxy_name, + strerror(errno)); return PROXY_HANDSHAKE_ERR; } @@ -570,23 +575,24 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co } if (proxy_conn->buffer.len != 2) { - tlog(TLOG_ERROR, "recv socks5 auth ack failed"); + tlog(TLOG_ERROR, "recv socks5 auth ack from %s failed", proxy_conn->server_info->proxy_name); return PROXY_HANDSHAKE_ERR; } proxy_conn->buffer.len = 0; if (proxy_conn->buffer.buffer[0] != 0x1) { - tlog(TLOG_ERROR, "server not support socks5"); + tlog(TLOG_ERROR, "server %s not support socks5", proxy_conn->server_info->proxy_name); return PROXY_HANDSHAKE_ERR; } if (proxy_conn->buffer.buffer[1] != 0x0) { - tlog(TLOG_ERROR, "server auth failed, incorrect user or password, code: %d", proxy_conn->buffer.buffer[1]); + tlog(TLOG_ERROR, "server %s auth failed, incorrect user or password, code: %d", + proxy_conn->server_info->proxy_name, proxy_conn->buffer.buffer[1]); return PROXY_HANDSHAKE_ERR; } - tlog(TLOG_INFO, "server auth success"); + tlog(TLOG_INFO, "server %s auth success", proxy_conn->server_info->proxy_name); proxy_conn->state = PROXY_CONN_CONNECTING; return _proxy_handshake_socks5_reply_connect_addr(proxy_conn); case PROXY_CONN_CONNECTING: { @@ -603,7 +609,13 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co return PROXY_HANDSHAKE_WANT_READ; } - tlog(TLOG_ERROR, "recv socks5 connect ack failed, %s", strerror(errno)); + if (len == 0) { + tlog(TLOG_ERROR, "server %s closed connection", proxy_conn->server_info->proxy_name); + } else { + tlog(TLOG_ERROR, "recv socks5 connect ack from %s failed, %s", proxy_conn->server_info->proxy_name, + strerror(errno)); + } + return PROXY_HANDSHAKE_ERR; } @@ -614,16 +626,18 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co recv_buff = proxy_conn->buffer.buffer; if (recv_buff[0] != PROXY_SOCKS5_VERSION) { - tlog(TLOG_ERROR, "server not support socks5"); + tlog(TLOG_ERROR, "server %s not support socks5", proxy_conn->server_info->proxy_name); return PROXY_HANDSHAKE_ERR; } if (recv_buff[1] != 0) { if ((unsigned char)recv_buff[1] <= (sizeof(proxy_socks5_status_code) / sizeof(proxy_socks5_status_code[0]))) { - tlog(TLOG_ERROR, "server reply failed, error-code: %s", proxy_socks5_status_code[(int)recv_buff[1]]); + tlog(TLOG_ERROR, "server %s reply failed, error-code: %s", proxy_conn->server_info->proxy_name, + proxy_socks5_status_code[(int)recv_buff[1]]); } else { - tlog(TLOG_ERROR, "server reply failed, error-code: %x", recv_buff[1]); + tlog(TLOG_ERROR, "server %s reply failed, error-code: %x", proxy_conn->server_info->proxy_name, + recv_buff[1]); } return PROXY_HANDSHAKE_ERR; } @@ -647,7 +661,8 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co use_dest_ip = 1; } - tlog(TLOG_DEBUG, "proxy dest: %d.%d.%d.%d:%d\n", addr[0], addr[1], addr[2], addr[3], port); + tlog(TLOG_DEBUG, "server %s proxy dest: %d.%d.%d.%d:%d\n", proxy_conn->server_info->proxy_name, addr[0], + addr[1], addr[2], addr[3], port); } break; case PROXY_SOCKS5_TYPE_IPV6: { struct sockaddr_in6 *addr_in6 = NULL; @@ -670,10 +685,10 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co use_dest_ip = 1; } - tlog(TLOG_DEBUG, "proxy dest: [%x:%x:%x:%x:%x:%x:%x:%x]:%d\n", ntohs(*((short *)addr)), - ntohs(*((short *)(addr + 2))), ntohs(*((short *)(addr + 4))), ntohs(*((short *)(addr + 6))), - ntohs(*((short *)(addr + 8))), ntohs(*((short *)(addr + 10))), ntohs(*((short *)(addr + 12))), - ntohs(*((short *)(addr + 14))), port); + tlog(TLOG_DEBUG, "server %s proxy dest: [%x:%x:%x:%x:%x:%x:%x:%x]:%d\n", + proxy_conn->server_info->proxy_name, ntohs(*((short *)addr)), ntohs(*((short *)(addr + 2))), + ntohs(*((short *)(addr + 4))), ntohs(*((short *)(addr + 6))), ntohs(*((short *)(addr + 8))), + ntohs(*((short *)(addr + 10))), ntohs(*((short *)(addr + 12))), ntohs(*((short *)(addr + 14))), port); } break; default: return PROXY_HANDSHAKE_ERR; @@ -705,11 +720,11 @@ static proxy_handshake_state _proxy_handshake_socks5(struct proxy_conn *proxy_co } proxy_conn->state = PROXY_CONN_CONNECTED; - tlog(TLOG_INFO, "connected to socks proxy server."); + tlog(TLOG_INFO, "success connect to socks5 proxy server %s", proxy_conn->server_info->proxy_name); return PROXY_HANDSHAKE_CONNECTED; } break; default: - tlog(TLOG_ERROR, "client socks status %d is invalid", proxy_conn->state); + tlog(TLOG_ERROR, "client socks5 status %d is invalid", proxy_conn->state); return PROXY_HANDSHAKE_ERR; } @@ -766,7 +781,8 @@ static int _proxy_handshake_http(struct proxy_conn *proxy_conn) len = send(proxy_conn->fd, buff, msglen, MSG_NOSIGNAL); if (len != msglen) { - tlog(TLOG_ERROR, "init https failed, len: %d, %s", len, strerror(errno)); + tlog(TLOG_ERROR, "connect to https proxy server %s failed, %s", proxy_conn->server_info->proxy_name, + strerror(errno)); goto out; } @@ -783,10 +799,14 @@ static int _proxy_handshake_http(struct proxy_conn *proxy_conn) len = recv(proxy_conn->fd, proxy_conn->buffer.buffer + proxy_conn->buffer.len, sizeof(proxy_conn->buffer.buffer), 0); if (len <= 0) { + if (errno == EAGAIN || errno == EWOULDBLOCK) { + return PROXY_HANDSHAKE_WANT_READ; + } + if (len == 0) { - tlog(TLOG_ERROR, "remote server closed."); + tlog(TLOG_ERROR, "remote server %s closed.", proxy_conn->server_info->proxy_name); } else { - tlog(TLOG_ERROR, "recv failed, %s", strerror(errno)); + tlog(TLOG_ERROR, "recv from %s failed, %s", proxy_conn->server_info->proxy_name, strerror(errno)); } goto out; } @@ -799,13 +819,14 @@ static int _proxy_handshake_http(struct proxy_conn *proxy_conn) goto out; } - tlog(TLOG_DEBUG, "remote server not supported."); + tlog(TLOG_DEBUG, "remote server %s not supported.", proxy_conn->server_info->proxy_name); goto out; } if (http_head_get_httpcode(http_head) != 200) { - tlog(TLOG_WARN, "http server query failed, server return http code : %d, %s", - http_head_get_httpcode(http_head), http_head_get_httpcode_msg(http_head)); + tlog(TLOG_WARN, "http server %s query failed, server return http code : %d, %s", + proxy_conn->server_info->proxy_name, http_head_get_httpcode(http_head), + http_head_get_httpcode_msg(http_head)); goto out; } @@ -817,7 +838,7 @@ static int _proxy_handshake_http(struct proxy_conn *proxy_conn) if (proxy_conn->buffer.len < 0) { proxy_conn->buffer.len = 0; } - tlog(TLOG_INFO, "connected to http proxy server."); + tlog(TLOG_INFO, "success connect to http proxy server %s", proxy_conn->server_info->proxy_name); proxy_conn->state = PROXY_CONN_CONNECTED; ret = PROXY_HANDSHAKE_CONNECTED; goto out;