Browse Source

fix #241

pull/246/head
Max Lv 10 years ago
parent
commit
e131e64f27
1 changed files with 23 additions and 0 deletions
  1. 23
      src/server.c

23
src/server.c

@ -121,6 +121,24 @@ static void free_connections(struct ev_loop *loop)
}
}
static void report_addr(int fd) {
struct sockaddr_storage addr;
socklen_t len = sizeof addr;
memset(&addr, 0, len);
int err = getpeername(fd, (struct sockaddr *)&addr, &len);
if (err == 0) {
char peer_name[INET6_ADDRSTRLEN] = {0};
if (addr.ss_family == AF_INET) {
struct sockaddr_in *s = (struct sockaddr_in *)&addr;
dns_ntop(AF_INET, &s->sin_addr, peer_name, INET_ADDRSTRLEN);
} else if (addr.ss_family == AF_INET6) {
struct sockaddr_in6 *s = (struct sockaddr_in6 *)&addr;
dns_ntop(AF_INET6, &s->sin6_addr, peer_name, INET6_ADDRSTRLEN);
}
LOGE("failed to handshake with %s", peer_name);
}
}
#ifndef __MINGW32__
int setnonblocking(int fd)
{
@ -368,6 +386,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
if (*buf == NULL) {
LOGE("invalid password or cipher");
report_addr(server->fd);
close_and_free_remote(EV_A_ remote);
close_and_free_server(EV_A_ server);
return;
@ -431,6 +450,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
offset += in_addr_len;
} else {
LOGE("invalid header with addr type %d", atyp);
report_addr(server->fd);
close_and_free_server(EV_A_ server);
return;
}
@ -483,6 +503,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
offset += in6_addr_len;
} else {
LOGE("invalid header with addr type %d", atyp);
report_addr(server->fd);
close_and_free_server(EV_A_ server);
return;
}
@ -496,6 +517,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
if (offset == 1) {
LOGE("invalid header with addr type %d", atyp);
report_addr(server->fd);
close_and_free_server(EV_A_ server);
return;
}
@ -764,6 +786,7 @@ static void remote_send_cb(EV_P_ ev_io *w, int revents)
struct sockaddr_storage addr;
socklen_t len = sizeof addr;
memset(&addr, 0, len);
int r = getpeername(remote->fd, (struct sockaddr *)&addr, &len);
if (r == 0) {
if (verbose) {

Loading…
Cancel
Save