Browse Source

Refine ss-tunnel

pull/1186/head
Max Lv 8 years ago
parent
commit
116e177657
2 changed files with 9 additions and 9 deletions
  1. 2
      src/redir.c
  2. 16
      src/tunnel.c

2
src/redir.c

@ -102,7 +102,7 @@ static struct ev_signal sigint_watcher;
static struct ev_signal sigterm_watcher;
static struct ev_signal sigchld_watcher;
int
static int
getdestaddr(int fd, struct sockaddr_storage *destaddr)
{
socklen_t socklen = sizeof(*destaddr);

16
src/tunnel.c

@ -325,12 +325,13 @@ remote_recv_cb(EV_P_ ev_io *w, int revents)
server->buf->len = r;
int err = crypto->decrypt(server->buf, server->d_ctx, BUF_SIZE);
if (err) {
if (err == CRYPTO_ERROR) {
LOGE("invalid password or cipher");
close_and_free_remote(EV_A_ remote);
close_and_free_server(EV_A_ server);
return;
} else if (err == CRYPTO_NEED_MORE) {
return; // Wait for more
}
int s = send(server->fd, server->buf->data, server->buf->len, 0);
@ -354,8 +355,8 @@ remote_recv_cb(EV_P_ ev_io *w, int revents)
ev_io_start(EV_A_ & server->send_ctx->io);
}
// Disable TCP_NODELAY after the first response are sent
if (!remote->recv_ctx->connected) {
// Disable TCP_NODELAY after the first response are sent
int opt = 0;
setsockopt(server->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));
setsockopt(remote->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));
@ -498,12 +499,11 @@ static remote_t *
new_remote(int fd, int timeout)
{
remote_t *remote = ss_malloc(sizeof(remote_t));
memset(remote, 0, sizeof(remote_t));
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));
remote->buf = ss_malloc(sizeof(buffer_t));
balloc(remote->buf, BUF_SIZE);
memset(remote->recv_ctx, 0, sizeof(remote_ctx_t));
memset(remote->send_ctx, 0, sizeof(remote_ctx_t));
@ -527,7 +527,7 @@ free_remote(remote_t *remote)
if (remote->server != NULL) {
remote->server->remote = NULL;
}
if (remote->buf) {
if (remote->buf != NULL) {
bfree(remote->buf);
ss_free(remote->buf);
}
@ -554,9 +554,9 @@ new_server(int fd)
server_t *server = ss_malloc(sizeof(server_t));
memset(server, 0, sizeof(server_t));
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));
server->buf = ss_malloc(sizeof(buffer_t));
balloc(server->buf, BUF_SIZE);
memset(server->recv_ctx, 0, sizeof(server_ctx_t));
memset(server->send_ctx, 0, sizeof(server_ctx_t));
@ -591,7 +591,7 @@ free_server(server_t *server)
crypto->ctx_release(server->d_ctx);
ss_free(server->d_ctx);
}
if (server->buf) {
if (server->buf != NULL) {
bfree(server->buf);
ss_free(server->buf);
}

Loading…
Cancel
Save