mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-01 13:03:56 +08:00
💋 Sync 2026-09-20 23:11:08
This commit is contained in:
1 parent
67079f4e22
commit
9c9fea8062
59 files changed
+3560
-986
No files matched your search
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=shadowsocksr-libev
|
||||
PKG_VERSION:=2.5.6
|
||||
PKG_RELEASE:=4
|
||||
PKG_RELEASE:=5
|
||||
|
||||
PKG_LICENSE:=GPL-3.0
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/src/obfs/obfs.c
|
||||
+++ b/src/obfs/obfs.c
|
||||
@@ -88,7 +88,7 @@ obfs_class *new_obfs_class(const char *p
|
||||
@@ -88,10 +88,11 @@ obfs_class *new_obfs_class(const char *p
|
||||
plugin->client_decode = tls12_ticket_auth_client_decode;
|
||||
|
||||
return plugin;
|
||||
@@ -9,7 +9,19 @@
|
||||
obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs_class));
|
||||
plugin->init_data = init_data;
|
||||
plugin->new_obfs = verify_simple_new_obfs;
|
||||
@@ -115,7 +115,7 @@ obfs_class *new_obfs_class(const char *p
|
||||
+ plugin->get_overhead = get_overhead;
|
||||
plugin->get_server_info = get_server_info;
|
||||
plugin->set_server_info = set_server_info;
|
||||
plugin->dispose = verify_simple_dispose;
|
||||
@@ -106,6 +107,7 @@ obfs_class *new_obfs_class(const char *p
|
||||
obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs_class));
|
||||
plugin->init_data = auth_simple_init_data;
|
||||
plugin->new_obfs = auth_simple_new_obfs;
|
||||
+ plugin->get_overhead = get_overhead;
|
||||
plugin->get_server_info = get_server_info;
|
||||
plugin->set_server_info = set_server_info;
|
||||
plugin->dispose = auth_simple_dispose;
|
||||
@@ -115,7 +117,7 @@ obfs_class *new_obfs_class(const char *p
|
||||
plugin->client_udp_pre_encrypt = NULL;
|
||||
plugin->client_udp_post_decrypt = NULL;
|
||||
|
||||
|
||||
@@ -0,0 +1,610 @@
|
||||
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;
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
From 38e83d6b5d4648fb87ae6680c8fa159df54c73ce Mon Sep 17 00:00:00 2001
|
||||
From: Max Lv <max.c.lv@gmail.com>
|
||||
Date: Tue, 30 Apr 2019 09:34:31 +0800
|
||||
Subject: [PATCH] Make sure socket buffer size no larger than max chunk size
|
||||
|
||||
---
|
||||
src/netutils.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/server/netutils.h
|
||||
+++ b/server/netutils.h
|
||||
@@ -60,7 +60,7 @@
|
||||
/** byte size of ip6 address */
|
||||
#define INET6_SIZE 16
|
||||
|
||||
-#define SOCKET_BUF_SIZE (16 * 1024) // 16KB
|
||||
+#define SOCKET_BUF_SIZE (16 * 1024 - 1) // 16383 Byte, equals to the max chunk size
|
||||
|
||||
size_t get_sockaddr_len(struct sockaddr *addr);
|
||||
ssize_t get_sockaddr(char *host, char *port,
|
||||
--- a/src/netutils.h
|
||||
+++ b/src/netutils.h
|
||||
@@ -60,7 +60,7 @@
|
||||
/** byte size of ip6 address */
|
||||
#define INET6_SIZE 16
|
||||
|
||||
-#define SOCKET_BUF_SIZE (16 * 1024) // 16KB
|
||||
+#define SOCKET_BUF_SIZE (16 * 1024 - 1) // 16383 Byte, equals to the max chunk size
|
||||
|
||||
size_t get_sockaddr_len(struct sockaddr *addr);
|
||||
ssize_t get_sockaddr(char *host, char *port,
|
||||
+205
@@ -0,0 +1,205 @@
|
||||
--- a/server/auth.c
|
||||
+++ b/server/auth.c
|
||||
@@ -27,7 +27,7 @@ typedef struct auth_simple_local_data {
|
||||
|
||||
void auth_simple_local_data_init(auth_simple_local_data* local) {
|
||||
local->has_sent_header = 0;
|
||||
- local->recv_buffer = (char*)malloc(16384);
|
||||
+ local->recv_buffer = (char*)malloc(SSR_RECV_BUF_SIZE);
|
||||
local->recv_buffer_size = 0;
|
||||
local->recv_id = 1;
|
||||
local->pack_id = 1;
|
||||
@@ -173,7 +173,7 @@ int auth_simple_client_post_decrypt(obfs
|
||||
char *plaindata = *pplaindata;
|
||||
auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
@@ -290,7 +290,7 @@ int auth_sha1_client_post_decrypt(obfs *
|
||||
char *plaindata = *pplaindata;
|
||||
auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
@@ -428,7 +428,7 @@ int auth_sha1_v2_client_post_decrypt(obf
|
||||
char *plaindata = *pplaindata;
|
||||
auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
@@ -586,7 +586,7 @@ int auth_sha1_v4_client_post_decrypt(obf
|
||||
char *plaindata = *pplaindata;
|
||||
auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
@@ -843,7 +843,7 @@ int auth_aes128_sha1_client_post_decrypt
|
||||
auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;
|
||||
//server_info *server = (server_info*)&self->server;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
--- a/server/obfs.h
|
||||
+++ b/server/obfs.h
|
||||
@@ -10,6 +10,9 @@
|
||||
#include <stdint.h>
|
||||
#include <unistd.h>
|
||||
|
||||
+/* Keep room for a TCP read, a pending obfs record and a protocol frame. */
|
||||
+#define SSR_RECV_BUF_SIZE (32 * 1024)
|
||||
+
|
||||
typedef struct server_info {
|
||||
char host[64];
|
||||
uint16_t port;
|
||||
--- a/server/verify.c
|
||||
+++ b/server/verify.c
|
||||
@@ -9,7 +9,7 @@ typedef struct verify_simple_local_data
|
||||
}verify_simple_local_data;
|
||||
|
||||
void verify_simple_local_data_init(verify_simple_local_data* local) {
|
||||
- local->recv_buffer = (char*)malloc(16384);
|
||||
+ local->recv_buffer = (char*)malloc(SSR_RECV_BUF_SIZE);
|
||||
local->recv_buffer_size = 0;
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ int verify_simple_client_post_decrypt(ob
|
||||
char *plaindata = *pplaindata;
|
||||
verify_simple_local_data *local = (verify_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
@@ -144,7 +144,7 @@ int verify_simple_server_post_decrypt(ob
|
||||
char *plaindata = *pplaindata;
|
||||
verify_simple_local_data *local = (verify_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
{
|
||||
LOGE("verify_simple: wrong buf length %d", local->recv_buffer_size + datalength);
|
||||
return -1;
|
||||
--- a/src/obfs/auth.c
|
||||
+++ b/src/obfs/auth.c
|
||||
@@ -33,7 +33,7 @@ typedef struct auth_simple_local_data {
|
||||
|
||||
void auth_simple_local_data_init(auth_simple_local_data* local) {
|
||||
local->has_sent_header = 0;
|
||||
- local->recv_buffer = (char*)malloc(16384);
|
||||
+ local->recv_buffer = (char*)malloc(SSR_RECV_BUF_SIZE);
|
||||
local->recv_buffer_size = 0;
|
||||
local->recv_id = 1;
|
||||
local->pack_id = 1;
|
||||
@@ -176,7 +176,7 @@ int auth_simple_client_post_decrypt(obfs
|
||||
char *plaindata = *pplaindata;
|
||||
auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
@@ -293,7 +293,7 @@ int auth_sha1_client_post_decrypt(obfs *
|
||||
char *plaindata = *pplaindata;
|
||||
auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
@@ -431,7 +431,7 @@ int auth_sha1_v2_client_post_decrypt(obf
|
||||
char *plaindata = *pplaindata;
|
||||
auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
@@ -589,7 +589,7 @@ int auth_sha1_v4_client_post_decrypt(obf
|
||||
char *plaindata = *pplaindata;
|
||||
auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
@@ -859,7 +859,7 @@ int auth_aes128_sha1_client_post_decrypt
|
||||
auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;
|
||||
//server_info *server = (server_info*)&self->server;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
--- a/src/obfs/auth_chain.c
|
||||
+++ b/src/obfs/auth_chain.c
|
||||
@@ -130,7 +130,7 @@ typedef struct auth_chain_local_data {
|
||||
|
||||
void auth_chain_local_data_init(auth_chain_local_data *local) {
|
||||
local->has_sent_header = 0;
|
||||
- local->recv_buffer = (char *) malloc(16384);
|
||||
+ local->recv_buffer = (char *) malloc(SSR_RECV_BUF_SIZE);
|
||||
local->recv_buffer_size = 0;
|
||||
local->recv_id = 1;
|
||||
local->pack_id = 1;
|
||||
@@ -904,7 +904,7 @@ int auth_chain_a_client_post_decrypt(obf
|
||||
auth_chain_local_data *local = (auth_chain_local_data *) self->l_data;
|
||||
server_info *server = (server_info *) &self->server;
|
||||
uint8_t *recv_buffer = (uint8_t *) local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
--- a/src/obfs/obfs.h
|
||||
+++ b/src/obfs/obfs.h
|
||||
@@ -13,6 +13,9 @@
|
||||
|
||||
#define OBFS_HMAC_SHA1_LEN 10
|
||||
|
||||
+/* Keep room for a TCP read, a pending obfs record and a protocol frame. */
|
||||
+#define SSR_RECV_BUF_SIZE (32 * 1024)
|
||||
+
|
||||
typedef struct {
|
||||
char host[256];
|
||||
uint16_t port;
|
||||
--- a/src/obfs/verify.c
|
||||
+++ b/src/obfs/verify.c
|
||||
@@ -12,7 +12,7 @@ typedef struct verify_simple_local_data
|
||||
}verify_simple_local_data;
|
||||
|
||||
void verify_simple_local_data_init(verify_simple_local_data* local) {
|
||||
- local->recv_buffer = (char*)malloc(16384);
|
||||
+ local->recv_buffer = (char*)malloc(SSR_RECV_BUF_SIZE);
|
||||
local->recv_buffer_size = 0;
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ int verify_simple_client_post_decrypt(ob
|
||||
char *plaindata = *pplaindata;
|
||||
verify_simple_local_data *local = (verify_simple_local_data*)self->l_data;
|
||||
uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;
|
||||
- if (local->recv_buffer_size + datalength > 16384)
|
||||
+ if (local->recv_buffer_size + datalength > SSR_RECV_BUF_SIZE)
|
||||
return -1;
|
||||
memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);
|
||||
local->recv_buffer_size += datalength;
|
||||
Reference in new issue
Block a user