From 3e0952de52b895531e0319b0e423ee4ac5b683a9 Mon Sep 17 00:00:00 2001 From: Kim Date: Tue, 19 Apr 2016 14:05:13 +0800 Subject: [PATCH] Refine verbose output in redir mode * fix `ss-redir -v`. It's now output messages while redirecting. This is useful at the time building up a router. * typo * inet_ntop() -> dns_ntop() * removed max(). max(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) => INET6_ADDRSTRLEN --- src/redir.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/redir.c b/src/redir.c index 31eaa11e..c263f5d4 100644 --- a/src/redir.c +++ b/src/redir.c @@ -1,6 +1,6 @@ /* * redir.c - Provide a transparent TCP proxy through remote shadowsocks - * server + * server * * Copyright (C) 2013 - 2015, Max Lv * @@ -40,6 +40,7 @@ #include #include #include +#include #ifdef HAVE_CONFIG_H #include "config.h" @@ -191,6 +192,26 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents) } } + if (verbose) { + uint16_t port = 0; + char ipstr[INET6_ADDRSTRLEN]; + memset(&ipstr, 0, INET6_ADDRSTRLEN); + + if (AF_INET == server->destaddr.ss_family) { + struct sockaddr_in *sa = (struct sockaddr_in *)&(server->destaddr); + dns_ntop(AF_INET, &(sa->sin_addr), ipstr, INET_ADDRSTRLEN); + port = ntohs(sa->sin_port); + } else { + // TODO: The code below need to be test in IPv6 envirment, which I + // don't have. + struct sockaddr_in6 *sa = (struct sockaddr_in6 *)&(server->destaddr); + dns_ntop(AF_INET6, &(sa->sin6_addr), ipstr, INET6_ADDRSTRLEN); + port = ntohs(sa->sin6_port); + } + + LOGI("redir to %s:%d, len=%ld", ipstr, port, r); + } + remote->buf->len = r; if (auth) {