mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-29 12:36:53 +00:00
Refine error levels
This commit is contained in:
+6
-5
@@ -91,6 +91,7 @@ static void remote_recv_cb(EV_P_ ev_io *w, int revents);
|
||||
static void remote_send_cb(EV_P_ ev_io *w, int revents);
|
||||
static void server_timeout_cb(EV_P_ ev_timer *watcher, int revents);
|
||||
static void block_list_clear_cb(EV_P_ ev_timer *watcher, int revents);
|
||||
static void report_addr(int fd, int err_level);
|
||||
|
||||
static remote_t *new_remote(int fd);
|
||||
static server_t *new_server(int fd, listen_ctx_t *listener);
|
||||
@@ -105,7 +106,7 @@ static void server_resolve_cb(struct sockaddr *addr, void *data);
|
||||
static void query_free_cb(void *data);
|
||||
|
||||
static size_t parse_header_len(const char atyp, const char *data, size_t offset);
|
||||
static int is_header_complete(const buffer_t *buf);
|
||||
static int is_header_complete(const buffer_t *buf, const int fd);
|
||||
|
||||
int verbose = 0;
|
||||
|
||||
@@ -241,7 +242,7 @@ parse_header_len(const char atyp, const char *data, size_t offset)
|
||||
}
|
||||
|
||||
static int
|
||||
is_header_complete(const buffer_t *buf)
|
||||
is_header_complete(const buffer_t *buf, const int fd)
|
||||
{
|
||||
size_t header_len = 0;
|
||||
size_t buf_len = buf->len;
|
||||
@@ -265,6 +266,7 @@ is_header_complete(const buffer_t *buf)
|
||||
// IP V6
|
||||
header_len += sizeof(struct in6_addr);
|
||||
} else {
|
||||
report_addr(fd, MALFORMED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -639,7 +641,6 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
int err = ss_decrypt(buf, server->d_ctx, BUF_SIZE);
|
||||
|
||||
if (err) {
|
||||
LOGE("invalid password or cipher");
|
||||
report_addr(server->fd, MALICIOUS);
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
@@ -648,7 +649,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
|
||||
// handle incomplete header part 2
|
||||
if (server->stage == 0) {
|
||||
if (is_header_complete(server->buf)) {
|
||||
if (is_header_complete(server->buf, server->fd)) {
|
||||
bfree(server->header_buf);
|
||||
ss_free(server->header_buf);
|
||||
server->stage = 2;
|
||||
@@ -664,7 +665,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
server->buf->array, server->buf->len);
|
||||
server->header_buf->len = server->buf->len + header_len;
|
||||
|
||||
if (is_header_complete(server->header_buf)) {
|
||||
if (is_header_complete(server->header_buf, server->fd)) {
|
||||
brealloc(server->buf, server->header_buf->len, BUF_SIZE);
|
||||
memcpy(server->buf->array, server->header_buf->array, server->header_buf->len);
|
||||
server->buf->len = server->header_buf->len;
|
||||
|
||||
Reference in New Issue
Block a user