Skip to content

Commit aeb6fce

Browse files
committed
Merge pull request #140 from madeye/v1.5.1
Fix a bug introduced by fast open.
2 parents 7a1f76b + 6f1063b commit aeb6fce

File tree

7 files changed

+48
-45
lines changed

7 files changed

+48
-45
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ It is a port of [shadowsocks](https://github.com/clowwindy/shadowsocks)
1111
created by [@clowwindy](https://github.com/clowwindy) maintained by
1212
[@madeye](https://github.com/madeye) and [@linusyang](https://github.com/linusyang).
1313

14-
Current version: 1.5.0 | [![Build Status](https://travis-ci.org/madeye/shadowsocks-libev.png?branch=master)](https://travis-ci.org/madeye/shadowsocks-libev) | [Changelog](Changes)
14+
Current version: 1.5.1 | [![Build Status](https://travis-ci.org/madeye/shadowsocks-libev.png?branch=master)](https://travis-ci.org/madeye/shadowsocks-libev) | [Changelog](Changes)
1515

1616
Features
1717
--------

configure

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#! /bin/sh
22
# Guess values for system-dependent variables and create Makefiles.
3-
# Generated by GNU Autoconf 2.69 for shadowsocks 1.5.0.
3+
# Generated by GNU Autoconf 2.69 for shadowsocks 1.5.1.
44
#
55
# Report bugs to <max.c.lv@gmail.com>.
66
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
590590
# Identity of this package.
591591
PACKAGE_NAME='shadowsocks'
592592
PACKAGE_TARNAME='shadowsocks'
593-
PACKAGE_VERSION='1.5.0'
594-
PACKAGE_STRING='shadowsocks 1.5.0'
593+
PACKAGE_VERSION='1.5.1'
594+
PACKAGE_STRING='shadowsocks 1.5.1'
595595
PACKAGE_BUGREPORT='max.c.lv@gmail.com'
596596
PACKAGE_URL=''
597597

@@ -1325,7 +1325,7 @@ if test "$ac_init_help" = "long"; then
13251325
# Omit some internal or obsolete options to make the list less imposing.
13261326
# This message is too long to be a string in the A/UX 3.1 sh.
13271327
cat <<_ACEOF
1328-
\`configure' configures shadowsocks 1.5.0 to adapt to many kinds of systems.
1328+
\`configure' configures shadowsocks 1.5.1 to adapt to many kinds of systems.
13291329
13301330
Usage: $0 [OPTION]... [VAR=VALUE]...
13311331
@@ -1395,7 +1395,7 @@ fi
13951395

13961396
if test -n "$ac_init_help"; then
13971397
case $ac_init_help in
1398-
short | recursive ) echo "Configuration of shadowsocks 1.5.0:";;
1398+
short | recursive ) echo "Configuration of shadowsocks 1.5.1:";;
13991399
esac
14001400
cat <<\_ACEOF
14011401
@@ -1512,7 +1512,7 @@ fi
15121512
test -n "$ac_init_help" && exit $ac_status
15131513
if $ac_init_version; then
15141514
cat <<\_ACEOF
1515-
shadowsocks configure 1.5.0
1515+
shadowsocks configure 1.5.1
15161516
generated by GNU Autoconf 2.69
15171517
15181518
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2035,7 +2035,7 @@ cat >config.log <<_ACEOF
20352035
This file contains any messages produced by compilers while
20362036
running configure, to aid debugging if configure makes a mistake.
20372037
2038-
It was created by shadowsocks $as_me 1.5.0, which was
2038+
It was created by shadowsocks $as_me 1.5.1, which was
20392039
generated by GNU Autoconf 2.69. Invocation command line was
20402040
20412041
$ $0 $@
@@ -2856,7 +2856,7 @@ fi
28562856

28572857
# Define the identity of the package.
28582858
PACKAGE='shadowsocks'
2859-
VERSION='1.5.0'
2859+
VERSION='1.5.1'
28602860

28612861

28622862
cat >>confdefs.h <<_ACEOF
@@ -15526,7 +15526,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
1552615526
# report actual input values of CONFIG_FILES etc. instead of their
1552715527
# values after options handling.
1552815528
ac_log="
15529-
This file was extended by shadowsocks $as_me 1.5.0, which was
15529+
This file was extended by shadowsocks $as_me 1.5.1, which was
1553015530
generated by GNU Autoconf 2.69. Invocation command line was
1553115531
1553215532
CONFIG_FILES = $CONFIG_FILES
@@ -15592,7 +15592,7 @@ _ACEOF
1559215592
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
1559315593
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
1559415594
ac_cs_version="\\
15595-
shadowsocks config.status 1.5.0
15595+
shadowsocks config.status 1.5.1
1559615596
configured by $0, generated by GNU Autoconf 2.69,
1559715597
with options \\"\$ac_cs_config\\"
1559815598

configure.ac

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ dnl -*- Autoconf -*-
22
dnl Process this file with autoconf to produce a configure script.
33

44
AC_PREREQ([2.67])
5-
AC_INIT([shadowsocks], [1.5.0], [max.c.lv@gmail.com])
5+
AC_INIT([shadowsocks], [1.5.1], [max.c.lv@gmail.com])
66
AC_CONFIG_SRCDIR([src/encrypt.c])
77
AC_CONFIG_HEADERS([config.h])
88
AC_CONFIG_AUX_DIR(auto)

debian/changelog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
shadowsocks (1.5.1-1) unstable; urgency=low
2+
3+
* Fix a bug of tcp fast open.
4+
5+
-- Max Lv <max.c.lv@gmail.com> Sat, 08 Nov 2014 19:45:37 +0900
6+
17
shadowsocks (1.5.0-1) unstable; urgency=low
28

39
* Support to build static or shared library.

openwrt/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
include $(TOPDIR)/rules.mk
22

33
PKG_NAME:=shadowsocks-libev
4-
PKG_VERSION:=1.5.0
4+
PKG_VERSION:=1.5.1
55
PKG_RELEASE=$(PKG_SOURCE_VERSION)
66

77
PKG_SOURCE_URL:=https://github.com/madeye/shadowsocks-libev/archive

src/local.c

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents)
203203
}
204204
}
205205

206-
while (r > 0)
206+
while (1)
207207
{
208208
// local socks5 server
209209
if (server->stage == 5)
@@ -215,27 +215,9 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents)
215215
return;
216216
}
217217

218-
// Copy to remote->buf
219-
if (buf != remote->buf) {
220-
memcpy(remote->buf, buf, r);
221-
}
222-
223218
// insert shadowsocks header
224219
if (!remote->direct)
225220
{
226-
if (!remote->send_ctx->connected)
227-
{
228-
char *tmp = malloc(max(BUF_SIZE, r + server->addr_len));
229-
230-
memcpy(tmp, server->addr_to_send, server->addr_len);
231-
memcpy(tmp + server->addr_len, remote->buf, r);
232-
r += server->addr_len;
233-
234-
// deallocate
235-
free(remote->buf);
236-
remote->buf = tmp;
237-
}
238-
239221
remote->buf = ss_encrypt(BUF_SIZE, remote->buf, &r, server->e_ctx);
240222

241223
if (remote->buf == NULL)
@@ -342,7 +324,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents)
342324
}
343325

344326
// all processed
345-
r = 0;
327+
return;
346328
}
347329
else if (server->stage == 0)
348330
{
@@ -352,8 +334,6 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents)
352334
char *send_buf = (char *)&response;
353335
send(server->fd, send_buf, sizeof(response), 0);
354336
server->stage = 1;
355-
r -= 3;
356-
buf += 3;
357337
return;
358338
}
359339
else if (server->stage == 1)
@@ -452,12 +432,10 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents)
452432
return;
453433
}
454434

455-
server->addr_to_send = ss_addr_to_send;
456-
server->addr_len = addr_len;
457435
server->stage = 5;
458436

459-
r -= (4 + addr_len);
460-
buf += (4 + addr_len);
437+
r -= (3 + addr_len);
438+
buf += (3 + addr_len);
461439

462440
if (verbose)
463441
{
@@ -486,6 +464,23 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents)
486464
return;
487465
}
488466

467+
if (!remote->direct)
468+
{
469+
memcpy(remote->buf, ss_addr_to_send, addr_len);
470+
if (r > 0)
471+
{
472+
memcpy(remote->buf + addr_len, buf, r);
473+
}
474+
r += addr_len;
475+
}
476+
else
477+
{
478+
if (r > 0)
479+
{
480+
memcpy(remote->buf, buf, r);
481+
}
482+
}
483+
489484
server->remote = remote;
490485
remote->server = server;
491486
}
@@ -675,6 +670,14 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents)
675670
ev_timer_stop(EV_A_ &remote_send_ctx->watcher);
676671
ev_timer_start(EV_A_ &remote->recv_ctx->watcher);
677672
ev_io_start(EV_A_ &remote->recv_ctx->io);
673+
674+
// no need to send any data
675+
if (remote->buf_len == 0)
676+
{
677+
ev_io_stop(EV_A_ &remote_send_ctx->io);
678+
ev_io_start(EV_A_ &server->recv_ctx->io);
679+
return;
680+
}
678681
}
679682
else
680683
{
@@ -838,10 +841,6 @@ static void free_server(struct server *server)
838841
{
839842
free(server->buf);
840843
}
841-
if (server->addr_to_send != NULL)
842-
{
843-
free(server->addr_to_send);
844-
}
845844
free(server->recv_ctx);
846845
free(server->send_ctx);
847846
free(server);

src/local.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ struct server
5454
ssize_t buf_len;
5555
ssize_t buf_idx;
5656
char *buf; // server send from, remote recv into
57-
int addr_len;
58-
char *addr_to_send;
5957
char stage;
6058
struct enc_ctx *e_ctx;
6159
struct enc_ctx *d_ctx;

0 commit comments

Comments
 (0)