Kaynağa Gözat

log: optimize proxy log

Nick Peng 2 yıl önce
ebeveyn
işleme
3cb644d728
1 değiştirilmiş dosya ile 51 ekleme ve 30 silme
  1. 51 30
      src/proxy.c

+ 51 - 30
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;