mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-27 05:12:51 +08:00
611 lines
24 KiB
Diff
611 lines
24 KiB
Diff
From a7291ea725b74dc64c5806385100c535a15e889e Mon Sep 17 00:00:00 2001
|
|
From: Max Lv <max.c.lv@gmail.com>
|
|
Date: Tue, 30 Apr 2019 09:22:54 +0800
|
|
Subject: [PATCH] Enlarge the socket buffer size to 16KB.
|
|
|
|
After five years, memory footprint is not a problem for most of
|
|
low-end boxes and high-end routers now.
|
|
|
|
It should also improve the speed on loopback and high-speed LAN
|
|
networks.
|
|
---
|
|
src/local.c | 26 +++++++++++---------------
|
|
src/netutils.h | 2 ++
|
|
src/redir.c | 24 ++++++++++++------------
|
|
src/server.c | 24 ++++++++++--------------
|
|
src/tunnel.c | 18 +++++++-----------
|
|
5 files changed, 42 insertions(+), 52 deletions(-)
|
|
|
|
--- a/server/netutils.h
|
|
+++ b/server/netutils.h
|
|
@@ -60,6 +60,8 @@
|
|
/** byte size of ip6 address */
|
|
#define INET6_SIZE 16
|
|
|
|
+#define SOCKET_BUF_SIZE (16 * 1024) // 16KB
|
|
+
|
|
size_t get_sockaddr_len(struct sockaddr *addr);
|
|
ssize_t get_sockaddr(char *host, char *port,
|
|
struct sockaddr_storage *storage, int block,
|
|
--- a/server/server.c
|
|
+++ b/server/server.c
|
|
@@ -73,10 +73,6 @@
|
|
#define EWOULDBLOCK EAGAIN
|
|
#endif
|
|
|
|
-#ifndef BUF_SIZE
|
|
-#define BUF_SIZE 2048
|
|
-#endif
|
|
-
|
|
#ifndef SSMAXCONN
|
|
#define SSMAXCONN 1024
|
|
#endif
|
|
@@ -142,13 +138,13 @@ stat_update_cb(EV_P_ ev_timer *watcher,
|
|
struct sockaddr_un svaddr, claddr;
|
|
int sfd = -1;
|
|
size_t msgLen;
|
|
- char resp[BUF_SIZE];
|
|
+ char resp[SOCKET_BUF_SIZE];
|
|
|
|
if (verbose) {
|
|
LOGI("update traffic stat: tx: %" PRIu64 " rx: %" PRIu64 "", tx, rx);
|
|
}
|
|
|
|
- snprintf(resp, BUF_SIZE, "stat: {\"%s\":%" PRIu64 "}", server_port, tx + rx);
|
|
+ snprintf(resp, SOCKET_BUF_SIZE, "stat: {\"%s\":%" PRIu64 "}", server_port, tx + rx);
|
|
msgLen = strlen(resp) + 1;
|
|
|
|
ss_addr_t ip_addr = { .host = NULL, .port = NULL };
|
|
@@ -625,14 +621,14 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
ev_timer_again(EV_A_ & server->recv_ctx->watcher);
|
|
}
|
|
|
|
- if (len > BUF_SIZE) {
|
|
+ if (len > SOCKET_BUF_SIZE) {
|
|
ERROR("out of recv buffer");
|
|
close_and_free_remote(EV_A_ remote);
|
|
close_and_free_server(EV_A_ server);
|
|
return;
|
|
}
|
|
|
|
- ssize_t r = recv(server->fd, buf->array + len, BUF_SIZE - len, 0);
|
|
+ ssize_t r = recv(server->fd, buf->array + len, SOCKET_BUF_SIZE - len, 0);
|
|
|
|
if (r == 0) {
|
|
// connection closed
|
|
@@ -712,7 +708,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
}
|
|
|
|
if (needsendback) {
|
|
- size_t capacity = BUF_SIZE;
|
|
+ size_t capacity = SOCKET_BUF_SIZE;
|
|
char *sendback_buf = (char*)malloc(capacity);
|
|
obfs_class *obfs_plugin = server->obfs_plugin;
|
|
if (obfs_plugin->server_encode) {
|
|
@@ -725,7 +721,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
}
|
|
}
|
|
|
|
- int err = ss_decrypt(buf, server->d_ctx, BUF_SIZE);
|
|
+ int err = ss_decrypt(buf, server->d_ctx, SOCKET_BUF_SIZE);
|
|
|
|
if (err) {
|
|
report_addr(server->fd, MALICIOUS);
|
|
@@ -797,7 +793,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
|
|
if (server->stage == STAGE_HANDSHAKE) {
|
|
size_t header_len = server->header_buf->len;
|
|
- if (brealloc(server->header_buf, server->buf->len + header_len, BUF_SIZE) != 0) {
|
|
+ if (brealloc(server->header_buf, server->buf->len + header_len, SOCKET_BUF_SIZE) != 0) {
|
|
close_and_free_remote(EV_A_ remote);
|
|
close_and_free_server(EV_A_ server);
|
|
return;
|
|
@@ -809,7 +805,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
int ret = is_header_complete(server->buf);
|
|
|
|
if (ret == 1) {
|
|
- brealloc(server->buf, server->header_buf->len, BUF_SIZE);
|
|
+ brealloc(server->buf, server->header_buf->len, SOCKET_BUF_SIZE);
|
|
memcpy(server->buf->array, server->header_buf->array, server->header_buf->len);
|
|
server->buf->len = server->header_buf->len;
|
|
bfree(server->header_buf);
|
|
@@ -826,7 +822,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
|
|
// handshake and transmit data
|
|
if (server->stage == STAGE_STREAM) {
|
|
- if (server->auth && !ss_check_hash(remote->buf, server->chunk, server->d_ctx, BUF_SIZE)) {
|
|
+ if (server->auth && !ss_check_hash(remote->buf, server->chunk, server->d_ctx, SOCKET_BUF_SIZE)) {
|
|
LOGE("hash error");
|
|
report_addr(server->fd, BAD);
|
|
close_and_free_server(EV_A_ server);
|
|
@@ -1040,7 +1036,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
LOGI("connect to %s:%d", host, ntohs(port));
|
|
}
|
|
|
|
- if (server->auth && !ss_check_hash(server->buf, server->chunk, server->d_ctx, BUF_SIZE)) {
|
|
+ if (server->auth && !ss_check_hash(server->buf, server->chunk, server->d_ctx, SOCKET_BUF_SIZE)) {
|
|
LOGE("hash error");
|
|
report_addr(server->fd, BAD);
|
|
close_and_free_server(EV_A_ server);
|
|
@@ -1258,7 +1254,7 @@ remote_recv_cb(EV_P_ ev_io *w, int reven
|
|
|
|
ev_timer_again(EV_A_ & server->recv_ctx->watcher);
|
|
|
|
- ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0);
|
|
+ ssize_t r = recv(remote->fd, server->buf->array, SOCKET_BUF_SIZE, 0);
|
|
|
|
if (r == 0) {
|
|
// connection closed
|
|
@@ -1300,7 +1296,7 @@ remote_recv_cb(EV_P_ ev_io *w, int reven
|
|
}
|
|
}
|
|
|
|
- int err = ss_encrypt(server->buf, server->e_ctx, BUF_SIZE);
|
|
+ int err = ss_encrypt(server->buf, server->e_ctx, SOCKET_BUF_SIZE);
|
|
|
|
if (err) {
|
|
LOGE("invalid password or cipher");
|
|
@@ -1459,7 +1455,7 @@ new_remote(int fd)
|
|
ev_io_init(&remote->recv_ctx->io, remote_recv_cb, fd, EV_READ);
|
|
ev_io_init(&remote->send_ctx->io, remote_send_cb, fd, EV_WRITE);
|
|
|
|
- balloc(remote->buf, BUF_SIZE);
|
|
+ balloc(remote->buf, SOCKET_BUF_SIZE);
|
|
|
|
return remote;
|
|
}
|
|
@@ -1538,8 +1534,8 @@ new_server(int fd, listen_ctx_t *listene
|
|
ev_timer_init(&server->recv_ctx->watcher, server_timeout_cb,
|
|
request_timeout, listener->timeout);
|
|
|
|
- balloc(server->buf, BUF_SIZE);
|
|
- balloc(server->header_buf, BUF_SIZE);
|
|
+ balloc(server->buf, SOCKET_BUF_SIZE);
|
|
+ balloc(server->header_buf, SOCKET_BUF_SIZE);
|
|
|
|
server->chunk = (chunk_t *)malloc(sizeof(chunk_t));
|
|
memset(server->chunk, 0, sizeof(chunk_t));
|
|
--- a/src/local.c
|
|
+++ b/src/local.c
|
|
@@ -92,10 +92,6 @@
|
|
#define EWOULDBLOCK EAGAIN
|
|
#endif
|
|
|
|
-#ifndef BUF_SIZE
|
|
-#define BUF_SIZE 2048
|
|
-#endif
|
|
-
|
|
int verbose = 0;
|
|
int keep_resolving = 1;
|
|
|
|
@@ -305,7 +301,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
buf = remote->buf;
|
|
}
|
|
|
|
- r = recv(server->fd, buf->array + buf->len, BUF_SIZE - buf->len, 0);
|
|
+ r = recv(server->fd, buf->array + buf->len, SOCKET_BUF_SIZE - buf->len, 0);
|
|
|
|
if (r == 0) {
|
|
// connection closed
|
|
@@ -372,7 +368,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
);
|
|
}
|
|
}
|
|
- int err = ss_encrypt(&server_env->cipher, remote->buf, server->e_ctx, BUF_SIZE);
|
|
+ int err = ss_encrypt(&server_env->cipher, remote->buf, server->e_ctx, SOCKET_BUF_SIZE);
|
|
|
|
if (err) {
|
|
LOGE("server invalid password or cipher");
|
|
@@ -592,7 +588,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
|
|
buffer_t resp_to_send;
|
|
buffer_t *resp_buf = &resp_to_send;
|
|
- balloc(resp_buf, BUF_SIZE);
|
|
+ balloc(resp_buf, SOCKET_BUF_SIZE);
|
|
|
|
memcpy(resp_buf->array, &response, sizeof(struct socks5_response));
|
|
memcpy(resp_buf->array + sizeof(struct socks5_response),
|
|
@@ -624,7 +620,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
|
|
buffer_t ss_addr_to_send;
|
|
buffer_t *abuf = &ss_addr_to_send;
|
|
- balloc(abuf, BUF_SIZE);
|
|
+ balloc(abuf, SOCKET_BUF_SIZE);
|
|
|
|
abuf->array[abuf->len++] = request->atyp;
|
|
int atyp = request->atyp;
|
|
@@ -694,7 +690,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
else if (p == tls_protocol->default_port)
|
|
ret = tls_protocol->parse_packet(buf->array + 3 + abuf->len,
|
|
buf->len - 3 - abuf->len, &hostname);
|
|
- if (ret == -1 && buf->len < BUF_SIZE) {
|
|
+ if (ret == -1 && buf->len < SOCKET_BUF_SIZE) {
|
|
server->stage = STAGE_PARSE;
|
|
bfree(abuf);
|
|
return;
|
|
@@ -880,7 +876,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
_server_info.key = enc_get_key(&server_env->cipher);
|
|
_server_info.key_len = enc_get_key_len(&server_env->cipher);
|
|
_server_info.tcp_mss = 1452;
|
|
- _server_info.buffer_size = BUF_SIZE;
|
|
+ _server_info.buffer_size = SOCKET_BUF_SIZE;
|
|
_server_info.cipher_env = &server_env->cipher;
|
|
|
|
_server_info.param = server_env->obfs_param;
|
|
@@ -909,7 +905,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
}
|
|
// SSR end
|
|
|
|
- brealloc(remote->buf, buf->len + abuf->len, BUF_SIZE);
|
|
+ brealloc(remote->buf, buf->len + abuf->len, SOCKET_BUF_SIZE);
|
|
memcpy(remote->buf->array, abuf->array, abuf->len);
|
|
remote->buf->len = buf->len + abuf->len;
|
|
|
|
@@ -1012,7 +1008,7 @@ remote_recv_cb(EV_P_ ev_io *w, int reven
|
|
stat_update_cb();
|
|
#endif
|
|
|
|
- ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0);
|
|
+ ssize_t r = recv(remote->fd, server->buf->array, SOCKET_BUF_SIZE, 0);
|
|
|
|
if (r == 0) {
|
|
// connection closed
|
|
@@ -1094,7 +1090,7 @@ remote_recv_cb(EV_P_ ev_io *w, int reven
|
|
}
|
|
}
|
|
if (server->buf->len > 0) {
|
|
- int err = ss_decrypt(&server_env->cipher, server->buf, server->d_ctx, BUF_SIZE);
|
|
+ int err = ss_decrypt(&server_env->cipher, server->buf, server->d_ctx, SOCKET_BUF_SIZE);
|
|
if (err) {
|
|
LOGE("remote invalid password or cipher");
|
|
close_and_free_remote(EV_A_ remote);
|
|
@@ -1220,7 +1216,7 @@ new_remote(int fd, int timeout) {
|
|
remote->buf = ss_malloc(sizeof(buffer_t));
|
|
remote->recv_ctx = ss_malloc(sizeof(remote_ctx_t));
|
|
remote->send_ctx = ss_malloc(sizeof(remote_ctx_t));
|
|
- balloc(remote->buf, BUF_SIZE);
|
|
+ balloc(remote->buf, SOCKET_BUF_SIZE);
|
|
memset(remote->recv_ctx, 0, sizeof(remote_ctx_t));
|
|
memset(remote->send_ctx, 0, sizeof(remote_ctx_t));
|
|
remote->recv_ctx->connected = 0;
|
|
@@ -1276,7 +1272,7 @@ new_server(int fd, listen_ctx_t *profile
|
|
server->recv_ctx = ss_malloc(sizeof(server_ctx_t));
|
|
server->send_ctx = ss_malloc(sizeof(server_ctx_t));
|
|
server->buf = ss_malloc(sizeof(buffer_t));
|
|
- balloc(server->buf, BUF_SIZE);
|
|
+ balloc(server->buf, SOCKET_BUF_SIZE);
|
|
memset(server->recv_ctx, 0, sizeof(server_ctx_t));
|
|
memset(server->send_ctx, 0, sizeof(server_ctx_t));
|
|
server->stage = STAGE_INIT;
|
|
--- a/src/netutils.h
|
|
+++ b/src/netutils.h
|
|
@@ -60,6 +60,8 @@
|
|
/** byte size of ip6 address */
|
|
#define INET6_SIZE 16
|
|
|
|
+#define SOCKET_BUF_SIZE (16 * 1024) // 16KB
|
|
+
|
|
size_t get_sockaddr_len(struct sockaddr *addr);
|
|
ssize_t get_sockaddr(char *host, char *port,
|
|
struct sockaddr_storage *storage, int block,
|
|
--- a/src/redir.c
|
|
+++ b/src/redir.c
|
|
@@ -63,10 +63,6 @@
|
|
#define EWOULDBLOCK EAGAIN
|
|
#endif
|
|
|
|
-#ifndef BUF_SIZE
|
|
-#define BUF_SIZE 2048
|
|
-#endif
|
|
-
|
|
#ifndef IP6T_SO_ORIGINAL_DST
|
|
#define IP6T_SO_ORIGINAL_DST 80
|
|
#endif
|
|
@@ -226,7 +222,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
server_def_t *server_env = server->server_env;
|
|
|
|
ssize_t r = recv(server->fd, remote->buf->array + remote->buf->len,
|
|
- BUF_SIZE - remote->buf->len, 0);
|
|
+ SOCKET_BUF_SIZE - remote->buf->len, 0);
|
|
|
|
if (r == 0) {
|
|
// connection closed
|
|
@@ -299,7 +295,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
remote->buf->len = protocol_plugin->client_pre_encrypt(server->protocol, &remote->buf->array, remote->buf->len, &remote->buf->capacity);
|
|
}
|
|
}
|
|
- int err = ss_encrypt(&server_env->cipher, remote->buf, server->e_ctx, BUF_SIZE);
|
|
+ int err = ss_encrypt(&server_env->cipher, remote->buf, server->e_ctx, SOCKET_BUF_SIZE);
|
|
|
|
if (err) {
|
|
LOGE("invalid password or cipher");
|
|
@@ -416,7 +412,7 @@ remote_recv_cb(EV_P_ ev_io *w, int reven
|
|
|
|
ev_timer_again(EV_A_ & remote->recv_ctx->watcher);
|
|
|
|
- ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0);
|
|
+ ssize_t r = recv(remote->fd, server->buf->array, SOCKET_BUF_SIZE, 0);
|
|
|
|
if (r == 0) {
|
|
// connection closed
|
|
@@ -482,7 +478,7 @@ remote_recv_cb(EV_P_ ev_io *w, int reven
|
|
if ( server->buf->len == 0 )
|
|
return;
|
|
|
|
- int err = ss_decrypt(&server_env->cipher, server->buf, server->d_ctx, BUF_SIZE);
|
|
+ int err = ss_decrypt(&server_env->cipher, server->buf, server->d_ctx, SOCKET_BUF_SIZE);
|
|
if (err) {
|
|
LOGE("invalid password or cipher");
|
|
close_and_free_remote(EV_A_ remote);
|
|
@@ -550,7 +546,7 @@ remote_send_cb(EV_P_ ev_io *w, int reven
|
|
// send destaddr
|
|
buffer_t ss_addr_to_send;
|
|
buffer_t *abuf = &ss_addr_to_send;
|
|
- balloc(abuf, BUF_SIZE);
|
|
+ balloc(abuf, SOCKET_BUF_SIZE);
|
|
|
|
if (server->hostname_len > 0
|
|
&& validate_hostname(server->hostname, server->hostname_len)) { // HTTP/SNI
|
|
@@ -591,12 +587,12 @@ remote_send_cb(EV_P_ ev_io *w, int reven
|
|
abuf->len += 2;
|
|
|
|
if (remote->buf->len > 0) {
|
|
- brealloc(remote->buf, remote->buf->len + abuf->len, BUF_SIZE);
|
|
+ brealloc(remote->buf, remote->buf->len + abuf->len, SOCKET_BUF_SIZE);
|
|
memmove(remote->buf->array + abuf->len, remote->buf->array, remote->buf->len);
|
|
memcpy(remote->buf->array, abuf->array, abuf->len);
|
|
remote->buf->len += abuf->len;
|
|
} else {
|
|
- brealloc(remote->buf, abuf->len, BUF_SIZE);
|
|
+ brealloc(remote->buf, abuf->len, SOCKET_BUF_SIZE);
|
|
memcpy(remote->buf->array, abuf->array, abuf->len);
|
|
remote->buf->len = abuf->len;
|
|
}
|
|
@@ -616,7 +612,7 @@ remote_send_cb(EV_P_ ev_io *w, int reven
|
|
}
|
|
}
|
|
|
|
- int err = ss_encrypt(&server_env->cipher, remote->buf, server->e_ctx, BUF_SIZE);
|
|
+ int err = ss_encrypt(&server_env->cipher, remote->buf, server->e_ctx, SOCKET_BUF_SIZE);
|
|
if (err) {
|
|
LOGE("invalid password or cipher");
|
|
close_and_free_remote(EV_A_ remote);
|
|
@@ -683,7 +679,7 @@ new_remote(int fd, int timeout)
|
|
remote->buf = ss_malloc(sizeof(buffer_t));
|
|
remote->recv_ctx = ss_malloc(sizeof(remote_ctx_t));
|
|
remote->send_ctx = ss_malloc(sizeof(remote_ctx_t));
|
|
- balloc(remote->buf, BUF_SIZE);
|
|
+ balloc(remote->buf, SOCKET_BUF_SIZE);
|
|
memset(remote->recv_ctx, 0, sizeof(remote_ctx_t));
|
|
memset(remote->send_ctx, 0, sizeof(remote_ctx_t));
|
|
remote->recv_ctx->connected = 0;
|
|
@@ -741,7 +737,7 @@ new_server(int fd, listen_ctx_t* profile
|
|
server->recv_ctx = ss_malloc(sizeof(server_ctx_t));
|
|
server->send_ctx = ss_malloc(sizeof(server_ctx_t));
|
|
server->buf = ss_malloc(sizeof(buffer_t));
|
|
- balloc(server->buf, BUF_SIZE);
|
|
+ balloc(server->buf, SOCKET_BUF_SIZE);
|
|
memset(server->recv_ctx, 0, sizeof(server_ctx_t));
|
|
memset(server->send_ctx, 0, sizeof(server_ctx_t));
|
|
server->recv_ctx->connected = 0;
|
|
@@ -1028,7 +1024,7 @@ accept_cb(EV_P_ ev_io *w, int revents)
|
|
_server_info.key = enc_get_key(&server_env->cipher);
|
|
_server_info.key_len = enc_get_key_len(&server_env->cipher);
|
|
_server_info.tcp_mss = 1452;
|
|
- _server_info.buffer_size = BUF_SIZE;
|
|
+ _server_info.buffer_size = SOCKET_BUF_SIZE;
|
|
_server_info.cipher_env = &server_env->cipher;
|
|
|
|
if (server_env->obfs_plugin) {
|
|
--- a/src/server.c
|
|
+++ b/src/server.c
|
|
@@ -71,10 +71,6 @@
|
|
#define EWOULDBLOCK EAGAIN
|
|
#endif
|
|
|
|
-#ifndef BUF_SIZE
|
|
-#define BUF_SIZE 2048
|
|
-#endif
|
|
-
|
|
#ifndef SSMAXCONN
|
|
#define SSMAXCONN 1024
|
|
#endif
|
|
@@ -138,13 +134,13 @@ stat_update_cb(EV_P_ ev_timer *watcher,
|
|
|
|
int sfd = -1;
|
|
size_t msgLen;
|
|
- char resp[BUF_SIZE];
|
|
+ char resp[SOCKET_BUF_SIZE];
|
|
|
|
if (verbose) {
|
|
LOGI("update traffic stat: tx: %" PRIu64 " rx: %" PRIu64 "", tx, rx);
|
|
}
|
|
|
|
- snprintf(resp, BUF_SIZE, "stat: {\"%s\":%" PRIu64 "}", server_port, tx + rx);
|
|
+ snprintf(resp, SOCKET_BUF_SIZE, "stat: {\"%s\":%" PRIu64 "}", server_port, tx + rx);
|
|
msgLen = strlen(resp) + 1;
|
|
|
|
ss_addr_t ip_addr = { .host = NULL, .port = NULL };
|
|
@@ -600,14 +596,14 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
ev_timer_again(EV_A_ & server->recv_ctx->watcher);
|
|
}
|
|
|
|
- if (len > BUF_SIZE) {
|
|
+ if (len > SOCKET_BUF_SIZE) {
|
|
ERROR("out of recv buffer");
|
|
close_and_free_remote(EV_A_ remote);
|
|
close_and_free_server(EV_A_ server);
|
|
return;
|
|
}
|
|
|
|
- ssize_t r = recv(server->fd, buf->array + len, BUF_SIZE - len, 0);
|
|
+ ssize_t r = recv(server->fd, buf->array + len, SOCKET_BUF_SIZE - len, 0);
|
|
|
|
if (r == 0) {
|
|
// connection closed
|
|
@@ -649,7 +645,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
buf->len = r;
|
|
}
|
|
|
|
- int err = ss_decrypt(&cipher_env, buf, server->d_ctx, BUF_SIZE);
|
|
+ int err = ss_decrypt(&cipher_env, buf, server->d_ctx, SOCKET_BUF_SIZE);
|
|
|
|
if (err) {
|
|
report_addr(server->fd, MALICIOUS);
|
|
@@ -678,7 +674,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
|
|
if (server->stage == STAGE_HANDSHAKE) {
|
|
size_t header_len = server->header_buf->len;
|
|
- brealloc(server->header_buf, server->buf->len + header_len, BUF_SIZE);
|
|
+ brealloc(server->header_buf, server->buf->len + header_len, SOCKET_BUF_SIZE);
|
|
memcpy(server->header_buf->array + header_len,
|
|
server->buf->array, server->buf->len);
|
|
server->header_buf->len = server->buf->len + header_len;
|
|
@@ -686,7 +682,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
int ret = is_header_complete(server->buf);
|
|
|
|
if (ret == 1) {
|
|
- brealloc(server->buf, server->header_buf->len, BUF_SIZE);
|
|
+ brealloc(server->buf, server->header_buf->len, SOCKET_BUF_SIZE);
|
|
memcpy(server->buf->array, server->header_buf->array, server->header_buf->len);
|
|
server->buf->len = server->header_buf->len;
|
|
bfree(server->header_buf);
|
|
@@ -1086,7 +1082,7 @@ remote_recv_cb(EV_P_ ev_io *w, int reven
|
|
|
|
ev_timer_again(EV_A_ & server->recv_ctx->watcher);
|
|
|
|
- ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0);
|
|
+ ssize_t r = recv(remote->fd, server->buf->array, SOCKET_BUF_SIZE, 0);
|
|
|
|
if (r == 0) {
|
|
// connection closed
|
|
@@ -1112,7 +1108,7 @@ remote_recv_cb(EV_P_ ev_io *w, int reven
|
|
rx += r;
|
|
|
|
server->buf->len = r;
|
|
- int err = ss_encrypt(&cipher_env, server->buf, server->e_ctx, BUF_SIZE);
|
|
+ int err = ss_encrypt(&cipher_env, server->buf, server->e_ctx, SOCKET_BUF_SIZE);
|
|
|
|
if (err) {
|
|
LOGE("invalid password or cipher");
|
|
@@ -1249,7 +1245,7 @@ new_remote(int fd)
|
|
remote->recv_ctx = ss_malloc(sizeof(remote_ctx_t));
|
|
remote->send_ctx = ss_malloc(sizeof(remote_ctx_t));
|
|
remote->buf = ss_malloc(sizeof(buffer_t));
|
|
- balloc(remote->buf, BUF_SIZE);
|
|
+ balloc(remote->buf, SOCKET_BUF_SIZE);
|
|
memset(remote->recv_ctx, 0, sizeof(remote_ctx_t));
|
|
memset(remote->send_ctx, 0, sizeof(remote_ctx_t));
|
|
remote->fd = fd;
|
|
@@ -1313,8 +1309,8 @@ new_server(int fd, listen_ctx_t *listene
|
|
server->header_buf = ss_malloc(sizeof(buffer_t));
|
|
memset(server->recv_ctx, 0, sizeof(server_ctx_t));
|
|
memset(server->send_ctx, 0, sizeof(server_ctx_t));
|
|
- balloc(server->buf, BUF_SIZE);
|
|
- balloc(server->header_buf, BUF_SIZE);
|
|
+ balloc(server->buf, SOCKET_BUF_SIZE);
|
|
+ balloc(server->header_buf, SOCKET_BUF_SIZE);
|
|
server->fd = fd;
|
|
server->recv_ctx->server = server;
|
|
server->recv_ctx->connected = 0;
|
|
--- a/src/tunnel.c
|
|
+++ b/src/tunnel.c
|
|
@@ -67,10 +67,6 @@
|
|
#define EWOULDBLOCK EAGAIN
|
|
#endif
|
|
|
|
-#ifndef BUF_SIZE
|
|
-#define BUF_SIZE 2048
|
|
-#endif
|
|
-
|
|
#include "includeobfs.h" // I don't want to modify makefile
|
|
|
|
static void accept_cb(EV_P_ ev_io *w, int revents);
|
|
@@ -180,7 +176,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
return;
|
|
}
|
|
|
|
- ssize_t r = recv(server->fd, remote->buf->array, BUF_SIZE, 0);
|
|
+ ssize_t r = recv(server->fd, remote->buf->array, SOCKET_BUF_SIZE, 0);
|
|
|
|
if (r == 0) {
|
|
// connection closed
|
|
@@ -209,7 +205,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven
|
|
remote->buf->len = protocol_plugin->client_pre_encrypt(server->protocol, &remote->buf->array, remote->buf->len, &remote->buf->capacity);
|
|
}
|
|
}
|
|
- int err = ss_encrypt(&cipher_env, remote->buf, server->e_ctx, BUF_SIZE);
|
|
+ int err = ss_encrypt(&cipher_env, remote->buf, server->e_ctx, SOCKET_BUF_SIZE);
|
|
|
|
if (err) {
|
|
LOGE("server invalid password or cipher");
|
|
@@ -325,7 +321,7 @@ remote_recv_cb(EV_P_ ev_io *w, int reven
|
|
remote_t *remote = remote_recv_ctx->remote;
|
|
server_t *server = remote->server;
|
|
|
|
- ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0);
|
|
+ ssize_t r = recv(remote->fd, server->buf->array, SOCKET_BUF_SIZE, 0);
|
|
|
|
if (r == 0) {
|
|
// connection closed
|
|
@@ -391,7 +387,7 @@ remote_recv_cb(EV_P_ ev_io *w, int reven
|
|
if ( server->buf->len == 0 )
|
|
return;
|
|
|
|
- int err = ss_decrypt(&cipher_env, server->buf, server->d_ctx, BUF_SIZE);
|
|
+ int err = ss_decrypt(&cipher_env, server->buf, server->d_ctx, SOCKET_BUF_SIZE);
|
|
|
|
if (err) {
|
|
LOGE("invalid password or cipher");
|
|
@@ -456,7 +452,7 @@ remote_send_cb(EV_P_ ev_io *w, int reven
|
|
|
|
buffer_t ss_addr_to_send;
|
|
buffer_t *abuf = &ss_addr_to_send;
|
|
- balloc(abuf, BUF_SIZE);
|
|
+ balloc(abuf, SOCKET_BUF_SIZE);
|
|
|
|
ss_addr_t *sa = &server->destaddr;
|
|
struct cork_ip ip;
|
|
@@ -503,12 +499,12 @@ remote_send_cb(EV_P_ ev_io *w, int reven
|
|
abuf->len += 2;
|
|
|
|
if (remote->buf->len > 0) {
|
|
- brealloc(remote->buf, remote->buf->len + abuf->len, BUF_SIZE);
|
|
+ brealloc(remote->buf, remote->buf->len + abuf->len, SOCKET_BUF_SIZE);
|
|
memmove(remote->buf->array + abuf->len, remote->buf->array, remote->buf->len);
|
|
memcpy(remote->buf->array, abuf->array, abuf->len);
|
|
remote->buf->len += abuf->len;
|
|
} else {
|
|
- brealloc(remote->buf, abuf->len, BUF_SIZE);
|
|
+ brealloc(remote->buf, abuf->len, SOCKET_BUF_SIZE);
|
|
memcpy(remote->buf->array, abuf->array, abuf->len);
|
|
remote->buf->len = abuf->len;
|
|
}
|
|
@@ -528,7 +524,7 @@ remote_send_cb(EV_P_ ev_io *w, int reven
|
|
}
|
|
}
|
|
|
|
- int err = ss_encrypt(&cipher_env, remote->buf, server->e_ctx, BUF_SIZE);
|
|
+ int err = ss_encrypt(&cipher_env, remote->buf, server->e_ctx, SOCKET_BUF_SIZE);
|
|
if (err) {
|
|
LOGE("invalid password or cipher");
|
|
close_and_free_remote(EV_A_ remote);
|
|
@@ -610,7 +606,7 @@ new_remote(int fd, int timeout)
|
|
remote->buf = ss_malloc(sizeof(buffer_t));
|
|
remote->recv_ctx = ss_malloc(sizeof(remote_ctx_t));
|
|
remote->send_ctx = ss_malloc(sizeof(remote_ctx_t));
|
|
- balloc(remote->buf, BUF_SIZE);
|
|
+ balloc(remote->buf, SOCKET_BUF_SIZE);
|
|
memset(remote->recv_ctx, 0, sizeof(remote_ctx_t));
|
|
memset(remote->send_ctx, 0, sizeof(remote_ctx_t));
|
|
remote->fd = fd;
|
|
@@ -665,7 +661,7 @@ new_server(int fd, int method)
|
|
server->buf = ss_malloc(sizeof(buffer_t));
|
|
server->recv_ctx = ss_malloc(sizeof(server_ctx_t));
|
|
server->send_ctx = ss_malloc(sizeof(server_ctx_t));
|
|
- balloc(server->buf, BUF_SIZE);
|
|
+ balloc(server->buf, SOCKET_BUF_SIZE);
|
|
memset(server->recv_ctx, 0, sizeof(server_ctx_t));
|
|
memset(server->send_ctx, 0, sizeof(server_ctx_t));
|
|
server->fd = fd;
|