From 7029cfca3a2bb9decb100bc1313021b12efe5e1d Mon Sep 17 00:00:00 2001 From: Max Lv Date: Fri, 14 Oct 2016 09:10:36 +0800 Subject: [PATCH] Refine event handling --- src/local.c | 14 ++++---------- src/redir.c | 13 +++---------- src/server.c | 32 +++++++++----------------------- src/tls.c | 24 ++++++++++++++++-------- src/tunnel.c | 12 +++--------- 5 files changed, 35 insertions(+), 60 deletions(-) diff --git a/src/local.c b/src/local.c index 109cccbc..c30b8893 100644 --- a/src/local.c +++ b/src/local.c @@ -300,16 +300,10 @@ server_recv_cb(EV_P_ ev_io *w, int revents) return; } - if (r == 0) { - if (verbose) - LOGI("connected immediately"); - remote_send_cb(EV_A_ & remote->send_ctx->io, 0); - } else { - // wait on remote connected event - ev_io_stop(EV_A_ & server_recv_ctx->io); - ev_io_start(EV_A_ & remote->send_ctx->io); - ev_timer_start(EV_A_ & remote->send_ctx->watcher); - } + // wait on remote connected event + ev_io_stop(EV_A_ & server_recv_ctx->io); + ev_io_start(EV_A_ & remote->send_ctx->io); + ev_timer_start(EV_A_ & remote->send_ctx->watcher); } else { #ifdef TCP_FASTOPEN #ifdef __APPLE__ diff --git a/src/redir.c b/src/redir.c index 751a7b97..52844189 100644 --- a/src/redir.c +++ b/src/redir.c @@ -728,16 +728,9 @@ accept_cb(EV_P_ ev_io *w, int revents) return; } - if (r == 0) { - if (verbose) - LOGI("connected immediately"); - remote_send_cb(EV_A_ & remote->send_ctx->io, 0); - } else { - // listen to remote connected event - ev_io_start(EV_A_ & remote->send_ctx->io); - ev_timer_start(EV_A_ & remote->send_ctx->watcher); - } - + // listen to remote connected event + ev_io_start(EV_A_ & remote->send_ctx->io); + ev_timer_start(EV_A_ & remote->send_ctx->watcher); ev_io_start(EV_A_ & server->recv_ctx->io); } diff --git a/src/server.c b/src/server.c index 23d0d099..376f79ff 100644 --- a/src/server.c +++ b/src/server.c @@ -95,8 +95,7 @@ static void server_timeout_cb(EV_P_ ev_timer *watcher, int revents); static remote_t *new_remote(int fd); static server_t *new_server(int fd, listen_ctx_t *listener); static remote_t *connect_to_remote(struct addrinfo *res, - server_t *server, - int *connected); + server_t *server); static void free_remote(remote_t *remote); static void close_and_free_remote(EV_P_ remote_t *remote); @@ -464,8 +463,7 @@ create_and_bind(const char *host, const char *port, int mptcp) static remote_t * connect_to_remote(struct addrinfo *res, - server_t *server, - int *connected) + server_t *server) { int sockfd; #ifdef SET_INTERFACE @@ -559,8 +557,6 @@ connect_to_remote(struct addrinfo *res, close(sockfd); return NULL; } - - *connected = r == 0; } return remote; @@ -880,8 +876,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents) } if (!need_query) { - int connected = 0; - remote_t *remote = connect_to_remote(&info, server, &connected); + remote_t *remote = connect_to_remote(&info, server); if (remote == NULL) { LOGE("connect error"); @@ -902,13 +897,9 @@ server_recv_cb(EV_P_ ev_io *w, int revents) server->stage = 4; - if (connected) { - remote_send_cb(EV_A_ & remote->send_ctx->io, 0); - } else { - // waiting on remote connected event - ev_io_stop(EV_A_ & server_recv_ctx->io); - ev_io_start(EV_A_ & remote->send_ctx->io); - } + // waiting on remote connected event + ev_io_stop(EV_A_ & server_recv_ctx->io); + ev_io_start(EV_A_ & remote->send_ctx->io); } } else { query_t *query = (query_t *)ss_malloc(sizeof(query_t)); @@ -1051,8 +1042,7 @@ server_resolve_cb(struct sockaddr *addr, void *data) info.ai_addrlen = sizeof(struct sockaddr_in6); } - int connected = 0; - remote_t *remote = connect_to_remote(&info, server, &connected); + remote_t *remote = connect_to_remote(&info, server); if (remote == NULL) { LOGE("connect error"); @@ -1071,12 +1061,8 @@ server_resolve_cb(struct sockaddr *addr, void *data) server->buf->idx = 0; } - if (connected) { - remote_send_cb(EV_A_ & remote->send_ctx->io, 0); - } else { - // listen to remote connected event - ev_io_start(EV_A_ & remote->send_ctx->io); - } + // listen to remote connected event + ev_io_start(EV_A_ & remote->send_ctx->io); } } } diff --git a/src/tls.c b/src/tls.c index b173d3e4..5c584b25 100644 --- a/src/tls.c +++ b/src/tls.c @@ -56,6 +56,8 @@ #define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) #endif +extern int verbose; + static int parse_tls_header(const char *, size_t, char **); static int parse_extensions(const char *, size_t, char **); static int parse_server_name_extension(const char *, size_t, char **); @@ -102,21 +104,24 @@ parse_tls_header(const char *data, size_t data_len, char **hostname) * See RFC5246 Appendix E.2 */ if (data[0] & 0x80 && data[2] == 1) { - LOGI("Received SSL 2.0 Client Hello which can not support SNI."); + if (verbose) + LOGI("Received SSL 2.0 Client Hello which can not support SNI."); return -2; } tls_content_type = data[0]; if (tls_content_type != TLS_HANDSHAKE_CONTENT_TYPE) { - LOGI("Request did not begin with TLS handshake."); + if (verbose) + LOGI("Request did not begin with TLS handshake."); return -5; } tls_version_major = data[1]; tls_version_minor = data[2]; if (tls_version_major < 3) { - LOGI("Received SSL %d.%d handshake which can not support SNI.", - tls_version_major, tls_version_minor); + if (verbose) + LOGI("Received SSL %d.%d handshake which can not support SNI.", + tls_version_major, tls_version_minor); return -2; } @@ -137,7 +142,8 @@ parse_tls_header(const char *data, size_t data_len, char **hostname) return -5; } if (data[pos] != TLS_HANDSHAKE_TYPE_CLIENT_HELLO) { - LOGI("Not a client hello"); + if (verbose) + LOGI("Not a client hello"); return -5; } @@ -170,7 +176,8 @@ parse_tls_header(const char *data, size_t data_len, char **hostname) pos += 1 + len; if (pos == data_len && tls_version_major == 3 && tls_version_minor == 0) { - LOGI("Received SSL 3.0 handshake without extensions"); + if (verbose) + LOGI("Received SSL 3.0 handshake without extensions"); return -2; } @@ -242,8 +249,9 @@ parse_server_name_extension(const char *data, size_t data_len, return len; default: - LOGI("Unknown server name extension name type: %d", - data[pos]); + if (verbose) + LOGI("Unknown server name extension name type: %d", + data[pos]); } pos += 3 + len; } diff --git a/src/tunnel.c b/src/tunnel.c index 12cb55d2..663b83d2 100644 --- a/src/tunnel.c +++ b/src/tunnel.c @@ -699,15 +699,9 @@ accept_cb(EV_P_ ev_io *w, int revents) return; } - if (r == 0) { - if (verbose) - LOGI("connected immediately"); - remote_send_cb(EV_A_ & remote->send_ctx->io, 0); - } else { - // listen to remote connected event - ev_io_start(EV_A_ & remote->send_ctx->io); - ev_timer_start(EV_A_ & remote->send_ctx->watcher); - } + // listen to remote connected event + ev_io_start(EV_A_ & remote->send_ctx->io); + ev_timer_start(EV_A_ & remote->send_ctx->watcher); } void