Skip to content

Commit

Permalink
HevSocks5SessionUDP: Revert fix timeout for bidirectional link.
Browse files Browse the repository at this point in the history
This reverts commit 107aed9.
  • Loading branch information
heiher committed Nov 21, 2023
1 parent 04ef7f1 commit 3095dce
Showing 1 changed file with 6 additions and 35 deletions.
41 changes: 6 additions & 35 deletions src/hev-socks5-session-udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,9 @@

#define task_io_yielder hev_socks5_task_io_yielder

typedef enum _HevSocks5UDPAlive HevSocks5UDPAlive;
typedef struct _HevSocks5UDPFrame HevSocks5UDPFrame;
typedef struct _HevSocks5UDPSplice HevSocks5UDPSplice;

enum _HevSocks5UDPAlive
{
HEV_SOCKS5_UDP_ALIVE_F = (1 << 0),
HEV_SOCKS5_UDP_ALIVE_B = (1 << 1),
};

struct _HevSocks5UDPFrame
{
HevListNode node;
Expand All @@ -51,12 +44,10 @@ struct _HevSocks5UDPSplice
{
HevSocks5UDP *udp;
HevTask *task;
HevSocks5UDPAlive alive;
};

static int
hev_socks5_session_udp_fwd_f (HevSocks5SessionUDP *self,
HevSocks5UDPSplice *splice)
hev_socks5_session_udp_fwd_f (HevSocks5SessionUDP *self)
{
HevSocks5UDPFrame *frame;
struct sockaddr *addr;
Expand All @@ -72,12 +63,8 @@ hev_socks5_session_udp_fwd_f (HevSocks5SessionUDP *self,
break;

res = task_io_yielder (HEV_TASK_WAITIO, self);
if (res < 0) {
splice->alive &= ~HEV_SOCKS5_UDP_ALIVE_F;
if (splice->alive && hev_socks5_get_timeout (HEV_SOCKS5 (self)))
return 0;
if (res < 0)
return -1;
}
}

frame = container_of (node, HevSocks5UDPFrame, node);
Expand All @@ -86,17 +73,10 @@ hev_socks5_session_udp_fwd_f (HevSocks5SessionUDP *self,
udp = HEV_SOCKS5_UDP (self);
res = hev_socks5_udp_sendto (udp, frame->data, frame->len, addr);
if (res <= 0) {
if (res < -1) {
splice->alive &= ~HEV_SOCKS5_UDP_ALIVE_F;
if (splice->alive && hev_socks5_get_timeout (HEV_SOCKS5 (self)))
return 0;
}
LOG_D ("%p socks5 session udp fwd f send", self);
return -1;
res = -1;
}

splice->alive |= HEV_SOCKS5_UDP_ALIVE_F;

hev_list_del (&self->frame_list, node);
hev_free (frame->data);
hev_free (frame);
Expand All @@ -106,8 +86,7 @@ hev_socks5_session_udp_fwd_f (HevSocks5SessionUDP *self,
}

static int
hev_socks5_session_udp_fwd_b (HevSocks5SessionUDP *self,
HevSocks5UDPSplice *splice)
hev_socks5_session_udp_fwd_b (HevSocks5SessionUDP *self)
{
HevSocks5UDP *udp = HEV_SOCKS5_UDP (self);
struct sockaddr_in6 addr = { 0 };
Expand All @@ -125,11 +104,6 @@ hev_socks5_session_udp_fwd_b (HevSocks5SessionUDP *self,

res = hev_socks5_udp_recvfrom (udp, buf, sizeof (buf), saddr);
if (res <= 0) {
if (res < -1) {
splice->alive &= ~HEV_SOCKS5_UDP_ALIVE_B;
if (splice->alive)
return 0;
}
LOG_D ("%p socks5 session udp fwd b recv", self);
return -1;
}
Expand All @@ -148,8 +122,6 @@ hev_socks5_session_udp_fwd_b (HevSocks5SessionUDP *self,
return -1;
}

splice->alive |= HEV_SOCKS5_UDP_ALIVE_B;

return 0;
}

Expand Down Expand Up @@ -217,7 +189,7 @@ splice_task_entry (void *data)
hev_task_mod_fd (task, fd, POLLIN);

for (;;) {
if (hev_socks5_session_udp_fwd_b (self, splice) < 0)
if (hev_socks5_session_udp_fwd_b (self) < 0)
break;
}

Expand Down Expand Up @@ -268,7 +240,6 @@ hev_socks5_session_udp_splice (HevSocks5Session *base)

splice.task = task;
splice.udp = self;
splice.alive = HEV_SOCKS5_UDP_ALIVE_F | HEV_SOCKS5_UDP_ALIVE_B;

stack_size = hev_config_get_misc_task_stack_size ();
task = hev_task_new (stack_size);
Expand All @@ -280,7 +251,7 @@ hev_socks5_session_udp_splice (HevSocks5Session *base)
hev_task_add_fd (splice.task, fd, POLLOUT);

for (;;) {
if (hev_socks5_session_udp_fwd_f (self, &splice) < 0)
if (hev_socks5_session_udp_fwd_f (self) < 0)
break;
}

Expand Down

0 comments on commit 3095dce

Please sign in to comment.