mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-30 22:13:49 +00:00
Fix #863
This commit is contained in:
+19
-6
@@ -298,6 +298,16 @@ get_peer_name(int fd)
|
||||
return peer_name;
|
||||
}
|
||||
|
||||
static void
|
||||
reset_addr(int fd)
|
||||
{
|
||||
char *peer_name;
|
||||
peer_name = get_peer_name(fd);
|
||||
if (peer_name != NULL) {
|
||||
remove_from_block_list(peer_name);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
report_addr(int fd, int err_level)
|
||||
{
|
||||
@@ -305,10 +315,10 @@ report_addr(int fd, int err_level)
|
||||
peer_name = get_peer_name(fd);
|
||||
if (peer_name != NULL) {
|
||||
LOGE("failed to handshake with %s", peer_name);
|
||||
}
|
||||
// Block all requests from this IP, if the err# exceeds 128.
|
||||
if (check_block_list(peer_name, err_level)) {
|
||||
LOGE("add %s to block list", peer_name);
|
||||
// Block all requests from this IP, if the err# exceeds 128.
|
||||
if (check_block_list(peer_name, err_level)) {
|
||||
LOGE("add %s to block list", peer_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -983,7 +993,7 @@ server_timeout_cb(EV_P_ ev_timer *watcher, int revents)
|
||||
if (server->stage < 2) {
|
||||
if (verbose) {
|
||||
size_t len = server->stage ?
|
||||
server->header_buf->len : server->buf->len;
|
||||
server->header_buf->len : server->buf->len;
|
||||
#ifdef __MINGW32__
|
||||
LOGI("incomplete header: %u", len);
|
||||
#else
|
||||
@@ -1166,6 +1176,9 @@ remote_send_cb(EV_P_ ev_io *w, int revents)
|
||||
}
|
||||
remote_send_ctx->connected = 1;
|
||||
|
||||
// Clear the state of this address in the block list
|
||||
reset_addr(server->fd);
|
||||
|
||||
if (remote->buf->len == 0) {
|
||||
server->stage = 5;
|
||||
ev_io_stop(EV_A_ & remote_send_ctx->io);
|
||||
@@ -1429,7 +1442,7 @@ accept_cb(EV_P_ ev_io *w, int revents)
|
||||
}
|
||||
if (acl) {
|
||||
if ((get_acl_mode() == BLACK_LIST && acl_match_host(peer_name) == 1)
|
||||
|| (get_acl_mode() == WHITE_LIST && acl_match_host(peer_name) >= 0)) {
|
||||
|| (get_acl_mode() == WHITE_LIST && acl_match_host(peer_name) >= 0)) {
|
||||
LOGE("Access denied from %s", peer_name);
|
||||
close(serverfd);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user