From a312986239371271e4b792ffeefecf28b0d46513 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Mon, 6 Jul 2015 14:04:02 +0800 Subject: [PATCH] remove UDP relay only from local mode --- src/local.c | 85 +++++++++++++++++++++++------------------------------ src/utils.c | 2 +- 2 files changed, 37 insertions(+), 50 deletions(-) diff --git a/src/local.c b/src/local.c index e37ea1dc..abd12f38 100644 --- a/src/local.c +++ b/src/local.c @@ -903,7 +903,7 @@ int main(int argc, char **argv) USE_TTY(); - while ((c = getopt_long(argc, argv, "f:s:p:l:k:t:m:i:c:b:a:uUv", + while ((c = getopt_long(argc, argv, "f:s:p:l:k:t:m:i:c:b:a:uv", long_options, &option_index)) != -1) { switch (c) { case 0: @@ -954,9 +954,6 @@ int main(int argc, char **argv) case 'u': mode = TCP_AND_UDP; break; - case 'U': - mode = UDP_ONLY; - break; case 'v': verbose = 1; break; @@ -1086,23 +1083,21 @@ int main(int argc, char **argv) struct ev_loop *loop = EV_DEFAULT; - if (mode != UDP_ONLY) { - // Setup socket - int listenfd; - listenfd = create_and_bind(local_addr, local_port); - if (listenfd < 0) { - FATAL("bind() error"); - } - if (listen(listenfd, SOMAXCONN) == -1) { - FATAL("listen() error"); - } - setnonblocking(listenfd); + // Setup socket + int listenfd; + listenfd = create_and_bind(local_addr, local_port); + if (listenfd < 0) { + FATAL("bind() error"); + } + if (listen(listenfd, SOMAXCONN) == -1) { + FATAL("listen() error"); + } + setnonblocking(listenfd); - listen_ctx.fd = listenfd; + listen_ctx.fd = listenfd; - ev_io_init(&listen_ctx.io, accept_cb, listenfd, EV_READ); - ev_io_start(loop, &listen_ctx.io); - } + ev_io_init(&listen_ctx.io, accept_cb, listenfd, EV_READ); + ev_io_start(loop, &listen_ctx.io); // Setup UDP if (mode != TCP_ONLY) { @@ -1129,10 +1124,8 @@ int main(int argc, char **argv) } // Clean up - if (mode != UDP_ONLY) { - ev_io_stop(loop, &listen_ctx.io); - free_connections(loop); - } + ev_io_stop(loop, &listen_ctx.io); + free_connections(loop); if (mode != TCP_ONLY) { free_udprelay(); @@ -1223,25 +1216,23 @@ int start_ss_local_server(profile_t profile) listen_ctx.method = m; listen_ctx.iface = NULL; - if (mode != UDP_ONLY) { - // Setup socket - int listenfd; - listenfd = create_and_bind(local_addr, local_port_str); - if (listenfd < 0) { - ERROR("bind()"); - return -1; - } - if (listen(listenfd, SOMAXCONN) == -1) { - ERROR("listen()"); - return -1; - } - setnonblocking(listenfd); + // Setup socket + int listenfd; + listenfd = create_and_bind(local_addr, local_port_str); + if (listenfd < 0) { + ERROR("bind()"); + return -1; + } + if (listen(listenfd, SOMAXCONN) == -1) { + ERROR("listen()"); + return -1; + } + setnonblocking(listenfd); - listen_ctx.fd = listenfd; + listen_ctx.fd = listenfd; - ev_io_init(&listen_ctx.io, accept_cb, listenfd, EV_READ); - ev_io_start(loop, &listen_ctx.io); - } + ev_io_init(&listen_ctx.io, accept_cb, listenfd, EV_READ); + ev_io_start(loop, &listen_ctx.io); // Setup UDP if (mode != TCP_ONLY) { @@ -1253,10 +1244,8 @@ int start_ss_local_server(profile_t profile) LOGI("listening at %s:%s", local_addr, local_port_str); - if (mode != UDP_ONLY) { - // Init connections - cork_dllist_init(&connections); - } + // Init connections + cork_dllist_init(&connections); // Enter the loop ev_run(loop, 0); @@ -1270,11 +1259,9 @@ int start_ss_local_server(profile_t profile) free_udprelay(); } - if (mode != UDP_ONLY) { - ev_io_stop(loop, &listen_ctx.io); - free_connections(loop); - close(listen_ctx.fd); - } + ev_io_stop(loop, &listen_ctx.io); + free_connections(loop); + close(listen_ctx.fd); free(listen_ctx.remote_addr); diff --git a/src/utils.c b/src/utils.c index bb4c0fbd..100e2def 100644 --- a/src/utils.c +++ b/src/utils.c @@ -245,7 +245,7 @@ void usage() printf( " [-U] enable UDP relay and disable TCP relay,\n"); printf( - " TPROXY is required in redir mode\n"); + " not available in local mode\n"); printf("\n"); printf( " [-L :] specify destination server address and port\n");